@valtimo/dashboard 11.3.2 → 12.1.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 (247) hide show
  1. package/esm2022/lib/components/dashboard/dashboard.component.mjs +7 -7
  2. package/esm2022/lib/components/widget-dashboard/widget-dashboard.component.mjs +11 -11
  3. package/esm2022/lib/components/widget-dashboard-content/widget-dashboard-content.component.mjs +61 -19
  4. package/esm2022/lib/constants/data-features.constants.mjs +3 -2
  5. package/esm2022/lib/constants/index.mjs +2 -2
  6. package/esm2022/lib/constants/injection-tokens.mjs +2 -2
  7. package/esm2022/lib/constants/layout.constants.mjs +2 -2
  8. package/esm2022/lib/dashboard-routing.module.mjs +6 -6
  9. package/esm2022/lib/dashboard.module.mjs +6 -6
  10. package/esm2022/lib/data-sources/case-count/case-count.module.mjs +6 -6
  11. package/esm2022/lib/data-sources/case-count/case-count.specification.mjs +5 -5
  12. package/esm2022/lib/data-sources/case-count/components/case-count-configuration/case-count-configuration.component.mjs +8 -8
  13. package/esm2022/lib/data-sources/case-count/components/case-count-configuration/index.mjs +2 -2
  14. package/esm2022/lib/data-sources/case-count/components/index.mjs +2 -2
  15. package/esm2022/lib/data-sources/case-count/index.mjs +2 -2
  16. package/esm2022/lib/data-sources/case-count/models/case-count.model.mjs +3 -12
  17. package/esm2022/lib/data-sources/case-count/models/index.mjs +2 -2
  18. package/esm2022/lib/data-sources/case-counts/case-counts.module.mjs +76 -0
  19. package/esm2022/lib/data-sources/case-counts/case-counts.specification.mjs +77 -0
  20. package/esm2022/lib/data-sources/case-counts/components/case-counts-configuration/case-counts-configuration.component.mjs +202 -0
  21. package/esm2022/lib/data-sources/case-counts/components/case-counts-configuration/index.mjs +17 -0
  22. package/esm2022/lib/data-sources/case-counts/components/index.mjs +17 -0
  23. package/esm2022/lib/data-sources/case-counts/index.mjs +20 -0
  24. package/esm2022/lib/data-sources/case-counts/models/case-counts.model.mjs +17 -0
  25. package/esm2022/lib/data-sources/case-counts/models/index.mjs +17 -0
  26. package/esm2022/lib/data-sources/case-group-by/case-group-by.module.mjs +61 -0
  27. package/esm2022/lib/data-sources/case-group-by/case-group-by.specification.mjs +89 -0
  28. package/esm2022/lib/data-sources/case-group-by/components/case-group-by-configuration/case-group-by-configuration.component.mjs +206 -0
  29. package/esm2022/lib/data-sources/case-group-by/components/case-group-by-configuration/index.mjs +17 -0
  30. package/esm2022/lib/{display-types/bar-chart → data-sources/case-group-by/components}/index.mjs +3 -6
  31. package/esm2022/lib/data-sources/case-group-by/index.mjs +20 -0
  32. package/esm2022/lib/data-sources/case-group-by/models/case-group-by.model.mjs +17 -0
  33. package/esm2022/lib/data-sources/case-group-by/models/index.mjs +17 -0
  34. package/esm2022/lib/data-sources/index.mjs +4 -3
  35. package/esm2022/lib/display-types/big-number/big-number.module.mjs +6 -6
  36. package/esm2022/lib/display-types/big-number/big-number.specification.mjs +2 -2
  37. package/esm2022/lib/display-types/big-number/components/big-number-configuration/big-number-configuration.component.mjs +7 -7
  38. package/esm2022/lib/display-types/big-number/components/big-number-configuration/index.mjs +2 -2
  39. package/esm2022/lib/display-types/big-number/components/big-number-display/big-number-display.component.mjs +6 -6
  40. package/esm2022/lib/display-types/big-number/components/big-number-display/index.mjs +2 -2
  41. package/esm2022/lib/display-types/big-number/components/index.mjs +2 -2
  42. package/esm2022/lib/display-types/big-number/index.mjs +2 -2
  43. package/esm2022/lib/display-types/big-number/models/big-number.model.mjs +2 -2
  44. package/esm2022/lib/display-types/big-number/models/index.mjs +2 -2
  45. package/esm2022/lib/display-types/donut/components/donut-configuration/donut-configuration.component.mjs +89 -0
  46. package/esm2022/lib/display-types/donut/components/donut-configuration/index.mjs +17 -0
  47. package/esm2022/lib/display-types/donut/components/donut-display/donut-display.component.mjs +72 -0
  48. package/esm2022/lib/display-types/donut/components/donut-display/index.mjs +17 -0
  49. package/esm2022/lib/display-types/donut/components/index.mjs +18 -0
  50. package/esm2022/lib/display-types/donut/donut.module.mjs +68 -0
  51. package/esm2022/lib/display-types/donut/donut.specification.mjs +55 -0
  52. package/esm2022/lib/display-types/donut/index.mjs +20 -0
  53. package/esm2022/lib/display-types/donut/models/donut.model.mjs +17 -0
  54. package/esm2022/lib/display-types/donut/models/index.mjs +17 -0
  55. package/esm2022/lib/display-types/gauge/components/gauge-configuration/gauge-configuration.component.mjs +89 -0
  56. package/esm2022/lib/display-types/gauge/components/gauge-configuration/index.mjs +17 -0
  57. package/esm2022/lib/display-types/gauge/components/gauge-display/gauge-display.component.mjs +86 -0
  58. package/esm2022/lib/display-types/gauge/components/gauge-display/index.mjs +17 -0
  59. package/esm2022/lib/display-types/gauge/components/index.mjs +18 -0
  60. package/esm2022/lib/display-types/gauge/gauge.module.mjs +60 -0
  61. package/esm2022/lib/display-types/gauge/gauge.specification.mjs +55 -0
  62. package/esm2022/lib/display-types/gauge/index.mjs +20 -0
  63. package/esm2022/lib/display-types/gauge/models/gauge.model.mjs +17 -0
  64. package/esm2022/lib/display-types/gauge/models/index.mjs +17 -0
  65. package/esm2022/lib/display-types/index.mjs +4 -3
  66. package/esm2022/lib/display-types/meter/components/index.mjs +3 -2
  67. package/esm2022/lib/display-types/meter/components/meter-configuration/index.mjs +17 -0
  68. package/esm2022/lib/display-types/meter/components/meter-configuration/meter-configuration.component.mjs +83 -0
  69. package/esm2022/lib/display-types/meter/components/meter-display/index.mjs +2 -2
  70. package/esm2022/lib/display-types/meter/components/meter-display/meter-display.component.mjs +46 -7
  71. package/esm2022/lib/display-types/meter/index.mjs +3 -3
  72. package/esm2022/lib/display-types/meter/meter.module.mjs +41 -9
  73. package/esm2022/lib/display-types/meter/meter.specification.mjs +24 -4
  74. package/esm2022/lib/display-types/meter/models/index.mjs +2 -2
  75. package/esm2022/lib/display-types/meter/models/meter.model.mjs +2 -2
  76. package/esm2022/lib/models/configuration.model.mjs +2 -2
  77. package/esm2022/lib/models/dashboard.model.mjs +2 -2
  78. package/esm2022/lib/models/data-source.model.mjs +12 -3
  79. package/esm2022/lib/models/display-type.model.mjs +2 -2
  80. package/esm2022/lib/models/index.mjs +2 -2
  81. package/esm2022/lib/models/layout.model.mjs +2 -2
  82. package/esm2022/lib/models/widget-data.model.mjs +2 -2
  83. package/esm2022/lib/models/widget-display.model.mjs +2 -2
  84. package/esm2022/lib/pipes/index.mjs +2 -2
  85. package/esm2022/lib/pipes/widget-translate/index.mjs +2 -2
  86. package/esm2022/lib/pipes/widget-translate/widget-translate-pipe.module.mjs +6 -6
  87. package/esm2022/lib/pipes/widget-translate/widget-translate.pipe.mjs +6 -6
  88. package/esm2022/lib/services/dashboard.service.mjs +6 -6
  89. package/esm2022/lib/services/index.mjs +2 -2
  90. package/esm2022/lib/services/widget-api.service.mjs +6 -6
  91. package/esm2022/lib/services/widget-layout.service.mjs +31 -85
  92. package/esm2022/lib/services/widget-translation.service.mjs +6 -6
  93. package/esm2022/lib/services/widget.service.mjs +7 -7
  94. package/esm2022/public_api.mjs +2 -2
  95. package/fesm2022/valtimo-dashboard.mjs +1909 -615
  96. package/fesm2022/valtimo-dashboard.mjs.map +1 -1
  97. package/lib/components/widget-dashboard/widget-dashboard.component.d.ts +1 -0
  98. package/lib/components/widget-dashboard/widget-dashboard.component.d.ts.map +1 -1
  99. package/lib/components/widget-dashboard-content/widget-dashboard-content.component.d.ts +9 -3
  100. package/lib/components/widget-dashboard-content/widget-dashboard-content.component.d.ts.map +1 -1
  101. package/lib/constants/data-features.constants.d.ts +1 -0
  102. package/lib/constants/data-features.constants.d.ts.map +1 -1
  103. package/lib/data-sources/case-count/components/case-count-configuration/case-count-configuration.component.d.ts +1 -1
  104. package/lib/data-sources/case-count/components/case-count-configuration/case-count-configuration.component.d.ts.map +1 -1
  105. package/lib/data-sources/case-count/models/case-count.model.d.ts +3 -15
  106. package/lib/data-sources/case-count/models/case-count.model.d.ts.map +1 -1
  107. package/lib/data-sources/case-counts/case-counts.module.d.ts +13 -0
  108. package/lib/data-sources/case-counts/case-counts.module.d.ts.map +1 -0
  109. package/lib/data-sources/case-counts/case-counts.specification.d.ts +3 -0
  110. package/lib/data-sources/case-counts/case-counts.specification.d.ts.map +1 -0
  111. package/lib/data-sources/case-counts/components/case-counts-configuration/case-counts-configuration.component.d.ts +52 -0
  112. package/lib/data-sources/case-counts/components/case-counts-configuration/case-counts-configuration.component.d.ts.map +1 -0
  113. package/lib/data-sources/case-counts/components/case-counts-configuration/index.d.ts +2 -0
  114. package/lib/data-sources/{test/components/test-configuration → case-counts/components/case-counts-configuration}/index.d.ts.map +1 -1
  115. package/lib/data-sources/case-counts/components/index.d.ts +2 -0
  116. package/lib/data-sources/case-counts/components/index.d.ts.map +1 -0
  117. package/lib/data-sources/case-counts/index.d.ts +5 -0
  118. package/lib/data-sources/case-counts/index.d.ts.map +1 -0
  119. package/lib/data-sources/case-counts/models/case-counts.model.d.ts +16 -0
  120. package/lib/data-sources/case-counts/models/case-counts.model.d.ts.map +1 -0
  121. package/lib/data-sources/case-counts/models/index.d.ts +2 -0
  122. package/lib/data-sources/{test/components → case-counts/models}/index.d.ts.map +1 -1
  123. package/lib/data-sources/case-group-by/case-group-by.module.d.ts +13 -0
  124. package/lib/data-sources/case-group-by/case-group-by.module.d.ts.map +1 -0
  125. package/lib/data-sources/case-group-by/case-group-by.specification.d.ts +3 -0
  126. package/lib/data-sources/case-group-by/case-group-by.specification.d.ts.map +1 -0
  127. package/lib/data-sources/case-group-by/components/case-group-by-configuration/case-group-by-configuration.component.d.ts +54 -0
  128. package/lib/data-sources/case-group-by/components/case-group-by-configuration/case-group-by-configuration.component.d.ts.map +1 -0
  129. package/lib/data-sources/case-group-by/components/case-group-by-configuration/index.d.ts +2 -0
  130. package/lib/data-sources/case-group-by/components/case-group-by-configuration/index.d.ts.map +1 -0
  131. package/lib/data-sources/case-group-by/components/index.d.ts +2 -0
  132. package/lib/data-sources/case-group-by/components/index.d.ts.map +1 -0
  133. package/lib/data-sources/case-group-by/index.d.ts +5 -0
  134. package/lib/data-sources/case-group-by/index.d.ts.map +1 -0
  135. package/lib/data-sources/case-group-by/models/case-group-by.model.d.ts +19 -0
  136. package/lib/data-sources/case-group-by/models/case-group-by.model.d.ts.map +1 -0
  137. package/lib/data-sources/case-group-by/models/index.d.ts +2 -0
  138. package/lib/data-sources/{test → case-group-by}/models/index.d.ts.map +1 -1
  139. package/lib/data-sources/index.d.ts +2 -1
  140. package/lib/data-sources/index.d.ts.map +1 -1
  141. package/lib/display-types/big-number/components/big-number-configuration/big-number-configuration.component.d.ts +10 -10
  142. package/lib/display-types/big-number/components/big-number-configuration/big-number-configuration.component.d.ts.map +1 -1
  143. package/lib/display-types/donut/components/donut-configuration/donut-configuration.component.d.ts +29 -0
  144. package/lib/display-types/donut/components/donut-configuration/donut-configuration.component.d.ts.map +1 -0
  145. package/lib/display-types/donut/components/donut-configuration/index.d.ts +2 -0
  146. package/lib/display-types/{bar-chart/components/bar-chart-display → donut/components/donut-configuration}/index.d.ts.map +1 -1
  147. package/lib/display-types/donut/components/donut-display/donut-display.component.d.ts +19 -0
  148. package/lib/display-types/donut/components/donut-display/donut-display.component.d.ts.map +1 -0
  149. package/lib/display-types/donut/components/donut-display/index.d.ts +2 -0
  150. package/lib/display-types/donut/components/donut-display/index.d.ts.map +1 -0
  151. package/lib/display-types/donut/components/index.d.ts +3 -0
  152. package/lib/display-types/donut/components/index.d.ts.map +1 -0
  153. package/lib/display-types/donut/donut.module.d.ts +16 -0
  154. package/lib/display-types/donut/donut.module.d.ts.map +1 -0
  155. package/lib/display-types/donut/donut.specification.d.ts +3 -0
  156. package/lib/display-types/donut/donut.specification.d.ts.map +1 -0
  157. package/lib/display-types/donut/index.d.ts +5 -0
  158. package/lib/display-types/donut/index.d.ts.map +1 -0
  159. package/lib/display-types/donut/models/donut.model.d.ts +14 -0
  160. package/lib/display-types/donut/models/donut.model.d.ts.map +1 -0
  161. package/lib/display-types/donut/models/index.d.ts +2 -0
  162. package/lib/display-types/{bar-chart → donut}/models/index.d.ts.map +1 -1
  163. package/lib/display-types/gauge/components/gauge-configuration/gauge-configuration.component.d.ts +29 -0
  164. package/lib/display-types/gauge/components/gauge-configuration/gauge-configuration.component.d.ts.map +1 -0
  165. package/lib/display-types/gauge/components/gauge-configuration/index.d.ts +2 -0
  166. package/lib/display-types/gauge/components/gauge-configuration/index.d.ts.map +1 -0
  167. package/lib/display-types/gauge/components/gauge-display/gauge-display.component.d.ts +24 -0
  168. package/lib/display-types/gauge/components/gauge-display/gauge-display.component.d.ts.map +1 -0
  169. package/lib/display-types/gauge/components/gauge-display/index.d.ts +2 -0
  170. package/lib/display-types/gauge/components/gauge-display/index.d.ts.map +1 -0
  171. package/lib/display-types/gauge/components/index.d.ts +3 -0
  172. package/lib/display-types/gauge/components/index.d.ts.map +1 -0
  173. package/lib/display-types/gauge/gauge.module.d.ts +14 -0
  174. package/lib/display-types/gauge/gauge.module.d.ts.map +1 -0
  175. package/lib/display-types/gauge/gauge.specification.d.ts +3 -0
  176. package/lib/display-types/gauge/gauge.specification.d.ts.map +1 -0
  177. package/lib/display-types/gauge/index.d.ts +5 -0
  178. package/lib/display-types/gauge/index.d.ts.map +1 -0
  179. package/lib/display-types/gauge/models/gauge.model.d.ts +11 -0
  180. package/lib/display-types/gauge/models/gauge.model.d.ts.map +1 -0
  181. package/lib/display-types/gauge/models/index.d.ts +2 -0
  182. package/lib/display-types/{bar-chart/components → gauge/models}/index.d.ts.map +1 -1
  183. package/lib/display-types/index.d.ts +2 -1
  184. package/lib/display-types/index.d.ts.map +1 -1
  185. package/lib/display-types/meter/components/index.d.ts +1 -0
  186. package/lib/display-types/meter/components/index.d.ts.map +1 -1
  187. package/lib/display-types/meter/components/meter-configuration/index.d.ts +2 -0
  188. package/lib/display-types/meter/components/meter-configuration/index.d.ts.map +1 -0
  189. package/lib/display-types/meter/components/meter-configuration/meter-configuration.component.d.ts +26 -0
  190. package/lib/display-types/meter/components/meter-configuration/meter-configuration.component.d.ts.map +1 -0
  191. package/lib/display-types/meter/components/meter-display/meter-display.component.d.ts +11 -3
  192. package/lib/display-types/meter/components/meter-display/meter-display.component.d.ts.map +1 -1
  193. package/lib/display-types/meter/index.d.ts +1 -1
  194. package/lib/display-types/meter/index.d.ts.map +1 -1
  195. package/lib/display-types/meter/meter.module.d.ts +9 -2
  196. package/lib/display-types/meter/meter.module.d.ts.map +1 -1
  197. package/lib/display-types/meter/meter.specification.d.ts.map +1 -1
  198. package/lib/display-types/meter/models/meter.model.d.ts +7 -2
  199. package/lib/display-types/meter/models/meter.model.d.ts.map +1 -1
  200. package/lib/models/configuration.model.d.ts +2 -2
  201. package/lib/models/configuration.model.d.ts.map +1 -1
  202. package/lib/models/data-source.model.d.ts +14 -1
  203. package/lib/models/data-source.model.d.ts.map +1 -1
  204. package/lib/services/widget-layout.service.d.ts +13 -18
  205. package/lib/services/widget-layout.service.d.ts.map +1 -1
  206. package/package.json +10 -6
  207. package/esm2022/lib/data-sources/test/components/index.mjs +0 -17
  208. package/esm2022/lib/data-sources/test/components/test-configuration/index.mjs +0 -17
  209. package/esm2022/lib/data-sources/test/components/test-configuration/test-configuration.component.mjs +0 -80
  210. package/esm2022/lib/data-sources/test/index.mjs +0 -20
  211. package/esm2022/lib/data-sources/test/models/index.mjs +0 -17
  212. package/esm2022/lib/data-sources/test/models/test.model.mjs +0 -17
  213. package/esm2022/lib/data-sources/test/test.module.mjs +0 -39
  214. package/esm2022/lib/data-sources/test/test.specification.mjs +0 -44
  215. package/esm2022/lib/display-types/bar-chart/bar-chart.module.mjs +0 -36
  216. package/esm2022/lib/display-types/bar-chart/bar-chart.specification.mjs +0 -35
  217. package/esm2022/lib/display-types/bar-chart/components/bar-chart-display/bar-chart-display.component.mjs +0 -32
  218. package/esm2022/lib/display-types/bar-chart/components/bar-chart-display/index.mjs +0 -17
  219. package/esm2022/lib/display-types/bar-chart/components/index.mjs +0 -17
  220. package/esm2022/lib/display-types/bar-chart/models/bar-chart.model.mjs +0 -17
  221. package/esm2022/lib/display-types/bar-chart/models/index.mjs +0 -17
  222. package/lib/data-sources/test/components/index.d.ts +0 -2
  223. package/lib/data-sources/test/components/test-configuration/index.d.ts +0 -2
  224. package/lib/data-sources/test/components/test-configuration/test-configuration.component.d.ts +0 -26
  225. package/lib/data-sources/test/components/test-configuration/test-configuration.component.d.ts.map +0 -1
  226. package/lib/data-sources/test/index.d.ts +0 -5
  227. package/lib/data-sources/test/index.d.ts.map +0 -1
  228. package/lib/data-sources/test/models/index.d.ts +0 -2
  229. package/lib/data-sources/test/models/test.model.d.ts +0 -6
  230. package/lib/data-sources/test/models/test.model.d.ts.map +0 -1
  231. package/lib/data-sources/test/test.module.d.ts +0 -12
  232. package/lib/data-sources/test/test.module.d.ts.map +0 -1
  233. package/lib/data-sources/test/test.specification.d.ts +0 -3
  234. package/lib/data-sources/test/test.specification.d.ts.map +0 -1
  235. package/lib/display-types/bar-chart/bar-chart.module.d.ts +0 -9
  236. package/lib/display-types/bar-chart/bar-chart.module.d.ts.map +0 -1
  237. package/lib/display-types/bar-chart/bar-chart.specification.d.ts +0 -3
  238. package/lib/display-types/bar-chart/bar-chart.specification.d.ts.map +0 -1
  239. package/lib/display-types/bar-chart/components/bar-chart-display/bar-chart-display.component.d.ts +0 -11
  240. package/lib/display-types/bar-chart/components/bar-chart-display/bar-chart-display.component.d.ts.map +0 -1
  241. package/lib/display-types/bar-chart/components/bar-chart-display/index.d.ts +0 -2
  242. package/lib/display-types/bar-chart/components/index.d.ts +0 -2
  243. package/lib/display-types/bar-chart/index.d.ts +0 -5
  244. package/lib/display-types/bar-chart/index.d.ts.map +0 -1
  245. package/lib/display-types/bar-chart/models/bar-chart.model.d.ts +0 -8
  246. package/lib/display-types/bar-chart/models/bar-chart.model.d.ts.map +0 -1
  247. package/lib/display-types/bar-chart/models/index.d.ts +0 -2
@@ -1,33 +1,37 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Component, ViewChild, InjectionToken, Injectable, Inject, ViewContainerRef, ViewChildren, Input, ViewEncapsulation, NgModule, Pipe, EventEmitter, ChangeDetectionStrategy, Output } from '@angular/core';
3
3
  import moment from 'moment';
4
- import { BehaviorSubject, filter, combineLatest, map, Subscription, tap, take as take$1, startWith } from 'rxjs';
5
- import { take, map as map$1 } from 'rxjs/operators';
4
+ import { BehaviorSubject, filter, map, Subject, Subscription, combineLatest, debounceTime, tap, startWith, distinctUntilChanged } from 'rxjs';
5
+ import { take, map as map$1, delay } from 'rxjs/operators';
6
6
  import * as i1 from '@valtimo/task';
7
7
  import { TaskModule } from '@valtimo/task';
8
8
  import * as i2 from '@angular/router';
9
9
  import { RouterModule } from '@angular/router';
10
10
  import * as i3 from '@angular/common';
11
11
  import { CommonModule } from '@angular/common';
12
- import * as i4 from '@valtimo/components';
13
- import { WidgetModule, ListModule, BpmnJsDiagramModule, AlertModule, SpinnerModule, CarbonListModule, CarbonMultiInputModule } from '@valtimo/components';
14
- import * as i1$1 from '@ngx-translate/core';
12
+ import * as i1$1 from '@valtimo/components';
13
+ import { WidgetModule, ListModule, BpmnJsDiagramModule, AlertModule, SpinnerModule, CarbonListModule, CarbonMultiInputModule, InputModule as InputModule$1 } from '@valtimo/components';
14
+ import * as i3$1 from '@ngx-translate/core';
15
15
  import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
16
- import pack from 'bin-pack-with-constraints';
16
+ import Muuri from 'muuri';
17
17
  import * as i1$2 from '@angular/common/http';
18
18
  import { HttpClient } from '@angular/common/http';
19
19
  import * as i2$1 from '@valtimo/config';
20
20
  import { ROLE_USER } from '@valtimo/config';
21
- import * as i4$1 from 'carbon-components-angular';
22
- import { TabsModule, ThemeModule, LoadingModule, InputModule, DropdownModule, CheckboxModule } from 'carbon-components-angular';
21
+ import * as i5 from 'carbon-components-angular';
22
+ import { TabsModule, ThemeModule, LoadingModule, InputModule, DropdownModule, ButtonModule, TilesModule, LayerModule, IconModule, CheckboxModule } from 'carbon-components-angular';
23
23
  import { TranslateHttpLoader } from '@ngx-translate/http-loader';
24
24
  import { AuthGuardService } from '@valtimo/security';
25
25
  import * as i1$3 from '@angular/forms';
26
26
  import { Validators, ReactiveFormsModule } from '@angular/forms';
27
27
  import * as i2$2 from '@valtimo/document';
28
+ import { isEqual } from 'lodash';
29
+ import { Add16, TrashCan16 } from '@carbon/icons';
30
+ import * as i3$2 from '@carbon/charts-angular';
31
+ import { ChartsModule } from '@carbon/charts-angular';
28
32
 
29
33
  /*
30
- * Copyright 2015-2023 Ritense BV, the Netherlands.
34
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
31
35
  *
32
36
  * Licensed under EUPL, Version 1.2 (the "License");
33
37
  * you may not use this file except in compliance with the License.
@@ -90,19 +94,19 @@ class DashboardComponent {
90
94
  }
91
95
  });
92
96
  }
93
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DashboardComponent, deps: [{ token: i1.TaskService }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
94
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DashboardComponent, selector: "valtimo-dashboard", viewQueries: [{ propertyName: "taskDetail", first: true, predicate: ["taskDetail"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"main-content container-fluid\" *ngIf=\"{loading: loading$ | async} as obs\">\n <h4 class=\"title\">\n {{ 'dashboard.openTasks.title' | translate }}\n <sup *ngIf=\"obs.loading === false\" class=\"ml-1 badge badge-pill badge-primary\">{{\n openTasks?.length\n }}</sup>\n </h4>\n <ng-container *ngIf=\"obs.loading === false; else loading\">\n <valtimo-widget>\n <valtimo-list\n [items]=\"openTasks\"\n [fields]=\"openTaskFields\"\n (rowClicked)=\"rowOpenTaskClick($event)\"\n ></valtimo-list>\n </valtimo-widget>\n </ng-container>\n <valtimo-task-detail-modal\n #taskDetail\n (formSubmit)=\"getOpenTasks()\"\n (assignmentOfTaskChanged)=\"getOpenTasks()\"\n ></valtimo-task-detail-modal>\n</div>\n\n<ng-template #loading>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { kind: "component", type: i4.ListComponent, selector: "valtimo-list", inputs: ["items", "fields", "pagination", "viewMode", "isSearchable", "header", "actions", "paginationIdentifier", "initialSortState", "lastColumnTemplate"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged"] }, { kind: "component", type: i1.TaskDetailModalComponent, selector: "valtimo-task-detail-modal", outputs: ["formSubmit", "assignmentOfTaskChanged"] }, { kind: "component", type: i4.SpinnerComponent, selector: "valtimo-spinner", inputs: ["useBootstrapSpinner", "name", "type", "size", "color", "bdColor", "fullScreen", "noMarginTop"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
97
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DashboardComponent, deps: [{ token: i1.TaskService }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
98
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: DashboardComponent, selector: "valtimo-dashboard", viewQueries: [{ propertyName: "taskDetail", first: true, predicate: ["taskDetail"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"main-content container-fluid\" *ngIf=\"{loading: loading$ | async} as obs\">\n <h4 class=\"title\">\n {{ 'dashboard.openTasks.title' | translate }}\n <sup *ngIf=\"obs.loading === false\" class=\"ml-1 badge badge-pill badge-primary\">{{\n openTasks?.length\n }}</sup>\n </h4>\n <ng-container *ngIf=\"obs.loading === false; else loading\">\n <valtimo-widget>\n <valtimo-list\n [items]=\"openTasks\"\n [fields]=\"openTaskFields\"\n (rowClicked)=\"rowOpenTaskClick($event)\"\n ></valtimo-list>\n </valtimo-widget>\n </ng-container>\n <valtimo-task-detail-modal\n #taskDetail\n (formSubmit)=\"getOpenTasks()\"\n (assignmentOfTaskChanged)=\"getOpenTasks()\"\n ></valtimo-task-detail-modal>\n</div>\n\n<ng-template #loading>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1$1.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { kind: "component", type: i1$1.ListComponent, selector: "valtimo-list", inputs: ["items", "fields", "pagination", "viewMode", "isSearchable", "header", "actions", "paginationIdentifier", "initialSortState", "lastColumnTemplate"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged"] }, { kind: "component", type: i1.TaskDetailModalComponent, selector: "valtimo-task-detail-modal", outputs: ["formSubmit", "assignmentOfTaskChanged"] }, { kind: "component", type: i1$1.SpinnerComponent, selector: "valtimo-spinner", inputs: ["useBootstrapSpinner", "name", "type", "size", "color", "bdColor", "fullScreen", "noMarginTop"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.TranslatePipe, name: "translate" }] }); }
95
99
  }
96
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DashboardComponent, decorators: [{
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DashboardComponent, decorators: [{
97
101
  type: Component,
98
- args: [{ selector: 'valtimo-dashboard', template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"main-content container-fluid\" *ngIf=\"{loading: loading$ | async} as obs\">\n <h4 class=\"title\">\n {{ 'dashboard.openTasks.title' | translate }}\n <sup *ngIf=\"obs.loading === false\" class=\"ml-1 badge badge-pill badge-primary\">{{\n openTasks?.length\n }}</sup>\n </h4>\n <ng-container *ngIf=\"obs.loading === false; else loading\">\n <valtimo-widget>\n <valtimo-list\n [items]=\"openTasks\"\n [fields]=\"openTaskFields\"\n (rowClicked)=\"rowOpenTaskClick($event)\"\n ></valtimo-list>\n </valtimo-widget>\n </ng-container>\n <valtimo-task-detail-modal\n #taskDetail\n (formSubmit)=\"getOpenTasks()\"\n (assignmentOfTaskChanged)=\"getOpenTasks()\"\n ></valtimo-task-detail-modal>\n</div>\n\n<ng-template #loading>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n" }]
99
- }], ctorParameters: function () { return [{ type: i1.TaskService }, { type: i2.ActivatedRoute }]; }, propDecorators: { taskDetail: [{
102
+ args: [{ selector: 'valtimo-dashboard', template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"main-content container-fluid\" *ngIf=\"{loading: loading$ | async} as obs\">\n <h4 class=\"title\">\n {{ 'dashboard.openTasks.title' | translate }}\n <sup *ngIf=\"obs.loading === false\" class=\"ml-1 badge badge-pill badge-primary\">{{\n openTasks?.length\n }}</sup>\n </h4>\n <ng-container *ngIf=\"obs.loading === false; else loading\">\n <valtimo-widget>\n <valtimo-list\n [items]=\"openTasks\"\n [fields]=\"openTaskFields\"\n (rowClicked)=\"rowOpenTaskClick($event)\"\n ></valtimo-list>\n </valtimo-widget>\n </ng-container>\n <valtimo-task-detail-modal\n #taskDetail\n (formSubmit)=\"getOpenTasks()\"\n (assignmentOfTaskChanged)=\"getOpenTasks()\"\n ></valtimo-task-detail-modal>\n</div>\n\n<ng-template #loading>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n" }]
103
+ }], ctorParameters: () => [{ type: i1.TaskService }, { type: i2.ActivatedRoute }], propDecorators: { taskDetail: [{
100
104
  type: ViewChild,
101
105
  args: ['taskDetail']
102
106
  }] } });
103
107
 
104
108
  /*
105
- * Copyright 2015-2023 Ritense BV, the Netherlands.
109
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
106
110
  *
107
111
  * Licensed under EUPL, Version 1.2 (the "License");
108
112
  * you may not use this file except in compliance with the License.
@@ -119,10 +123,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
119
123
  const DATA_FEATURES = {
120
124
  NUMBER: 'number',
121
125
  TOTAL: 'total',
126
+ NUMBERS: 'numbers',
122
127
  };
123
128
 
124
129
  /*
125
- * Copyright 2015-2023 Ritense BV, the Netherlands.
130
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
126
131
  *
127
132
  * Licensed under EUPL, Version 1.2 (the "License");
128
133
  * you may not use this file except in compliance with the License.
@@ -140,7 +145,7 @@ const DISPLAY_TYPE_TOKEN = new InjectionToken('Supported display types');
140
145
  const DATA_SOURCE_TOKEN = new InjectionToken('Supported data sources');
141
146
 
142
147
  /*
143
- * Copyright 2015-2023 Ritense BV, the Netherlands.
148
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
144
149
  *
145
150
  * Licensed under EUPL, Version 1.2 (the "License");
146
151
  * you may not use this file except in compliance with the License.
@@ -158,7 +163,7 @@ const WIDGET_1X_HEIGHT = 220;
158
163
  const WIDGET_1X_MIN_WIDTH = 275;
159
164
 
160
165
  /*
161
- * Copyright 2015-2023 Ritense BV, the Netherlands.
166
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
162
167
  *
163
168
  * Licensed under EUPL, Version 1.2 (the "License");
164
169
  * you may not use this file except in compliance with the License.
@@ -174,65 +179,7 @@ const WIDGET_1X_MIN_WIDTH = 275;
174
179
  */
175
180
 
176
181
  /*
177
- * Copyright 2015-2023 Ritense BV, the Netherlands.
178
- *
179
- * Licensed under EUPL, Version 1.2 (the "License");
180
- * you may not use this file except in compliance with the License.
181
- * You may obtain a copy of the License at
182
- *
183
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
184
- *
185
- * Unless required by applicable law or agreed to in writing, software
186
- * distributed under the License is distributed on an "AS IS" basis,
187
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
188
- * See the License for the specific language governing permissions and
189
- * limitations under the License.
190
- */
191
- class WidgetService {
192
- get supportedDisplayTypes$() {
193
- return this._supportedDisplayTypes$.pipe(filter(specifications => !!specifications));
194
- }
195
- get supportedDataSources$() {
196
- return this._supportedDataSources$.pipe(filter(specifications => !!specifications));
197
- }
198
- get supportedDisplayTypes() {
199
- return this._supportedDisplayTypes$.getValue() || [];
200
- }
201
- get supportedDataSources() {
202
- return this._supportedDataSources$.getValue() || [];
203
- }
204
- constructor(supportedDisplayTypesFromToken, supportedDataSourcesFromToken) {
205
- this.supportedDisplayTypesFromToken = supportedDisplayTypesFromToken;
206
- this.supportedDataSourcesFromToken = supportedDataSourcesFromToken;
207
- this._supportedDisplayTypes$ = new BehaviorSubject(null);
208
- this._supportedDataSources$ = new BehaviorSubject(null);
209
- this.setSupportedDisplayTypes(supportedDisplayTypesFromToken);
210
- this.setSupportedDataSources(supportedDataSourcesFromToken);
211
- }
212
- setSupportedDisplayTypes(supportedDisplayTypes) {
213
- this._supportedDisplayTypes$.next(supportedDisplayTypes.filter(displayType => !!displayType));
214
- }
215
- setSupportedDataSources(supportedDataSources) {
216
- this._supportedDataSources$.next(supportedDataSources.filter(dataSource => !!dataSource));
217
- }
218
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetService, deps: [{ token: DISPLAY_TYPE_TOKEN }, { token: DATA_SOURCE_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable }); }
219
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetService, providedIn: 'root' }); }
220
- }
221
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetService, decorators: [{
222
- type: Injectable,
223
- args: [{
224
- providedIn: 'root',
225
- }]
226
- }], ctorParameters: function () { return [{ type: Array, decorators: [{
227
- type: Inject,
228
- args: [DISPLAY_TYPE_TOKEN]
229
- }] }, { type: Array, decorators: [{
230
- type: Inject,
231
- args: [DATA_SOURCE_TOKEN]
232
- }] }]; } });
233
-
234
- /*
235
- * Copyright 2015-2023 Ritense BV, the Netherlands.
182
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
236
183
  *
237
184
  * Licensed under EUPL, Version 1.2 (the "License");
238
185
  * you may not use this file except in compliance with the License.
@@ -247,34 +194,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
247
194
  * limitations under the License.
248
195
  */
249
196
  class WidgetLayoutService {
250
- get widgetPackResult$() {
251
- return this._widgetPackResult$.asObservable().pipe(filter(result => !!result));
197
+ get muuri$() {
198
+ return this._muuriSubject$.pipe(filter(muuri => !!muuri));
199
+ }
200
+ get muuriSubject$() {
201
+ return this._muuriSubject$.asObservable();
252
202
  }
253
203
  get widgetContainerWidth$() {
254
204
  return this._widgetContainerWidth$.asObservable().pipe(filter(width => !!width));
255
205
  }
256
- get widgetConfigurationBins$() {
257
- return combineLatest([
258
- this.widgetService.supportedDisplayTypes$,
259
- this._widgetConfigurations$,
260
- ]).pipe(map(([displayTypes, configurations]) => configurations.map(configuration => {
261
- const specification = displayTypes.find(type => type.displayTypeKey === configuration.displayType);
262
- return {
263
- configurationKey: configuration.key,
264
- width: specification.width,
265
- height: specification.height,
266
- };
267
- })));
206
+ get amountOfColumns$() {
207
+ return this.widgetContainerWidth$.pipe(map(containerWidth => Math.floor(containerWidth / WIDGET_1X_MIN_WIDTH)));
268
208
  }
269
- constructor(widgetService) {
270
- this.widgetService = widgetService;
209
+ constructor() {
271
210
  this._widgetContainerWidth$ = new BehaviorSubject(null);
272
211
  this._widgetConfigurations$ = new BehaviorSubject([]);
273
- this._widgetPackResult$ = new BehaviorSubject(null);
274
- this.openLayoutSubscription();
275
- }
276
- ngOnDestroy() {
277
- this._layoutSubscription?.unsubscribe();
212
+ this._muuriSubject$ = new BehaviorSubject(null);
213
+ this._triggerMuuriLayout$ = new Subject();
214
+ this._subscriptions = new Subscription();
215
+ this.openMuuriSubscription();
278
216
  }
279
217
  setWidgetContainerWidth(width) {
280
218
  this._widgetContainerWidth$.next(width);
@@ -282,72 +220,29 @@ class WidgetLayoutService {
282
220
  setWidgetConfigurations(configurations) {
283
221
  this._widgetConfigurations$.next(configurations);
284
222
  }
285
- openLayoutSubscription() {
286
- this._layoutSubscription = combineLatest([
287
- this.widgetContainerWidth$,
288
- this.widgetConfigurationBins$,
289
- ]).subscribe(([widgetContainerWidth, configurationBins]) => {
290
- const amountOfMinWidthColumns = this.getAmountOfMinWidthColumns(widgetContainerWidth);
291
- const widget1xWidth = this.getWidget1xWidth(widgetContainerWidth, amountOfMinWidthColumns);
292
- const binsToFit = configurationBins.map(configurationBin => ({
293
- ...configurationBin,
294
- width: configurationBin.width * widget1xWidth,
295
- height: configurationBin.height * WIDGET_1X_HEIGHT,
296
- }));
297
- const heightConstraint = this.getHeightConstraint(configurationBins, amountOfMinWidthColumns);
298
- const resultWithoutHeightConstraint = this.getPackResult(binsToFit, widgetContainerWidth);
299
- const resultWithHeightConstraint = this.getPackResult(binsToFit, widgetContainerWidth, heightConstraint);
300
- const resultWithHeightConstraintExceedsBoundary = this.checkIfPackResultExceedsBoundary(resultWithHeightConstraint, widgetContainerWidth);
301
- const resultToUse = resultWithHeightConstraintExceedsBoundary
302
- ? resultWithoutHeightConstraint
303
- : resultWithHeightConstraint;
304
- const resultWithMaxWidth = this.getResultWithMaxWidth(resultToUse, widgetContainerWidth);
305
- this._widgetPackResult$.next(resultWithMaxWidth);
306
- });
307
- }
308
- getPackResult(binsToFit, maxWidth, maxHeight) {
309
- return pack(binsToFit, {
310
- maxWidth,
311
- ...(maxHeight && { maxHeight }),
312
- });
313
- }
314
- checkIfPackResultExceedsBoundary(result, maxWidth) {
315
- return !!result.items.find(item => item.width + item.x > maxWidth);
223
+ setMuuri(muuri) {
224
+ this._muuriSubject$.next(muuri);
316
225
  }
317
- getAmountOfMinWidthColumns(containerWidth) {
318
- return Math.floor(containerWidth / WIDGET_1X_MIN_WIDTH);
226
+ triggerMuuriLayout() {
227
+ this._triggerMuuriLayout$.next(null);
319
228
  }
320
- getWidget1xWidth(containerWidth, amountOfMinWidthColumns) {
321
- const widget1xWidth = Math.floor(containerWidth / (amountOfMinWidthColumns || 1));
322
- return widget1xWidth;
323
- }
324
- getResultWithMaxWidth(result, containerWidth) {
325
- return {
326
- ...result,
327
- items: result.items.map(item => ({
328
- ...item,
329
- width: item.width > containerWidth ? containerWidth : item.width,
330
- })),
331
- };
229
+ openMuuriSubscription() {
230
+ this._subscriptions.add(combineLatest([this.muuri$, this._triggerMuuriLayout$])
231
+ .pipe(debounceTime(150))
232
+ .subscribe(([muuri]) => {
233
+ muuri.refreshItems();
234
+ muuri.layout();
235
+ }));
332
236
  }
333
- getHeightConstraint(binsToFit, amountOfMinWidthColumns) {
334
- const amountOfSpacesNeeded = binsToFit.reduce((acc, curr) => acc + curr.height * curr.width, 0);
335
- const minAmountOfRowsNeeded = Math.ceil(amountOfSpacesNeeded / amountOfMinWidthColumns);
336
- const tallestWidgetHeightSpace = binsToFit.reduce((acc, curr) => (curr.height > acc ? curr.height : acc), 0);
337
- const amountOfRowsNeeded = minAmountOfRowsNeeded < tallestWidgetHeightSpace
338
- ? tallestWidgetHeightSpace
339
- : minAmountOfRowsNeeded;
340
- return amountOfRowsNeeded * WIDGET_1X_HEIGHT;
341
- }
342
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetLayoutService, deps: [{ token: WidgetService }], target: i0.ɵɵFactoryTarget.Injectable }); }
343
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetLayoutService }); }
237
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetLayoutService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
238
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetLayoutService }); }
344
239
  }
345
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetLayoutService, decorators: [{
240
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetLayoutService, decorators: [{
346
241
  type: Injectable
347
- }], ctorParameters: function () { return [{ type: WidgetService }]; } });
242
+ }], ctorParameters: () => [] });
348
243
 
349
244
  /*
350
- * Copyright 2015-2023 Ritense BV, the Netherlands.
245
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
351
246
  *
352
247
  * Licensed under EUPL, Version 1.2 (the "License");
353
248
  * you may not use this file except in compliance with the License.
@@ -370,18 +265,76 @@ class DashboardService {
370
265
  getDashboards() {
371
266
  return this.http.get(`${this._endpointUri}v1/dashboard`);
372
267
  }
373
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DashboardService, deps: [{ token: i1$2.HttpClient }, { token: i2$1.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
374
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DashboardService, providedIn: 'root' }); }
268
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DashboardService, deps: [{ token: i1$2.HttpClient }, { token: i2$1.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
269
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DashboardService, providedIn: 'root' }); }
270
+ }
271
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DashboardService, decorators: [{
272
+ type: Injectable,
273
+ args: [{
274
+ providedIn: 'root',
275
+ }]
276
+ }], ctorParameters: () => [{ type: i1$2.HttpClient }, { type: i2$1.ConfigService }] });
277
+
278
+ /*
279
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
280
+ *
281
+ * Licensed under EUPL, Version 1.2 (the "License");
282
+ * you may not use this file except in compliance with the License.
283
+ * You may obtain a copy of the License at
284
+ *
285
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
286
+ *
287
+ * Unless required by applicable law or agreed to in writing, software
288
+ * distributed under the License is distributed on an "AS IS" basis,
289
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
290
+ * See the License for the specific language governing permissions and
291
+ * limitations under the License.
292
+ */
293
+ class WidgetService {
294
+ get supportedDisplayTypes$() {
295
+ return this._supportedDisplayTypes$.pipe(filter(specifications => !!specifications));
296
+ }
297
+ get supportedDataSources$() {
298
+ return this._supportedDataSources$.pipe(filter(specifications => !!specifications));
299
+ }
300
+ get supportedDisplayTypes() {
301
+ return this._supportedDisplayTypes$.getValue() || [];
302
+ }
303
+ get supportedDataSources() {
304
+ return this._supportedDataSources$.getValue() || [];
305
+ }
306
+ constructor(supportedDisplayTypesFromToken, supportedDataSourcesFromToken) {
307
+ this.supportedDisplayTypesFromToken = supportedDisplayTypesFromToken;
308
+ this.supportedDataSourcesFromToken = supportedDataSourcesFromToken;
309
+ this._supportedDisplayTypes$ = new BehaviorSubject(null);
310
+ this._supportedDataSources$ = new BehaviorSubject(null);
311
+ this.setSupportedDisplayTypes(supportedDisplayTypesFromToken);
312
+ this.setSupportedDataSources(supportedDataSourcesFromToken);
313
+ }
314
+ setSupportedDisplayTypes(supportedDisplayTypes) {
315
+ this._supportedDisplayTypes$.next(supportedDisplayTypes.filter(displayType => !!displayType));
316
+ }
317
+ setSupportedDataSources(supportedDataSources) {
318
+ this._supportedDataSources$.next(supportedDataSources.filter(dataSource => !!dataSource));
319
+ }
320
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetService, deps: [{ token: DISPLAY_TYPE_TOKEN }, { token: DATA_SOURCE_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable }); }
321
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetService, providedIn: 'root' }); }
375
322
  }
376
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DashboardService, decorators: [{
323
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetService, decorators: [{
377
324
  type: Injectable,
378
325
  args: [{
379
326
  providedIn: 'root',
380
327
  }]
381
- }], ctorParameters: function () { return [{ type: i1$2.HttpClient }, { type: i2$1.ConfigService }]; } });
328
+ }], ctorParameters: () => [{ type: Array, decorators: [{
329
+ type: Inject,
330
+ args: [DISPLAY_TYPE_TOKEN]
331
+ }] }, { type: Array, decorators: [{
332
+ type: Inject,
333
+ args: [DATA_SOURCE_TOKEN]
334
+ }] }] });
382
335
 
383
336
  /*
384
- * Copyright 2015-2023 Ritense BV, the Netherlands.
337
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
385
338
  *
386
339
  * Licensed under EUPL, Version 1.2 (the "License");
387
340
  * you may not use this file except in compliance with the License.
@@ -425,18 +378,18 @@ class WidgetTranslationService {
425
378
  }
426
379
  return translation || `${key}.${translateKey}`;
427
380
  }
428
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetTranslationService, deps: [{ token: i1$1.TranslateService }, { token: WidgetService }], target: i0.ɵɵFactoryTarget.Injectable }); }
429
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetTranslationService, providedIn: 'root' }); }
381
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetTranslationService, deps: [{ token: i3$1.TranslateService }, { token: WidgetService }], target: i0.ɵɵFactoryTarget.Injectable }); }
382
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetTranslationService, providedIn: 'root' }); }
430
383
  }
431
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetTranslationService, decorators: [{
384
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetTranslationService, decorators: [{
432
385
  type: Injectable,
433
386
  args: [{
434
387
  providedIn: 'root',
435
388
  }]
436
- }], ctorParameters: function () { return [{ type: i1$1.TranslateService }, { type: WidgetService }]; } });
389
+ }], ctorParameters: () => [{ type: i3$1.TranslateService }, { type: WidgetService }] });
437
390
 
438
391
  /*
439
- * Copyright 2015-2023 Ritense BV, the Netherlands.
392
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
440
393
  *
441
394
  * Licensed under EUPL, Version 1.2 (the "License");
442
395
  * you may not use this file except in compliance with the License.
@@ -452,7 +405,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
452
405
  */
453
406
 
454
407
  /*
455
- * Copyright 2015-2023 Ritense BV, the Netherlands.
408
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
456
409
  *
457
410
  * Licensed under EUPL, Version 1.2 (the "License");
458
411
  * you may not use this file except in compliance with the License.
@@ -468,27 +421,38 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
468
421
  */
469
422
  class WidgetDashboardContentComponent {
470
423
  set widgetData(value) {
471
- this.isLoading$.next(value.loading);
424
+ this._isLoading$.next(value.loading);
472
425
  this._widgetData$.next(value.data);
473
426
  }
474
427
  set dashboard(value) {
475
428
  this.setWidgetConfigurations(value);
476
429
  }
430
+ get _muuriInitialized$() {
431
+ return this._muuri$.pipe(map$1(muuri => !!muuri));
432
+ }
477
433
  constructor(layoutService, widgetService, renderer) {
478
434
  this.layoutService = layoutService;
479
435
  this.widgetService = widgetService;
480
436
  this.renderer = renderer;
481
- this.isLoading$ = new BehaviorSubject(true);
437
+ this._isLoading$ = new BehaviorSubject(true);
482
438
  this._widgetData$ = new BehaviorSubject([]);
483
439
  this.widgetConfigurations$ = new BehaviorSubject(null);
484
440
  this._subscriptions = new Subscription();
441
+ this._muuri$ = this.layoutService.muuriSubject$;
442
+ this._creatingMuuri = false;
443
+ this._noResults$ = new BehaviorSubject(false);
444
+ this.loaded$ = combineLatest([
445
+ this._isLoading$,
446
+ this._muuriInitialized$,
447
+ this._noResults$,
448
+ ]).pipe(map$1(([isLoading, muuriInitialized, noResults]) => !isLoading && (muuriInitialized || noResults)), delay(400));
485
449
  }
486
450
  ngAfterViewInit() {
487
451
  this._observer = new ResizeObserver(event => {
488
452
  this.observerMutation(event);
489
453
  });
490
454
  this._observer.observe(this._widgetContainerRef.nativeElement);
491
- this.openPackResultSubscription();
455
+ this.openWidgetSizeSubscription();
492
456
  this.renderWidgets();
493
457
  }
494
458
  ngOnDestroy() {
@@ -508,17 +472,34 @@ class WidgetDashboardContentComponent {
508
472
  this.layoutService.setWidgetContainerWidth(widgetContainerWidth);
509
473
  }
510
474
  }
511
- openPackResultSubscription() {
512
- this._subscriptions.add(this.layoutService.widgetPackResult$.subscribe(packResult => {
513
- this.renderer.setStyle(this._widgetContainerRef.nativeElement, 'height', `${packResult.height}px`);
475
+ openWidgetSizeSubscription() {
476
+ this._subscriptions.add(combineLatest([
477
+ this.layoutService.amountOfColumns$,
478
+ this.widgetConfigurations$,
479
+ this.widgetService.supportedDisplayTypes$,
480
+ this._muuri$,
481
+ ]).subscribe(([amountOfColumns, widgetConfigurations, supportedDisplayTypes, muuri]) => {
514
482
  this._widgetConfigurationRefs.toArray().forEach(widgetConfigurationRef => {
515
483
  const nativeElement = widgetConfigurationRef.nativeElement;
516
- const configPackResult = packResult.items.find(result => result.item.configurationKey === nativeElement.id);
517
- this.renderer.setStyle(nativeElement, 'height', `${configPackResult?.height}px`);
518
- this.renderer.setStyle(nativeElement, 'width', `${configPackResult?.width}px`);
519
- this.renderer.setStyle(nativeElement, 'left', `${configPackResult?.x}px`);
520
- this.renderer.setStyle(nativeElement, 'top', `${configPackResult?.y}px`);
484
+ const widgetConfiguration = widgetConfigurations.find(config => config.key === nativeElement.id);
485
+ const specification = supportedDisplayTypes.find(type => type.displayTypeKey === widgetConfiguration.displayType);
486
+ const widthPercentage = specification.width > amountOfColumns
487
+ ? 100
488
+ : (specification.width / amountOfColumns) * 100;
489
+ this.renderer.setStyle(nativeElement, 'height', `${WIDGET_1X_HEIGHT * specification.height}px`);
490
+ this.renderer.setStyle(nativeElement, 'width', `${widthPercentage}%`);
521
491
  });
492
+ if (widgetConfigurations.length > 0) {
493
+ if (!muuri) {
494
+ this.initMuuri();
495
+ }
496
+ else {
497
+ this.layoutService.triggerMuuriLayout();
498
+ }
499
+ }
500
+ else {
501
+ this._noResults$.next(true);
502
+ }
522
503
  }));
523
504
  }
524
505
  renderWidgets() {
@@ -542,13 +523,25 @@ class WidgetDashboardContentComponent {
542
523
  });
543
524
  }));
544
525
  }
545
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetDashboardContentComponent, deps: [{ token: WidgetLayoutService }, { token: WidgetService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
546
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: WidgetDashboardContentComponent, selector: "valtimo-widget-dashboard-content", inputs: { widgetData: "widgetData", dashboard: "dashboard" }, providers: [WidgetLayoutService], viewQueries: [{ propertyName: "_widgetContainerRef", first: true, predicate: ["widgetContainer"], descendants: true }, { propertyName: "_widgetConfigurationRefs", predicate: ["widgetConfiguration"], descendants: true }, { propertyName: "_widgetConfigurationContentVcRefs", predicate: ["widgetConfigurationContent"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div #widgetContainer [class.loading]=\"isLoading$ | async\" class=\"widget-container\">\n <ng-container *ngIf=\"widgetConfigurations$ | async as widgetConfigurations\">\n <ng-container *ngFor=\"let config of widgetConfigurations\">\n <div #widgetConfiguration [id]=\"config.key\" class=\"widget-configuration\">\n <div class=\"widget-configuration-content\">\n <ng-container #widgetConfigurationContent></ng-container>\n </div>\n </div>\n </ng-container>\n\n <valtimo-no-results\n *ngIf=\"!widgetConfigurations.length\"\n [title]=\"'dashboard.noWidgets' | translate\"\n ></valtimo-no-results>\n </ng-container>\n</div>\n\n<cds-loading *ngIf=\"isLoading$ | async\" class=\"widget-loader\"></cds-loading>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.widget-container{margin-top:16px;width:calc(100% + 16px);margin-left:-8px;position:relative}.widget-configuration{position:absolute;display:flex;justify-content:center;align-items:center}.widget-configuration-content{width:calc(100% - 16px);height:calc(100% - 16px);background-color:#fff}.widget-loader{display:flex;justify-content:center;padding-top:32px}.loading{display:none}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4$1.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "component", type: i4.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
526
+ initMuuri() {
527
+ if (!this._widgetContainerRef || this._creatingMuuri)
528
+ return;
529
+ this._creatingMuuri = true;
530
+ this.layoutService.setMuuri(new Muuri(this._widgetContainerRef.nativeElement, {
531
+ layout: {
532
+ fillGaps: true,
533
+ },
534
+ layoutOnResize: false,
535
+ }));
536
+ this._creatingMuuri = false;
537
+ }
538
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetDashboardContentComponent, deps: [{ token: WidgetLayoutService }, { token: WidgetService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
539
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: WidgetDashboardContentComponent, selector: "valtimo-widget-dashboard-content", inputs: { widgetData: "widgetData", dashboard: "dashboard" }, providers: [WidgetLayoutService], viewQueries: [{ propertyName: "_widgetContainerRef", first: true, predicate: ["widgetContainer"], descendants: true }, { propertyName: "_widgetConfigurationRefs", predicate: ["widgetConfiguration"], descendants: true }, { propertyName: "_widgetConfigurationContentVcRefs", predicate: ["widgetConfigurationContent"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"{loaded: loaded$ | async} as obs\">\n <div *ngIf=\"!obs.loaded\" class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n</ng-container>\n\n<div\n #widgetContainer\n class=\"widget-container\"\n [ngClass]=\"{'widget-container__visible': loaded$ | async}\"\n>\n <ng-container *ngIf=\"widgetConfigurations$ | async as widgetConfigurations\">\n <ng-container *ngFor=\"let config of widgetConfigurations\">\n <div #widgetConfiguration [id]=\"config.key\" class=\"widget-configuration\">\n <div class=\"widget-configuration-content\">\n <ng-container #widgetConfigurationContent></ng-container>\n </div>\n </div>\n </ng-container>\n\n <valtimo-no-results\n *ngIf=\"!widgetConfigurations.length\"\n [title]=\"'dashboard.noWidgets' | translate\"\n [description]=\"'dashboard.noWidgetsDescription' | translate\"\n illustration=\"valtimo-layout/img/no-widgets.svg\"\n ></valtimo-no-results>\n </ng-container>\n</div>\n", styles: [":host{position:relative}.widget-container{margin-top:16px;width:calc(100% + 16px);margin-left:-8px;position:relative;visibility:hidden}.widget-container__visible{visibility:visible}.widget-configuration{position:absolute;display:flex;justify-content:center;align-items:center}.widget-configuration-content{width:calc(100% - 16px);height:calc(100% - 16px);background-color:#fff}.loading-container{padding-top:32px;position:absolute;top:0;display:flex;width:100%;justify-content:center}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "component", type: i1$1.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.TranslatePipe, name: "translate" }] }); }
547
540
  }
548
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetDashboardContentComponent, decorators: [{
541
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetDashboardContentComponent, decorators: [{
549
542
  type: Component,
550
- args: [{ selector: 'valtimo-widget-dashboard-content', providers: [WidgetLayoutService], template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div #widgetContainer [class.loading]=\"isLoading$ | async\" class=\"widget-container\">\n <ng-container *ngIf=\"widgetConfigurations$ | async as widgetConfigurations\">\n <ng-container *ngFor=\"let config of widgetConfigurations\">\n <div #widgetConfiguration [id]=\"config.key\" class=\"widget-configuration\">\n <div class=\"widget-configuration-content\">\n <ng-container #widgetConfigurationContent></ng-container>\n </div>\n </div>\n </ng-container>\n\n <valtimo-no-results\n *ngIf=\"!widgetConfigurations.length\"\n [title]=\"'dashboard.noWidgets' | translate\"\n ></valtimo-no-results>\n </ng-container>\n</div>\n\n<cds-loading *ngIf=\"isLoading$ | async\" class=\"widget-loader\"></cds-loading>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.widget-container{margin-top:16px;width:calc(100% + 16px);margin-left:-8px;position:relative}.widget-configuration{position:absolute;display:flex;justify-content:center;align-items:center}.widget-configuration-content{width:calc(100% - 16px);height:calc(100% - 16px);background-color:#fff}.widget-loader{display:flex;justify-content:center;padding-top:32px}.loading{display:none}\n"] }]
551
- }], ctorParameters: function () { return [{ type: WidgetLayoutService }, { type: WidgetService }, { type: i0.Renderer2 }]; }, propDecorators: { _widgetConfigurationRefs: [{
543
+ args: [{ selector: 'valtimo-widget-dashboard-content', providers: [WidgetLayoutService], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"{loaded: loaded$ | async} as obs\">\n <div *ngIf=\"!obs.loaded\" class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n</ng-container>\n\n<div\n #widgetContainer\n class=\"widget-container\"\n [ngClass]=\"{'widget-container__visible': loaded$ | async}\"\n>\n <ng-container *ngIf=\"widgetConfigurations$ | async as widgetConfigurations\">\n <ng-container *ngFor=\"let config of widgetConfigurations\">\n <div #widgetConfiguration [id]=\"config.key\" class=\"widget-configuration\">\n <div class=\"widget-configuration-content\">\n <ng-container #widgetConfigurationContent></ng-container>\n </div>\n </div>\n </ng-container>\n\n <valtimo-no-results\n *ngIf=\"!widgetConfigurations.length\"\n [title]=\"'dashboard.noWidgets' | translate\"\n [description]=\"'dashboard.noWidgetsDescription' | translate\"\n illustration=\"valtimo-layout/img/no-widgets.svg\"\n ></valtimo-no-results>\n </ng-container>\n</div>\n", styles: [":host{position:relative}.widget-container{margin-top:16px;width:calc(100% + 16px);margin-left:-8px;position:relative;visibility:hidden}.widget-container__visible{visibility:visible}.widget-configuration{position:absolute;display:flex;justify-content:center;align-items:center}.widget-configuration-content{width:calc(100% - 16px);height:calc(100% - 16px);background-color:#fff}.loading-container{padding-top:32px;position:absolute;top:0;display:flex;width:100%;justify-content:center}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
544
+ }], ctorParameters: () => [{ type: WidgetLayoutService }, { type: WidgetService }, { type: i0.Renderer2 }], propDecorators: { _widgetConfigurationRefs: [{
552
545
  type: ViewChildren,
553
546
  args: ['widgetConfiguration']
554
547
  }], _widgetConfigurationContentVcRefs: [{
@@ -564,7 +557,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
564
557
  }] } });
565
558
 
566
559
  /*
567
- * Copyright 2015-2023 Ritense BV, the Netherlands.
560
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
568
561
  *
569
562
  * Licensed under EUPL, Version 1.2 (the "License");
570
563
  * you may not use this file except in compliance with the License.
@@ -587,18 +580,18 @@ class WidgetApiService {
587
580
  getWidgetData(dashboardKey) {
588
581
  return this.http.get(`${this._endpointUri}/${dashboardKey}/data`);
589
582
  }
590
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetApiService, deps: [{ token: i2$1.ConfigService }, { token: i1$2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
591
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetApiService, providedIn: 'root' }); }
583
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetApiService, deps: [{ token: i2$1.ConfigService }, { token: i1$2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
584
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetApiService, providedIn: 'root' }); }
592
585
  }
593
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetApiService, decorators: [{
586
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetApiService, decorators: [{
594
587
  type: Injectable,
595
588
  args: [{
596
589
  providedIn: 'root',
597
590
  }]
598
- }], ctorParameters: function () { return [{ type: i2$1.ConfigService }, { type: i1$2.HttpClient }]; } });
591
+ }], ctorParameters: () => [{ type: i2$1.ConfigService }, { type: i1$2.HttpClient }] });
599
592
 
600
593
  /*
601
- * Copyright 2015-2023 Ritense BV, the Netherlands.
594
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
602
595
  *
603
596
  * Licensed under EUPL, Version 1.2 (the "License");
604
597
  * you may not use this file except in compliance with the License.
@@ -625,28 +618,28 @@ class WidgetDashboardComponent {
625
618
  data: [],
626
619
  loading: true,
627
620
  });
621
+ this.selectedDashboardKey$ = new BehaviorSubject('');
628
622
  }
629
623
  onTabSelected(dashboardKey) {
624
+ this.selectedDashboardKey$.next(dashboardKey);
625
+ this.activeWidgetData$.next({ data: [], loading: true });
630
626
  this.widgetApiService
631
627
  .getWidgetData(dashboardKey)
632
- .pipe(tap(() => {
633
- this.activeWidgetData$.next({ data: [], loading: true });
634
- }), take$1(1))
635
628
  .subscribe((data) => this.activeWidgetData$.next({ data, loading: false }));
636
629
  }
637
630
  trackByIndex(index) {
638
631
  return index;
639
632
  }
640
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetDashboardComponent, deps: [{ token: DashboardService }, { token: WidgetApiService }], target: i0.ɵɵFactoryTarget.Component }); }
641
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: WidgetDashboardComponent, selector: "valtimo-widget-dashboard", ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div *ngIf=\"dashboards$ | async as dashboards\" class=\"dashboards-container\">\n <valtimo-no-results\n *ngIf=\"!dashboards.length\"\n [title]=\"'dashboard.noDashboards' | translate\"\n ></valtimo-no-results>\n\n <div *ngIf=\"dashboards.length === 1\">\n <h4>{{ dashboards[0].title }}</h4>\n\n <valtimo-widget-dashboard-content\n [dashboard]=\"dashboards[0]\"\n [widgetData]=\"activeWidgetData$ | async\"\n ></valtimo-widget-dashboard-content>\n </div>\n\n <div *ngIf=\"dashboards.length > 1\">\n <cds-tabs>\n <cds-tab\n *ngFor=\"let dashboard of dashboards; trackBy: trackByIndex\"\n [heading]=\"dashboard.title\"\n (selected)=\"onTabSelected(dashboard.key)\"\n >\n <valtimo-widget-dashboard-content\n [dashboard]=\"dashboard\"\n [widgetData]=\"activeWidgetData$ | async\"\n ></valtimo-widget-dashboard-content>\n </cds-tab>\n </cds-tabs>\n </div>\n</div>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.dashboards-container .cds--tab-content{outline:0;padding:0}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4$1.Tabs, selector: "cds-tabs, ibm-tabs", inputs: ["position", "cacheActive", "followFocus", "isNavigation", "ariaLabel", "ariaLabelledby", "type", "theme", "skeleton"] }, { kind: "component", type: i4$1.Tab, selector: "cds-tab, ibm-tab", inputs: ["heading", "title", "context", "active", "disabled", "tabIndex", "id", "cacheActive"], outputs: ["selected"] }, { kind: "component", type: i4.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title"] }, { kind: "component", type: WidgetDashboardContentComponent, selector: "valtimo-widget-dashboard-content", inputs: ["widgetData", "dashboard"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
633
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetDashboardComponent, deps: [{ token: DashboardService }, { token: WidgetApiService }], target: i0.ɵɵFactoryTarget.Component }); }
634
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: WidgetDashboardComponent, selector: "valtimo-widget-dashboard", ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div *ngIf=\"dashboards$ | async as dashboards\" class=\"dashboards-container\">\n <valtimo-no-results\n *ngIf=\"!dashboards.length\"\n [title]=\"'dashboard.noDashboards' | translate\"\n [description]=\"'dashboard.noDashboardsDescription' | translate\"\n illustration=\"valtimo-layout/img/no-dashboards.svg\"\n ></valtimo-no-results>\n\n <div *ngIf=\"dashboards.length === 1\">\n <h4>{{ dashboards[0].title }}</h4>\n\n <valtimo-widget-dashboard-content\n [dashboard]=\"dashboards[0]\"\n [widgetData]=\"activeWidgetData$ | async\"\n ></valtimo-widget-dashboard-content>\n </div>\n\n <div *ngIf=\"dashboards.length > 1\">\n <cds-tabs>\n <cds-tab\n *ngFor=\"let dashboard of dashboards; trackBy: trackByIndex\"\n [heading]=\"dashboard.title\"\n (selected)=\"onTabSelected(dashboard.key)\"\n >\n <valtimo-widget-dashboard-content\n *ngIf=\"(selectedDashboardKey$ | async) === dashboard.key\"\n [dashboard]=\"dashboard\"\n [widgetData]=\"activeWidgetData$ | async\"\n ></valtimo-widget-dashboard-content>\n </cds-tab>\n </cds-tabs>\n </div>\n</div>\n", styles: [".dashboards-container .cds--tab-content{outline:0;padding:0}.dashboards-container .valtimo-no-results,.widget-container .valtimo-no-results{flex-wrap:wrap;align-items:flex-start;align-content:center;flex-direction:column;gap:16px!important}.dashboards-container .valtimo-no-results__content,.widget-container .valtimo-no-results__content{gap:16px!important;max-width:500px;line-height:20px}.dashboards-container .valtimo-no-results img,.widget-container .valtimo-no-results img{padding-left:0!important}.dashboards-container .valtimo-no-results span,.dashboards-container .valtimo-no-results h4,.widget-container .valtimo-no-results span,.widget-container .valtimo-no-results h4{width:100%!important}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.Tabs, selector: "cds-tabs, ibm-tabs", inputs: ["position", "cacheActive", "followFocus", "isNavigation", "ariaLabel", "ariaLabelledby", "type", "theme", "skeleton"] }, { kind: "component", type: i5.Tab, selector: "cds-tab, ibm-tab", inputs: ["heading", "title", "context", "active", "disabled", "tabIndex", "id", "cacheActive"], outputs: ["selected"] }, { kind: "component", type: i1$1.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "component", type: WidgetDashboardContentComponent, selector: "valtimo-widget-dashboard-content", inputs: ["widgetData", "dashboard"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
642
635
  }
643
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetDashboardComponent, decorators: [{
636
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetDashboardComponent, decorators: [{
644
637
  type: Component,
645
- args: [{ selector: 'valtimo-widget-dashboard', encapsulation: ViewEncapsulation.None, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div *ngIf=\"dashboards$ | async as dashboards\" class=\"dashboards-container\">\n <valtimo-no-results\n *ngIf=\"!dashboards.length\"\n [title]=\"'dashboard.noDashboards' | translate\"\n ></valtimo-no-results>\n\n <div *ngIf=\"dashboards.length === 1\">\n <h4>{{ dashboards[0].title }}</h4>\n\n <valtimo-widget-dashboard-content\n [dashboard]=\"dashboards[0]\"\n [widgetData]=\"activeWidgetData$ | async\"\n ></valtimo-widget-dashboard-content>\n </div>\n\n <div *ngIf=\"dashboards.length > 1\">\n <cds-tabs>\n <cds-tab\n *ngFor=\"let dashboard of dashboards; trackBy: trackByIndex\"\n [heading]=\"dashboard.title\"\n (selected)=\"onTabSelected(dashboard.key)\"\n >\n <valtimo-widget-dashboard-content\n [dashboard]=\"dashboard\"\n [widgetData]=\"activeWidgetData$ | async\"\n ></valtimo-widget-dashboard-content>\n </cds-tab>\n </cds-tabs>\n </div>\n</div>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.dashboards-container .cds--tab-content{outline:0;padding:0}\n"] }]
646
- }], ctorParameters: function () { return [{ type: DashboardService }, { type: WidgetApiService }]; } });
638
+ args: [{ selector: 'valtimo-widget-dashboard', encapsulation: ViewEncapsulation.None, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div *ngIf=\"dashboards$ | async as dashboards\" class=\"dashboards-container\">\n <valtimo-no-results\n *ngIf=\"!dashboards.length\"\n [title]=\"'dashboard.noDashboards' | translate\"\n [description]=\"'dashboard.noDashboardsDescription' | translate\"\n illustration=\"valtimo-layout/img/no-dashboards.svg\"\n ></valtimo-no-results>\n\n <div *ngIf=\"dashboards.length === 1\">\n <h4>{{ dashboards[0].title }}</h4>\n\n <valtimo-widget-dashboard-content\n [dashboard]=\"dashboards[0]\"\n [widgetData]=\"activeWidgetData$ | async\"\n ></valtimo-widget-dashboard-content>\n </div>\n\n <div *ngIf=\"dashboards.length > 1\">\n <cds-tabs>\n <cds-tab\n *ngFor=\"let dashboard of dashboards; trackBy: trackByIndex\"\n [heading]=\"dashboard.title\"\n (selected)=\"onTabSelected(dashboard.key)\"\n >\n <valtimo-widget-dashboard-content\n *ngIf=\"(selectedDashboardKey$ | async) === dashboard.key\"\n [dashboard]=\"dashboard\"\n [widgetData]=\"activeWidgetData$ | async\"\n ></valtimo-widget-dashboard-content>\n </cds-tab>\n </cds-tabs>\n </div>\n</div>\n", styles: [".dashboards-container .cds--tab-content{outline:0;padding:0}.dashboards-container .valtimo-no-results,.widget-container .valtimo-no-results{flex-wrap:wrap;align-items:flex-start;align-content:center;flex-direction:column;gap:16px!important}.dashboards-container .valtimo-no-results__content,.widget-container .valtimo-no-results__content{gap:16px!important;max-width:500px;line-height:20px}.dashboards-container .valtimo-no-results img,.widget-container .valtimo-no-results img{padding-left:0!important}.dashboards-container .valtimo-no-results span,.dashboards-container .valtimo-no-results h4,.widget-container .valtimo-no-results span,.widget-container .valtimo-no-results h4{width:100%!important}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
639
+ }], ctorParameters: () => [{ type: DashboardService }, { type: WidgetApiService }] });
647
640
 
648
641
  /*
649
- * Copyright 2015-2023 Ritense BV, the Netherlands.
642
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
650
643
  *
651
644
  * Licensed under EUPL, Version 1.2 (the "License");
652
645
  * you may not use this file except in compliance with the License.
@@ -669,11 +662,11 @@ const routes = [
669
662
  },
670
663
  ];
671
664
  class DashboardRoutingModule {
672
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DashboardRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
673
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DashboardRoutingModule, imports: [CommonModule, i2.RouterModule], exports: [RouterModule] }); }
674
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DashboardRoutingModule, imports: [CommonModule, RouterModule.forChild(routes), RouterModule] }); }
665
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DashboardRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
666
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.3", ngImport: i0, type: DashboardRoutingModule, imports: [CommonModule, i2.RouterModule], exports: [RouterModule] }); }
667
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DashboardRoutingModule, imports: [CommonModule, RouterModule.forChild(routes), RouterModule] }); }
675
668
  }
676
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DashboardRoutingModule, decorators: [{
669
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DashboardRoutingModule, decorators: [{
677
670
  type: NgModule,
678
671
  args: [{
679
672
  declarations: [],
@@ -683,7 +676,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
683
676
  }] });
684
677
 
685
678
  /*
686
- * Copyright 2015-2023 Ritense BV, the Netherlands.
679
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
687
680
  *
688
681
  * Licensed under EUPL, Version 1.2 (the "License");
689
682
  * you may not use this file except in compliance with the License.
@@ -704,18 +697,18 @@ class WidgetTranslatePipe {
704
697
  transform(translateKey, key) {
705
698
  return this.widgetTranslationService.translate(translateKey, key);
706
699
  }
707
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetTranslatePipe, deps: [{ token: WidgetTranslationService }], target: i0.ɵɵFactoryTarget.Pipe }); }
708
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: WidgetTranslatePipe, name: "widgetTranslate" }); }
700
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetTranslatePipe, deps: [{ token: WidgetTranslationService }], target: i0.ɵɵFactoryTarget.Pipe }); }
701
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.3", ngImport: i0, type: WidgetTranslatePipe, name: "widgetTranslate" }); }
709
702
  }
710
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetTranslatePipe, decorators: [{
703
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetTranslatePipe, decorators: [{
711
704
  type: Pipe,
712
705
  args: [{
713
706
  name: 'widgetTranslate',
714
707
  }]
715
- }], ctorParameters: function () { return [{ type: WidgetTranslationService }]; } });
708
+ }], ctorParameters: () => [{ type: WidgetTranslationService }] });
716
709
 
717
710
  /*
718
- * Copyright 2015-2023 Ritense BV, the Netherlands.
711
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
719
712
  *
720
713
  * Licensed under EUPL, Version 1.2 (the "License");
721
714
  * you may not use this file except in compliance with the License.
@@ -730,11 +723,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
730
723
  * limitations under the License.
731
724
  */
732
725
  class WidgetTranslatePipeModule {
733
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetTranslatePipeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
734
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: WidgetTranslatePipeModule, declarations: [WidgetTranslatePipe], imports: [TranslateModule], exports: [WidgetTranslatePipe] }); }
735
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetTranslatePipeModule, imports: [TranslateModule] }); }
726
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetTranslatePipeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
727
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.3", ngImport: i0, type: WidgetTranslatePipeModule, declarations: [WidgetTranslatePipe], imports: [TranslateModule], exports: [WidgetTranslatePipe] }); }
728
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetTranslatePipeModule, imports: [TranslateModule] }); }
736
729
  }
737
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetTranslatePipeModule, decorators: [{
730
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: WidgetTranslatePipeModule, decorators: [{
738
731
  type: NgModule,
739
732
  args: [{
740
733
  imports: [TranslateModule],
@@ -744,7 +737,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
744
737
  }] });
745
738
 
746
739
  /*
747
- * Copyright 2015-2023 Ritense BV, the Netherlands.
740
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
748
741
  *
749
742
  * Licensed under EUPL, Version 1.2 (the "License");
750
743
  * you may not use this file except in compliance with the License.
@@ -760,7 +753,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
760
753
  */
761
754
 
762
755
  /*
763
- * Copyright 2015-2023 Ritense BV, the Netherlands.
756
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
764
757
  *
765
758
  * Licensed under EUPL, Version 1.2 (the "License");
766
759
  * you may not use this file except in compliance with the License.
@@ -776,7 +769,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
776
769
  */
777
770
 
778
771
  /*
779
- * Copyright 2015-2023 Ritense BV, the Netherlands.
772
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
780
773
  *
781
774
  * Licensed under EUPL, Version 1.2 (the "License");
782
775
  * you may not use this file except in compliance with the License.
@@ -795,12 +788,12 @@ function HttpLoaderFactory(httpClient) {
795
788
  return new TranslateHttpLoader(httpClient);
796
789
  }
797
790
  class DashboardModule {
798
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DashboardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
799
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DashboardModule, declarations: [DashboardComponent, WidgetDashboardComponent, WidgetDashboardContentComponent], imports: [CommonModule,
791
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DashboardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
792
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.3", ngImport: i0, type: DashboardModule, declarations: [DashboardComponent, WidgetDashboardComponent, WidgetDashboardContentComponent], imports: [CommonModule,
800
793
  DashboardRoutingModule,
801
794
  WidgetModule,
802
795
  ListModule,
803
- BpmnJsDiagramModule, i1$1.TranslateModule, AlertModule,
796
+ BpmnJsDiagramModule, i3$1.TranslateModule, AlertModule,
804
797
  TaskModule,
805
798
  SpinnerModule,
806
799
  TabsModule,
@@ -808,7 +801,7 @@ class DashboardModule {
808
801
  WidgetTranslatePipeModule,
809
802
  LoadingModule,
810
803
  CarbonListModule], exports: [DashboardComponent, WidgetDashboardComponent] }); }
811
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DashboardModule, providers: [
804
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DashboardModule, providers: [
812
805
  { provide: DISPLAY_TYPE_TOKEN, useValue: null, multi: true },
813
806
  { provide: DATA_SOURCE_TOKEN, useValue: null, multi: true },
814
807
  ], imports: [CommonModule,
@@ -832,7 +825,7 @@ class DashboardModule {
832
825
  LoadingModule,
833
826
  CarbonListModule] }); }
834
827
  }
835
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DashboardModule, decorators: [{
828
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DashboardModule, decorators: [{
836
829
  type: NgModule,
837
830
  args: [{
838
831
  declarations: [DashboardComponent, WidgetDashboardComponent, WidgetDashboardContentComponent],
@@ -867,95 +860,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
867
860
  }] });
868
861
 
869
862
  /*
870
- * Copyright 2015-2023 Ritense BV, the Netherlands.
871
- *
872
- * Licensed under EUPL, Version 1.2 (the "License");
873
- * you may not use this file except in compliance with the License.
874
- * You may obtain a copy of the License at
875
- *
876
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
877
- *
878
- * Unless required by applicable law or agreed to in writing, software
879
- * distributed under the License is distributed on an "AS IS" basis,
880
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
881
- * See the License for the specific language governing permissions and
882
- * limitations under the License.
883
- */
884
- class TestConfigurationComponent {
885
- set disabled(disabledValue) {
886
- if (disabledValue) {
887
- this.form.disable();
888
- }
889
- else {
890
- this.form.enable();
891
- }
892
- }
893
- get value() {
894
- return this.form.get('value');
895
- }
896
- get total() {
897
- return this.form.get('total');
898
- }
899
- set prefillConfiguration(configurationValue) {
900
- if (configurationValue) {
901
- this.value.setValue(configurationValue.value);
902
- this.total.setValue(configurationValue.total);
903
- }
904
- }
905
- constructor(fb) {
906
- this.fb = fb;
907
- this.form = this.fb.group({
908
- value: this.fb.control(null, [Validators.required]),
909
- total: this.fb.control(null, [Validators.required]),
910
- });
911
- this.configurationEvent = new EventEmitter();
912
- this._subscriptions = new Subscription();
913
- }
914
- ngOnInit() {
915
- this.openFormSubscription();
916
- }
917
- ngOnDestroy() {
918
- this._subscriptions.unsubscribe();
919
- }
920
- openFormSubscription() {
921
- this._subscriptions.add(this.form.valueChanges.pipe(startWith(this.form.value)).subscribe(formValue => {
922
- this.configurationEvent.emit({ valid: this.form.valid, data: formValue });
923
- }));
924
- }
925
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TestConfigurationComponent, deps: [{ token: i1$3.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
926
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TestConfigurationComponent, selector: "ng-component", inputs: { dataSourceKey: "dataSourceKey", disabled: "disabled", prefillConfiguration: "prefillConfiguration" }, outputs: { configurationEvent: "configurationEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form [formGroup]=\"form\">\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'valueHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'valueHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalid]=\"value.dirty && value.invalid\"\n >\n {{ 'value' | widgetTranslate: dataSourceKey | async }}\n\n <input\n cdsText\n formControlName=\"value\"\n [invalid]=\"value.dirty && value.invalid\"\n type=\"number\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'totalHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'totalHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalid]=\"total.dirty && total.invalid\"\n >\n {{ 'total' | widgetTranslate: dataSourceKey | async }}\n\n <input\n cdsText\n formControlName=\"total\"\n [invalid]=\"total.dirty && total.invalid\"\n type=\"number\"\n />\n </cds-label>\n </div>\n</form>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4$1.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i4$1.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: WidgetTranslatePipe, name: "widgetTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
927
- }
928
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TestConfigurationComponent, decorators: [{
929
- type: Component,
930
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form [formGroup]=\"form\">\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'valueHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'valueHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalid]=\"value.dirty && value.invalid\"\n >\n {{ 'value' | widgetTranslate: dataSourceKey | async }}\n\n <input\n cdsText\n formControlName=\"value\"\n [invalid]=\"value.dirty && value.invalid\"\n type=\"number\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'totalHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'totalHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalid]=\"total.dirty && total.invalid\"\n >\n {{ 'total' | widgetTranslate: dataSourceKey | async }}\n\n <input\n cdsText\n formControlName=\"total\"\n [invalid]=\"total.dirty && total.invalid\"\n type=\"number\"\n />\n </cds-label>\n </div>\n</form>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
931
- }], ctorParameters: function () { return [{ type: i1$3.FormBuilder }]; }, propDecorators: { dataSourceKey: [{
932
- type: Input
933
- }], disabled: [{
934
- type: Input
935
- }], prefillConfiguration: [{
936
- type: Input
937
- }], configurationEvent: [{
938
- type: Output
939
- }] } });
940
-
941
- /*
942
- * Copyright 2015-2023 Ritense BV, the Netherlands.
943
- *
944
- * Licensed under EUPL, Version 1.2 (the "License");
945
- * you may not use this file except in compliance with the License.
946
- * You may obtain a copy of the License at
947
- *
948
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
949
- *
950
- * Unless required by applicable law or agreed to in writing, software
951
- * distributed under the License is distributed on an "AS IS" basis,
952
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
953
- * See the License for the specific language governing permissions and
954
- * limitations under the License.
955
- */
956
-
957
- /*
958
- * Copyright 2015-2023 Ritense BV, the Netherlands.
863
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
959
864
  *
960
865
  * Licensed under EUPL, Version 1.2 (the "License");
961
866
  * you may not use this file except in compliance with the License.
@@ -971,7 +876,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
971
876
  */
972
877
 
973
878
  /*
974
- * Copyright 2015-2023 Ritense BV, the Netherlands.
879
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
975
880
  *
976
881
  * Licensed under EUPL, Version 1.2 (the "License");
977
882
  * you may not use this file except in compliance with the License.
@@ -987,7 +892,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
987
892
  */
988
893
 
989
894
  /*
990
- * Copyright 2015-2023 Ritense BV, the Netherlands.
895
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
991
896
  *
992
897
  * Licensed under EUPL, Version 1.2 (the "License");
993
898
  * you may not use this file except in compliance with the License.
@@ -1001,9 +906,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1001
906
  * See the License for the specific language governing permissions and
1002
907
  * limitations under the License.
1003
908
  */
909
+ var Operator;
910
+ (function (Operator) {
911
+ Operator["NOT_EQUAL_TO"] = "!=";
912
+ Operator["EQUAL_TO"] = "==";
913
+ Operator["GREATER_THAN"] = ">";
914
+ Operator["GREATER_THAN_OR_EQUAL_TO"] = ">=";
915
+ Operator["LESS_THAN"] = "<";
916
+ Operator["LESS_THAN_OR_EQUAL_TO"] = "<=";
917
+ })(Operator || (Operator = {}));
1004
918
 
1005
919
  /*
1006
- * Copyright 2015-2023 Ritense BV, the Netherlands.
920
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1007
921
  *
1008
922
  * Licensed under EUPL, Version 1.2 (the "License");
1009
923
  * you may not use this file except in compliance with the License.
@@ -1017,36 +931,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1017
931
  * See the License for the specific language governing permissions and
1018
932
  * limitations under the License.
1019
933
  */
1020
- const testDataSourceSpecification = {
1021
- dataSourceKey: 'test',
1022
- configurationComponent: TestConfigurationComponent,
1023
- translations: {
1024
- de: {
1025
- title: 'Test-Datenquelle',
1026
- value: 'Wert (erforderlich)',
1027
- valueHelperText: 'Der im Widget angezeigte Wert',
1028
- total: 'Gesamtwert (erforderlich)',
1029
- totalHelperText: 'Der im Widget angezeigte Gesamtwert',
1030
- },
1031
- en: {
1032
- title: 'Test data source',
1033
- value: 'Value (required)',
1034
- valueHelperText: 'The value displayed in the widget',
1035
- total: 'Total value (required)',
1036
- totalHelperText: 'The total value displayed in the widget',
1037
- },
1038
- nl: {
1039
- title: 'Testdatabron',
1040
- value: 'Waarde (vereist)',
1041
- valueHelperText: 'De waarde die wordt weergegeven in de widget',
1042
- total: 'Totaalwaarde (vereist)',
1043
- totalHelperText: 'De totaalwaarde die wordt weergegeven in de widget',
1044
- },
1045
- },
1046
- };
1047
934
 
1048
935
  /*
1049
- * Copyright 2015-2023 Ritense BV, the Netherlands.
936
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1050
937
  *
1051
938
  * Licensed under EUPL, Version 1.2 (the "License");
1052
939
  * you may not use this file except in compliance with the License.
@@ -1060,23 +947,9 @@ const testDataSourceSpecification = {
1060
947
  * See the License for the specific language governing permissions and
1061
948
  * limitations under the License.
1062
949
  */
1063
- class TestDataSourceModule {
1064
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TestDataSourceModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1065
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: TestDataSourceModule, declarations: [TestConfigurationComponent], imports: [CommonModule, ReactiveFormsModule, WidgetTranslatePipeModule, InputModule], exports: [TestConfigurationComponent] }); }
1066
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TestDataSourceModule, providers: [{ provide: DATA_SOURCE_TOKEN, useValue: testDataSourceSpecification, multi: true }], imports: [CommonModule, ReactiveFormsModule, WidgetTranslatePipeModule, InputModule] }); }
1067
- }
1068
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TestDataSourceModule, decorators: [{
1069
- type: NgModule,
1070
- args: [{
1071
- declarations: [TestConfigurationComponent],
1072
- imports: [CommonModule, ReactiveFormsModule, WidgetTranslatePipeModule, InputModule],
1073
- exports: [TestConfigurationComponent],
1074
- providers: [{ provide: DATA_SOURCE_TOKEN, useValue: testDataSourceSpecification, multi: true }],
1075
- }]
1076
- }] });
1077
950
 
1078
951
  /*
1079
- * Copyright 2015-2023 Ritense BV, the Netherlands.
952
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1080
953
  *
1081
954
  * Licensed under EUPL, Version 1.2 (the "License");
1082
955
  * you may not use this file except in compliance with the License.
@@ -1092,7 +965,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1092
965
  */
1093
966
 
1094
967
  /*
1095
- * Copyright 2015-2023 Ritense BV, the Netherlands.
968
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1096
969
  *
1097
970
  * Licensed under EUPL, Version 1.2 (the "License");
1098
971
  * you may not use this file except in compliance with the License.
@@ -1106,18 +979,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1106
979
  * See the License for the specific language governing permissions and
1107
980
  * limitations under the License.
1108
981
  */
1109
- var Operator;
1110
- (function (Operator) {
1111
- Operator["NOT_EQUAL_TO"] = "!=";
1112
- Operator["EQUAL_TO"] = "==";
1113
- Operator["GREATER_THAN"] = ">";
1114
- Operator["GREATER_THAN_OR_EQUAL_TO"] = ">=";
1115
- Operator["LESS_THAN"] = "<";
1116
- Operator["LESS_THAN_OR_EQUAL_TO"] = "<=";
1117
- })(Operator || (Operator = {}));
982
+ var WidgetSeverity;
983
+ (function (WidgetSeverity) {
984
+ WidgetSeverity["BLACK"] = "valtimo-severity__black";
985
+ WidgetSeverity["GREEN"] = "valtimo-severity__green";
986
+ WidgetSeverity["YELLOW"] = "valtimo-severity__yellow";
987
+ WidgetSeverity["ORANGE"] = "valtimo-severity__orange";
988
+ WidgetSeverity["RED"] = "valtimo-severity__red";
989
+ })(WidgetSeverity || (WidgetSeverity = {}));
1118
990
 
1119
991
  /*
1120
- * Copyright 2015-2023 Ritense BV, the Netherlands.
992
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1121
993
  *
1122
994
  * Licensed under EUPL, Version 1.2 (the "License");
1123
995
  * you may not use this file except in compliance with the License.
@@ -1133,7 +1005,7 @@ var Operator;
1133
1005
  */
1134
1006
 
1135
1007
  /*
1136
- * Copyright 2015-2023 Ritense BV, the Netherlands.
1008
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1137
1009
  *
1138
1010
  * Licensed under EUPL, Version 1.2 (the "License");
1139
1011
  * you may not use this file except in compliance with the License.
@@ -1252,13 +1124,13 @@ class CaseCountConfigurationComponent {
1252
1124
  });
1253
1125
  }));
1254
1126
  }
1255
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CaseCountConfigurationComponent, deps: [{ token: i1$3.FormBuilder }, { token: i2$2.DocumentService }, { token: i1$1.TranslateService }, { token: WidgetTranslationService }], target: i0.ɵɵFactoryTarget.Component }); }
1256
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CaseCountConfigurationComponent, selector: "ng-component", inputs: { dataSourceKey: "dataSourceKey", disabled: "disabled", prefillConfiguration: "prefillConfiguration" }, outputs: { configurationEvent: "configurationEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form\n class=\"case-count-configuration-form\"\n *ngIf=\"{documentItems: documentItems$ | async, operatorItems: operatorItems$} as obs\"\n [formGroup]=\"form\"\n>\n <div class=\"form__element\">\n <cds-dropdown\n [appendInline]=\"true\"\n formControlName=\"documentDefinition\"\n [helperText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalid]=\"documentDefinition.dirty && documentDefinition.invalid\"\n [label]=\"'documentDefinition' | widgetTranslate: dataSourceKey | async\"\n (selected)=\"documentDefinitionSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs?.documentItems || []\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <div class=\"form__element conditions-multi-input\">\n <cds-label\n [helperText]=\"'conditionsHelperText' | widgetTranslate: dataSourceKey | async\"\n class=\"conditions-label\"\n >{{ 'conditions' | widgetTranslate: dataSourceKey | async }}</cds-label\n >\n <valtimo-carbon-multi-input\n [addRowText]=\"'addCondition' | widgetTranslate: dataSourceKey | async\"\n [defaultValues]=\"defaultConditionValues$ | async\"\n [dropdownColumnTitle]=\"'operator' | widgetTranslate: dataSourceKey | async\"\n [dropdownItems]=\"operatorItems$ | async\"\n [fullWidth]=\"true\"\n [initialAmountOfRows]=\"0\"\n [keyColumnTitle]=\"'path' | widgetTranslate: dataSourceKey | async\"\n [minimumAmountOfRows]=\"0\"\n [valueColumnTitle]=\"'value' | widgetTranslate: dataSourceKey | async\"\n type=\"keyDropdownValue\"\n (allValuesValidEvent)=\"onAllConditionsValid($event)\"\n (valueChange)=\"conditionsValueChange($event)\"\n carbonTheme=\"white\"\n ></valtimo-carbon-multi-input>\n </div>\n</form>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */::ng-deep .case-count-configuration-form .conditions-label{margin-bottom:16px}::ng-deep .case-count-configuration-form .conditions-multi-input .cds--form__helper-text{font-style:italic}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4$1.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "component", type: i4$1.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i4$1.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i4.CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: ["name", "title", "titleTranslationKey", "type", "initialAmountOfRows", "minimumAmountOfRows", "maxRows", "addRowText", "addRowTranslationKey", "deleteRowText", "deleteRowTranslationKey", "disabled", "defaultValues", "margin", "tooltip", "required", "keyColumnTitle", "valueColumnTitle", "dropdownColumnTitle", "hideDeleteButton", "hideAddButton", "dropdownItems", "dropdownWidth", "fullWidth"], outputs: ["valueChange", "allValuesValidEvent"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: WidgetTranslatePipe, name: "widgetTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1127
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CaseCountConfigurationComponent, deps: [{ token: i1$3.FormBuilder }, { token: i2$2.DocumentService }, { token: i3$1.TranslateService }, { token: WidgetTranslationService }], target: i0.ɵɵFactoryTarget.Component }); }
1128
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: CaseCountConfigurationComponent, selector: "ng-component", inputs: { dataSourceKey: "dataSourceKey", disabled: "disabled", prefillConfiguration: "prefillConfiguration" }, outputs: { configurationEvent: "configurationEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form\n class=\"case-count-configuration-form\"\n *ngIf=\"{documentItems: documentItems$ | async, operatorItems: operatorItems$} as obs\"\n [formGroup]=\"form\"\n>\n <div class=\"form__element\">\n <cds-dropdown\n [appendInline]=\"true\"\n formControlName=\"documentDefinition\"\n [helperText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalid]=\"documentDefinition.dirty && documentDefinition.invalid\"\n [label]=\"'documentDefinition' | widgetTranslate: dataSourceKey | async\"\n (selected)=\"documentDefinitionSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs?.documentItems || []\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <div class=\"form__element conditions-multi-input\">\n <cds-label\n [helperText]=\"'conditionsHelperText' | widgetTranslate: dataSourceKey | async\"\n class=\"conditions-label\"\n >{{ 'conditions' | widgetTranslate: dataSourceKey | async }}</cds-label\n >\n <valtimo-carbon-multi-input\n [addRowText]=\"'addCondition' | widgetTranslate: dataSourceKey | async\"\n [defaultValues]=\"defaultConditionValues$ | async\"\n [dropdownColumnTitle]=\"'operator' | widgetTranslate: dataSourceKey | async\"\n [dropdownItems]=\"operatorItems$ | async\"\n [fullWidth]=\"true\"\n [initialAmountOfRows]=\"0\"\n [keyColumnTitle]=\"'path' | widgetTranslate: dataSourceKey | async\"\n [minimumAmountOfRows]=\"0\"\n [valueColumnTitle]=\"'value' | widgetTranslate: dataSourceKey | async\"\n type=\"keyDropdownValue\"\n (allValuesValidEvent)=\"onAllConditionsValid($event)\"\n (valueChange)=\"conditionsValueChange($event)\"\n ></valtimo-carbon-multi-input>\n </div>\n</form>\n", styles: ["::ng-deep .case-count-configuration-form .conditions-label{margin-bottom:16px}::ng-deep .case-count-configuration-form .conditions-multi-input .cds--form__helper-text{font-style:italic}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "component", type: i5.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i1$1.CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: ["name", "title", "titleTranslationKey", "type", "arbitraryValueAmount", "arbitraryAmountTitles", "initialAmountOfRows", "minimumAmountOfRows", "maxRows", "addRowText", "addRowTranslationKey", "deleteRowText", "deleteRowTranslationKey", "disabled", "defaultValues", "margin", "tooltip", "required", "keyColumnTitle", "valueColumnTitle", "dropdownColumnTitle", "hideDeleteButton", "hideAddButton", "dropdownItems", "dropdownWidth", "fullWidth", "carbonTheme"], outputs: ["valueChange", "allValuesValidEvent"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: WidgetTranslatePipe, name: "widgetTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1257
1129
  }
1258
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CaseCountConfigurationComponent, decorators: [{
1130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CaseCountConfigurationComponent, decorators: [{
1259
1131
  type: Component,
1260
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form\n class=\"case-count-configuration-form\"\n *ngIf=\"{documentItems: documentItems$ | async, operatorItems: operatorItems$} as obs\"\n [formGroup]=\"form\"\n>\n <div class=\"form__element\">\n <cds-dropdown\n [appendInline]=\"true\"\n formControlName=\"documentDefinition\"\n [helperText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalid]=\"documentDefinition.dirty && documentDefinition.invalid\"\n [label]=\"'documentDefinition' | widgetTranslate: dataSourceKey | async\"\n (selected)=\"documentDefinitionSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs?.documentItems || []\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <div class=\"form__element conditions-multi-input\">\n <cds-label\n [helperText]=\"'conditionsHelperText' | widgetTranslate: dataSourceKey | async\"\n class=\"conditions-label\"\n >{{ 'conditions' | widgetTranslate: dataSourceKey | async }}</cds-label\n >\n <valtimo-carbon-multi-input\n [addRowText]=\"'addCondition' | widgetTranslate: dataSourceKey | async\"\n [defaultValues]=\"defaultConditionValues$ | async\"\n [dropdownColumnTitle]=\"'operator' | widgetTranslate: dataSourceKey | async\"\n [dropdownItems]=\"operatorItems$ | async\"\n [fullWidth]=\"true\"\n [initialAmountOfRows]=\"0\"\n [keyColumnTitle]=\"'path' | widgetTranslate: dataSourceKey | async\"\n [minimumAmountOfRows]=\"0\"\n [valueColumnTitle]=\"'value' | widgetTranslate: dataSourceKey | async\"\n type=\"keyDropdownValue\"\n (allValuesValidEvent)=\"onAllConditionsValid($event)\"\n (valueChange)=\"conditionsValueChange($event)\"\n carbonTheme=\"white\"\n ></valtimo-carbon-multi-input>\n </div>\n</form>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */::ng-deep .case-count-configuration-form .conditions-label{margin-bottom:16px}::ng-deep .case-count-configuration-form .conditions-multi-input .cds--form__helper-text{font-style:italic}\n"] }]
1261
- }], ctorParameters: function () { return [{ type: i1$3.FormBuilder }, { type: i2$2.DocumentService }, { type: i1$1.TranslateService }, { type: WidgetTranslationService }]; }, propDecorators: { dataSourceKey: [{
1132
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form\n class=\"case-count-configuration-form\"\n *ngIf=\"{documentItems: documentItems$ | async, operatorItems: operatorItems$} as obs\"\n [formGroup]=\"form\"\n>\n <div class=\"form__element\">\n <cds-dropdown\n [appendInline]=\"true\"\n formControlName=\"documentDefinition\"\n [helperText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalid]=\"documentDefinition.dirty && documentDefinition.invalid\"\n [label]=\"'documentDefinition' | widgetTranslate: dataSourceKey | async\"\n (selected)=\"documentDefinitionSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs?.documentItems || []\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <div class=\"form__element conditions-multi-input\">\n <cds-label\n [helperText]=\"'conditionsHelperText' | widgetTranslate: dataSourceKey | async\"\n class=\"conditions-label\"\n >{{ 'conditions' | widgetTranslate: dataSourceKey | async }}</cds-label\n >\n <valtimo-carbon-multi-input\n [addRowText]=\"'addCondition' | widgetTranslate: dataSourceKey | async\"\n [defaultValues]=\"defaultConditionValues$ | async\"\n [dropdownColumnTitle]=\"'operator' | widgetTranslate: dataSourceKey | async\"\n [dropdownItems]=\"operatorItems$ | async\"\n [fullWidth]=\"true\"\n [initialAmountOfRows]=\"0\"\n [keyColumnTitle]=\"'path' | widgetTranslate: dataSourceKey | async\"\n [minimumAmountOfRows]=\"0\"\n [valueColumnTitle]=\"'value' | widgetTranslate: dataSourceKey | async\"\n type=\"keyDropdownValue\"\n (allValuesValidEvent)=\"onAllConditionsValid($event)\"\n (valueChange)=\"conditionsValueChange($event)\"\n ></valtimo-carbon-multi-input>\n </div>\n</form>\n", styles: ["::ng-deep .case-count-configuration-form .conditions-label{margin-bottom:16px}::ng-deep .case-count-configuration-form .conditions-multi-input .cds--form__helper-text{font-style:italic}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
1133
+ }], ctorParameters: () => [{ type: i1$3.FormBuilder }, { type: i2$2.DocumentService }, { type: i3$1.TranslateService }, { type: WidgetTranslationService }], propDecorators: { dataSourceKey: [{
1262
1134
  type: Input
1263
1135
  }], disabled: [{
1264
1136
  type: Input
@@ -1269,7 +1141,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1269
1141
  }] } });
1270
1142
 
1271
1143
  /*
1272
- * Copyright 2015-2023 Ritense BV, the Netherlands.
1144
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1273
1145
  *
1274
1146
  * Licensed under EUPL, Version 1.2 (the "License");
1275
1147
  * you may not use this file except in compliance with the License.
@@ -1285,7 +1157,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1285
1157
  */
1286
1158
 
1287
1159
  /*
1288
- * Copyright 2015-2023 Ritense BV, the Netherlands.
1160
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1289
1161
  *
1290
1162
  * Licensed under EUPL, Version 1.2 (the "License");
1291
1163
  * you may not use this file except in compliance with the License.
@@ -1301,7 +1173,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1301
1173
  */
1302
1174
 
1303
1175
  /*
1304
- * Copyright 2015-2023 Ritense BV, the Netherlands.
1176
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1305
1177
  *
1306
1178
  * Licensed under EUPL, Version 1.2 (the "License");
1307
1179
  * you may not use this file except in compliance with the License.
@@ -1315,17 +1187,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1315
1187
  * See the License for the specific language governing permissions and
1316
1188
  * limitations under the License.
1317
1189
  */
1318
- const caseCountDataSourceSpecification = {
1319
- dataSourceKey: 'case-count',
1320
- configurationComponent: CaseCountConfigurationComponent,
1321
- translations: {
1322
- de: {
1323
- title: 'Fallzahl',
1324
- documentDefinition: 'Falltyp (erforderlich)',
1325
- documentDefinitionHelperText: 'Der Falltyp, für den die Anzahl abgerufen wird',
1326
- '!=': 'Nicht gleichzusetzen mit',
1327
- '==': 'Gleich',
1328
- '>': 'Größer als',
1190
+
1191
+ /*
1192
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1193
+ *
1194
+ * Licensed under EUPL, Version 1.2 (the "License");
1195
+ * you may not use this file except in compliance with the License.
1196
+ * You may obtain a copy of the License at
1197
+ *
1198
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1199
+ *
1200
+ * Unless required by applicable law or agreed to in writing, software
1201
+ * distributed under the License is distributed on an "AS IS" basis,
1202
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1203
+ * See the License for the specific language governing permissions and
1204
+ * limitations under the License.
1205
+ */
1206
+
1207
+ /*
1208
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1209
+ *
1210
+ * Licensed under EUPL, Version 1.2 (the "License");
1211
+ * you may not use this file except in compliance with the License.
1212
+ * You may obtain a copy of the License at
1213
+ *
1214
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1215
+ *
1216
+ * Unless required by applicable law or agreed to in writing, software
1217
+ * distributed under the License is distributed on an "AS IS" basis,
1218
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1219
+ * See the License for the specific language governing permissions and
1220
+ * limitations under the License.
1221
+ */
1222
+ const caseCountDataSourceSpecification = {
1223
+ dataSourceKey: 'case-count',
1224
+ configurationComponent: CaseCountConfigurationComponent,
1225
+ translations: {
1226
+ de: {
1227
+ title: 'Fallzahl',
1228
+ documentDefinition: 'Falltyp (erforderlich)',
1229
+ documentDefinitionHelperText: 'Der Falltyp, für den die Anzahl abgerufen wird',
1230
+ '!=': 'Nicht gleichzusetzen mit',
1231
+ '==': 'Gleich',
1232
+ '>': 'Größer als',
1329
1233
  '>=': 'Größer als oder gleich wie',
1330
1234
  '<': 'Weniger als',
1331
1235
  '<=': 'Gleich oder kleiner als',
@@ -1333,7 +1237,7 @@ const caseCountDataSourceSpecification = {
1333
1237
  operator: 'Operator',
1334
1238
  value: 'Wert',
1335
1239
  conditions: 'Bedingungen',
1336
- conditionsHelperText: "Geben Sie optionale Bedingungen zum Abrufen der Anzahl der Fälle für den ausgewählten Falltyp an. Zum Beispiel: 'case:createdBy', 'Gleich', 'test@test.com'.",
1240
+ conditionsHelperText: "Geben Sie optionale Bedingungen zum Abrufen der Anzahl der Fälle für den ausgewählten Falltyp an. Zum Beispiel: 'case:createdBy', 'Gleich', 'test@test.com'. Zum Vergleichen mit leeren Werten kann als Wert '${null}' eingegeben werden. Zum Vergleichen mit dem aktuellen Datum kann als Wert '${localDateTimeNow}' eingegeben werden. Damit wird beispielsweise auch folgende Logik unterstützt: '${localDateTimeNow.minusWeeks(2)}'.",
1337
1241
  addCondition: 'Bedingung hinzufügen',
1338
1242
  },
1339
1243
  en: {
@@ -1350,7 +1254,7 @@ const caseCountDataSourceSpecification = {
1350
1254
  operator: 'Operator',
1351
1255
  value: 'Value',
1352
1256
  conditions: 'Conditions',
1353
- conditionsHelperText: "Specify optional conditions for retrieving the number of cases for the selected case type. For example: 'case:createdBy', 'Equal to', 'test@test.com'.",
1257
+ conditionsHelperText: "Specify optional conditions for retrieving the number of cases for the selected case type. For example: 'case:createdBy', 'Equal to', 'test@test.com'. To compare with empty values, '${null}' can be entered as a value. To compare with the current date, '${localDateTimeNow}' can be entered as a value. This also supports, for example, the following logic: '${localDateTimeNow.minusWeeks(2)}'.",
1354
1258
  addCondition: 'Add condition',
1355
1259
  },
1356
1260
  nl: {
@@ -1367,14 +1271,14 @@ const caseCountDataSourceSpecification = {
1367
1271
  operator: 'Operator',
1368
1272
  value: 'Waarde',
1369
1273
  conditions: 'Condities',
1370
- conditionsHelperText: "Geef optionele condities op voor het ophalen van het aantal zaken voor het geselecteerde zaaktype. Bijvoorbeeld: 'case:createdBy', 'Gelijk aan', 'test@test.com'.",
1274
+ conditionsHelperText: "Geef optionele condities op voor het ophalen van het aantal zaken voor het geselecteerde zaaktype. Bijvoorbeeld: 'case:createdBy', 'Gelijk aan', 'test@test.com'. Voor het vergelijken met lege waardes kan '${null}' ingevuld worden als waarde. Voor het vergelijken met de huidige datum kan '${localDateTimeNow}' ingevuld worden als waarde. Deze ondersteunt ook bijvoorbeeld de volgende logica: '${localDateTimeNow.minusWeeks(2)}'.",
1371
1275
  addCondition: 'Conditie toevoegen',
1372
1276
  },
1373
1277
  },
1374
1278
  };
1375
1279
 
1376
1280
  /*
1377
- * Copyright 2015-2023 Ritense BV, the Netherlands.
1281
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1378
1282
  *
1379
1283
  * Licensed under EUPL, Version 1.2 (the "License");
1380
1284
  * you may not use this file except in compliance with the License.
@@ -1389,14 +1293,14 @@ const caseCountDataSourceSpecification = {
1389
1293
  * limitations under the License.
1390
1294
  */
1391
1295
  class CaseCountDataSourceModule {
1392
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CaseCountDataSourceModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1393
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: CaseCountDataSourceModule, declarations: [CaseCountConfigurationComponent], imports: [CommonModule,
1296
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CaseCountDataSourceModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1297
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.3", ngImport: i0, type: CaseCountDataSourceModule, declarations: [CaseCountConfigurationComponent], imports: [CommonModule,
1394
1298
  ReactiveFormsModule,
1395
1299
  WidgetTranslatePipeModule,
1396
1300
  InputModule,
1397
1301
  DropdownModule,
1398
1302
  CarbonMultiInputModule], exports: [CaseCountConfigurationComponent] }); }
1399
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CaseCountDataSourceModule, providers: [
1303
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CaseCountDataSourceModule, providers: [
1400
1304
  { provide: DATA_SOURCE_TOKEN, useValue: caseCountDataSourceSpecification, multi: true },
1401
1305
  ], imports: [CommonModule,
1402
1306
  ReactiveFormsModule,
@@ -1405,7 +1309,7 @@ class CaseCountDataSourceModule {
1405
1309
  DropdownModule,
1406
1310
  CarbonMultiInputModule] }); }
1407
1311
  }
1408
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CaseCountDataSourceModule, decorators: [{
1312
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CaseCountDataSourceModule, decorators: [{
1409
1313
  type: NgModule,
1410
1314
  args: [{
1411
1315
  declarations: [CaseCountConfigurationComponent],
@@ -1425,23 +1329,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1425
1329
  }] });
1426
1330
 
1427
1331
  /*
1428
- * Copyright 2015-2023 Ritense BV, the Netherlands.
1429
- *
1430
- * Licensed under EUPL, Version 1.2 (the "License");
1431
- * you may not use this file except in compliance with the License.
1432
- * You may obtain a copy of the License at
1433
- *
1434
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1435
- *
1436
- * Unless required by applicable law or agreed to in writing, software
1437
- * distributed under the License is distributed on an "AS IS" basis,
1438
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1439
- * See the License for the specific language governing permissions and
1440
- * limitations under the License.
1441
- */
1442
-
1443
- /*
1444
- * Copyright 2015-2023 Ritense BV, the Netherlands.
1332
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1445
1333
  *
1446
1334
  * Licensed under EUPL, Version 1.2 (the "License");
1447
1335
  * you may not use this file except in compliance with the License.
@@ -1457,7 +1345,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1457
1345
  */
1458
1346
 
1459
1347
  /*
1460
- * Copyright 2015-2023 Ritense BV, the Netherlands.
1348
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1461
1349
  *
1462
1350
  * Licensed under EUPL, Version 1.2 (the "License");
1463
1351
  * you may not use this file except in compliance with the License.
@@ -1471,9 +1359,180 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1471
1359
  * See the License for the specific language governing permissions and
1472
1360
  * limitations under the License.
1473
1361
  */
1362
+ class CaseCountsConfigurationComponent {
1363
+ set disabled(disabledValue) {
1364
+ if (disabledValue) {
1365
+ this.form.disable();
1366
+ }
1367
+ else {
1368
+ this.form.enable();
1369
+ }
1370
+ }
1371
+ get queryItems() {
1372
+ return this.form.get('queryItems');
1373
+ }
1374
+ get queryItemsValue$() {
1375
+ return this.queryItems.valueChanges.pipe(startWith(this.queryItems.value || []));
1376
+ }
1377
+ get queryItemsList$() {
1378
+ return this.queryItemsValue$.pipe(map(queryItemsValue => queryItemsValue.map(() => null)), distinctUntilChanged((previous, current) => isEqual(previous, current)));
1379
+ }
1380
+ get documentDefinition() {
1381
+ return this.form.get('documentDefinition');
1382
+ }
1383
+ get formDisabled() {
1384
+ return this.form.disabled;
1385
+ }
1386
+ set prefillConfiguration(configurationValue) {
1387
+ if (!configurationValue)
1388
+ return;
1389
+ this.documentDefinitionSelected({
1390
+ item: {
1391
+ content: configurationValue.documentDefinition,
1392
+ },
1393
+ });
1394
+ this.documentDefinition.patchValue(configurationValue.documentDefinition);
1395
+ this.queryItems.patchValue(this.queryItemsToMultiInputValues(configurationValue.queryItems));
1396
+ }
1397
+ constructor(fb, documentService, translateService, widgetTranslationService, iconService) {
1398
+ this.fb = fb;
1399
+ this.documentService = documentService;
1400
+ this.translateService = translateService;
1401
+ this.widgetTranslationService = widgetTranslationService;
1402
+ this.iconService = iconService;
1403
+ this._EMPTY_QUERY_ITEM_VALUE = {
1404
+ label: '',
1405
+ queryConditions: [{ key: '', value: '', dropdown: '' }],
1406
+ };
1407
+ this.form = this.fb.group({
1408
+ documentDefinition: this.fb.control(null, [Validators.required]),
1409
+ queryItems: this.fb.control([this._EMPTY_QUERY_ITEM_VALUE, this._EMPTY_QUERY_ITEM_VALUE], [this.queryItemsValidator()]),
1410
+ });
1411
+ this.configurationEvent = new EventEmitter();
1412
+ this._selectedDocumentDefinition$ = new BehaviorSubject('');
1413
+ this.documentItems$ = combineLatest([
1414
+ this.documentService.getAllDefinitions(),
1415
+ this._selectedDocumentDefinition$,
1416
+ ]).pipe(map(([documentDefinitions, selectedDocumentDefintion]) => documentDefinitions.content.map(definition => ({
1417
+ content: definition.id.name,
1418
+ selected: definition.id.name === selectedDocumentDefintion,
1419
+ }))));
1420
+ this._OPERATORS = [
1421
+ Operator.NOT_EQUAL_TO,
1422
+ Operator.EQUAL_TO,
1423
+ Operator.GREATER_THAN,
1424
+ Operator.GREATER_THAN_OR_EQUAL_TO,
1425
+ Operator.LESS_THAN,
1426
+ Operator.LESS_THAN_OR_EQUAL_TO,
1427
+ ];
1428
+ this.operatorItems$ = this.translateService
1429
+ .stream('key')
1430
+ .pipe(map(() => this._OPERATORS.map(operator => ({
1431
+ id: operator,
1432
+ content: this.widgetTranslationService.instant(operator, this.dataSourceKey),
1433
+ selected: false,
1434
+ }))));
1435
+ this._subscriptions = new Subscription();
1436
+ this.iconService.registerAll([Add16, TrashCan16]);
1437
+ }
1438
+ ngOnInit() {
1439
+ this.openFormSubscription();
1440
+ }
1441
+ ngOnDestroy() {
1442
+ this._subscriptions.unsubscribe();
1443
+ }
1444
+ documentDefinitionSelected(documentDefinitionItem) {
1445
+ if (!documentDefinitionItem) {
1446
+ return;
1447
+ }
1448
+ this._selectedDocumentDefinition$.next(documentDefinitionItem?.item?.content);
1449
+ }
1450
+ conditionsValueChange(index, values) {
1451
+ const currentQueryItemsValues = this.queryItems.value;
1452
+ if (isEqual(currentQueryItemsValues[index].queryConditions, values))
1453
+ return;
1454
+ this.queryItems.patchValue(currentQueryItemsValues.map((item, itemIndex) => itemIndex === index ? { ...item, queryConditions: values } : item));
1455
+ }
1456
+ labelValueChange(index, value) {
1457
+ const currentQueryItemsValues = this.queryItems.value;
1458
+ if (currentQueryItemsValues[index].label === value)
1459
+ return;
1460
+ this.queryItems.patchValue(currentQueryItemsValues.map((item, itemIndex) => itemIndex === index ? { ...item, label: value } : item));
1461
+ }
1462
+ addQueryItem() {
1463
+ const currentQueryItems = this.queryItems.value;
1464
+ this.queryItems.patchValue([...currentQueryItems, this._EMPTY_QUERY_ITEM_VALUE]);
1465
+ }
1466
+ deleteCount(i) {
1467
+ const currentQueryItems = this.queryItems.value;
1468
+ this.queryItems.patchValue(currentQueryItems.filter((_, index) => index !== i));
1469
+ }
1470
+ openFormSubscription() {
1471
+ this._subscriptions.add(this.form.valueChanges.pipe(startWith(this.form.value)).subscribe(formValue => {
1472
+ this.configurationEvent.emit({
1473
+ valid: this.form.valid,
1474
+ data: {
1475
+ ...formValue,
1476
+ queryItems: this.multiInputValuesToQueryItems(formValue.queryItems),
1477
+ },
1478
+ });
1479
+ }));
1480
+ }
1481
+ queryItemsToMultiInputValues(queryItems) {
1482
+ return queryItems.map(queryItem => ({
1483
+ ...queryItem,
1484
+ queryConditions: queryItem.queryConditions.map(condition => ({
1485
+ key: condition.queryPath,
1486
+ dropdown: condition.queryOperator,
1487
+ value: condition.queryValue,
1488
+ })),
1489
+ }));
1490
+ }
1491
+ multiInputValuesToQueryItems(multiInputValues) {
1492
+ return multiInputValues.map(queryItem => ({
1493
+ ...queryItem,
1494
+ queryConditions: queryItem.queryConditions.map(condition => ({
1495
+ queryPath: condition.key,
1496
+ queryOperator: condition.dropdown,
1497
+ queryValue: condition.value,
1498
+ })),
1499
+ }));
1500
+ }
1501
+ queryItemsValidator() {
1502
+ return (control) => {
1503
+ const queryItems = control.value;
1504
+ const validQueryItems = queryItems.filter(item => {
1505
+ const validLabel = !!item.label;
1506
+ const validConditions = item.queryConditions.filter(condition => !!condition.value && !!condition.key && !!condition.dropdown);
1507
+ return (validLabel &&
1508
+ validConditions.length > 0 &&
1509
+ item.queryConditions.length === validConditions.length);
1510
+ });
1511
+ return validQueryItems.length > 1 && validQueryItems.length === queryItems.length
1512
+ ? null
1513
+ : {
1514
+ invalidQueryItems: 'invalid',
1515
+ };
1516
+ };
1517
+ }
1518
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CaseCountsConfigurationComponent, deps: [{ token: i1$3.FormBuilder }, { token: i2$2.DocumentService }, { token: i3$1.TranslateService }, { token: WidgetTranslationService }, { token: i5.IconService }], target: i0.ɵɵFactoryTarget.Component }); }
1519
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.3", type: CaseCountsConfigurationComponent, selector: "ng-component", inputs: { dataSourceKey: "dataSourceKey", disabled: "disabled", prefillConfiguration: "prefillConfiguration" }, outputs: { configurationEvent: "configurationEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form\n class=\"case-counts-configuration-form\"\n *ngIf=\"{\n documentItems: documentItems$ | async,\n operatorItems: operatorItems$,\n queryItemsValue: queryItemsValue$ | async\n } as obs\"\n [formGroup]=\"form\"\n>\n <div class=\"form__element\">\n <cds-dropdown\n [appendInline]=\"true\"\n formControlName=\"documentDefinition\"\n [helperText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalid]=\"documentDefinition.dirty && documentDefinition.invalid\"\n [label]=\"'documentDefinition' | widgetTranslate: dataSourceKey | async\"\n (selected)=\"documentDefinitionSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs?.documentItems || []\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <cds-label class=\"conditions__label\">{{\n 'counts' | widgetTranslate: dataSourceKey | async\n }}</cds-label>\n\n <p class=\"conditions__helper-text cds--form__helper-text\">\n {{ 'countsHelperText' | widgetTranslate: dataSourceKey | async }}\n </p>\n\n @for (_ of queryItemsList$ | async; track $index; let i = $index) {\n <cds-tile class=\"count-tile\" cdsLayer=\"1\">\n <div class=\"count-tile__input\">\n <v-input\n [title]=\"'countTitle' | widgetTranslate: dataSourceKey | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.queryItemsValue[i]?.label\"\n [disabled]=\"formDisabled\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n (valueChange)=\"labelValueChange(i, $event)\"\n >\n </v-input>\n\n <valtimo-carbon-multi-input\n [disabled]=\"formDisabled\"\n [addRowText]=\"'addCondition' | widgetTranslate: dataSourceKey | async\"\n [defaultValues]=\"obs.queryItemsValue[i]?.queryConditions\"\n [dropdownColumnTitle]=\"'operator' | widgetTranslate: dataSourceKey | async\"\n [dropdownItems]=\"operatorItems$ | async\"\n [fullWidth]=\"true\"\n [initialAmountOfRows]=\"1\"\n [keyColumnTitle]=\"'path' | widgetTranslate: dataSourceKey | async\"\n [minimumAmountOfRows]=\"1\"\n [valueColumnTitle]=\"'value' | widgetTranslate: dataSourceKey | async\"\n type=\"keyDropdownValue\"\n (valueChange)=\"conditionsValueChange(i, $event)\"\n ></valtimo-carbon-multi-input>\n </div>\n\n <div class=\"count-tile__delete-button\">\n <cds-icon-button\n [disabled]=\"formDisabled || i < 2\"\n (click)=\"deleteCount(i)\"\n kind=\"danger\"\n size=\"sm\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </cds-icon-button>\n </div>\n </cds-tile>\n }\n\n <button\n class=\"add-count-button\"\n cdsButton=\"primary\"\n [disabled]=\"formDisabled\"\n (click)=\"addQueryItem()\"\n >\n {{ 'Aantal toevoegen' }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n</form>\n", styles: ["::ng-deep .case-counts-configuration-form .conditions__label{display:flex;margin-bottom:8px}::ng-deep .case-counts-configuration-form .conditions__helper-text{font-style:italic;display:flex;margin-bottom:16px}::ng-deep .case-counts-configuration-form .count-tile{display:flex;flex-direction:row;gap:32px;justify-content:space-between;margin-bottom:16px}::ng-deep .case-counts-configuration-form .count-tile__input{width:100%}::ng-deep .case-counts-configuration-form .add-count-button{margin-bottom:16px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i1$1.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "smallMargin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$", "carbonTheme", "placeholder"], outputs: ["valueChange"] }, { kind: "component", type: i5.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i1$1.CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: ["name", "title", "titleTranslationKey", "type", "arbitraryValueAmount", "arbitraryAmountTitles", "initialAmountOfRows", "minimumAmountOfRows", "maxRows", "addRowText", "addRowTranslationKey", "deleteRowText", "deleteRowTranslationKey", "disabled", "defaultValues", "margin", "tooltip", "required", "keyColumnTitle", "valueColumnTitle", "dropdownColumnTitle", "hideDeleteButton", "hideAddButton", "dropdownItems", "dropdownWidth", "fullWidth", "carbonTheme"], outputs: ["valueChange", "allValuesValidEvent"] }, { kind: "directive", type: i5.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i5.IconButton, selector: "cds-icon-button, ibm-icon-button", inputs: ["buttonNgClass", "buttonAttributes", "buttonId", "kind", "size", "type", "isExpressive", "disabled", "description"], outputs: ["click", "focus", "blur", "tooltipClick"] }, { kind: "component", type: i5.Tile, selector: "cds-tile, ibm-tile", inputs: ["theme"] }, { kind: "directive", type: i5.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "directive", type: i5.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: WidgetTranslatePipe, name: "widgetTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1520
+ }
1521
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CaseCountsConfigurationComponent, decorators: [{
1522
+ type: Component,
1523
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form\n class=\"case-counts-configuration-form\"\n *ngIf=\"{\n documentItems: documentItems$ | async,\n operatorItems: operatorItems$,\n queryItemsValue: queryItemsValue$ | async\n } as obs\"\n [formGroup]=\"form\"\n>\n <div class=\"form__element\">\n <cds-dropdown\n [appendInline]=\"true\"\n formControlName=\"documentDefinition\"\n [helperText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalid]=\"documentDefinition.dirty && documentDefinition.invalid\"\n [label]=\"'documentDefinition' | widgetTranslate: dataSourceKey | async\"\n (selected)=\"documentDefinitionSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs?.documentItems || []\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <cds-label class=\"conditions__label\">{{\n 'counts' | widgetTranslate: dataSourceKey | async\n }}</cds-label>\n\n <p class=\"conditions__helper-text cds--form__helper-text\">\n {{ 'countsHelperText' | widgetTranslate: dataSourceKey | async }}\n </p>\n\n @for (_ of queryItemsList$ | async; track $index; let i = $index) {\n <cds-tile class=\"count-tile\" cdsLayer=\"1\">\n <div class=\"count-tile__input\">\n <v-input\n [title]=\"'countTitle' | widgetTranslate: dataSourceKey | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.queryItemsValue[i]?.label\"\n [disabled]=\"formDisabled\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n (valueChange)=\"labelValueChange(i, $event)\"\n >\n </v-input>\n\n <valtimo-carbon-multi-input\n [disabled]=\"formDisabled\"\n [addRowText]=\"'addCondition' | widgetTranslate: dataSourceKey | async\"\n [defaultValues]=\"obs.queryItemsValue[i]?.queryConditions\"\n [dropdownColumnTitle]=\"'operator' | widgetTranslate: dataSourceKey | async\"\n [dropdownItems]=\"operatorItems$ | async\"\n [fullWidth]=\"true\"\n [initialAmountOfRows]=\"1\"\n [keyColumnTitle]=\"'path' | widgetTranslate: dataSourceKey | async\"\n [minimumAmountOfRows]=\"1\"\n [valueColumnTitle]=\"'value' | widgetTranslate: dataSourceKey | async\"\n type=\"keyDropdownValue\"\n (valueChange)=\"conditionsValueChange(i, $event)\"\n ></valtimo-carbon-multi-input>\n </div>\n\n <div class=\"count-tile__delete-button\">\n <cds-icon-button\n [disabled]=\"formDisabled || i < 2\"\n (click)=\"deleteCount(i)\"\n kind=\"danger\"\n size=\"sm\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </cds-icon-button>\n </div>\n </cds-tile>\n }\n\n <button\n class=\"add-count-button\"\n cdsButton=\"primary\"\n [disabled]=\"formDisabled\"\n (click)=\"addQueryItem()\"\n >\n {{ 'Aantal toevoegen' }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n</form>\n", styles: ["::ng-deep .case-counts-configuration-form .conditions__label{display:flex;margin-bottom:8px}::ng-deep .case-counts-configuration-form .conditions__helper-text{font-style:italic;display:flex;margin-bottom:16px}::ng-deep .case-counts-configuration-form .count-tile{display:flex;flex-direction:row;gap:32px;justify-content:space-between;margin-bottom:16px}::ng-deep .case-counts-configuration-form .count-tile__input{width:100%}::ng-deep .case-counts-configuration-form .add-count-button{margin-bottom:16px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
1524
+ }], ctorParameters: () => [{ type: i1$3.FormBuilder }, { type: i2$2.DocumentService }, { type: i3$1.TranslateService }, { type: WidgetTranslationService }, { type: i5.IconService }], propDecorators: { dataSourceKey: [{
1525
+ type: Input
1526
+ }], disabled: [{
1527
+ type: Input
1528
+ }], prefillConfiguration: [{
1529
+ type: Input
1530
+ }], configurationEvent: [{
1531
+ type: Output
1532
+ }] } });
1474
1533
 
1475
1534
  /*
1476
- * Copyright 2015-2023 Ritense BV, the Netherlands.
1535
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1477
1536
  *
1478
1537
  * Licensed under EUPL, Version 1.2 (the "License");
1479
1538
  * you may not use this file except in compliance with the License.
@@ -1489,7 +1548,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1489
1548
  */
1490
1549
 
1491
1550
  /*
1492
- * Copyright 2015-2023 Ritense BV, the Netherlands.
1551
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1493
1552
  *
1494
1553
  * Licensed under EUPL, Version 1.2 (the "License");
1495
1554
  * you may not use this file except in compliance with the License.
@@ -1503,23 +1562,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1503
1562
  * See the License for the specific language governing permissions and
1504
1563
  * limitations under the License.
1505
1564
  */
1506
- class BarChartDisplayComponent {
1507
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BarChartDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1508
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BarChartDisplayComponent, selector: "valtimo-bar-chart-display", inputs: { displayTypeKey: "displayTypeKey", data: "data", displayTypeProperties: "displayTypeProperties" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\nbar chart works\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */:host{display:flex;padding:20px;width:100%;height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1509
- }
1510
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BarChartDisplayComponent, decorators: [{
1511
- type: Component,
1512
- args: [{ selector: 'valtimo-bar-chart-display', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\nbar chart works\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */:host{display:flex;padding:20px;width:100%;height:100%}\n"] }]
1513
- }], propDecorators: { displayTypeKey: [{
1514
- type: Input
1515
- }], data: [{
1516
- type: Input
1517
- }], displayTypeProperties: [{
1518
- type: Input
1519
- }] } });
1520
1565
 
1521
1566
  /*
1522
- * Copyright 2015-2023 Ritense BV, the Netherlands.
1567
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1523
1568
  *
1524
1569
  * Licensed under EUPL, Version 1.2 (the "License");
1525
1570
  * you may not use this file except in compliance with the License.
@@ -1535,7 +1580,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1535
1580
  */
1536
1581
 
1537
1582
  /*
1538
- * Copyright 2015-2023 Ritense BV, the Netherlands.
1583
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1539
1584
  *
1540
1585
  * Licensed under EUPL, Version 1.2 (the "License");
1541
1586
  * you may not use this file except in compliance with the License.
@@ -1551,7 +1596,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1551
1596
  */
1552
1597
 
1553
1598
  /*
1554
- * Copyright 2015-2023 Ritense BV, the Netherlands.
1599
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1555
1600
  *
1556
1601
  * Licensed under EUPL, Version 1.2 (the "License");
1557
1602
  * you may not use this file except in compliance with the License.
@@ -1565,27 +1610,69 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1565
1610
  * See the License for the specific language governing permissions and
1566
1611
  * limitations under the License.
1567
1612
  */
1568
- const barChartSpecification = {
1569
- displayTypeKey: 'bar-chart',
1570
- displayComponent: BarChartDisplayComponent,
1571
- width: 1,
1572
- height: 2,
1613
+ const caseCountsDataSourceSpecification = {
1614
+ dataSourceKey: 'case-counts',
1615
+ configurationComponent: CaseCountsConfigurationComponent,
1573
1616
  translations: {
1574
- nl: {
1575
- title: 'Staafdiagram',
1617
+ de: {
1618
+ title: 'Mehrere Fallanzahllen',
1619
+ documentDefinition: 'Falltyp (erforderlich)',
1620
+ documentDefinitionHelperText: 'Der Falltyp, für den die Anzahllen abgeruft wirden',
1621
+ '!=': 'Nicht gleichzusetzen mit',
1622
+ '==': 'Gleich',
1623
+ '>': 'Größer als',
1624
+ '>=': 'Größer als oder gleich wie',
1625
+ '<': 'Weniger als',
1626
+ '<=': 'Gleich oder kleiner als',
1627
+ path: 'Pfad',
1628
+ operator: 'Operator',
1629
+ value: 'Wert',
1630
+ counts: 'Anzahllen',
1631
+ countsHelperText: "Geben Sie eine oder mehrere Bedingungen für mindestens zwei Anzahllen an. Zum Beispiel: 'case:createdBy', 'Gleich', 'test@test.com'. Zum Vergleichen mit leeren Werten kann als Wert '${null}' eingegeben werden. Zum Vergleichen mit dem aktuellen Datum kann als Wert '${localDateTimeNow}' eingegeben werden. Damit wird beispielsweise auch folgende Logik unterstützt: '${localDateTimeNow.minusWeeks(2)}'.",
1632
+ addCondition: 'Bedingung hinzufügen',
1633
+ countTitle: 'Anzahltitel',
1576
1634
  },
1577
1635
  en: {
1578
- title: 'Bar chart',
1636
+ title: 'Multiple case counts',
1637
+ documentDefinition: 'Case type (required)',
1638
+ documentDefinitionHelperText: 'The case type for which the counts are retrieved',
1639
+ '!=': 'Not equal to',
1640
+ '==': 'Equal to',
1641
+ '>': 'Greater than',
1642
+ '>=': 'Greater than or equal to',
1643
+ '<': 'Less than',
1644
+ '<=': 'Less than or equal to',
1645
+ path: 'Path (required)',
1646
+ operator: 'Operator',
1647
+ value: 'Value',
1648
+ counts: 'Counts',
1649
+ countsHelperText: "Specify one or more conditions for each count that should be displayed. For example: 'case:createdBy', 'Equal to', 'test@test.com'. Configure at least two counts and at least one condition per count.",
1650
+ addCondition: 'Add condition',
1651
+ countTitle: 'Count title',
1579
1652
  },
1580
- de: {
1581
- title: 'Balkendiagramm',
1653
+ nl: {
1654
+ title: 'Meerdere dossieraantallen',
1655
+ documentDefinition: 'Dossiertype (vereist)',
1656
+ documentDefinitionHelperText: 'Het dossiertype waarvoor de aantallen worden opgehaald',
1657
+ '!=': 'Niet gelijk aan',
1658
+ '==': 'Gelijk aan',
1659
+ '>': 'Groter dan',
1660
+ '>=': 'Groter dan of gelijk aan',
1661
+ '<': 'Minder dan',
1662
+ '<=': 'Minder dan of gelijk aan',
1663
+ path: 'Pad',
1664
+ operator: 'Operator',
1665
+ value: 'Waarde',
1666
+ counts: 'Aantallen',
1667
+ countsHelperText: "Geef een of meer condities op voor een minimum van twee aantallen. Bijvoorbeeld: 'case:createdBy', 'Gelijk aan', 'test@test.com'. Voor het vergelijken met lege waardes kan '${null}' ingevuld worden als waarde. Voor het vergelijken met de huidige datum kan '${localDateTimeNow}' ingevuld worden als waarde. Deze ondersteunt ook bijvoorbeeld de volgende logica: '${localDateTimeNow.minusWeeks(2)}'.",
1668
+ addCondition: 'Conditie toevoegen',
1669
+ countTitle: 'Aantaltitel',
1582
1670
  },
1583
1671
  },
1584
- requiredDataFeatures: [],
1585
1672
  };
1586
1673
 
1587
1674
  /*
1588
- * Copyright 2015-2023 Ritense BV, the Netherlands.
1675
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1589
1676
  *
1590
1677
  * Licensed under EUPL, Version 1.2 (the "License");
1591
1678
  * you may not use this file except in compliance with the License.
@@ -1599,23 +1686,59 @@ const barChartSpecification = {
1599
1686
  * See the License for the specific language governing permissions and
1600
1687
  * limitations under the License.
1601
1688
  */
1602
- class BarChartModule {
1603
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BarChartModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1604
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: BarChartModule, declarations: [BarChartDisplayComponent], imports: [CommonModule], exports: [BarChartDisplayComponent] }); }
1605
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BarChartModule, providers: [{ provide: DISPLAY_TYPE_TOKEN, useValue: barChartSpecification, multi: true }], imports: [CommonModule] }); }
1689
+ class CaseCountsDataSourceModule {
1690
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CaseCountsDataSourceModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1691
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.3", ngImport: i0, type: CaseCountsDataSourceModule, declarations: [CaseCountsConfigurationComponent], imports: [CommonModule,
1692
+ ReactiveFormsModule,
1693
+ WidgetTranslatePipeModule,
1694
+ InputModule$1,
1695
+ DropdownModule,
1696
+ CarbonMultiInputModule,
1697
+ InputModule$1,
1698
+ ButtonModule,
1699
+ TilesModule,
1700
+ LayerModule,
1701
+ IconModule], exports: [CaseCountsConfigurationComponent] }); }
1702
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CaseCountsDataSourceModule, providers: [
1703
+ { provide: DATA_SOURCE_TOKEN, useValue: caseCountsDataSourceSpecification, multi: true },
1704
+ ], imports: [CommonModule,
1705
+ ReactiveFormsModule,
1706
+ WidgetTranslatePipeModule,
1707
+ InputModule$1,
1708
+ DropdownModule,
1709
+ CarbonMultiInputModule,
1710
+ InputModule$1,
1711
+ ButtonModule,
1712
+ TilesModule,
1713
+ LayerModule,
1714
+ IconModule] }); }
1606
1715
  }
1607
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BarChartModule, decorators: [{
1716
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CaseCountsDataSourceModule, decorators: [{
1608
1717
  type: NgModule,
1609
1718
  args: [{
1610
- declarations: [BarChartDisplayComponent],
1611
- imports: [CommonModule],
1612
- exports: [BarChartDisplayComponent],
1613
- providers: [{ provide: DISPLAY_TYPE_TOKEN, useValue: barChartSpecification, multi: true }],
1719
+ declarations: [CaseCountsConfigurationComponent],
1720
+ imports: [
1721
+ CommonModule,
1722
+ ReactiveFormsModule,
1723
+ WidgetTranslatePipeModule,
1724
+ InputModule$1,
1725
+ DropdownModule,
1726
+ CarbonMultiInputModule,
1727
+ InputModule$1,
1728
+ ButtonModule,
1729
+ TilesModule,
1730
+ LayerModule,
1731
+ IconModule,
1732
+ ],
1733
+ exports: [CaseCountsConfigurationComponent],
1734
+ providers: [
1735
+ { provide: DATA_SOURCE_TOKEN, useValue: caseCountsDataSourceSpecification, multi: true },
1736
+ ],
1614
1737
  }]
1615
1738
  }] });
1616
1739
 
1617
1740
  /*
1618
- * Copyright 2015-2023 Ritense BV, the Netherlands.
1741
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1619
1742
  *
1620
1743
  * Licensed under EUPL, Version 1.2 (the "License");
1621
1744
  * you may not use this file except in compliance with the License.
@@ -1631,7 +1754,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1631
1754
  */
1632
1755
 
1633
1756
  /*
1634
- * Copyright 2015-2023 Ritense BV, the Netherlands.
1757
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1635
1758
  *
1636
1759
  * Licensed under EUPL, Version 1.2 (the "License");
1637
1760
  * you may not use this file except in compliance with the License.
@@ -1645,7 +1768,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1645
1768
  * See the License for the specific language governing permissions and
1646
1769
  * limitations under the License.
1647
1770
  */
1648
- class BigNumberConfigurationComponent {
1771
+ class CaseGroupByConfigurationComponent {
1772
+ get documentDefinition() {
1773
+ return this.form.get('documentDefinition');
1774
+ }
1775
+ get path() {
1776
+ return this.form.get('path');
1777
+ }
1778
+ get queryConditions() {
1779
+ return this.form.get('queryConditions');
1780
+ }
1781
+ get enum() {
1782
+ return this.form.get('enum');
1783
+ }
1784
+ get formDisabled() {
1785
+ return this.form.disabled;
1786
+ }
1787
+ get formValue$() {
1788
+ return this.form.valueChanges.pipe(startWith(this.form.value));
1789
+ }
1649
1790
  set disabled(disabledValue) {
1650
1791
  if (disabledValue) {
1651
1792
  this.form.disable();
@@ -1654,36 +1795,802 @@ class BigNumberConfigurationComponent {
1654
1795
  this.form.enable();
1655
1796
  }
1656
1797
  }
1657
- get title() {
1658
- return this.form.get('title');
1659
- }
1660
- get subtitle() {
1661
- return this.form.get('subtitle');
1662
- }
1663
- get label() {
1664
- return this.form.get('label');
1665
- }
1666
- get useKPI() {
1667
- return this.form.get('useKPI');
1668
- }
1669
- get lowSeverityThreshold() {
1670
- return this.form.get('lowSeverityThreshold');
1671
- }
1672
- get mediumSeverityThreshold() {
1673
- return this.form.get('mediumSeverityThreshold');
1674
- }
1675
- get highSeverityThreshold() {
1676
- return this.form.get('highSeverityThreshold');
1677
- }
1678
1798
  set prefillConfiguration(configurationValue) {
1679
- if (configurationValue) {
1680
- this.title.setValue(configurationValue.title || '');
1681
- this.subtitle.setValue(configurationValue.subtitle || '');
1799
+ if (!configurationValue)
1800
+ return;
1801
+ this.documentDefinitionSelected({
1802
+ item: {
1803
+ content: configurationValue.documentDefinition,
1804
+ },
1805
+ });
1806
+ this.queryConditions.patchValue(this.queryConditionsToMultiInputValues(configurationValue.queryConditions));
1807
+ this.enum.patchValue(this.enumToMultiInputValues(configurationValue.enum));
1808
+ this.path.patchValue(configurationValue.path);
1809
+ }
1810
+ constructor(fb, documentService, translateService, widgetTranslationService) {
1811
+ this.fb = fb;
1812
+ this.documentService = documentService;
1813
+ this.translateService = translateService;
1814
+ this.widgetTranslationService = widgetTranslationService;
1815
+ this.form = this.fb.group({
1816
+ documentDefinition: this.fb.control(null, [Validators.required]),
1817
+ path: this.fb.control(null, [Validators.required]),
1818
+ queryConditions: this.fb.control([], [this.queryConditionsValidator()]),
1819
+ enum: this.fb.control([], [this.enumValidator()]),
1820
+ });
1821
+ this._selectedDocumentDefinition$ = new BehaviorSubject('');
1822
+ this.documentItems$ = combineLatest([
1823
+ this.documentService.getAllDefinitions(),
1824
+ this._selectedDocumentDefinition$,
1825
+ ]).pipe(map(([documentDefinitions, selectedDocumentDefintion]) => documentDefinitions.content.map(definition => ({
1826
+ content: definition.id.name,
1827
+ selected: definition.id.name === selectedDocumentDefintion,
1828
+ }))));
1829
+ this._OPERATORS = [
1830
+ Operator.NOT_EQUAL_TO,
1831
+ Operator.EQUAL_TO,
1832
+ Operator.GREATER_THAN,
1833
+ Operator.GREATER_THAN_OR_EQUAL_TO,
1834
+ Operator.LESS_THAN,
1835
+ Operator.LESS_THAN_OR_EQUAL_TO,
1836
+ ];
1837
+ this.operatorItems$ = this.translateService
1838
+ .stream('key')
1839
+ .pipe(map(() => this._OPERATORS.map(operator => ({
1840
+ id: operator,
1841
+ content: this.widgetTranslationService.instant(operator, this.dataSourceKey),
1842
+ selected: false,
1843
+ }))));
1844
+ this.configurationEvent = new EventEmitter();
1845
+ this._subscriptions = new Subscription();
1846
+ }
1847
+ ngOnInit() {
1848
+ this.openFormSubscription();
1849
+ }
1850
+ ngOnDestroy() {
1851
+ this._subscriptions.unsubscribe();
1852
+ }
1853
+ documentDefinitionSelected(documentDefinitionItem) {
1854
+ if (!documentDefinitionItem) {
1855
+ return;
1856
+ }
1857
+ this._selectedDocumentDefinition$.next(documentDefinitionItem?.item?.content);
1858
+ this.documentDefinition.setValue(documentDefinitionItem?.item?.content);
1859
+ }
1860
+ conditionsValueChange(values) {
1861
+ if (!values)
1862
+ return;
1863
+ const currentValue = this.queryConditions.value;
1864
+ if (isEqual(values, currentValue))
1865
+ return;
1866
+ this.queryConditions.patchValue(values);
1867
+ }
1868
+ enumValueChange(values) {
1869
+ if (!values)
1870
+ return;
1871
+ const currentValue = this.enum.value;
1872
+ if (isEqual(values, currentValue))
1873
+ return;
1874
+ this.enum.patchValue(values);
1875
+ }
1876
+ openFormSubscription() {
1877
+ this._subscriptions.add(this.form.valueChanges.pipe(startWith(this.form.value)).subscribe(formValue => {
1878
+ this.configurationEvent.emit({
1879
+ valid: this.form.valid,
1880
+ data: {
1881
+ ...formValue,
1882
+ queryConditions: this.multiInputValuesToQueryConditions(formValue.queryConditions),
1883
+ enum: this.multiInputValuesToEnum(formValue.enum),
1884
+ },
1885
+ });
1886
+ }));
1887
+ }
1888
+ queryConditionsValidator() {
1889
+ return (control) => {
1890
+ const queryConditions = control.value;
1891
+ const validConditions = queryConditions.filter(condition => !!condition.value && !!condition.key && !!condition.dropdown);
1892
+ return validConditions.length === queryConditions.length
1893
+ ? null
1894
+ : {
1895
+ invalidQueryItems: 'invalid',
1896
+ };
1897
+ };
1898
+ }
1899
+ enumValidator() {
1900
+ return (control) => {
1901
+ const enumeration = control.value || [];
1902
+ const enumLength = enumeration.length;
1903
+ const validEnumKeysLength = enumeration.filter(entry => !!entry.key).length;
1904
+ const validEnumValuesLength = enumeration.filter(entry => !!entry.value).length;
1905
+ return enumLength === validEnumKeysLength && enumLength === validEnumValuesLength
1906
+ ? null
1907
+ : {
1908
+ invalidEnum: 'invalid',
1909
+ };
1910
+ };
1911
+ }
1912
+ enumToMultiInputValues(enumeration) {
1913
+ return Object.keys(enumeration || {}).reduce((acc, key) => [...acc, { key, value: enumeration[key] }], []);
1914
+ }
1915
+ multiInputValuesToEnum(values) {
1916
+ return (values || []).reduce((acc, curr) => ({ ...acc, [curr.key]: curr.value }), {});
1917
+ }
1918
+ queryConditionsToMultiInputValues(queryConditions) {
1919
+ return (queryConditions || []).map(condition => ({
1920
+ key: condition.queryPath,
1921
+ dropdown: condition.queryOperator,
1922
+ value: condition.queryValue,
1923
+ }));
1924
+ }
1925
+ multiInputValuesToQueryConditions(values) {
1926
+ return (values || []).map(condition => ({
1927
+ queryPath: condition.key,
1928
+ queryOperator: condition.dropdown,
1929
+ queryValue: condition.value,
1930
+ }));
1931
+ }
1932
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CaseGroupByConfigurationComponent, deps: [{ token: i1$3.FormBuilder }, { token: i2$2.DocumentService }, { token: i3$1.TranslateService }, { token: WidgetTranslationService }], target: i0.ɵɵFactoryTarget.Component }); }
1933
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: CaseGroupByConfigurationComponent, selector: "ng-component", inputs: { dataSourceKey: "dataSourceKey", disabled: "disabled", prefillConfiguration: "prefillConfiguration" }, outputs: { configurationEvent: "configurationEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form\n class=\"case-count-configuration-form\"\n *ngIf=\"{\n documentItems: documentItems$ | async,\n operatorItems: operatorItems$,\n formValue: formValue$ | async\n } as obs\"\n [formGroup]=\"form\"\n>\n <div class=\"form__element\">\n <cds-dropdown\n [appendInline]=\"true\"\n formControlName=\"documentDefinition\"\n [helperText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalid]=\"documentDefinition.dirty && documentDefinition.invalid\"\n [label]=\"'documentDefinition' | widgetTranslate: dataSourceKey | async\"\n (selected)=\"documentDefinitionSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs?.documentItems || []\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'pathHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'pathHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalid]=\"path.dirty && path.invalid\"\n >\n {{ 'path' | widgetTranslate: dataSourceKey | async }}\n\n <input cdsText formControlName=\"path\" [invalid]=\"path.dirty && path.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element conditions-multi-input\">\n <cds-label\n [helperText]=\"'conditionsHelperText' | widgetTranslate: dataSourceKey | async\"\n class=\"conditions-label\"\n >{{ 'conditions' | widgetTranslate: dataSourceKey | async }}</cds-label\n >\n <valtimo-carbon-multi-input\n [addRowText]=\"'addCondition' | widgetTranslate: dataSourceKey | async\"\n [defaultValues]=\"obs.formValue?.queryConditions\"\n [dropdownColumnTitle]=\"'operator' | widgetTranslate: dataSourceKey | async\"\n [dropdownItems]=\"operatorItems$ | async\"\n [fullWidth]=\"true\"\n [initialAmountOfRows]=\"0\"\n [keyColumnTitle]=\"'path' | widgetTranslate: dataSourceKey | async\"\n [minimumAmountOfRows]=\"0\"\n [valueColumnTitle]=\"'value' | widgetTranslate: dataSourceKey | async\"\n type=\"keyDropdownValue\"\n (valueChange)=\"conditionsValueChange($event)\"\n ></valtimo-carbon-multi-input>\n </div>\n\n <div class=\"form__element conditions-multi-input\">\n <cds-label\n [helperText]=\"'enumHelperText' | widgetTranslate: dataSourceKey | async\"\n class=\"conditions-label\"\n >{{ 'enum' | widgetTranslate: dataSourceKey | async }}</cds-label\n >\n <valtimo-carbon-multi-input\n [addRowText]=\"'addDisplay' | widgetTranslate: dataSourceKey | async\"\n [defaultValues]=\"obs.formValue?.enum\"\n [fullWidth]=\"true\"\n [initialAmountOfRows]=\"0\"\n [keyColumnTitle]=\"'value' | widgetTranslate: dataSourceKey | async\"\n [minimumAmountOfRows]=\"0\"\n [valueColumnTitle]=\"'displayValue' | widgetTranslate: dataSourceKey | async\"\n type=\"keyValue\"\n (valueChange)=\"enumValueChange($event)\"\n ></valtimo-carbon-multi-input>\n </div>\n</form>\n", styles: ["::ng-deep .case-count-configuration-form .conditions-label{margin-bottom:16px}::ng-deep .case-count-configuration-form .conditions-multi-input .cds--form__helper-text{font-style:italic}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i5.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "component", type: i5.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i1$1.CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: ["name", "title", "titleTranslationKey", "type", "arbitraryValueAmount", "arbitraryAmountTitles", "initialAmountOfRows", "minimumAmountOfRows", "maxRows", "addRowText", "addRowTranslationKey", "deleteRowText", "deleteRowTranslationKey", "disabled", "defaultValues", "margin", "tooltip", "required", "keyColumnTitle", "valueColumnTitle", "dropdownColumnTitle", "hideDeleteButton", "hideAddButton", "dropdownItems", "dropdownWidth", "fullWidth", "carbonTheme"], outputs: ["valueChange", "allValuesValidEvent"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: WidgetTranslatePipe, name: "widgetTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1934
+ }
1935
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CaseGroupByConfigurationComponent, decorators: [{
1936
+ type: Component,
1937
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form\n class=\"case-count-configuration-form\"\n *ngIf=\"{\n documentItems: documentItems$ | async,\n operatorItems: operatorItems$,\n formValue: formValue$ | async\n } as obs\"\n [formGroup]=\"form\"\n>\n <div class=\"form__element\">\n <cds-dropdown\n [appendInline]=\"true\"\n formControlName=\"documentDefinition\"\n [helperText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalid]=\"documentDefinition.dirty && documentDefinition.invalid\"\n [label]=\"'documentDefinition' | widgetTranslate: dataSourceKey | async\"\n (selected)=\"documentDefinitionSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs?.documentItems || []\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'pathHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'pathHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalid]=\"path.dirty && path.invalid\"\n >\n {{ 'path' | widgetTranslate: dataSourceKey | async }}\n\n <input cdsText formControlName=\"path\" [invalid]=\"path.dirty && path.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element conditions-multi-input\">\n <cds-label\n [helperText]=\"'conditionsHelperText' | widgetTranslate: dataSourceKey | async\"\n class=\"conditions-label\"\n >{{ 'conditions' | widgetTranslate: dataSourceKey | async }}</cds-label\n >\n <valtimo-carbon-multi-input\n [addRowText]=\"'addCondition' | widgetTranslate: dataSourceKey | async\"\n [defaultValues]=\"obs.formValue?.queryConditions\"\n [dropdownColumnTitle]=\"'operator' | widgetTranslate: dataSourceKey | async\"\n [dropdownItems]=\"operatorItems$ | async\"\n [fullWidth]=\"true\"\n [initialAmountOfRows]=\"0\"\n [keyColumnTitle]=\"'path' | widgetTranslate: dataSourceKey | async\"\n [minimumAmountOfRows]=\"0\"\n [valueColumnTitle]=\"'value' | widgetTranslate: dataSourceKey | async\"\n type=\"keyDropdownValue\"\n (valueChange)=\"conditionsValueChange($event)\"\n ></valtimo-carbon-multi-input>\n </div>\n\n <div class=\"form__element conditions-multi-input\">\n <cds-label\n [helperText]=\"'enumHelperText' | widgetTranslate: dataSourceKey | async\"\n class=\"conditions-label\"\n >{{ 'enum' | widgetTranslate: dataSourceKey | async }}</cds-label\n >\n <valtimo-carbon-multi-input\n [addRowText]=\"'addDisplay' | widgetTranslate: dataSourceKey | async\"\n [defaultValues]=\"obs.formValue?.enum\"\n [fullWidth]=\"true\"\n [initialAmountOfRows]=\"0\"\n [keyColumnTitle]=\"'value' | widgetTranslate: dataSourceKey | async\"\n [minimumAmountOfRows]=\"0\"\n [valueColumnTitle]=\"'displayValue' | widgetTranslate: dataSourceKey | async\"\n type=\"keyValue\"\n (valueChange)=\"enumValueChange($event)\"\n ></valtimo-carbon-multi-input>\n </div>\n</form>\n", styles: ["::ng-deep .case-count-configuration-form .conditions-label{margin-bottom:16px}::ng-deep .case-count-configuration-form .conditions-multi-input .cds--form__helper-text{font-style:italic}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
1938
+ }], ctorParameters: () => [{ type: i1$3.FormBuilder }, { type: i2$2.DocumentService }, { type: i3$1.TranslateService }, { type: WidgetTranslationService }], propDecorators: { dataSourceKey: [{
1939
+ type: Input
1940
+ }], disabled: [{
1941
+ type: Input
1942
+ }], prefillConfiguration: [{
1943
+ type: Input
1944
+ }], configurationEvent: [{
1945
+ type: Output
1946
+ }] } });
1947
+
1948
+ /*
1949
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1950
+ *
1951
+ * Licensed under EUPL, Version 1.2 (the "License");
1952
+ * you may not use this file except in compliance with the License.
1953
+ * You may obtain a copy of the License at
1954
+ *
1955
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1956
+ *
1957
+ * Unless required by applicable law or agreed to in writing, software
1958
+ * distributed under the License is distributed on an "AS IS" basis,
1959
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1960
+ * See the License for the specific language governing permissions and
1961
+ * limitations under the License.
1962
+ */
1963
+
1964
+ /*
1965
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1966
+ *
1967
+ * Licensed under EUPL, Version 1.2 (the "License");
1968
+ * you may not use this file except in compliance with the License.
1969
+ * You may obtain a copy of the License at
1970
+ *
1971
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1972
+ *
1973
+ * Unless required by applicable law or agreed to in writing, software
1974
+ * distributed under the License is distributed on an "AS IS" basis,
1975
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1976
+ * See the License for the specific language governing permissions and
1977
+ * limitations under the License.
1978
+ */
1979
+
1980
+ /*
1981
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1982
+ *
1983
+ * Licensed under EUPL, Version 1.2 (the "License");
1984
+ * you may not use this file except in compliance with the License.
1985
+ * You may obtain a copy of the License at
1986
+ *
1987
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1988
+ *
1989
+ * Unless required by applicable law or agreed to in writing, software
1990
+ * distributed under the License is distributed on an "AS IS" basis,
1991
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1992
+ * See the License for the specific language governing permissions and
1993
+ * limitations under the License.
1994
+ */
1995
+
1996
+ /*
1997
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1998
+ *
1999
+ * Licensed under EUPL, Version 1.2 (the "License");
2000
+ * you may not use this file except in compliance with the License.
2001
+ * You may obtain a copy of the License at
2002
+ *
2003
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2004
+ *
2005
+ * Unless required by applicable law or agreed to in writing, software
2006
+ * distributed under the License is distributed on an "AS IS" basis,
2007
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2008
+ * See the License for the specific language governing permissions and
2009
+ * limitations under the License.
2010
+ */
2011
+
2012
+ /*
2013
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2014
+ *
2015
+ * Licensed under EUPL, Version 1.2 (the "License");
2016
+ * you may not use this file except in compliance with the License.
2017
+ * You may obtain a copy of the License at
2018
+ *
2019
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2020
+ *
2021
+ * Unless required by applicable law or agreed to in writing, software
2022
+ * distributed under the License is distributed on an "AS IS" basis,
2023
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2024
+ * See the License for the specific language governing permissions and
2025
+ * limitations under the License.
2026
+ */
2027
+ const caseGroupByDataSourceSpecification = {
2028
+ dataSourceKey: 'case-group-by',
2029
+ configurationComponent: CaseGroupByConfigurationComponent,
2030
+ translations: {
2031
+ de: {
2032
+ title: 'Gruppe',
2033
+ documentDefinition: 'Falltyp (erforderlich)',
2034
+ documentDefinitionHelperText: 'Der Falltyp, für den die Anzahl abgerufen wird',
2035
+ '!=': 'Nicht gleichzusetzen mit',
2036
+ '==': 'Gleich',
2037
+ '>': 'Größer als',
2038
+ '>=': 'Größer als oder gleich wie',
2039
+ '<': 'Weniger als',
2040
+ '<=': 'Gleich oder kleiner als',
2041
+ path: 'Pfad',
2042
+ pathHelperText: 'Der Pfad innerhalb der Fall, deren Werte gruppiert werden sollen',
2043
+ operator: 'Operator',
2044
+ value: 'Wert',
2045
+ conditions: 'Bedingungen',
2046
+ conditionsHelperText: "Geben Sie optionale Bedingungen zum Abrufen der Gruppierung für den ausgewählten Falltyp an. Zum Beispiel: 'case:createdBy', 'Nicht gleichzusetzen mit', 'test@test.com'.",
2047
+ addCondition: 'Bedingung hinzufügen',
2048
+ enum: 'Anzeige der Werte',
2049
+ enumHelperText: "Einige Werte aus der Datenbank sind für den Endbenutzer nicht lesbar. Geben Sie hier an, wie die Werte angezeigt werden sollen. Beispiel: Wert: 'anfrage-gesendet', Anzeige: 'Anfrage gesendet'.",
2050
+ displayValue: 'Anzeige',
2051
+ addDisplay: 'Ansicht hinzufügen',
2052
+ },
2053
+ en: {
2054
+ title: 'Group by',
2055
+ documentDefinition: 'Case type (required)',
2056
+ documentDefinitionHelperText: 'The case type for which the count is retrieved',
2057
+ '!=': 'Not equal to',
2058
+ '==': 'Equal to',
2059
+ '>': 'Greater than',
2060
+ '>=': 'Greater than or equal to',
2061
+ '<': 'Less than',
2062
+ '<=': 'Less than or equal to',
2063
+ path: 'Path (required)',
2064
+ pathHelperText: 'The path within the case of which the values should be grouped',
2065
+ operator: 'Operator',
2066
+ value: 'Value',
2067
+ conditions: 'Conditions',
2068
+ conditionsHelperText: "Specify optional conditions for retrieving the grouping for the selected case type. For example: 'case:createdBy', 'Not equal to', 'test@test.com'. To compare with empty values, '${null}' can be entered as a value. To compare with the current date, '${localDateTimeNow}' can be entered as a value. This also supports, for example, the following logic: '${localDateTimeNow.minusWeeks(2)}'.",
2069
+ addCondition: 'Add condition',
2070
+ enum: 'Display of values',
2071
+ enumHelperText: "Some values from the database will not be readable by the end user. Specify here how the values should be displayed. For example: Value: 'request-sent', Display: 'Request sent'.",
2072
+ displayValue: 'Display',
2073
+ addDisplay: 'Add display',
2074
+ },
2075
+ nl: {
2076
+ title: 'Groepering',
2077
+ documentDefinition: 'Dossiertype (vereist)',
2078
+ documentDefinitionHelperText: 'Het dossiertype waarvoor de telling wordt opgehaald',
2079
+ '!=': 'Niet gelijk aan',
2080
+ '==': 'Gelijk aan',
2081
+ '>': 'Groter dan',
2082
+ '>=': 'Groter dan of gelijk aan',
2083
+ '<': 'Minder dan',
2084
+ '<=': 'Minder dan of gelijk aan',
2085
+ path: 'Pad',
2086
+ pathHelperText: 'Het pad binnen het dossier waarvan de waardes gegroepeerd moeten worden',
2087
+ operator: 'Operator',
2088
+ value: 'Waarde',
2089
+ conditions: 'Condities',
2090
+ conditionsHelperText: "Geef optionele condities op voor het ophalen van de groepering voor het geselecteerde dossiertype. Bijvoorbeeld: 'case:createdBy', 'Niet gelijk aan', 'test@test.com'. Voor het vergelijken met lege waardes kan '${null}' ingevuld worden als waarde. Voor het vergelijken met de huidige datum kan '${localDateTimeNow}' ingevuld worden als waarde. Deze ondersteunt ook bijvoorbeeld de volgende logica: '${localDateTimeNow.minusWeeks(2)}'.",
2091
+ addCondition: 'Conditie toevoegen',
2092
+ enum: 'Weergave van waardes',
2093
+ enumHelperText: "Sommige waardes uit de database zullen niet leesbaar zijn voor de eindgebruiker. Geef hier op hoe de waardes weergegeven moeten worden. Bijvoorbeeld: Waarde: 'aanvraag-verzonden', Weergave: 'Aanvraag verzonden'.",
2094
+ displayValue: 'Weergave',
2095
+ addDisplay: 'Weergave toevoegen',
2096
+ },
2097
+ },
2098
+ };
2099
+
2100
+ /*
2101
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2102
+ *
2103
+ * Licensed under EUPL, Version 1.2 (the "License");
2104
+ * you may not use this file except in compliance with the License.
2105
+ * You may obtain a copy of the License at
2106
+ *
2107
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2108
+ *
2109
+ * Unless required by applicable law or agreed to in writing, software
2110
+ * distributed under the License is distributed on an "AS IS" basis,
2111
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2112
+ * See the License for the specific language governing permissions and
2113
+ * limitations under the License.
2114
+ */
2115
+ class CaseGroupByDataSourceModule {
2116
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CaseGroupByDataSourceModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2117
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.3", ngImport: i0, type: CaseGroupByDataSourceModule, declarations: [CaseGroupByConfigurationComponent], imports: [CommonModule,
2118
+ ReactiveFormsModule,
2119
+ WidgetTranslatePipeModule,
2120
+ InputModule,
2121
+ DropdownModule,
2122
+ CarbonMultiInputModule], exports: [CaseGroupByConfigurationComponent] }); }
2123
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CaseGroupByDataSourceModule, providers: [
2124
+ { provide: DATA_SOURCE_TOKEN, useValue: caseGroupByDataSourceSpecification, multi: true },
2125
+ ], imports: [CommonModule,
2126
+ ReactiveFormsModule,
2127
+ WidgetTranslatePipeModule,
2128
+ InputModule,
2129
+ DropdownModule,
2130
+ CarbonMultiInputModule] }); }
2131
+ }
2132
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CaseGroupByDataSourceModule, decorators: [{
2133
+ type: NgModule,
2134
+ args: [{
2135
+ declarations: [CaseGroupByConfigurationComponent],
2136
+ imports: [
2137
+ CommonModule,
2138
+ ReactiveFormsModule,
2139
+ WidgetTranslatePipeModule,
2140
+ InputModule,
2141
+ DropdownModule,
2142
+ CarbonMultiInputModule,
2143
+ ],
2144
+ exports: [CaseGroupByConfigurationComponent],
2145
+ providers: [
2146
+ { provide: DATA_SOURCE_TOKEN, useValue: caseGroupByDataSourceSpecification, multi: true },
2147
+ ],
2148
+ }]
2149
+ }] });
2150
+
2151
+ /*
2152
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2153
+ *
2154
+ * Licensed under EUPL, Version 1.2 (the "License");
2155
+ * you may not use this file except in compliance with the License.
2156
+ * You may obtain a copy of the License at
2157
+ *
2158
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2159
+ *
2160
+ * Unless required by applicable law or agreed to in writing, software
2161
+ * distributed under the License is distributed on an "AS IS" basis,
2162
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2163
+ * See the License for the specific language governing permissions and
2164
+ * limitations under the License.
2165
+ */
2166
+
2167
+ /*
2168
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2169
+ *
2170
+ * Licensed under EUPL, Version 1.2 (the "License");
2171
+ * you may not use this file except in compliance with the License.
2172
+ * You may obtain a copy of the License at
2173
+ *
2174
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2175
+ *
2176
+ * Unless required by applicable law or agreed to in writing, software
2177
+ * distributed under the License is distributed on an "AS IS" basis,
2178
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2179
+ * See the License for the specific language governing permissions and
2180
+ * limitations under the License.
2181
+ */
2182
+
2183
+ /*
2184
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2185
+ *
2186
+ * Licensed under EUPL, Version 1.2 (the "License");
2187
+ * you may not use this file except in compliance with the License.
2188
+ * You may obtain a copy of the License at
2189
+ *
2190
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2191
+ *
2192
+ * Unless required by applicable law or agreed to in writing, software
2193
+ * distributed under the License is distributed on an "AS IS" basis,
2194
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2195
+ * See the License for the specific language governing permissions and
2196
+ * limitations under the License.
2197
+ */
2198
+ class BigNumberConfigurationComponent {
2199
+ set disabled(disabledValue) {
2200
+ if (disabledValue) {
2201
+ this.form.disable();
2202
+ }
2203
+ else {
2204
+ this.form.enable();
2205
+ }
2206
+ }
2207
+ get title() {
2208
+ return this.form.get('title');
2209
+ }
2210
+ get subtitle() {
2211
+ return this.form.get('subtitle');
2212
+ }
2213
+ get label() {
2214
+ return this.form.get('label');
2215
+ }
2216
+ get useKPI() {
2217
+ return this.form.get('useKPI');
2218
+ }
2219
+ get lowSeverityThreshold() {
2220
+ return this.form.get('lowSeverityThreshold');
2221
+ }
2222
+ get mediumSeverityThreshold() {
2223
+ return this.form.get('mediumSeverityThreshold');
2224
+ }
2225
+ get highSeverityThreshold() {
2226
+ return this.form.get('highSeverityThreshold');
2227
+ }
2228
+ set prefillConfiguration(configurationValue) {
2229
+ if (configurationValue) {
2230
+ this.title.setValue(configurationValue.title || '');
2231
+ this.subtitle.setValue(configurationValue.subtitle || '');
2232
+ this.label.setValue(configurationValue.label || '');
2233
+ this.useKPI.setValue(configurationValue.useKPI || false);
2234
+ this.lowSeverityThreshold.setValue(configurationValue.lowSeverityThreshold || null);
2235
+ this.mediumSeverityThreshold.setValue(configurationValue.mediumSeverityThreshold || null);
2236
+ this.highSeverityThreshold.setValue(configurationValue.highSeverityThreshold || null);
2237
+ }
2238
+ }
2239
+ constructor(fb) {
2240
+ this.fb = fb;
2241
+ this.form = this.fb.group({
2242
+ title: this.fb.control('', [Validators.required]),
2243
+ subtitle: this.fb.control(''),
2244
+ label: this.fb.control(''),
2245
+ useKPI: this.fb.control(false, [Validators.required]),
2246
+ lowSeverityThreshold: this.fb.control(null),
2247
+ mediumSeverityThreshold: this.fb.control(null),
2248
+ highSeverityThreshold: this.fb.control(null),
2249
+ });
2250
+ this.configurationEvent = new EventEmitter();
2251
+ this._subscriptions = new Subscription();
2252
+ }
2253
+ ngOnInit() {
2254
+ this.openFormSubscription();
2255
+ this.openKPISubscription();
2256
+ }
2257
+ ngOnDestroy() {
2258
+ this._subscriptions.unsubscribe();
2259
+ }
2260
+ openFormSubscription() {
2261
+ this._subscriptions.add(this.form.valueChanges.pipe(startWith(this.form.value)).subscribe(formValue => {
2262
+ this.configurationEvent.emit({ valid: this.form.valid, data: formValue });
2263
+ }));
2264
+ }
2265
+ openKPISubscription() {
2266
+ this._subscriptions.add(this.useKPI.valueChanges.pipe(startWith(this.useKPI.value)).subscribe(useKpi => {
2267
+ const validators = [Validators.required];
2268
+ if (useKpi) {
2269
+ this.lowSeverityThreshold.setValidators(validators);
2270
+ this.mediumSeverityThreshold.setValidators(validators);
2271
+ this.highSeverityThreshold.setValidators(validators);
2272
+ }
2273
+ else {
2274
+ this.lowSeverityThreshold.clearValidators();
2275
+ this.mediumSeverityThreshold.clearValidators();
2276
+ this.highSeverityThreshold.clearValidators();
2277
+ }
2278
+ this.lowSeverityThreshold.updateValueAndValidity();
2279
+ this.mediumSeverityThreshold.updateValueAndValidity();
2280
+ this.highSeverityThreshold.updateValueAndValidity();
2281
+ }));
2282
+ }
2283
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: BigNumberConfigurationComponent, deps: [{ token: i1$3.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
2284
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: BigNumberConfigurationComponent, selector: "ng-component", inputs: { displayTypeKey: "displayTypeKey", disabled: "disabled", prefillConfiguration: "prefillConfiguration" }, outputs: { configurationEvent: "configurationEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form [formGroup]=\"form\">\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'formTitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'formTitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"title.dirty && title.invalid\"\n >\n {{ 'formTitle' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"title\" [invalid]=\"title.dirty && title.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'subtitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'subtitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"subtitle.dirty && subtitle.invalid\"\n >\n {{ 'subtitle' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"subtitle\" [invalid]=\"subtitle.dirty && subtitle.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'labelHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'labelHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"label.dirty && label.invalid\"\n >\n {{ 'label' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"label\" [invalid]=\"label.dirty && label.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-checkbox formControlName=\"useKPI\">\n {{ 'useKPI' | widgetTranslate: displayTypeKey | async }}\n </cds-checkbox>\n </div>\n\n <div class=\"form__row\" *ngIf=\"useKPI.value\">\n <div class=\"form__element\">\n <cds-label [invalid]=\"lowSeverityThreshold.dirty && lowSeverityThreshold.invalid\">\n {{ 'lowSeverityThreshold' | widgetTranslate: displayTypeKey | async }}\n\n <input\n cdsText\n [invalid]=\"lowSeverityThreshold.dirty && lowSeverityThreshold.invalid\"\n formControlName=\"lowSeverityThreshold\"\n type=\"number\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__spacer\"></div>\n\n <div class=\"form__element\">\n <cds-label [invalid]=\"mediumSeverityThreshold.dirty && mediumSeverityThreshold.invalid\">\n {{ 'mediumSeverityThreshold' | widgetTranslate: displayTypeKey | async }}\n\n <input\n cdsText\n formControlName=\"mediumSeverityThreshold\"\n [invalid]=\"mediumSeverityThreshold.dirty && mediumSeverityThreshold.invalid\"\n type=\"number\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__spacer\"></div>\n\n <div class=\"form__element\">\n <cds-label [invalid]=\"highSeverityThreshold.dirty && highSeverityThreshold.invalid\">\n {{ 'highSeverityThreshold' | widgetTranslate: displayTypeKey | async }}\n\n <input\n cdsText\n formControlName=\"highSeverityThreshold\"\n [invalid]=\"highSeverityThreshold.dirty && highSeverityThreshold.invalid\"\n type=\"number\"\n />\n </cds-label>\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i5.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "component", type: i5.Checkbox, selector: "cds-checkbox, ibm-checkbox", inputs: ["disabled", "skeleton", "hideLabel", "name", "id", "required", "value", "ariaLabel", "ariaLabelledby", "indeterminate", "checked"], outputs: ["click", "checkedChange", "indeterminateChange"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: WidgetTranslatePipe, name: "widgetTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2285
+ }
2286
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: BigNumberConfigurationComponent, decorators: [{
2287
+ type: Component,
2288
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form [formGroup]=\"form\">\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'formTitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'formTitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"title.dirty && title.invalid\"\n >\n {{ 'formTitle' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"title\" [invalid]=\"title.dirty && title.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'subtitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'subtitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"subtitle.dirty && subtitle.invalid\"\n >\n {{ 'subtitle' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"subtitle\" [invalid]=\"subtitle.dirty && subtitle.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'labelHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'labelHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"label.dirty && label.invalid\"\n >\n {{ 'label' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"label\" [invalid]=\"label.dirty && label.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-checkbox formControlName=\"useKPI\">\n {{ 'useKPI' | widgetTranslate: displayTypeKey | async }}\n </cds-checkbox>\n </div>\n\n <div class=\"form__row\" *ngIf=\"useKPI.value\">\n <div class=\"form__element\">\n <cds-label [invalid]=\"lowSeverityThreshold.dirty && lowSeverityThreshold.invalid\">\n {{ 'lowSeverityThreshold' | widgetTranslate: displayTypeKey | async }}\n\n <input\n cdsText\n [invalid]=\"lowSeverityThreshold.dirty && lowSeverityThreshold.invalid\"\n formControlName=\"lowSeverityThreshold\"\n type=\"number\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__spacer\"></div>\n\n <div class=\"form__element\">\n <cds-label [invalid]=\"mediumSeverityThreshold.dirty && mediumSeverityThreshold.invalid\">\n {{ 'mediumSeverityThreshold' | widgetTranslate: displayTypeKey | async }}\n\n <input\n cdsText\n formControlName=\"mediumSeverityThreshold\"\n [invalid]=\"mediumSeverityThreshold.dirty && mediumSeverityThreshold.invalid\"\n type=\"number\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__spacer\"></div>\n\n <div class=\"form__element\">\n <cds-label [invalid]=\"highSeverityThreshold.dirty && highSeverityThreshold.invalid\">\n {{ 'highSeverityThreshold' | widgetTranslate: displayTypeKey | async }}\n\n <input\n cdsText\n formControlName=\"highSeverityThreshold\"\n [invalid]=\"highSeverityThreshold.dirty && highSeverityThreshold.invalid\"\n type=\"number\"\n />\n </cds-label>\n </div>\n </div>\n</form>\n" }]
2289
+ }], ctorParameters: () => [{ type: i1$3.FormBuilder }], propDecorators: { displayTypeKey: [{
2290
+ type: Input
2291
+ }], disabled: [{
2292
+ type: Input
2293
+ }], prefillConfiguration: [{
2294
+ type: Input
2295
+ }], configurationEvent: [{
2296
+ type: Output
2297
+ }] } });
2298
+
2299
+ /*
2300
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2301
+ *
2302
+ * Licensed under EUPL, Version 1.2 (the "License");
2303
+ * you may not use this file except in compliance with the License.
2304
+ * You may obtain a copy of the License at
2305
+ *
2306
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2307
+ *
2308
+ * Unless required by applicable law or agreed to in writing, software
2309
+ * distributed under the License is distributed on an "AS IS" basis,
2310
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2311
+ * See the License for the specific language governing permissions and
2312
+ * limitations under the License.
2313
+ */
2314
+
2315
+ /*
2316
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2317
+ *
2318
+ * Licensed under EUPL, Version 1.2 (the "License");
2319
+ * you may not use this file except in compliance with the License.
2320
+ * You may obtain a copy of the License at
2321
+ *
2322
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2323
+ *
2324
+ * Unless required by applicable law or agreed to in writing, software
2325
+ * distributed under the License is distributed on an "AS IS" basis,
2326
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2327
+ * See the License for the specific language governing permissions and
2328
+ * limitations under the License.
2329
+ */
2330
+ class BigNumberDisplayComponent {
2331
+ get severityClass() {
2332
+ if (!this.displayTypeProperties.useKPI) {
2333
+ return WidgetSeverity.BLACK;
2334
+ }
2335
+ const value = this.data?.value;
2336
+ if (value < this.displayTypeProperties.lowSeverityThreshold) {
2337
+ return WidgetSeverity.GREEN;
2338
+ }
2339
+ else if (value < this.displayTypeProperties.mediumSeverityThreshold) {
2340
+ return WidgetSeverity.YELLOW;
2341
+ }
2342
+ else if (value < this.displayTypeProperties.highSeverityThreshold) {
2343
+ return WidgetSeverity.ORANGE;
2344
+ }
2345
+ return WidgetSeverity.RED;
2346
+ }
2347
+ get numberFontSize() {
2348
+ if (!this.data) {
2349
+ return 122;
2350
+ }
2351
+ return Math.floor(122 / this.data.value.toString().length) + 20;
2352
+ }
2353
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: BigNumberDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2354
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: BigNumberDisplayComponent, selector: "valtimo-big-number-display", inputs: { displayTypeKey: "displayTypeKey", data: "data", displayTypeProperties: "displayTypeProperties" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<section class=\"valtimo-big-number-widget__header\">\n <h3 class=\"valtimo-big-number-widget__title\">{{ displayTypeProperties.title }}</h3>\n\n <span *ngIf=\"displayTypeProperties.subtitle\" class=\"valtimo-big-number-widget__subtitle\">\n {{ displayTypeProperties.subtitle }}\n </span>\n</section>\n\n<section class=\"valtimo-big-number-widget__content\">\n <span\n [class]=\"['valtimo-big-number-widget__number', severityClass]\"\n [style.fontSize.px]=\"numberFontSize\"\n >{{ data?.value }}</span\n >\n\n <span *ngIf=\"displayTypeProperties.label\" class=\"valtimo-big-number-widget__label\">\n {{ displayTypeProperties.label }}\n </span>\n</section>\n", styles: [":host{display:flex;flex-direction:column;justify-content:space-between;width:100%;height:100%;padding:20px}.valtimo-big-number-widget__title,.valtimo-big-number-widget__subtitle{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.valtimo-big-number-widget__title{font-size:20px;margin-bottom:12px}.valtimo-big-number-widget__subtitle{font-size:14px}.valtimo-big-number-widget__number{font-weight:lighter;font-size:122px;line-height:.75em}.valtimo-big-number-widget__label{font-size:12px;margin-left:12px;margin-bottom:-1px}.valtimo-big-number-widget__content{display:flex;align-items:flex-end}.valtimo-severity__black{color:#000}.valtimo-severity__green{color:#42be65}.valtimo-severity__yellow{color:#f1c21b}.valtimo-severity__orange{color:#ff832b}.valtimo-severity__red{color:#da1e28}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2355
+ }
2356
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: BigNumberDisplayComponent, decorators: [{
2357
+ type: Component,
2358
+ args: [{ selector: 'valtimo-big-number-display', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<section class=\"valtimo-big-number-widget__header\">\n <h3 class=\"valtimo-big-number-widget__title\">{{ displayTypeProperties.title }}</h3>\n\n <span *ngIf=\"displayTypeProperties.subtitle\" class=\"valtimo-big-number-widget__subtitle\">\n {{ displayTypeProperties.subtitle }}\n </span>\n</section>\n\n<section class=\"valtimo-big-number-widget__content\">\n <span\n [class]=\"['valtimo-big-number-widget__number', severityClass]\"\n [style.fontSize.px]=\"numberFontSize\"\n >{{ data?.value }}</span\n >\n\n <span *ngIf=\"displayTypeProperties.label\" class=\"valtimo-big-number-widget__label\">\n {{ displayTypeProperties.label }}\n </span>\n</section>\n", styles: [":host{display:flex;flex-direction:column;justify-content:space-between;width:100%;height:100%;padding:20px}.valtimo-big-number-widget__title,.valtimo-big-number-widget__subtitle{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.valtimo-big-number-widget__title{font-size:20px;margin-bottom:12px}.valtimo-big-number-widget__subtitle{font-size:14px}.valtimo-big-number-widget__number{font-weight:lighter;font-size:122px;line-height:.75em}.valtimo-big-number-widget__label{font-size:12px;margin-left:12px;margin-bottom:-1px}.valtimo-big-number-widget__content{display:flex;align-items:flex-end}.valtimo-severity__black{color:#000}.valtimo-severity__green{color:#42be65}.valtimo-severity__yellow{color:#f1c21b}.valtimo-severity__orange{color:#ff832b}.valtimo-severity__red{color:#da1e28}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
2359
+ }], propDecorators: { displayTypeKey: [{
2360
+ type: Input
2361
+ }], data: [{
2362
+ type: Input
2363
+ }], displayTypeProperties: [{
2364
+ type: Input
2365
+ }] } });
2366
+
2367
+ /*
2368
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2369
+ *
2370
+ * Licensed under EUPL, Version 1.2 (the "License");
2371
+ * you may not use this file except in compliance with the License.
2372
+ * You may obtain a copy of the License at
2373
+ *
2374
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2375
+ *
2376
+ * Unless required by applicable law or agreed to in writing, software
2377
+ * distributed under the License is distributed on an "AS IS" basis,
2378
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2379
+ * See the License for the specific language governing permissions and
2380
+ * limitations under the License.
2381
+ */
2382
+
2383
+ /*
2384
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2385
+ *
2386
+ * Licensed under EUPL, Version 1.2 (the "License");
2387
+ * you may not use this file except in compliance with the License.
2388
+ * You may obtain a copy of the License at
2389
+ *
2390
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2391
+ *
2392
+ * Unless required by applicable law or agreed to in writing, software
2393
+ * distributed under the License is distributed on an "AS IS" basis,
2394
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2395
+ * See the License for the specific language governing permissions and
2396
+ * limitations under the License.
2397
+ */
2398
+
2399
+ /*
2400
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2401
+ *
2402
+ * Licensed under EUPL, Version 1.2 (the "License");
2403
+ * you may not use this file except in compliance with the License.
2404
+ * You may obtain a copy of the License at
2405
+ *
2406
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2407
+ *
2408
+ * Unless required by applicable law or agreed to in writing, software
2409
+ * distributed under the License is distributed on an "AS IS" basis,
2410
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2411
+ * See the License for the specific language governing permissions and
2412
+ * limitations under the License.
2413
+ */
2414
+ const bigNumberSpecification = {
2415
+ displayTypeKey: 'number',
2416
+ displayComponent: BigNumberDisplayComponent,
2417
+ configurationComponent: BigNumberConfigurationComponent,
2418
+ width: 1,
2419
+ height: 1,
2420
+ translations: {
2421
+ nl: {
2422
+ title: 'Groot getal',
2423
+ formTitle: 'Titel (vereist)',
2424
+ formTitleHelperText: 'De titel die wordt weergegeven in de widget',
2425
+ subtitle: 'Ondertitel',
2426
+ subtitleHelperText: 'De ondertitel weergegeven in de widget',
2427
+ label: 'Label',
2428
+ labelHelperText: 'Het label dat wordt weergegeven in de widget',
2429
+ useKPI: 'KPI gebruiken',
2430
+ lowSeverityThreshold: 'Lage ernstdrempel (vereist)',
2431
+ mediumSeverityThreshold: 'Middelmatige ernstdrempel (vereist)',
2432
+ highSeverityThreshold: 'Hoge ernstdrempel (vereist)',
2433
+ },
2434
+ en: {
2435
+ title: 'Big number',
2436
+ formTitle: 'Title (required)',
2437
+ formTitleHelperText: 'The title displayed in the widget',
2438
+ subtitle: 'Subtitle',
2439
+ subtitleHelperText: 'The subtitle displayed in the widget',
2440
+ label: 'Label',
2441
+ labelHelperText: 'The label displayed in the widget',
2442
+ useKPI: 'Use KPI',
2443
+ lowSeverityThreshold: 'Low severity threshold (required)',
2444
+ mediumSeverityThreshold: 'Medium severity threshold (required)',
2445
+ highSeverityThreshold: 'High severity threshold (required)',
2446
+ },
2447
+ de: {
2448
+ title: 'Große Nummer',
2449
+ formTitle: 'Titel (erforderlich)',
2450
+ formTitleHelperText: 'Der im Widget angezeigte Titel',
2451
+ subtitle: 'Untertitel',
2452
+ subtitleHelperText: 'Der im Widget angezeigte Untertitel',
2453
+ label: 'Beschriftung',
2454
+ labelHelperText: 'Die im Widget angezeigte Beschriftung',
2455
+ useKPI: 'Verwenden Sie KPI',
2456
+ lowSeverityThreshold: 'Niedriger Schweregradschwellenwert (erforderlich)',
2457
+ mediumSeverityThreshold: 'Mittlerer Schweregradschwellenwert (erforderlich)',
2458
+ highSeverityThreshold: 'Hoher Schweregradschwellenwert (erforderlich)',
2459
+ },
2460
+ },
2461
+ requiredDataFeatures: [DATA_FEATURES.NUMBER],
2462
+ };
2463
+
2464
+ /*
2465
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2466
+ *
2467
+ * Licensed under EUPL, Version 1.2 (the "License");
2468
+ * you may not use this file except in compliance with the License.
2469
+ * You may obtain a copy of the License at
2470
+ *
2471
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2472
+ *
2473
+ * Unless required by applicable law or agreed to in writing, software
2474
+ * distributed under the License is distributed on an "AS IS" basis,
2475
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2476
+ * See the License for the specific language governing permissions and
2477
+ * limitations under the License.
2478
+ */
2479
+ class BigNumberModule {
2480
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: BigNumberModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2481
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.3", ngImport: i0, type: BigNumberModule, declarations: [BigNumberDisplayComponent, BigNumberConfigurationComponent], imports: [CommonModule,
2482
+ ReactiveFormsModule,
2483
+ WidgetTranslatePipeModule,
2484
+ InputModule,
2485
+ CheckboxModule], exports: [BigNumberDisplayComponent] }); }
2486
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: BigNumberModule, providers: [{ provide: DISPLAY_TYPE_TOKEN, useValue: bigNumberSpecification, multi: true }], imports: [CommonModule,
2487
+ ReactiveFormsModule,
2488
+ WidgetTranslatePipeModule,
2489
+ InputModule,
2490
+ CheckboxModule] }); }
2491
+ }
2492
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: BigNumberModule, decorators: [{
2493
+ type: NgModule,
2494
+ args: [{
2495
+ declarations: [BigNumberDisplayComponent, BigNumberConfigurationComponent],
2496
+ imports: [
2497
+ CommonModule,
2498
+ ReactiveFormsModule,
2499
+ WidgetTranslatePipeModule,
2500
+ InputModule,
2501
+ CheckboxModule,
2502
+ ],
2503
+ exports: [BigNumberDisplayComponent],
2504
+ providers: [{ provide: DISPLAY_TYPE_TOKEN, useValue: bigNumberSpecification, multi: true }],
2505
+ }]
2506
+ }] });
2507
+
2508
+ /*
2509
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2510
+ *
2511
+ * Licensed under EUPL, Version 1.2 (the "License");
2512
+ * you may not use this file except in compliance with the License.
2513
+ * You may obtain a copy of the License at
2514
+ *
2515
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2516
+ *
2517
+ * Unless required by applicable law or agreed to in writing, software
2518
+ * distributed under the License is distributed on an "AS IS" basis,
2519
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2520
+ * See the License for the specific language governing permissions and
2521
+ * limitations under the License.
2522
+ */
2523
+
2524
+ /*
2525
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2526
+ *
2527
+ * Licensed under EUPL, Version 1.2 (the "License");
2528
+ * you may not use this file except in compliance with the License.
2529
+ * You may obtain a copy of the License at
2530
+ *
2531
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2532
+ *
2533
+ * Unless required by applicable law or agreed to in writing, software
2534
+ * distributed under the License is distributed on an "AS IS" basis,
2535
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2536
+ * See the License for the specific language governing permissions and
2537
+ * limitations under the License.
2538
+ */
2539
+
2540
+ /*
2541
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2542
+ *
2543
+ * Licensed under EUPL, Version 1.2 (the "License");
2544
+ * you may not use this file except in compliance with the License.
2545
+ * You may obtain a copy of the License at
2546
+ *
2547
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2548
+ *
2549
+ * Unless required by applicable law or agreed to in writing, software
2550
+ * distributed under the License is distributed on an "AS IS" basis,
2551
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2552
+ * See the License for the specific language governing permissions and
2553
+ * limitations under the License.
2554
+ */
2555
+
2556
+ /*
2557
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2558
+ *
2559
+ * Licensed under EUPL, Version 1.2 (the "License");
2560
+ * you may not use this file except in compliance with the License.
2561
+ * You may obtain a copy of the License at
2562
+ *
2563
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2564
+ *
2565
+ * Unless required by applicable law or agreed to in writing, software
2566
+ * distributed under the License is distributed on an "AS IS" basis,
2567
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2568
+ * See the License for the specific language governing permissions and
2569
+ * limitations under the License.
2570
+ */
2571
+ class DonutConfigurationComponent {
2572
+ set disabled(disabledValue) {
2573
+ if (disabledValue) {
2574
+ this.form.disable();
2575
+ }
2576
+ else {
2577
+ this.form.enable();
2578
+ }
2579
+ }
2580
+ get title() {
2581
+ return this.form.get('title');
2582
+ }
2583
+ get subtitle() {
2584
+ return this.form.get('subtitle');
2585
+ }
2586
+ get label() {
2587
+ return this.form.get('label');
2588
+ }
2589
+ set prefillConfiguration(configurationValue) {
2590
+ if (configurationValue) {
2591
+ this.title.setValue(configurationValue.title || '');
2592
+ this.subtitle.setValue(configurationValue.subtitle || '');
1682
2593
  this.label.setValue(configurationValue.label || '');
1683
- this.useKPI.setValue(configurationValue.useKPI || false);
1684
- this.lowSeverityThreshold.setValue(configurationValue.lowSeverityThreshold || null);
1685
- this.mediumSeverityThreshold.setValue(configurationValue.mediumSeverityThreshold || null);
1686
- this.highSeverityThreshold.setValue(configurationValue.highSeverityThreshold || null);
1687
2594
  }
1688
2595
  }
1689
2596
  constructor(fb) {
@@ -1693,50 +2600,31 @@ class BigNumberConfigurationComponent {
1693
2600
  subtitle: this.fb.control(''),
1694
2601
  label: this.fb.control(''),
1695
2602
  useKPI: this.fb.control(false, [Validators.required]),
1696
- lowSeverityThreshold: this.fb.control(null),
1697
- mediumSeverityThreshold: this.fb.control(null),
1698
- highSeverityThreshold: this.fb.control(null),
1699
2603
  });
1700
2604
  this.configurationEvent = new EventEmitter();
1701
2605
  this._subscriptions = new Subscription();
1702
2606
  }
1703
2607
  ngOnInit() {
1704
2608
  this.openFormSubscription();
1705
- this.openKPISubscription();
1706
2609
  }
1707
2610
  ngOnDestroy() {
1708
2611
  this._subscriptions.unsubscribe();
1709
2612
  }
1710
2613
  openFormSubscription() {
1711
2614
  this._subscriptions.add(this.form.valueChanges.pipe(startWith(this.form.value)).subscribe(formValue => {
1712
- this.configurationEvent.emit({ valid: this.form.valid, data: formValue });
1713
- }));
1714
- }
1715
- openKPISubscription() {
1716
- this._subscriptions.add(this.useKPI.valueChanges.pipe(startWith(this.useKPI.value)).subscribe(useKpi => {
1717
- const validators = [Validators.required];
1718
- if (useKpi) {
1719
- this.lowSeverityThreshold.setValidators(validators);
1720
- this.mediumSeverityThreshold.setValidators(validators);
1721
- this.highSeverityThreshold.setValidators(validators);
1722
- }
1723
- else {
1724
- this.lowSeverityThreshold.clearValidators();
1725
- this.mediumSeverityThreshold.clearValidators();
1726
- this.highSeverityThreshold.clearValidators();
1727
- }
1728
- this.lowSeverityThreshold.updateValueAndValidity();
1729
- this.mediumSeverityThreshold.updateValueAndValidity();
1730
- this.highSeverityThreshold.updateValueAndValidity();
2615
+ this.configurationEvent.emit({
2616
+ valid: this.form.valid,
2617
+ data: formValue,
2618
+ });
1731
2619
  }));
1732
2620
  }
1733
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BigNumberConfigurationComponent, deps: [{ token: i1$3.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
1734
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BigNumberConfigurationComponent, selector: "ng-component", inputs: { displayTypeKey: "displayTypeKey", disabled: "disabled", prefillConfiguration: "prefillConfiguration" }, outputs: { configurationEvent: "configurationEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form [formGroup]=\"form\">\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'formTitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'formTitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"title.dirty && title.invalid\"\n >\n {{ 'formTitle' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"title\" [invalid]=\"title.dirty && title.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'subtitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'subtitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"subtitle.dirty && subtitle.invalid\"\n >\n {{ 'subtitle' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"subtitle\" [invalid]=\"subtitle.dirty && subtitle.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'labelHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'labelHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"label.dirty && label.invalid\"\n >\n {{ 'label' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"label\" [invalid]=\"label.dirty && label.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-checkbox formControlName=\"useKPI\">\n {{ 'useKPI' | widgetTranslate: displayTypeKey | async }}\n </cds-checkbox>\n </div>\n\n <div class=\"form__row\" *ngIf=\"useKPI.value\">\n <div class=\"form__element\">\n <cds-label [invalid]=\"lowSeverityThreshold.dirty && lowSeverityThreshold.invalid\">\n {{ 'lowSeverityThreshold' | widgetTranslate: displayTypeKey | async }}\n\n <input\n cdsText\n [invalid]=\"lowSeverityThreshold.dirty && lowSeverityThreshold.invalid\"\n formControlName=\"lowSeverityThreshold\"\n type=\"number\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__spacer\"></div>\n\n <div class=\"form__element\">\n <cds-label [invalid]=\"mediumSeverityThreshold.dirty && mediumSeverityThreshold.invalid\">\n {{ 'mediumSeverityThreshold' | widgetTranslate: displayTypeKey | async }}\n\n <input\n cdsText\n formControlName=\"mediumSeverityThreshold\"\n [invalid]=\"mediumSeverityThreshold.dirty && mediumSeverityThreshold.invalid\"\n type=\"number\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__spacer\"></div>\n\n <div class=\"form__element\">\n <cds-label [invalid]=\"highSeverityThreshold.dirty && highSeverityThreshold.invalid\">\n {{ 'highSeverityThreshold' | widgetTranslate: displayTypeKey | async }}\n\n <input\n cdsText\n formControlName=\"highSeverityThreshold\"\n [invalid]=\"highSeverityThreshold.dirty && highSeverityThreshold.invalid\"\n type=\"number\"\n />\n </cds-label>\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4$1.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i4$1.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "component", type: i4$1.Checkbox, selector: "cds-checkbox, ibm-checkbox", inputs: ["disabled", "skeleton", "hideLabel", "name", "id", "required", "value", "ariaLabel", "ariaLabelledby", "indeterminate", "checked"], outputs: ["click", "checkedChange", "indeterminateChange"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: WidgetTranslatePipe, name: "widgetTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2621
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DonutConfigurationComponent, deps: [{ token: i1$3.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
2622
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: DonutConfigurationComponent, selector: "ng-component", inputs: { displayTypeKey: "displayTypeKey", disabled: "disabled", prefillConfiguration: "prefillConfiguration" }, outputs: { configurationEvent: "configurationEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form [formGroup]=\"form\">\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'formTitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'formTitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"title.dirty && title.invalid\"\n >\n {{ 'formTitle' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"title\" [invalid]=\"title.dirty && title.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'subtitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'subtitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"subtitle.dirty && subtitle.invalid\"\n >\n {{ 'subtitle' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"subtitle\" [invalid]=\"subtitle.dirty && subtitle.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'labelHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'labelHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"label.dirty && label.invalid\"\n >\n {{ 'label' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"label\" [invalid]=\"label.dirty && label.invalid\" />\n </cds-label>\n </div>\n\n</form>\n", dependencies: [{ kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i5.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: WidgetTranslatePipe, name: "widgetTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1735
2623
  }
1736
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BigNumberConfigurationComponent, decorators: [{
2624
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DonutConfigurationComponent, decorators: [{
1737
2625
  type: Component,
1738
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form [formGroup]=\"form\">\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'formTitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'formTitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"title.dirty && title.invalid\"\n >\n {{ 'formTitle' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"title\" [invalid]=\"title.dirty && title.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'subtitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'subtitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"subtitle.dirty && subtitle.invalid\"\n >\n {{ 'subtitle' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"subtitle\" [invalid]=\"subtitle.dirty && subtitle.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'labelHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'labelHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"label.dirty && label.invalid\"\n >\n {{ 'label' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"label\" [invalid]=\"label.dirty && label.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-checkbox formControlName=\"useKPI\">\n {{ 'useKPI' | widgetTranslate: displayTypeKey | async }}\n </cds-checkbox>\n </div>\n\n <div class=\"form__row\" *ngIf=\"useKPI.value\">\n <div class=\"form__element\">\n <cds-label [invalid]=\"lowSeverityThreshold.dirty && lowSeverityThreshold.invalid\">\n {{ 'lowSeverityThreshold' | widgetTranslate: displayTypeKey | async }}\n\n <input\n cdsText\n [invalid]=\"lowSeverityThreshold.dirty && lowSeverityThreshold.invalid\"\n formControlName=\"lowSeverityThreshold\"\n type=\"number\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__spacer\"></div>\n\n <div class=\"form__element\">\n <cds-label [invalid]=\"mediumSeverityThreshold.dirty && mediumSeverityThreshold.invalid\">\n {{ 'mediumSeverityThreshold' | widgetTranslate: displayTypeKey | async }}\n\n <input\n cdsText\n formControlName=\"mediumSeverityThreshold\"\n [invalid]=\"mediumSeverityThreshold.dirty && mediumSeverityThreshold.invalid\"\n type=\"number\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__spacer\"></div>\n\n <div class=\"form__element\">\n <cds-label [invalid]=\"highSeverityThreshold.dirty && highSeverityThreshold.invalid\">\n {{ 'highSeverityThreshold' | widgetTranslate: displayTypeKey | async }}\n\n <input\n cdsText\n formControlName=\"highSeverityThreshold\"\n [invalid]=\"highSeverityThreshold.dirty && highSeverityThreshold.invalid\"\n type=\"number\"\n />\n </cds-label>\n </div>\n </div>\n</form>\n" }]
1739
- }], ctorParameters: function () { return [{ type: i1$3.FormBuilder }]; }, propDecorators: { displayTypeKey: [{
2626
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form [formGroup]=\"form\">\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'formTitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'formTitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"title.dirty && title.invalid\"\n >\n {{ 'formTitle' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"title\" [invalid]=\"title.dirty && title.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'subtitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'subtitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"subtitle.dirty && subtitle.invalid\"\n >\n {{ 'subtitle' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"subtitle\" [invalid]=\"subtitle.dirty && subtitle.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'labelHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'labelHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"label.dirty && label.invalid\"\n >\n {{ 'label' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"label\" [invalid]=\"label.dirty && label.invalid\" />\n </cds-label>\n </div>\n\n</form>\n" }]
2627
+ }], ctorParameters: () => [{ type: i1$3.FormBuilder }], propDecorators: { displayTypeKey: [{
1740
2628
  type: Input
1741
2629
  }], disabled: [{
1742
2630
  type: Input
@@ -1747,7 +2635,88 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1747
2635
  }] } });
1748
2636
 
1749
2637
  /*
1750
- * Copyright 2015-2023 Ritense BV, the Netherlands.
2638
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2639
+ *
2640
+ * Licensed under EUPL, Version 1.2 (the "License");
2641
+ * you may not use this file except in compliance with the License.
2642
+ * You may obtain a copy of the License at
2643
+ *
2644
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2645
+ *
2646
+ * Unless required by applicable law or agreed to in writing, software
2647
+ * distributed under the License is distributed on an "AS IS" basis,
2648
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2649
+ * See the License for the specific language governing permissions and
2650
+ * limitations under the License.
2651
+ */
2652
+
2653
+ /*
2654
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2655
+ *
2656
+ * Licensed under EUPL, Version 1.2 (the "License");
2657
+ * you may not use this file except in compliance with the License.
2658
+ * You may obtain a copy of the License at
2659
+ *
2660
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2661
+ *
2662
+ * Unless required by applicable law or agreed to in writing, software
2663
+ * distributed under the License is distributed on an "AS IS" basis,
2664
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2665
+ * See the License for the specific language governing permissions and
2666
+ * limitations under the License.
2667
+ */
2668
+ class DonutDisplayComponent {
2669
+ set data(value) {
2670
+ if (!value)
2671
+ return;
2672
+ this._data$.next(value);
2673
+ }
2674
+ constructor(themeService) {
2675
+ this.themeService = themeService;
2676
+ this._data$ = new BehaviorSubject(null);
2677
+ this.donutData$ = this._data$.pipe(filter(data => !!data), map(data => data?.values.map(dataValue => ({
2678
+ group: dataValue.label,
2679
+ value: dataValue.value,
2680
+ })) || []));
2681
+ this.donutChartOptions$ = this.themeService.currentTheme$.pipe(map(currentTheme => ({
2682
+ resizable: true,
2683
+ toolbar: { enabled: false },
2684
+ height: '300px',
2685
+ theme: currentTheme,
2686
+ donut: {
2687
+ alignment: 'center',
2688
+ center: {
2689
+ label: this.displayTypeProperties.label,
2690
+ },
2691
+ },
2692
+ pie: {
2693
+ labels: {
2694
+ enabled: false,
2695
+ },
2696
+ },
2697
+ legend: {
2698
+ truncation: {
2699
+ numCharacter: 28,
2700
+ },
2701
+ },
2702
+ })));
2703
+ }
2704
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DonutDisplayComponent, deps: [{ token: i1$1.CdsThemeService }], target: i0.ɵɵFactoryTarget.Component }); }
2705
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.3", type: DonutDisplayComponent, selector: "valtimo-donut-display", inputs: { displayTypeKey: "displayTypeKey", data: "data", displayTypeProperties: "displayTypeProperties" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<section class=\"valtimo-donut-widget__header\">\n <h3 class=\"valtimo-donut-widget__title\">{{ displayTypeProperties.title }}</h3>\n\n <span *ngIf=\"displayTypeProperties.subtitle\" class=\"valtimo-donut-widget__subtitle\">\n {{ displayTypeProperties.subtitle }}\n </span>\n</section>\n\n<section class=\"valtimo-donut-widget__content\">\n <ng-container *ngIf=\"donutData$ | async as donutData\">\n @if (donutData.length > 0) {\n <ibm-donut-chart\n type=\"donut\"\n class=\"n-chart\"\n [data]=\"donutData\"\n [options]=\"donutChartOptions$ | async\"\n ></ibm-donut-chart>\n } @else {\n <valtimo-no-results\n [collapseVertically]=\"true\"\n [description]=\"'dossier.widgets.noData' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n }\n </ng-container>\n</section>\n", styles: [":host{display:flex;flex-direction:column;justify-content:space-between;width:100%;height:100%;padding:20px}.valtimo-donut-widget__title,.valtimo-donut-widget__subtitle{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.valtimo-donut-widget__title{font-size:20px;margin-bottom:12px}.valtimo-donut-widget__subtitle{font-size:14px}.valtimo-donut-widget__label{font-size:12px;margin-left:12px;margin-bottom:-1px}.valtimo-donut-widget__content{display:flex;align-items:flex-end;justify-content:center;margin-bottom:12px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.DonutChartComponent, selector: "ibm-donut-chart" }, { kind: "component", type: i1$1.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2706
+ }
2707
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DonutDisplayComponent, decorators: [{
2708
+ type: Component,
2709
+ args: [{ selector: 'valtimo-donut-display', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<section class=\"valtimo-donut-widget__header\">\n <h3 class=\"valtimo-donut-widget__title\">{{ displayTypeProperties.title }}</h3>\n\n <span *ngIf=\"displayTypeProperties.subtitle\" class=\"valtimo-donut-widget__subtitle\">\n {{ displayTypeProperties.subtitle }}\n </span>\n</section>\n\n<section class=\"valtimo-donut-widget__content\">\n <ng-container *ngIf=\"donutData$ | async as donutData\">\n @if (donutData.length > 0) {\n <ibm-donut-chart\n type=\"donut\"\n class=\"n-chart\"\n [data]=\"donutData\"\n [options]=\"donutChartOptions$ | async\"\n ></ibm-donut-chart>\n } @else {\n <valtimo-no-results\n [collapseVertically]=\"true\"\n [description]=\"'dossier.widgets.noData' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n }\n </ng-container>\n</section>\n", styles: [":host{display:flex;flex-direction:column;justify-content:space-between;width:100%;height:100%;padding:20px}.valtimo-donut-widget__title,.valtimo-donut-widget__subtitle{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.valtimo-donut-widget__title{font-size:20px;margin-bottom:12px}.valtimo-donut-widget__subtitle{font-size:14px}.valtimo-donut-widget__label{font-size:12px;margin-left:12px;margin-bottom:-1px}.valtimo-donut-widget__content{display:flex;align-items:flex-end;justify-content:center;margin-bottom:12px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
2710
+ }], ctorParameters: () => [{ type: i1$1.CdsThemeService }], propDecorators: { displayTypeKey: [{
2711
+ type: Input
2712
+ }], data: [{
2713
+ type: Input
2714
+ }], displayTypeProperties: [{
2715
+ type: Input
2716
+ }] } });
2717
+
2718
+ /*
2719
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1751
2720
  *
1752
2721
  * Licensed under EUPL, Version 1.2 (the "License");
1753
2722
  * you may not use this file except in compliance with the License.
@@ -1763,7 +2732,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1763
2732
  */
1764
2733
 
1765
2734
  /*
1766
- * Copyright 2015-2023 Ritense BV, the Netherlands.
2735
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1767
2736
  *
1768
2737
  * Licensed under EUPL, Version 1.2 (the "License");
1769
2738
  * you may not use this file except in compliance with the License.
@@ -1779,7 +2748,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1779
2748
  */
1780
2749
 
1781
2750
  /*
1782
- * Copyright 2015-2023 Ritense BV, the Netherlands.
2751
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1783
2752
  *
1784
2753
  * Licensed under EUPL, Version 1.2 (the "License");
1785
2754
  * you may not use this file except in compliance with the License.
@@ -1793,9 +2762,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1793
2762
  * See the License for the specific language governing permissions and
1794
2763
  * limitations under the License.
1795
2764
  */
2765
+ const donutSpecification = {
2766
+ displayTypeKey: 'donut',
2767
+ displayComponent: DonutDisplayComponent,
2768
+ configurationComponent: DonutConfigurationComponent,
2769
+ width: 1,
2770
+ height: 2,
2771
+ translations: {
2772
+ nl: {
2773
+ title: 'Donut-diagram',
2774
+ formTitle: 'Titel (vereist)',
2775
+ formTitleHelperText: 'De titel die wordt weergegeven in de widget',
2776
+ subtitle: 'Ondertitel',
2777
+ subtitleHelperText: 'De ondertitel weergegeven in de widget',
2778
+ label: 'Label',
2779
+ labelHelperText: 'Het label dat wordt weergegeven in de widget',
2780
+ },
2781
+ en: {
2782
+ title: 'Donut chart',
2783
+ formTitle: 'Title (required)',
2784
+ formTitleHelperText: 'The title displayed in the widget',
2785
+ subtitle: 'Subtitle',
2786
+ subtitleHelperText: 'The subtitle displayed in the widget',
2787
+ label: 'Label',
2788
+ labelHelperText: 'The label displayed in the widget',
2789
+ },
2790
+ de: {
2791
+ title: 'Donut-Diagramm',
2792
+ formTitle: 'Titel (erforderlich)',
2793
+ formTitleHelperText: 'Der im Widget angezeigte Titel',
2794
+ subtitle: 'Untertitel',
2795
+ subtitleHelperText: 'Der im Widget angezeigte Untertitel',
2796
+ label: 'Beschriftung',
2797
+ labelHelperText: 'Die im Widget angezeigte Beschriftung',
2798
+ },
2799
+ },
2800
+ requiredDataFeatures: [DATA_FEATURES.NUMBERS],
2801
+ };
1796
2802
 
1797
2803
  /*
1798
- * Copyright 2015-2023 Ritense BV, the Netherlands.
2804
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1799
2805
  *
1800
2806
  * Licensed under EUPL, Version 1.2 (the "License");
1801
2807
  * you may not use this file except in compliance with the License.
@@ -1809,9 +2815,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1809
2815
  * See the License for the specific language governing permissions and
1810
2816
  * limitations under the License.
1811
2817
  */
2818
+ class DonutModule {
2819
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DonutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2820
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.3", ngImport: i0, type: DonutModule, declarations: [DonutDisplayComponent, DonutConfigurationComponent], imports: [CommonModule,
2821
+ ReactiveFormsModule,
2822
+ WidgetTranslatePipeModule,
2823
+ InputModule,
2824
+ CheckboxModule,
2825
+ CommonModule,
2826
+ ChartsModule,
2827
+ CarbonListModule,
2828
+ TranslateModule], exports: [DonutDisplayComponent] }); }
2829
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DonutModule, providers: [{ provide: DISPLAY_TYPE_TOKEN, useValue: donutSpecification, multi: true }], imports: [CommonModule,
2830
+ ReactiveFormsModule,
2831
+ WidgetTranslatePipeModule,
2832
+ InputModule,
2833
+ CheckboxModule,
2834
+ CommonModule,
2835
+ ChartsModule,
2836
+ CarbonListModule,
2837
+ TranslateModule] }); }
2838
+ }
2839
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DonutModule, decorators: [{
2840
+ type: NgModule,
2841
+ args: [{
2842
+ declarations: [DonutDisplayComponent, DonutConfigurationComponent],
2843
+ imports: [
2844
+ CommonModule,
2845
+ ReactiveFormsModule,
2846
+ WidgetTranslatePipeModule,
2847
+ InputModule,
2848
+ CheckboxModule,
2849
+ CommonModule,
2850
+ ChartsModule,
2851
+ CarbonListModule,
2852
+ TranslateModule,
2853
+ ],
2854
+ exports: [DonutDisplayComponent],
2855
+ providers: [{ provide: DISPLAY_TYPE_TOKEN, useValue: donutSpecification, multi: true }],
2856
+ }]
2857
+ }] });
1812
2858
 
1813
2859
  /*
1814
- * Copyright 2015-2023 Ritense BV, the Netherlands.
2860
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1815
2861
  *
1816
2862
  * Licensed under EUPL, Version 1.2 (the "License");
1817
2863
  * you may not use this file except in compliance with the License.
@@ -1827,7 +2873,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1827
2873
  */
1828
2874
 
1829
2875
  /*
1830
- * Copyright 2015-2023 Ritense BV, the Netherlands.
2876
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1831
2877
  *
1832
2878
  * Licensed under EUPL, Version 1.2 (the "License");
1833
2879
  * you may not use this file except in compliance with the License.
@@ -1843,7 +2889,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1843
2889
  */
1844
2890
 
1845
2891
  /*
1846
- * Copyright 2015-2023 Ritense BV, the Netherlands.
2892
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1847
2893
  *
1848
2894
  * Licensed under EUPL, Version 1.2 (the "License");
1849
2895
  * you may not use this file except in compliance with the License.
@@ -1859,7 +2905,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1859
2905
  */
1860
2906
 
1861
2907
  /*
1862
- * Copyright 2015-2023 Ritense BV, the Netherlands.
2908
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1863
2909
  *
1864
2910
  * Licensed under EUPL, Version 1.2 (the "License");
1865
2911
  * you may not use this file except in compliance with the License.
@@ -1873,17 +2919,74 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1873
2919
  * See the License for the specific language governing permissions and
1874
2920
  * limitations under the License.
1875
2921
  */
1876
- var WidgetSeverity;
1877
- (function (WidgetSeverity) {
1878
- WidgetSeverity["BLACK"] = "valtimo-severity__black";
1879
- WidgetSeverity["GREEN"] = "valtimo-severity__green";
1880
- WidgetSeverity["YELLOW"] = "valtimo-severity__yellow";
1881
- WidgetSeverity["ORANGE"] = "valtimo-severity__orange";
1882
- WidgetSeverity["RED"] = "valtimo-severity__red";
1883
- })(WidgetSeverity || (WidgetSeverity = {}));
2922
+ class GaugeConfigurationComponent {
2923
+ set disabled(disabledValue) {
2924
+ if (disabledValue) {
2925
+ this.form.disable();
2926
+ }
2927
+ else {
2928
+ this.form.enable();
2929
+ }
2930
+ }
2931
+ get title() {
2932
+ return this.form.get('title');
2933
+ }
2934
+ get subtitle() {
2935
+ return this.form.get('subtitle');
2936
+ }
2937
+ get label() {
2938
+ return this.form.get('label');
2939
+ }
2940
+ set prefillConfiguration(configurationValue) {
2941
+ if (configurationValue) {
2942
+ this.title.setValue(configurationValue.title || '');
2943
+ this.subtitle.setValue(configurationValue.subtitle || '');
2944
+ this.label.setValue(configurationValue.label || '');
2945
+ }
2946
+ }
2947
+ constructor(fb) {
2948
+ this.fb = fb;
2949
+ this.form = this.fb.group({
2950
+ title: this.fb.control('', [Validators.required]),
2951
+ subtitle: this.fb.control(''),
2952
+ label: this.fb.control(''),
2953
+ useKPI: this.fb.control(false, [Validators.required]),
2954
+ });
2955
+ this.configurationEvent = new EventEmitter();
2956
+ this._subscriptions = new Subscription();
2957
+ }
2958
+ ngOnInit() {
2959
+ this.openFormSubscription();
2960
+ }
2961
+ ngOnDestroy() {
2962
+ this._subscriptions.unsubscribe();
2963
+ }
2964
+ openFormSubscription() {
2965
+ this._subscriptions.add(this.form.valueChanges.pipe(startWith(this.form.value)).subscribe(formValue => {
2966
+ this.configurationEvent.emit({
2967
+ valid: this.form.valid,
2968
+ data: formValue,
2969
+ });
2970
+ }));
2971
+ }
2972
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: GaugeConfigurationComponent, deps: [{ token: i1$3.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
2973
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: GaugeConfigurationComponent, selector: "ng-component", inputs: { displayTypeKey: "displayTypeKey", disabled: "disabled", prefillConfiguration: "prefillConfiguration" }, outputs: { configurationEvent: "configurationEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form [formGroup]=\"form\">\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'formTitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'formTitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"title.dirty && title.invalid\"\n >\n {{ 'formTitle' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"title\" [invalid]=\"title.dirty && title.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'subtitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'subtitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"subtitle.dirty && subtitle.invalid\"\n >\n {{ 'subtitle' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"subtitle\" [invalid]=\"subtitle.dirty && subtitle.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'labelHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'labelHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"label.dirty && label.invalid\"\n >\n {{ 'label' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"label\" [invalid]=\"label.dirty && label.invalid\" />\n </cds-label>\n </div>\n\n</form>\n", dependencies: [{ kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i5.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: WidgetTranslatePipe, name: "widgetTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2974
+ }
2975
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: GaugeConfigurationComponent, decorators: [{
2976
+ type: Component,
2977
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form [formGroup]=\"form\">\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'formTitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'formTitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"title.dirty && title.invalid\"\n >\n {{ 'formTitle' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"title\" [invalid]=\"title.dirty && title.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'subtitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'subtitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"subtitle.dirty && subtitle.invalid\"\n >\n {{ 'subtitle' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"subtitle\" [invalid]=\"subtitle.dirty && subtitle.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'labelHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'labelHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"label.dirty && label.invalid\"\n >\n {{ 'label' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"label\" [invalid]=\"label.dirty && label.invalid\" />\n </cds-label>\n </div>\n\n</form>\n" }]
2978
+ }], ctorParameters: () => [{ type: i1$3.FormBuilder }], propDecorators: { displayTypeKey: [{
2979
+ type: Input
2980
+ }], disabled: [{
2981
+ type: Input
2982
+ }], prefillConfiguration: [{
2983
+ type: Input
2984
+ }], configurationEvent: [{
2985
+ type: Output
2986
+ }] } });
1884
2987
 
1885
2988
  /*
1886
- * Copyright 2015-2023 Ritense BV, the Netherlands.
2989
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1887
2990
  *
1888
2991
  * Licensed under EUPL, Version 1.2 (the "License");
1889
2992
  * you may not use this file except in compliance with the License.
@@ -1899,7 +3002,7 @@ var WidgetSeverity;
1899
3002
  */
1900
3003
 
1901
3004
  /*
1902
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3005
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1903
3006
  *
1904
3007
  * Licensed under EUPL, Version 1.2 (the "License");
1905
3008
  * you may not use this file except in compliance with the License.
@@ -1913,36 +3016,63 @@ var WidgetSeverity;
1913
3016
  * See the License for the specific language governing permissions and
1914
3017
  * limitations under the License.
1915
3018
  */
1916
- class BigNumberDisplayComponent {
1917
- get severityClass() {
1918
- if (!this.displayTypeProperties.useKPI) {
1919
- return WidgetSeverity.BLACK;
1920
- }
1921
- const value = this.data?.value;
1922
- if (value < this.displayTypeProperties.lowSeverityThreshold) {
1923
- return WidgetSeverity.GREEN;
1924
- }
1925
- else if (value < this.displayTypeProperties.mediumSeverityThreshold) {
1926
- return WidgetSeverity.YELLOW;
1927
- }
1928
- else if (value < this.displayTypeProperties.highSeverityThreshold) {
1929
- return WidgetSeverity.ORANGE;
1930
- }
1931
- return WidgetSeverity.RED;
3019
+ class GaugeDisplayComponent {
3020
+ set data(value) {
3021
+ if (!value)
3022
+ return;
3023
+ this._data$.next(value);
1932
3024
  }
1933
- get numberFontSize() {
1934
- if (!this.data) {
1935
- return 122;
3025
+ constructor(themeService, translateService) {
3026
+ this.themeService = themeService;
3027
+ this.translateService = translateService;
3028
+ this._DELTA = -1.0;
3029
+ this._data$ = new BehaviorSubject(null);
3030
+ this.chartData$ = this._data$.pipe(filter(data => !!data), map(data => [
3031
+ {
3032
+ group: 'value',
3033
+ value: this.calculatePercentage(data?.value || 0, data?.total || 0),
3034
+ },
3035
+ {
3036
+ group: 'delta',
3037
+ value: this._DELTA,
3038
+ },
3039
+ ]));
3040
+ this.gaugeChartOptions$ = combineLatest([
3041
+ this.themeService.currentTheme$,
3042
+ this.translateService.stream('key'),
3043
+ ]).pipe(map(([currentTheme]) => ({
3044
+ resizable: true,
3045
+ toolbar: { enabled: false },
3046
+ height: '110px',
3047
+ theme: currentTheme == 'g10' ? 'white' : 'g100',
3048
+ gauge: {
3049
+ alignment: 'center',
3050
+ numberFormatter: value => this.numberFormatter(this, value),
3051
+ deltaArrow: {
3052
+ enabled: false,
3053
+ },
3054
+ showPercentageSymbol: false,
3055
+ type: 'semi',
3056
+ },
3057
+ })));
3058
+ }
3059
+ calculatePercentage(value, total) {
3060
+ return (value * 100.0) / (total || 100.0);
3061
+ }
3062
+ numberFormatter(scope, value) {
3063
+ const scopeData = scope._data$.getValue();
3064
+ if (value == scope._DELTA) {
3065
+ return `${this.translateService.instant('dashboard.of')} ${scopeData?.total || 0} ${scope.displayTypeProperties.label} `;
1936
3066
  }
1937
- return Math.floor(122 / this.data.value.toString().length) + 20;
3067
+ return Math.round(value * (scopeData?.total || 0)) / 100.0 + '';
1938
3068
  }
1939
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BigNumberDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1940
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BigNumberDisplayComponent, selector: "valtimo-big-number-display", inputs: { displayTypeKey: "displayTypeKey", data: "data", displayTypeProperties: "displayTypeProperties" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<section class=\"valtimo-big-number-widget__header\">\n <h3 class=\"valtimo-big-number-widget__title\">{{ displayTypeProperties.title }}</h3>\n\n <span *ngIf=\"displayTypeProperties.subtitle\" class=\"valtimo-big-number-widget__subtitle\">\n {{ displayTypeProperties.subtitle }}\n </span>\n</section>\n\n<section class=\"valtimo-big-number-widget__content\">\n <span\n [class]=\"['valtimo-big-number-widget__number', severityClass]\"\n [style.fontSize.px]=\"numberFontSize\"\n >{{ data?.value }}</span\n >\n\n <span *ngIf=\"displayTypeProperties.label\" class=\"valtimo-big-number-widget__label\">\n {{ displayTypeProperties.label }}\n </span>\n</section>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */:host{display:flex;flex-direction:column;justify-content:space-between;width:100%;height:100%;padding:20px}.valtimo-big-number-widget__title{font-size:20px;margin-bottom:12px}.valtimo-big-number-widget__subtitle{font-size:14px}.valtimo-big-number-widget__number{font-weight:lighter;font-size:122px;line-height:.75em}.valtimo-big-number-widget__label{font-size:12px;margin-left:12px;margin-bottom:-1px}.valtimo-big-number-widget__content{display:flex;align-items:flex-end}.valtimo-severity__black{color:#000}.valtimo-severity__green{color:#42be65}.valtimo-severity__yellow{color:#f1c21b}.valtimo-severity__orange{color:#ff832b}.valtimo-severity__red{color:#da1e28}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3069
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: GaugeDisplayComponent, deps: [{ token: i1$1.CdsThemeService }, { token: i3$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
3070
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: GaugeDisplayComponent, selector: "valtimo-gauge-display", inputs: { displayTypeKey: "displayTypeKey", data: "data", displayTypeProperties: "displayTypeProperties" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<section class=\"valtimo-gauge-widget__header\">\n <h3 class=\"valtimo-gauge-widget__title\">{{ displayTypeProperties.title }}</h3>\n\n <span *ngIf=\"displayTypeProperties.subtitle\" class=\"valtimo-gauge-widget__subtitle\">\n {{ displayTypeProperties.subtitle }}\n </span>\n</section>\n\n<section class=\"valtimo-gauge-widget__content\">\n <ibm-gauge-chart\n *ngIf=\"chartData$ | async as chartData\"\n type=\"gauge\"\n class=\"n-chart\"\n [data]=\"chartData\"\n [options]=\"gaugeChartOptions$ | async\"\n ></ibm-gauge-chart>\n</section>\n", styles: [":host{display:flex;flex-direction:column;justify-content:space-between;width:100%;height:100%;padding:20px}.valtimo-gauge-widget__title,.valtimo-gauge-widget__subtitle{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.valtimo-gauge-widget__title{font-size:20px;margin-bottom:12px}.valtimo-gauge-widget__subtitle{font-size:14px}.valtimo-gauge-widget__label{font-size:12px;margin-left:12px;margin-bottom:-1px}.valtimo-gauge-widget__content{display:flex;align-items:flex-end;margin-bottom:12px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.GaugeChartComponent, selector: "ibm-gauge-chart" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1941
3071
  }
1942
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BigNumberDisplayComponent, decorators: [{
3072
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: GaugeDisplayComponent, decorators: [{
1943
3073
  type: Component,
1944
- args: [{ selector: 'valtimo-big-number-display', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<section class=\"valtimo-big-number-widget__header\">\n <h3 class=\"valtimo-big-number-widget__title\">{{ displayTypeProperties.title }}</h3>\n\n <span *ngIf=\"displayTypeProperties.subtitle\" class=\"valtimo-big-number-widget__subtitle\">\n {{ displayTypeProperties.subtitle }}\n </span>\n</section>\n\n<section class=\"valtimo-big-number-widget__content\">\n <span\n [class]=\"['valtimo-big-number-widget__number', severityClass]\"\n [style.fontSize.px]=\"numberFontSize\"\n >{{ data?.value }}</span\n >\n\n <span *ngIf=\"displayTypeProperties.label\" class=\"valtimo-big-number-widget__label\">\n {{ displayTypeProperties.label }}\n </span>\n</section>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */:host{display:flex;flex-direction:column;justify-content:space-between;width:100%;height:100%;padding:20px}.valtimo-big-number-widget__title{font-size:20px;margin-bottom:12px}.valtimo-big-number-widget__subtitle{font-size:14px}.valtimo-big-number-widget__number{font-weight:lighter;font-size:122px;line-height:.75em}.valtimo-big-number-widget__label{font-size:12px;margin-left:12px;margin-bottom:-1px}.valtimo-big-number-widget__content{display:flex;align-items:flex-end}.valtimo-severity__black{color:#000}.valtimo-severity__green{color:#42be65}.valtimo-severity__yellow{color:#f1c21b}.valtimo-severity__orange{color:#ff832b}.valtimo-severity__red{color:#da1e28}\n"] }]
1945
- }], propDecorators: { displayTypeKey: [{
3074
+ args: [{ selector: 'valtimo-gauge-display', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<section class=\"valtimo-gauge-widget__header\">\n <h3 class=\"valtimo-gauge-widget__title\">{{ displayTypeProperties.title }}</h3>\n\n <span *ngIf=\"displayTypeProperties.subtitle\" class=\"valtimo-gauge-widget__subtitle\">\n {{ displayTypeProperties.subtitle }}\n </span>\n</section>\n\n<section class=\"valtimo-gauge-widget__content\">\n <ibm-gauge-chart\n *ngIf=\"chartData$ | async as chartData\"\n type=\"gauge\"\n class=\"n-chart\"\n [data]=\"chartData\"\n [options]=\"gaugeChartOptions$ | async\"\n ></ibm-gauge-chart>\n</section>\n", styles: [":host{display:flex;flex-direction:column;justify-content:space-between;width:100%;height:100%;padding:20px}.valtimo-gauge-widget__title,.valtimo-gauge-widget__subtitle{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.valtimo-gauge-widget__title{font-size:20px;margin-bottom:12px}.valtimo-gauge-widget__subtitle{font-size:14px}.valtimo-gauge-widget__label{font-size:12px;margin-left:12px;margin-bottom:-1px}.valtimo-gauge-widget__content{display:flex;align-items:flex-end;margin-bottom:12px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
3075
+ }], ctorParameters: () => [{ type: i1$1.CdsThemeService }, { type: i3$1.TranslateService }], propDecorators: { displayTypeKey: [{
1946
3076
  type: Input
1947
3077
  }], data: [{
1948
3078
  type: Input
@@ -1951,7 +3081,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1951
3081
  }] } });
1952
3082
 
1953
3083
  /*
1954
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3084
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1955
3085
  *
1956
3086
  * Licensed under EUPL, Version 1.2 (the "License");
1957
3087
  * you may not use this file except in compliance with the License.
@@ -1967,7 +3097,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1967
3097
  */
1968
3098
 
1969
3099
  /*
1970
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3100
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1971
3101
  *
1972
3102
  * Licensed under EUPL, Version 1.2 (the "License");
1973
3103
  * you may not use this file except in compliance with the License.
@@ -1983,7 +3113,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1983
3113
  */
1984
3114
 
1985
3115
  /*
1986
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3116
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1987
3117
  *
1988
3118
  * Licensed under EUPL, Version 1.2 (the "License");
1989
3119
  * you may not use this file except in compliance with the License.
@@ -1997,58 +3127,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1997
3127
  * See the License for the specific language governing permissions and
1998
3128
  * limitations under the License.
1999
3129
  */
2000
- const bigNumberSpecification = {
2001
- displayTypeKey: 'number',
2002
- displayComponent: BigNumberDisplayComponent,
2003
- configurationComponent: BigNumberConfigurationComponent,
3130
+ const gaugeSpecification = {
3131
+ displayTypeKey: 'gauge',
3132
+ displayComponent: GaugeDisplayComponent,
3133
+ configurationComponent: GaugeConfigurationComponent,
2004
3134
  width: 1,
2005
3135
  height: 1,
2006
3136
  translations: {
2007
3137
  nl: {
2008
- title: 'Groot getal',
3138
+ title: 'Graadmeter',
2009
3139
  formTitle: 'Titel (vereist)',
2010
3140
  formTitleHelperText: 'De titel die wordt weergegeven in de widget',
2011
3141
  subtitle: 'Ondertitel',
2012
3142
  subtitleHelperText: 'De ondertitel weergegeven in de widget',
2013
3143
  label: 'Label',
2014
3144
  labelHelperText: 'Het label dat wordt weergegeven in de widget',
2015
- useKPI: 'KPI gebruiken',
2016
- lowSeverityThreshold: 'Lage ernstdrempel (vereist)',
2017
- mediumSeverityThreshold: 'Middelmatige ernstdrempel (vereist)',
2018
- highSeverityThreshold: 'Hoge ernstdrempel (vereist)',
2019
3145
  },
2020
3146
  en: {
2021
- title: 'Big number',
3147
+ title: 'Gauge',
2022
3148
  formTitle: 'Title (required)',
2023
3149
  formTitleHelperText: 'The title displayed in the widget',
2024
3150
  subtitle: 'Subtitle',
2025
3151
  subtitleHelperText: 'The subtitle displayed in the widget',
2026
3152
  label: 'Label',
2027
3153
  labelHelperText: 'The label displayed in the widget',
2028
- useKPI: 'Use KPI',
2029
- lowSeverityThreshold: 'Low severity threshold (required)',
2030
- mediumSeverityThreshold: 'Medium severity threshold (required)',
2031
- highSeverityThreshold: 'High severity threshold (required)',
2032
3154
  },
2033
3155
  de: {
2034
- title: 'Große Nummer',
3156
+ title: 'Messgerät',
2035
3157
  formTitle: 'Titel (erforderlich)',
2036
3158
  formTitleHelperText: 'Der im Widget angezeigte Titel',
2037
3159
  subtitle: 'Untertitel',
2038
3160
  subtitleHelperText: 'Der im Widget angezeigte Untertitel',
2039
3161
  label: 'Beschriftung',
2040
3162
  labelHelperText: 'Die im Widget angezeigte Beschriftung',
2041
- useKPI: 'Verwenden Sie KPI',
2042
- lowSeverityThreshold: 'Niedriger Schweregradschwellenwert (erforderlich)',
2043
- mediumSeverityThreshold: 'Mittlerer Schweregradschwellenwert (erforderlich)',
2044
- highSeverityThreshold: 'Hoher Schweregradschwellenwert (erforderlich)',
2045
3163
  },
2046
3164
  },
2047
- requiredDataFeatures: [DATA_FEATURES.NUMBER],
3165
+ requiredDataFeatures: [DATA_FEATURES.NUMBER, DATA_FEATURES.TOTAL],
2048
3166
  };
2049
3167
 
2050
3168
  /*
2051
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3169
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2052
3170
  *
2053
3171
  * Licensed under EUPL, Version 1.2 (the "License");
2054
3172
  * you may not use this file except in compliance with the License.
@@ -2062,37 +3180,75 @@ const bigNumberSpecification = {
2062
3180
  * See the License for the specific language governing permissions and
2063
3181
  * limitations under the License.
2064
3182
  */
2065
- class BigNumberModule {
2066
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BigNumberModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2067
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: BigNumberModule, declarations: [BigNumberDisplayComponent, BigNumberConfigurationComponent], imports: [CommonModule,
3183
+ class GaugeModule {
3184
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: GaugeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
3185
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.3", ngImport: i0, type: GaugeModule, declarations: [GaugeDisplayComponent, GaugeConfigurationComponent], imports: [CommonModule,
2068
3186
  ReactiveFormsModule,
2069
3187
  WidgetTranslatePipeModule,
2070
3188
  InputModule,
2071
- CheckboxModule], exports: [BigNumberDisplayComponent] }); }
2072
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BigNumberModule, providers: [{ provide: DISPLAY_TYPE_TOKEN, useValue: bigNumberSpecification, multi: true }], imports: [CommonModule,
3189
+ CheckboxModule,
3190
+ CommonModule,
3191
+ ChartsModule], exports: [GaugeDisplayComponent] }); }
3192
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: GaugeModule, providers: [{ provide: DISPLAY_TYPE_TOKEN, useValue: gaugeSpecification, multi: true }], imports: [CommonModule,
2073
3193
  ReactiveFormsModule,
2074
3194
  WidgetTranslatePipeModule,
2075
3195
  InputModule,
2076
- CheckboxModule] }); }
3196
+ CheckboxModule,
3197
+ CommonModule,
3198
+ ChartsModule] }); }
2077
3199
  }
2078
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BigNumberModule, decorators: [{
3200
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: GaugeModule, decorators: [{
2079
3201
  type: NgModule,
2080
3202
  args: [{
2081
- declarations: [BigNumberDisplayComponent, BigNumberConfigurationComponent],
3203
+ declarations: [GaugeDisplayComponent, GaugeConfigurationComponent],
2082
3204
  imports: [
2083
3205
  CommonModule,
2084
3206
  ReactiveFormsModule,
2085
3207
  WidgetTranslatePipeModule,
2086
3208
  InputModule,
2087
3209
  CheckboxModule,
3210
+ CommonModule,
3211
+ ChartsModule,
2088
3212
  ],
2089
- exports: [BigNumberDisplayComponent],
2090
- providers: [{ provide: DISPLAY_TYPE_TOKEN, useValue: bigNumberSpecification, multi: true }],
3213
+ exports: [GaugeDisplayComponent],
3214
+ providers: [{ provide: DISPLAY_TYPE_TOKEN, useValue: gaugeSpecification, multi: true }],
2091
3215
  }]
2092
3216
  }] });
2093
3217
 
2094
3218
  /*
2095
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3219
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
3220
+ *
3221
+ * Licensed under EUPL, Version 1.2 (the "License");
3222
+ * you may not use this file except in compliance with the License.
3223
+ * You may obtain a copy of the License at
3224
+ *
3225
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
3226
+ *
3227
+ * Unless required by applicable law or agreed to in writing, software
3228
+ * distributed under the License is distributed on an "AS IS" basis,
3229
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3230
+ * See the License for the specific language governing permissions and
3231
+ * limitations under the License.
3232
+ */
3233
+
3234
+ /*
3235
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
3236
+ *
3237
+ * Licensed under EUPL, Version 1.2 (the "License");
3238
+ * you may not use this file except in compliance with the License.
3239
+ * You may obtain a copy of the License at
3240
+ *
3241
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
3242
+ *
3243
+ * Unless required by applicable law or agreed to in writing, software
3244
+ * distributed under the License is distributed on an "AS IS" basis,
3245
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3246
+ * See the License for the specific language governing permissions and
3247
+ * limitations under the License.
3248
+ */
3249
+
3250
+ /*
3251
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2096
3252
  *
2097
3253
  * Licensed under EUPL, Version 1.2 (the "License");
2098
3254
  * you may not use this file except in compliance with the License.
@@ -2108,7 +3264,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2108
3264
  */
2109
3265
 
2110
3266
  /*
2111
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3267
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2112
3268
  *
2113
3269
  * Licensed under EUPL, Version 1.2 (the "License");
2114
3270
  * you may not use this file except in compliance with the License.
@@ -2122,9 +3278,68 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2122
3278
  * See the License for the specific language governing permissions and
2123
3279
  * limitations under the License.
2124
3280
  */
3281
+ class MeterConfigurationComponent {
3282
+ set disabled(disabledValue) {
3283
+ if (disabledValue) {
3284
+ this.form.disable();
3285
+ }
3286
+ else {
3287
+ this.form.enable();
3288
+ }
3289
+ }
3290
+ get title() {
3291
+ return this.form.get('title');
3292
+ }
3293
+ get subtitle() {
3294
+ return this.form.get('subtitle');
3295
+ }
3296
+ set prefillConfiguration(configurationValue) {
3297
+ if (configurationValue) {
3298
+ this.title.setValue(configurationValue.title || '');
3299
+ this.subtitle.setValue(configurationValue.subtitle || '');
3300
+ }
3301
+ }
3302
+ constructor(fb) {
3303
+ this.fb = fb;
3304
+ this.form = this.fb.group({
3305
+ title: this.fb.control('', [Validators.required]),
3306
+ subtitle: this.fb.control(''),
3307
+ });
3308
+ this.configurationEvent = new EventEmitter();
3309
+ this._subscriptions = new Subscription();
3310
+ }
3311
+ ngOnInit() {
3312
+ this.openFormSubscription();
3313
+ }
3314
+ ngOnDestroy() {
3315
+ this._subscriptions.unsubscribe();
3316
+ }
3317
+ openFormSubscription() {
3318
+ this._subscriptions.add(this.form.valueChanges.pipe(startWith(this.form.value)).subscribe(formValue => {
3319
+ this.configurationEvent.emit({
3320
+ valid: this.form.valid,
3321
+ data: formValue,
3322
+ });
3323
+ }));
3324
+ }
3325
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: MeterConfigurationComponent, deps: [{ token: i1$3.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
3326
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: MeterConfigurationComponent, selector: "ng-component", inputs: { displayTypeKey: "displayTypeKey", disabled: "disabled", prefillConfiguration: "prefillConfiguration" }, outputs: { configurationEvent: "configurationEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form [formGroup]=\"form\">\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'formTitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'formTitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"title.dirty && title.invalid\"\n >\n {{ 'formTitle' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"title\" [invalid]=\"title.dirty && title.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'subtitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'subtitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"subtitle.dirty && subtitle.invalid\"\n >\n {{ 'subtitle' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"subtitle\" [invalid]=\"subtitle.dirty && subtitle.invalid\" />\n </cds-label>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i5.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: WidgetTranslatePipe, name: "widgetTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3327
+ }
3328
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: MeterConfigurationComponent, decorators: [{
3329
+ type: Component,
3330
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form [formGroup]=\"form\">\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'formTitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'formTitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"title.dirty && title.invalid\"\n >\n {{ 'formTitle' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"title\" [invalid]=\"title.dirty && title.invalid\" />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'subtitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalidText]=\"'subtitleHelperText' | widgetTranslate: displayTypeKey | async\"\n [invalid]=\"subtitle.dirty && subtitle.invalid\"\n >\n {{ 'subtitle' | widgetTranslate: displayTypeKey | async }}\n\n <input cdsText formControlName=\"subtitle\" [invalid]=\"subtitle.dirty && subtitle.invalid\" />\n </cds-label>\n </div>\n</form>\n" }]
3331
+ }], ctorParameters: () => [{ type: i1$3.FormBuilder }], propDecorators: { displayTypeKey: [{
3332
+ type: Input
3333
+ }], disabled: [{
3334
+ type: Input
3335
+ }], prefillConfiguration: [{
3336
+ type: Input
3337
+ }], configurationEvent: [{
3338
+ type: Output
3339
+ }] } });
2125
3340
 
2126
3341
  /*
2127
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3342
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2128
3343
  *
2129
3344
  * Licensed under EUPL, Version 1.2 (the "License");
2130
3345
  * you may not use this file except in compliance with the License.
@@ -2140,7 +3355,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2140
3355
  */
2141
3356
 
2142
3357
  /*
2143
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3358
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2144
3359
  *
2145
3360
  * Licensed under EUPL, Version 1.2 (the "License");
2146
3361
  * you may not use this file except in compliance with the License.
@@ -2155,13 +3370,47 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2155
3370
  * limitations under the License.
2156
3371
  */
2157
3372
  class MeterDisplayComponent {
2158
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MeterDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2159
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MeterDisplayComponent, selector: "valtimo-meter-display", inputs: { displayTypeKey: "displayTypeKey", data: "data", displayTypeProperties: "displayTypeProperties" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\nmeter works\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */:host{display:flex;padding:20px;width:100%;height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3373
+ set data(value) {
3374
+ if (!value)
3375
+ return;
3376
+ this._data$.next(value);
3377
+ }
3378
+ constructor(themeService) {
3379
+ this.themeService = themeService;
3380
+ this._data$ = new BehaviorSubject(null);
3381
+ this.meterData$ = this._data$.pipe(filter(data => !!data), map(data => data?.values.map(dataValue => ({
3382
+ group: dataValue.label,
3383
+ value: dataValue.value,
3384
+ })) || []));
3385
+ this.meterChartOptions$ = combineLatest([
3386
+ this.themeService.currentTheme$,
3387
+ this.meterData$,
3388
+ ]).pipe(map(([currentTheme, meterData]) => ({
3389
+ resizable: true,
3390
+ toolbar: { enabled: false },
3391
+ theme: currentTheme,
3392
+ height: '60px',
3393
+ meter: {
3394
+ height: 60,
3395
+ showLabels: false,
3396
+ title: {
3397
+ percentageIndicator: {
3398
+ enabled: false,
3399
+ },
3400
+ },
3401
+ proportional: {
3402
+ total: meterData.reduce((acc, curr) => acc + curr.value, 0),
3403
+ },
3404
+ },
3405
+ })));
3406
+ }
3407
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: MeterDisplayComponent, deps: [{ token: i1$1.CdsThemeService }], target: i0.ɵɵFactoryTarget.Component }); }
3408
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.3", type: MeterDisplayComponent, selector: "valtimo-meter-display", inputs: { displayTypeKey: "displayTypeKey", data: "data", displayTypeProperties: "displayTypeProperties" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<section class=\"valtimo-donut-widget__header\">\n <h3 class=\"valtimo-donut-widget__title\">{{ displayTypeProperties.title }}</h3>\n\n <span *ngIf=\"displayTypeProperties.subtitle\" class=\"valtimo-donut-widget__subtitle\">\n {{ displayTypeProperties.subtitle }}\n </span>\n</section>\n\n<section class=\"valtimo-donut-widget__content\">\n <ng-container *ngIf=\"meterData$ | async as meterData\">\n @if (meterData.length > 0) {\n <ibm-meter-chart [data]=\"meterData\" [options]=\"meterChartOptions$ | async\"></ibm-meter-chart>\n } @else {\n <valtimo-no-results\n [collapseVertically]=\"true\"\n [description]=\"'dossier.widgets.noData' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n }\n </ng-container>\n</section>\n", styles: [":host{display:flex;flex-direction:column;justify-content:space-between;width:100%;height:100%;padding:20px}.valtimo-donut-widget__title,.valtimo-donut-widget__subtitle{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.valtimo-donut-widget__title{font-size:20px;margin-bottom:12px}.valtimo-donut-widget__subtitle{font-size:14px}.valtimo-donut-widget__label{font-size:12px;margin-left:12px;margin-bottom:-1px}.valtimo-donut-widget__content{display:flex;align-items:flex-end;justify-content:center;margin-bottom:12px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.MeterChartComponent, selector: "ibm-meter-chart" }, { kind: "component", type: i1$1.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2160
3409
  }
2161
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MeterDisplayComponent, decorators: [{
3410
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: MeterDisplayComponent, decorators: [{
2162
3411
  type: Component,
2163
- args: [{ selector: 'valtimo-meter-display', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\nmeter works\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */:host{display:flex;padding:20px;width:100%;height:100%}\n"] }]
2164
- }], propDecorators: { displayTypeKey: [{
3412
+ args: [{ selector: 'valtimo-meter-display', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<section class=\"valtimo-donut-widget__header\">\n <h3 class=\"valtimo-donut-widget__title\">{{ displayTypeProperties.title }}</h3>\n\n <span *ngIf=\"displayTypeProperties.subtitle\" class=\"valtimo-donut-widget__subtitle\">\n {{ displayTypeProperties.subtitle }}\n </span>\n</section>\n\n<section class=\"valtimo-donut-widget__content\">\n <ng-container *ngIf=\"meterData$ | async as meterData\">\n @if (meterData.length > 0) {\n <ibm-meter-chart [data]=\"meterData\" [options]=\"meterChartOptions$ | async\"></ibm-meter-chart>\n } @else {\n <valtimo-no-results\n [collapseVertically]=\"true\"\n [description]=\"'dossier.widgets.noData' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n }\n </ng-container>\n</section>\n", styles: [":host{display:flex;flex-direction:column;justify-content:space-between;width:100%;height:100%;padding:20px}.valtimo-donut-widget__title,.valtimo-donut-widget__subtitle{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.valtimo-donut-widget__title{font-size:20px;margin-bottom:12px}.valtimo-donut-widget__subtitle{font-size:14px}.valtimo-donut-widget__label{font-size:12px;margin-left:12px;margin-bottom:-1px}.valtimo-donut-widget__content{display:flex;align-items:flex-end;justify-content:center;margin-bottom:12px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
3413
+ }], ctorParameters: () => [{ type: i1$1.CdsThemeService }], propDecorators: { displayTypeKey: [{
2165
3414
  type: Input
2166
3415
  }], data: [{
2167
3416
  type: Input
@@ -2170,7 +3419,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2170
3419
  }] } });
2171
3420
 
2172
3421
  /*
2173
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3422
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2174
3423
  *
2175
3424
  * Licensed under EUPL, Version 1.2 (the "License");
2176
3425
  * you may not use this file except in compliance with the License.
@@ -2186,7 +3435,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2186
3435
  */
2187
3436
 
2188
3437
  /*
2189
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3438
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2190
3439
  *
2191
3440
  * Licensed under EUPL, Version 1.2 (the "License");
2192
3441
  * you may not use this file except in compliance with the License.
@@ -2202,7 +3451,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2202
3451
  */
2203
3452
 
2204
3453
  /*
2205
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3454
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2206
3455
  *
2207
3456
  * Licensed under EUPL, Version 1.2 (the "License");
2208
3457
  * you may not use this file except in compliance with the License.
@@ -2219,24 +3468,43 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2219
3468
  const meterSpecification = {
2220
3469
  displayTypeKey: 'meter',
2221
3470
  displayComponent: MeterDisplayComponent,
3471
+ configurationComponent: MeterConfigurationComponent,
2222
3472
  width: 2,
2223
3473
  height: 1,
2224
3474
  translations: {
2225
3475
  nl: {
2226
3476
  title: 'Meter',
3477
+ formTitle: 'Titel (vereist)',
3478
+ formTitleHelperText: 'De titel die wordt weergegeven in de widget',
3479
+ subtitle: 'Ondertitel',
3480
+ subtitleHelperText: 'De ondertitel weergegeven in de widget',
3481
+ label: 'Label',
3482
+ labelHelperText: 'Het label dat wordt weergegeven in de widget',
2227
3483
  },
2228
3484
  en: {
2229
3485
  title: 'Meter',
3486
+ formTitle: 'Title (required)',
3487
+ formTitleHelperText: 'The title displayed in the widget',
3488
+ subtitle: 'Subtitle',
3489
+ subtitleHelperText: 'The subtitle displayed in the widget',
3490
+ label: 'Label',
3491
+ labelHelperText: 'The label displayed in the widget',
2230
3492
  },
2231
3493
  de: {
2232
3494
  title: 'Meter',
3495
+ formTitle: 'Titel (erforderlich)',
3496
+ formTitleHelperText: 'Der im Widget angezeigte Titel',
3497
+ subtitle: 'Untertitel',
3498
+ subtitleHelperText: 'Der im Widget angezeigte Untertitel',
3499
+ label: 'Beschriftung',
3500
+ labelHelperText: 'Die im Widget angezeigte Beschriftung',
2233
3501
  },
2234
3502
  },
2235
- requiredDataFeatures: [],
3503
+ requiredDataFeatures: [DATA_FEATURES.NUMBERS],
2236
3504
  };
2237
3505
 
2238
3506
  /*
2239
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3507
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2240
3508
  *
2241
3509
  * Licensed under EUPL, Version 1.2 (the "License");
2242
3510
  * you may not use this file except in compliance with the License.
@@ -2251,22 +3519,48 @@ const meterSpecification = {
2251
3519
  * limitations under the License.
2252
3520
  */
2253
3521
  class MeterModule {
2254
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MeterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2255
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: MeterModule, declarations: [MeterDisplayComponent], imports: [CommonModule], exports: [MeterDisplayComponent] }); }
2256
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MeterModule, providers: [{ provide: DISPLAY_TYPE_TOKEN, useValue: meterSpecification, multi: true }], imports: [CommonModule] }); }
3522
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: MeterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
3523
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.3", ngImport: i0, type: MeterModule, declarations: [MeterDisplayComponent, MeterConfigurationComponent], imports: [CommonModule,
3524
+ ReactiveFormsModule,
3525
+ WidgetTranslatePipeModule,
3526
+ InputModule,
3527
+ CheckboxModule,
3528
+ CommonModule,
3529
+ ChartsModule,
3530
+ CarbonListModule,
3531
+ TranslateModule], exports: [MeterDisplayComponent] }); }
3532
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: MeterModule, providers: [{ provide: DISPLAY_TYPE_TOKEN, useValue: meterSpecification, multi: true }], imports: [CommonModule,
3533
+ ReactiveFormsModule,
3534
+ WidgetTranslatePipeModule,
3535
+ InputModule,
3536
+ CheckboxModule,
3537
+ CommonModule,
3538
+ ChartsModule,
3539
+ CarbonListModule,
3540
+ TranslateModule] }); }
2257
3541
  }
2258
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MeterModule, decorators: [{
3542
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: MeterModule, decorators: [{
2259
3543
  type: NgModule,
2260
3544
  args: [{
2261
- declarations: [MeterDisplayComponent],
2262
- imports: [CommonModule],
3545
+ declarations: [MeterDisplayComponent, MeterConfigurationComponent],
3546
+ imports: [
3547
+ CommonModule,
3548
+ ReactiveFormsModule,
3549
+ WidgetTranslatePipeModule,
3550
+ InputModule,
3551
+ CheckboxModule,
3552
+ CommonModule,
3553
+ ChartsModule,
3554
+ CarbonListModule,
3555
+ TranslateModule,
3556
+ ],
2263
3557
  exports: [MeterDisplayComponent],
2264
3558
  providers: [{ provide: DISPLAY_TYPE_TOKEN, useValue: meterSpecification, multi: true }],
2265
3559
  }]
2266
3560
  }] });
2267
3561
 
2268
3562
  /*
2269
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3563
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2270
3564
  *
2271
3565
  * Licensed under EUPL, Version 1.2 (the "License");
2272
3566
  * you may not use this file except in compliance with the License.
@@ -2282,7 +3576,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2282
3576
  */
2283
3577
 
2284
3578
  /*
2285
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3579
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2286
3580
  *
2287
3581
  * Licensed under EUPL, Version 1.2 (the "License");
2288
3582
  * you may not use this file except in compliance with the License.
@@ -2298,7 +3592,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2298
3592
  */
2299
3593
 
2300
3594
  /*
2301
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3595
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2302
3596
  *
2303
3597
  * Licensed under EUPL, Version 1.2 (the "License");
2304
3598
  * you may not use this file except in compliance with the License.
@@ -2314,7 +3608,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2314
3608
  */
2315
3609
 
2316
3610
  /*
2317
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3611
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2318
3612
  *
2319
3613
  * Licensed under EUPL, Version 1.2 (the "License");
2320
3614
  * you may not use this file except in compliance with the License.
@@ -2330,7 +3624,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2330
3624
  */
2331
3625
 
2332
3626
  /*
2333
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3627
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
2334
3628
  *
2335
3629
  * Licensed under EUPL, Version 1.2 (the "License");
2336
3630
  * you may not use this file except in compliance with the License.
@@ -2352,5 +3646,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2352
3646
  * Generated bundle index. Do not edit.
2353
3647
  */
2354
3648
 
2355
- export { BarChartDisplayComponent, BarChartModule, BigNumberConfigurationComponent, BigNumberDisplayComponent, BigNumberModule, CaseCountConfigurationComponent, CaseCountDataSourceModule, DATA_FEATURES, DATA_SOURCE_TOKEN, DISPLAY_TYPE_TOKEN, DashboardComponent, DashboardModule, DashboardService, HttpLoaderFactory, MeterDisplayComponent, MeterModule, Operator, TestConfigurationComponent, TestDataSourceModule, WIDGET_1X_HEIGHT, WIDGET_1X_MIN_WIDTH, WidgetDashboardComponent, WidgetDashboardContentComponent, WidgetService, WidgetSeverity, WidgetTranslatePipe, WidgetTranslatePipeModule, WidgetTranslationService, barChartSpecification, bigNumberSpecification, caseCountDataSourceSpecification, meterSpecification, testDataSourceSpecification };
3649
+ export { BigNumberConfigurationComponent, BigNumberDisplayComponent, BigNumberModule, CaseCountConfigurationComponent, CaseCountDataSourceModule, CaseCountsConfigurationComponent, CaseCountsDataSourceModule, CaseGroupByConfigurationComponent, CaseGroupByDataSourceModule, DATA_FEATURES, DATA_SOURCE_TOKEN, DISPLAY_TYPE_TOKEN, DashboardComponent, DashboardModule, DashboardService, DonutConfigurationComponent, DonutDisplayComponent, DonutModule, GaugeConfigurationComponent, GaugeDisplayComponent, GaugeModule, HttpLoaderFactory, MeterConfigurationComponent, MeterDisplayComponent, MeterModule, Operator, WIDGET_1X_HEIGHT, WIDGET_1X_MIN_WIDTH, WidgetDashboardComponent, WidgetDashboardContentComponent, WidgetService, WidgetSeverity, WidgetTranslatePipe, WidgetTranslatePipeModule, WidgetTranslationService, bigNumberSpecification, caseCountDataSourceSpecification, caseCountsDataSourceSpecification, caseGroupByDataSourceSpecification, donutSpecification, gaugeSpecification, meterSpecification };
2356
3650
  //# sourceMappingURL=valtimo-dashboard.mjs.map