@sis-cc/dotstatsuite-components 23.2.0 → 24.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (737) hide show
  1. package/dist/index.js +1 -5
  2. package/dist/index.js.map +1 -1
  3. package/package.json +31 -31
  4. package/dist/_virtual/_commonjsHelpers.js +0 -35
  5. package/dist/_virtual/_commonjsHelpers.js.map +0 -1
  6. package/dist/_virtual/_rollupPluginBabelHelpers.js +0 -12
  7. package/dist/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  8. package/dist/_virtual/colorManipulator.js +0 -6
  9. package/dist/_virtual/colorManipulator.js.map +0 -1
  10. package/dist/_virtual/colorManipulator2.js +0 -4
  11. package/dist/_virtual/colorManipulator2.js.map +0 -1
  12. package/dist/_virtual/index.js +0 -7
  13. package/dist/_virtual/index.js.map +0 -1
  14. package/dist/_virtual/index2.js +0 -7
  15. package/dist/_virtual/index2.js.map +0 -1
  16. package/dist/_virtual/index3.js +0 -8
  17. package/dist/_virtual/index3.js.map +0 -1
  18. package/dist/_virtual/index4.js +0 -4
  19. package/dist/_virtual/index4.js.map +0 -1
  20. package/dist/_virtual/index5.js +0 -6
  21. package/dist/_virtual/index5.js.map +0 -1
  22. package/dist/_virtual/index6.js +0 -4
  23. package/dist/_virtual/index6.js.map +0 -1
  24. package/dist/_virtual/index7.js +0 -4
  25. package/dist/_virtual/index7.js.map +0 -1
  26. package/dist/_virtual/interopRequireDefault.js +0 -4
  27. package/dist/_virtual/interopRequireDefault.js.map +0 -1
  28. package/dist/_virtual/jsx-runtime.js +0 -4
  29. package/dist/_virtual/jsx-runtime.js.map +0 -1
  30. package/dist/_virtual/jsx-runtime2.js +0 -6
  31. package/dist/_virtual/jsx-runtime2.js.map +0 -1
  32. package/dist/_virtual/react-is.development.js +0 -4
  33. package/dist/_virtual/react-is.development.js.map +0 -1
  34. package/dist/_virtual/react-is.development2.js +0 -4
  35. package/dist/_virtual/react-is.development2.js.map +0 -1
  36. package/dist/_virtual/react-is.production.js +0 -4
  37. package/dist/_virtual/react-is.production.js.map +0 -1
  38. package/dist/_virtual/react-is.production.min.js +0 -4
  39. package/dist/_virtual/react-is.production.min.js.map +0 -1
  40. package/dist/_virtual/react-jsx-runtime.development.js +0 -4
  41. package/dist/_virtual/react-jsx-runtime.development.js.map +0 -1
  42. package/dist/_virtual/react-jsx-runtime.production.min.js +0 -4
  43. package/dist/_virtual/react-jsx-runtime.production.min.js.map +0 -1
  44. package/dist/bridge-d3-react/src/index.js +0 -17
  45. package/dist/bridge-d3-react/src/index.js.map +0 -1
  46. package/dist/bridge-d3-react/src/react-chart-factory.js +0 -44
  47. package/dist/bridge-d3-react/src/react-chart-factory.js.map +0 -1
  48. package/dist/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js +0 -8
  49. package/dist/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js.map +0 -1
  50. package/dist/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js +0 -8
  51. package/dist/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js.map +0 -1
  52. package/dist/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js +0 -7
  53. package/dist/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js.map +0 -1
  54. package/dist/node_modules/@babel/runtime/helpers/esm/createClass.js +0 -16
  55. package/dist/node_modules/@babel/runtime/helpers/esm/createClass.js.map +0 -1
  56. package/dist/node_modules/@babel/runtime/helpers/esm/extends.js +0 -12
  57. package/dist/node_modules/@babel/runtime/helpers/esm/extends.js.map +0 -1
  58. package/dist/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js +0 -8
  59. package/dist/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js.map +0 -1
  60. package/dist/node_modules/@babel/runtime/helpers/esm/iterableToArray.js +0 -6
  61. package/dist/node_modules/@babel/runtime/helpers/esm/iterableToArray.js.map +0 -1
  62. package/dist/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js +0 -6
  63. package/dist/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js.map +0 -1
  64. package/dist/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js +0 -12
  65. package/dist/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js.map +0 -1
  66. package/dist/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js +0 -8
  67. package/dist/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js.map +0 -1
  68. package/dist/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js +0 -11
  69. package/dist/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js.map +0 -1
  70. package/dist/node_modules/@babel/runtime/helpers/esm/toPrimitive.js +0 -15
  71. package/dist/node_modules/@babel/runtime/helpers/esm/toPrimitive.js.map +0 -1
  72. package/dist/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js +0 -10
  73. package/dist/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js.map +0 -1
  74. package/dist/node_modules/@babel/runtime/helpers/esm/typeof.js +0 -12
  75. package/dist/node_modules/@babel/runtime/helpers/esm/typeof.js.map +0 -1
  76. package/dist/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js +0 -12
  77. package/dist/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js.map +0 -1
  78. package/dist/node_modules/@babel/runtime/helpers/interopRequireDefault.js +0 -20
  79. package/dist/node_modules/@babel/runtime/helpers/interopRequireDefault.js.map +0 -1
  80. package/dist/node_modules/@mui/material/colors/blue.js +0 -9
  81. package/dist/node_modules/@mui/material/colors/blue.js.map +0 -1
  82. package/dist/node_modules/@mui/material/colors/common.js +0 -7
  83. package/dist/node_modules/@mui/material/colors/common.js.map +0 -1
  84. package/dist/node_modules/@mui/material/colors/green.js +0 -10
  85. package/dist/node_modules/@mui/material/colors/green.js.map +0 -1
  86. package/dist/node_modules/@mui/material/colors/grey.js +0 -19
  87. package/dist/node_modules/@mui/material/colors/grey.js.map +0 -1
  88. package/dist/node_modules/@mui/material/colors/lightBlue.js +0 -9
  89. package/dist/node_modules/@mui/material/colors/lightBlue.js.map +0 -1
  90. package/dist/node_modules/@mui/material/colors/orange.js +0 -9
  91. package/dist/node_modules/@mui/material/colors/orange.js.map +0 -1
  92. package/dist/node_modules/@mui/material/colors/purple.js +0 -10
  93. package/dist/node_modules/@mui/material/colors/purple.js.map +0 -1
  94. package/dist/node_modules/@mui/material/colors/red.js +0 -9
  95. package/dist/node_modules/@mui/material/colors/red.js.map +0 -1
  96. package/dist/node_modules/@mui/material/styles/createMixins.js +0 -20
  97. package/dist/node_modules/@mui/material/styles/createMixins.js.map +0 -1
  98. package/dist/node_modules/@mui/material/styles/createPalette.js +0 -309
  99. package/dist/node_modules/@mui/material/styles/createPalette.js.map +0 -1
  100. package/dist/node_modules/@mui/material/styles/createTheme.js +0 -86
  101. package/dist/node_modules/@mui/material/styles/createTheme.js.map +0 -1
  102. package/dist/node_modules/@mui/material/styles/createTransitions.js +0 -92
  103. package/dist/node_modules/@mui/material/styles/createTransitions.js.map +0 -1
  104. package/dist/node_modules/@mui/material/styles/createTypography.js +0 -94
  105. package/dist/node_modules/@mui/material/styles/createTypography.js.map +0 -1
  106. package/dist/node_modules/@mui/material/styles/defaultTheme.js +0 -6
  107. package/dist/node_modules/@mui/material/styles/defaultTheme.js.map +0 -1
  108. package/dist/node_modules/@mui/material/styles/identifier.js +0 -4
  109. package/dist/node_modules/@mui/material/styles/identifier.js.map +0 -1
  110. package/dist/node_modules/@mui/material/styles/shadows.js +0 -12
  111. package/dist/node_modules/@mui/material/styles/shadows.js.map +0 -1
  112. package/dist/node_modules/@mui/material/styles/useTheme.js +0 -16
  113. package/dist/node_modules/@mui/material/styles/useTheme.js.map +0 -1
  114. package/dist/node_modules/@mui/material/styles/zIndex.js +0 -15
  115. package/dist/node_modules/@mui/material/styles/zIndex.js.map +0 -1
  116. package/dist/node_modules/@mui/private-theming/ThemeProvider/nested.js +0 -5
  117. package/dist/node_modules/@mui/private-theming/ThemeProvider/nested.js.map +0 -1
  118. package/dist/node_modules/@mui/private-theming/useTheme/ThemeContext.js +0 -9
  119. package/dist/node_modules/@mui/private-theming/useTheme/ThemeContext.js.map +0 -1
  120. package/dist/node_modules/@mui/private-theming/useTheme/useTheme.js +0 -14
  121. package/dist/node_modules/@mui/private-theming/useTheme/useTheme.js.map +0 -1
  122. package/dist/node_modules/@mui/styles/StylesProvider/StylesProvider.js +0 -151
  123. package/dist/node_modules/@mui/styles/StylesProvider/StylesProvider.js.map +0 -1
  124. package/dist/node_modules/@mui/styles/createGenerateClassName/createGenerateClassName.js +0 -66
  125. package/dist/node_modules/@mui/styles/createGenerateClassName/createGenerateClassName.js.map +0 -1
  126. package/dist/node_modules/@mui/styles/getStylesCreator/getStylesCreator.js +0 -52
  127. package/dist/node_modules/@mui/styles/getStylesCreator/getStylesCreator.js.map +0 -1
  128. package/dist/node_modules/@mui/styles/getStylesCreator/noopTheme.js +0 -5
  129. package/dist/node_modules/@mui/styles/getStylesCreator/noopTheme.js.map +0 -1
  130. package/dist/node_modules/@mui/styles/jssPreset/jssPreset.js +0 -21
  131. package/dist/node_modules/@mui/styles/jssPreset/jssPreset.js.map +0 -1
  132. package/dist/node_modules/@mui/styles/makeStyles/indexCounter.js +0 -22
  133. package/dist/node_modules/@mui/styles/makeStyles/indexCounter.js.map +0 -1
  134. package/dist/node_modules/@mui/styles/makeStyles/makeStyles.js +0 -230
  135. package/dist/node_modules/@mui/styles/makeStyles/makeStyles.js.map +0 -1
  136. package/dist/node_modules/@mui/styles/makeStyles/multiKeyStore.js +0 -23
  137. package/dist/node_modules/@mui/styles/makeStyles/multiKeyStore.js.map +0 -1
  138. package/dist/node_modules/@mui/styles/mergeClasses/mergeClasses.js +0 -37
  139. package/dist/node_modules/@mui/styles/mergeClasses/mergeClasses.js.map +0 -1
  140. package/dist/node_modules/@mui/styles/propsToClassKey/propsToClassKey.js +0 -31
  141. package/dist/node_modules/@mui/styles/propsToClassKey/propsToClassKey.js.map +0 -1
  142. package/dist/node_modules/@mui/styles/useTheme/index.js +0 -10
  143. package/dist/node_modules/@mui/styles/useTheme/index.js.map +0 -1
  144. package/dist/node_modules/@mui/system/colorManipulator.js +0 -386
  145. package/dist/node_modules/@mui/system/colorManipulator.js.map +0 -1
  146. package/dist/node_modules/@mui/system/esm/borders.js +0 -52
  147. package/dist/node_modules/@mui/system/esm/borders.js.map +0 -1
  148. package/dist/node_modules/@mui/system/esm/breakpoints.js +0 -67
  149. package/dist/node_modules/@mui/system/esm/breakpoints.js.map +0 -1
  150. package/dist/node_modules/@mui/system/esm/compose.js +0 -27
  151. package/dist/node_modules/@mui/system/esm/compose.js.map +0 -1
  152. package/dist/node_modules/@mui/system/esm/createTheme/applyStyles.js +0 -77
  153. package/dist/node_modules/@mui/system/esm/createTheme/applyStyles.js.map +0 -1
  154. package/dist/node_modules/@mui/system/esm/createTheme/createBreakpoints.js +0 -83
  155. package/dist/node_modules/@mui/system/esm/createTheme/createBreakpoints.js.map +0 -1
  156. package/dist/node_modules/@mui/system/esm/createTheme/createSpacing.js +0 -35
  157. package/dist/node_modules/@mui/system/esm/createTheme/createSpacing.js.map +0 -1
  158. package/dist/node_modules/@mui/system/esm/createTheme/createTheme.js +0 -46
  159. package/dist/node_modules/@mui/system/esm/createTheme/createTheme.js.map +0 -1
  160. package/dist/node_modules/@mui/system/esm/createTheme/shape.js +0 -6
  161. package/dist/node_modules/@mui/system/esm/createTheme/shape.js.map +0 -1
  162. package/dist/node_modules/@mui/system/esm/cssGrid.js +0 -87
  163. package/dist/node_modules/@mui/system/esm/cssGrid.js.map +0 -1
  164. package/dist/node_modules/@mui/system/esm/memoize.js +0 -12
  165. package/dist/node_modules/@mui/system/esm/memoize.js.map +0 -1
  166. package/dist/node_modules/@mui/system/esm/merge.js +0 -13
  167. package/dist/node_modules/@mui/system/esm/merge.js.map +0 -1
  168. package/dist/node_modules/@mui/system/esm/palette.js +0 -29
  169. package/dist/node_modules/@mui/system/esm/palette.js.map +0 -1
  170. package/dist/node_modules/@mui/system/esm/responsivePropType.js +0 -6
  171. package/dist/node_modules/@mui/system/esm/responsivePropType.js.map +0 -1
  172. package/dist/node_modules/@mui/system/esm/sizing.js +0 -68
  173. package/dist/node_modules/@mui/system/esm/sizing.js.map +0 -1
  174. package/dist/node_modules/@mui/system/esm/spacing.js +0 -145
  175. package/dist/node_modules/@mui/system/esm/spacing.js.map +0 -1
  176. package/dist/node_modules/@mui/system/esm/style.js +0 -78
  177. package/dist/node_modules/@mui/system/esm/style.js.map +0 -1
  178. package/dist/node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js +0 -294
  179. package/dist/node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js.map +0 -1
  180. package/dist/node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js +0 -137
  181. package/dist/node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js.map +0 -1
  182. package/dist/node_modules/@mui/system/esm/useTheme.js +0 -10
  183. package/dist/node_modules/@mui/system/esm/useTheme.js.map +0 -1
  184. package/dist/node_modules/@mui/system/esm/useThemeWithoutDefault.js +0 -13
  185. package/dist/node_modules/@mui/system/esm/useThemeWithoutDefault.js.map +0 -1
  186. package/dist/node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js +0 -19
  187. package/dist/node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js.map +0 -1
  188. package/dist/node_modules/@mui/utils/esm/capitalize/capitalize.js +0 -15
  189. package/dist/node_modules/@mui/utils/esm/capitalize/capitalize.js.map +0 -1
  190. package/dist/node_modules/@mui/utils/esm/clamp/clamp.js +0 -6
  191. package/dist/node_modules/@mui/utils/esm/clamp/clamp.js.map +0 -1
  192. package/dist/node_modules/@mui/utils/esm/clamp/index.js +0 -2
  193. package/dist/node_modules/@mui/utils/esm/clamp/index.js.map +0 -1
  194. package/dist/node_modules/@mui/utils/esm/deepmerge/deepmerge.js +0 -46
  195. package/dist/node_modules/@mui/utils/esm/deepmerge/deepmerge.js.map +0 -1
  196. package/dist/node_modules/@mui/utils/esm/exactProp/exactProp.js +0 -24
  197. package/dist/node_modules/@mui/utils/esm/exactProp/exactProp.js.map +0 -1
  198. package/dist/node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js +0 -22
  199. package/dist/node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js.map +0 -1
  200. package/dist/node_modules/@mui/utils/esm/formatMuiErrorMessage/index.js +0 -2
  201. package/dist/node_modules/@mui/utils/esm/formatMuiErrorMessage/index.js.map +0 -1
  202. package/dist/node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js +0 -23
  203. package/dist/node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js.map +0 -1
  204. package/dist/node_modules/@mui/utils/esm/getDisplayName/getDisplayName.js +0 -50
  205. package/dist/node_modules/@mui/utils/esm/getDisplayName/getDisplayName.js.map +0 -1
  206. package/dist/node_modules/@mui/utils/node_modules/react-is/cjs/react-is.development.js +0 -143
  207. package/dist/node_modules/@mui/utils/node_modules/react-is/cjs/react-is.development.js.map +0 -1
  208. package/dist/node_modules/@mui/utils/node_modules/react-is/cjs/react-is.production.js +0 -140
  209. package/dist/node_modules/@mui/utils/node_modules/react-is/cjs/react-is.production.js.map +0 -1
  210. package/dist/node_modules/@mui/utils/node_modules/react-is/index.js +0 -20
  211. package/dist/node_modules/@mui/utils/node_modules/react-is/index.js.map +0 -1
  212. package/dist/node_modules/css-vendor/dist/css-vendor.esm.js +0 -574
  213. package/dist/node_modules/css-vendor/dist/css-vendor.esm.js.map +0 -1
  214. package/dist/node_modules/date-fns/esm/_lib/defaultOptions/index.js +0 -7
  215. package/dist/node_modules/date-fns/esm/_lib/defaultOptions/index.js.map +0 -1
  216. package/dist/node_modules/date-fns/esm/_lib/isSameUTCWeek/index.js +0 -12
  217. package/dist/node_modules/date-fns/esm/_lib/isSameUTCWeek/index.js.map +0 -1
  218. package/dist/node_modules/date-fns/esm/_lib/requiredArgs/index.js +0 -8
  219. package/dist/node_modules/date-fns/esm/_lib/requiredArgs/index.js.map +0 -1
  220. package/dist/node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js +0 -25
  221. package/dist/node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js.map +0 -1
  222. package/dist/node_modules/date-fns/esm/_lib/toInteger/index.js +0 -13
  223. package/dist/node_modules/date-fns/esm/_lib/toInteger/index.js.map +0 -1
  224. package/dist/node_modules/date-fns/esm/getISOWeek/index.js +0 -39
  225. package/dist/node_modules/date-fns/esm/getISOWeek/index.js.map +0 -1
  226. package/dist/node_modules/date-fns/esm/getISOWeekYear/index.js +0 -47
  227. package/dist/node_modules/date-fns/esm/getISOWeekYear/index.js.map +0 -1
  228. package/dist/node_modules/date-fns/esm/getTime/index.js +0 -29
  229. package/dist/node_modules/date-fns/esm/getTime/index.js.map +0 -1
  230. package/dist/node_modules/date-fns/esm/isFriday/index.js +0 -27
  231. package/dist/node_modules/date-fns/esm/isFriday/index.js.map +0 -1
  232. package/dist/node_modules/date-fns/esm/isMonday/index.js +0 -27
  233. package/dist/node_modules/date-fns/esm/isMonday/index.js.map +0 -1
  234. package/dist/node_modules/date-fns/esm/isSaturday/index.js +0 -27
  235. package/dist/node_modules/date-fns/esm/isSaturday/index.js.map +0 -1
  236. package/dist/node_modules/date-fns/esm/isSunday/index.js +0 -27
  237. package/dist/node_modules/date-fns/esm/isSunday/index.js.map +0 -1
  238. package/dist/node_modules/date-fns/esm/isThursday/index.js +0 -27
  239. package/dist/node_modules/date-fns/esm/isThursday/index.js.map +0 -1
  240. package/dist/node_modules/date-fns/esm/isTuesday/index.js +0 -27
  241. package/dist/node_modules/date-fns/esm/isTuesday/index.js.map +0 -1
  242. package/dist/node_modules/date-fns/esm/isWednesday/index.js +0 -27
  243. package/dist/node_modules/date-fns/esm/isWednesday/index.js.map +0 -1
  244. package/dist/node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js +0 -12
  245. package/dist/node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js.map +0 -1
  246. package/dist/node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js +0 -21
  247. package/dist/node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js.map +0 -1
  248. package/dist/node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js +0 -45
  249. package/dist/node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js.map +0 -1
  250. package/dist/node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js +0 -20
  251. package/dist/node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js.map +0 -1
  252. package/dist/node_modules/date-fns/esm/locale/ar/_lib/formatDistance/index.js +0 -119
  253. package/dist/node_modules/date-fns/esm/locale/ar/_lib/formatDistance/index.js.map +0 -1
  254. package/dist/node_modules/date-fns/esm/locale/ar/_lib/formatLong/index.js +0 -37
  255. package/dist/node_modules/date-fns/esm/locale/ar/_lib/formatLong/index.js.map +0 -1
  256. package/dist/node_modules/date-fns/esm/locale/ar/_lib/formatRelative/index.js +0 -14
  257. package/dist/node_modules/date-fns/esm/locale/ar/_lib/formatRelative/index.js.map +0 -1
  258. package/dist/node_modules/date-fns/esm/locale/ar/_lib/localize/index.js +0 -121
  259. package/dist/node_modules/date-fns/esm/locale/ar/_lib/localize/index.js.map +0 -1
  260. package/dist/node_modules/date-fns/esm/locale/ar/_lib/match/index.js +0 -102
  261. package/dist/node_modules/date-fns/esm/locale/ar/_lib/match/index.js.map +0 -1
  262. package/dist/node_modules/date-fns/esm/locale/ar/index.js +0 -30
  263. package/dist/node_modules/date-fns/esm/locale/ar/index.js.map +0 -1
  264. package/dist/node_modules/date-fns/esm/locale/de/_lib/formatDistance/index.js +0 -178
  265. package/dist/node_modules/date-fns/esm/locale/de/_lib/formatDistance/index.js.map +0 -1
  266. package/dist/node_modules/date-fns/esm/locale/de/_lib/formatLong/index.js +0 -42
  267. package/dist/node_modules/date-fns/esm/locale/de/_lib/formatLong/index.js.map +0 -1
  268. package/dist/node_modules/date-fns/esm/locale/de/_lib/formatRelative/index.js +0 -14
  269. package/dist/node_modules/date-fns/esm/locale/de/_lib/formatRelative/index.js.map +0 -1
  270. package/dist/node_modules/date-fns/esm/locale/de/_lib/localize/index.js +0 -137
  271. package/dist/node_modules/date-fns/esm/locale/de/_lib/localize/index.js.map +0 -1
  272. package/dist/node_modules/date-fns/esm/locale/de/_lib/match/index.js +0 -103
  273. package/dist/node_modules/date-fns/esm/locale/de/_lib/match/index.js.map +0 -1
  274. package/dist/node_modules/date-fns/esm/locale/de/index.js +0 -33
  275. package/dist/node_modules/date-fns/esm/locale/de/index.js.map +0 -1
  276. package/dist/node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js +0 -85
  277. package/dist/node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js.map +0 -1
  278. package/dist/node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js +0 -37
  279. package/dist/node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js.map +0 -1
  280. package/dist/node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js +0 -14
  281. package/dist/node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js.map +0 -1
  282. package/dist/node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js +0 -146
  283. package/dist/node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js.map +0 -1
  284. package/dist/node_modules/date-fns/esm/locale/en-US/_lib/match/index.js +0 -101
  285. package/dist/node_modules/date-fns/esm/locale/en-US/_lib/match/index.js.map +0 -1
  286. package/dist/node_modules/date-fns/esm/locale/en-US/index.js +0 -30
  287. package/dist/node_modules/date-fns/esm/locale/en-US/index.js.map +0 -1
  288. package/dist/node_modules/date-fns/esm/locale/es/_lib/formatDistance/index.js +0 -85
  289. package/dist/node_modules/date-fns/esm/locale/es/_lib/formatDistance/index.js.map +0 -1
  290. package/dist/node_modules/date-fns/esm/locale/es/_lib/formatLong/index.js +0 -37
  291. package/dist/node_modules/date-fns/esm/locale/es/_lib/formatLong/index.js.map +0 -1
  292. package/dist/node_modules/date-fns/esm/locale/es/_lib/formatRelative/index.js +0 -26
  293. package/dist/node_modules/date-fns/esm/locale/es/_lib/formatRelative/index.js.map +0 -1
  294. package/dist/node_modules/date-fns/esm/locale/es/_lib/localize/index.js +0 -122
  295. package/dist/node_modules/date-fns/esm/locale/es/_lib/localize/index.js.map +0 -1
  296. package/dist/node_modules/date-fns/esm/locale/es/_lib/match/index.js +0 -102
  297. package/dist/node_modules/date-fns/esm/locale/es/_lib/match/index.js.map +0 -1
  298. package/dist/node_modules/date-fns/esm/locale/es/index.js +0 -33
  299. package/dist/node_modules/date-fns/esm/locale/es/index.js.map +0 -1
  300. package/dist/node_modules/date-fns/esm/locale/fr/_lib/formatDistance/index.js +0 -85
  301. package/dist/node_modules/date-fns/esm/locale/fr/_lib/formatDistance/index.js.map +0 -1
  302. package/dist/node_modules/date-fns/esm/locale/fr/_lib/formatLong/index.js +0 -37
  303. package/dist/node_modules/date-fns/esm/locale/fr/_lib/formatLong/index.js.map +0 -1
  304. package/dist/node_modules/date-fns/esm/locale/fr/_lib/formatRelative/index.js +0 -14
  305. package/dist/node_modules/date-fns/esm/locale/fr/_lib/formatRelative/index.js.map +0 -1
  306. package/dist/node_modules/date-fns/esm/locale/fr/_lib/localize/index.js +0 -97
  307. package/dist/node_modules/date-fns/esm/locale/fr/_lib/localize/index.js.map +0 -1
  308. package/dist/node_modules/date-fns/esm/locale/fr/_lib/match/index.js +0 -101
  309. package/dist/node_modules/date-fns/esm/locale/fr/_lib/match/index.js.map +0 -1
  310. package/dist/node_modules/date-fns/esm/locale/fr/index.js +0 -30
  311. package/dist/node_modules/date-fns/esm/locale/fr/index.js.map +0 -1
  312. package/dist/node_modules/date-fns/esm/locale/it/_lib/formatDistance/index.js +0 -85
  313. package/dist/node_modules/date-fns/esm/locale/it/_lib/formatDistance/index.js.map +0 -1
  314. package/dist/node_modules/date-fns/esm/locale/it/_lib/formatLong/index.js +0 -37
  315. package/dist/node_modules/date-fns/esm/locale/it/_lib/formatLong/index.js.map +0 -1
  316. package/dist/node_modules/date-fns/esm/locale/it/_lib/formatRelative/index.js +0 -54
  317. package/dist/node_modules/date-fns/esm/locale/it/_lib/formatRelative/index.js.map +0 -1
  318. package/dist/node_modules/date-fns/esm/locale/it/_lib/localize/index.js +0 -122
  319. package/dist/node_modules/date-fns/esm/locale/it/_lib/localize/index.js.map +0 -1
  320. package/dist/node_modules/date-fns/esm/locale/it/_lib/match/index.js +0 -101
  321. package/dist/node_modules/date-fns/esm/locale/it/_lib/match/index.js.map +0 -1
  322. package/dist/node_modules/date-fns/esm/locale/it/index.js +0 -31
  323. package/dist/node_modules/date-fns/esm/locale/it/index.js.map +0 -1
  324. package/dist/node_modules/date-fns/esm/locale/nl/_lib/formatDistance/index.js +0 -85
  325. package/dist/node_modules/date-fns/esm/locale/nl/_lib/formatDistance/index.js.map +0 -1
  326. package/dist/node_modules/date-fns/esm/locale/nl/_lib/formatLong/index.js +0 -37
  327. package/dist/node_modules/date-fns/esm/locale/nl/_lib/formatLong/index.js.map +0 -1
  328. package/dist/node_modules/date-fns/esm/locale/nl/_lib/formatRelative/index.js +0 -14
  329. package/dist/node_modules/date-fns/esm/locale/nl/_lib/formatRelative/index.js.map +0 -1
  330. package/dist/node_modules/date-fns/esm/locale/nl/_lib/localize/index.js +0 -88
  331. package/dist/node_modules/date-fns/esm/locale/nl/_lib/localize/index.js.map +0 -1
  332. package/dist/node_modules/date-fns/esm/locale/nl/_lib/match/index.js +0 -100
  333. package/dist/node_modules/date-fns/esm/locale/nl/_lib/match/index.js.map +0 -1
  334. package/dist/node_modules/date-fns/esm/locale/nl/index.js +0 -34
  335. package/dist/node_modules/date-fns/esm/locale/nl/index.js.map +0 -1
  336. package/dist/node_modules/date-fns/esm/locale/th/_lib/formatDistance/index.js +0 -89
  337. package/dist/node_modules/date-fns/esm/locale/th/_lib/formatDistance/index.js.map +0 -1
  338. package/dist/node_modules/date-fns/esm/locale/th/_lib/formatLong/index.js +0 -37
  339. package/dist/node_modules/date-fns/esm/locale/th/_lib/formatLong/index.js.map +0 -1
  340. package/dist/node_modules/date-fns/esm/locale/th/_lib/formatRelative/index.js +0 -14
  341. package/dist/node_modules/date-fns/esm/locale/th/_lib/formatRelative/index.js.map +0 -1
  342. package/dist/node_modules/date-fns/esm/locale/th/_lib/localize/index.js +0 -121
  343. package/dist/node_modules/date-fns/esm/locale/th/_lib/localize/index.js.map +0 -1
  344. package/dist/node_modules/date-fns/esm/locale/th/_lib/match/index.js +0 -100
  345. package/dist/node_modules/date-fns/esm/locale/th/_lib/match/index.js.map +0 -1
  346. package/dist/node_modules/date-fns/esm/locale/th/index.js +0 -31
  347. package/dist/node_modules/date-fns/esm/locale/th/index.js.map +0 -1
  348. package/dist/node_modules/date-fns/esm/startOfISOWeek/index.js +0 -32
  349. package/dist/node_modules/date-fns/esm/startOfISOWeek/index.js.map +0 -1
  350. package/dist/node_modules/date-fns/esm/startOfISOWeekYear/index.js +0 -37
  351. package/dist/node_modules/date-fns/esm/startOfISOWeekYear/index.js.map +0 -1
  352. package/dist/node_modules/date-fns/esm/startOfWeek/index.js +0 -52
  353. package/dist/node_modules/date-fns/esm/startOfWeek/index.js.map +0 -1
  354. package/dist/node_modules/date-fns/esm/toDate/index.js +0 -56
  355. package/dist/node_modules/date-fns/esm/toDate/index.js.map +0 -1
  356. package/dist/node_modules/hyphenate-style-name/index.js +0 -20
  357. package/dist/node_modules/hyphenate-style-name/index.js.map +0 -1
  358. package/dist/node_modules/is-in-browser/dist/module.js +0 -6
  359. package/dist/node_modules/is-in-browser/dist/module.js.map +0 -1
  360. package/dist/node_modules/jss/dist/jss.esm.js +0 -2220
  361. package/dist/node_modules/jss/dist/jss.esm.js.map +0 -1
  362. package/dist/node_modules/jss-plugin-camel-case/dist/jss-plugin-camel-case.esm.js +0 -60
  363. package/dist/node_modules/jss-plugin-camel-case/dist/jss-plugin-camel-case.esm.js.map +0 -1
  364. package/dist/node_modules/jss-plugin-default-unit/dist/jss-plugin-default-unit.esm.js +0 -252
  365. package/dist/node_modules/jss-plugin-default-unit/dist/jss-plugin-default-unit.esm.js.map +0 -1
  366. package/dist/node_modules/jss-plugin-global/dist/jss-plugin-global.esm.js +0 -187
  367. package/dist/node_modules/jss-plugin-global/dist/jss-plugin-global.esm.js.map +0 -1
  368. package/dist/node_modules/jss-plugin-nested/dist/jss-plugin-nested.esm.js +0 -114
  369. package/dist/node_modules/jss-plugin-nested/dist/jss-plugin-nested.esm.js.map +0 -1
  370. package/dist/node_modules/jss-plugin-props-sort/dist/jss-plugin-props-sort.esm.js +0 -29
  371. package/dist/node_modules/jss-plugin-props-sort/dist/jss-plugin-props-sort.esm.js.map +0 -1
  372. package/dist/node_modules/jss-plugin-rule-value-function/dist/jss-plugin-rule-value-function.esm.js +0 -66
  373. package/dist/node_modules/jss-plugin-rule-value-function/dist/jss-plugin-rule-value-function.esm.js.map +0 -1
  374. package/dist/node_modules/jss-plugin-vendor-prefixer/dist/jss-plugin-vendor-prefixer.esm.js +0 -58
  375. package/dist/node_modules/jss-plugin-vendor-prefixer/dist/jss-plugin-vendor-prefixer.esm.js.map +0 -1
  376. package/dist/node_modules/object-assign/index.js +0 -100
  377. package/dist/node_modules/object-assign/index.js.map +0 -1
  378. package/dist/node_modules/prop-types/checkPropTypes.js +0 -116
  379. package/dist/node_modules/prop-types/checkPropTypes.js.map +0 -1
  380. package/dist/node_modules/prop-types/factoryWithThrowingShims.js +0 -75
  381. package/dist/node_modules/prop-types/factoryWithThrowingShims.js.map +0 -1
  382. package/dist/node_modules/prop-types/factoryWithTypeCheckers.js +0 -626
  383. package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +0 -1
  384. package/dist/node_modules/prop-types/index.js +0 -34
  385. package/dist/node_modules/prop-types/index.js.map +0 -1
  386. package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js +0 -22
  387. package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js.map +0 -1
  388. package/dist/node_modules/prop-types/lib/has.js +0 -12
  389. package/dist/node_modules/prop-types/lib/has.js.map +0 -1
  390. package/dist/node_modules/react/cjs/react-jsx-runtime.development.js +0 -1326
  391. package/dist/node_modules/react/cjs/react-jsx-runtime.development.js.map +0 -1
  392. package/dist/node_modules/react/cjs/react-jsx-runtime.production.min.js +0 -25
  393. package/dist/node_modules/react/cjs/react-jsx-runtime.production.min.js.map +0 -1
  394. package/dist/node_modules/react/jsx-runtime.js +0 -20
  395. package/dist/node_modules/react/jsx-runtime.js.map +0 -1
  396. package/dist/node_modules/react-is/cjs/react-is.development.js +0 -191
  397. package/dist/node_modules/react-is/cjs/react-is.development.js.map +0 -1
  398. package/dist/node_modules/react-is/cjs/react-is.production.min.js +0 -27
  399. package/dist/node_modules/react-is/cjs/react-is.production.min.js.map +0 -1
  400. package/dist/node_modules/react-is/index.js +0 -20
  401. package/dist/node_modules/react-is/index.js.map +0 -1
  402. package/dist/node_modules/tiny-warning/dist/tiny-warning.esm.js +0 -18
  403. package/dist/node_modules/tiny-warning/dist/tiny-warning.esm.js.map +0 -1
  404. package/dist/rules/src/chart/getAxisOptions.js +0 -256
  405. package/dist/rules/src/chart/getAxisOptions.js.map +0 -1
  406. package/dist/rules/src/chart/getBaseOptions.js +0 -77
  407. package/dist/rules/src/chart/getBaseOptions.js.map +0 -1
  408. package/dist/rules/src/chart/getChartOptions.js +0 -120
  409. package/dist/rules/src/chart/getChartOptions.js.map +0 -1
  410. package/dist/rules/src/chart/getGridOptions.js +0 -46
  411. package/dist/rules/src/chart/getGridOptions.js.map +0 -1
  412. package/dist/rules/src/chart/getTooltipOptions.js +0 -223
  413. package/dist/rules/src/chart/getTooltipOptions.js.map +0 -1
  414. package/dist/rules/src/constants.js +0 -31
  415. package/dist/rules/src/constants.js.map +0 -1
  416. package/dist/rules/src/date.js +0 -121
  417. package/dist/rules/src/date.js.map +0 -1
  418. package/dist/rules/src/dimension-utils.js +0 -59
  419. package/dist/rules/src/dimension-utils.js.map +0 -1
  420. package/dist/rules/src/factories/choro-series.js +0 -79
  421. package/dist/rules/src/factories/choro-series.js.map +0 -1
  422. package/dist/rules/src/factories/focus.js +0 -20
  423. package/dist/rules/src/factories/focus.js.map +0 -1
  424. package/dist/rules/src/factories/getChartSeries.js +0 -11
  425. package/dist/rules/src/factories/getChartSeries.js.map +0 -1
  426. package/dist/rules/src/factories/sample-focus.js +0 -21
  427. package/dist/rules/src/factories/sample-focus.js.map +0 -1
  428. package/dist/rules/src/factories/sample-series.js +0 -54
  429. package/dist/rules/src/factories/sample-series.js.map +0 -1
  430. package/dist/rules/src/factories/scatter-focus.js +0 -28
  431. package/dist/rules/src/factories/scatter-focus.js.map +0 -1
  432. package/dist/rules/src/factories/scatter-series.js +0 -91
  433. package/dist/rules/src/factories/scatter-series.js.map +0 -1
  434. package/dist/rules/src/factories/series.js +0 -48
  435. package/dist/rules/src/factories/series.js.map +0 -1
  436. package/dist/rules/src/factories/stacked-series.js +0 -187
  437. package/dist/rules/src/factories/stacked-series.js.map +0 -1
  438. package/dist/rules/src/factories/symbol-series.js +0 -58
  439. package/dist/rules/src/factories/symbol-series.js.map +0 -1
  440. package/dist/rules/src/factories/timeline-focus.js +0 -17
  441. package/dist/rules/src/factories/timeline-focus.js.map +0 -1
  442. package/dist/rules/src/factories/timeline-series.js +0 -90
  443. package/dist/rules/src/factories/timeline-series.js.map +0 -1
  444. package/dist/rules/src/get-values-enhanced.js +0 -139
  445. package/dist/rules/src/get-values-enhanced.js.map +0 -1
  446. package/dist/rules/src/index.js +0 -14
  447. package/dist/rules/src/index.js.map +0 -1
  448. package/dist/rules/src/layout.js +0 -109
  449. package/dist/rules/src/layout.js.map +0 -1
  450. package/dist/rules/src/observation-formater.js +0 -80
  451. package/dist/rules/src/observation-formater.js.map +0 -1
  452. package/dist/rules/src/preparators/formatValue.js +0 -98
  453. package/dist/rules/src/preparators/formatValue.js.map +0 -1
  454. package/dist/rules/src/preparators/getObservations.js +0 -22
  455. package/dist/rules/src/preparators/getObservations.js.map +0 -1
  456. package/dist/rules/src/preparators/getReportingYearStart.js +0 -19
  457. package/dist/rules/src/preparators/getReportingYearStart.js.map +0 -1
  458. package/dist/rules/src/properties/focus.js +0 -120
  459. package/dist/rules/src/properties/focus.js.map +0 -1
  460. package/dist/rules/src/properties/getAvailableChartTypes.js +0 -31
  461. package/dist/rules/src/properties/getAvailableChartTypes.js.map +0 -1
  462. package/dist/rules/src/properties/getHeaderProps.js +0 -25
  463. package/dist/rules/src/properties/getHeaderProps.js.map +0 -1
  464. package/dist/rules/src/properties/getObservationsType.js +0 -28
  465. package/dist/rules/src/properties/getObservationsType.js.map +0 -1
  466. package/dist/rules/src/properties/getStringifiedSubtitle.js +0 -9
  467. package/dist/rules/src/properties/getStringifiedSubtitle.js.map +0 -1
  468. package/dist/rules/src/properties/index.js +0 -293
  469. package/dist/rules/src/properties/index.js.map +0 -1
  470. package/dist/rules/src/properties/linear.js +0 -123
  471. package/dist/rules/src/properties/linear.js.map +0 -1
  472. package/dist/rules/src/properties/scatter.js +0 -156
  473. package/dist/rules/src/properties/scatter.js.map +0 -1
  474. package/dist/rules/src/properties/stacked.js +0 -94
  475. package/dist/rules/src/properties/stacked.js.map +0 -1
  476. package/dist/rules/src/properties/symbol.js +0 -76
  477. package/dist/rules/src/properties/symbol.js.map +0 -1
  478. package/dist/rules/src/properties/utils.js +0 -85
  479. package/dist/rules/src/properties/utils.js.map +0 -1
  480. package/dist/rules/src/sdmx-data/index.js +0 -13
  481. package/dist/rules/src/sdmx-data/index.js.map +0 -1
  482. package/dist/rules/src/table/factories/getCellValue.js +0 -53
  483. package/dist/rules/src/table/factories/getCellValue.js.map +0 -1
  484. package/dist/rules2/src/applyHierarchicalCodesToDim.js +0 -126
  485. package/dist/rules2/src/applyHierarchicalCodesToDim.js.map +0 -1
  486. package/dist/rules2/src/combinedValuesDisplay.js +0 -77
  487. package/dist/rules2/src/combinedValuesDisplay.js.map +0 -1
  488. package/dist/rules2/src/constants.js +0 -9
  489. package/dist/rules2/src/constants.js.map +0 -1
  490. package/dist/rules2/src/duplicateObservations.js +0 -38
  491. package/dist/rules2/src/duplicateObservations.js.map +0 -1
  492. package/dist/rules2/src/enhanceObservations.js +0 -98
  493. package/dist/rules2/src/enhanceObservations.js.map +0 -1
  494. package/dist/rules2/src/getAttributes.js +0 -37
  495. package/dist/rules2/src/getAttributes.js.map +0 -1
  496. package/dist/rules2/src/getAttributesSeries.js +0 -39
  497. package/dist/rules2/src/getAttributesSeries.js.map +0 -1
  498. package/dist/rules2/src/getCombinationDefinitions.js +0 -50
  499. package/dist/rules2/src/getCombinationDefinitions.js.map +0 -1
  500. package/dist/rules2/src/getDataflowAttributes.js +0 -25
  501. package/dist/rules2/src/getDataflowAttributes.js.map +0 -1
  502. package/dist/rules2/src/getDataflowTooltipAttributesIds.js +0 -33
  503. package/dist/rules2/src/getDataflowTooltipAttributesIds.js.map +0 -1
  504. package/dist/rules2/src/getDimensionValuesIndexes.js +0 -16
  505. package/dist/rules2/src/getDimensionValuesIndexes.js.map +0 -1
  506. package/dist/rules2/src/getHCodelistsRefsInData.js +0 -35
  507. package/dist/rules2/src/getHCodelistsRefsInData.js.map +0 -1
  508. package/dist/rules2/src/getHeaderCombinations.js +0 -51
  509. package/dist/rules2/src/getHeaderCombinations.js.map +0 -1
  510. package/dist/rules2/src/getHeaderCoordinates.js +0 -10
  511. package/dist/rules2/src/getHeaderCoordinates.js.map +0 -1
  512. package/dist/rules2/src/getHeaderSubtitle.js +0 -37
  513. package/dist/rules2/src/getHeaderSubtitle.js.map +0 -1
  514. package/dist/rules2/src/getHeaderTitle.js +0 -18
  515. package/dist/rules2/src/getHeaderTitle.js.map +0 -1
  516. package/dist/rules2/src/getMSDInformations.js +0 -26
  517. package/dist/rules2/src/getMSDInformations.js.map +0 -1
  518. package/dist/rules2/src/getManyValuesDimensions.js +0 -37
  519. package/dist/rules2/src/getManyValuesDimensions.js.map +0 -1
  520. package/dist/rules2/src/getMetadataCoordinates.js +0 -40
  521. package/dist/rules2/src/getMetadataCoordinates.js.map +0 -1
  522. package/dist/rules2/src/getNotDisplayedIds.js +0 -56
  523. package/dist/rules2/src/getNotDisplayedIds.js.map +0 -1
  524. package/dist/rules2/src/getOneValueDimensions.js +0 -37
  525. package/dist/rules2/src/getOneValueDimensions.js.map +0 -1
  526. package/dist/rules2/src/getSeriesCombinations.js +0 -27
  527. package/dist/rules2/src/getSeriesCombinations.js.map +0 -1
  528. package/dist/rules2/src/hasCellMetadata.js +0 -17
  529. package/dist/rules2/src/hasCellMetadata.js.map +0 -1
  530. package/dist/rules2/src/hierarchiseDimensionWithAdvancedHierarchy2.js +0 -60
  531. package/dist/rules2/src/hierarchiseDimensionWithAdvancedHierarchy2.js.map +0 -1
  532. package/dist/rules2/src/hierarchiseDimensionWithNativeHierarchy2.js +0 -38
  533. package/dist/rules2/src/hierarchiseDimensionWithNativeHierarchy2.js.map +0 -1
  534. package/dist/rules2/src/index.js +0 -48
  535. package/dist/rules2/src/index.js.map +0 -1
  536. package/dist/rules2/src/parseAttributes.js +0 -44
  537. package/dist/rules2/src/parseAttributes.js.map +0 -1
  538. package/dist/rules2/src/parseCombinations.js +0 -105
  539. package/dist/rules2/src/parseCombinations.js.map +0 -1
  540. package/dist/rules2/src/parseHierarchicalCodelist.js +0 -34
  541. package/dist/rules2/src/parseHierarchicalCodelist.js.map +0 -1
  542. package/dist/rules2/src/parseMetadataSeries.js +0 -124
  543. package/dist/rules2/src/parseMetadataSeries.js.map +0 -1
  544. package/dist/rules2/src/prepareData.js +0 -85
  545. package/dist/rules2/src/prepareData.js.map +0 -1
  546. package/dist/rules2/src/refineAttributes.js +0 -19
  547. package/dist/rules2/src/refineAttributes.js.map +0 -1
  548. package/dist/rules2/src/refineDimensions.js +0 -66
  549. package/dist/rules2/src/refineDimensions.js.map +0 -1
  550. package/dist/rules2/src/refineTimePeriod.js +0 -126
  551. package/dist/rules2/src/refineTimePeriod.js.map +0 -1
  552. package/dist/rules2/src/sdmx3.0DataFormatPatch.js +0 -12
  553. package/dist/rules2/src/sdmx3.0DataFormatPatch.js.map +0 -1
  554. package/dist/rules2/src/table/declineObservationsOverAttributes.js +0 -35
  555. package/dist/rules2/src/table/declineObservationsOverAttributes.js.map +0 -1
  556. package/dist/rules2/src/table/getCells.js +0 -96
  557. package/dist/rules2/src/table/getCells.js.map +0 -1
  558. package/dist/rules2/src/table/getCellsAttributesIds.js +0 -41
  559. package/dist/rules2/src/table/getCellsAttributesIds.js.map +0 -1
  560. package/dist/rules2/src/table/getCellsMetadataCoordinates.js +0 -16
  561. package/dist/rules2/src/table/getCellsMetadataCoordinates.js.map +0 -1
  562. package/dist/rules2/src/table/getCuratedCells.js +0 -36
  563. package/dist/rules2/src/table/getCuratedCells.js.map +0 -1
  564. package/dist/rules2/src/table/getFlagsAndNotes.js +0 -26
  565. package/dist/rules2/src/table/getFlagsAndNotes.js.map +0 -1
  566. package/dist/rules2/src/table/getIndexedCombinationsByDisplay.js +0 -19
  567. package/dist/rules2/src/table/getIndexedCombinationsByDisplay.js.map +0 -1
  568. package/dist/rules2/src/table/getLayout.js +0 -87
  569. package/dist/rules2/src/table/getLayout.js.map +0 -1
  570. package/dist/rules2/src/table/getLayoutData2.js +0 -206
  571. package/dist/rules2/src/table/getLayoutData2.js.map +0 -1
  572. package/dist/rules2/src/table/getSortedLayoutIndexes.js +0 -141
  573. package/dist/rules2/src/table/getSortedLayoutIndexes.js.map +0 -1
  574. package/dist/rules2/src/table/getTableLabelAccessor.js +0 -11
  575. package/dist/rules2/src/table/getTableLabelAccessor.js.map +0 -1
  576. package/dist/rules2/src/table/getTableLayoutIds.js +0 -317
  577. package/dist/rules2/src/table/getTableLayoutIds.js.map +0 -1
  578. package/dist/rules2/src/table/getTableProps.js +0 -85
  579. package/dist/rules2/src/table/getTableProps.js.map +0 -1
  580. package/dist/rules2/src/table/parseSeriesIndexesHierarchies.js +0 -82
  581. package/dist/rules2/src/table/parseSeriesIndexesHierarchies.js.map +0 -1
  582. package/dist/rules2/src/table/parseValueHierarchy.js +0 -29
  583. package/dist/rules2/src/table/parseValueHierarchy.js.map +0 -1
  584. package/dist/rules2/src/table/refineLayoutSize2.js +0 -324
  585. package/dist/rules2/src/table/refineLayoutSize2.js.map +0 -1
  586. package/dist/rules2/src/utils.js +0 -29
  587. package/dist/rules2/src/utils.js.map +0 -1
  588. package/dist/viewer/src/chart.js +0 -61
  589. package/dist/viewer/src/chart.js.map +0 -1
  590. package/dist/viewer/src/chartUtils/options.js +0 -33
  591. package/dist/viewer/src/chartUtils/options.js.map +0 -1
  592. package/dist/viewer/src/chartUtils/series.js +0 -54
  593. package/dist/viewer/src/chartUtils/series.js.map +0 -1
  594. package/dist/viewer/src/footer.js +0 -39
  595. package/dist/viewer/src/footer.js.map +0 -1
  596. package/dist/viewer/src/header.js +0 -12
  597. package/dist/viewer/src/header.js.map +0 -1
  598. package/dist/viewer/src/index.js +0 -160
  599. package/dist/viewer/src/index.js.map +0 -1
  600. package/dist/viewer/src/legends/AxisLegend.js +0 -42
  601. package/dist/viewer/src/legends/AxisLegend.js.map +0 -1
  602. package/dist/viewer/src/legends/ChartLegends.js +0 -80
  603. package/dist/viewer/src/legends/ChartLegends.js.map +0 -1
  604. package/dist/viewer/src/legends/FocusLegend.js +0 -67
  605. package/dist/viewer/src/legends/FocusLegend.js.map +0 -1
  606. package/dist/viewer/src/legends/Legend.js +0 -51
  607. package/dist/viewer/src/legends/Legend.js.map +0 -1
  608. package/dist/viewer/src/legends/SeriesLegend.js +0 -77
  609. package/dist/viewer/src/legends/SeriesLegend.js.map +0 -1
  610. package/dist/viewer/src/utils.js +0 -24
  611. package/dist/viewer/src/utils.js.map +0 -1
  612. package/src/app.js +0 -13
  613. package/src/bridge-d3-react/README.md +0 -42
  614. package/src/bridge-d3-react/src/index.js +0 -15
  615. package/src/bridge-d3-react/src/react-chart-factory.jsx +0 -65
  616. package/src/index.js +0 -10
  617. package/src/rules/README.md +0 -23
  618. package/src/rules/src/chart/getAxisOptions.js +0 -275
  619. package/src/rules/src/chart/getBaseOptions.js +0 -84
  620. package/src/rules/src/chart/getChartOptions.js +0 -118
  621. package/src/rules/src/chart/getGridOptions.js +0 -52
  622. package/src/rules/src/chart/getTooltipOptions.js +0 -230
  623. package/src/rules/src/constants.js +0 -29
  624. package/src/rules/src/date.js +0 -112
  625. package/src/rules/src/dimension-utils.js +0 -56
  626. package/src/rules/src/factories/choro-series.js +0 -76
  627. package/src/rules/src/factories/focus.js +0 -17
  628. package/src/rules/src/factories/getChartSeries.js +0 -8
  629. package/src/rules/src/factories/sample-focus.js +0 -18
  630. package/src/rules/src/factories/sample-series.js +0 -51
  631. package/src/rules/src/factories/scatter-focus.js +0 -25
  632. package/src/rules/src/factories/scatter-series.js +0 -92
  633. package/src/rules/src/factories/series.js +0 -45
  634. package/src/rules/src/factories/stacked-series.js +0 -184
  635. package/src/rules/src/factories/symbol-series.js +0 -55
  636. package/src/rules/src/factories/timeline-focus.js +0 -14
  637. package/src/rules/src/factories/timeline-series.js +0 -87
  638. package/src/rules/src/get-values-enhanced.js +0 -140
  639. package/src/rules/src/index.js +0 -23
  640. package/src/rules/src/layout.js +0 -115
  641. package/src/rules/src/observation-formater.js +0 -77
  642. package/src/rules/src/preparators/formatValue.js +0 -95
  643. package/src/rules/src/preparators/getObservations.js +0 -19
  644. package/src/rules/src/preparators/getReportingYearStart.js +0 -16
  645. package/src/rules/src/properties/focus.js +0 -117
  646. package/src/rules/src/properties/getAvailableChartTypes.js +0 -34
  647. package/src/rules/src/properties/getHeaderProps.js +0 -22
  648. package/src/rules/src/properties/getObservationsType.js +0 -29
  649. package/src/rules/src/properties/getStringifiedSubtitle.js +0 -6
  650. package/src/rules/src/properties/index.js +0 -333
  651. package/src/rules/src/properties/linear.js +0 -129
  652. package/src/rules/src/properties/scatter.js +0 -158
  653. package/src/rules/src/properties/stacked.js +0 -96
  654. package/src/rules/src/properties/symbol.js +0 -78
  655. package/src/rules/src/properties/utils.js +0 -100
  656. package/src/rules/src/sdmx-data/index.js +0 -10
  657. package/src/rules/src/table/factories/getCellValue.js +0 -50
  658. package/src/rules/src/table/index.js +0 -1
  659. package/src/rules2/src/applyHierarchicalCodesToDim.js +0 -123
  660. package/src/rules2/src/combinedValuesDisplay.js +0 -74
  661. package/src/rules2/src/constants.js +0 -6
  662. package/src/rules2/src/duplicateObservations.js +0 -35
  663. package/src/rules2/src/enhanceObservations.js +0 -95
  664. package/src/rules2/src/getAttributes.js +0 -34
  665. package/src/rules2/src/getAttributesSeries.js +0 -36
  666. package/src/rules2/src/getCombinationDefinitions.js +0 -47
  667. package/src/rules2/src/getDataflowAttributes.js +0 -23
  668. package/src/rules2/src/getDataflowTooltipAttributesIds.js +0 -31
  669. package/src/rules2/src/getDimensionValuesIndexes.js +0 -13
  670. package/src/rules2/src/getHCodelistsRefsInData.js +0 -32
  671. package/src/rules2/src/getHeaderCombinations.js +0 -48
  672. package/src/rules2/src/getHeaderCoordinates.js +0 -7
  673. package/src/rules2/src/getHeaderSubtitle.js +0 -34
  674. package/src/rules2/src/getHeaderTitle.js +0 -15
  675. package/src/rules2/src/getMSDInformations.js +0 -23
  676. package/src/rules2/src/getManyValuesDimensions.js +0 -34
  677. package/src/rules2/src/getMetadataCoordinates.js +0 -37
  678. package/src/rules2/src/getNotDisplayedIds.js +0 -53
  679. package/src/rules2/src/getOneValueDimensions.js +0 -34
  680. package/src/rules2/src/getSeriesCombinations.js +0 -24
  681. package/src/rules2/src/hasCellMetadata.js +0 -14
  682. package/src/rules2/src/hierarchiseDimensionWithAdvancedHierarchy2.js +0 -57
  683. package/src/rules2/src/hierarchiseDimensionWithNativeHierarchy2.js +0 -35
  684. package/src/rules2/src/index.js +0 -51
  685. package/src/rules2/src/parseAttributes.js +0 -41
  686. package/src/rules2/src/parseCombinations.js +0 -102
  687. package/src/rules2/src/parseHierarchicalCodelist.js +0 -48
  688. package/src/rules2/src/parseMetadataSeries.js +0 -121
  689. package/src/rules2/src/prepareData.js +0 -82
  690. package/src/rules2/src/refineAttributes.js +0 -16
  691. package/src/rules2/src/refineDimensions.js +0 -63
  692. package/src/rules2/src/refineTimePeriod.js +0 -123
  693. package/src/rules2/src/sdmx3.0DataFormatPatch.js +0 -9
  694. package/src/rules2/src/table/declineObservationsOverAttributes.js +0 -32
  695. package/src/rules2/src/table/getCells.js +0 -93
  696. package/src/rules2/src/table/getCellsAttributesIds.js +0 -38
  697. package/src/rules2/src/table/getCellsMetadataCoordinates.js +0 -13
  698. package/src/rules2/src/table/getCuratedCells.js +0 -33
  699. package/src/rules2/src/table/getFlagsAndNotes.js +0 -23
  700. package/src/rules2/src/table/getIndexedCombinationsByDisplay.js +0 -16
  701. package/src/rules2/src/table/getLayout.js +0 -84
  702. package/src/rules2/src/table/getLayoutData2.js +0 -203
  703. package/src/rules2/src/table/getSortedLayoutIndexes.js +0 -138
  704. package/src/rules2/src/table/getTableLabelAccessor.js +0 -9
  705. package/src/rules2/src/table/getTableLayoutIds.js +0 -314
  706. package/src/rules2/src/table/getTableProps.js +0 -82
  707. package/src/rules2/src/table/parseSeriesIndexesHierarchies.js +0 -79
  708. package/src/rules2/src/table/parseValueHierarchy.js +0 -26
  709. package/src/rules2/src/table/refineLayoutSize2.js +0 -321
  710. package/src/rules2/src/utils.js +0 -26
  711. package/src/viewer/mocks/bar.js +0 -33
  712. package/src/viewer/mocks/gpp-symbol.js +0 -93
  713. package/src/viewer/mocks/gpp-time.js +0 -1103
  714. package/src/viewer/mocks/row.js +0 -39
  715. package/src/viewer/mocks/scatter.js +0 -93
  716. package/src/viewer/mocks/stack.js +0 -161
  717. package/src/viewer/src/app/leg.js +0 -35
  718. package/src/viewer/src/app/nodata-res.js +0 -22
  719. package/src/viewer/src/app/nodata-sized.js +0 -23
  720. package/src/viewer/src/app/one-table-cell.js +0 -70
  721. package/src/viewer/src/app/table.js +0 -423
  722. package/src/viewer/src/app/use-case-1.js +0 -33
  723. package/src/viewer/src/app/use-case-2.js +0 -38
  724. package/src/viewer/src/app/use-case-3.js +0 -18
  725. package/src/viewer/src/app.js +0 -116
  726. package/src/viewer/src/chart.jsx +0 -74
  727. package/src/viewer/src/chartUtils/options.js +0 -30
  728. package/src/viewer/src/chartUtils/series.js +0 -51
  729. package/src/viewer/src/footer.jsx +0 -23
  730. package/src/viewer/src/header.jsx +0 -10
  731. package/src/viewer/src/index.jsx +0 -158
  732. package/src/viewer/src/legends/AxisLegend.jsx +0 -41
  733. package/src/viewer/src/legends/ChartLegends.jsx +0 -66
  734. package/src/viewer/src/legends/FocusLegend.jsx +0 -63
  735. package/src/viewer/src/legends/Legend.jsx +0 -46
  736. package/src/viewer/src/legends/SeriesLegend.jsx +0 -78
  737. package/src/viewer/src/utils.js +0 -21
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
1
+ {"version":3,"file":"index.js","sources":["../src/rules/src/dimension-utils.js","../src/rules/src/constants.js","../src/rules/src/observation-formater.js","../src/rules/src/factories/sample-series.js","../src/rules/src/factories/scatter-series.js","../src/rules/src/factories/timeline-series.js","../src/rules/src/factories/symbol-series.js","../src/rules/src/factories/stacked-series.js","../src/rules/src/factories/choro-series.js","../src/rules/src/factories/series.js","../src/rules/src/properties/utils.js","../src/rules/src/properties/focus.js","../src/rules/src/properties/scatter.js","../src/rules/src/properties/symbol.js","../src/rules/src/properties/stacked.js","../src/rules/src/properties/linear.js","../src/rules/src/properties/getHeaderProps.js","../src/rules/src/properties/getStringifiedSubtitle.js","../src/rules/src/properties/index.js","../src/rules/src/sdmx-data/index.js","../src/rules/src/date.js","../src/rules2/src/constants.js","../src/rules2/src/parseMetadataSeries.js","../src/rules2/src/getNotDisplayedIds.js","../src/rules2/src/getHCodelistsRefsInData.js","../src/rules2/src/getMetadataCoordinates.js","../src/rules2/src/duplicateObservations.js","../src/rules2/src/hierarchiseDimensionWithAdvancedHierarchy2.js","../src/rules2/src/hierarchiseDimensionWithNativeHierarchy2.js","../src/rules2/src/getCombinationDefinitions.js","../src/rules2/src/refineTimePeriod.js","../src/rules/src/get-values-enhanced.js","../src/rules2/src/getAttributes.js","../src/rules2/src/refineDimensions.js","../src/rules2/src/parseAttributes.js","../src/rules2/src/parseCombinations.js","../src/rules2/src/refineAttributes.js","../src/rules/src/preparators/formatValue.js","../src/rules2/src/enhanceObservations.js","../src/rules2/src/getAttributesSeries.js","../src/rules2/src/table/getFlagsAndNotes.js","../src/rules2/src/getManyValuesDimensions.js","../src/rules2/src/getOneValueDimensions.js","../src/rules2/src/getDataflowAttributes.js","../src/rules2/src/getHeaderTitle.js","../src/rules2/src/getHeaderSubtitle.js","../src/rules2/src/getSeriesCombinations.js","../src/rules2/src/combinedValuesDisplay.js","../src/rules2/src/getHeaderCombinations.js","../src/rules2/src/getHeaderCoordinates.js","../src/rules2/src/table/getLayout.js","../src/rules2/src/table/getSortedLayoutIndexes.js","../src/rules2/src/table/refineLayoutSize2.js","../src/rules2/src/utils.js","../src/rules2/src/table/getLayoutData2.js","../src/rules2/src/table/getCellsAttributesIds.js","../src/rules2/src/table/getCellsMetadataCoordinates.js","../src/rules2/src/table/getIndexedCombinationsByDisplay.js","../src/rules2/src/table/getCells.js","../src/rules2/src/hasCellMetadata.js","../src/rules2/src/table/getCuratedCells.js","../src/rules/src/preparators/getObservations.js","../src/rules2/src/applyHierarchicalCodesToDim.js","../src/rules/src/preparators/getReportingYearStart.js","../src/rules2/src/table/declineObservationsOverAttributes.js","../src/rules2/src/table/parseSeriesIndexesHierarchies.js","../src/rules2/src/table/getTableLayoutIds.js","../src/rules2/src/getDataflowTooltipAttributesIds.js","../src/rules2/src/getDimensionValuesIndexes.js","../src/rules2/src/getMSDInformations.js","../src/rules2/src/table/getTableLabelAccessor.js","../src/rules2/src/table/getTableProps.js","../src/rules2/src/parseHierarchicalCodelist.js","../src/rules2/src/table/parseValueHierarchy.js","../src/rules2/src/prepareData.js","../src/rules2/src/sdmx3.0DataFormatPatch.js","../src/rules/src/layout.js","../src/rules/src/table/factories/getCellValue.js","../src/rules/src/chart/getAxisOptions.js","../src/rules/src/chart/getBaseOptions.js","../src/rules/src/chart/getGridOptions.js","../src/rules/src/chart/getTooltipOptions.js","../src/rules/src/chart/getChartOptions.js","../src/rules/src/factories/focus.js","../src/rules/src/factories/scatter-focus.js","../src/rules/src/factories/timeline-focus.js","../src/rules/src/factories/sample-focus.js","../src/rules/src/properties/getAvailableChartTypes.js","../src/rules/src/properties/getObservationsType.js","../src/rules/src/factories/getChartSeries.js"],"sourcesContent":["import * as R from 'ramda';\n\nexport const parseDisplay = display =>\n R.isNil(display) || !R.includes(display, ['both', 'code']) ? 'label' : display;\n\nexport const dimensionValueDisplay =\n (display, accessors = {}) =>\n dimensionValue => {\n const id = R.propOr('', accessors.id || 'id', dimensionValue);\n const name = R.propOr('', accessors.name || 'name', dimensionValue);\n // a non-coded component (dim | attr) has no name, names nor label\n // the only valid thing to display is the id\n if (R.propOr(false, 'isNonCoded', dimensionValue)) return id;\n //auto-generated flags have no id nor name\n if (R.isEmpty(id) && R.isEmpty(name)) return '';\n switch (display) {\n case 'label':\n return R.isEmpty(name) ? `[${id}]` : name;\n case 'code':\n return id;\n case 'both':\n if (R.isNil(id) || R.isEmpty(id)) return name;\n return `(${id}) ${name}`;\n default:\n return null;\n }\n };\n\nexport const dimensionValueDisplayAt = (dimension, index, display) => {\n const dimensionValue = R.pathOr({}, ['values', Number(index)], dimension);\n return dimensionValueDisplay(display)(dimensionValue);\n};\n\nexport const categoryDisplay = (\n splitObservationKey,\n dimensions,\n dimensionsWithValuesIndexedById,\n rejectedId,\n display,\n) => {\n return R.pipe(\n R.addIndex(R.reduce)((acc, dimensionValueIndex, dimensionIndex) => {\n const dimension = R.nth(dimensionIndex, dimensions) || {};\n if (R.has(dimension.id, dimensionsWithValuesIndexedById) && dimension.id !== rejectedId) {\n return R.append(dimensionValueDisplayAt(dimension, dimensionValueIndex, display), acc);\n }\n return acc;\n }, []),\n R.join(' - '),\n )(splitObservationKey);\n};\n","export const BAR = 'BarChart';\nexport const ROW = 'RowChart';\nexport const SCATTER = 'ScatterChart';\nexport const TIMELINE = 'TimelineChart';\nexport const H_SYMBOL = 'HorizontalSymbolChart';\nexport const V_SYMBOL = 'VerticalSymbolChart';\nexport const STACKED_BAR = 'StackedBarChart';\nexport const STACKED_ROW = 'StackedRowChart';\nexport const CHORO = 'ChoroplethChart';\nexport const PERCENT = 'percent';\nexport const VALUES = 'values';\nexport const TYPES = {\n [BAR]: BAR,\n [ROW]: ROW,\n [SCATTER]: SCATTER,\n [TIMELINE]: TIMELINE,\n [H_SYMBOL]: H_SYMBOL,\n [V_SYMBOL]: V_SYMBOL,\n [STACKED_BAR]: STACKED_BAR,\n [STACKED_ROW]: STACKED_ROW,\n [CHORO]: CHORO,\n};\n\nexport const OBS_TYPE_NUMBER = 'OBS_TYPE_NUMBER';\nexport const OBS_TYPE_NUMERICAL_STRING = 'OBS_TYPE_NUMERICAL_STRING';\nexport const OBS_TYPE_STRING = 'OBS_TYPE_STRING';\nexport const REPORTING_YEAR_START_DAY = 'REPORTING_YEAR_START_DAY';\nexport const REPYEARSTART = 'REPYEARSTART';\n","import numeral from 'numeral';\nimport * as R from 'ramda';\n\nconst DEFAULT_PREFSCALE_ATTR_IDS = ['PREF_SCALE'];\n\nconst DEFAULT_DECIMALS_ATTR_IDS = ['DECIMALS'];\n\nconst getFormaterAttribute = (ids, attributes) =>\n R.find(attr => R.includes(attr.id, ids), attributes);\n\nconst parseAttributeFormaterIds = (ids = {}) => {\n let prefscale = R.prop('prefscale', ids);\n let decimals = R.prop('decimals', ids);\n decimals = R.isNil(decimals) ? DEFAULT_DECIMALS_ATTR_IDS : decimals;\n prefscale = R.isNil(prefscale) ? DEFAULT_PREFSCALE_ATTR_IDS : prefscale;\n return {\n decimals: R.is(Array, decimals) ? decimals : [decimals],\n prefscale: R.is(Array, prefscale) ? prefscale : [prefscale],\n };\n};\n\nexport const getObservationsFormaterAttributes = (attributes = [], ids = {}) => {\n const { decimals, prefscale } = parseAttributeFormaterIds(ids);\n return {\n decimals: getFormaterAttribute(decimals, attributes),\n prefscale: getFormaterAttribute(prefscale, attributes),\n };\n};\n\nconst getObservationFormaterValue = (observation, attribute) => {\n const attributeIndex = R.prop('index', attribute);\n const attributeValueIndex = R.nth(attributeIndex, observation);\n return R.nth(attributeValueIndex, R.propOr([], 'values', attribute));\n};\n\nconst getObservationFormaterValues = formaterAttributes => observation => ({\n decimals: getObservationFormaterValue(observation, R.prop('decimals', formaterAttributes)),\n prefscale: getObservationFormaterValue(observation, R.prop('prefscale', formaterAttributes)),\n});\n\nconst makeObservationFormater = formaterValues => {\n let prefscale = 0;\n if (!R.isNil(R.prop('prefscale', formaterValues))) {\n prefscale = Number(R.propOr('0', 'id', formaterValues.prefscale));\n }\n let decimals = null;\n if (!R.isNil(R.prop('decimals', formaterValues))) {\n let _decimals = Number(R.prop('id', formaterValues.decimals));\n decimals = R.is(Number, _decimals) && !Number.isNaN(_decimals) ? _decimals : null;\n }\n let format = '0,0';\n if (R.isNil(decimals)) {\n format = R.concat(format, '.[0000000]');\n } else if (decimals > 0) {\n format = R.concat(format, `.[${'0'.repeat(decimals)}]`);\n }\n return value =>\n numeral(Number(value))\n .multiply(Math.pow(10, R.negate(prefscale)))\n .format(format);\n};\n\nexport const getObservationFormater = (observation, formaterAttributes) => {\n return R.pipe(\n R.tail,\n getObservationFormaterValues(formaterAttributes),\n makeObservationFormater,\n )(observation);\n};\n\nexport const getFormatedObservation = (observation, formaterAttributes) => {\n const formater = getObservationFormater(observation, formaterAttributes);\n return formater(R.head(observation));\n};\n","import * as R from 'ramda';\nimport { categoryDisplay } from '../dimension-utils';\nimport { getFormatedObservation } from '../observation-formater';\n\nconst getDatapoints = (\n keys,\n observations,\n dimensions,\n dimensionsWithValuesIndexedById,\n sortDirection,\n display,\n formaterAttrs,\n) => {\n const [categoryKey, valueKey] = keys;\n const sortFunc = dp => dp[valueKey] * sortDirection;\n\n return R.pipe(\n R.keys,\n R.map(observationKey => {\n const observationValue = R.prop(observationKey, observations);\n const value = R.head(observationValue);\n const splitKey = R.split(':', observationKey);\n const category = categoryDisplay(\n splitKey,\n dimensions,\n dimensionsWithValuesIndexedById,\n null,\n display,\n );\n const categoryIds = categoryDisplay(\n splitKey,\n dimensions,\n dimensionsWithValuesIndexedById,\n null,\n 'code',\n );\n const formatedValue = getFormatedObservation(observationValue, formaterAttrs);\n\n let key = categoryIds;\n if (R.isNil(key) || R.isEmpty(key)) {\n key = 'uniq-dp';\n }\n\n return { value, category, [valueKey]: value, [categoryKey]: category, key, formatedValue };\n }),\n R.sortBy(sortFunc),\n )(observations);\n};\n\nconst series = (\n keys,\n observations,\n dimensions,\n dimensionsWithValuesIndexedById,\n sortDirection,\n display,\n formaterAttrs,\n) => {\n return [\n {\n datapoints: getDatapoints(\n keys,\n observations,\n dimensions,\n dimensionsWithValuesIndexedById,\n sortDirection,\n display,\n formaterAttrs,\n ),\n },\n ];\n};\n\nexport default (\n chartType,\n { observations, dimensions },\n dimensionsWithValuesIndexedById,\n display,\n formaterAttrs,\n) => {\n switch (chartType) {\n case 'BarChart':\n return series(\n ['x', 'y'],\n observations,\n dimensions,\n dimensionsWithValuesIndexedById,\n 1,\n display,\n formaterAttrs,\n );\n case 'RowChart':\n return series(\n ['y', 'x'],\n observations,\n dimensions,\n dimensionsWithValuesIndexedById,\n -1,\n display,\n formaterAttrs,\n );\n default:\n return [];\n }\n};\n","import * as R from 'ramda';\nimport { dimensionValueDisplay } from '../dimension-utils';\nimport { getFormatedObservation } from '../observation-formater';\n\nfunction dimensionValueIsValid(dimensionValue, chartDimension) {\n return R.includes(\n R.prop('id', dimensionValue),\n R.map(k => R.prop(`${k}Id`, chartDimension), ['x', 'y']),\n );\n}\n\nfunction getDimensionValues(\n dimensionValuesIndexes,\n dimensions,\n dimensionsWithValuesIndexedById,\n chartDimensionId,\n display,\n) {\n const dimensionsWithValuesIds = R.keys(dimensionsWithValuesIndexedById);\n return R.addIndex(R.reduce)(\n (acc, dvi, i) => {\n const dimension = R.nth(i, dimensions);\n const dimensionId = R.prop('id', dimension);\n const dimensionValue = R.nth(dvi, R.propOr([], 'values', dimension || {}));\n if (dimensionId !== chartDimensionId && R.includes(dimensionId, dimensionsWithValuesIds)) {\n return R.assoc(\n dimensionId,\n { ...dimensionValue, name: dimensionValueDisplay(display)(dimensionValue) },\n acc,\n );\n }\n return acc;\n },\n {},\n dimensionValuesIndexes,\n );\n}\n\nfunction getDimensionValueKey(chartDimension, dimensionValue) {\n return R.prop('xId', chartDimension) === R.prop('id', dimensionValue) ? 'x' : 'y';\n}\n\nfunction datapoints(\n observations,\n dimensions,\n dimensionsWithValuesIndexedById,\n chartDimension,\n display,\n formaterAttrs,\n) {\n const chartDimensionId = R.prop('id', chartDimension);\n const chartDimensionIndex = R.findIndex(R.propEq(chartDimensionId, 'id'), dimensions);\n const datapoints = R.reduce(\n (acc, k) => {\n const o = R.prop(k, observations);\n const oDimensionValuesIndexes = R.split(':', k);\n const oDimensionValueIndex = oDimensionValuesIndexes[chartDimensionIndex];\n const _chartDimension = R.nth(chartDimensionIndex, dimensions);\n const oDimensionValue = R.nth(\n oDimensionValueIndex,\n R.propOr([], 'values', _chartDimension || {}),\n );\n if (dimensionValueIsValid(oDimensionValue, chartDimension)) {\n const oPartialKey = R.pipe(\n R.addIndex(R.reject)((_, i) => i === chartDimensionIndex),\n R.join(':'),\n )(oDimensionValuesIndexes);\n\n if (!R.has(oPartialKey, acc)) {\n const dimensionValues = getDimensionValues(\n oDimensionValuesIndexes,\n dimensions,\n dimensionsWithValuesIndexedById,\n chartDimensionId,\n display,\n );\n acc[oPartialKey] = { dimensionValues };\n }\n const dimensionValueKey = getDimensionValueKey(chartDimension, oDimensionValue);\n acc[oPartialKey][dimensionValueKey] = R.head(o);\n acc[oPartialKey][`${dimensionValueKey}Format`] = getFormatedObservation(o, formaterAttrs);\n }\n return acc;\n },\n {},\n R.keys(observations),\n );\n // it is possible to have null observations or incomplete datapoints (just an x or y)\n return R.pipe(\n R.filter(dp => !R.isNil(dp.x) && !R.isNil(dp.y)),\n R.values,\n )(datapoints);\n}\n\nconst series = (\n observations,\n dimensions,\n dimensionsWithValuesIndexedById,\n chartDimension,\n display,\n formaterAttrs,\n) => {\n const values = R.pipe(\n R.prop(R.prop('id', chartDimension || {})),\n R.propOr([], 'values'),\n )(dimensionsWithValuesIndexedById);\n const xValue = R.find(R.propEq(R.prop('xId', chartDimension), 'id'), values);\n const yValue = R.find(R.propEq(R.prop('yId', chartDimension), 'id'), values);\n return [\n {\n dimensionValues: {\n x: { ...xValue, name: dimensionValueDisplay(display)(xValue) },\n y: { ...yValue, name: dimensionValueDisplay(display)(yValue) },\n },\n datapoints: datapoints(\n observations,\n dimensions,\n dimensionsWithValuesIndexedById,\n chartDimension,\n display,\n formaterAttrs,\n ),\n },\n ];\n};\n\nexport default (\n { observations, dimensions },\n dimensionsWithValuesIndexedById,\n chartDimension,\n display,\n formaterAttrs,\n) =>\n series(\n observations,\n dimensions,\n dimensionsWithValuesIndexedById,\n chartDimension,\n display,\n formaterAttrs,\n );\n","import * as R from 'ramda';\nimport { getTimePeriodDimension } from '@sis-cc/dotstatsuite-sdmxjs';\nimport { categoryDisplay, dimensionValueDisplayAt } from '../dimension-utils';\nimport { getFormatedObservation } from '../observation-formater';\n\nconst getDimensionValues = (\n splitObservationKey,\n dimensions,\n dimensionsWithValuesIndexedById,\n rejectedId,\n display,\n) =>\n R.addIndex(R.reduce)(\n (acc, dimensionValueIndex, dimensionIndex) => {\n const dimension = R.nth(dimensionIndex, dimensions) || {};\n if (R.has(dimension.id, dimensionsWithValuesIndexedById) && dimension.id !== rejectedId) {\n const dimensionValue = R.pathOr({}, ['values', dimensionValueIndex], dimension);\n return R.set(\n R.lensPath([dimensionValue.id, 'name']),\n dimensionValueDisplayAt(dimension, dimensionValueIndex, display),\n acc,\n );\n }\n return acc;\n },\n {},\n splitObservationKey,\n );\n\nconst series = (\n observations,\n dimensions,\n dimensionsWithValuesIndexedById,\n timePeriodDimensionIndex,\n display,\n formaterAttrs,\n) => {\n const rawSeries = R.reduce(\n (acc, k) => {\n const o = observations[k];\n const oDimensionValuesIndexes = R.split(':', k);\n\n const timePeriodDimension = R.nth(timePeriodDimensionIndex, dimensions);\n const timePeriodDimensionValueIndex = R.nth(\n timePeriodDimensionIndex,\n oDimensionValuesIndexes,\n );\n const timePeriod = R.path(['values', timePeriodDimensionValueIndex], timePeriodDimension);\n\n const datapoint = {\n x: timePeriod.start,\n y: R.head(o),\n timeLabel: timePeriod.name,\n formatedValue: getFormatedObservation(o, formaterAttrs),\n dimensionValues: getDimensionValues(\n oDimensionValuesIndexes,\n dimensions,\n dimensionsWithValuesIndexedById,\n timePeriodDimension.id,\n display,\n ),\n };\n\n const category = categoryDisplay(\n oDimensionValuesIndexes,\n dimensions,\n dimensionsWithValuesIndexedById,\n timePeriodDimension.id,\n display,\n );\n let key = categoryDisplay(\n oDimensionValuesIndexes,\n dimensions,\n dimensionsWithValuesIndexedById,\n timePeriodDimension.id,\n 'code',\n );\n if (R.isNil(key) || R.isEmpty(key)) {\n key = 'uniq-dp';\n }\n const serieIndex = R.findIndex(serie => serie.key === key, acc);\n\n if (serieIndex !== -1)\n return R.over(R.lensPath([serieIndex, 'datapoints']), R.append(datapoint), acc);\n\n return R.append({ datapoints: [datapoint], category, key }, acc);\n },\n [],\n R.keys(observations),\n );\n return R.map(\n serie => ({ ...serie, datapoints: R.sortBy(R.prop('x'), serie.datapoints) }),\n rawSeries,\n );\n};\n\nexport default (\n { observations, dimensions },\n dimensionsWithValuesIndexedById,\n display,\n formaterAttrs,\n) => {\n const timePeriodDimension = getTimePeriodDimension({ dimensions });\n const timePeriodDimensionIndex = timePeriodDimension ? timePeriodDimension.__index : -1;\n const timePeriodDimensionHasManyPeriods = !R.has(\n R.prop('id', timePeriodDimension),\n dimensionsWithValuesIndexedById,\n );\n if (\n !timePeriodDimensionIndex ||\n timePeriodDimensionIndex === -1 ||\n timePeriodDimensionHasManyPeriods\n )\n return [];\n\n return series(\n observations,\n dimensions,\n dimensionsWithValuesIndexedById,\n timePeriodDimensionIndex,\n display,\n formaterAttrs,\n );\n};\n","import * as R from 'ramda';\nimport { categoryDisplay, dimensionValueDisplay } from '../dimension-utils';\nimport { getFormatedObservation } from '../observation-formater';\n\nconst series = (\n observations,\n dimensions,\n dimensionsWithValuesIndexedById,\n symbolDimension,\n sortDirection,\n display,\n formaterAttrs,\n) => {\n const symbolDimensionId = R.propOr(null, 'id', symbolDimension);\n if (symbolDimensionId === null) return [];\n const symbolDimIndex = R.findIndex(d => d.id === symbolDimensionId, dimensions);\n const datapoints = R.pipe(\n R.keys,\n R.reduce((acc, obsKey) => {\n const obs = observations[obsKey];\n if (R.isNil(R.head(obs)) || R.isEmpty(R.head(obs))) {\n return acc;\n }\n const obsDimsValsIndexes = R.split(':', obsKey);\n const symbolValIndex = Number(R.nth(symbolDimIndex, obsDimsValsIndexes));\n const symbolValId = R.path([symbolDimIndex, 'values', symbolValIndex, 'id'], dimensions);\n const symbolIndex = R.findIndex(R.propEq(symbolValId, 'id'), symbolDimension.serie);\n if (symbolIndex === -1) {\n return acc;\n }\n const category = categoryDisplay(\n obsDimsValsIndexes,\n dimensions,\n dimensionsWithValuesIndexedById,\n symbolDimensionId,\n display,\n );\n const ids = categoryDisplay(\n obsDimsValsIndexes,\n dimensions,\n dimensionsWithValuesIndexedById,\n symbolDimensionId,\n 'code',\n );\n const key = R.isNil(ids) || R.isEmpty(ids) ? 'uniq-dp' : ids;\n const dpIndex = R.findIndex(R.propEq(key, 'key'), acc);\n const dp = R.pipe(\n dpIndex =>\n dpIndex === -1\n ? {\n category,\n formatedValues: new Array(R.length(symbolDimension.serie)),\n values: new Array(R.length(symbolDimension.serie)),\n key,\n }\n : R.nth(dpIndex, acc),\n R.set(R.lensPath(['values', symbolValIndex]), R.head(obs)),\n R.set(\n R.lensPath(['formatedValues', symbolValIndex]),\n getFormatedObservation(obs, formaterAttrs),\n ),\n )(dpIndex);\n return dpIndex === -1 ? R.append(dp, acc) : R.set(R.lensIndex(dpIndex), dp, acc);\n }, []),\n R.sortBy(d => R.head(d.values) * sortDirection),\n )(observations);\n\n const symbolValues = R.map(dimensionValueDisplay(display), symbolDimension.serie);\n return [{ datapoints, symbolValues }];\n};\n\nexport default (\n { observations, dimensions },\n chartType,\n dimensionsWithValuesIndexedById,\n symbolDimension,\n display,\n formaterAttrs,\n) => {\n switch (chartType) {\n case 'HorizontalSymbolChart':\n return series(\n observations,\n dimensions,\n dimensionsWithValuesIndexedById,\n symbolDimension,\n -1,\n display,\n formaterAttrs,\n );\n case 'VerticalSymbolChart':\n return series(\n observations,\n dimensions,\n dimensionsWithValuesIndexedById,\n symbolDimension,\n 1,\n display,\n formaterAttrs,\n );\n default:\n return [];\n }\n};\n","import { isTimePeriodDimension } from '@sis-cc/dotstatsuite-sdmxjs';\nimport { dimensionValueDisplay } from '../dimension-utils';\nimport { getObservationFormater } from '../observation-formater';\nimport * as R from 'ramda';\n\nconst flatDatapoints = (\n observations,\n dimensions,\n dimensionsWithValuesIndexedById,\n serieDimensionId,\n display,\n formaterAttrs,\n [stackKey, categoryKey],\n) => {\n const datapoints = R.mapObjIndexed((observationValue, observationKey) => {\n let category = null;\n const value = Number(R.head(observationValue));\n const formater = getObservationFormater(observationValue, formaterAttrs);\n const splittedKey = R.split(':', observationKey);\n let layerKey = [];\n const layerDimensions = R.addIndex(R.reduce)(\n (memo, dimensionValueIndex, dimensionIndex) => {\n const dimension = R.nth(dimensionIndex, dimensions);\n const _dimensionValue = R.pathOr({}, ['values', Number(dimensionValueIndex)], dimension);\n const label = dimensionValueDisplay(display)(_dimensionValue);\n const dimensionValue = {\n ..._dimensionValue,\n index: Number(dimensionValueIndex),\n label,\n };\n if (dimension.id === serieDimensionId) {\n category = dimensionValue;\n } else if (R.has(dimension.id, dimensionsWithValuesIndexedById)) {\n memo.push(dimensionValue);\n layerKey.push(dimensionValueIndex);\n }\n return memo;\n },\n [],\n splittedKey,\n );\n return {\n formater,\n [categoryKey]: category,\n [stackKey]: value,\n layerDimensions,\n layerKey: R.join(':', layerKey),\n };\n }, observations);\n\n return R.values(datapoints);\n};\n\nconst serie = (\n observations,\n dimensions,\n dimensionsWithValuesIndexedById,\n singularity,\n display,\n formaterAttrs,\n [stackKey, categoryKey],\n) => {\n const serieDimensionId = R.propOr(null, 'id', singularity);\n const serieDimension = R.find(R.propEq(serieDimensionId, 'id'), dimensions);\n if (R.isNil(serieDimension)) {\n return { datapoints: [], layerSeries: [] };\n }\n const _flatDatapoints = flatDatapoints(\n observations,\n dimensions,\n dimensionsWithValuesIndexedById,\n serieDimensionId,\n display,\n formaterAttrs,\n [stackKey, categoryKey],\n );\n const layeredDatapoints = R.groupBy(R.prop('layerKey'), _flatDatapoints); // { [layeredKey]: [dps] }\n\n const layerFullSeries = R.map(\n datapoints => ({\n layerDimensions: R.prop('layerDimensions', R.head(datapoints)),\n layerKey: R.prop('layerKey', R.head(datapoints)),\n }),\n R.values(layeredDatapoints),\n ); // [{ layerDimensions, layerKey }]\n\n const layerLimit = R.propOr(Infinity, 'limit', singularity);\n const layerSeries = R.take(layerLimit, R.sortBy(R.prop('layerKey'), layerFullSeries));\n\n const layeredDatapointsKeyedByCategory = R.mapObjIndexed(\n R.indexBy(R.path([categoryKey, 'id'])),\n layeredDatapoints,\n ); // { [layeredKey]: { [x.id]: dp } }\n\n const datapoints = R.addIndex(R.map)((serieValue, index) => {\n const serieValueId = serieValue.id;\n const category = dimensionValueDisplay(display)(serieValue);\n const values = R.map(\n ({ layerKey }) =>\n R.pathOr(null, [layerKey, serieValueId, stackKey], layeredDatapointsKeyedByCategory),\n layerSeries,\n );\n const formaters = R.map(\n ({ layerKey }) =>\n R.pathOr(null, [layerKey, serieValueId, 'formater'], layeredDatapointsKeyedByCategory),\n layerSeries,\n );\n return {\n category,\n formaters,\n index,\n [categoryKey]: category,\n [stackKey]: values,\n key: serieValueId,\n };\n }, serieDimension.values);\n\n const _datapoints = R.when(\n R.pipe(R.length, R.equals(1)),\n R.pipe(R.set(R.lensPath([0, 'category']), ''), R.set(R.lensPath([0, categoryKey]), '')),\n datapoints,\n );\n\n return {\n datapoints: _datapoints,\n layerSeries: R.map(\n layer => ({\n id: R.pipe(R.prop('layerDimensions'), R.pluck('id'), R.join(' - '))(layer),\n label: R.pipe(R.prop('layerDimensions'), R.pluck('label'), R.join(' - '))(layer),\n }),\n layerSeries,\n ),\n };\n};\n\nconst percentSerie = stackKey =>\n R.pipe(\n R.over(\n R.lensProp('datapoints'),\n R.map(dp => {\n const total = R.pipe(\n R.map(v => Math.abs(v)),\n R.sum,\n )(dp[stackKey]);\n if (!total) {\n return dp;\n }\n return {\n ...dp,\n [stackKey]: R.map(v => (Math.abs(v) / total) * 100, dp[stackKey]),\n formaters: null,\n };\n }),\n ),\n res => R.of(Array, res),\n );\n\nconst serieSortedByTotal = stackKey =>\n R.pipe(\n R.over(\n R.lensProp('datapoints'),\n R.sortBy(\n R.pipe(\n R.prop(stackKey),\n R.map(v => (v > 0 ? R.negate(v) : 0)),\n R.sum,\n ),\n ),\n ),\n res => R.of(Array, res),\n );\n\nconst serieSortedByDataOrder = R.pipe(\n R.over(R.lensProp('datapoints'), R.sortBy(R.prop('index'))),\n res => R.of(Array, res),\n);\n\nexport default (\n { observations, dimensions },\n dimensionsWithValuesIndexedById,\n singularity,\n display,\n formaterAttrs,\n [stackKey, categoryKey],\n) => {\n const mode = R.propOr('values', 'mode', singularity);\n const serieDimensionId = R.propOr(null, 'id', singularity);\n const _serie = serie(\n observations,\n dimensions,\n dimensionsWithValuesIndexedById,\n singularity,\n display,\n formaterAttrs,\n [stackKey, categoryKey],\n );\n if (mode === 'percent') {\n return percentSerie(stackKey)(_serie);\n } else if (isTimePeriodDimension({ id: serieDimensionId })) {\n return serieSortedByDataOrder(_serie);\n }\n return serieSortedByTotal(stackKey)(_serie);\n};\n","import * as R from 'ramda';\nimport { getRefAreaDimension } from '@sis-cc/dotstatsuite-sdmxjs';\nimport { categoryDisplay, dimensionValueDisplay } from '../dimension-utils';\n\nconst parseByAreas = (observations, refAreaDimension) => {\n if (R.isNil(refAreaDimension)) {\n return null;\n }\n const { __index, values = [] } = refAreaDimension;\n\n return R.pipe(\n R.keys,\n R.reduce((acc, key) => {\n const value = observations[key];\n const splitedKey = R.split(':', key);\n const areaValueIndex = Number(R.nth(__index, splitedKey));\n const areaValue = isNaN(areaValueIndex) ? null : R.nth(areaValueIndex, values);\n const areaId = R.prop('id', areaValue || {});\n return R.over(\n R.lensProp(areaId),\n vals => R.append({ splitedKey, value, areaValueIndex }, vals || []),\n acc,\n );\n }, {}),\n )(observations);\n};\n\nexport default (\n { observations, dimensions },\n dimensionsWithValuesIndexedById,\n topoMap,\n display,\n) => {\n const refAreaDimension = getRefAreaDimension({ dimensions });\n const observationsByAreas = parseByAreas(observations, refAreaDimension);\n const topology = R.propOr({}, 'topology', topoMap);\n const areaSelection = R.propOr(null, 'areaSelection', topoMap);\n const topoAreas = R.pathOr(null, ['objects', areaSelection], topology);\n if (!observationsByAreas || !topoAreas) {\n return null;\n }\n const topoAreasWithData = R.map(areaGeometry => {\n const areaObservation = R.pipe(\n R.pathOr(null, ['properties', 'id']),\n id => R.propOr([], id, observationsByAreas),\n R.head,\n )(areaGeometry);\n const areaValueIndex = R.propOr(null, 'areaValueIndex', areaObservation);\n const areaValue = R.pathOr(null, ['values', areaValueIndex], refAreaDimension);\n return {\n ...areaGeometry,\n properties: {\n ...R.propOr({}, 'properties', areaGeometry),\n label: dimensionValueDisplay(display)(areaValue),\n value: R.head(R.propOr([], 'value', areaObservation)),\n category: categoryDisplay(\n R.propOr([], 'splitedKey', areaObservation),\n dimensions,\n dimensionsWithValuesIndexedById,\n refAreaDimension.id,\n display,\n ),\n },\n };\n }, topoAreas.geometries);\n return {\n objects: {\n areas: {\n type: topoAreas.type,\n geometries: topoAreasWithData,\n },\n },\n arcs: topology.arcs,\n bbox: topology.bbox,\n transform: topology.transform,\n };\n};\n","import * as R from 'ramda';\nimport sampleSeries from './sample-series';\nimport scatterSeries from './scatter-series';\nimport timelineSeries from './timeline-series';\nimport symbolSeries from './symbol-series';\nimport stackedSeries from './stacked-series';\nimport choroSeries from './choro-series';\nimport { getObservationsFormaterAttributes } from '../observation-formater';\n\nexport default ({ type, data, options, singularity }) => {\n const { display, formatterIds, map } = options;\n\n const { attributes = [] } = data;\n const formaterAttributes = getObservationsFormaterAttributes(attributes, formatterIds);\n\n const indexedDimensions = R.reduce(\n (acc, dim) => {\n if (dim.header) {\n return acc;\n }\n return R.assoc(dim.id, dim, acc);\n },\n {},\n data.dimensions || [],\n );\n\n switch (type) {\n case 'BarChart':\n case 'RowChart':\n return sampleSeries(type, data, indexedDimensions, display, formaterAttributes);\n case 'ScatterChart':\n return scatterSeries(data, indexedDimensions, singularity, display, formaterAttributes);\n case 'TimelineChart':\n return timelineSeries(data, indexedDimensions, display, formaterAttributes);\n case 'HorizontalSymbolChart':\n case 'VerticalSymbolChart':\n return symbolSeries(data, type, indexedDimensions, singularity, display, formaterAttributes);\n case 'StackedBarChart':\n return stackedSeries(data, indexedDimensions, singularity, display, formaterAttributes, [\n 'y',\n 'x',\n ]);\n case 'StackedRowChart':\n return stackedSeries(data, indexedDimensions, singularity, display, formaterAttributes, [\n 'x',\n 'y',\n ]);\n case 'ChoroplethChart':\n return choroSeries(data, indexedDimensions, map, display);\n default:\n return [];\n }\n};\n","import {\n equals,\n find,\n groupBy,\n has,\n is,\n isEmpty,\n isNil,\n length,\n map,\n not,\n omit,\n pipe,\n prop,\n propEq,\n propOr,\n reject,\n head,\n} from 'ramda';\nimport { isRefAreaDimension, isTimePeriodDimension } from '@sis-cc/dotstatsuite-sdmxjs';\nimport { parseDisplay } from '../dimension-utils';\nimport { CHORO, STACKED_BAR, STACKED_ROW, TYPES } from '../constants';\nimport { dimensionValueDisplay } from '../dimension-utils';\n\nexport const isNumber = input => {\n const value = Number(input);\n return not(isNil(value) || isNaN(value));\n};\n\nexport const isPositiveNumber = input => {\n return isNumber(input) && Number(input) >= 0;\n};\n\nexport const isNaturalInt = value => isNil(value) || /^\\d+$/.test(String(value));\n\nexport const isChart = type => has(type, TYPES);\n\nexport const hasFocus = type => has(type, omit([CHORO], TYPES));\n\nexport const getDimensionsWithValues = data =>\n pipe(\n propOr([], 'dimensions'),\n reject(d => d.header || isEmpty(d.values || [])),\n )(data);\n\nexport const toState = artefact => prop('id', artefact);\n\nexport const getPropertyDimension = property => (data, state) => {\n const dimensionId = prop(property, state);\n const { dimensions = [] } = data || {};\n\n return find(propEq(dimensionId, 'id'), dimensions);\n};\n\nexport const getGroupedDimensions = pipe(\n getDimensionsWithValues,\n groupBy(dimension => {\n if (isRefAreaDimension(dimension)) {\n return 'area';\n }\n if (isTimePeriodDimension(dimension)) {\n return 'time';\n }\n return 'other';\n }),\n);\n\nexport const optionParser = option =>\n pipe(\n option => (is(Array, option) ? head(option) : option),\n option => (is(Object, option) ? prop('value', option) : option),\n option => (is(String, option) ? option : undefined),\n )(option);\n\nexport const artefactToOption = display => artefact =>\n isNil(artefact)\n ? undefined\n : {\n label: dimensionValueDisplay(parseDisplay(display))(artefact),\n value: prop('id', artefact),\n };\n\nexport const chartDimensionToOption =\n property =>\n ({ data, display }, state) =>\n pipe(getPropertyDimension(property), artefactToOption(display))(data, state);\n\nexport const chartDimensionOptions = ({ data, type, display }, typeValidator) => {\n if (!typeValidator(type)) {\n return [];\n }\n const dimensions = getDimensionsWithValues(data);\n if ((equals(type, STACKED_BAR) || equals(type, STACKED_ROW)) && length(dimensions) === 1) {\n return [];\n }\n return map(artefactToOption(display), dimensions);\n};\n","import * as R from 'ramda';\nimport getSeries from '../factories/series';\nimport { BAR, ROW, TIMELINE } from '../constants';\nimport { hasFocus } from './utils';\nimport { dimensionValueDisplay, parseDisplay } from '../dimension-utils';\n\nconst sampleFocusTypes = { [BAR]: BAR, [ROW]: ROW, [TIMELINE]: TIMELINE };\n\nconst focusComparator = (op1, op2) => op1.value === op2.value;\n\nconst focus = (data, type, dimension, _display) => {\n const display = parseDisplay(_display);\n const id = R.prop('id', dimension);\n switch (type) {\n case 'RowChart':\n case 'BarChart':\n case 'HorizontalSymbolChart':\n case 'VerticalSymbolChart':\n case 'StackedBarChart':\n case 'StackedRowChart':\n return R.pipe(\n getSeries,\n R.pathOr([], [0, 'datapoints']),\n R.map(dp => ({ label: dp.category, value: dp.key })),\n )({ data, type, options: { display }, singularity: dimension });\n case 'TimelineChart':\n return R.pipe(\n getSeries,\n R.map(serie => ({ label: serie.category, value: serie.key })),\n )({ data, type, options: { display }, singularity: dimension });\n case 'ScatterChart':\n if (R.isNil(id)) return [];\n return R.pipe(\n R.propOr([], 'dimensions'),\n R.reduce((acc, dim) => {\n if (dim.header || dim.id === id) {\n return acc;\n }\n const dimOptions = R.map(\n val => ({\n label: `${dimensionValueDisplay(display)(dim)} - ${dimensionValueDisplay(display)(val)}`,\n options: { dimensionId: dim.id, dimensionValueId: val.id },\n value: `${dim.id}-${val.id}`,\n }),\n R.propOr([], 'values', dim),\n );\n return R.concat(acc, dimOptions);\n }, []),\n )(data);\n default:\n return [];\n }\n};\n\nexport const parseFocus = (data, type, dimension, display, { baseline, highlight }) => {\n const options = focus(data, type, dimension, display);\n const optionsSet = new Set(R.pluck('value', options));\n\n const parseSelection = R.reject(({ value }) => !optionsSet.has(value));\n\n return { baseline: parseSelection(baseline), highlight: parseSelection(highlight) };\n};\n\nexport const focusOptions = (props, state, otherFocus, singularity) => {\n if (!hasFocus(props.type)) {\n return [];\n }\n const options = focus(props.data, props.type, singularity, props.display);\n return R.differenceWith(focusComparator, options, R.prop(otherFocus, state));\n};\n\nexport const onChangeFocusSelection = _value => {\n const value = R.isNil(_value) ? [] : _value;\n return R.is(Array, value) ? value : [value];\n};\n\nconst toKey = () => R.prop('value');\n\nconst filterFocus = (focus, keyedOptions, type) =>\n R.reduce(\n (acc, entry) => {\n const entryKey = toKey(type)(entry);\n if (R.has(entryKey, keyedOptions)) {\n return R.append(R.prop(entryKey, keyedOptions), acc);\n }\n return acc;\n },\n [],\n focus,\n );\n\nexport const focusStateFromNewProps = ({ data, display, type }, singularity, state) => {\n const highlightState = R.propOr([], 'highlight', state);\n const baselineState = R.propOr([], 'baseline', state);\n const options = focus(data, type, singularity, display);\n const keyedOptions = R.indexBy(toKey(type), options);\n return {\n baseline: filterFocus(baselineState, keyedOptions, R.prop('type', state)),\n highlight: filterFocus(highlightState, keyedOptions, R.prop('type', state)),\n };\n};\n\n/*\n This props/state parser which will be exposed in highlight/baseline properties,\n only deals for Bar and Row Chart (no chart dimension singularity involved).\n For other chart types, their own chart dimension singularity parser will handle focus management.\n*/\n\nexport const sampleFocusStateFromNewProps = (props, state) => {\n if (!R.has(props.type, sampleFocusTypes) || R.isNil(props.data)) {\n return {}; //no changes\n }\n return focusStateFromNewProps(props, null, state);\n};\n","import * as R from 'ramda';\nimport { isRefAreaDimension } from '@sis-cc/dotstatsuite-sdmxjs';\nimport { SCATTER } from '../constants';\nimport { artefactToOption, getDimensionsWithValues, getPropertyDimension, toState } from './utils';\nimport { focusStateFromNewProps } from './focus';\n\nconst getScatterDimension = getPropertyDimension('scatterDimension');\n\nconst toScatterState = (dim, xVal, yVal) => ({\n scatterDimension: toState(dim),\n scatterX: toState(xVal),\n scatterY: toState(yVal),\n});\n\nexport const toScatterSingularity = state => ({\n id: R.prop('scatterDimension', state),\n xId: R.prop('scatterX', state),\n yId: R.prop('scatterY', state),\n});\n\nexport const isScatter = type => type === SCATTER;\n\nexport const scatterValueOptions = ({ data, type, display }, state) => {\n if (!isScatter(type)) {\n return [];\n }\n const scatterDimension = getScatterDimension(data, state);\n if (R.isNil(scatterDimension)) {\n return [];\n }\n return R.map(artefactToOption(display), R.prop('values', scatterDimension));\n};\n\nexport const onChangeScatterDim = (props, state) => value => {\n const { data } = props;\n const dimension = getScatterDimension(data, { scatterDimension: value });\n if (R.isNil(dimension)) {\n return {};\n }\n\n const [xVal, yVal] = R.take(2, R.prop('values', dimension));\n\n const newScatterState = toScatterState(dimension, xVal, yVal);\n\n return {\n ...newScatterState,\n ...focusStateFromNewProps(props, toScatterSingularity(newScatterState), state),\n };\n};\n\nexport const scatterStateValueToOption = (property, props, state) => {\n const dimension = getScatterDimension(props.data, state);\n if (R.isNil(dimension) || !isScatter(props.type)) {\n return undefined;\n }\n const value = R.find(R.propEq(R.prop(property, state), 'id'), R.prop('values', dimension));\n return artefactToOption(props.display)(value);\n};\n\nexport const onChangeScatterVal =\n ({ data, type }, state, valKey, otherValKey) =>\n value => {\n const options = scatterValueOptions({ data, type }, state);\n const [matching, otherOptions] = R.partition(R.propEq(value, 'value'), options);\n if (R.isEmpty(matching)) {\n return {};\n }\n const stateOtherValue = R.prop(otherValKey, state);\n return {\n [valKey]: value,\n [otherValKey]:\n stateOtherValue === value ? R.prop('value', R.head(otherOptions)) : stateOtherValue,\n };\n };\n\n//----------------------------------------------------------------------------------------------------\n\nexport const scatterStateFromNewProps = (props, state) => {\n const { data, type } = props;\n const undefinedState = toScatterState(undefined, undefined, undefined);\n if (!isScatter(type)) {\n return undefinedState;\n }\n if (R.isNil(data)) {\n return {};\n }\n const dimensions = getDimensionsWithValues(data);\n if (R.isEmpty(dimensions)) {\n return { ...undefinedState, highlight: [], baseline: [] };\n }\n\n let scatterDimension = getScatterDimension(props.data, state);\n if (R.isNil(scatterDimension)) {\n const refinedDimensions = R.reject(isRefAreaDimension, dimensions);\n scatterDimension = R.head(R.isEmpty(refinedDimensions) ? dimensions : refinedDimensions);\n }\n\n const values = R.prop('values', scatterDimension);\n\n const stateScatterX = R.prop('scatterX', state);\n let stateScatterY = R.prop('scatterY', state);\n\n if (stateScatterX === stateScatterY) {\n stateScatterY = undefined;\n }\n\n let _scatterX = undefined;\n let _scatterY = undefined;\n\n R.forEach(value => {\n if (R.prop('id', value) === stateScatterX) {\n _scatterX = value;\n } else if (R.prop('id', value) === stateScatterY) {\n _scatterY = value;\n }\n }, values);\n\n //dirty as f\n const scatterX = R.isNil(_scatterX)\n ? R.head(R.reject(R.propEq(R.prop('id', _scatterY), 'id'), values))\n : _scatterX;\n const scatterY = R.isNil(_scatterY)\n ? R.head(R.reject(R.propEq(R.prop('id', scatterX), 'id'), values))\n : _scatterY;\n\n const scatterState = toScatterState(scatterDimension, scatterX, scatterY);\n\n return {\n ...scatterState,\n ...focusStateFromNewProps(props, toScatterSingularity(scatterState), state),\n };\n};\n","import * as R from 'ramda';\nimport { H_SYMBOL, V_SYMBOL } from '../constants';\nimport {\n getDimensionsWithValues,\n getGroupedDimensions,\n getPropertyDimension,\n toState,\n} from './utils';\nimport { focusStateFromNewProps } from './focus';\n\nconst getSymbolDimension = getPropertyDimension('symbolDimension');\n\nexport const isSymbol = type => type === H_SYMBOL || type === V_SYMBOL;\n\nconst toSymbolState = dimension => ({\n symbolDimension: toState(dimension),\n});\n\nexport const toSymbolSingularity = (data, state) => {\n const symbolDimension = getSymbolDimension(data, state);\n const res = {\n id: R.isNil(symbolDimension) ? undefined : R.prop('id', symbolDimension),\n serie: R.pipe(\n R.prop('values'),\n values => (R.isNil(values) ? [] : values),\n R.take(5),\n )(symbolDimension),\n };\n return res;\n};\n\nexport const symbolStateFromNewProps = (props, state) => {\n const { data, type } = props;\n if (!isSymbol(type)) {\n return toSymbolState(undefined);\n }\n if (R.isNil(data)) {\n return {};\n }\n const dimensions = getDimensionsWithValues(data);\n if (R.isEmpty(dimensions)) {\n return { ...toSymbolState(undefined), baseline: [], highlight: [] };\n }\n let symbolDimension = getSymbolDimension(data, state);\n if (R.isNil(symbolDimension)) {\n const { area, other, time } = getGroupedDimensions(data);\n if (!R.isNil(other) && !R.isEmpty(other)) {\n symbolDimension = R.head(other);\n } else if (!R.isNil(time) && !R.isEmpty(time)) {\n symbolDimension = R.head(time);\n } else {\n symbolDimension = R.head(area);\n }\n }\n const symbolState = toSymbolState(symbolDimension);\n return {\n ...symbolState,\n ...focusStateFromNewProps(props, toSymbolSingularity(data, symbolState), state),\n };\n};\n\nexport const onChangeSymbolDim =\n ({ data }) =>\n option => {\n const dimension = getSymbolDimension(data, { symbolDimension: option });\n if (R.isNil(dimension)) {\n return {};\n }\n return {\n ...toSymbolState(dimension),\n highlight: [],\n baseline: [],\n };\n };\n","import * as R from 'ramda';\nimport { PERCENT, STACKED_BAR, STACKED_ROW, VALUES } from '../constants';\nimport {\n getDimensionsWithValues,\n getGroupedDimensions,\n getPropertyDimension,\n toState,\n} from './utils';\nimport { focusStateFromNewProps } from './focus';\n\nconst getStackedDimension = getPropertyDimension('stackedDimension');\n\nconst stackedModes = { [PERCENT]: PERCENT, [VALUES]: VALUES };\n\nexport const isStacked = type => type === STACKED_BAR || type === STACKED_ROW;\n\nconst toStackedState = (dimension, mode) => ({\n stackedDimension: toState(dimension),\n stackedMode: mode,\n});\n\nexport const toStackedSingularity = state => ({\n id: R.prop('stackedDimension', state),\n mode: R.prop('stackedMode', state),\n limit: 5,\n});\n\nexport const onChangeStackedDimension =\n ({ data }, state) =>\n value => {\n const dimension = getStackedDimension(data, { stackedDimension: value });\n if (R.isNil(dimension)) {\n return {};\n }\n return {\n stackedDimension: toState(dimension),\n highlight: [],\n baseline: [],\n };\n };\n\nexport const stackedModeOptions = [{ value: VALUES }, { value: PERCENT }];\n\nexport const isStackedDimActive = ({ data, type }) => {\n const dimensions = getDimensionsWithValues(data);\n if (R.length(dimensions) < 2) {\n return false;\n }\n return isStacked(type);\n};\n\nexport const onChangeStackedMode = value =>\n R.has(value, stackedModes) ? { stackedMode: value } : {};\n\nexport const stackedStateFromNewProps = (props, state) => {\n const { data, type } = props;\n if (!isStacked(type)) {\n return toStackedState(undefined, undefined);\n }\n if (R.isNil(data)) {\n return {};\n }\n const dimensions = getDimensionsWithValues(data);\n if (R.isEmpty(dimensions)) {\n return { ...toStackedState(undefined, undefined), baseline: [], highlight: [] };\n }\n\n let dimension = getStackedDimension(data, state);\n if (R.isNil(dimension)) {\n if (R.length(dimensions) === 1) {\n dimension = R.find(R.prop('header'), data.dimensions);\n } else {\n const { area, time, other } = getGroupedDimensions(data);\n if (!R.isNil(area) && !R.isEmpty(area)) {\n dimension = R.head(area);\n } else if (!R.isNil(time) && !R.isEmpty(time)) {\n dimension = R.head(time);\n } else {\n dimension = R.head(other);\n }\n }\n }\n const _mode = R.prop('stackedMode', state);\n const mode = R.has(_mode, stackedModes) ? _mode : VALUES;\n const stackedState = toStackedState(dimension, mode);\n return {\n ...stackedState,\n ...focusStateFromNewProps(props, toStackedSingularity(stackedState), state),\n };\n};\n","import * as R from 'ramda';\nimport {\n BAR,\n H_SYMBOL,\n ROW,\n SCATTER,\n STACKED_BAR,\n STACKED_ROW,\n TIMELINE,\n V_SYMBOL,\n} from '../constants';\nimport { isNumber, isPositiveNumber } from './utils';\nimport { isStacked } from './stacked';\n\nconst hasXLinear = type => R.includes(type, [H_SYMBOL, ROW, SCATTER, STACKED_ROW]);\n\nconst hasYLinear = type => R.includes(type, [BAR, SCATTER, STACKED_BAR, TIMELINE, V_SYMBOL]);\n\nconst hasXPivot = type => R.equals(ROW, type);\nconst hasYPivot = type => R.equals(BAR, type);\n\nconst xInitialState = {\n computedMaxX: undefined,\n computedMinX: undefined,\n computedStepX: undefined,\n computedPivotX: undefined,\n maxX: undefined,\n minX: undefined,\n pivotX: undefined,\n stepX: undefined,\n};\n\nconst yInitialState = {\n computedMaxY: undefined,\n computedMinY: undefined,\n computedStepY: undefined,\n computedPivotY: undefined,\n maxY: undefined,\n minY: undefined,\n pivotY: undefined,\n stepY: undefined,\n};\n\nexport const initialState = { ...xInitialState, ...yInitialState };\n\nexport const linearStateFromNewProps = type => {\n const xLinearState = hasXLinear(type) ? {} : xInitialState;\n const YLinearState = hasYLinear(type) ? {} : yInitialState;\n return {\n ...xLinearState,\n ...R.when(R.always(isStacked(type)), R.assoc('pivotY', 0))(YLinearState),\n };\n};\n\nexport const toProperties = (props, state, onChange) => ({\n maxX: {\n id: 'maxX',\n isActive: hasXLinear(props.type),\n onChange: value =>\n onChange({\n maxX: isNumber(value) ? value : undefined,\n }),\n value: R.isNil(state.maxX) ? String(state.computedMaxX) : state.maxX,\n },\n maxY: {\n id: 'maxY',\n isActive: hasYLinear(props.type),\n onChange: value =>\n onChange({\n maxY: isNumber(value) ? value : undefined,\n }),\n value: R.isNil(state.maxY) ? String(state.computedMaxY) : state.maxY,\n },\n minX: {\n id: 'minX',\n isActive: hasXLinear(props.type),\n onChange: value =>\n onChange({\n minX: isNumber(value) ? value : undefined,\n }),\n value: R.isNil(state.minX) ? String(state.computedMinX) : state.minX,\n },\n minY: {\n id: 'minY',\n isActive: hasYLinear(props.type),\n onChange: value =>\n onChange({\n minY: isNumber(value) ? value : undefined,\n }),\n value: R.isNil(state.minY) ? String(state.computedMinY) : state.minY,\n },\n pivotX: {\n id: 'pivotX',\n isActive: hasXPivot(props.type),\n onChange: value =>\n onChange({\n pivotX: isNumber(value) ? value : undefined,\n }),\n value: R.when(\n v => R.isNil(v) && (R.propEq(ROW, 'type')(props) || R.propEq(STACKED_ROW, 'type')(props)),\n R.always(0),\n )(R.isNil(state.pivotX) ? String(state.computedPivotX) : state.pivotX),\n },\n pivotY: {\n id: 'pivotY',\n isActive: hasYPivot(props.type),\n onChange: value =>\n onChange({\n pivotY: isNumber(value) ? value : undefined,\n }),\n value: R.when(\n v => R.isNil(v) && (R.propEq(BAR, 'type')(props) || R.propEq(STACKED_BAR, 'type')(props)),\n R.always(0),\n )(R.isNil(state.pivotY) ? String(state.computedPivotY) : state.pivotY),\n },\n stepX: {\n id: 'stepX',\n isActive: hasXLinear(props.type),\n onChange: value =>\n onChange({\n stepX: isPositiveNumber(value) ? value : undefined,\n }),\n value: R.isNil(state.stepX) ? String(state.computedStepX) : state.stepX,\n },\n stepY: {\n id: 'stepY',\n isActive: hasYLinear(props.type),\n onChange: value =>\n onChange({\n stepY: isPositiveNumber(value) ? value : undefined,\n }),\n value: R.isNil(state.stepY) ? String(state.computedStepY) : state.stepY,\n },\n});\n","import * as R from 'ramda';\nimport { dimensionValueDisplay, parseDisplay } from '../dimension-utils';\nimport { isChart } from './utils';\n\nconst isCustomInvalid =\n ({ type }) =>\n value =>\n R.isNil(value) || !isChart(type);\n\nconst getDataflowName = props => {\n const dataflow = R.propOr({}, 'dataflow', props);\n const display = parseDisplay(props.display);\n return dimensionValueDisplay(display)(dataflow);\n};\n\nexport const getSourceLabel = (props, state) =>\n R.when(\n isCustomInvalid({ type: props.type }),\n R.always(getDataflowName(props)),\n )(state.sourceLabel);\n\nexport const getFooterProps = (props, state) => ({\n withCopyright: isChart(props.type) ? state.withCopyright : true,\n withLogo: isChart(props.type) ? state.withLogo : true,\n sourceLabel: getSourceLabel(props, state),\n});\n","import * as R from 'ramda';\n\nexport const stringifySubtitle = R.pipe(\n R.map(({ header, label }) => (R.isNil(header) ? label : `${header} ${label}`)),\n R.join(' · '),\n);\n","import * as R from 'ramda';\nimport { H_SYMBOL, SCATTER, STACKED_BAR, STACKED_ROW, TIMELINE, V_SYMBOL } from '../constants';\nimport { onChangeFocusSelection, focusOptions, sampleFocusStateFromNewProps } from './focus';\nimport {\n isScatter,\n onChangeScatterDim,\n onChangeScatterVal,\n scatterStateFromNewProps,\n scatterStateValueToOption,\n scatterValueOptions,\n toScatterSingularity,\n} from './scatter';\nimport {\n isSymbol,\n onChangeSymbolDim,\n symbolStateFromNewProps,\n toSymbolSingularity,\n} from './symbol';\nimport {\n isStacked,\n isStackedDimActive,\n onChangeStackedDimension,\n onChangeStackedMode,\n stackedModeOptions,\n stackedStateFromNewProps,\n toStackedSingularity,\n} from './stacked';\nimport {\n linearStateFromNewProps,\n initialState as linearInitialState,\n toProperties as toLinearProperties,\n} from './linear';\nimport {\n chartDimensionOptions,\n chartDimensionToOption,\n hasFocus,\n isChart,\n isNaturalInt,\n optionParser,\n} from './utils';\nimport { getSourceLabel } from './getHeaderProps';\nimport { stringifySubtitle } from './getStringifiedSubtitle';\n\n/*\n - width/height -> initial undefined, if undefined or blank, replaced by options.base\n*/\n\nexport const toSingularity = ({ data, type }, state) => {\n switch (type) {\n case SCATTER:\n return toScatterSingularity(state);\n case H_SYMBOL:\n case V_SYMBOL:\n return toSymbolSingularity(data, state);\n case STACKED_BAR:\n case STACKED_ROW:\n return toStackedSingularity(state);\n default:\n return null;\n }\n};\n\nconst toFloat = value => {\n const float = parseFloat(value);\n return isNaN(float) ? undefined : float;\n};\n\nconst toOption = (stateValue, optionValue) =>\n R.isNil(stateValue) ? optionValue : toFloat(stateValue);\n\nconst getFreqStepOption = (props, state) => {\n if (props.type !== TIMELINE) {\n return null;\n }\n const inputState = toFloat(state.freqStep);\n return R.isNil(inputState) ? 1 : inputState;\n};\n\nexport const toChartOptions = (props, state) => {\n const options = R.propOr({}, 'options', props);\n const base = R.propOr({}, 'base', options);\n const axis = R.propOr({}, 'axis', options);\n const axeX = R.propOr({}, 'x', axis);\n const axeY = R.propOr({}, 'y', axis);\n const linearX = R.propOr({}, 'linear', axeX);\n const linearY = R.propOr({}, 'linear', axeY);\n const tickX = R.propOr({}, 'tick', axeX);\n const pivotX = R.propOr({}, 'pivot', linearX);\n const pivotY = R.propOr({}, 'pivot', linearY);\n const map = R.propOr({}, 'map', props);\n return {\n ...options,\n axis: {\n ...axis,\n x: {\n ...axeX,\n tick: {\n ...tickX,\n step: getFreqStepOption(props, state),\n },\n linear: {\n ...linearX,\n max: toOption(state.maxX, linearX.max),\n min: toOption(state.minX, linearX.min),\n pivot: {\n value: toOption(state.pivotX, pivotX.value),\n },\n step: toOption(props.type === TIMELINE ? 1 : state.stepX, linearX.step),\n },\n },\n y: {\n ...axeY,\n linear: {\n ...linearY,\n max: toOption(state.maxY, linearY.max),\n min: toOption(state.minY, linearY.min),\n pivot: {\n value: toOption(state.pivotY, pivotY.value),\n },\n step: toOption(state.stepY, linearY.step),\n },\n },\n },\n map: R.pick(['projection', 'scale'], map),\n base: {\n ...base,\n height: toOption(state.fixedHeight, base.height),\n width: toOption(state.fixedWidth, base.width),\n },\n };\n};\n\nexport const stateFromNewProps = (props, state) => {\n const focusState = sampleFocusStateFromNewProps(props, state);\n const scatterState = scatterStateFromNewProps(props, state);\n const symbolState = symbolStateFromNewProps(props, state);\n const stackedState = stackedStateFromNewProps(props, state);\n const linearState = linearStateFromNewProps(props.type);\n return {\n ...focusState,\n ...scatterState,\n ...symbolState,\n ...stackedState,\n ...linearState,\n fixedWidth: R.prop('fixedWidth', state),\n fixedHeight: R.prop('fixedHeight', state),\n responsiveWidth: R.prop('responsiveWidth', state),\n responsiveHeight: R.prop('responsiveHeight', state),\n freqStep: props.type === TIMELINE ? R.prop('freqStep', state) || '1' : undefined,\n type: R.prop('type', props),\n };\n};\n\nexport const toProperties = (props, state, onChange) => ({\n ...toLinearProperties(props, state, onChange),\n highlight: {\n id: 'highlight',\n isActive: hasFocus(props.type),\n onChange: R.pipe(onChangeFocusSelection, selection => {\n onChange({ highlight: selection });\n }),\n options: focusOptions(props, state, 'baseline', toSingularity(props, state)),\n value: R.prop('highlight', state),\n },\n baseline: {\n id: 'baseline',\n isActive: hasFocus(props.type),\n onChange: R.pipe(onChangeFocusSelection, selection => onChange({ baseline: selection })),\n options: focusOptions(props, state, 'highlight', toSingularity(props, state)),\n value: R.prop('baseline', state),\n },\n width: {\n id: 'width',\n isActive: isChart(props.type),\n onChange: value =>\n onChange({\n fixedWidth: isNaturalInt(value) ? value : undefined,\n }),\n placeholder: R.when(R.complement(R.isNil), value => String(Math.floor(Number(value))))(\n state.responsiveWidth,\n ),\n value: R.prop('fixedWidth', state),\n },\n height: {\n id: 'height',\n isActive: isChart(props.type),\n onChange: value =>\n onChange({\n fixedHeight: isNaturalInt(value) ? value : undefined,\n }),\n placeholder: R.when(R.complement(R.isNil), value => String(Math.floor(Number(value))))(\n state.responsiveHeight,\n ),\n },\n freqStep: {\n id: 'freqStep',\n isActive: props.type === TIMELINE,\n onChange: value =>\n onChange({\n freqStep: isNaturalInt(value) ? String(value) : undefined,\n }),\n value: R.prop('freqStep', state),\n },\n title: {\n id: 'title',\n isActive: isChart(props.type),\n isDefault: R.isNil(state.title),\n onChange: value => onChange({ title: value }),\n value:\n R.isNil(state.title) || R.isEmpty(state.title)\n ? R.pathOr('', ['title', 'label'], props)\n : state.title,\n onReset: R.isNil(state.title) ? null : () => onChange({ title: null }),\n },\n subtitle: {\n id: 'subtitle',\n isActive: isChart(props.type),\n isDefault: R.isNil(state.subtitle),\n onChange: value => onChange({ subtitle: value }),\n value:\n R.isNil(state.subtitle) || R.isEmpty(state.subtitle)\n ? stringifySubtitle(props.subtitle || [])\n : state.subtitle,\n onReset: R.isNil(state.subtitle) ? null : () => onChange({ subtitle: null }),\n },\n source: {\n id: 'source',\n isActive: isChart(props.type),\n isDefault: R.isNil(state.sourceLabel),\n onChange: value => onChange({ sourceLabel: value }),\n value: getSourceLabel(props, state),\n onReset: R.isNil(state.sourceLabel) ? null : () => onChange({ sourceLabel: null }),\n },\n scatterDimension: {\n id: 'scatterDimension',\n isActive: isScatter(props.type),\n onChange: R.pipe(optionParser, onChangeScatterDim(props, state), onChange),\n options: chartDimensionOptions(props, isScatter),\n value: chartDimensionToOption('scatterDimension')(props, state),\n },\n scatterX: {\n id: 'scatterX',\n isActive: isScatter(props.type),\n onChange: R.pipe(\n optionParser,\n onChangeScatterVal(props, state, 'scatterX', 'scatterY'),\n onChange,\n ),\n options: scatterValueOptions(props, state),\n value: scatterStateValueToOption('scatterX', props, state),\n },\n scatterY: {\n id: 'scatterY',\n isActive: isScatter(props.type),\n onChange: R.pipe(\n optionParser,\n onChangeScatterVal(props, state, 'scatterY', 'scatterX'),\n onChange,\n ),\n options: scatterValueOptions(props, state),\n value: scatterStateValueToOption('scatterY', props, state),\n },\n symbolDimension: {\n id: 'symbolDimension',\n isActive: isSymbol(props.type),\n options: chartDimensionOptions(props, isSymbol),\n onChange: R.pipe(optionParser, onChangeSymbolDim(props), onChange),\n value: chartDimensionToOption('symbolDimension')(props, state),\n },\n stackedDimension: {\n id: 'stackedDimension',\n isActive: isStackedDimActive(props),\n options: chartDimensionOptions(props, isStacked),\n onChange: R.pipe(optionParser, onChangeStackedDimension(props, state), onChange),\n value: chartDimensionToOption('stackedDimension')(props, state),\n },\n stackedMode: {\n id: 'stackedMode',\n isActive: isStacked(props.type),\n options: stackedModeOptions,\n onChange: R.pipe(optionParser, onChangeStackedMode, onChange),\n value: R.prop('stackedMode', state),\n },\n logo: {\n id: 'logo',\n isActive: isChart(props.type),\n checked: !state.withLogo,\n onChange: () => onChange({ withLogo: !state.withLogo }),\n },\n copyright: {\n id: 'copyright',\n isActive: isChart(props.type),\n checked: !state.withCopyright,\n onChange: () => onChange({ withCopyright: !state.withCopyright }),\n },\n});\n","import * as R from 'ramda';\n\nconst NOT_DISPLAYED = 'NOT_DISPLAYED';\n\nexport const getIsHidden = annotations =>\n R.pipe(R.find(R.propEq(NOT_DISPLAYED, 'type')), R.complement(R.isNil))(annotations);\n\nexport const getFullName = R.identity;\n","import * as R from 'ramda';\nimport * as dateFns from 'date-fns';\nimport { fr, de, enUS as en, es, ar, it, nl, th } from 'date-fns/locale';\n\nconst isValidDate = period =>\n R.and(dateFns.isDate, date => R.not(R.equals(date.getTime(date), NaN)))(new Date(period));\n\nexport const dateWithoutTZ = date => dateFns.addMinutes(date, date.getTimezoneOffset());\n\nexport const getLocale = R.cond([\n [R.equals('fr'), R.always(fr)],\n [R.equals('de'), R.always(de)],\n [R.equals('es'), R.always(es)],\n [R.equals('ar'), R.always(ar)],\n [R.equals('it'), R.always(it)],\n [R.equals('nl'), R.always(nl)],\n [R.equals('th'), R.always(th)],\n [R.T, R.always(en)],\n]);\n\nconst formaterPeriod = (locale, format) => date =>\n dateFns.format(date, format, { locale: getLocale(locale) });\n\nexport const getReportedTimePeriodLabel =\n (freq, _format, locale) =>\n (reportYearStart, { id, start, reportedStart }) => {\n const year = dateFns.getYear(start);\n const reportStartDate = new Date(year, reportYearStart.month, reportYearStart.day);\n const isReportFirstDate = dateFns.isEqual(reportStartDate, new Date(year, 1, 1));\n if (isReportFirstDate || freq === 'D') {\n return R.isNil(_format) || freq !== 'M'\n ? id\n : dateFns.format(start, _format, { locale: getLocale(locale) });\n }\n const nextYear = year + 1;\n if (freq === 'A') {\n return `${year}/${nextYear}`;\n }\n if (freq === 'S') {\n const [semester] = R.match(/S\\d/, id);\n return `${year}/${nextYear}-${semester}`;\n }\n if (freq === 'Q') {\n const [quarter] = R.match(/Q\\d/, id);\n return `${year}/${nextYear}-${quarter}`;\n }\n if (freq === 'M') {\n const isFirstDayOfMonth = dateFns.isFirstDayOfMonth(reportedStart);\n if (isFirstDayOfMonth) {\n return R.isNil(_format)\n ? id\n : dateFns.format(reportedStart, _format, { locale: getLocale(locale) });\n }\n const [month] = R.match(/M[\\d]{2}/, id);\n return `${year}/${nextYear}-${month}`;\n }\n const [week] = R.match(/W[\\d]{2}/, id);\n return `${year}/${nextYear}-${week}`;\n };\n\nexport const getReportedTimePeriod = (reportYearStart, value, freq) => {\n let start = new Date(R.prop('start', value));\n let end = dateWithoutTZ(new Date(R.prop('end', value)));\n if (reportYearStart.month === '01' && reportYearStart.day === '01') {\n return { start, end };\n }\n start = dateFns.addMonths(start, reportYearStart.month - 1);\n start = dateFns.addDays(start, reportYearStart.day - 1);\n if (freq === 'A') {\n end = dateFns.addYears(start, 1);\n }\n if (freq === 'S') {\n end = dateFns.addMonths(start, 6);\n }\n if (freq === 'Q') {\n end = dateFns.addMonths(start, 3);\n }\n if (freq === 'M') {\n end = dateFns.addMonths(start, 6);\n }\n if (freq === 'W' || freq === 'B') {\n end = dateFns.addDays(start, 7);\n }\n if (freq === 'D') {\n end = dateFns.addDays(start, 1);\n }\n if (freq === 'H') {\n end = dateFns.addHours(start, 1);\n }\n if (freq === 'N') {\n end = dateFns.addMinutes(start, 1);\n }\n end = dateFns.subSeconds(end, 1);\n return { start, end };\n};\n\nexport const getReportedTimePeriodNote = (reportYearStart, start, end, freq) => {\n if (reportYearStart.month === '01' && reportYearStart.day === '01') {\n return null;\n }\n if (R.includes(freq, ['D', 'H', 'N'])) {\n return null;\n }\n const isFirstDayOfMonth = dateFns.isFirstDayOfMonth(start);\n if (freq === 'M' && isFirstDayOfMonth) {\n return null;\n }\n const formatedStart = dateFns.format(start, 'yyyy-MM-dd');\n const formatedEnd = dateFns.format(end, 'yyyy-MM-dd');\n return { value: { name: `${formatedStart} - ${formatedEnd}` } };\n};\n\nexport const getTimePeriodLabel = (locale, format = 'yyyy MMM') =>\n R.pipe(R.when(R.isNil, R.always('')), R.when(isValidDate, formaterPeriod(locale, format)));\n","export const SDMX_3_0_JSON_DATA_FORMAT = 'application/vnd.sdmx.data+json;version=2.0';\nexport const SDMX_3_0_CSV_DATA_FORMAT = 'application/vnd.sdmx.data+csv;version=2.0';\nexport const EMPTY_ATTACHMENT_LEVEL_CHAR = '~';\nexport const REPORTING_YEAR_START_DAY = 'REPORTING_YEAR_START_DAY';\nexport const REPYEARSTART = 'REPYEARSTART';\nexport const REJECTED_VALUE_IDS = ['_L', '_T', '_Z'];\n","import * as R from 'ramda';\nimport { EMPTY_ATTACHMENT_LEVEL_CHAR } from './constants';\n\nconst dimensionValueDisplay = display => data => {\n if (display === 'code') {\n return R.prop('id', data);\n }\n const name = R.prop('name')(data);\n if (display === 'both') {\n return `${R.prop('id', data)}: ${name}`;\n }\n return name;\n};\n// options = { locale, display, dimensions = [], attributes = { [id]: { format, parent } } };\nexport const parseMetadataSeries = (metadataJson, options) => {\n const metadataAttributes = R.pathOr(\n [],\n ['data', 'structures', 0, 'attributes', 'dimensionGroup'],\n metadataJson,\n );\n const metaAttrLength = R.length(metadataAttributes);\n\n if (!metaAttrLength) {\n return {};\n }\n\n const dimensions = R.pipe(\n R.pathOr([], ['data', 'structures', 0, 'dimensions']),\n ({ series = [], observation = [] }) => R.concat(series, observation),\n dims =>\n R.isEmpty(options.dimensions || [])\n ? dims\n : R.props(R.pluck('id', options.dimensions), R.indexBy(R.prop('id'), dims)),\n )(metadataJson);\n\n const { notDisplayedIds = {} } = options;\n\n const metadataSeries = R.pipe(\n R.pathOr({}, ['data', 'dataSets', 0, 'dimensionGroupAttributes']),\n series =>\n R.reduce(\n (acc, serieKey) => {\n const indexes = series[serieKey];\n const metaIndexes = R.take(metaAttrLength, indexes);\n\n const evolvedKey = R.pipe(\n R.split(':'),\n R.addIndex(R.map)((vInd, dInd) => {\n if (R.isEmpty(vInd) || R.equals(EMPTY_ATTACHMENT_LEVEL_CHAR, vInd)) {\n return '';\n }\n const dim = R.nth(dInd, dimensions);\n const val = R.nth(Number(vInd), dim.values || []);\n\n const originalVal = R.find(R.propEq(val.id, 'id'))(\n R.propOr([], 'values', R.nth(dInd, options.dimensions)),\n );\n return R.propOr('', '__index', originalVal);\n }),\n R.join(':'),\n )(serieKey);\n\n const attributes = R.pipe(\n R.addIndex(R.reduce)((acc, valueIndex, attrIndex) => {\n const attribute = R.nth(attrIndex, metadataAttributes);\n const isHidden = R.has(attribute.id, notDisplayedIds);\n if ((R.isNil(valueIndex) && !attribute.isPresentational) || isHidden) {\n return acc;\n }\n const attrOptions = R.pathOr({}, ['attributes', attribute.id], options);\n const id = attrOptions.id;\n const label = dimensionValueDisplay(options.display)({ ...attribute, id });\n\n const _value = R.prop('value', R.nth(valueIndex, attribute.values || []));\n const value = R.is(Object, _value) ? R.prop(options.locale, _value) : _value;\n\n return R.append(\n {\n ...(R.isNil(value) ? {} : { value }),\n id: attribute.id,\n label,\n handlerProps: R.omit(['id'], R.pathOr({}, ['attributes', attribute.id], options)),\n },\n acc,\n );\n }, []),\n attributes => {\n // missing parents in metadata response\n const groupedAttrs = R.groupBy(\n R.pathOr('#ROOT', ['handlerProps', 'parent']),\n attributes,\n );\n const indexedAttrs = R.indexBy(R.prop('id'), attributes);\n\n return R.reduce(\n (acc, id) => {\n if (R.has(id, indexedAttrs) || id === '#ROOT') {\n return acc;\n }\n return R.append(\n {\n id,\n label: dimensionValueDisplay(options.display)({\n id,\n name: R.path(['attributes', id, 'name'], options),\n }),\n handlerProps: R.omit(['id'], R.pathOr({}, ['attributes', id], options)),\n },\n acc,\n );\n },\n attributes,\n R.keys(groupedAttrs),\n );\n },\n attributes => {\n const groupedAttrs = R.groupBy(\n R.pathOr('#ROOT', ['handlerProps', 'parent']),\n attributes,\n );\n const makeTree = R.map(attr => {\n if (R.has(attr.id, groupedAttrs)) {\n const children = makeTree(R.prop(attr.id, groupedAttrs));\n return R.assoc('children', children, attr);\n }\n return attr;\n });\n\n return makeTree(R.propOr([], '#ROOT', groupedAttrs));\n },\n )(metaIndexes);\n\n return R.assoc(evolvedKey, attributes, acc);\n },\n {},\n R.keys(series),\n ),\n )(metadataJson);\n\n return metadataSeries;\n};\n","import * as R from 'ramda';\nimport { getNotDisplayedCombinations } from '@sis-cc/dotstatsuite-sdmxjs';\n\nconst getNotDisplayedValues = annot => {\n if (R.isNil(annot)) {\n return {};\n }\n const ids = R.split(',', annot.title || '');\n return R.reduce(\n (acc, entry) => {\n if (R.isEmpty(entry)) {\n return acc;\n }\n const parsed = R.split('=', entry);\n const dimensionId = parsed[0];\n if (R.length(parsed) === 1) {\n return R.assoc(dimensionId, dimensionId, acc);\n }\n const values = R.split('+', parsed[1]);\n if (R.length(values) === 1 && R.isEmpty(values[0])) {\n return R.assoc(dimensionId, dimensionId, acc);\n }\n return R.reduce(\n (_acc, val) => {\n let _val = val;\n if (R.isEmpty(val)) {\n return _acc;\n }\n if (R.test('/[()]/')) {\n _val = R.replace(/[()]/g, '')(val);\n }\n const key = R.isEmpty(_val) ? dimensionId : `${dimensionId}.${_val}`;\n return R.assoc(key, key, _acc);\n },\n acc,\n values,\n );\n },\n {},\n ids,\n );\n};\n\nexport const getNotDisplayedIds = annotations =>\n R.pipe(\n R.find(R.propEq('NOT_DISPLAYED', 'type')),\n R.converge(\n (hiddenValues, hiddenCombinations) => ({\n hiddenValues,\n hiddenCombinations,\n }),\n [getNotDisplayedValues, (annot = { title: '' }) => getNotDisplayedCombinations(annot)],\n ),\n )(annotations);\n","import * as R from 'ramda';\n\nexport const getHCodelistsRefs = annotations =>\n R.reduce(\n (acc, annotation) => {\n if (annotation.type !== 'HIER_CONTEXT') {\n return acc;\n }\n const references = annotation.text || annotation.title || '';\n const refs = R.pipe(\n R.split(','),\n R.reduce((acc2, ref) => {\n const match = ref.match(/([\\w@_.]+):([\\w@_.]+):([\\w@_.]+)\\(([\\d.]+)\\).([\\w@_.]+)$/);\n if (R.isNil(match)) {\n return acc2;\n }\n const [codelistId, agencyId, code, version, hierarchy] = R.tail(match);\n return R.assoc(codelistId, { agencyId, code, version, hierarchy, codelistId }, acc2);\n }, {}),\n )(references);\n return R.mergeRight(acc, refs);\n },\n {},\n annotations,\n );\n\nexport const getHCodelistsRefsInData = sdmxJson => {\n const annotations = R.pathOr([], ['data', 'structure', 'annotations'], sdmxJson);\n return getHCodelistsRefs(annotations);\n};\n","import * as R from 'ramda';\n\nexport const getMetadataCoordinates = sdmxJson => {\n const dimensions = R.pathOr([], ['data', 'structure', 'dimensions', 'observation'], sdmxJson);\n const annotations = R.pathOr([], ['data', 'structure', 'annotations'], sdmxJson);\n const metadataAvailKeys = R.pipe(\n R.pathOr([], ['data', 'dataSets', 0, 'dimensionGroupAttributes']),\n R.map(indexes => R.props(indexes, annotations)),\n R.filter(R.find(a => a && R.propEq('HAS_METADATA', 'type', a))),\n R.keys,\n )(sdmxJson);\n\n return R.map(key => {\n const indexes = R.split(':', key);\n return R.addIndex(R.reduce)(\n (acc, vIndex, dimIndex) => {\n if (R.isNil(vIndex) || R.isEmpty(vIndex)) {\n return acc;\n }\n const dim = R.nth(dimIndex, dimensions);\n if (R.isNil(dim) || R.prop('rejected', dim)) {\n return acc;\n }\n const val = R.path(['values', Number(vIndex)], dim);\n if (R.isNil(val)) {\n return acc;\n }\n return R.assoc(dim.id, val.id, acc);\n },\n {},\n indexes,\n );\n }, metadataAvailKeys);\n};\n","import * as R from 'ramda';\n\nexport const duplicateObs = (dims, observations) => {\n const obsValues = R.values(observations);\n if (R.length(dims) === 0) {\n return observations;\n }\n const duplicated = R.reduce(\n (obs, dim) => {\n const groupedObs = R.groupBy(o => R.prop(dim.id, o.indexedDimValIds), obs);\n const enhancedObs = R.addIndex(R.map)((value, index) => {\n const matchingObs = R.propOr([], value.id, groupedObs);\n\n return R.map(\n obs =>\n R.over(R.lensProp('orderedDimIndexes'), _indexes => {\n const indexes = R.isNil(_indexes)\n ? R.map(i => Number(i), obs.dimValuesIndexes)\n : _indexes;\n return R.set(R.lensIndex(dim.__index), index)(indexes);\n })(obs),\n matchingObs,\n );\n }, dim.values);\n return R.unnest(enhancedObs);\n },\n obsValues,\n dims,\n );\n const res = R.indexBy(R.pipe(R.prop('orderedDimIndexes'), R.join(':')), duplicated);\n return res;\n};\n","import * as R from 'ramda';\n\nconst uniq = R.pipe(\n R.reduce(\n ({ ids, list }, id) => {\n if (R.has(id, list)) {\n return { ids, list };\n }\n return { ids: R.append(id, ids), list: R.assoc(id, id, list) };\n },\n { ids: [], list: {} },\n ),\n R.prop('ids'),\n);\n\nexport const refinePartialHierarchy = (hier, indexed) => {\n const { intact, broken } = R.pipe(\n R.keys,\n R.reduce(\n ({ intact, broken }, key) => {\n const ids = R.filter(id => R.has(id, indexed), hier[key]);\n if (key === '#ROOT') {\n return { broken, intact: R.assoc(key, ids, intact) };\n }\n const splitKey = R.split('.', key);\n const filtered = R.takeLastWhile(id => R.has(id, indexed), splitKey);\n if (R.length(filtered) === R.length(splitKey)) {\n return { broken, intact: R.assoc(key, ids, intact) };\n }\n const refinedKey = R.isEmpty(filtered) ? '#ROOT' : R.join('.', filtered);\n return {\n intact,\n broken: R.over(\n R.lensProp(refinedKey),\n R.ifElse(R.isNil, R.always([ids]), R.append(ids)),\n )(broken),\n };\n },\n { intact: {}, broken: {} },\n ),\n )(hier);\n const intactIds = R.pipe(R.values, R.unnest)(intact);\n const refinedBroken = R.pipe(\n R.omit(intactIds),\n R.over(\n R.lensProp('#ROOT'),\n R.pipe(i => (R.isNil(i) ? [] : i), R.unnest, R.reject(R.flip(R.includes)(intactIds))),\n ),\n R.map(R.pipe(R.unnest, uniq)),\n )(broken);\n\n return {\n ...refinedBroken,\n ...intact,\n '#ROOT': R.concat(refinedBroken['#ROOT'], intact['#ROOT']),\n };\n};\n","import * as R from 'ramda';\n\nexport const hierarchiseDimensionWithNativeHierarchy = dimension => {\n const values = R.sortBy(R.prop('__indexPosition'), dimension.values || []);\n const indexed = R.indexBy(R.prop('id'), values);\n const grouped = R.groupBy(\n val => (val.parent && R.has(val.parent, indexed) ? val.parent : '#ROOT'),\n values,\n );\n\n let index = -1;\n const getChildren = ({ parentsIndexes, parentId }) => {\n const childs = R.propOr([], parentId, grouped);\n return R.reduce(\n (acc, child) => {\n index = index + 1;\n const refined = R.pipe(\n R.assoc('__indexPosition', index),\n R.assoc('parents', parentsIndexes),\n R.assoc('parent', R.isEmpty(parentsIndexes) ? undefined : parentId),\n )(child);\n const children = getChildren({\n parentsIndexes: R.propOr(false, 'isSelected', child)\n ? R.append(index, parentsIndexes)\n : parentsIndexes,\n parentId: child.id,\n });\n return R.concat(acc, R.prepend(refined, children));\n },\n [],\n childs,\n );\n };\n\n return R.set(\n R.lensProp('values'),\n getChildren({ parentsIndexes: [], parentId: '#ROOT' }),\n )(dimension);\n};\n","import * as R from 'ramda';\n\nconst parseTexts = texts =>\n R.reduce(\n (acc, text) => {\n const splitted = R.split(':', text);\n if (R.length(splitted) !== 2) {\n return acc;\n }\n const [id, name] = splitted;\n return R.assoc(id, name, acc);\n },\n {},\n texts,\n );\n\nexport const parseCombinationDefinition = locale => (title, texts) =>\n R.useWith(\n (titles, texts) =>\n R.reduce(\n (acc, title) => {\n const split = R.split(':', title);\n if (R.length(split) !== 2) {\n return acc;\n }\n const [id, codes] = split;\n if (R.isEmpty(codes)) {\n return acc;\n }\n return R.append(\n {\n id,\n concepts: R.split(',', codes),\n name: R.hasPath([locale, id], texts) ? R.path([locale, id], texts) : `[${id}]`,\n },\n acc,\n );\n },\n [],\n titles,\n ),\n [R.split(';'), R.map(R.pipe(R.split(';'), parseTexts))],\n )(title, texts);\n\nexport const getCombinationDefinitions = (annotations, locale) => {\n const annotation = R.find(annot => annot.type === 'COMBINED_CONCEPTS', annotations);\n if (R.isNil(annotation)) {\n return [];\n }\n const title = R.propOr('', 'title', annotation);\n const texts = R.propOr({}, 'texts', annotation);\n\n return parseCombinationDefinition(locale)(title, texts);\n};\n","import * as R from 'ramda';\nimport * as dateFns from 'date-fns';\nimport { getLocale } from '../../rules/src/date';\n\nconst computeDisplayFreq = (start, duration) => {\n const startMinute = dateFns.startOfMinute(start);\n const startHour = dateFns.startOfHour(start);\n const startDay = dateFns.startOfDay(start);\n if (!dateFns.isEqual(start, startMinute) || duration === 'S') {\n return 'S';\n } else if (\n !dateFns.isEqual(start, startHour) ||\n !dateFns.isEqual(start, startDay) ||\n duration === 'H' ||\n duration === 'm'\n ) {\n return 'm';\n } else if (dateFns.getDate(start) !== 1 || duration === 'D') {\n return 'D';\n } else if (dateFns.getMonth(start) !== 0 || duration === 'M') {\n return 'M';\n }\n return 'Y';\n};\n\nconst getAdder = duration => {\n if (duration === 'S') return dateFns.addSeconds;\n if (duration === 'm') return dateFns.addMinutes;\n if (duration === 'H') return dateFns.addHours;\n if (duration === 'D') return dateFns.addDays;\n if (duration === 'M') return dateFns.addMonths;\n return dateFns.addYears;\n};\n\nconst getFormat = freqDisplay => {\n if (freqDisplay === 'Y') return 'yyyy';\n if (freqDisplay === 'D') return 'yyyy-MM-dd';\n if (freqDisplay === 'H' || freqDisplay === 'm') {\n return 'HH:mm';\n }\n if (freqDisplay === 'S') {\n return 'HH:mm:ss';\n }\n return 'yyyy-MMM';\n};\n\nconst getEndDate = (start, mult, duration) => {\n const adder = getAdder(duration);\n const endDate = adder(start, Number(mult));\n return dateFns.subSeconds(endDate, 1);\n};\n\nconst computeName = (start, end, freqDisplay, locale, format) => {\n const opts = { locale: getLocale(locale) };\n const isSameDay = dateFns.isSameDay(start, end);\n const isSameYear = dateFns.isSameYear(start, end);\n if (freqDisplay === 'H' || freqDisplay === 'm' || freqDisplay === 'S') {\n const dayFormat = getFormat('D');\n if (isSameDay)\n return `${dateFns.format(start, dayFormat, opts)} ${dateFns.format(start, format, opts)} - ${dateFns.format(end, format, opts)}`;\n return (\n `${dateFns.format(start, dayFormat, opts)} ${dateFns.format(start, format, opts)} - ` +\n `${dateFns.format(end, dayFormat, opts)} ${dateFns.format(end, format, opts)}`\n );\n }\n if (freqDisplay !== 'M') {\n return `${dateFns.format(start, format, opts)} - ${dateFns.format(end, format, opts)}`;\n }\n\n if (isSameYear && !R.includes('-', format)) {\n const yearFormatMatch = R.match(/([y]+)/, format);\n const monthFormatMatch = R.match(/([M]+|Mo)/, format);\n const yearFormat = R.length(yearFormatMatch) >= 2 ? R.nth(1, yearFormatMatch) : null;\n const monthFormat = R.length(monthFormatMatch) >= 2 ? R.nth(1, monthFormatMatch) : null;\n const formattedYear = yearFormat ? dateFns.format(start, yearFormat, opts) : null;\n const formattedMonths = monthFormat\n ? `${dateFns.format(start, monthFormat, opts)} - ${dateFns.format(end, monthFormat, opts)}`\n : null;\n if (monthFormat) {\n return R.pipe(\n format => (yearFormat ? R.replace(yearFormat, formattedYear, format) : format),\n R.replace(monthFormat, formattedMonths),\n )(format);\n }\n }\n return `${dateFns.format(start, format, opts)} - ${dateFns.format(end, format, opts)}`;\n};\n\nconst getStartDate = value =>\n typeof value === 'string' ? dateFns.parseISO(value) : new Date(value);\nconst dateWithTZ = date => dateFns.addMinutes(date, -date.getTimezoneOffset());\n\nexport const refineTimePeriod = (timePeriod, { locale, monthlyFormat = 'yyyy-MMM' }) => {\n const { id } = timePeriod;\n const split = R.split('/', id);\n if (R.length(split) !== 2) {\n const start = getStartDate(R.prop('start', timePeriod));\n const end = getStartDate(R.prop('end', timePeriod));\n return {\n ...timePeriod,\n start: dateWithTZ(start).toISOString(),\n end: dateWithTZ(end).toISOString(),\n };\n }\n const [start, range] = split;\n const startDate = getStartDate(start);\n const match = R.match(/^P(T?)(\\d+)([YMDHS])$/, range);\n if (R.isEmpty(match) || !dateFns.isValid(startDate)) {\n return timePeriod;\n }\n const [timeIndicator, mult, _duration] = R.tail(match);\n const duration = !R.isEmpty(timeIndicator) && _duration === 'M' ? 'm' : _duration;\n const endDate = getEndDate(startDate, mult, duration);\n const freqDisplay = computeDisplayFreq(startDate, duration);\n const format = freqDisplay === 'M' ? monthlyFormat : getFormat(freqDisplay);\n const name = computeName(startDate, endDate, freqDisplay, locale, format);\n\n return {\n ...timePeriod,\n id,\n name,\n start: dateWithTZ(startDate).toISOString(),\n end: dateWithTZ(endDate).toISOString(),\n };\n};\n","import * as R from 'ramda';\nimport getTime from 'date-fns/getTime';\nimport { getCodeOrder } from '@sis-cc/dotstatsuite-sdmxjs';\nimport { getIsHidden } from './sdmx-data';\nimport {\n getReportedTimePeriodLabel,\n getReportedTimePeriodNote,\n getReportedTimePeriod,\n} from './date';\nimport { refineTimePeriod } from '../../rules2/src/refineTimePeriod';\n\nconst isNonCoded = R.both(R.has('value'), R.pipe(R.has('id'), R.not));\n\nconst getId = (value, fallbackId) => {\n const valueId = R.prop('id', value);\n if (valueId) return valueId;\n if (isNonCoded(value)) return R.prop('value', value);\n // Fallback (value has no id but is not a non-coded)\n return fallbackId;\n};\n\nconst getName =\n ({ isTimeDimension, options, locale, start, reportYearStart }) =>\n value => {\n if (!isTimeDimension) return R.prop('name')(value);\n return getReportedTimePeriodLabel(\n options.frequency,\n options.timeFormat,\n locale,\n )(reportYearStart, {\n id: value.id,\n reportedStart: start,\n start: new Date(value.start),\n });\n };\n\nexport const getValuesEnhanced = ({\n locale = '',\n annotations = [],\n isTimeDimension = false,\n parent = '',\n reportYearStart,\n hiddenIds = {},\n options = {},\n selection = [],\n}) => {\n const selectionSet = new Set(selection);\n return R.pipe(\n R.addIndex(R.map)((value, __index) => {\n const id = getId(value, `${parent}-${__index}`);\n\n const valueAnnotations = R.pipe(\n R.propOr([], 'annotations'),\n R.flip(R.props)(annotations),\n )(value);\n\n const isHidden = R.has(`${parent}.${id}`, hiddenIds) || getIsHidden(valueAnnotations);\n\n const { start, notes } = isTimeDimension\n ? getTimePeriodAttributes({ reportYearStart, options })(value)\n : { notes: [] };\n\n let __indexPosition = NaN;\n if (isNaN(__indexPosition)) {\n __indexPosition = getCodeOrder({ annotations: valueAnnotations });\n }\n const isSelected =\n selectionSet.has(value.id) ||\n R.isNil(selection) ||\n R.isEmpty(selection) ||\n R.isEmpty(R.head(selection));\n let res = {\n // names is explicitely skipped because of metadata \"standard\"\n // not completely aligned with NSI \"standard\"\n // value is explicitely skipped (non-coded) into id\n ...R.omit(['names', 'value'], value),\n id,\n isSelected,\n empty: !isSelected,\n display: !isHidden,\n start: start ? start.toISOString() : null,\n flags: notes,\n __indexPosition,\n __index,\n isNonCoded: isNonCoded(value),\n };\n if (!isNonCoded(value)) {\n res = R.assoc(\n 'name',\n getName({ isTimeDimension, options, locale, start, reportYearStart })(value),\n res,\n );\n }\n if (isTimeDimension) {\n res = refineTimePeriod(res, {\n locale,\n monthlyFormat: options.timeFormat,\n });\n }\n return res;\n }),\n // __indexPosition is used for pre-sorting\n R.sortWith(isTimeDimension ? timeDimensionSorts : defaultSorts),\n // __indexPosition is reset after pre-sorting\n R.addIndex(R.map)((val, index) => R.assoc('__indexPosition', index, val)),\n // values are re-sorted by __index after __indexPosition settlement\n R.sortBy(R.prop('__index')),\n );\n};\n\nconst getDateForSort = key => val => getTime(new Date(R.prop(key, val)));\nconst byStartDate = R.ascend(getDateForSort('start'));\nconst byEndDate = R.descend(getDateForSort('end'));\nconst timeDimensionSorts = [byStartDate, byEndDate];\nconst byIndexPosition = R.ascend(R.prop('__indexPosition'));\nconst byOrder = R.ascend(R.propOr(-1, 'order'));\nconst defaultSorts = [byIndexPosition, byOrder];\n\nconst getTimePeriodAttributes =\n ({ reportYearStart, options }) =>\n value => {\n const reported = getReportedTimePeriod(reportYearStart, value, options.frequency);\n const start = reported.start;\n const end = reported.end;\n const reportTimeNote = getReportedTimePeriodNote(\n reportYearStart,\n start,\n end,\n options.frequency,\n options.isRtl,\n );\n const notes = R.isNil(reportTimeNote) ? [] : R.append(reportTimeNote, []);\n return { start, notes };\n };\n","import * as R from 'ramda';\nimport { getIsHidden } from '../../rules/src/sdmx-data';\nimport { getValuesEnhanced } from '../../rules/src/get-values-enhanced';\n\nexport const getAttributes = ({ attributes, annotations, options }) => {\n const { hiddenCombinations = {}, hiddenValues = {}, locale = '', ...restOptions } = options;\n\n const datasetAttributes = R.propOr([], 'dataSet', attributes);\n const obsAttributes = R.propOr([], 'observation', attributes);\n\n return R.pipe(\n R.concat,\n R.addIndex(R.map)((attr, index) => {\n const attrAnnotations = R.props(attr.annotations || [], annotations);\n return {\n ...attr,\n __index: index,\n display: !R.has(attr.id, hiddenValues) && !getIsHidden(attrAnnotations),\n values: getValuesEnhanced({\n locale,\n annotations,\n parent: attr.id,\n hiddenIds: hiddenValues,\n options: restOptions,\n })(attr.values || []),\n };\n }),\n )(obsAttributes, datasetAttributes);\n};\n","import * as R from 'ramda';\nimport { isTimePeriodDimension } from '@sis-cc/dotstatsuite-sdmxjs';\nimport { getValuesEnhanced } from '../../rules/src/get-values-enhanced';\nimport { getIsHidden } from '../../rules/src/sdmx-data';\n\nconst TIME_PERIOD_ID = 'TIME_PERIOD';\n\nexport const refineDimensions = ({ annotations = [], dimensions = [], options = {} }) => {\n const {\n dataquery = '',\n hiddenCombinations = {},\n hiddenValues = {},\n locale = '',\n reportYearStart,\n ...restOptions\n } = options;\n const selectionIds = R.pipe(R.split('.'), R.map(R.split('+')))(dataquery);\n\n const getIsAllDimHidden = ({ id, values }) => {\n if (!R.has(id, hiddenCombinations)) {\n return false;\n }\n const valuesIds = R.pluck('id', values);\n return R.isEmpty(R.difference(valuesIds, hiddenCombinations[id]));\n };\n\n return R.addIndex(R.map)((dim, index) => {\n const selection = R.nth(index, selectionIds);\n const isEmptySelection =\n R.isNil(selection) || R.isEmpty(selection) || R.isEmpty(R.head(selection));\n const isTimeDimension = isTimePeriodDimension(dim);\n const dimAnnotations = R.props(dim.annotations || [], annotations);\n const values = getValuesEnhanced({\n annotations,\n hiddenIds: hiddenValues,\n isTimeDimension,\n locale,\n options: restOptions,\n parent: dim.id,\n reportYearStart,\n selection,\n })(dim.values || []);\n\n const size = R.length(values);\n const isAllDimHidden = getIsAllDimHidden({ id: dim.id, values });\n const isHidden = isAllDimHidden || R.has(dim.id, hiddenValues) || getIsHidden(dimAnnotations);\n return {\n ...dim,\n display: !isHidden,\n header: size === 1 || (size > 1 && R.length(selection) === 1 && !isEmptySelection),\n __index: index,\n rejected: isAllDimHidden || !size,\n role: isTimeDimension ? TIME_PERIOD_ID : R.head(dim.roles || []),\n values,\n };\n }, dimensions);\n};\n","import * as R from 'ramda';\nimport { REPORTING_YEAR_START_DAY, REPYEARSTART } from './constants';\n\nexport const parseAttributes = (attributes, dimensions, customAttributes) => {\n const indexedDimensions = R.indexBy(R.prop('id'), dimensions);\n return R.addIndex(R.map)((attr, index) => {\n let res = R.assoc('index', index, attr);\n const displayableValuesCount = R.pipe(R.filter(R.propOr(true, 'display')), R.length)(attr);\n if (\n R.isEmpty(attr.values || []) ||\n !R.propOr(true, 'display', attr) ||\n displayableValuesCount < 1 ||\n attr.id === REPORTING_YEAR_START_DAY ||\n attr.id === REPYEARSTART\n ) {\n return R.assoc('display', false, res);\n }\n if (R.propEq(customAttributes.prefscale, 'id', attr)) {\n return R.assoc('prefscale', true, res);\n }\n if (R.propEq(customAttributes.decimals, 'id', attr)) {\n return R.assoc('decimals', true, res);\n }\n if (\n R.hasPath(['relationship', 'none'], attr) ||\n R.hasPath(['relationship', 'dataflow'], attr)\n ) {\n return { ...res, header: true, relationship: [] };\n }\n if (\n R.hasPath(['relationship', 'primaryMeasure'], attr) ||\n R.hasPath(['relationship', 'observation'], attr)\n ) {\n return { ...res, series: true, relationship: [] };\n }\n const seriesDimensions = R.pipe(\n R.pathOr([], ['relationship', 'dimensions']),\n R.filter(id => {\n const dimension = R.prop(id, indexedDimensions);\n return !dimension.header && R.length(dimension.values || []) > 1 && !dimension.rejected;\n }),\n )(attr);\n if (R.length(seriesDimensions) > 0) {\n return { ...res, series: true, relationship: seriesDimensions };\n }\n return { ...res, header: true, relationship: R.prop('dimensions', attr.relationship || []) };\n }, attributes);\n};\n","import * as R from 'ramda';\nimport { REJECTED_VALUE_IDS } from './constants';\n\nconst getDisplayableValues = values =>\n R.filter(\n val => !R.includes(R.prop('id', val), REJECTED_VALUE_IDS) && R.propOr(true, 'display', val),\n values,\n );\n\n// invalid concepts:\n// - empty/null/undefined/!array values (so far)\nconst hasInvalidValues = R.pipe(\n R.prop('values'),\n R.anyPass([R.isNil, R.complement(R.is(Array)), R.isEmpty]),\n);\nconst isConceptInvalid = R.anyPass([hasInvalidValues /* add more... */]);\nconst filterValidConcepts = R.reject(isConceptInvalid);\n// concepts is an array of ids... (misnamed!)\nconst rejectInvalidConceptIds =\n (concepts = []) =>\n (combinations = []) => {\n const validConceptIds = R.pluck('id', filterValidConcepts(concepts));\n return R.reduce(\n (acc, comb) => {\n const refinedConcepts = R.intersection(validConceptIds, comb.concepts);\n if (R.length(refinedConcepts) < 1) {\n return acc;\n }\n return R.append({ ...comb, concepts: refinedConcepts }, acc);\n },\n [],\n combinations,\n );\n };\n\nexport const parseCombinations = (combinations, parsedAttributes, dimensions) => {\n const concepts = R.concat(dimensions, parsedAttributes);\n\n const indexedDimensions = R.indexBy(R.prop('id'), dimensions);\n const indexedAttributes = R.indexBy(R.prop('id'), parsedAttributes);\n\n return R.pipe(\n rejectInvalidConceptIds(concepts),\n R.reduce((acc, comb) => {\n let relationship = [];\n let ids = {};\n let displayable_values_count = 0;\n const seriesConcepts = R.filter(concept => {\n if (R.has(concept, ids)) {\n return false;\n }\n if (R.has(concept, indexedDimensions)) {\n const dimension = R.prop(concept, indexedDimensions);\n relationship = !dimension.header ? R.append(concept, relationship) : relationship;\n ids = { ...ids, [concept]: concept };\n displayable_values_count += R.length(dimension.values || []);\n return !dimension.header;\n } else if (!R.has(concept, indexedAttributes)) {\n return false;\n }\n const attribute = R.prop(concept, indexedAttributes);\n const displayableValues = getDisplayableValues(attribute.values || []);\n const isDisplayable =\n R.length(displayableValues) !== 0 && R.propOr(true, 'display', attribute);\n relationship =\n attribute.series && isDisplayable\n ? R.pipe(\n R.reject(id => R.has(id, ids)),\n R.concat(relationship),\n )(attribute.relationship)\n : relationship;\n ids =\n attribute.series && isDisplayable\n ? { ...ids, ...R.indexBy(R.identity, attribute.relationship) }\n : ids;\n displayable_values_count = isDisplayable\n ? displayable_values_count + R.length(displayableValues)\n : displayable_values_count;\n return attribute.series && isDisplayable;\n }, comb.concepts);\n if (R.isEmpty(seriesConcepts)) {\n return R.append({ ...comb, header: true, display: displayable_values_count > 0 }, acc);\n }\n return R.append(\n {\n ...comb,\n series: true,\n relationship,\n display: displayable_values_count > 0,\n },\n acc,\n );\n }, []),\n )(combinations);\n};\n","import * as R from 'ramda';\n\nexport const refineAttributes = (parsedAttributes, seriesCombinations) => {\n const indexedRelationships = R.reduce(\n (acc, comb) =>\n R.reduce((_acc, concept) => R.assoc(concept, comb.relationship, _acc), acc, comb.concepts),\n {},\n seriesCombinations,\n );\n return R.map(attr => {\n if (R.has(attr.id, indexedRelationships)) {\n return {\n ...attr,\n series: true,\n relationship: R.prop(attr.id, indexedRelationships),\n combined: true,\n };\n }\n return attr;\n }, parsedAttributes);\n};\n","import * as R from 'ramda';\nimport numeral from 'numeral';\n\nconst isValidNumber = R.both(R.is(Number), R.complement(R.equals(NaN)));\nconst parseValidNumber = R.pipe(\n v => (R.isNil(v) ? null : Number(v)),\n v => (isNaN(v) ? null : v),\n);\n\nconst getFormatAttributesValues = (observation, formatAttributesIndexes, attributes) =>\n R.mapObjIndexed(attributeIndex => {\n let valueIndex;\n const relationship = R.pipe(R.nth(attributeIndex), R.propOr({}, 'relationship'))(attributes);\n //if (!R.isNil(attributeIndex) && attributeIndex >= R.length(R.propOr([], 'attrValuesIndexes', observation))) {\n if (R.has('none', relationship) || R.has('dataflow', relationship)) {\n valueIndex = 0;\n } else {\n valueIndex = R.pipe(\n R.propOr([], 'attrValuesIndexes'),\n R.nth(attributeIndex),\n parseValidNumber,\n )(observation);\n }\n\n return R.pipe(\n R.path([attributeIndex, 'values', valueIndex, 'id']),\n parseValidNumber,\n )(attributes);\n }, formatAttributesIndexes);\n\nexport const formatValue = (observation, formatAttributesIndexes, attributes) => {\n const value = R.prop('value', observation);\n if (R.is(Boolean, value)) {\n return value;\n }\n if (R.is(String, value)) {\n const monthMatch = value.match(/^--([\\d]{2})$/);\n if (R.is(Array, monthMatch)) {\n return R.nth(1, monthMatch);\n }\n const monthDayMatch = value.match(/^--([\\d]{2}-[\\d]{2})$/);\n if (R.is(Array, monthDayMatch)) {\n return R.nth(1, monthDayMatch);\n }\n const dayMatch = value.match(/^---([\\d]{2})$/);\n if (R.is(Array, dayMatch)) {\n return R.nth(1, dayMatch);\n }\n return value;\n }\n\n const { prefscale, decimals } = getFormatAttributesValues(\n observation,\n formatAttributesIndexes,\n attributes,\n );\n\n const formatScale = R.when(R.always(isValidNumber(prefscale)), value =>\n numeral(value)\n .multiply(Math.pow(10, -1 * Number(prefscale)))\n .value(),\n );\n const _decimals = !decimals ? 2 : decimals;\n\n const formatSeparator = value => numeral(value).format(`0,0.[0000000]`);\n const formatDecimals = R.ifElse(\n R.always(isValidNumber(decimals)),\n v => {\n const num = Number(v);\n const isTiny = Math.abs(num) < Math.pow(10, -_decimals);\n const displayNum = isTiny ? 0 : num;\n const decimalFormat = R.ifElse(\n R.equals(0),\n R.always('0,0'),\n d => `0,0.${R.join('', R.times(R.always('0'), d))}`,\n )(decimals);\n\n const res = numeral(displayNum).format(decimalFormat);\n return res;\n },\n formatSeparator,\n );\n return R.ifElse(\n isValidNumber,\n R.pipe(formatScale, formatDecimals, res => (res === 'NaN' ? String(value) : res)),\n R.always('..'),\n )(observation.value);\n};\n","import * as R from 'ramda';\nimport { formatValue } from '../../rules/src/preparators/formatValue';\nimport { REJECTED_VALUE_IDS } from './constants';\n\n/*\n options = {\n customAttributes: {\n decimals: id,\n prefscale: id,\n },\n }\n*/\n\nconst parseAttributesValues = (obs, attributes, indexedDimensions) => {\n const { attrValuesIndexes, dimValuesIndexes } = obs;\n return R.addIndex(R.reduce)(\n (acc, valueIndex, attrIndex) => {\n const attribute = R.nth(attrIndex, attributes);\n if (R.isNil(attribute) || !R.prop('series', attribute)) {\n return acc;\n }\n const _value = R.nth(valueIndex, attribute.values || []);\n let value = R.isNil(_value)\n ? _value\n : R.over(\n R.lensProp('display'),\n (display = true) => display && !R.includes(_value.id, REJECTED_VALUE_IDS),\n )(_value);\n if (!R.propOr(true, 'display', attribute) || !R.propOr(true, 'display', value)) {\n value = null;\n }\n const relationship = R.propOr([], 'relationship', attribute);\n let coordinates = {};\n const serieKey = R.pipe(\n dims => (R.isEmpty(relationship) ? R.values(dims) : R.props(relationship, dims)),\n R.map(dim => {\n const valueIndex = R.nth(dim.__index, dimValuesIndexes);\n const valueId = R.path(['values', valueIndex, 'id'], dim);\n coordinates = R.assoc(dim.id, valueId, coordinates);\n return `${dim.id}=${valueId}`;\n }),\n R.ifElse(R.isEmpty, R.always(null), R.join(':')),\n )(indexedDimensions);\n\n return R.assoc(\n attribute.id,\n {\n ...R.pick(['id', 'name', 'relationship', 'display', 'combined'], attribute),\n value,\n serieKey,\n coordinates,\n isObs: R.isEmpty(relationship),\n },\n acc,\n );\n },\n {},\n attrValuesIndexes,\n );\n};\n\nconst getFormatAttributesIndexes = (attributes, customAttributes) =>\n R.addIndex(R.reduce)(\n (acc, attribute, index) => {\n if (R.equals(attribute.id, customAttributes.decimals)) {\n return { ...acc, decimals: index };\n }\n if (R.equals(attribute.id, customAttributes.prefscale)) {\n return { ...acc, prefscale: index };\n }\n return acc;\n },\n { prefscale: null, decimals: null },\n attributes,\n );\n\nexport const enhanceObservations = (\n dimensions = [],\n observations = {},\n attributes = [],\n options = {},\n) => {\n const formatAttributesIndexes = getFormatAttributesIndexes(\n attributes,\n R.propOr({}, 'customAttributes', options),\n );\n const indexedDimensions = R.indexBy(R.prop('id'), dimensions);\n\n return R.map(observation => {\n const { dimValuesIndexes } = observation;\n\n const indexedDimValIds = R.addIndex(R.reduce)(\n (acc, dimension, dimensionIndex) => {\n const id = dimension.id;\n const valueIndex = R.nth(dimensionIndex, dimValuesIndexes);\n const valueId = R.path(['values', Number(valueIndex), 'id'], dimension);\n return R.assoc(id, valueId, acc);\n },\n {},\n dimensions,\n );\n\n return {\n ...observation,\n attributes: parseAttributesValues(observation, attributes, indexedDimensions),\n formattedValue: formatValue(observation, formatAttributesIndexes, attributes),\n indexedDimValIds,\n };\n }, observations);\n};\n","import * as R from 'ramda';\n\nexport const getAttributesSeries = observations =>\n R.pipe(\n R.values,\n R.reduce(\n (acc, { attributes }) => {\n let res = acc.res;\n let rejected = acc.rejected;\n R.forEachObjIndexed(attribute => {\n if (!R.isNil(attribute.serieKey) && !attribute.isObs) {\n if (R.isNil(attribute.value)) {\n res = R.dissocPath([attribute.serieKey, attribute.id], res);\n rejected = R.assocPath([attribute.serieKey, attribute.id], true, rejected);\n }\n if (R.path([attribute.serieKey, attribute.id], rejected)) {\n return;\n }\n const valueInRes = R.path([attribute.serieKey, attribute.id, 'value', 'id'], res);\n if (!R.isNil(valueInRes) && valueInRes !== R.path(['value', 'id'], attribute)) {\n res = R.dissocPath([attribute.serieKey, attribute.id], res);\n rejected = R.assocPath([attribute.serieKey, attribute.id], true, rejected);\n } else {\n res = R.assocPath([attribute.serieKey, attribute.id], attribute, res);\n }\n }\n }, attributes);\n return { res, rejected };\n },\n { res: {}, rejected: {} },\n ),\n R.prop('res'),\n )(observations);\n","import * as R from 'ramda';\nimport { REJECTED_VALUE_IDS } from '../constants';\n\nexport const getFlagsAndNotes = (attributesValues, customAttributes) => {\n const flagsIds = R.propOr([], 'flags', customAttributes);\n const notesIds = R.propOr([], 'notes', customAttributes);\n\n return R.addIndex(R.reduce)(\n (acc, id, index) => {\n if (!R.has(id, attributesValues)) {\n return acc;\n }\n const attr = R.pick(['id', 'name', 'value', 'display'], R.prop(id, attributesValues));\n if (\n R.isNil(attr.value) ||\n !R.pathOr(true, ['value', 'display'], attr) ||\n !R.propOr(true, 'display', attr) ||\n R.includes(R.path(['value', 'id'], attr), REJECTED_VALUE_IDS)\n ) {\n return acc;\n }\n return R.append(\n index < flagsIds.length ? R.assoc('code', R.path(['value', 'id'], attr), attr) : attr,\n acc,\n );\n },\n [],\n R.concat(flagsIds, notesIds),\n );\n};\n","import * as R from 'ramda';\nimport { getFlagsAndNotes } from './table/getFlagsAndNotes';\n\nexport const getManyValuesDimensions = (\n dimensions,\n attributesSeries,\n customAttributes,\n combinations,\n) => {\n const combConceptsIds = R.pipe(R.pluck('concepts'), R.unnest)(combinations);\n return R.reduce(\n (acc, dim) => {\n if (dim.header || dim.rejected) {\n return acc;\n }\n const enhancedValues = R.map(val => {\n const attrSeries = R.propOr({}, `${dim.id}=${val.id}`, attributesSeries);\n if (R.isEmpty(attrSeries)) {\n return val;\n }\n const flags = getFlagsAndNotes(attrSeries, customAttributes);\n const hasAdvancedAttributes = R.pipe(\n R.omit(\n R.unnest([customAttributes.flags || [], customAttributes.notes || [], combConceptsIds]),\n ),\n R.complement(R.isEmpty),\n )(attrSeries);\n return { ...val, flags, hasAdvancedAttributes };\n }, dim.values);\n return R.append(R.assoc('values', enhancedValues, dim), acc);\n },\n [],\n dimensions,\n );\n};\n","import * as R from 'ramda';\nimport { REJECTED_VALUE_IDS } from './constants';\n\nexport const getOneValueDimensions = (dimensions, attributes) => {\n const indexedRelevantAttributes = R.reduce(\n (acc, attr) => {\n if (\n !attr.header ||\n !R.propOr(true, 'display', attr) ||\n R.length(attr.relationship || []) !== 1\n ) {\n return acc;\n }\n const value = R.path(['values', 0], attr);\n if (\n R.isNil(value) ||\n !R.propOr(true, 'display', value) ||\n R.includes(R.prop('id', value), REJECTED_VALUE_IDS)\n ) {\n return acc;\n }\n const dim = R.head(attr.relationship);\n return R.over(R.lensProp(dim), (values = {}) => ({\n ...values,\n [attr.id]: { ...attr, value },\n }))(acc);\n },\n {},\n attributes,\n );\n return R.reduce(\n (acc, dim) => {\n if (!dim.header) {\n return acc;\n }\n const attrValues = R.propOr({}, dim.id, indexedRelevantAttributes);\n return R.append({ ...dim, attrValues }, acc);\n },\n [],\n dimensions,\n );\n};\n","import * as R from 'ramda';\nimport { REJECTED_VALUE_IDS } from './constants';\n\nexport const getDataflowAttributes = (attributes, combinations) => {\n const combinationsConceptsIds = R.pipe(R.pluck('concepts'), R.unnest)(combinations);\n return R.reduce(\n (acc, attribute) => {\n if (\n !R.prop('header', attribute) ||\n !R.isEmpty(attribute.relationship) ||\n R.includes(attribute.id, combinationsConceptsIds)\n ) {\n return acc;\n }\n const value = R.head(attribute.values);\n if (\n !R.propOr(true, 'display', attribute) ||\n R.isNil(value) ||\n !R.propOr(true, 'display', value) ||\n R.includes(R.prop('id', value), REJECTED_VALUE_IDS)\n ) {\n return acc;\n }\n return R.assoc(attribute.id, { ...R.pick(['id', 'name'], attribute), value }, acc);\n },\n {},\n attributes,\n );\n};\n","import * as R from 'ramda';\nimport { dimensionValueDisplay } from '../../rules/src/dimension-utils';\nimport { getFlagsAndNotes } from './table/getFlagsAndNotes';\n\nexport const getHeaderTitle = (dataflow, attributes, display, customAttributes) => ({\n label: dimensionValueDisplay(display)(dataflow),\n flags: R.pipe(\n getFlagsAndNotes,\n R.map(entry => ({\n code: entry.code,\n header: `${dimensionValueDisplay(display)(entry)}:`,\n label: dimensionValueDisplay(display)(entry.value),\n })),\n )(attributes, customAttributes),\n});\n","import * as R from 'ramda';\nimport { getFlagsAndNotes } from './table/getFlagsAndNotes';\nimport { dimensionValueDisplay } from '../../rules/src/dimension-utils';\n\nexport const getHeaderSubtitle = (\n dimensions,\n combinations,\n customAttributes,\n display,\n microdataDimension,\n) => {\n const combinationsConepts = R.pipe(R.pluck('concepts'), R.unnest)(combinations);\n const DEFAULT_REJECTED_SUBTITLE_IDS = ['_L', '_T', '_Z'];\n\n return R.reduce(\n (acc, dim) => {\n if (\n !R.propOr(true, 'display', dim) ||\n R.propEq(microdataDimension, 'id', dim) ||\n R.includes(dim.id, combinationsConepts)\n ) {\n return acc;\n }\n const value = R.path(['values', 0], dim);\n if (\n !R.propOr(true, 'display', value) ||\n R.includes(value.id, DEFAULT_REJECTED_SUBTITLE_IDS)\n ) {\n return acc;\n }\n const header = `${dimensionValueDisplay(display)(dim)}:`;\n const label = dimensionValueDisplay(display)(value);\n const flags = R.pipe(\n getFlagsAndNotes,\n R.map(entry => ({\n code: entry.code,\n header: `${dimensionValueDisplay(display)(entry)}:`,\n label: dimensionValueDisplay(display)(entry.value),\n })),\n )(dim.attrValues, customAttributes);\n return R.append({ header, label, flags }, acc);\n },\n [],\n dimensions,\n );\n};\n","import * as R from 'ramda';\n\nexport const getSeriesCombinations = (combinations, oneValuesDimensions) => {\n const indexedValues = R.reduce(\n (acc, dim) => {\n const value = R.head(dim.values);\n return R.assoc(dim.id, value, acc);\n },\n {},\n oneValuesDimensions,\n );\n\n return R.reduce(\n (acc, comb) => {\n if (!R.prop('series', comb)) {\n return acc;\n }\n const fixedDimValues = R.pick(comb.concepts, indexedValues);\n return R.append({ ...comb, fixedDimValues }, acc);\n },\n [],\n combinations,\n );\n};\n","import * as R from 'ramda';\nimport { dimensionValueDisplay } from '../../rules/src/dimension-utils';\nimport { REJECTED_VALUE_IDS } from './constants';\n\nconst getRefinedMissinParentsLabels = R.pipe(\n R.propOr([], 'missingParents'),\n R.reduce((acc, par) => {\n if (!R.propOr(true, 'display', par) || R.includes(par.id, REJECTED_VALUE_IDS)) {\n return acc;\n }\n return R.append(dimensionValueDisplay('label')(par), acc);\n }, []),\n);\n\nexport const singleValueDisplay = (display, value) => {\n if (display === 'label') {\n return R.converge(\n (missingParents, label) =>\n R.isEmpty(missingParents) ? label : R.join(' > ', R.append(label, missingParents)),\n [getRefinedMissinParentsLabels, dimensionValueDisplay(display)],\n )(value);\n } else if (display === 'both') {\n return `(${singleValueDisplay('code', value)}) ${singleValueDisplay('label', value)}`;\n }\n return dimensionValueDisplay(display)(value);\n};\n\nconst _combinedValuesDisplay = _display => values =>\n R.pipe(\n R.reduce((acc, val) => {\n if (R.isNil(val)) return acc;\n const isDisplayed = R.propOr(true, 'display', val);\n const isRejected = R.includes(val.id, REJECTED_VALUE_IDS);\n if ((!isDisplayed || isRejected) && _display === 'label') return acc;\n return R.append(singleValueDisplay(_display, val), acc);\n }, []),\n labels => {\n if (!R.isEmpty(labels) || _display !== 'label') {\n return R.join(', ', labels);\n }\n const totalValue = R.find(R.propEq('_T', 'id'), values);\n if (!R.isNil(totalValue)) {\n return dimensionValueDisplay('label')(totalValue);\n }\n if (R.isEmpty(values)) {\n return '';\n }\n const firstValue = R.head(values);\n return dimensionValueDisplay('label')(firstValue);\n },\n )(values);\n\nexport const combinedValuesDisplay = (display, values) => {\n if (display === 'both') {\n return R.converge(\n (_ids, labels) => {\n return dimensionValueDisplay('both')({\n id: _ids,\n name: labels,\n });\n },\n [_combinedValuesDisplay('code'), _combinedValuesDisplay('label')],\n )(values);\n }\n return _combinedValuesDisplay(display)(values);\n};\n","import * as R from 'ramda';\nimport { dimensionValueDisplay } from '../../rules/src/dimension-utils';\nimport { combinedValuesDisplay } from './combinedValuesDisplay';\nimport { REJECTED_VALUE_IDS } from './constants';\n\nexport const getHeaderCombinations = (combinations, dimensions, attributes, display) => {\n const indexedDimensions = R.indexBy(R.prop('id'), dimensions);\n const indexedAttributes = R.indexBy(R.prop('id'), attributes);\n return R.reduce(\n (acc, comb) => {\n if (!R.prop('header', comb) || !R.propOr(true, 'display', comb)) {\n return acc;\n }\n\n const header = `${dimensionValueDisplay(display)(comb)}:`;\n\n const label = R.pipe(\n R.reduce((_acc, concept) => {\n const artefact = R.has(concept, indexedDimensions)\n ? R.prop(concept, indexedDimensions)\n : R.prop(concept, indexedAttributes);\n if (R.isNil(artefact)) {\n return _acc;\n }\n const value = R.path(['values', 0], artefact);\n if (R.isNil(value)) {\n return _acc;\n }\n if (\n R.has(concept, indexedAttributes) &&\n (!R.propOr(true, 'display', value) ||\n !R.propOr(true, 'artefact', value) ||\n R.includes(value.id, REJECTED_VALUE_IDS))\n ) {\n return _acc;\n }\n return R.append(value, _acc);\n }, []),\n values => combinedValuesDisplay(display, values),\n )(comb.concepts || []);\n if (R.isEmpty(label)) {\n return acc;\n }\n return R.append({ header, label }, acc);\n },\n [],\n combinations,\n );\n};\n","import * as R from 'ramda';\n\nexport const getHeaderCoordinates = oneValueDimensions =>\n R.reduce(\n (acc, dim) => R.assoc(dim.id, R.path(['values', 0, 'id'], dim), acc),\n {},\n oneValueDimensions,\n );\n","import * as R from 'ramda';\nimport { isTimePeriodDimension } from '@sis-cc/dotstatsuite-sdmxjs';\n\nconst getConceptsSet = (ids, indexedCombinations, _upper) => {\n const upper = R.isNil(_upper) ? new Set([]) : _upper;\n const res = new Set([]);\n R.forEach(id => {\n if (!R.has(id, indexedCombinations)) {\n res.add(id);\n } else {\n const comb = R.prop(id, indexedCombinations);\n R.forEach(c => {\n if (!upper.has(c)) {\n res.add(c);\n }\n }, comb.concepts);\n }\n }, ids);\n return res;\n};\n\nconst parseCombination = (_upperIds, _excludedIds) => (comb, indexedDimensions) => {\n const upperIds = R.isNil(_upperIds) ? new Set([]) : _upperIds;\n const excludedIds = R.isNil(_excludedIds) ? new Set([]) : _excludedIds;\n\n const { concepts, relationship } = comb;\n const dimensions = R.reduce(\n (acc, id) => {\n if (upperIds.has(id) || !R.has(id, indexedDimensions)) {\n return acc;\n }\n const dim = R.prop(id, indexedDimensions);\n return R.append(dim, acc);\n },\n [],\n concepts,\n );\n const excludedDep = R.find(i => excludedIds.has(i), relationship);\n if (excludedDep) {\n return dimensions;\n }\n return R.assoc('dimensions', dimensions, comb);\n};\n\nexport const getLayout = (_layoutIds, dimensions, combinations, isTimeInverted) => {\n const layoutIds = R.mergeRight({ header: [], sections: [], rows: [] }, _layoutIds);\n const applyInversionOnTimeDim = dim =>\n isTimePeriodDimension(dim) && isTimeInverted ? R.assoc('isInverted', true, dim) : dim;\n\n const indexedDimensions = R.reduce(\n (acc, dim) => R.assoc(dim.id, applyInversionOnTimeDim(dim), acc),\n {},\n dimensions,\n );\n\n const indexedCombinations = R.indexBy(R.prop('id'), combinations);\n const headerConceptsSet = getConceptsSet(layoutIds.header, indexedCombinations);\n const sectionsConceptsSet = getConceptsSet(layoutIds.sections, indexedCombinations);\n const rowsConceptsSet = getConceptsSet(\n R.concat(layoutIds.sections, layoutIds.rows),\n indexedCombinations,\n );\n\n const getLayoutLevel = (_upperIds, _excludedIds) => ids =>\n R.reduce(\n (acc, id) => {\n if (R.has(id, indexedDimensions)) {\n const dim = R.prop(id, indexedDimensions);\n return R.append(dim, acc);\n }\n if (!R.has(id, indexedCombinations)) {\n return acc;\n }\n const comb = R.prop(id, indexedCombinations);\n const parsedCombination = parseCombination(_upperIds, _excludedIds)(\n comb,\n indexedDimensions,\n );\n if (R.is(Array, parsedCombination)) {\n return R.concat(acc, parsedCombination);\n }\n return R.append(parsedCombination, acc);\n },\n [],\n ids,\n );\n\n const header = getLayoutLevel(null, rowsConceptsSet)(layoutIds.header);\n const sections = getLayoutLevel(null, headerConceptsSet)(layoutIds.sections);\n const rows = getLayoutLevel(sectionsConceptsSet, headerConceptsSet)(layoutIds.rows);\n\n return { header, sections, rows };\n};\n","import * as R from 'ramda';\n\n/*\n const layout = {\n header: [\n { id, __index },\n { id: COMB, dimensions: [{ id, __index }] }\n ],\n sections: [],\n rows: []\n }\n\n*/\n\nconst getLayoutPivots = layoutEntry => {\n const valIndexGetter = d =>\n R.pipe(R.nth(R.prop('__index', d)), ind => (d.isInverted ? R.negate(ind) : ind));\n return indexes =>\n R.map(\n R.ifElse(\n R.has('dimensions'),\n c => R.map(d => valIndexGetter(d)(indexes), R.prop('dimensions', c)),\n d => {\n if (d.id === 'OBS_ATTRIBUTES') {\n return R.last(indexes);\n }\n return valIndexGetter(d)(indexes);\n },\n ),\n layoutEntry,\n );\n};\n\nconst comparator = (firstSerie, secondSerie) => {\n const firstIndexes = firstSerie.indexes;\n const secondIndexes = secondSerie.indexes;\n const size = R.length(firstIndexes);\n let i = 0;\n while (i < size) {\n if (R.is(Array, firstIndexes[i])) {\n const firstSubIndexes = firstIndexes[i];\n const secondSubIndexes = secondIndexes[i];\n const _size = R.length(firstSubIndexes);\n let j = 0;\n while (firstSubIndexes[j] === secondSubIndexes[j] && j < _size) {\n j++;\n }\n if (firstSubIndexes[j] !== secondSubIndexes[j]) {\n return firstSubIndexes[j] - secondSubIndexes[j];\n }\n } else if (firstIndexes[i] !== secondIndexes[i]) {\n return firstIndexes[i] - secondIndexes[i];\n }\n i++;\n }\n return firstIndexes[i] - secondIndexes[i];\n};\n\nconst uniqIndexes = R.pipe(\n R.reduce((acc, { indexes, rejected }) => {\n const key = R.join(':', R.unnest(indexes));\n if (R.has(key, acc)) {\n return R.over(\n R.lensPath([key, 'rejected']),\n R.addIndex(R.map)((v, i) => (v === R.nth(i, rejected) ? v : null)),\n )(acc);\n }\n return R.assoc(key, { indexes, rejected, key }, acc);\n }, {}),\n R.values,\n);\n\nexport const getSortedLayoutIndexes = (layout, observations, rejectedDims = []) => {\n const dimIndexes = R.pipe(R.values, R.map(R.propOr([], 'orderedDimIndexes')))(observations);\n\n const headerPivots = getLayoutPivots(layout.header);\n const sectionsPivots = getLayoutPivots(R.concat(layout.sections, layout.rows));\n const rejectedPivots = getLayoutPivots(rejectedDims);\n\n const sectionLength = R.length(layout.sections);\n const { header, sections } = R.pipe(\n R.reduce(\n (acc, indexes) => {\n const headerIndexes = headerPivots(indexes);\n const sectionsIndexes = sectionsPivots(indexes);\n const rejectedIndexes = rejectedPivots(indexes);\n\n return {\n header: R.append({ indexes: headerIndexes, rejected: rejectedIndexes }, acc.header),\n sections: R.append({ indexes: sectionsIndexes, rejected: rejectedIndexes }, acc.sections),\n };\n },\n { header: [], sections: [] },\n ),\n R.mapObjIndexed(uniqIndexes),\n R.evolve({\n header: R.sort(comparator),\n sections: R.sort(comparator),\n }),\n indexes => ({\n ...indexes,\n sections: R.reduce(\n (acc, { indexes, rejected, key }) => {\n const [sectionIndexes, rowIndexes] = R.splitAt(sectionLength, indexes);\n const sectionKey = R.join(':', sectionIndexes);\n const previousSecKey = R.pipe(R.nth(-1), v => (R.isNil(v) ? null : R.head(v).key))(acc);\n if (R.equals(sectionKey, previousSecKey)) {\n return R.over(\n R.lensIndex(-1),\n R.pipe(\n R.over(R.lensIndex(1), R.append({ indexes: rowIndexes, rejected, key })),\n R.over(R.lensIndex(0), v => ({\n ...v,\n rejected: R.addIndex(R.map)(\n (val, i) => (val === R.nth(i, rejected) ? val : null),\n v.rejected,\n ),\n })),\n ),\n )(acc);\n }\n\n return R.append(\n [\n { indexes: sectionIndexes, rejected, key: sectionKey },\n [{ indexes: rowIndexes, rejected, key }],\n ],\n acc,\n );\n },\n [],\n indexes.sections,\n ),\n }),\n )(dimIndexes);\n\n return { header, sections };\n};\n","import * as R from 'ramda';\n\nconst toKey = indexes =>\n R.reduce(\n (acc, _ind) => {\n const ind = R.is(Array, _ind) ? toKey(_ind) : String(Math.abs(_ind));\n if (R.isEmpty(ind)) {\n return acc;\n }\n return R.isEmpty(acc) ? ind : `${acc}:${ind}`;\n },\n '',\n indexes,\n );\n\nconst getPivotKey = indexes => R.pipe(R.props(indexes), R.join(':'));\n\nconst getPivots = (layout, shape) =>\n R.pipe(\n R.props(shape),\n R.map(\n R.pipe(\n R.map(entry =>\n R.has('dimensions', entry) ? R.pluck('__index', entry.dimensions || []) : entry.__index,\n ),\n R.unnest,\n getPivotKey,\n ),\n ),\n )(layout);\n\nconst indexWithPivots = (pivots, observations) =>\n R.pipe(\n R.values,\n R.reduce((acc, obs) => {\n const path = R.map(pivot => pivot(obs.orderedDimIndexes), pivots);\n return R.over(R.lensPath(path), R.ifElse(R.isNil, R.always([obs]), R.append(obs)))(acc);\n }, {}),\n )(observations);\n\nconst getCuratedCells = ({ layout, observations, shape }) => {\n const pivots = getPivots(layout, shape);\n return indexWithPivots(pivots, observations);\n};\n\nconst filterSeries = (series, getHasStillData) => {\n let removedMissingIndexes = [];\n return R.reduce(\n (acc, serie) => {\n const hasStillData = getHasStillData(serie);\n const serieParentsSets = R.map(p => new Set(p), R.propOr([], 'parentsIndexes', serie));\n if (!hasStillData) {\n removedMissingIndexes = R.addIndex(R.map)((mIs, ind) => {\n const filtered = R.filter(\n i => serieParentsSets[ind].has(i),\n R.nth(ind, removedMissingIndexes) || [],\n );\n return R.concat(filtered, mIs);\n }, serie.missingIndexes || []);\n return acc;\n }\n const _serie = R.pipe(\n R.over(R.lensProp('missingIndexes'), (missingIndexes = []) =>\n R.addIndex(R.map)((mIs, ind) => {\n const removed = R.nth(ind, removedMissingIndexes) || [];\n if (R.isEmpty(removed)) {\n return mIs;\n }\n const filteredRemoved = R.filter(i => serieParentsSets[ind].has(i), removed);\n return R.concat(filteredRemoved, mIs || []);\n }, missingIndexes),\n ),\n R.over(R.lensProp('parentsIndexes'), (parentsIndexes = []) =>\n R.addIndex(R.map)((p, ind) => {\n return R.reject(i => R.includes(i, R.nth(ind, removedMissingIndexes) || []), p || []);\n }, parentsIndexes),\n ),\n )(serie);\n removedMissingIndexes = [];\n return R.append(_serie, acc);\n },\n [],\n series,\n );\n};\n\nconst refineSections = (sections, extractedKeys, curatedObs) =>\n R.pipe(\n R.map(section => {\n const sectionKey = toKey(R.propOr([], 'indexes', R.head(section)));\n const getHasRowStillData = row => {\n const rowKey = toKey(R.prop('indexes', row));\n return R.pipe(\n R.path([sectionKey, rowKey]),\n R.omit(extractedKeys),\n R.isEmpty,\n R.not,\n )(curatedObs);\n };\n return R.over(R.lensIndex(1), rows => filterSeries(rows, getHasRowStillData))(section);\n }),\n R.filter(R.pipe(R.nth(1), R.isEmpty, R.not)),\n )(sections);\n\nconst refineHeader = (headers, extractedKeys, curatedObs) => {\n const getHasHeaderStillData = header => {\n const headerKey = toKey(R.prop('indexes', header));\n return R.pipe(\n R.prop(headerKey),\n sections => {\n return R.pickBy(\n (rows, section) =>\n R.pipe(R.omit(R.propOr([], section, extractedKeys)), R.isEmpty, R.not)(rows),\n sections,\n );\n },\n R.isEmpty,\n R.not,\n )(curatedObs);\n };\n return filterSeries(headers, getHasHeaderStillData);\n};\n\nconst getSerieLinesCount = serie => {\n const missingParents = R.propOr([], 'missingParents', serie);\n const missingParentsRowsCount = R.pipe(R.flatten, R.length)(missingParents);\n return missingParentsRowsCount + 1;\n};\n\nconst truncateSectionRows = (n, sectionsData) => {\n let truncated = sectionsData;\n let extractedKeys = {};\n let _n = n;\n while (_n > 0) {\n const lastSection = R.last(truncated);\n const rows = lastSection[1];\n const rowsLength = R.length(rows);\n let truncatedRowsCount = 0;\n while (_n > 0 && truncatedRowsCount !== rowsLength) {\n const rowsCount = getSerieLinesCount(R.nth(-1 * truncatedRowsCount, rows));\n _n = _n - rowsCount;\n truncatedRowsCount++;\n }\n const sectionKey = R.pipe(R.head, R.prop('indexes'), toKey)(lastSection);\n extractedKeys = {\n ...extractedKeys,\n [sectionKey]: R.pipe(\n R.takeLast(truncatedRowsCount),\n R.map(r => toKey(R.prop('indexes', r))),\n )(rows),\n };\n if (_n > 0) {\n truncated = R.dropLast(1, truncated);\n } else {\n truncated = R.over(\n R.lensIndex(-1),\n R.over(R.lensIndex(1), R.dropLast(truncatedRowsCount)),\n )(truncated);\n }\n }\n return { truncated, extractedKeys };\n};\n\nconst truncateHeader = (n, headerData) => {\n let { truncated, extractedKeys } = { truncated: headerData, extractedKeys: [] };\n let _n = n;\n while (_n > 0) {\n const lastHeader = R.last(truncated);\n const columnsCount = getSerieLinesCount(lastHeader);\n const extractedKey = toKey(R.prop('indexes', lastHeader));\n extractedKeys = R.append(extractedKey, extractedKeys);\n truncated = R.dropLast(1, truncated);\n _n = _n - columnsCount;\n }\n return { truncated, extractedKeys };\n};\n\nconst truncateLayout = isVertical =>\n R.ifElse(R.always(isVertical), truncateSectionRows, truncateHeader);\n\nconst refineLayout = isVertical => R.ifElse(R.always(isVertical), refineHeader, refineSections);\n\nconst getShape = isVertical =>\n isVertical ? ['header', 'sections', 'rows'] : ['sections', 'rows', 'header'];\n\nconst getRefinedLayout = (isVertical, truncated, refined) =>\n R.ifElse(\n R.always(isVertical),\n R.pipe(R.assoc('sections', truncated), R.assoc('header', refined)),\n R.pipe(R.assoc('header', truncated), R.assoc('sections', refined)),\n )({});\n\nconst segregateLayout = isVertical =>\n R.ifElse(R.always(isVertical), R.props(['sections', 'header']), R.props(['header', 'sections']));\n\nexport const refineLayoutSize =\n ({ layout, observations, limit }) =>\n layoutIndexes => {\n const { header, sections } = layoutIndexes;\n if (R.isNil(limit) || limit === 0 || R.all(R.isEmpty, [header, sections])) {\n return R.pipe(\n R.set(R.lensProp('truncated'), false),\n R.set(R.lensProp('totalCells'), null),\n )(layoutIndexes);\n }\n\n //number of dimensions in header\n const headerDimCount = R.pipe(\n R.head, // first column\n R.when(R.isNil, R.always({})),\n R.propOr([], 'indexes'),\n R.length, // number of dims\n )(header);\n\n //number of columns for values\n const headerValuesCount = R.pipe(\n R.reduce((acc, header) => {\n const columnsCount = getSerieLinesCount(header);\n return acc + columnsCount;\n }, 0),\n R.when(R.equals(0), R.always(1)),\n )(header);\n\n //total of cells in header\n const headerCellsCount = headerDimCount * (headerValuesCount + 1);\n\n // number of dimensions in a row\n const rowDimCount = R.pipe(\n R.head, // firstSection\n R.last, // rows,\n R.head, // first row\n R.propOr([], 'indexes'),\n R.length,\n )(sections);\n\n // number of cells in a row\n const rowCellsCount = rowDimCount + headerValuesCount + 1;\n\n // number of rows\n const rowsCount = R.pipe(\n R.map(R.last),\n R.unnest,\n R.reduce((acc, row) => {\n const rowsCount = getSerieLinesCount(row);\n return acc + rowsCount;\n }, 1),\n )(sections);\n\n // total of cells in all rows\n const rowsCellsCount = rowCellsCount * rowsCount;\n\n // number of sections cells\n const sectionsCellsCount = R.ifElse(\n R.pipe(R.head, R.head, R.propOr([], 'indexes'), R.length, R.equals(0)),\n R.always(0),\n R.length,\n )(sections);\n\n const total = rowsCellsCount + sectionsCellsCount + headerCellsCount;\n\n const excess = total - limit;\n if (excess <= 0) {\n return R.pipe(\n R.set(R.lensProp('truncated'), false),\n R.set(R.lensProp('totalCells'), total),\n )(layoutIndexes);\n }\n\n // total of cells in one column\n const columnCellsCount = headerDimCount + rowsCount;\n\n const isVertical = columnCellsCount > rowCellsCount;\n\n const [toTruncate, toRefine] = segregateLayout(isVertical)(layoutIndexes);\n\n let cutLength = R.pipe(\n R.ifElse(R.identity, R.always(rowCellsCount), R.always(columnCellsCount)),\n R.divide(excess),\n Math.ceil,\n )(isVertical);\n\n const maxCutLength = isVertical ? rowsCount - 2 : headerValuesCount - 1;\n cutLength = cutLength > maxCutLength ? maxCutLength : cutLength;\n\n const { truncated, extractedKeys } = truncateLayout(isVertical)(cutLength, toTruncate);\n\n const dimsLength = R.pipe(\n R.values,\n R.head,\n R.propOr([], 'orderedDimIndexes'),\n R.length,\n )(observations);\n const _layout = R.map(\n R.map(entry =>\n entry.id === 'OBS_ATTRIBUTES' ? R.assoc('__index', dimsLength - 1, entry) : entry,\n ),\n layout,\n );\n const curatedObs = R.pipe(getShape, shape =>\n getCuratedCells({ layout: _layout, observations, shape }),\n )(isVertical);\n\n const refined = refineLayout(isVertical)(toRefine, extractedKeys, curatedObs);\n\n const result = getRefinedLayout(isVertical, truncated, refined);\n\n return R.pipe(\n R.set(R.lensProp('truncated'), true),\n R.set(R.lensProp('totalCells'), total),\n )(result);\n };\n","import * as R from 'ramda';\n\nexport const getLayoutCoordinatesValidator =\n (layoutCoordinates, topCoordinates = {}) =>\n coordinates => {\n if (R.isEmpty(coordinates)) {\n return false;\n }\n if (R.has('OBS_ATTRIBUTES', layoutCoordinates) || R.has('OBS_ATTRIBUTES', topCoordinates)) {\n const obsAttrCoord =\n R.prop('OBS_ATTRIBUTES', layoutCoordinates) || R.prop('OBS_ATTRIBUTES', topCoordinates);\n if (obsAttrCoord !== 'OBS_VALUE') {\n return false;\n }\n }\n const keys = R.keys(coordinates);\n let res = true;\n let notInTop = {};\n R.forEach(key => {\n if (R.prop(key, layoutCoordinates) !== R.prop(key, coordinates)) {\n res = false;\n }\n if (!R.has(key, topCoordinates)) {\n notInTop[key] = key;\n }\n }, keys);\n return res && !R.isEmpty(notInTop);\n };\n","import * as R from 'ramda';\nimport { getFlagsAndNotes } from './getFlagsAndNotes';\nimport { getLayoutCoordinatesValidator } from '../utils';\n\nconst getValueData = (index, dimension, parentsIndexes, missingParents = []) => ({\n dimension: R.pick(['id', 'name', '__index'], dimension),\n value: {\n ...R.pipe(\n R.pathOr({}, ['values', index]),\n R.pick(['id', 'name', 'isNonCoded', 'flags', 'hasAdvancedAttributes', 'display']),\n )(dimension),\n parents: parentsIndexes,\n missingParents,\n },\n});\n\nconst addCoordinatesToKey = (key, dimensionId, valueId) =>\n `${key}${R.isEmpty(key) ? '' : ':'}${dimensionId}=${valueId}`;\n\nconst simpleValueDataSetter = (valueData, datas = []) => R.append(valueData, datas);\n\nconst combinedValueDataSetter = (valueData, datas = []) =>\n R.over(\n R.lensIndex(-1),\n d => ({ ...d, values: R.append(R.prop('value', valueData), d.values) }),\n datas,\n );\n\nconst addValueToSerieData =\n dataSetter => (index, parentsIndexes, dimension, serieData, missingParents) => {\n const valueData = getValueData(index, dimension, parentsIndexes, missingParents);\n const valueId = R.path(['value', 'id'], valueData);\n return {\n ...serieData,\n data: dataSetter(valueData, R.prop('data', serieData)),\n key: addCoordinatesToKey(R.prop('key', serieData), R.prop('id', dimension), valueId),\n };\n };\n\nconst addSimpleValueToSerieData = addValueToSerieData(simpleValueDataSetter);\n\nconst addCombinedValueToSerieData = addValueToSerieData(combinedValueDataSetter);\n\nconst getHasAdvancedAttributes = (attrValues, customAttributes) =>\n R.pipe(\n R.omit(R.concat(customAttributes.flags || [], customAttributes.notes || [])),\n R.isEmpty,\n R.not,\n )(attrValues);\n\nconst getCoordinates = (indexes, topCoordinates, definition) =>\n R.addIndex(R.reduce)(\n (acc, entry, index) => {\n if (R.has('dimensions', entry)) {\n return R.addIndex(R.reduce)(\n (_acc, dim, _index) => {\n const valInd = R.path([index, _index], indexes);\n return R.assoc(dim.id, R.path(['values', Math.abs(valInd), 'id'], dim), _acc);\n },\n acc,\n entry.dimensions,\n );\n }\n const valInd = R.nth(index, indexes);\n if (R.isNil(valInd)) {\n return acc;\n }\n return R.assoc(entry.id, R.path(['values', Math.abs(valInd), 'id'], entry), acc);\n },\n topCoordinates,\n definition,\n );\n\nconst getAttributesSeries = (validator, attributesSeries) =>\n R.reduce(\n (acc, attrs) => {\n const attr = R.head(R.values(attrs)) || {};\n const coordinates = R.propOr({}, 'coordinates', attr);\n const isValid = validator(coordinates);\n if (!isValid && !R.prop('isObs', attr)) {\n return acc;\n }\n const filtered = R.reject(\n a => !R.propOr(false, 'combined', a) && R.length(a.relationship || []) === 1,\n attrs,\n );\n return { ...acc, ...filtered };\n },\n {},\n R.values(attributesSeries),\n );\n\nconst combineConcepts = (combDimValues, definition, attrValues) =>\n R.over(\n R.lensProp('data'),\n R.over(R.lensIndex(-1), data => ({\n ...data,\n values: R.reduce(\n (acc, conceptId) => {\n if (R.has(conceptId, combDimValues)) {\n return R.append(R.prop(conceptId, combDimValues), acc);\n }\n if (R.has(conceptId, definition.fixedDimValues || {})) {\n return R.append(R.prop(conceptId, definition.fixedDimValues), acc);\n }\n if (R.has(conceptId, attrValues)) {\n const value = R.path([conceptId, 'value'], attrValues);\n return R.append(value, acc);\n }\n return acc;\n },\n [],\n definition.concepts,\n ),\n })),\n );\n\nconst getSerieFlagsAndSideProps = (\n coordinates,\n validator,\n attributesValues,\n customAttributes,\n metadataCoordinates,\n data,\n) => {\n const layoutAttrValues = R.reject(\n attr => R.prop('isObs', attr) && !validator(attr.coordinates),\n attributesValues,\n );\n const flags = getFlagsAndNotes(layoutAttrValues, customAttributes);\n const hasMetadata = !R.isNil(R.find(validator, metadataCoordinates));\n const hasDataAdvancedAttributes = R.any(\n d =>\n R.has('value', d)\n ? R.prop('hasAdvancedAttributes', d.value)\n : R.any(R.prop('hasAdvancedAttributes'), d.values),\n data,\n );\n const hasAdvancedAttributes =\n hasDataAdvancedAttributes || getHasAdvancedAttributes(layoutAttrValues, customAttributes);\n const sideProps =\n hasMetadata || hasAdvancedAttributes\n ? { hasMetadata, hasAdvancedAttributes, coordinates }\n : null;\n return { flags, sideProps };\n};\n\nconst getSerieDimensionsData = (serie, definition, attributesValues, missingParentsGetter) =>\n R.addIndex(R.reduce)(\n (onGoingSerie, entry, index) => {\n if (R.has('dimensions', entry)) {\n const combValuesIndexes = R.pathOr([], ['indexes', index], serie);\n const combParentsIndexes = R.pathOr([], ['parentsIndexes', index], serie);\n const combMissingParentsIndexes = R.pathOr([], ['missingIndexes', index], serie);\n let combDimValues = {};\n const res = R.addIndex(R.reduce)(\n (combSerie, dimension, dimIndex) => {\n const valueIndex = Math.abs(R.nth(dimIndex, combValuesIndexes));\n const _parentsIndexes = R.nth(dimIndex, combParentsIndexes) || [];\n const missingParentsIndexes = R.nth(dimIndex, combMissingParentsIndexes) || [];\n const { parentsIndexes, missingParents } = missingParentsGetter(\n combinedValueDataSetter,\n )(missingParentsIndexes, _parentsIndexes, dimension, combSerie);\n const next = addCombinedValueToSerieData(\n valueIndex,\n parentsIndexes,\n dimension,\n combSerie,\n missingParents,\n );\n const value = R.pipe(R.prop('data'), R.last, R.prop('values'), R.last)(next);\n combDimValues = R.assoc(dimension.id, value, combDimValues);\n return next;\n },\n R.over(\n R.lensProp('data'),\n R.append({ dimension: R.pick(['id', 'name'], entry), values: [] }),\n )(onGoingSerie),\n R.propOr([], 'dimensions', entry),\n );\n\n const combined = combineConcepts(combDimValues, entry, onGoingSerie.attributes)(res);\n return R.over(R.lensProp('attributes'), R.omit(entry.concepts), combined);\n }\n\n const valueIndex = Math.abs(R.path(['indexes', index], serie));\n const _parentsIndexes = R.pathOr([], ['parentsIndexes', index], serie);\n const missingParentsIndexes = R.pathOr([], ['missingIndexes', index], serie);\n const { parentsIndexes, missingParents } = missingParentsGetter(simpleValueDataSetter)(\n missingParentsIndexes,\n _parentsIndexes,\n entry,\n onGoingSerie,\n );\n return addSimpleValueToSerieData(\n valueIndex,\n parentsIndexes,\n entry,\n onGoingSerie,\n missingParents,\n );\n },\n { data: [], key: '', attributes: attributesValues },\n definition,\n );\n\nexport const getSerieDataWithMissingLines = (\n serie,\n definition,\n topCoordinates,\n attributesSeries,\n customAttributes,\n metadataCoordinates,\n rejectedDims = [],\n) => {\n const lines = [];\n const coordinates = getCoordinates(serie.indexes, topCoordinates, definition);\n const serieCoordinates = getCoordinates(serie.rejected || [], coordinates, rejectedDims);\n const coordinatesValidator = getLayoutCoordinatesValidator(serieCoordinates, topCoordinates);\n const attributesValues = getAttributesSeries(coordinatesValidator, attributesSeries);\n\n const getMissingParents =\n dataSetter => (missingParentsIndexes, _parentsIndexes, dim, serieData) =>\n R.reduce(\n (acc, index) => {\n const missingParentData = addValueToSerieData(dataSetter)(\n index,\n acc.parentsIndexes,\n dim,\n serieData,\n );\n lines.push({\n ...R.dissoc('attributes', missingParentData),\n sideProps: null,\n flags: [],\n isEmpty: true,\n });\n return R.over(R.lensProp('parentsIndexes'), R.append(index), acc);\n },\n { parentsIndexes: _parentsIndexes, missingParents: [] },\n missingParentsIndexes,\n );\n const { attributes, ...serieData } = getSerieDimensionsData(\n serie,\n definition,\n attributesValues,\n getMissingParents,\n );\n const topCoordinatesValidator = getLayoutCoordinatesValidator(topCoordinates);\n const flagsValidator = coordinates =>\n coordinatesValidator(coordinates) && !topCoordinatesValidator(coordinates);\n const { flags, sideProps } = getSerieFlagsAndSideProps(\n serieCoordinates,\n flagsValidator,\n attributes,\n customAttributes,\n metadataCoordinates,\n serieData.data,\n );\n return R.append({ ...serieData, flags, sideProps, coordinates: serieCoordinates }, lines);\n};\n\nexport const getSerieDataWithoutMissingLines = (\n serie,\n definition,\n topCoordinates,\n attributesSeries,\n customAttributes,\n metadataCoordinates,\n rejectedDims = [],\n) => {\n const coordinates = getCoordinates(serie.indexes, topCoordinates, definition);\n const serieCoordinates = getCoordinates(serie.rejected || [], coordinates, rejectedDims);\n const coordinatesValidator = getLayoutCoordinatesValidator(serieCoordinates, topCoordinates);\n const attributesValues = getAttributesSeries(coordinatesValidator, attributesSeries);\n\n const getMissingParents = () => (missingParentsIndexes, _parentsIndexes, dim) =>\n R.reduce(\n (acc, index) => ({\n parentsIndexes: R.append(index, acc.parentsIndexes),\n missingParents: R.append(\n R.prop('value', getValueData(index, dim, acc.parentsIndexes)),\n acc.missingParents,\n ),\n }),\n { parentsIndexes: _parentsIndexes, missingParents: [] },\n missingParentsIndexes,\n );\n\n const { attributes, ...serieData } = getSerieDimensionsData(\n serie,\n definition,\n attributesValues,\n getMissingParents,\n );\n const { flags, sideProps } = getSerieFlagsAndSideProps(\n serieCoordinates,\n coordinatesValidator,\n attributes,\n customAttributes,\n metadataCoordinates,\n serieData.data,\n );\n return { ...serieData, flags, sideProps, coordinates: serieCoordinates };\n};\n\nexport const getLayoutData = (\n layoutIndexes,\n layout,\n {\n metadataCoordinates,\n attributesSeries,\n customAttributes,\n topCoordinates = {},\n rejectedDimensions = [],\n },\n) => {\n const { header, sections, ...rest } = layoutIndexes;\n const headerData = R.reduce(\n (acc, serie) => {\n const datas = getSerieDataWithMissingLines(\n serie,\n layout.header,\n topCoordinates,\n attributesSeries,\n customAttributes,\n metadataCoordinates,\n rejectedDimensions,\n );\n return R.concat(acc, datas);\n },\n [],\n header,\n );\n\n const sectionsData = R.map(([sectionSerie, rowsSeries]) => {\n const sectionData = getSerieDataWithoutMissingLines(\n sectionSerie,\n layout.sections,\n topCoordinates,\n attributesSeries,\n customAttributes,\n metadataCoordinates,\n rejectedDimensions,\n );\n return [\n sectionData,\n R.reduce(\n (acc, serie) => {\n const datas = getSerieDataWithMissingLines(\n serie,\n layout.rows,\n R.propOr(topCoordinates, 'coordinates', sectionData),\n attributesSeries,\n customAttributes,\n metadataCoordinates,\n rejectedDimensions,\n );\n return R.concat(acc, datas);\n },\n [],\n rowsSeries,\n ),\n ];\n }, sections);\n\n return { headerData, sectionsData, ...rest };\n};\n","import * as R from 'ramda';\n\nexport const getCellsAttributesIds = (layoutIds, attributes) => {\n return R.reduce(\n (acc, attr) => {\n if (!attr.series) {\n return acc;\n }\n if (R.isEmpty(attr.relationship || [])) {\n return R.assoc(attr.id, attr.id, acc);\n }\n const indexedHeaderIds = R.indexBy(R.identity, layoutIds.header);\n const indexedSectionsIds = R.indexBy(R.identity, layoutIds.sections);\n const indexedRowsIds = { ...indexedSectionsIds, ...R.indexBy(R.identity, layoutIds.rows) };\n const [idsInHeader, rest] = R.partition(id => R.has(id, indexedHeaderIds), attr.relationship);\n if (R.isEmpty(rest)) {\n return acc;\n } else if (!R.isEmpty(idsInHeader)) {\n return R.assoc(attr.id, attr.id, acc);\n } else {\n const idsNotInSections = R.reject(id => R.has(id, indexedSectionsIds), attr.relationship);\n if (R.isEmpty(idsNotInSections)) {\n return acc;\n }\n const idsNotInRows = R.reject(id => R.has(id, indexedRowsIds), idsNotInSections);\n if (R.isEmpty(idsNotInRows)) {\n return acc;\n }\n }\n return R.assoc(attr.id, attr.id, acc);\n },\n {},\n attributes,\n );\n};\n","import * as R from 'ramda';\n\nexport const getCellsMetadataCoordinates = (metadataCoordinates, oneValueDimensions, layoutIds) => {\n const oneValueDimsIds = R.pluck('id', oneValueDimensions);\n return R.reject(coordinates => {\n const columnIds = R.concat(layoutIds.header, oneValueDimsIds);\n if (R.isEmpty(R.omit(columnIds, coordinates))) {\n return true;\n }\n const rowsIds = [...layoutIds.sections, ...layoutIds.rows, ...oneValueDimsIds];\n return R.isEmpty(R.omit(rowsIds, coordinates));\n }, metadataCoordinates);\n};\n","import * as R from 'ramda';\n\nexport const getIndexedCombinationsByDisplay = (layout, combinations) => {\n const layoutIds = R.pipe(R.map(R.pluck('id')), R.values, R.unnest, R.indexBy(R.identity))(layout);\n\n const [combsInLayout, combsInCells] = R.partition(\n comb => R.has(comb.id, layoutIds),\n combinations,\n );\n return { cells: combsInCells, layout: combsInLayout };\n};\n","import * as R from 'ramda';\nimport { getFlagsAndNotes } from './getFlagsAndNotes';\nimport { hasCellMetadata } from '../hasCellMetadata';\n\nconst getCellRelevantAttributes = (attributes, attributesSeries, cellAttributeIds) =>\n R.filter(attr => {\n if (R.isNil(attr.value)) {\n return false;\n }\n if (R.has(attr.id, cellAttributeIds)) {\n return true;\n }\n const attrInSerie = R.path([attr.serieKey, attr.id], attributesSeries);\n return R.isNil(attrInSerie);\n }, attributes);\n\nconst getCellCombinedSeries = (attributes, combinations) =>\n R.reduce(\n (acc, comb) => {\n const values = R.reduce(\n (acc, concept) => {\n if (R.has(concept, comb.fixedDimValues || {})) {\n return R.append(R.prop(concept, comb.fixedDimValues), acc);\n }\n if (R.has(concept, attributes || {})) {\n return R.append(R.path([concept, 'value'], attributes), acc);\n }\n return acc;\n },\n [],\n comb.concepts,\n );\n\n if (R.isEmpty(values)) {\n return acc;\n }\n return R.append({ ...R.pick(['id', 'name'], comb), values }, acc);\n },\n [],\n combinations,\n );\n\n// combinations = { cells, layout };\nexport const getCells =\n (customAttributes, cellsAttributesId, combinations, attributesSeries, metadataCoordinates) =>\n observations => {\n const attributesInLayoutCombination = R.pipe(\n R.propOr([], 'layout'),\n R.pluck('concepts'),\n R.unnest,\n )(combinations);\n\n const attributesInCellsCombination = R.pipe(\n R.propOr([], 'cells'),\n R.pluck('concepts'),\n R.unnest,\n )(combinations);\n\n const _customAttributes = R.over(R.lensProp('notes'), notes =>\n R.pipe(R.concat, R.uniq)(notes || [], attributesInLayoutCombination),\n )(customAttributes);\n\n return R.mapObjIndexed(obs => {\n const isAttrCell = R.pathOr('OBS_VAL', ['indexedDimValIds', 'OBS_ATTR'], obs) !== 'OBS_VAL';\n const relevantAttributes = isAttrCell\n ? []\n : getCellRelevantAttributes(obs.attributes, attributesSeries, cellsAttributesId);\n const flagsAndNotes = isAttrCell\n ? []\n : getFlagsAndNotes(\n R.omit(attributesInCellsCombination, relevantAttributes),\n _customAttributes,\n );\n const combinedSeries = isAttrCell\n ? []\n : getCellCombinedSeries(relevantAttributes, combinations.cells || []);\n const hasAdvancedAttributes = isAttrCell\n ? false\n : R.pipe(\n R.omit(\n R.unnest([\n _customAttributes.flags || [],\n _customAttributes.notes || [],\n attributesInCellsCombination,\n ]),\n ),\n res => !R.isEmpty(res),\n )(relevantAttributes);\n\n const advancedAttributes = R.omit(\n R.unnest([\n _customAttributes.flags || [],\n _customAttributes.notes || [],\n attributesInCellsCombination,\n ]),\n R.filter(attr => !R.isNil(attr.value), obs.attributes),\n );\n\n const hasMetadata = isAttrCell\n ? false\n : hasCellMetadata(metadataCoordinates, obs.indexedDimValIds);\n\n return {\n ...R.pick(['indexedDimValIds', 'key'], obs),\n flags: R.concat(flagsAndNotes, combinedSeries),\n sideProps:\n hasAdvancedAttributes || hasMetadata\n ? { hasMetadata, coordinates: obs.indexedDimValIds, advancedAttributes }\n : null,\n intValue: R.is(Number, obs.value) ? obs.value : null,\n value: obs.formattedValue,\n };\n }, observations);\n };\n","import * as R from 'ramda';\n\nexport const hasCellMetadata = (metadataCoordinates, cellCoordinates) => {\n if (R.propOr('OBS_VALUE', 'OBS_ATTRIBUTES', cellCoordinates) !== 'OBS_VALUE') {\n return false;\n }\n return R.pipe(\n R.find(coordinates => {\n const mergedCoord = R.mergeLeft(coordinates, cellCoordinates);\n return !R.isEmpty(coordinates) && R.equals(mergedCoord, cellCoordinates);\n }),\n R.complement(R.isNil),\n )(metadataCoordinates);\n};\n","import * as R from 'ramda';\n\nexport const getCuratedCells = (cells, layout) => {\n const layoutIds = R.map(\n R.pipe(\n R.map(entry =>\n R.has('dimensions', entry) ? R.pluck('id', entry.dimensions || []) : entry.id,\n ),\n R.unnest,\n ),\n )(layout);\n return R.pipe(\n R.values,\n R.reduce((acc, cell) => {\n const keys = R.map(\n R.pipe(\n R.map(dim => {\n const val = R.prop(dim, cell.indexedDimValIds);\n return `${dim}=${val}`;\n }),\n R.join(':'),\n ),\n layoutIds,\n );\n\n return R.over(\n R.lensPath(R.props(['header', 'sections', 'rows'], keys)),\n cells => (R.isNil(cells) ? [cell] : R.append(cell, cells)),\n acc,\n );\n }, {}),\n )(cells);\n};\n","import * as R from 'ramda';\n\nexport const getObservations = sdmxJson =>\n R.pipe(\n R.pathOr({}, ['data', 'dataSets', 0, 'observations']),\n R.mapObjIndexed((observation, observationKey) => {\n const value = R.head(observation);\n const attrValuesIndexes = R.tail(observation);\n const dimValuesIndexes = R.split(':', observationKey);\n\n return {\n key: observationKey,\n value,\n attrValuesIndexes,\n dimValuesIndexes,\n };\n }),\n )(sdmxJson);\n","import * as R from 'ramda';\n\nconst addParentId = (id, ids) => {\n const last = R.last(ids);\n return R.append(R.isNil(last) ? id : `${last}.${id}`, ids);\n};\n\nconst _refineUnconfirmedPaths = paths => R.map(p => [R.head(p)], paths);\n\nconst getHierId = v => (R.isNil(v.parent) || R.isEmpty(v.parent) ? v.id : `${v.parent}.${v.id}`);\n\nexport const applyHierarchicalCodesToDim = (hCodes, dim) => {\n const confirmedHierarchisedChilds = new Set([]);\n let unconfirmedPaths = {};\n\n const indexedValues = R.reduce(\n (acc, val) => {\n if (!val.isSelected) {\n return acc;\n }\n return R.assoc(val.id, val, acc);\n },\n {},\n dim.values || [],\n );\n\n const parseHCodes = (parentsDef, parentsInDim) =>\n R.reduce((acc, hC) => {\n const { codeID, hierarchicalCodes = [] } = hC;\n const hasInDim = R.has(codeID, indexedValues);\n const isUnconfirmed = R.length(parentsInDim) !== R.length(parentsDef);\n const children = parseHCodes(\n R.append(codeID, parentsDef),\n hasInDim ? addParentId(codeID, parentsInDim) : parentsInDim,\n )(hierarchicalCodes);\n if (!hasInDim) {\n return R.concat(acc, children);\n }\n const path = R.join('.', parentsDef);\n let val = {\n ...R.prop(codeID, indexedValues),\n path,\n parents: parentsInDim,\n parent: R.last(parentsInDim),\n children,\n };\n\n if (isUnconfirmed) {\n unconfirmedPaths = R.over(\n R.lensProp(val.id),\n paths => R.append(path, paths || []),\n unconfirmedPaths,\n );\n val = R.assoc('unconfirmed', true, val);\n return R.append(val, acc);\n }\n confirmedHierarchisedChilds.add(codeID);\n return R.append(val, acc);\n }, []);\n\n const parsed = parseHCodes([], [])(hCodes);\n\n const _unconfirmedPaths = R.pipe(\n R.reject(id => confirmedHierarchisedChilds.has(id)),\n ids => R.pick(ids, unconfirmedPaths),\n )(R.keys(unconfirmedPaths));\n\n const refinedUnconfirmedPaths = _refineUnconfirmedPaths(_unconfirmedPaths);\n\n const flattenDescendants = R.reduce((acc, val) => {\n const children = flattenDescendants(val.children || []);\n return R.concat(acc, R.prepend(val, children));\n }, []);\n\n const isValid = val =>\n !val.unconfirmed || val.path === R.head(refinedUnconfirmedPaths[val.id] || []);\n\n const refineCodes = R.reduce((acc, hC) => {\n const _flatDescendants = flattenDescendants(hC.children);\n const flatDescendants = R.prepend(hC, _flatDescendants);\n\n const valids = R.filter(isValid, flatDescendants);\n\n if (R.isEmpty(valids)) {\n return acc;\n }\n const refined = R.pipe(\n R.reduce((_acc, v) => {\n confirmedHierarchisedChilds.add(v.id);\n const prev = R.last(_acc);\n const parents = R.pipe(\n p => (R.isNil(p) ? [] : R.append(getHierId(p), prev.parents || [])),\n R.filter(id => R.includes(id, v.parents)),\n )(prev);\n const rV = {\n ...R.omit(['unconfirmed', 'children', 'path'], v),\n parents,\n parent: R.isEmpty(parents) ? undefined : R.last(parents),\n };\n return R.append(rV, _acc);\n }, []),\n )(valids);\n return R.concat(acc, refined);\n }, []);\n\n const refined = refineCodes(parsed);\n\n const missingValues = R.pipe(\n R.keys,\n R.filter(id => !confirmedHierarchisedChilds.has(id)),\n ids => R.props(ids, indexedValues),\n R.map(v => ({ ...v, parents: [], parent: undefined })),\n R.sortBy(R.propOr(-1, '__indexPosition')),\n )(indexedValues);\n\n let hierarchicalIndexes = {};\n return R.pipe(\n R.concat,\n R.addIndex(R.map)((v, ind) => {\n const parents = R.props(v.parents, hierarchicalIndexes);\n const hierId = getHierId(v);\n hierarchicalIndexes[hierId] = ind;\n return {\n ...R.dissoc('path', v),\n parents,\n __indexPosition: ind,\n };\n }),\n values => ({ ...dim, values }),\n )(missingValues, refined);\n};\n","import * as R from 'ramda';\nimport { REPORTING_YEAR_START_DAY, REPYEARSTART } from '../constants';\n\nexport const getReportingYearStart = sdmxJson => {\n const attributes = R.pipe(\n R.pathOr({}, ['data', 'structure', 'attributes']),\n ({ dataSet = [], observation = [], series = [] }) => [...dataSet, ...observation, ...series],\n )(sdmxJson);\n\n const reportYearStartAttr =\n R.find(({ id }) => {\n return id === REPORTING_YEAR_START_DAY || id === REPYEARSTART;\n }, attributes) || {};\n const reportYearStart = R.pathOr('--01-01', ['values', 0, 'value'], reportYearStartAttr);\n const [month = '01', day = '01'] = R.match(/[\\d]{2}/g, reportYearStart);\n return { month, day };\n};\n","import * as R from 'ramda';\n\nexport const declineObservationsOverAttributes = (attrsIds, observations) => {\n const obsKeys = R.keys(observations);\n return R.reduce(\n (acc, obsKey) => {\n const obs = R.prop(obsKey, observations);\n const enhancedObs = R.pipe(\n R.over(R.lensProp('orderedDimIndexes'), R.append(0)),\n R.over(R.lensProp('attributes'), R.omit(attrsIds)),\n R.assocPath(['indexedDimValIds', 'OBS_ATTRIBUTES'], 'OBS_VALUE'),\n )(obs);\n return R.addIndex(R.reduce)(\n (_acc, attrId, attrIndex) => {\n const attr = R.pathOr({}, ['attributes', attrId], obs);\n if (\n R.isEmpty(attr) ||\n R.isNil(R.prop('value', attr)) ||\n !R.pathOr(true, ['value', 'display'], attr)\n ) {\n return _acc;\n }\n const declinedKey = `${obsKey}:${attrIndex + 1}`;\n const declined = {\n ...obs,\n attributes: {},\n value: R.prop('value', attr),\n formattedValue: R.prop('value', attr),\n orderedDimIndexes: R.append(attrIndex + 1, obs.orderedDimIndexes),\n indexedDimValIds: {\n ...obs.indexedDimValIds,\n OBS_ATTRIBUTES: attr.id,\n },\n };\n return R.assoc(declinedKey, declined, _acc);\n },\n R.assoc(`${obsKey}:0`, enhancedObs, acc),\n attrsIds,\n );\n },\n {},\n obsKeys,\n );\n};\n","import * as R from 'ramda';\n\nconst registerParsedIndexes = ({ isSameSerie, ...parsed }, register) => {\n const merged = R.mergeWith((a, b) => R.append(a || [], b), parsed, register);\n return { ...merged, isSameSerie };\n};\n\nconst parseParentsIndexesWithPrevious = (parentsIndexes, previousParentsIndexes) => {\n const previousParentsSet = new Set(previousParentsIndexes);\n const lastParentIndexInPrevious = R.findLastIndex(i => previousParentsSet.has(i), parentsIndexes);\n const [rawPresentParentsIndexes, missingParentsIndexes] =\n lastParentIndexInPrevious !== -1\n ? R.splitAt(lastParentIndexInPrevious + 1, parentsIndexes)\n : [[], parentsIndexes];\n const presentParentsIndexes = R.filter(i => previousParentsSet.has(i), rawPresentParentsIndexes);\n return { presentParentsIndexes, missingParentsIndexes };\n};\n\nconst parseSerieIndexesHierarchies = (\n serieIndexes,\n previousSerie,\n dimensions,\n isSameSerie,\n replicate,\n) => {\n return R.addIndex(R.reduce)(\n (acc, _valueIndex, dimensionIndex) => {\n if (R.is(Array, _valueIndex)) {\n const previous = R.isEmpty(previousSerie)\n ? {}\n : R.map(R.nth(dimensionIndex), previousSerie);\n const parsed = parseSerieIndexesHierarchies(\n _valueIndex,\n previous,\n R.pathOr([], [dimensionIndex, 'dimensions'], dimensions),\n acc.isSameSerie,\n replicate,\n );\n return registerParsedIndexes(parsed, acc);\n }\n const valueIndex = Math.abs(_valueIndex);\n const parents = R.pathOr([], [dimensionIndex, 'values', valueIndex, 'parents'], dimensions);\n const previousIndex = R.pipe(R.path(['indexes', dimensionIndex]), i =>\n R.isNil(i) ? -1 : Math.abs(i),\n )(previousSerie);\n const previousParentsIndexes = acc.isSameSerie\n ? R.pipe(\n R.pathOr([], ['parentsIndexes', dimensionIndex]),\n R.append(previousIndex),\n )(previousSerie)\n : [];\n const previousMissingIndexes = acc.isSameSerie\n ? R.pathOr([], ['missingIndexes', dimensionIndex], previousSerie)\n : [];\n /*\n if replicate = true (sections), missing parents insdexes are replicated on each brother nodes not just the first (as empty lines)\n thats why passing previous missing as previous parents in case replicate = false\n */\n const { presentParentsIndexes, missingParentsIndexes } = parseParentsIndexesWithPrevious(\n parents,\n replicate\n ? previousParentsIndexes\n : R.concat(previousParentsIndexes, previousMissingIndexes),\n );\n return registerParsedIndexes(\n {\n parentsIndexes: presentParentsIndexes,\n missingIndexes: missingParentsIndexes,\n isSameSerie: acc.isSameSerie && valueIndex === previousIndex,\n },\n acc,\n );\n },\n { parentsIndexes: [], missingIndexes: [], isSameSerie },\n serieIndexes,\n );\n};\n\nexport const parseSeriesIndexesHierarchies = (\n seriesIndexes,\n dimensions,\n replicateMissing = false,\n) => {\n return R.reduce(\n (acc, { indexes, ...rest }) => {\n const previousSerie = R.last(acc) || {};\n const { isSameSerie, ...parsed } = parseSerieIndexesHierarchies(\n indexes,\n previousSerie,\n dimensions,\n true,\n replicateMissing,\n );\n return R.append({ indexes, ...parsed, ...rest }, acc);\n },\n [],\n seriesIndexes,\n );\n};\n\nexport const parseLayoutIndexesHierarchies = (layoutIndexes, layout) => {\n const header = parseSeriesIndexesHierarchies(layoutIndexes.header, layout.header);\n const sections = R.pipe(R.transpose, ([_sections, _sectionsRows]) => {\n if (R.isNil(_sections)) {\n return [];\n }\n // replicate = true on sections\n const sections = parseSeriesIndexesHierarchies(_sections, layout.sections, true);\n const sectionsRows = R.map(\n rows => parseSeriesIndexesHierarchies(rows, layout.rows),\n _sectionsRows,\n );\n return R.transpose([sections, sectionsRows]);\n })(layoutIndexes.sections);\n\n return { header, sections };\n};\n","import * as R from 'ramda';\nimport { isTimePeriodDimension, isRefAreaDimension } from '@sis-cc/dotstatsuite-sdmxjs';\n\nconst getCombinationsNotInLayout = (combinations, layoutIds) => {\n const { header = [], sections = [], rows = [] } = layoutIds;\n const idsInLayout = new Set([...header, ...sections, ...rows]);\n return R.reject(comb => idsInLayout.has(comb.id), combinations);\n};\n\nconst indexCombsRelationships = combinations =>\n R.reduce(\n (acc, comb) => {\n const { id, relationship = [] } = comb;\n return R.assoc(id, relationship, acc);\n },\n {},\n combinations,\n );\n\nconst getLayoutLevelRelationship = indexedRelationships => ids =>\n R.reduce(\n (acc, id) => {\n if (R.has(id, indexedRelationships)) {\n return R.concat(acc, R.prop(id, indexedRelationships));\n }\n return R.append(id, acc);\n },\n [],\n ids,\n );\n\nconst getLayoutRelationships = (indexedRelationships, layoutIds) =>\n R.map(getLayoutLevelRelationship(indexedRelationships), layoutIds);\n\nconst injectCombination = combination => ids => {\n const { id, concepts = [] } = combination;\n const conceptsSet = new Set(concepts);\n let inject = true;\n const refined = R.reduce(\n (acc, i) => {\n if (!conceptsSet.has(i)) {\n return R.append(i, acc);\n }\n if (inject) {\n inject = false;\n return R.append(id, acc);\n }\n return acc;\n },\n [],\n ids,\n );\n return inject ? R.append(id, refined) : refined;\n};\n\nconst getCombinationLevelCompatibility = (layoutRelationships, combination) => {\n const { relationship = [] } = combination;\n const idsInHeaderSet = new Set(layoutRelationships.header);\n const idsInSectionsSet = new Set(layoutRelationships.sections);\n const idsInRowsSet = new Set(layoutRelationships.rows);\n const [idsInHeader, rest] = R.partition(i => idsInHeaderSet.has(i), relationship);\n const [idsInSections, idsInRows] = R.reduce(\n (_acc, id) => {\n if (idsInSectionsSet.has(id)) return R.over(R.lensIndex(0), R.append(id), _acc);\n if (idsInRowsSet.has(id)) return R.over(R.lensIndex(1), R.append(id), _acc);\n return R.over(R.lensIndex(2), R.append(id), _acc);\n },\n [[], [], []],\n rest,\n );\n if (!R.isEmpty(idsInHeader) && R.isEmpty(idsInSections) && R.isEmpty(idsInRows)) {\n return 'header';\n }\n if (!R.isEmpty(idsInHeader)) {\n return null;\n }\n if (!R.isEmpty(idsInSections) && R.isEmpty(idsInRows)) {\n return 'sections';\n }\n if (!R.isEmpty(idsInRows)) {\n return 'rows';\n }\n return 'blank';\n};\n\nconst filterLayoutIds = (indexedCombinations, layoutDimsIds, obsAttributes) => layoutIds => {\n const layoutConcepts = R.map(\n R.reduce((acc, id) => {\n if (R.has(id, indexedCombinations)) {\n return R.concat(acc, R.path([id, 'concepts'], indexedCombinations));\n }\n return R.append(id, acc);\n }, []),\n layoutIds,\n );\n\n return R.mapObjIndexed(\n (ids, level) =>\n R.filter(id => {\n if (id === 'OBS_ATTRIBUTES') {\n return !R.isEmpty(obsAttributes);\n }\n if (R.has(id, indexedCombinations)) {\n const comb = R.prop(id, indexedCombinations);\n const dims = R.filter(i => layoutDimsIds.has(i), comb.concepts);\n if (!R.isEmpty(dims)) {\n return true;\n }\n const oppositeIds =\n level === 'header'\n ? R.concat(R.prop('sections', layoutConcepts), R.prop('rows', layoutConcepts))\n : R.prop('header', layoutConcepts);\n return R.isEmpty(R.intersection(comb.relationship, oppositeIds));\n }\n return layoutDimsIds.has(id);\n }, ids),\n layoutIds,\n );\n};\n\nexport const injectCombinationsInLayout = (combinations, layoutIds, defaultLayoutIds = {}) => {\n const notInLayoutCombs = getCombinationsNotInLayout(combinations, layoutIds);\n if (R.isEmpty(notInLayoutCombs)) {\n return layoutIds;\n }\n const indexedCombsRelationships = indexCombsRelationships(combinations);\n let layoutRelationships = getLayoutRelationships(indexedCombsRelationships, layoutIds);\n const defaultLayoutRelationships = getLayoutRelationships(\n indexedCombsRelationships,\n defaultLayoutIds,\n );\n return R.reduce(\n (acc, comb) => {\n let levelCompatibility = getCombinationLevelCompatibility(layoutRelationships, comb);\n if (R.isNil(levelCompatibility)) {\n return acc;\n }\n if (R.equals('blank', levelCompatibility)) {\n levelCompatibility = getCombinationLevelCompatibility(defaultLayoutRelationships, comb);\n if (R.isNil(levelCompatibility)) {\n return acc;\n }\n levelCompatibility = R.equals('blank', levelCompatibility) ? 'rows' : levelCompatibility;\n }\n\n layoutRelationships[levelCompatibility] = R.concat(\n layoutRelationships[levelCompatibility],\n comb.relationship,\n );\n const ids = injectCombination(comb)(acc[levelCompatibility]);\n return R.assoc(levelCompatibility, ids)(acc);\n },\n layoutIds,\n notInLayoutCombs,\n );\n};\n\nconst getLayoutDimsIds = dimensions =>\n R.reduce((acc, d) => (d.header ? acc : acc.add(d.id)), new Set([]), dimensions);\n\nconst getLayoutCombinations = (combinations, layoutDimsIds, attributes) => {\n const indexedAttributes = R.indexBy(R.prop('id'), attributes);\n return R.reduce(\n (acc, comb) => {\n const { layoutConcepts, relationship } = R.reduce(\n (_acc, concept) => {\n if (layoutDimsIds.has(concept)) {\n return R.map(R.append(concept), _acc);\n }\n if (R.has(concept, indexedAttributes)) {\n const attr = R.prop(concept, indexedAttributes);\n return attr.series\n ? {\n ..._acc,\n relationship: R.concat(_acc.relationship, attr.relationship),\n }\n : _acc;\n }\n return _acc;\n },\n { layoutConcepts: [], relationship: [] },\n comb.concepts || [],\n );\n if (R.isEmpty(relationship)) {\n return acc;\n }\n return R.append({ ...comb, relationship, concepts: layoutConcepts }, acc);\n },\n [],\n combinations,\n );\n};\n\nconst extractConcepts = (ids, indexedCombinations, layoutDimsIds) => {\n const entry = R.find(id => {\n if (R.has(id, indexedCombinations)) {\n const dimId = R.find(\n i => layoutDimsIds.has(i),\n R.pathOr([], [id, 'concepts'], indexedCombinations),\n );\n return !R.isNil(dimId);\n }\n return true;\n }, ids);\n\n const getRelationship = id => {\n if (R.has(id, indexedCombinations)) {\n return R.append(id, R.path([id, 'relationship'], indexedCombinations));\n }\n return [id];\n };\n let indexedRels = R.reduce((acc, id) => R.assoc(id, getRelationship(id), acc), {}, ids);\n\n let relationship = [entry];\n while (!R.isEmpty(indexedRels)) {\n const related = R.pickBy(rels => !R.isEmpty(R.intersection(relationship, rels)), indexedRels);\n if (R.isEmpty(related)) {\n break;\n }\n indexedRels = R.omit(R.keys(related), indexedRels);\n relationship = R.concat(relationship, R.unnest(R.values(related)));\n }\n const set = new Set(relationship);\n return R.partition(id => set.has(id), ids);\n};\n\nconst injectRemainingDimensionsInLayout = (\n layoutIds,\n remainingDims,\n indexedCombinations,\n layoutDimsIds,\n) => {\n let _layout = layoutIds;\n let _remaining = remainingDims;\n\n const dimInRows = R.find(id => {\n if (layoutDimsIds.has(id)) {\n return true;\n }\n const dimId = R.find(\n i => layoutDimsIds.has(i),\n R.pathOr([], [id, 'concepts'], indexedCombinations),\n );\n return !R.isNil(dimId);\n }, _layout.rows);\n\n if (R.isNil(dimInRows)) {\n if (R.isEmpty(_remaining)) {\n const toTakeIn = R.isEmpty(_layout.sections) ? 'header' : 'sections';\n const [extracted, remains] = extractConcepts(\n R.prop(toTakeIn, _layout),\n indexedCombinations,\n layoutDimsIds,\n );\n _layout = { ..._layout, rows: R.concat(_layout.rows, extracted), [toTakeIn]: remains };\n } else {\n _layout = R.over(R.lensProp('rows'), R.append(R.head(_remaining)))(_layout);\n _remaining = R.tail(_remaining);\n }\n }\n if (!R.isEmpty(_remaining)) {\n const hasNoHeader = R.isEmpty(_layout.header);\n const firstRemaining = R.head(_remaining);\n _remaining = hasNoHeader ? R.tail(_remaining) : _remaining;\n _layout = {\n ..._layout,\n sections: R.concat(_layout.sections, _remaining),\n header: hasNoHeader ? [firstRemaining] : _layout.header,\n };\n }\n return _layout;\n};\n\nexport const getTableLayoutIds = (\n defaultLayoutIds,\n currentLayoutIds,\n dimensions,\n attributes,\n combinations,\n) => {\n const layoutDimsIds = getLayoutDimsIds(dimensions);\n const layoutCombinations = getLayoutCombinations(combinations, layoutDimsIds, attributes);\n const isBlank = R.pipe(R.values, R.all(R.isEmpty))(currentLayoutIds);\n\n const combinationsConcepts = R.pipe(\n R.pluck('_concepts'),\n R.unnest,\n ids => new Set(ids),\n )(combinations);\n const obsAttributes = R.filter(\n a => a.series && R.isEmpty(a.relationship || []) && a.display && !combinationsConcepts.has(a),\n attributes,\n );\n const indexedCombinations = R.indexBy(R.prop('id'), layoutCombinations);\n const filteredLayoutIds = filterLayoutIds(\n indexedCombinations,\n layoutDimsIds,\n obsAttributes,\n )(isBlank ? defaultLayoutIds : currentLayoutIds);\n\n const layoutWithCombs = injectCombinationsInLayout(\n layoutCombinations,\n filteredLayoutIds,\n defaultLayoutIds,\n );\n const layoutRelationshipsSets = R.map(\n R.pipe(\n ids => R.pick(ids, indexedCombinations),\n R.values,\n R.pluck('relationship'),\n R.unnest,\n i => new Set(i),\n ),\n layoutWithCombs,\n );\n const layoutConceptsSets = R.pipe(\n R.map(\n R.reduce((acc, id) => {\n if (R.has(id, indexedCombinations)) {\n return R.concat(acc, R.path([id, 'concepts'], indexedCombinations));\n }\n return R.append(id, acc);\n }, []),\n ),\n R.values,\n R.unnest,\n ids => new Set(ids),\n )(layoutWithCombs);\n const defaultLayoutConceptsSets = R.map(ids => new Set(ids), defaultLayoutIds);\n\n const { nextLayout, remaining } = R.reduce(\n (acc, dim) => {\n if (layoutConceptsSets.has(dim.id) || dim.header) {\n return acc;\n }\n if (\n layoutRelationshipsSets.header.has(dim.id) ||\n defaultLayoutConceptsSets.header.has(dim.id)\n ) {\n return R.over(R.lensPath(['nextLayout', 'header']), R.append(dim.id))(acc);\n }\n if (\n layoutRelationshipsSets.sections.has(dim.id) ||\n defaultLayoutConceptsSets.sections.has(dim.id)\n ) {\n return R.over(R.lensPath(['nextLayout', 'sections']), R.append(dim.id))(acc);\n }\n if (layoutRelationshipsSets.rows.has(dim.id) || defaultLayoutConceptsSets.rows.has(dim.id)) {\n return R.over(R.lensPath(['nextLayout', 'rows']), R.append(dim.id))(acc);\n }\n if (isTimePeriodDimension(dim)) {\n return R.over(R.lensPath(['nextLayout', 'header']), R.append(dim.id))(acc);\n }\n if (isRefAreaDimension(dim)) {\n return R.over(R.lensPath(['nextLayout', 'rows']), R.append(dim.id))(acc);\n }\n return R.over(R.lensProp('remaining'), R.append(dim.id))(acc);\n },\n { nextLayout: layoutWithCombs, remaining: [] },\n dimensions,\n );\n\n return injectRemainingDimensionsInLayout(\n nextLayout,\n remaining,\n indexedCombinations,\n layoutDimsIds,\n );\n};\n","import * as R from 'ramda';\n\nexport const getDataflowTooltipAttributesIds = (sdmxJson, defaults = {}) => {\n const dataflowAnnotationsIndexes = R.pathOr([], ['data', 'dataSets', 0, 'annotations'], sdmxJson);\n const dataflowAnnotations = R.props(\n dataflowAnnotationsIndexes,\n R.pathOr([], ['data', 'structure', 'annotations'], sdmxJson),\n );\n\n const flagsAttrAnnotation = R.find(R.propEq('LAYOUT_FLAG', 'type'), dataflowAnnotations);\n const footnotesAttrAnnotation = R.find(R.propEq('LAYOUT_NOTE', 'type'), dataflowAnnotations);\n\n const customFlags = R.pipe(R.propOr('', 'title'), title =>\n R.isNil(title) || R.isEmpty(title) ? [] : R.split(',', title),\n )(flagsAttrAnnotation || {});\n\n const customNotes = R.pipe(\n R.propOr('', 'title'),\n title => (R.isNil(title) || R.isEmpty(title) ? [] : R.split(',', title)),\n notes => R.difference(notes, customFlags),\n )(footnotesAttrAnnotation || {});\n\n const flags = R.isNil(flagsAttrAnnotation)\n ? R.difference(defaults.flags || [], customNotes)\n : customFlags;\n\n const notes = R.isNil(footnotesAttrAnnotation)\n ? R.difference(defaults.notes || [], flags)\n : customNotes;\n\n return { flags, notes };\n};\n","import * as R from 'ramda';\n\nexport const getDimensionValuesIndexes = values =>\n R.addIndex(R.reduce)(\n (acc, value, position) => {\n const sdmxIndex = value.__index;\n return R.over(\n R.lensProp(String(sdmxIndex)),\n R.ifElse(R.isNil, R.always([position]), R.append(position)),\n )(acc);\n },\n {},\n values,\n );\n","import * as R from 'ramda';\n\nexport const getMSDInformations = msdJson => {\n const attributesDefinitions = R.pathOr(\n [],\n [\n 'data',\n 'metadataStructures',\n 0,\n 'metadataStructureComponents',\n 'reportStructures',\n 0,\n 'metadataAttributes',\n ],\n msdJson,\n );\n const indexedConcepts = R.pipe(\n R.pathOr([], ['data', 'conceptSchemes', 0, 'concepts']),\n R.indexBy(R.prop('id')),\n )(msdJson);\n\n const parseAttributes = parent =>\n R.reduce((acc, attribute) => {\n const id = attribute.id;\n const name = R.path([id, 'name'], indexedConcepts);\n const hierarchicalId = parent === '#ROOT' ? id : `${parent}.${id}`;\n const format = R.path(['localRepresentation', 'textFormat', 'textType'], attribute);\n if (R.has('metadataAttributes', attribute)) {\n const collection = parseAttributes(hierarchicalId)(attribute.metadataAttributes);\n return { ...acc, ...collection, [hierarchicalId]: { format, parent, id, name } };\n }\n return R.assoc(hierarchicalId, { format, parent, id, name }, acc);\n }, {});\n\n return { attributes: parseAttributes('#ROOT')(attributesDefinitions) };\n};\n","import * as R from 'ramda';\nimport { combinedValuesDisplay, singleValueDisplay } from '../combinedValuesDisplay';\n\nexport const getTableLabelAccessor = display => content => {\n return R.is(Array, content)\n ? combinedValuesDisplay(display, content)\n : singleValueDisplay(display, content);\n};\n","import * as R from 'ramda';\nimport { declineObservationsOverAttributes } from './declineObservationsOverAttributes';\nimport { getLayout } from './getLayout';\nimport { getSortedLayoutIndexes } from './getSortedLayoutIndexes';\nimport { parseLayoutIndexesHierarchies } from './parseSeriesIndexesHierarchies';\nimport { refineLayoutSize } from './refineLayoutSize2';\nimport { getLayoutData } from './getLayoutData2';\nimport { getCellsAttributesIds } from './getCellsAttributesIds';\nimport { getIndexedCombinationsByDisplay } from './getIndexedCombinationsByDisplay';\nimport { getCells } from './getCells';\nimport { getCuratedCells } from './getCuratedCells';\nimport { getSeriesCombinations } from '../getSeriesCombinations';\nimport { getCellsMetadataCoordinates } from './getCellsMetadataCoordinates';\n\nexport const getTableProps = ({ data, layoutIds, customAttributes, limit, isTimeInverted }) => {\n const {\n observations,\n dimensions,\n combinations,\n oneValueDimensions,\n attributesSeries,\n metadataCoordinates,\n attributes,\n header,\n rejectedDimensions = [],\n } = data;\n\n const obsAttributes = R.filter(\n a => a.series && R.isEmpty(a.relationship) && a.display && !a.combined,\n attributes,\n );\n let dupObs = observations;\n const hasDuplicatedCells = R.pipe(\n R.values,\n R.unnest,\n R.find(R.equals('OBS_ATTRIBUTES')),\n )(layoutIds);\n if (hasDuplicatedCells) {\n const attrsIds = R.pluck('id', obsAttributes);\n dupObs = declineObservationsOverAttributes(attrsIds, observations);\n }\n const seriesCombinations = getSeriesCombinations(combinations, oneValueDimensions);\n const _dims = R.append(\n {\n id: 'OBS_ATTRIBUTES',\n values: R.prepend({ id: 'OBS_VALUE' }, obsAttributes),\n },\n dimensions,\n );\n const layout = getLayout(layoutIds, _dims, seriesCombinations, isTimeInverted);\n const layoutDimsIds = R.map(\n R.reduce((acc, entry) => {\n if (R.has('dimensions', entry)) {\n return R.concat(acc, R.pluck('id', entry.dimensions));\n }\n return R.append(entry.id, acc);\n }, []),\n layout,\n );\n const layoutIndexes = getSortedLayoutIndexes(layout, dupObs, rejectedDimensions);\n const enhancedLayoutIndexes = parseLayoutIndexesHierarchies(layoutIndexes, layout);\n const refinedLayoutIndexes = refineLayoutSize({ layout, observations: dupObs, limit })(\n enhancedLayoutIndexes,\n );\n const layoutData = getLayoutData(refinedLayoutIndexes, layout, {\n metadataCoordinates,\n attributesSeries,\n customAttributes,\n topCoordinates: header.coordinates,\n rejectedDimensions,\n });\n\n const cellsAttributesIds = getCellsAttributesIds(layoutDimsIds, attributes);\n const indexedCombinations = getIndexedCombinationsByDisplay(layout, seriesCombinations);\n const cellsMetadataCoordinates = getCellsMetadataCoordinates(\n metadataCoordinates,\n oneValueDimensions,\n layoutDimsIds,\n );\n const cells = getCells(\n customAttributes,\n cellsAttributesIds,\n indexedCombinations,\n attributesSeries,\n cellsMetadataCoordinates,\n )(dupObs);\n\n return {\n ...layoutData,\n cells: getCuratedCells(cells, layout),\n layout,\n combinations: seriesCombinations,\n };\n};\n","import * as R from 'ramda';\n\nexport const parseHierarchicalCodelist = (sdmxJson, hierarchyId) => {\n const hCodelist = R.pathOr({}, ['data', 'hierarchicalCodelists', 0], sdmxJson);\n const hierarchy = R.find(R.propEq(hierarchyId, 'id'), hCodelist.hierarchies || []);\n\n const getParentedCodes = (codes, parent) => {\n const ids = R.pluck('codeID', codes);\n\n const siblings = R.reduce(\n (acc, code) => {\n if (R.isEmpty(code.hierarchicalCodes || [])) {\n return acc;\n }\n return R.mergeRight(acc, getParentedCodes(code.hierarchicalCodes, code.id));\n },\n {},\n codes,\n );\n\n return { ...siblings, [parent]: ids };\n };\n\n const getChildren = (codes, parents) => {\n const ids = R.pluck('codeID', codes);\n\n const children = R.reduce(\n (acc, code) => {\n if (R.isEmpty(code.hierarchicalCodes || [])) {\n return acc;\n }\n return {\n ...acc,\n ...getChildren(code.hierarchicalCodes, R.append(code.codeID, parents)),\n };\n },\n {},\n codes,\n );\n const key = R.isEmpty(parents) ? '#ROOT' : R.join('.', parents);\n return { ...children, [key]: ids };\n };\n\n return R.pipe(R.propOr([], 'hierarchicalCodes'), codes => getChildren(codes, []))(hierarchy);\n};\n","import * as R from 'ramda';\n\nexport const parseValueHierarchy = (value, previousValue, indexedValues) => {\n const parentsIds = R.propOr([], 'parents', value);\n if (R.isEmpty(parentsIds)) {\n return value;\n }\n const _previousParentsIds = R.propOr([], 'parentsIds', previousValue);\n const previousParentsIds = R.isNil(previousValue)\n ? []\n : R.append(R.prop('id', previousValue), _previousParentsIds);\n const [presentIds, _missingIds] = R.addIndex(R.splitWhen)(\n (val, ind) => R.nth(ind, previousParentsIds) !== val,\n parentsIds,\n );\n const __previousParentsIds = R.pipe(R.propOr([], 'parents'), R.pluck('id'))(previousValue);\n const missingIds = R.pipe(\n R.takeLastWhile(\n id => !R.includes(id, __previousParentsIds) && id !== R.prop('id', previousValue),\n ),\n ids => R.concat(ids, _missingIds),\n )(presentIds);\n const _previousParents = R.propOr([], 'parents', previousValue);\n const previousParents = R.isNil(previousValue)\n ? []\n : R.append(R.pick(['id', 'name'], previousValue), _previousParents);\n const parents = R.takeWhile(p => R.includes(p.id, presentIds), previousParents);\n const missingParents = R.props(missingIds, indexedValues);\n return {\n ...value,\n parents,\n parentsIds,\n missingParents,\n };\n};\n","import * as R from 'ramda';\nimport { getObservations } from '../../rules/src/preparators/getObservations';\nimport { refineDimensions } from './refineDimensions';\nimport { enhanceObservations } from './enhanceObservations';\nimport { parseAttributes } from './parseAttributes';\nimport { getCombinationDefinitions, parseCombinationDefinition } from './getCombinationDefinitions';\nimport { parseCombinations } from './parseCombinations';\nimport { refineAttributes } from './refineAttributes';\nimport { duplicateObs } from './duplicateObservations';\nimport { getMetadataCoordinates } from './getMetadataCoordinates';\nimport { getAttributesSeries } from './getAttributesSeries';\nimport { getManyValuesDimensions } from './getManyValuesDimensions';\nimport { getOneValueDimensions } from './getOneValueDimensions';\nimport { hierarchiseDimensionWithNativeHierarchy } from './hierarchiseDimensionWithNativeHierarchy2';\nimport { getDataflowAttributes } from './getDataflowAttributes';\nimport { getHeaderTitle } from './getHeaderTitle';\nimport { getHeaderSubtitle } from './getHeaderSubtitle';\nimport { getHeaderCombinations } from './getHeaderCombinations';\nimport { getHeaderCoordinates } from './getHeaderCoordinates';\nimport { applyHierarchicalCodesToDim } from './applyHierarchicalCodesToDim';\nimport { getReportingYearStart } from '../../rules/src/preparators/getReportingYearStart';\nimport { getNotDisplayedIds } from './getNotDisplayedIds';\nimport { getAttributes } from './getAttributes';\n\nexport const prepareData = (\n sdmxJson,\n { customAttributes, locale, hierarchies, dataflow, display, defaultCombinations, dataquery },\n) => {\n const dimensions = R.pathOr([], ['data', 'structure', 'dimensions', 'observation'], sdmxJson);\n const annotations = R.pathOr([], ['data', 'structure', 'annotations'], sdmxJson);\n const reportYearStart = getReportingYearStart(sdmxJson);\n const { hiddenValues, hiddenCombinations } = getNotDisplayedIds(annotations);\n const options = { dataquery, hiddenCombinations, hiddenValues, locale, reportYearStart };\n const refinedDimensions = refineDimensions({ annotations, dimensions, options });\n const _attributes = R.pathOr([], ['data', 'structure', 'attributes'], sdmxJson);\n const attributes = getAttributes({ attributes: _attributes, annotations, options });\n const observations = getObservations(sdmxJson);\n let combinations = getCombinationDefinitions(annotations, locale);\n if (R.isEmpty(combinations) && !R.isEmpty(defaultCombinations)) {\n const { concepts, names } = defaultCombinations;\n combinations = parseCombinationDefinition(locale)(concepts, names);\n }\n const metadataCoordinates = getMetadataCoordinates(sdmxJson);\n\n const parsedAttributes = parseAttributes(attributes, refinedDimensions, customAttributes);\n const parsedCombinations = parseCombinations(combinations, parsedAttributes, refinedDimensions);\n const seriesCombinations = R.filter(R.prop('series'), parsedCombinations);\n const refinedAttributes = refineAttributes(parsedAttributes, seriesCombinations);\n\n const enhancedObservations = enhanceObservations(\n refinedDimensions,\n observations,\n refinedAttributes,\n { customAttributes },\n );\n const attributesSeries = getAttributesSeries(enhancedObservations);\n const manyValuesDimensions = getManyValuesDimensions(\n refinedDimensions,\n attributesSeries,\n customAttributes,\n seriesCombinations,\n );\n const oneValueDimensions = getOneValueDimensions(refinedDimensions, parsedAttributes);\n const rejectedDimensions = R.filter(R.prop('rejected'), dimensions);\n const headerCoordinates = getHeaderCoordinates(oneValueDimensions);\n const hierarchisedDimensions = R.map(dim => {\n if (R.isEmpty(R.propOr({}, dim.id, hierarchies))) {\n return hierarchiseDimensionWithNativeHierarchy(dim);\n }\n return applyHierarchicalCodesToDim(R.prop(dim.id, hierarchies), dim);\n }, manyValuesDimensions);\n const duplicatedObservations = duplicateObs(\n R.values(hierarchisedDimensions),\n enhancedObservations,\n );\n\n const dataflowAttributes = getDataflowAttributes(parsedAttributes, parsedCombinations);\n const headerTitle = getHeaderTitle(dataflow, dataflowAttributes, display, customAttributes);\n const headerSubtitle = getHeaderSubtitle(\n oneValueDimensions,\n parsedCombinations,\n customAttributes,\n display,\n );\n const headerCombinations = getHeaderCombinations(\n parsedCombinations,\n oneValueDimensions,\n refinedAttributes,\n display,\n );\n\n return {\n observations: duplicatedObservations,\n dimensions: hierarchisedDimensions,\n combinations: parsedCombinations,\n oneValueDimensions,\n attributesSeries,\n metadataCoordinates,\n attributes: refinedAttributes,\n rejectedDimensions,\n header: {\n title: headerTitle,\n subtitle: headerSubtitle,\n combinations: headerCombinations,\n coordinates: headerCoordinates,\n },\n };\n};\n","import * as R from 'ramda';\n\nexport const sdmx_3_0_DataFormatPatch = sdmxJson => {\n const dataSet = R.pipe(R.pathOr({}, ['data', 'dataSets']), R.head)(sdmxJson);\n const structureIndex = R.prop('structure', dataSet);\n const structure = R.pipe(R.pathOr([], ['data', 'structures']), R.nth(structureIndex))(sdmxJson);\n\n return R.set(R.lensPath(['data', 'structure']), structure)(sdmxJson);\n};\n","import * as R from 'ramda';\nimport { H_SYMBOL, SCATTER, STACKED_BAR, STACKED_ROW, V_SYMBOL } from './constants';\nimport {\n getCombinationDefinitions,\n refineDimensions,\n parseCombinationDefinition,\n} from '../../rules2/src';\nimport { getReportingYearStart } from './/preparators/getReportingYearStart';\n\nconst isTableLayoutCompatible = (data, layout, combinationsDefinitions = [], dataquery = '') => {\n const indexedCombinations = R.indexBy(R.prop('id'), combinationsDefinitions);\n const reportYearStart = getReportingYearStart(data);\n const indexedManyValuesDimensions = R.pipe(\n R.pathOr([], ['structure', 'dimensions', 'observation']),\n dimensions => refineDimensions({ dimensions, options: { dataquery, reportYearStart } }),\n R.reject(d => R.prop('header', d) || !R.length(d.values || [])),\n R.indexBy(R.prop('id')),\n )(data);\n let remainings = indexedManyValuesDimensions;\n const layoutIds = R.pipe(R.values, R.unnest)(layout);\n let hasFoundIrrelevant = false;\n R.forEach(id => {\n if (R.has(id, indexedManyValuesDimensions)) {\n remainings = R.dissoc(id, remainings);\n } else if (R.has(id, indexedCombinations)) {\n remainings = R.omit(R.pathOr([], [id, 'concepts'], indexedCombinations), remainings);\n } else if (id !== 'OBS_ATTRIBUTES') {\n hasFoundIrrelevant = true;\n }\n }, layoutIds);\n return R.isEmpty(remainings) && !hasFoundIrrelevant;\n};\n\nconst isScatterLayoutCompatible = (data, chartDimension) => {\n const { id, xId, yId } = chartDimension;\n\n const dimensions = R.pathOr([], ['structure', 'dimensions', 'observation'], data);\n\n const dimension = R.find(R.propEq(id, 'id'), dimensions);\n if (R.isNil(dimension)) {\n return false;\n }\n return R.pipe(\n R.propOr([], 'values'),\n R.indexBy(R.prop('id')),\n R.pick([xId, yId]),\n R.values,\n R.length,\n R.equals(2),\n )(dimension);\n};\n\nconst isSymbolLayoutCompatible = (data, chartDimension) => {\n const { id, serie } = chartDimension;\n const serieIds = R.pluck('id', serie);\n\n return R.pipe(\n R.pathOr([], ['structure', 'dimensions', 'observation']),\n R.indexBy(R.prop('id')),\n R.pathOr([], [id, 'values']),\n R.indexBy(R.prop('id')),\n R.pick(serieIds),\n R.values,\n R.length,\n R.equals(R.length(serieIds)),\n )(data);\n};\n\nconst isStackedLayoutCompatible = (data, chartDimension) => {\n const { id } = chartDimension;\n\n return R.pipe(\n R.pathOr([], ['structure', 'dimensions', 'observation']),\n R.filter(R.pipe(R.propOr([], 'values'), R.length, R.lt(1))),\n R.indexBy(R.prop('id')),\n R.has(id),\n )(data);\n};\n\nconst isChartLayoutCompatible = (data, type, chartDimension) => {\n return R.cond([\n [R.always(R.equals(SCATTER, type)), isScatterLayoutCompatible],\n [R.always(R.equals(H_SYMBOL, type) || R.equals(V_SYMBOL, type)), isSymbolLayoutCompatible],\n [\n R.always(R.anyPass([R.equals(STACKED_BAR), R.equals(STACKED_ROW)])(type)),\n isStackedLayoutCompatible,\n ],\n [R.T, R.T],\n ])(data, chartDimension);\n};\n\nexport const isSharedLayoutCompatible = (sdmxData, sharedData) => {\n const type = R.prop('type', sharedData);\n if (type === 'table') {\n const layoutIds = R.pathOr({}, ['config', 'table', 'layoutIds'], sharedData);\n const dataquery = R.path(['config', 'sdmxSource', 'dataquery'], sharedData);\n const annotations = R.pathOr({}, ['structure', 'annotations'], sdmxData);\n const locale = R.pathOr({}, ['config', 'table', 'locale'], sharedData);\n const rawDefaultCombinationsDefinition = R.pathOr(\n {},\n ['config', 'defaultCombinations'],\n sharedData,\n );\n const { concepts = '', names = '' } = rawDefaultCombinationsDefinition;\n const defaultCombinationsDefinition = parseCombinationDefinition(locale)(concepts, names);\n const customCombinationsDefinitions = getCombinationDefinitions(annotations, locale);\n const combinationsDefinitions =\n R.isNil(customCombinationsDefinitions) || R.isEmpty(customCombinationsDefinitions)\n ? defaultCombinationsDefinition\n : customCombinationsDefinitions;\n return isTableLayoutCompatible(sdmxData, layoutIds, combinationsDefinitions, dataquery);\n }\n const chartDimension = R.pathOr({}, ['config', 'chart', 'chartDimension'], sharedData);\n return isChartLayoutCompatible(sdmxData, type, chartDimension);\n};\n","import * as R from 'ramda';\nimport numeral from 'numeral';\n\nconst isValidNumber = R.both(R.is(Number), R.complement(R.equals(NaN)));\n\nexport const getCellValue = observation => {\n const value = R.prop('value', observation);\n if (R.is(Boolean, value)) {\n return value;\n }\n if (R.is(String, value)) {\n const monthMatch = value.match(/^--([\\d]{2})$/);\n if (R.is(Array, monthMatch)) {\n return R.nth(1, monthMatch);\n }\n const monthDayMatch = value.match(/^--([\\d]{2}-[\\d]{2})$/);\n if (R.is(Array, monthDayMatch)) {\n return R.nth(1, monthDayMatch);\n }\n const dayMatch = value.match(/^---([\\d]{2})$/);\n if (R.is(Array, dayMatch)) {\n return R.nth(1, dayMatch);\n }\n return value;\n }\n const scale = Number(observation.prefscale);\n const formatScale = R.ifElse(\n R.always(isValidNumber(scale)),\n value =>\n numeral(value)\n .multiply(Math.pow(10, -1 * Number(scale)))\n .value(),\n R.identity,\n );\n const formatSeparator = value => numeral(value).format(`0,0.[0000000]`);\n const decimals = Number(observation.decimals);\n const formatDecimals = R.ifElse(\n R.always(isValidNumber(decimals)),\n value =>\n numeral(value).format(\n R.ifElse(\n R.equals(0),\n R.always('0,0'),\n d => `0,0.${R.join('', R.times(R.always('0'), d))}`,\n )(decimals),\n ),\n formatSeparator,\n );\n const res = R.ifElse(\n isValidNumber,\n R.pipe(formatScale, formatDecimals),\n R.always('..'),\n )(observation.value);\n return res;\n};\n","import * as R from 'ramda';\nimport numeral from 'numeral';\nimport * as dateFns from 'date-fns';\nimport isMonday from 'date-fns/isMonday';\nimport isTuesday from 'date-fns/isTuesday';\nimport isWednesday from 'date-fns/isWednesday';\nimport isThursday from 'date-fns/isThursday';\nimport isFriday from 'date-fns/isFriday';\nimport isSaturday from 'date-fns/isSaturday';\nimport isSunday from 'date-fns/isSunday';\nimport getISOWeek from 'date-fns/getISOWeek';\nimport { getLocale, dateWithoutTZ } from '../date';\nimport {\n BAR,\n CHORO,\n H_SYMBOL,\n ROW,\n SCATTER,\n STACKED_BAR,\n STACKED_ROW,\n TIMELINE,\n V_SYMBOL,\n} from '../constants';\n\nconst defaultTimeFormats = {\n A: 'yyyy',\n S: 'yyyy-',\n Q: \"yyyy-'Q'Q\",\n M: 'yyyy-MMM',\n W: \"yyyy-'W'II\",\n B: \"yyyy-'W'II\",\n D: 'yyyy-MM-dd',\n H: 'yyyy-MM-dd[T]HH:mm:ss',\n N: 'yyyy-MM-dd[T]HH:mm:ss',\n};\n\nexport const getTimeProc = (frequency, timeFormats = {}, locale) => {\n if (frequency === 'W' || frequency === 'B') {\n return datum => {\n const isoWeek = getISOWeek(datum);\n if (isoWeek !== 1) {\n return dateFns.format(datum, \"yyyy-'W'II\", { locale: getLocale(locale) });\n }\n const seventhDay = dateFns.endOfWeek(datum, { weekStartsOn: 1 });\n return dateFns.format(seventhDay, \"yyyy-'W'II\", { locale: getLocale(locale) });\n };\n }\n const format = R.pipe(\n R.mergeRight(defaultTimeFormats),\n R.ifElse(R.has(frequency), R.prop(frequency), R.prop('A')),\n )(timeFormats);\n return datum =>\n dateFns.format(dateWithoutTZ(new Date(datum)), format, { locale: getLocale(locale) });\n};\n\nconst getTimeFrequency = data => {\n const frequency = R.prop('frequency', data);\n if (frequency === 'W' || frequency === 'B') {\n const date = R.pathOr(['series', 0, 'datapoints', 'x']);\n return R.cond([\n [isMonday, R.always('monday')],\n [isTuesday, R.always('tueday')],\n [isWednesday, R.always('wednesday')],\n [isThursday, R.always('thursday')],\n [isFriday, R.always('friday')],\n [isSaturday, R.always('saturday')],\n [isSunday, R.always('sunday')],\n [R.T, R.always('monday')],\n ])(date);\n }\n return R.cond([\n [R.equals('A'), R.always('year')],\n [R.equals('S'), R.always('month')],\n [R.equals('Q'), R.always('month')],\n [R.equals('M'), R.always('month')],\n [R.equals('D'), R.always('day')],\n [R.equals('H'), R.always('hour')],\n [R.equals('N'), R.always('minute')],\n [R.T, R.always('year')],\n ])(frequency);\n};\n\nconst getTimeStep = R.cond([\n [R.equals('A'), R.always(1)],\n [R.equals('S'), R.always(6)],\n [R.equals('Q'), R.always(3)],\n [R.equals('M'), R.always(1)],\n [R.equals('W'), R.always(1)],\n [R.equals('B'), R.always(1)],\n [R.equals('D'), R.always(1)],\n [R.equals('H'), R.always(1)],\n [R.equals('N'), R.always(1)],\n [R.T, R.always(1)],\n]);\n\nexport const getAxisOptions = (data, type, options, timeFormats, locale) => {\n const axis = {\n linear: { pivot: { color: 'white' } },\n ordinal: { gap: 0.3, padding: 0.3 },\n thickness: 0,\n };\n\n const linearProc = d => {\n if (Math.abs(d) < 0.01 && d) {\n return numeral(d).format('0.[00]e+0');\n }\n return numeral(d).format('0,0.[00]');\n };\n\n return R.pipe(\n R.propOr({}, 'axis'),\n R.mergeDeepRight({ x: axis, y: axis }),\n R.cond([\n [\n R.always(R.equals(BAR, type)),\n R.pipe(\n R.mergeDeepRight({\n x: { format: { proc: R.identity }, tick: { thickness: 0, size: 0 } },\n y: {\n font: { baseline: 'ideographic' },\n format: { proc: linearProc },\n padding: 10,\n tick: { thickness: 0 },\n },\n }),\n R.over(R.lensPath(['y', 'linear', 'pivot', 'value']), R.when(R.isNil, R.always(0))),\n ),\n ],\n [\n R.always(R.equals(ROW, type)),\n R.pipe(\n R.mergeDeepRight({\n x: {\n format: { proc: linearProc },\n orient: 'top',\n padding: 10,\n tick: { thickness: 0 },\n },\n y: {\n format: { proc: R.identity },\n ordinal: { minDisplaySize: 300 },\n tick: { thickness: 0, size: 0 },\n },\n }),\n R.over(R.lensPath(['x', 'linear', 'pivot', 'value']), R.when(R.isNil, R.always(0))),\n ),\n ],\n [\n R.always(R.equals(SCATTER, type)),\n R.mergeDeepRight({\n x: {\n format: { proc: linearProc },\n tick: { thickness: 0, size: 0 },\n },\n y: {\n font: { baseline: 'ideographic' },\n format: { proc: linearProc },\n padding: 10,\n tick: { thickness: 0 },\n },\n }),\n ],\n [\n R.always(R.equals(TIMELINE, type)),\n R.pipe(\n R.mergeDeepRight({\n x: {\n format: {\n isTime: true,\n pattern: null,\n proc: getTimeProc(R.prop('frequency', data), timeFormats, locale),\n },\n tick: { size: -6, minorSize: -3, thickness: 2, minorThickness: 2, color: 'white' },\n },\n y: {\n font: { baseline: 'ideographic' },\n format: { proc: d => numeral(d).format('0,0.[00]') },\n padding: 10,\n tick: { thickness: 0 },\n },\n }),\n R.evolve({\n x: R.pipe(\n R.set(R.lensPath(['linear', 'frequency']), getTimeFrequency(data)),\n R.set(R.lensPath(['linear', 'step']), getTimeStep(R.prop('frequency', data))),\n R.over(\n R.lensPath(['tick', 'step']),\n R.pipe(\n R.when(R.isNil, R.always(1)),\n R.multiply(getTimeStep(R.prop('frequency', data))),\n ),\n ),\n ),\n }),\n ),\n ],\n [\n R.always(R.equals(H_SYMBOL, type)),\n R.mergeDeepRight({\n x: {\n format: { proc: linearProc },\n orient: 'top',\n padding: 10,\n tick: { thickness: 0 },\n },\n y: {\n format: { proc: R.identity },\n ordinal: { minDisplaySize: 300 },\n tick: { thickness: 0, size: 5 },\n },\n }),\n ],\n [\n R.always(R.equals(V_SYMBOL, type)),\n R.mergeDeepRight({\n x: { format: { proc: R.identity }, tick: { thickness: 0, size: 0 } },\n y: {\n font: { baseline: 'ideographic' },\n format: { proc: linearProc },\n padding: 10,\n tick: { thickness: 0 },\n },\n }),\n ],\n [\n R.always(R.equals(STACKED_BAR, type)),\n R.pipe(\n R.mergeDeepRight({\n x: { format: { proc: R.identity }, tick: { thickness: 0, size: 0 } },\n y: {\n font: { baseline: 'ideographic' },\n format: { proc: linearProc },\n padding: 10,\n tick: { thickness: 0 },\n },\n }),\n R.over(R.lensPath(['y', 'linear', 'pivot', 'value']), R.when(R.isNil, R.always(0))),\n ),\n ],\n [\n R.always(R.equals(STACKED_ROW, type)),\n R.pipe(\n R.mergeDeepRight({\n x: {\n format: { proc: linearProc },\n orient: 'top',\n padding: 10,\n tick: { thickness: 0 },\n },\n y: {\n format: { proc: R.identity },\n ordinal: { minDisplaySize: 300 },\n tick: { thickness: 0, size: 0 },\n },\n }),\n R.over(R.lensPath(['x', 'linear', 'pivot', 'value']), R.when(R.isNil, R.always(0))),\n ),\n ],\n [R.T, R.identity],\n ]),\n )(options);\n};\n","import * as R from 'ramda';\nimport {\n BAR,\n CHORO,\n H_SYMBOL,\n ROW,\n SCATTER,\n STACKED_BAR,\n STACKED_ROW,\n TIMELINE,\n V_SYMBOL,\n} from '../constants';\n\nexport const getBaseOptions = (type, options) =>\n R.pipe(\n R.propOr({}, 'base'),\n R.cond([\n [\n R.always(R.equals(BAR, type)),\n R.mergeDeepRight({\n minDisplayHeight: 100,\n minDisplayWidth: 300,\n padding: { top: 20 },\n innerPadding: { left: 20, right: 20, bottom: 10 },\n }),\n ],\n [\n R.always(R.equals(ROW, type)),\n R.mergeDeepRight({\n minDisplayHeight: 300,\n minDisplayWidth: 100,\n padding: { top: 10, left: 10, right: 20 },\n }),\n ],\n [\n R.always(R.equals(SCATTER, type)),\n R.mergeDeepRight({\n minDisplayHeight: 100,\n minDisplayWidth: 100,\n padding: { top: 40, right: 10 },\n }),\n ],\n [\n R.always(R.equals(TIMELINE, type)),\n R.mergeDeepRight({\n minDisplayHeight: 300,\n minDisplayWidth: 100,\n isAnnotated: false,\n padding: { top: 20 },\n innerPadding: { left: 40, right: 40 },\n }),\n ],\n [\n R.always(R.equals(H_SYMBOL, type)),\n R.mergeDeepRight({\n minDisplayHeight: 300,\n minDisplayWidth: 100,\n padding: { top: 10, left: 10, right: 20 },\n }),\n ],\n [\n R.always(R.equals(V_SYMBOL, type)),\n R.mergeDeepRight({\n minDisplayHeight: 100,\n minDisplayWidth: 300,\n padding: { top: 20 },\n innerPadding: { left: 20, right: 20, bottom: 10 },\n }),\n ],\n [\n R.always(R.equals(STACKED_BAR, type)),\n R.mergeDeepRight({\n minDisplayHeight: 100,\n minDisplayWidth: 300,\n padding: { top: 20 },\n innerPadding: { left: 20, right: 20, bottom: 10 },\n }),\n ],\n [\n R.always(R.equals(STACKED_ROW, type)),\n R.mergeDeepRight({ padding: { top: 10, left: 10, right: 20 } }),\n ],\n [R.T, R.identity],\n ]),\n )(options);\n","import * as R from 'ramda';\nimport {\n BAR,\n CHORO,\n H_SYMBOL,\n ROW,\n STACKED_BAR,\n STACKED_ROW,\n TIMELINE,\n V_SYMBOL,\n} from '../constants';\n\nexport const getGridOptions = (type, options) => {\n const grid = { baselines: [0], color: 'white' };\n const hideGrid = R.assoc('thickness', 0);\n\n return R.pipe(\n R.propOr({}, 'grid'),\n R.mergeDeepRight({ x: grid, y: grid }),\n R.cond([\n [R.always(R.equals(BAR, type)), R.mergeDeepRight({ x: { thickness: 0 } })],\n [R.always(R.equals(ROW, type)), R.mergeDeepRight({ y: { thickness: 0 } })],\n [R.always(R.equals(TIMELINE, type)), R.mergeDeepRight({ x: { thickness: 0 } })],\n [R.always(R.equals(H_SYMBOL, type)), R.mergeDeepRight({ y: { thickness: 0 } })],\n [R.always(R.equals(V_SYMBOL, type)), R.mergeDeepRight({ x: { thickness: 0 } })],\n [R.always(R.equals(STACKED_BAR, type)), R.mergeDeepRight({ x: { thickness: 0 } })],\n [R.always(R.equals(STACKED_ROW, type)), R.mergeDeepRight({ y: { thickness: 0 } })],\n [R.T, R.identity],\n ]),\n )(options);\n};\n","import * as R from 'ramda';\nimport numeral from 'numeral';\nimport { format } from 'date-fns';\nimport {\n BAR,\n CHORO,\n H_SYMBOL,\n ROW,\n SCATTER,\n STACKED_BAR,\n STACKED_ROW,\n TIMELINE,\n V_SYMBOL,\n} from '../constants';\nimport { getTimeProc } from './getAxisOptions';\n\nexport const getTooltipOptions = (data, type, options, fonts = {}, timeFormats = {}, locale) => {\n const primaryFonts = color => `\n font-size: ${R.pathOr(12, ['primary', 'fontSize'], fonts)}px;\n font-family: ${R.pathOr('inherit', ['primary', 'fontFamily'], fonts)};\n font-weight: ${R.pathOr('normal', ['primary', 'fontWeight'], fonts)};\n color: ${color};\n padding: 5px;\n border: 1px solid ${color};\n background: white;\n opacity: .8;\n `;\n\n const secondaryFonts = `\n font-family: ${R.pathOr('inherit', ['secondary', 'fontFamily'], fonts)};\n font-size: ${R.pathOr(12, ['secondary', 'fontSize'], fonts)}px;\n font-weight: ${R.pathOr('normal', ['secondary', 'fontWeight'], fonts)};\n `;\n\n const valueFormatter = d => numeral(d).format('0,0.[00]');\n\n const timeFormatter = R.pipe(\n R.prop('frequency'),\n freq => getTimeProc(freq, timeFormats, locale),\n R.when(\n R.anyPass([R.isNil, R.complement(R.is)(Function)]),\n R.always(date => format(date, 'MMM YY')),\n ),\n )(data);\n\n return R.pipe(\n R.pathOr({}, ['serie', 'tooltip']),\n R.cond([\n [\n R.always(R.equals(BAR, type)),\n R.mergeRight({\n layout: (serie, datum, color) => `\n <div style=\"${primaryFonts(color)}\">\n <div style=\"text-align: right;\">\n ${datum.x}\n </div>\n <div style=\"text-align: right; ${secondaryFonts}\">\n ${datum.formatedValue || valueFormatter(datum.y)}\n </div>\n </div>\n `,\n }),\n ],\n [\n R.always(R.equals(ROW, type)),\n R.mergeRight({\n layout: (serie, datum, color) => `\n <div style=\"${primaryFonts(color)}\">\n <div style=\"text-align: right;\">\n ${datum.y}\n </div>\n <div style=\"text-align: right; ${secondaryFonts}\">\n ${datum.formatedValue || valueFormatter(datum.x)}\n </div>\n <div>\n `,\n }),\n ],\n [\n R.always(R.equals(SCATTER, type)),\n R.mergeRight({\n layout: (serie, datum, color) => `\n <div style=\"${primaryFonts(color)}\">\n <div style=\"text-align: right;\">\n ${R.pipe(R.propOr({}, 'dimensionValues'), R.values, R.pluck('name'), R.join(' '))(datum)}\n </div>\n <div style=\"text-align: right;\">\n ${R.path(['dimensionValues', 'x', 'name'], serie)}\n <span style=\"${secondaryFonts}\">\n ${datum.xFormat || valueFormatter(datum.x)}\n </span>\n </div>\n <div style=\"text-align: right;\">\n ${R.path(['dimensionValues', 'y', 'name'], serie)}\n <span style=\"${secondaryFonts}\">\n ${datum.yFormat || valueFormatter(datum.y)}\n </span>\n </div>\n </div>\n `,\n }),\n ],\n [\n R.always(R.equals(TIMELINE, type)),\n R.mergeRight({\n layout: (serie, datum, color) => `\n <div style=\"${primaryFonts(color)}\">\n <div style=\"text-align: right;\">\n ${R.pipe(R.propOr({}, 'dimensionValues'), R.values, R.pluck('name'), R.join('<br />'))(datum)}\n </div>\n <div style=\"text-align: right;\">\n ${datum.timeLabel}\n </div>\n <div style=\"text-align: right; ${secondaryFonts}\">\n ${datum.formatedValue || valueFormatter(datum.y)}\n </div>\n </div>\n `,\n }),\n ],\n [\n R.always(R.equals(H_SYMBOL, type)),\n R.mergeRight({\n layout: (serie, datum, color) => `\n <div style=\"${primaryFonts(color)}\">\n <div style=\"text-align: right;\">\n ${datum.y}\n <br />\n ${datum.symbolValue}\n </div>\n <div style=\"text-align: right; ${secondaryFonts}\">\n ${datum.formatedValue || valueFormatter(datum.x)}\n </div>\n </div>\n `,\n }),\n ],\n [\n R.always(R.equals(V_SYMBOL, type)),\n R.mergeRight({\n layout: (serie, datum, color) => `\n <div style=\"${primaryFonts(color)}\">\n <div style=\"text-align: right;\">\n ${datum.x}\n <br />\n ${datum.symbolValue}\n </div>\n <div style=\"text-align: right; ${secondaryFonts}\">\n ${datum.formatedValue || valueFormatter(datum.y)}\n </div>\n </div>\n `,\n }),\n ],\n [\n R.always(R.equals(STACKED_BAR, type)),\n R.mergeRight({\n layout: (serie, datum, color) => `\n <div style=\"${primaryFonts(color)}\">\n <div style=\"text-align: right;\">\n ${datum.x}\n </div>\n <div style=\"text-align: right;\">\n ${datum.layerLabel}\n </div>\n <div style=\"text-align: right; font-size: ${R.pathOr(12, ['secondary', 'fontSize'], fonts)}px;\">\n Value:\n <span style=\"${secondaryFonts}\">\n ${R.is(Function, datum.formater) ? datum.formater(datum.height) : valueFormatter(datum.height)}\n </span>\n </div>\n <div style=\"text-align: right; font-size: ${R.pathOr(12, ['secondary', 'fontSize'], fonts)}px;\">\n Cumulated:\n <span style=\"${secondaryFonts}\">\n ${R.is(Function, datum.formater) ? datum.formater(datum.y) : valueFormatter(datum.y)}\n </span>\n </div>\n </div>\n `,\n }),\n ],\n [\n R.always(R.equals(STACKED_ROW, type)),\n R.mergeRight({\n layout: (serie, datum, color) => `\n <div style=\"${primaryFonts(color)}\">\n <div style=\"text-align: right;\">\n ${datum.y}\n </div>\n <div style=\"text-align: right;\">\n ${datum.layerLabel}\n </div>\n <div style=\"text-align: right; font-size: ${R.pathOr(12, ['secondary', 'fontSize'], fonts)}px;\">\n Value:\n <span style=\"${secondaryFonts}\">\n ${R.is(Function, datum.formater) ? datum.formater(datum.width) : valueFormatter(datum.width)}\n </span>\n </div>\n <div style=\"text-align: right; font-size: ${R.pathOr(12, ['secondary', 'fontSize'], fonts)}px;\">\n Cumulated:\n <span style=\"${secondaryFonts}\">\n ${R.is(Function, datum.formater) ? datum.formater(datum.x) : valueFormatter(datum.x)}\n </span>\n </div>\n </div>\n `,\n }),\n ],\n [\n R.always(R.equals(CHORO, type)),\n R.mergeRight({\n layout: (serie, datum, color) => `\n <div style=\"${primaryFonts(color)}\">\n <div style=\"text-align: right;\">\n ${R.pathOr('', ['properties', 'label'], datum)}\n </div>\n <div style=\"text-align: right;\">\n ${R.pathOr('', ['properties', 'category'], datum)}\n </div>\n <div style=\"text-align: right; ${secondaryFonts}\">\n ${R.pipe(R.pathOr(null, ['properties', 'value']), valueFormatter)(datum)}\n </div>\n </div>\n `,\n }),\n ],\n [R.T, R.identity],\n ]),\n )(options);\n};\n","import * as R from 'ramda';\nimport numeral from 'numeral';\nimport { getAxisOptions } from './getAxisOptions';\nimport { getBaseOptions } from './getBaseOptions';\nimport { getGridOptions } from './getGridOptions';\nimport { getTooltipOptions } from './getTooltipOptions';\nimport { SCATTER, STACKED_BAR, STACKED_ROW, TIMELINE } from '../constants';\n\nconst FOCUS_COLORS = {\n highlightColors: [\n '#E73741',\n '#0F8FD9',\n '#993484',\n '#DF521E',\n '#719E24',\n '#E1B400',\n '#32A674',\n '#0B68AF',\n ],\n baselineColors: ['#0B1E2D'],\n};\n\nconst symbolMarkers = () => {\n const paths = {\n circle: size => {\n const r = Math.sqrt(size) / 2;\n return `M0,${r} A${r},${r} 0 1,1 0,${-r} A${r},${r} 0 1,1 0,${r} Z`;\n },\n square: size => {\n const r = Math.sqrt(size) / 2;\n return `M${-r},${-r} L${r},${-r} ${r},${r} ${-r},${r} Z`;\n },\n cross: size => {\n const r = Math.sqrt(size) / 2;\n return `M${-r},${r} L${r},${-r} M${r},${r} L${-r},${-r}`;\n },\n triangle: size => {\n const rx = Math.sqrt(size) / Math.sqrt(3);\n const ry = Math.sqrt(size) / 2;\n return `M0,${-ry} L${rx},${ry} ${-rx},${ry} Z`;\n },\n };\n return [\n { style: { stroke: '#39617D', fill: '#39617D' }, path: paths.circle },\n { style: { stroke: '#39617D', fill: '#DBEBF2' }, rotate: 45, path: paths.square },\n { style: { stroke: '#39617D', fill: '#39617D', strokeWidth: 2 }, path: paths.cross },\n { style: { stroke: '#39617D', fill: '#DBEBF2' }, path: paths.square },\n { style: { stroke: '#39617D', fill: '#39617D' }, path: paths.triangle },\n ];\n};\n\nconst getAnnotationOptions = (type, options) =>\n R.pipe(\n R.pathOr({}, ['serie', 'annotation']),\n R.mergeRight({\n format: {\n datapoint: { proc: d => numeral(d).format('0,0.[00]') },\n },\n }),\n R.cond([\n [R.always(R.equals(SCATTER, type)), R.mergeRight({ display: 'never' })],\n [\n R.always(R.equals(TIMELINE, type)),\n R.mergeDeepRight({ format: { datapoint: { pattern: '.2f' } } }),\n ],\n [R.T, R.identity],\n ]),\n )(options);\n\nexport const getChartOptions = (data, type, options, tooltipFonts, timeFormats, locale) => {\n const defaultSerieColors = R.ifElse(\n R.anyPass([R.equals(STACKED_BAR), R.equals(STACKED_ROW)]),\n R.always(['#607D8B']),\n R.always(['#8EA4B1']),\n )(type);\n\n return {\n axis: getAxisOptions(data, type, options, timeFormats, locale),\n background: R.pipe(R.propOr({}, 'background'), R.mergeRight({ color: '#DBEBF2' }))(options),\n base: getBaseOptions(type, options),\n grid: getGridOptions(type, options),\n map: R.pipe(R.propOr({}, 'map'), R.mergeRight({ intBoundariesColor: '#8EA4B1' }))(options),\n serie: {\n ...R.propOr({}, 'serie', options),\n annotation: getAnnotationOptions(type, options),\n choropleth: R.pipe(\n R.pathOr({}, ['serie', 'choropleth']),\n R.mergeRight({\n divisions: 4,\n domain: 'YlorRd',\n invert: false,\n labelDisplay: 'none',\n }),\n )(options),\n stacked: R.pipe(\n R.pathOr({}, ['serie', 'stacked']),\n R.mergeRight({ strokeThickness: 1, strokeColor: '#F8FAFC' }),\n )(options),\n symbol: R.pipe(\n R.pathOr({}, ['serie', 'symbol']),\n R.mergeRight({\n markers: symbolMarkers(),\n markerDefaultSize: 60,\n markerDefaultStrokeWidth: 1,\n gapMinMaxColor: '#607D8B',\n gapMinMaxThickness: 1,\n gapAxisMinColor: 'white',\n gapAxisMinThickness: 1,\n }),\n )(options),\n colors: R.pathOr(defaultSerieColors, ['serie', 'colors'], options),\n overColors: R.pathOr(['#39617D'], ['serie', 'overColors'], options),\n highlightColors: R.pathOr(\n FOCUS_COLORS.highlightColors,\n ['serie', 'highlightColors'],\n options,\n ),\n baselineColors: R.pathOr(FOCUS_COLORS.baselineColors, ['serie', 'baselineColors'], options),\n tooltip: getTooltipOptions(data, type, options, tooltipFonts, timeFormats, locale),\n },\n };\n};\n","import sampleFocus from './sample-focus';\nimport scatterFocus from './scatter-focus';\nimport timelineFocus from './timeline-focus';\n\nexport default ({ type, series, focusOptions }) => {\n switch (type) {\n case 'ScatterChart':\n return scatterFocus(series, focusOptions);\n case 'TimelineChart':\n return timelineFocus(series, focusOptions);\n case 'BarChart':\n case 'RowChart':\n case 'StackedBarChart':\n case 'StackedRowChart':\n case 'HorizontalSymbolChart':\n case 'VerticalSymbolChart':\n return sampleFocus(series, focusOptions);\n default:\n return series;\n }\n};\n","import * as R from 'ramda';\n\nexport default function focus(series, focusSelections) {\n const { highlight = [], baseline = [] } = focusSelections || {};\n if (R.isEmpty(highlight) && R.isEmpty(baseline)) {\n return series;\n }\n\n return R.over(\n R.lensPath([0, 'datapoints']),\n R.map(dp => {\n const isFocusMatch = f => {\n const focusedDim = R.path(['options', 'dimensionId'], f);\n const dpValId = R.path(['dimensionValues', focusedDim, 'id'], dp);\n return dpValId === R.path(['options', 'dimensionValueId'], f);\n };\n return {\n ...dp,\n highlightIndex: R.findIndex(isFocusMatch, highlight),\n baselineIndex: R.head(baseline) && isFocusMatch(R.head(baseline)) ? 0 : -1,\n };\n }),\n series,\n );\n}\n","import * as R from 'ramda';\n\nexport default function focus(series, focusSelections) {\n const { highlight = [], baseline = [] } = focusSelections || {};\n\n return R.map(\n serie => ({\n ...serie,\n highlightIndex: R.findIndex(R.propEq(serie.key, 'value'), highlight),\n baselineIndex: R.path([0, 'value'], baseline) === serie.key ? 0 : -1,\n }),\n series,\n );\n}\n","import * as R from 'ramda';\n\nexport default function focus(series, focusSelections) {\n const { highlight = [], baseline = [] } = focusSelections || {};\n if (R.isEmpty(highlight) && R.isEmpty(baseline)) {\n return series;\n }\n\n return R.over(\n R.lensPath([0, 'datapoints']),\n R.map(dp => ({\n ...dp,\n highlightIndex: R.findIndex(R.propEq(dp.key, 'value'), highlight),\n baselineIndex: R.path([0, 'value'], baseline) === dp.key ? 0 : -1,\n })),\n series || [],\n );\n}\n","import * as R from 'ramda';\nimport { CHORO, OBS_TYPE_NUMBER, OBS_TYPE_NUMERICAL_STRING, TIMELINE, TYPES } from '../constants';\nimport { getRefAreaDimension, getTimePeriodDimension } from '@sis-cc/dotstatsuite-sdmxjs';\nimport { getObservationsType } from './getObservationsType';\n\nexport const getAvailableChartTypes = data => {\n const observationsType = getObservationsType(data);\n if (!R.includes(observationsType, [OBS_TYPE_NUMBER, OBS_TYPE_NUMERICAL_STRING])) {\n return {};\n }\n const dimensions = R.pathOr([], ['structure', 'dimensions', 'observation'], data);\n const timeDimension = getTimePeriodDimension({ dimensions });\n const refAreaDimension = getRefAreaDimension({ dimensions });\n const hasNoTime = R.anyPass([R.isNil, R.pipe(R.propOr([], 'values'), R.length, R.gte(1))])(\n timeDimension,\n );\n return R.pipe(\n R.when(R.always(hasNoTime), R.omit([TIMELINE])),\n R.when(R.always(R.isNil(refAreaDimension)), R.omit([CHORO])),\n )(TYPES);\n};\n","import * as R from 'ramda';\nimport { OBS_TYPE_NUMBER, OBS_TYPE_NUMERICAL_STRING, OBS_TYPE_STRING } from '../constants';\n\nexport const getObservationsType = data => {\n if (R.isNil(data)) {\n return undefined;\n }\n const firstObs = R.pipe(\n R.pathOr({}, ['dataSets', 0, 'observations']),\n R.values,\n R.find(obs => R.not(R.either(R.isNil, R.isEmpty)(R.head(obs)))),\n )(data);\n if (R.isNil(firstObs)) {\n return undefined;\n }\n const firstObsValue = R.head(firstObs);\n if (R.is(Number, firstObsValue)) {\n return OBS_TYPE_NUMBER;\n }\n return R.ifElse(\n R.equals(NaN),\n R.always(OBS_TYPE_STRING),\n R.always(OBS_TYPE_NUMERICAL_STRING),\n )(Number(firstObsValue));\n};\n","import getFocusedSeries from './focus';\nimport getSeries from './series';\n\nexport const getChartSeries = ({ type, data, options, singularity, focusOptions }) => {\n const chartSeries = getSeries({ type, data, options, singularity });\n const focusedSeries = getFocusedSeries({ type, series: chartSeries, focusOptions });\n return focusedSeries;\n};\n"],"names":["parseDisplay","display","R","isNil","includes","dimensionValueDisplay","accessors","dimensionValue","id","propOr","name","isEmpty","dimensionValueDisplayAt","dimension","index","pathOr","Number","categoryDisplay","splitObservationKey","dimensions","dimensionsWithValuesIndexedById","rejectedId","pipe","addIndex","reduce","acc","dimensionValueIndex","dimensionIndex","nth","has","append","join","BAR","ROW","SCATTER","TIMELINE","H_SYMBOL","V_SYMBOL","STACKED_BAR","STACKED_ROW","CHORO","PERCENT","VALUES","TYPES","OBS_TYPE_NUMBER","OBS_TYPE_NUMERICAL_STRING","DEFAULT_PREFSCALE_ATTR_IDS","DEFAULT_DECIMALS_ATTR_IDS","getFormaterAttribute","ids","attributes","find","attr","getObservationsFormaterAttributes","decimals","prefscale","prop","is","Array","parseAttributeFormaterIds","getObservationFormaterValue","observation","attribute","attributeIndex","attributeValueIndex","makeObservationFormater","formaterValues","_decimals","isNaN","format","concat","repeat","value","numeral","multiply","Math","pow","negate","getObservationFormater","formaterAttributes","tail","getObservationFormaterValues","getFormatedObservation","formater","head","getDatapoints","keys","observations","sortDirection","formaterAttrs","categoryKey","valueKey","map","observationKey","observationValue","splitKey","split","category","categoryIds","formatedValue","key","sortBy","dp","series","datapoints","chartDimension","chartDimensionId","chartDimensionIndex","findIndex","propEq","k","o","oDimensionValuesIndexes","oDimensionValueIndex","_chartDimension","oDimensionValue","dimensionValueIsValid","oPartialKey","reject","_","i","dimensionValues","dimensionValuesIndexes","dimensionsWithValuesIds","dvi","dimensionId","assoc","getDimensionValues","dimensionValueKey","getDimensionValueKey","filter","x","y","values","scatterSeries","xValue","yValue","set","lensPath","timelineSeries","timePeriodDimension","getTimePeriodDimension","timePeriodDimensionIndex","__index","timePeriodDimensionHasManyPeriods","rawSeries","timePeriodDimensionValueIndex","timePeriod","path","datapoint","start","timeLabel","serieIndex","serie","over","symbolDimension","symbolDimensionId","symbolDimIndex","d","obsKey","obs","obsDimsValsIndexes","symbolValIndex","symbolValId","dpIndex","formatedValues","length","lensIndex","symbolValues","singularity","stackKey","serieDimensionId","serieDimension","layerSeries","_flatDatapoints","mapObjIndexed","splittedKey","layerKey","layerDimensions","memo","_dimensionValue","label","push","flatDatapoints","layeredDatapoints","groupBy","layerFullSeries","layerLimit","Infinity","take","layeredDatapointsKeyedByCategory","indexBy","serieValue","serieValueId","formaters","when","equals","layer","pluck","serieSortedByDataOrder","lensProp","res","of","stackedSeries","mode","_serie","total","v","abs","sum","percentSerie","isTimePeriodDimension","serieSortedByTotal","choroSeries","topoMap","refAreaDimension","getRefAreaDimension","observationsByAreas","splitedKey","areaValueIndex","areaValue","areaId","vals","parseByAreas","topology","areaSelection","topoAreas","topoAreasWithData","areaGeometry","areaObservation","properties","geometries","objects","areas","type","arcs","bbox","transform","getSeries","data","options","formatterIds","indexedDimensions","dim","header","chartType","sampleSeries","symbolSeries","isNumber","input","not","isPositiveNumber","isNaturalInt","test","String","isChart","hasFocus","omit","getDimensionsWithValues","toState","artefact","getPropertyDimension","property","state","getGroupedDimensions","isRefAreaDimension","optionParser","option","Object","undefined","artefactToOption","chartDimensionToOption","chartDimensionOptions","typeValidator","sampleFocusTypes","focusComparator","op1","op2","focus","_display","dimOptions","val","dimensionValueId","focusOptions","props","otherFocus","differenceWith","onChangeFocusSelection","_value","toKey","filterFocus","keyedOptions","entry","entryKey","focusStateFromNewProps","highlightState","baselineState","baseline","highlight","getScatterDimension","toScatterState","xVal","yVal","scatterDimension","scatterX","scatterY","toScatterSingularity","xId","yId","isScatter","scatterValueOptions","onChangeScatterDim","newScatterState","scatterStateValueToOption","onChangeScatterVal","valKey","otherValKey","matching","otherOptions","partition","stateOtherValue","getSymbolDimension","isSymbol","toSymbolState","toSymbolSingularity","onChangeSymbolDim","getStackedDimension","stackedModes","isStacked","toStackedState","stackedDimension","stackedMode","toStackedSingularity","limit","onChangeStackedDimension","stackedModeOptions","isStackedDimActive","onChangeStackedMode","hasXLinear","hasYLinear","hasYPivot","xInitialState","computedMaxX","computedMinX","computedStepX","computedPivotX","maxX","minX","pivotX","stepX","yInitialState","computedMaxY","computedMinY","computedStepY","computedPivotY","maxY","minY","pivotY","stepY","toProperties","onChange","isActive","always","getSourceLabel","isCustomInvalid","dataflow","getDataflowName","sourceLabel","stringifySubtitle","toSingularity","toFloat","float","parseFloat","toOption","stateValue","optionValue","getFreqStepOption","inputState","freqStep","getIsHidden","annotations","complement","getFullName","identity","isValidDate","period","and","dateFns","isDate","date","getTime","NaN","Date","dateWithoutTZ","addMinutes","getTimezoneOffset","getLocale","cond","fr","de","es","ar","it","nl","th","T","en","REJECTED_VALUE_IDS","getNotDisplayedValues","annot","title","parsed","_acc","_val","replace","getNotDisplayedIds","converge","hiddenValues","hiddenCombinations","getNotDisplayedCombinations","getHCodelistsRefs","annotation","references","text","refs","acc2","ref","match","codelistId","agencyId","code","version","hierarchy","mergeRight","getMetadataCoordinates","sdmxJson","metadataAvailKeys","indexes","a","vIndex","dimIndex","duplicateObs","dims","obsValues","duplicated","groupedObs","indexedDimValIds","enhancedObs","matchingObs","_indexes","dimValuesIndexes","unnest","uniq","list","hierarchiseDimensionWithNativeHierarchy","indexed","grouped","parent","getChildren","parentsIndexes","parentId","childs","child","refined","children","prepend","parseTexts","texts","splitted","parseCombinationDefinition","locale","useWith","titles","codes","concepts","hasPath","getCombinationDefinitions","getFormat","freqDisplay","getEndDate","mult","duration","adder","addSeconds","addHours","addDays","addMonths","addYears","getAdder","endDate","subSeconds","getStartDate","parseISO","dateWithTZ","refineTimePeriod","monthlyFormat","end","toISOString","range","startDate","isValid","timeIndicator","_duration","startMinute","startOfMinute","startHour","startOfHour","startDay","startOfDay","isEqual","getDate","getMonth","computeDisplayFreq","opts","isSameDay","isSameYear","dayFormat","yearFormatMatch","monthFormatMatch","yearFormat","monthFormat","formattedYear","formattedMonths","computeName","isNonCoded","both","getName","isTimeDimension","reportYearStart","freq","_format","reportedStart","year","getYear","reportStartDate","month","day","nextYear","semester","quarter","isFirstDayOfMonth","week","getReportedTimePeriodLabel","frequency","timeFormat","getValuesEnhanced","hiddenIds","selection","selectionSet","Set","fallbackId","valueId","getId","valueAnnotations","flip","isHidden","notes","getTimePeriodAttributes","__indexPosition","getCodeOrder","isSelected","empty","flags","sortWith","timeDimensionSorts","defaultSorts","getDateForSort","ascend","descend","reported","getReportedTimePeriod","reportTimeNote","getReportedTimePeriodNote","isRtl","getAttributes","restOptions","datasetAttributes","obsAttributes","attrAnnotations","refineDimensions","dataquery","selectionIds","isEmptySelection","dimAnnotations","size","isAllDimHidden","valuesIds","difference","getIsAllDimHidden","rejected","role","roles","parseAttributes","customAttributes","displayableValuesCount","relationship","seriesDimensions","hasInvalidValues","anyPass","isConceptInvalid","filterValidConcepts","parseCombinations","combinations","parsedAttributes","indexedAttributes","validConceptIds","comb","refinedConcepts","intersection","rejectInvalidConceptIds","displayable_values_count","seriesConcepts","concept","displayableValues","isDisplayable","refineAttributes","seriesCombinations","indexedRelationships","combined","isValidNumber","parseValidNumber","formatValue","formatAttributesIndexes","Boolean","monthMatch","monthDayMatch","dayMatch","valueIndex","getFormatAttributesValues","formatScale","formatDecimals","ifElse","num","displayNum","decimalFormat","times","parseAttributesValues","attrValuesIndexes","attrIndex","coordinates","serieKey","pick","isObs","enhanceObservations","getFormatAttributesIndexes","formattedValue","getAttributesSeries","forEachObjIndexed","dissocPath","assocPath","valueInRes","getFlagsAndNotes","attributesValues","flagsIds","notesIds","getManyValuesDimensions","attributesSeries","combConceptsIds","enhancedValues","attrSeries","hasAdvancedAttributes","getOneValueDimensions","indexedRelevantAttributes","attrValues","getDataflowAttributes","combinationsConceptsIds","getHeaderTitle","getHeaderSubtitle","microdataDimension","combinationsConepts","DEFAULT_REJECTED_SUBTITLE_IDS","getSeriesCombinations","oneValuesDimensions","indexedValues","fixedDimValues","getRefinedMissinParentsLabels","par","singleValueDisplay","missingParents","_combinedValuesDisplay","isDisplayed","isRejected","labels","totalValue","firstValue","combinedValuesDisplay","_ids","getHeaderCombinations","getHeaderCoordinates","oneValueDimensions","getConceptsSet","indexedCombinations","_upper","upper","forEach","c","add","getLayout","_layoutIds","isTimeInverted","layoutIds","sections","rows","applyInversionOnTimeDim","headerConceptsSet","sectionsConceptsSet","getLayoutLevel","_upperIds","_excludedIds","parsedCombination","upperIds","excludedIds","parseCombination","getLayoutPivots","layoutEntry","valIndexGetter","ind","isInverted","last","comparator","firstSerie","secondSerie","firstIndexes","secondIndexes","firstSubIndexes","secondSubIndexes","_size","j","uniqIndexes","getSortedLayoutIndexes","layout","rejectedDims","dimIndexes","headerPivots","sectionsPivots","rejectedPivots","sectionLength","headerIndexes","sectionsIndexes","rejectedIndexes","evolve","sort","sectionIndexes","rowIndexes","splitAt","sectionKey","previousSecKey","_ind","getPivotKey","getCuratedCells","shape","pivots","getPivots","pivot","orderedDimIndexes","indexWithPivots","filterSeries","getHasStillData","removedMissingIndexes","hasStillData","serieParentsSets","p","mIs","filtered","missingIndexes","removed","filteredRemoved","refineSections","extractedKeys","curatedObs","section","getHasRowStillData","row","rowKey","refineHeader","headers","headerKey","pickBy","getSerieLinesCount","flatten","truncateSectionRows","n","sectionsData","truncated","_n","lastSection","rowsLength","truncatedRowsCount","takeLast","r","dropLast","truncateHeader","headerData","lastHeader","columnsCount","extractedKey","getShape","isVertical","refineLayoutSize","layoutIndexes","all","headerDimCount","headerValuesCount","headerCellsCount","rowCellsCount","rowsCount","excess","columnCellsCount","toTruncate","toRefine","segregateLayout","cutLength","divide","ceil","maxCutLength","truncateLayout","dimsLength","_layout","refineLayout","result","getRefinedLayout","getLayoutCoordinatesValidator","layoutCoordinates","topCoordinates","notInTop","getValueData","parents","addCoordinatesToKey","simpleValueDataSetter","valueData","datas","combinedValueDataSetter","addValueToSerieData","dataSetter","serieData","addSimpleValueToSerieData","addCombinedValueToSerieData","getCoordinates","definition","_index","valInd","validator","attrs","getSerieFlagsAndSideProps","metadataCoordinates","layoutAttrValues","hasMetadata","any","getHasAdvancedAttributes","sideProps","getSerieDimensionsData","missingParentsGetter","onGoingSerie","combValuesIndexes","combParentsIndexes","combMissingParentsIndexes","combDimValues","combSerie","_parentsIndexes","missingParentsIndexes","next","conceptId","combineConcepts","getSerieDataWithMissingLines","lines","serieCoordinates","coordinatesValidator","missingParentData","dissoc","topCoordinatesValidator","getLayoutData","rejectedDimensions","rest","sectionSerie","rowsSeries","sectionData","getSerieDataWithoutMissingLines","getCellsAttributesIds","indexedHeaderIds","indexedSectionsIds","indexedRowsIds","idsInHeader","idsNotInSections","idsNotInRows","getCellsMetadataCoordinates","oneValueDimsIds","columnIds","rowsIds","getIndexedCombinationsByDisplay","combsInLayout","combsInCells","cells","getCells","cellsAttributesId","attributesInLayoutCombination","attributesInCellsCombination","_customAttributes","isAttrCell","relevantAttributes","cellAttributeIds","attrInSerie","getCellRelevantAttributes","flagsAndNotes","combinedSeries","getCellCombinedSeries","advancedAttributes","cellCoordinates","mergedCoord","mergeLeft","hasCellMetadata","intValue","cell","getObservations","getHierId","applyHierarchicalCodesToDim","hCodes","confirmedHierarchisedChilds","unconfirmedPaths","parseHCodes","parentsDef","parentsInDim","hC","codeID","hierarchicalCodes","hasInDim","isUnconfirmed","addParentId","paths","_unconfirmedPaths","refinedUnconfirmedPaths","flattenDescendants","unconfirmed","refineCodes","_flatDescendants","flatDescendants","valids","prev","rV","missingValues","hierarchicalIndexes","hierId","getReportingYearStart","dataSet","reportYearStartAttr","declineObservationsOverAttributes","attrsIds","obsKeys","attrId","declinedKey","declined","OBS_ATTRIBUTES","registerParsedIndexes","isSameSerie","register","mergeWith","b","parseSerieIndexesHierarchies","serieIndexes","previousSerie","replicate","_valueIndex","previous","previousIndex","previousParentsIndexes","previousMissingIndexes","presentParentsIndexes","previousParentsSet","lastParentIndexInPrevious","findLastIndex","rawPresentParentsIndexes","parseParentsIndexesWithPrevious","parseSeriesIndexesHierarchies","seriesIndexes","replicateMissing","parseLayoutIndexesHierarchies","transpose","_sections","_sectionsRows","sectionsRows","getLayoutRelationships","getLayoutLevelRelationship","getCombinationLevelCompatibility","layoutRelationships","combination","idsInHeaderSet","idsInSectionsSet","idsInRowsSet","idsInSections","idsInRows","injectCombinationsInLayout","defaultLayoutIds","notInLayoutCombs","idsInLayout","getCombinationsNotInLayout","indexedCombsRelationships","indexCombsRelationships","defaultLayoutRelationships","levelCompatibility","conceptsSet","inject","extractConcepts","layoutDimsIds","dimId","indexedRels","getRelationship","related","rels","defaults","dataflowAnnotationsIndexes","dataflowAnnotations","flagsAttrAnnotation","footnotesAttrAnnotation","customFlags","customNotes","position","sdmxIndex","msdJson","attributesDefinitions","indexedConcepts","hierarchicalId","collection","metadataAttributes","content","currentLayoutIds","getLayoutDimsIds","layoutCombinations","layoutConcepts","getLayoutCombinations","isBlank","combinationsConcepts","filteredLayoutIds","level","oppositeIds","filterLayoutIds","layoutWithCombs","layoutRelationshipsSets","layoutConceptsSets","defaultLayoutConceptsSets","nextLayout","remaining","remainingDims","_remaining","dimInRows","toTakeIn","extracted","remains","hasNoHeader","firstRemaining","injectRemainingDimensionsInLayout","dupObs","_dims","enhancedLayoutIndexes","refinedLayoutIndexes","layoutData","cellsAttributesIds","cellsMetadataCoordinates","hierarchyId","hCodelist","hierarchies","metadataJson","metaAttrLength","notDisplayedIds","metadataSeries","metaIndexes","evolvedKey","vInd","dInd","originalVal","isPresentational","handlerProps","groupedAttrs","indexedAttrs","makeTree","previousValue","parentsIds","_previousParentsIds","previousParentsIds","presentIds","_missingIds","splitWhen","__previousParentsIds","missingIds","takeLastWhile","_previousParents","previousParents","takeWhile","defaultCombinations","refinedDimensions","_attributes","names","parsedCombinations","refinedAttributes","enhancedObservations","manyValuesDimensions","headerCoordinates","hierarchisedDimensions","duplicatedObservations","dataflowAttributes","subtitle","hier","intact","broken","refinedKey","intactIds","refinedBroken","structureIndex","structure","isScatterLayoutCompatible","isSymbolLayoutCompatible","serieIds","isStackedLayoutCompatible","lt","defaultTimeFormats","A","S","Q","M","W","B","D","H","N","getTimeProc","timeFormats","datum","getISOWeek","seventhDay","endOfWeek","weekStartsOn","getTimeFrequency","isMonday","isTuesday","isWednesday","isThursday","isFriday","isSaturday","isSunday","getTimeStep","getAxisOptions","axis","linear","color","ordinal","gap","padding","thickness","linearProc","mergeDeepRight","proc","tick","font","orient","minDisplaySize","isTime","pattern","minorSize","minorThickness","getBaseOptions","minDisplayHeight","minDisplayWidth","top","innerPadding","left","right","bottom","isAnnotated","getGridOptions","grid","baselines","getTooltipOptions","fonts","primaryFonts","secondaryFonts","valueFormatter","Function","xFormat","yFormat","symbolValue","layerLabel","height","width","FOCUS_COLORS","symbolMarkers","circle","sqrt","square","cross","triangle","rx","ry","style","stroke","fill","rotate","strokeWidth","getAnnotationOptions","getFocusedSeries","focusSelections","isFocusMatch","f","focusedDim","highlightIndex","baselineIndex","scatterFocus","timelineFocus","sampleFocus","observationsType","firstObs","either","firstObsValue","getObservationsType","timeDimension","hasNoTime","gte","scale","tooltipFonts","defaultSerieColors","background","base","intBoundariesColor","choropleth","divisions","domain","invert","labelDisplay","stacked","strokeThickness","strokeColor","symbol","markers","markerDefaultSize","markerDefaultStrokeWidth","gapMinMaxColor","gapMinMaxThickness","gapAxisMinColor","gapAxisMinThickness","colors","overColors","highlightColors","baselineColors","tooltip","chartSeries","withCopyright","withLogo","formaterPeriod","sdmxData","sharedData","rawDefaultCombinationsDefinition","defaultCombinationsDefinition","customCombinationsDefinitions","combinationsDefinitions","indexedManyValuesDimensions","remainings","hasFoundIrrelevant","isTableLayoutCompatible","isChartLayoutCompatible","optionsSet","parseSelection","focusState","sampleFocusStateFromNewProps","scatterState","undefinedState","stateScatterX","_scatterX","_scatterY","stateScatterY","scatterStateFromNewProps","symbolState","area","other","time","symbolStateFromNewProps","stackedState","_mode","stackedStateFromNewProps","xLinearState","YLinearState","linearStateFromNewProps","fixedWidth","fixedHeight","responsiveWidth","responsiveHeight","axeX","axeY","linearX","linearY","tickX","step","max","min","toLinearProperties","placeholder","floor","isDefault","onReset","source","logo","checked","copyright"],"mappings":"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"}