@porscheinformatik/clr-addons 19.21.2 → 21.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (280) hide show
  1. package/fesm2022/porscheinformatik-clr-addons-charts.mjs +256 -251
  2. package/fesm2022/porscheinformatik-clr-addons-charts.mjs.map +1 -1
  3. package/fesm2022/{clr-addons.mjs → porscheinformatik-clr-addons.mjs} +1409 -1747
  4. package/fesm2022/porscheinformatik-clr-addons.mjs.map +1 -0
  5. package/package.json +10 -14
  6. package/styles/clr-addons-phs.css +25 -24
  7. package/styles/clr-addons-phs.css.map +1 -1
  8. package/styles/clr-addons-phs.min.css +1 -1
  9. package/styles/clr-addons-phs.min.css.map +1 -1
  10. package/types/porscheinformatik-clr-addons-charts.d.ts +601 -0
  11. package/types/porscheinformatik-clr-addons.d.ts +4773 -0
  12. package/abstract-form-component/abstract-form-component.d.ts +0 -32
  13. package/abstract-form-component/control-id.service.d.ts +0 -11
  14. package/abstract-form-component/form.module.d.ts +0 -7
  15. package/abstract-form-component/index.d.ts +0 -2
  16. package/abstract-form-component/label.d.ts +0 -15
  17. package/action-panel/action-panel-container-content.d.ts +0 -5
  18. package/action-panel/action-panel-container-footer.d.ts +0 -5
  19. package/action-panel/action-panel-container.d.ts +0 -5
  20. package/action-panel/action-panel.d.ts +0 -14
  21. package/action-panel/action-panel.module.d.ts +0 -13
  22. package/action-panel/index.d.ts +0 -5
  23. package/autocomplete-off/autocomplete-off.directive.d.ts +0 -5
  24. package/autocomplete-off/autocomplete-off.module.d.ts +0 -7
  25. package/autocomplete-off/index.d.ts +0 -2
  26. package/back-button/back-button.d.ts +0 -9
  27. package/back-button/back-button.module.d.ts +0 -10
  28. package/back-button/index.d.ts +0 -2
  29. package/brand-avatar/brand-avatar.d.ts +0 -27
  30. package/brand-avatar/brand-avatar.module.d.ts +0 -9
  31. package/brand-avatar/index.d.ts +0 -2
  32. package/breadcrumb/breadcrumb-model.interface.d.ts +0 -10
  33. package/breadcrumb/breadcrumb.d.ts +0 -17
  34. package/breadcrumb/breadcrumb.module.d.ts +0 -10
  35. package/breadcrumb/breadcrumb.service.d.ts +0 -9
  36. package/breadcrumb/index.d.ts +0 -4
  37. package/charts/area-chart/area-chart.component.d.ts +0 -41
  38. package/charts/bar-chart/bar-chart.component.d.ts +0 -97
  39. package/charts/chart-alert-overlay/chart-alert-overlay.component.d.ts +0 -7
  40. package/charts/chart-export/chart-export-button.component.d.ts +0 -13
  41. package/charts/chart-export/chart-export.service.d.ts +0 -20
  42. package/charts/chart-legend/chart-legend.component.d.ts +0 -12
  43. package/charts/chart-tooltip/chart-tooltip.component.d.ts +0 -16
  44. package/charts/charts.module.d.ts +0 -21
  45. package/charts/combo-chart/combo-chart.component.d.ts +0 -83
  46. package/charts/constants/alert-message-constants.d.ts +0 -5
  47. package/charts/constants/index.d.ts +0 -1
  48. package/charts/directives/auto-position.directive.d.ts +0 -16
  49. package/charts/directives/index.d.ts +0 -4
  50. package/charts/directives/outside-click.directive.d.ts +0 -10
  51. package/charts/directives/screen-state.service.d.ts +0 -35
  52. package/charts/directives/tenant-full-date-range.directive.d.ts +0 -10
  53. package/charts/directives/window-resize.directive.d.ts +0 -12
  54. package/charts/funnel-chart/funnel-chart.component.d.ts +0 -154
  55. package/charts/index.d.ts +0 -8
  56. package/charts/line-chart/line-chart.component.d.ts +0 -43
  57. package/charts/pie-chart/pie-chart.component.d.ts +0 -40
  58. package/charts/shared/chart-base.d.ts +0 -37
  59. package/charts/shared/chart-skeleton.component.d.ts +0 -8
  60. package/charts/shared/d3-chart-axes.d.ts +0 -50
  61. package/charts/shared/d3-dots.d.ts +0 -10
  62. package/charts/shared/xy-chart.types.d.ts +0 -35
  63. package/charts/utils/color.utils.d.ts +0 -9
  64. package/charts/utils/index.d.ts +0 -3
  65. package/charts/utils/text.utils.d.ts +0 -8
  66. package/charts/utils/utils.d.ts +0 -2
  67. package/clr-addons.module.d.ts +0 -48
  68. package/clr-control-warning/if-warning.directive.d.ts +0 -19
  69. package/clr-control-warning/if-warning.module.d.ts +0 -8
  70. package/clr-control-warning/index.d.ts +0 -2
  71. package/collapse-expand-section/collapse-expand-section.d.ts +0 -14
  72. package/collapse-expand-section/collapse-expand-section.module.d.ts +0 -10
  73. package/collapse-expand-section/index.d.ts +0 -2
  74. package/content-panel/content-panel-container-content.d.ts +0 -5
  75. package/content-panel/content-panel-container-footer.d.ts +0 -5
  76. package/content-panel/content-panel-container.d.ts +0 -5
  77. package/content-panel/content-panel.d.ts +0 -14
  78. package/content-panel/content-panel.module.d.ts +0 -13
  79. package/content-panel/index.d.ts +0 -5
  80. package/control-enter-submit/clr-control-enter-submit.directive.d.ts +0 -16
  81. package/control-enter-submit/index.d.ts +0 -1
  82. package/copy-to-clipboard/copy-to-clipboard.d.ts +0 -31
  83. package/copy-to-clipboard/index.d.ts +0 -1
  84. package/data-list-validator/data-list-predefined-validator.directive.d.ts +0 -14
  85. package/data-list-validator/data-list-validator.module.d.ts +0 -7
  86. package/data-list-validator/data-list.validator.d.ts +0 -26
  87. package/data-list-validator/index.d.ts +0 -3
  88. package/datagrid/column-reorder/column-reorder.directive.d.ts +0 -32
  89. package/datagrid/column-reorder/datagrid-column-reorder.module.d.ts +0 -9
  90. package/datagrid/column-reorder/dynamic-cell-content.component.d.ts +0 -9
  91. package/datagrid/column-reorder/dynamic-column.d.ts +0 -10
  92. package/datagrid/column-reorder/index.d.ts +0 -4
  93. package/datagrid/datagrid-state-persistence/column-hidden-state-persistence.directive.d.ts +0 -21
  94. package/datagrid/datagrid-state-persistence/datagrid-field.directive.d.ts +0 -8
  95. package/datagrid/datagrid-state-persistence/datagrid-state-persistence-model.interface.d.ts +0 -15
  96. package/datagrid/datagrid-state-persistence/datagrid-state-persistence.module.d.ts +0 -9
  97. package/datagrid/datagrid-state-persistence/index.d.ts +0 -6
  98. package/datagrid/datagrid-state-persistence/state-persistence-key.directive.d.ts +0 -82
  99. package/datagrid/datagrid-state-persistence/state-persistence-options.interface.d.ts +0 -14
  100. package/datagrid/date-filter/date-filter.component.d.ts +0 -58
  101. package/datagrid/date-filter/date-filter.module.d.ts +0 -12
  102. package/datagrid/date-filter/index.d.ts +0 -2
  103. package/datagrid/date-filter/nested-property.d.ts +0 -10
  104. package/datagrid/enum-filter/enum-filter.component.d.ts +0 -44
  105. package/datagrid/enum-filter/enum-filter.module.d.ts +0 -10
  106. package/datagrid/enum-filter/index.d.ts +0 -2
  107. package/datagrid/index.d.ts +0 -4
  108. package/date-time-container/date-time-container.d.ts +0 -11
  109. package/date-time-container/date-time-module.d.ts +0 -11
  110. package/date-time-container/index.d.ts +0 -3
  111. package/date-time-container/time-input.d.ts +0 -5
  112. package/daterangepicker/daterange.constants.d.ts +0 -21
  113. package/daterangepicker/daterangepicker.module.d.ts +0 -18
  114. package/daterangepicker/directives/abstract-container.component.d.ts +0 -53
  115. package/daterangepicker/directives/datepicker/datepicker.component.d.ts +0 -66
  116. package/daterangepicker/directives/daterangepicker/daterangepicker.directive.d.ts +0 -133
  117. package/daterangepicker/directives/daterangepicker-container/daterangepicker-container.component.d.ts +0 -133
  118. package/daterangepicker/directives/if-daterange-error.directive.d.ts +0 -40
  119. package/daterangepicker/directives/timepicker/timepicker.component.d.ts +0 -33
  120. package/daterangepicker/index.d.ts +0 -16
  121. package/daterangepicker/interfaces/daterange-preset.interface.d.ts +0 -8
  122. package/daterangepicker/interfaces/daterange.interface.d.ts +0 -12
  123. package/daterangepicker/interfaces/timerange-preset.interface.d.ts +0 -8
  124. package/daterangepicker/interfaces/timerange.interface.d.ts +0 -13
  125. package/daterangepicker/models/day.model.d.ts +0 -80
  126. package/daterangepicker/models/popover-positions.model.d.ts +0 -20
  127. package/daterangepicker/models/time.model.d.ts +0 -65
  128. package/daterangepicker/providers/daterange-control-state.service.d.ts +0 -42
  129. package/daterangepicker/providers/daterange-parsing.service.d.ts +0 -77
  130. package/daterangepicker/providers/daterange.service.d.ts +0 -47
  131. package/daterangepicker/providers/opened-datepickers-tracker.service.d.ts +0 -20
  132. package/daterangepicker/validators/daterange-max.validator.d.ts +0 -32
  133. package/daterangepicker/validators/daterange-min.validator.d.ts +0 -32
  134. package/daterangepicker/validators/daterange-order.validator.d.ts +0 -30
  135. package/daterangepicker/validators/daterange-required.validator.d.ts +0 -29
  136. package/dot-pager/dot-pager.d.ts +0 -21
  137. package/dot-pager/dot-pager.module.d.ts +0 -10
  138. package/dot-pager/index.d.ts +0 -2
  139. package/dropdown/clr-dropdown-overflow.directive.d.ts +0 -26
  140. package/dropdown/clr-dropdown-overflow.module.d.ts +0 -7
  141. package/dropdown/index.d.ts +0 -2
  142. package/export-datagrid-button/export-datagrid-button.component.d.ts +0 -39
  143. package/export-datagrid-button/export-datagrid-button.module.d.ts +0 -7
  144. package/export-datagrid-button/export-datagrid.service.d.ts +0 -15
  145. package/export-datagrid-button/export-type.model.d.ts +0 -9
  146. package/export-datagrid-button/index.d.ts +0 -4
  147. package/fesm2022/clr-addons.mjs.map +0 -1
  148. package/flow-bar/flow-bar.d.ts +0 -32
  149. package/flow-bar/flow-bar.module.d.ts +0 -11
  150. package/flow-bar/index.d.ts +0 -2
  151. package/focus-first-invalid-field/focus-first-invalid-field.directive.d.ts +0 -7
  152. package/focus-first-invalid-field/index.d.ts +0 -1
  153. package/generic-quick-list/generic-quick-list.d.ts +0 -29
  154. package/generic-quick-list/generic-quick-list.module.d.ts +0 -9
  155. package/generic-quick-list/index.d.ts +0 -2
  156. package/history/history-model.interface.d.ts +0 -38
  157. package/history/history-pinned.d.ts +0 -27
  158. package/history/history.d.ts +0 -33
  159. package/history/history.http.impl.service.d.ts +0 -16
  160. package/history/history.http.service.d.ts +0 -9
  161. package/history/history.module.d.ts +0 -12
  162. package/history/history.provider.d.ts +0 -15
  163. package/history/history.service.d.ts +0 -27
  164. package/history/index.d.ts +0 -7
  165. package/icon-avatar/icon-avatar.d.ts +0 -14
  166. package/icon-avatar/icon-avatar.module.d.ts +0 -9
  167. package/icon-avatar/index.d.ts +0 -2
  168. package/icons/index.d.ts +0 -2
  169. package/icons/shapes.d.ts +0 -1088
  170. package/icons/svg-tag-generator.d.ts +0 -8
  171. package/image-gallery/image-carousel.d.ts +0 -36
  172. package/image-gallery/image-gallery.d.ts +0 -31
  173. package/image-gallery/image-gallery.module.d.ts +0 -10
  174. package/image-gallery/image-gallery.types.d.ts +0 -8
  175. package/image-gallery/index.d.ts +0 -3
  176. package/index.d.ts +0 -44
  177. package/keyboard-nav/clr-keyboard-nav-alt-mnemonic.directive.d.ts +0 -50
  178. package/keyboard-nav/clr-keyboard-nav-ctrl-arrow.directive.d.ts +0 -60
  179. package/keyboard-nav/index.d.ts +0 -2
  180. package/letter-avatar/index.d.ts +0 -2
  181. package/letter-avatar/letter-avatar.d.ts +0 -14
  182. package/letter-avatar/letter-avatar.module.d.ts +0 -9
  183. package/location-bar/index.d.ts +0 -5
  184. package/location-bar/location-bar-node/location-bar-node.component.d.ts +0 -59
  185. package/location-bar/location-bar-search/location-bar-search.component.d.ts +0 -23
  186. package/location-bar/location-bar.component.d.ts +0 -21
  187. package/location-bar/location-bar.model.d.ts +0 -54
  188. package/location-bar/location-bar.module.d.ts +0 -16
  189. package/location-bar/location-bar.provider.d.ts +0 -25
  190. package/location-bar/location-bar.search.model.d.ts +0 -16
  191. package/main-nav-group/index.d.ts +0 -3
  192. package/main-nav-group/main-nav-group-item.d.ts +0 -12
  193. package/main-nav-group/main-nav-group.d.ts +0 -30
  194. package/main-nav-group/main-nav-group.module.d.ts +0 -11
  195. package/multilingual/abstract-multilingual.d.ts +0 -31
  196. package/multilingual/index.d.ts +0 -5
  197. package/multilingual/multilingual-input/multilingual-input.d.ts +0 -8
  198. package/multilingual/multilingual-selector.d.ts +0 -10
  199. package/multilingual/multilingual-textarea/multilingual-textarea.d.ts +0 -9
  200. package/multilingual/multilingual-validators.d.ts +0 -48
  201. package/multilingual/multilingual.module.d.ts +0 -14
  202. package/notification/index.d.ts +0 -4
  203. package/notification/notification-ref.d.ts +0 -33
  204. package/notification/notification.d.ts +0 -34
  205. package/notification/notification.module.d.ts +0 -10
  206. package/notification/notification.service.d.ts +0 -27
  207. package/notification/scheduler-utils.d.ts +0 -10
  208. package/numericfield/index.d.ts +0 -3
  209. package/numericfield/numeric-field-validators.d.ts +0 -65
  210. package/numericfield/numeric-field.d.ts +0 -51
  211. package/numericfield/numeric-field.module.d.ts +0 -11
  212. package/paged-search-result-list/index.d.ts +0 -2
  213. package/paged-search-result-list/paged-search-result-list.d.ts +0 -46
  214. package/paged-search-result-list/paged-search-result-list.module.d.ts +0 -11
  215. package/pager/index.d.ts +0 -2
  216. package/pager/pager.d.ts +0 -43
  217. package/pager/pager.module.d.ts +0 -10
  218. package/progress-spinner/index.d.ts +0 -2
  219. package/progress-spinner/progress-spinner.d.ts +0 -19
  220. package/progress-spinner/progress-spinner.module.d.ts +0 -8
  221. package/quick-list/add-option.d.ts +0 -25
  222. package/quick-list/add-option.service.d.ts +0 -6
  223. package/quick-list/index.d.ts +0 -3
  224. package/quick-list/quick-list.d.ts +0 -30
  225. package/quick-list/quick-list.module.d.ts +0 -11
  226. package/readonly/index.d.ts +0 -2
  227. package/readonly/readonly.directive.d.ts +0 -37
  228. package/readonly/readonly.module.d.ts +0 -7
  229. package/searchfield/index.d.ts +0 -2
  230. package/searchfield/search-field.d.ts +0 -26
  231. package/searchfield/search-field.module.d.ts +0 -10
  232. package/signpost/index.d.ts +0 -2
  233. package/signpost/signpost.component.d.ts +0 -22
  234. package/signpost/signpost.module.d.ts +0 -9
  235. package/summary-area/index.d.ts +0 -7
  236. package/summary-area/summary-area/summary-area-state.service.d.ts +0 -15
  237. package/summary-area/summary-area/summary-area.d.ts +0 -75
  238. package/summary-area/summary-area/summary-area.model.d.ts +0 -19
  239. package/summary-area/summary-area-toggle/summary-area-toggle.d.ts +0 -15
  240. package/summary-area/summary-item/summary-item.d.ts +0 -59
  241. package/summary-area/summary-item/summary-item.model.d.ts +0 -19
  242. package/summary-area/summary-item-value/summary-item-value.d.ts +0 -65
  243. package/treetable/built-in/filter/treetable-string-filter.d.ts +0 -24
  244. package/treetable/enums/selection-type.d.ts +0 -9
  245. package/treetable/enums/sort-order.enum.d.ts +0 -5
  246. package/treetable/index.d.ts +0 -17
  247. package/treetable/interfaces/comparator.interface.d.ts +0 -3
  248. package/treetable/interfaces/filter-model.d.ts +0 -37
  249. package/treetable/interfaces/treetable-model.d.ts +0 -55
  250. package/treetable/interfaces/treetable-state-model.d.ts +0 -20
  251. package/treetable/providers/filters.d.ts +0 -29
  252. package/treetable/providers/index.d.ts +0 -2
  253. package/treetable/providers/sort.d.ts +0 -28
  254. package/treetable/providers/treetable-data-state.service.d.ts +0 -37
  255. package/treetable/providers/treetable-recursion.service.d.ts +0 -17
  256. package/treetable/renderer/cell-renderer.d.ts +0 -11
  257. package/treetable/renderer/header-renderer.d.ts +0 -18
  258. package/treetable/renderer/index.d.ts +0 -4
  259. package/treetable/renderer/main-renderer.d.ts +0 -22
  260. package/treetable/renderer/row-renderer.d.ts +0 -8
  261. package/treetable/treetable-action-overflow.d.ts +0 -14
  262. package/treetable/treetable-cell.d.ts +0 -5
  263. package/treetable/treetable-column.d.ts +0 -18
  264. package/treetable/treetable-filter.d.ts +0 -18
  265. package/treetable/treetable-items.d.ts +0 -25
  266. package/treetable/treetable-placeholder.d.ts +0 -5
  267. package/treetable/treetable-recursive-rows.d.ts +0 -12
  268. package/treetable/treetable-row-checkbox.d.ts +0 -10
  269. package/treetable/treetable-row.d.ts +0 -27
  270. package/treetable/treetable.d.ts +0 -27
  271. package/treetable/treetable.module.d.ts +0 -25
  272. package/treetable/util/treetable-filter-util.d.ts +0 -22
  273. package/treetable/util/treetable-state-util.d.ts +0 -10
  274. package/util/escape.util.d.ts +0 -2
  275. package/util/index.d.ts +0 -2
  276. package/util/numeric.format.util.d.ts +0 -2
  277. package/view-edit-section/index.d.ts +0 -2
  278. package/view-edit-section/view-edit-section.d.ts +0 -37
  279. package/view-edit-section/view-edit-section.module.d.ts +0 -10
  280. package/view-edit-section/view-edit-section.types.d.ts +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"porscheinformatik-clr-addons-charts.mjs","sources":["../../../src/clr-addons/charts/shared/xy-chart.types.ts","../../../src/clr-addons/charts/constants/alert-message-constants.ts","../../../src/clr-addons/charts/utils/color.utils.ts","../../../src/clr-addons/charts/utils/text.utils.ts","../../../src/clr-addons/charts/utils/utils.ts","../../../src/clr-addons/charts/shared/chart-base.ts","../../../src/clr-addons/charts/chart-alert-overlay/chart-alert-overlay.component.ts","../../../src/clr-addons/charts/chart-export/chart-export.service.ts","../../../src/clr-addons/charts/chart-export/chart-export-button.component.ts","../../../src/clr-addons/charts/chart-legend/chart-legend.component.ts","../../../src/clr-addons/charts/shared/chart-skeleton.component.ts","../../../src/clr-addons/charts/shared/chart-skeleton.component.html","../../../src/clr-addons/charts/chart-tooltip/chart-tooltip.component.ts","../../../src/clr-addons/charts/chart-tooltip/chart-tooltip.component.html","../../../src/clr-addons/charts/directives/outside-click.directive.ts","../../../src/clr-addons/charts/directives/screen-state.service.ts","../../../src/clr-addons/charts/directives/window-resize.directive.ts","../../../src/clr-addons/charts/bar-chart/bar-chart.component.ts","../../../src/clr-addons/charts/bar-chart/bar-chart.component.html","../../../src/clr-addons/charts/shared/d3-dots.ts","../../../src/clr-addons/charts/shared/d3-chart-axes.ts","../../../src/clr-addons/charts/line-chart/line-chart.component.ts","../../../src/clr-addons/charts/line-chart/line-chart.component.html","../../../src/clr-addons/charts/area-chart/area-chart.component.ts","../../../src/clr-addons/charts/area-chart/area-chart.component.html","../../../src/clr-addons/charts/combo-chart/combo-chart.component.ts","../../../src/clr-addons/charts/combo-chart/combo-chart.component.html","../../../src/clr-addons/charts/pie-chart/pie-chart.component.ts","../../../src/clr-addons/charts/pie-chart/pie-chart.component.html","../../../src/clr-addons/charts/funnel-chart/funnel-chart.component.ts","../../../src/clr-addons/charts/funnel-chart/funnel-chart.component.html","../../../src/clr-addons/charts/directives/auto-position.directive.ts","../../../src/clr-addons/charts/directives/tenant-full-date-range.directive.ts","../../../src/clr-addons/charts/charts.module.ts","../../../src/clr-addons/charts/index.ts","../../../src/clr-addons/charts/porscheinformatik-clr-addons-charts.ts"],"sourcesContent":["/*\n * Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\n/**\n * A single data point on an XY chart (line, area).\n * `x` is used as the category key; `xLabel` is the optional display label for the axis tick.\n */\nexport interface XYChartPoint {\n /** Unique key used as the X-axis category. */\n x: string;\n /** Optional display label for the X-axis tick (defaults to `x`). */\n xLabel?: string;\n /** Y value. */\n value: number;\n}\n\n/**\n * A named data series for an XY chart.\n */\nexport interface XYChartSeries {\n /** Unique identifier. */\n key: string;\n /** Display name shown in the legend and tooltip. */\n label: string;\n /** Line / area / dot colour. Accepts hex or CSS custom property. */\n color: string;\n /** Ordered data points for this series. */\n data: XYChartPoint[];\n}\n\n/**\n * Emitted when the user clicks a data point on an XY chart.\n */\nexport interface XYChartValue {\n seriesKey: string;\n seriesLabel: string;\n x: string;\n xLabel?: string;\n value: number;\n}\n","export const TOO_MANY_ITEMS_MESSAGE = 'too many items';\nexport const TOO_MANY_ITEMS_GROUPED_MESSAGE = 'too many items';\nexport const TOO_MANY_ITEMS_ALERT_TYPE = 'warning';\n\nexport const NO_ITEMS_MESSAGE = 'no items';\nexport const NO_ITEMS_ALERT_TYPE = 'info';\n","/**\n * Converts a chart color value to a CSS-compatible string.\n *\n * Supports:\n * - Hex values: '#e57200' → returned as-is\n * - CSS custom props: '--cds-global-color-lavender-1000' → wrapped in var(...)\n * - Any other string: 'rgb(...)' / 'hsl(...)' → returned as-is\n */\nexport function toChartColor(color: string | undefined): string {\n if (!color) {\n return '';\n }\n return color.startsWith('--') ? `var(${color})` : color;\n}\n","export class TextRenderer {\n private canvas: HTMLCanvasElement;\n private context: CanvasRenderingContext2D;\n private cachedFont = '';\n private cachedEllipsisWidth = 0;\n\n public constructor() {\n this.canvas = document.createElement('canvas');\n const ctx = this.canvas.getContext('2d');\n if (!ctx) {\n throw new Error('2D context error');\n }\n this.context = ctx;\n }\n\n public render(\n text: string,\n availableHeight: number,\n availableWidth: number,\n fontSize: string = '12px',\n fontFamily: string = 'Arial'\n ): string {\n const font = `${fontSize} ${fontFamily}`;\n if (this.cachedFont !== font) {\n this.context.font = font;\n this.cachedEllipsisWidth = this.context.measureText('...').width;\n this.cachedFont = font;\n } else {\n this.context.font = font;\n }\n\n const textMetrics = this.context.measureText(text);\n const textWidth = textMetrics.width;\n const textHeight = Math.abs(textMetrics.actualBoundingBoxAscent) + Math.abs(textMetrics.actualBoundingBoxDescent);\n\n if (textWidth <= availableWidth && textHeight <= availableHeight) {\n return text;\n }\n\n let remainingWidth = availableWidth - this.cachedEllipsisWidth;\n let truncatedText = '';\n\n for (const char of text) {\n const charWidth = this.context.measureText(char).width;\n if (remainingWidth - charWidth >= 0) {\n truncatedText += char;\n remainingWidth -= charWidth;\n } else {\n break;\n }\n }\n\n truncatedText = truncatedText.trim();\n\n if (truncatedText.length === 0) {\n return '';\n }\n\n return truncatedText + '...';\n }\n}\n","import { format } from 'd3';\n\nexport const percentage = (value: number, total: number): number => {\n if (total <= 0) {\n return 0;\n }\n return Math.min(100, Math.max(0, Math.round((value / total) * 100)));\n};\n\nexport const d3percentFormat = (\n f =>\n (d: number): string =>\n `${f(d)}%`\n)(format('.1f'));\n","/*\n * Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\nimport { AfterViewInit, computed, Directive, ElementRef, input, signal, viewChild } from '@angular/core';\n\n/**\n * Abstract base class shared by all chart components.\n * ...\n */\n@Directive()\nexport abstract class ChartBase<TSelected = unknown> implements AfterViewInit {\n // ── Common Input ───────────────────────────────────────────────────────────\n /** Whether the chart is in loading state (shows skeleton). */\n readonly loading = input(false);\n\n // ── View references ────────────────────────────────────────────────────────\n /** Reference to the `<svg #chart>` element in the component template. */\n protected readonly chartRef = viewChild<ElementRef>('chart');\n /** Reference to the `<div #container>` host element in the component template. */\n protected readonly containerRef = viewChild<ElementRef>('container');\n /** Exposes the raw SVG element for the chart-export button. */\n readonly svgElement = computed(() => this.chartRef()?.nativeElement as SVGSVGElement | undefined);\n\n // ── Tooltip State ──────────────────────────────────────────────────────────\n protected readonly selectedItem = signal<TSelected | undefined>(undefined);\n protected readonly tooltipPosition = signal<{ x: number; y: number } | undefined>(undefined);\n\n // ── Lifecycle ──────────────────────────────────────────────────────────────\n /** Schedules the first render after the view is ready. */\n ngAfterViewInit(): void {\n requestAnimationFrame(() => this.updateChart());\n }\n\n // ── Abstract ───────────────────────────────────────────────────────────────\n /** Each chart implements its own D3 rendering logic here. */\n protected abstract updateChart(): void;\n\n // ── Common Implementations ─────────────────────────────────────────────────\n /** Returns the pixel dimensions of the container div. */\n protected getContainerDimensions(): { width: number; height: number } {\n const el: HTMLElement = this.containerRef().nativeElement;\n return { width: el.clientWidth, height: el.clientHeight };\n }\n\n /**\n * Clears the active tooltip. Override in subclasses that have additional\n * selection state\n */\n public resetTooltip(): void {\n if (this.selectedItem() || this.tooltipPosition()) {\n this.selectedItem.set(undefined);\n this.tooltipPosition.set(undefined);\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { ClrAlertModule } from '@clr/angular';\n\n@Component({\n selector: 'cng-chart-alert-overlay',\n template: `\n <clr-alert [clrAlertSizeSmall]=\"true\" [clrAlertClosable]=\"false\" [clrAlertType]=\"alertType()\">\n <clr-alert-item>\n <span class=\"alert-text\">\n {{ alertMessage() }}\n </span>\n </clr-alert-item>\n </clr-alert>\n <div class=\"overlay\"></div>\n `,\n styles: `\n :host {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n z-index: 1;\n\n clr-alert {\n pointer-events: auto;\n\n ::ng-deep .alert {\n margin-bottom: 0;\n }\n }\n\n .overlay {\n height: 2rem;\n background: linear-gradient(to bottom, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0));\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ClrAlertModule],\n})\nexport class ChartAlertOverlayComponent {\n public readonly alertMessage = input.required<string>();\n public readonly alertType = input<string>('info');\n}\n","import { Injectable } from '@angular/core';\nimport { ChartLegendItem } from '../chart-legend/chart-legend.component';\n\n// ── Legend layout constants (mirror chart-legend.component styles) ─────────────\nconst LEGEND_PADDING_TOP = 12;\nconst LEGEND_PADDING_H = 4;\nconst LEGEND_ITEM_HEIGHT = 22;\nconst LEGEND_COLOR_SIZE = 10;\nconst LEGEND_FONT_SIZE = 11;\nconst LEGEND_TEXT_COLOR = '#666666';\n/** Approximate pixel width reserved per legend item (color square + gap + label). */\nconst LEGEND_APPROX_ITEM_WIDTH = 130;\n\n@Injectable({ providedIn: 'root' })\nexport class ChartExportService {\n exportSvg(svgEl: SVGSVGElement, filename: string, legendItems?: ChartLegendItem[]): void {\n const root = this.buildExportSvg(svgEl, legendItems);\n const svgStr = new XMLSerializer().serializeToString(root);\n this.download(new Blob([svgStr], { type: 'image/svg+xml;charset=utf-8' }), `${filename}.svg`);\n }\n\n exportPng(svgEl: SVGSVGElement, filename: string, legendItems?: ChartLegendItem[]): void {\n const root = this.buildExportSvg(svgEl, legendItems);\n this.toCanvas(root).then(canvas => canvas.toBlob(blob => this.download(blob, `${filename}.png`), 'image/png'));\n }\n\n // ── Core builder ──────────────────────────────────────────────────────────────\n\n private buildExportSvg(svgEl: SVGSVGElement, legendItems?: ChartLegendItem[]): SVGSVGElement {\n const w = svgEl.clientWidth || Number(svgEl.getAttribute('width')) || 800;\n const chartH = svgEl.clientHeight || Number(svgEl.getAttribute('height')) || 600;\n const fontFamily = this.getDocumentFontFamily();\n\n const itemsToRender = legendItems?.length ? legendItems : [];\n const legendH = itemsToRender.length\n ? LEGEND_PADDING_TOP +\n Math.ceil(itemsToRender.length / this.legendItemsPerRow(w, itemsToRender)) * LEGEND_ITEM_HEIGHT\n : 0;\n\n const totalH = chartH + legendH;\n const ns = 'http://www.w3.org/2000/svg';\n\n // Root SVG\n const root = document.createElementNS(ns, 'svg') as SVGSVGElement;\n root.setAttribute('xmlns', ns);\n root.setAttribute('width', String(w));\n root.setAttribute('height', String(totalH));\n root.style.background = '#ffffff';\n if (fontFamily) {\n root.setAttribute('font-family', fontFamily);\n }\n\n // Chart contents – clone, resolve CSS vars, inline fonts, then wrap in <g>\n const chartClone = svgEl.cloneNode(true) as SVGSVGElement;\n chartClone.querySelectorAll('.domain').forEach(el => el.remove());\n this.resolveStyleVariables(chartClone);\n this.inlineFontFamily(chartClone, fontFamily);\n const chartGroup = document.createElementNS(ns, 'g');\n Array.from(chartClone.childNodes).forEach(n => chartGroup.appendChild(n.cloneNode(true)));\n root.appendChild(chartGroup);\n\n // Legend group below the chart\n if (itemsToRender.length) {\n root.appendChild(this.buildLegendGroup(itemsToRender, w, chartH, fontFamily));\n }\n\n return root;\n }\n\n // ── Legend SVG builder ────────────────────────────────────────────────────────\n\n private buildLegendGroup(items: ChartLegendItem[], width: number, offsetY: number, fontFamily: string): SVGGElement {\n const ns = 'http://www.w3.org/2000/svg';\n const g = document.createElementNS(ns, 'g');\n g.setAttribute('transform', `translate(0,${offsetY + LEGEND_PADDING_TOP})`);\n\n const perRow = this.legendItemsPerRow(width, items);\n const colWidth = Math.floor((width - 2 * LEGEND_PADDING_H) / perRow);\n let col = 0;\n let row = 0;\n\n for (const item of items) {\n const x = LEGEND_PADDING_H + col * colWidth;\n const y = row * LEGEND_ITEM_HEIGHT;\n\n // Color square\n const rect = document.createElementNS(ns, 'rect');\n rect.setAttribute('x', String(x));\n rect.setAttribute('y', String(y));\n rect.setAttribute('width', String(LEGEND_COLOR_SIZE));\n rect.setAttribute('height', String(LEGEND_COLOR_SIZE));\n rect.setAttribute('rx', '2');\n rect.setAttribute('ry', '2');\n rect.setAttribute('fill', this.resolveColor(item.color));\n g.appendChild(rect);\n\n // Label text – vertically centred with the square\n const text = document.createElementNS(ns, 'text');\n text.setAttribute('x', String(x + LEGEND_COLOR_SIZE + 5));\n text.setAttribute('y', String(y + LEGEND_COLOR_SIZE - 1));\n text.setAttribute('font-size', String(LEGEND_FONT_SIZE));\n text.setAttribute('fill', LEGEND_TEXT_COLOR);\n if (fontFamily) {\n text.setAttribute('font-family', fontFamily);\n }\n text.textContent = item.label;\n g.appendChild(text);\n\n col++;\n if (col >= perRow) {\n col = 0;\n row++;\n }\n }\n\n return g;\n }\n\n private legendItemsPerRow(width: number, items: ChartLegendItem[]): number {\n const usable = width - 2 * LEGEND_PADDING_H;\n const perRow = Math.max(1, Math.floor(usable / LEGEND_APPROX_ITEM_WIDTH));\n return Math.min(perRow, items.length);\n }\n\n // ── Canvas / PNG ──────────────────────────────────────────────────────────────\n\n private toCanvas(svgEl: SVGSVGElement): Promise<HTMLCanvasElement> {\n return new Promise(resolve => {\n const w = Number(svgEl.getAttribute('width')) || 800;\n const h = Number(svgEl.getAttribute('height')) || 600;\n const url = URL.createObjectURL(\n new Blob([new XMLSerializer().serializeToString(svgEl)], { type: 'image/svg+xml;charset=utf-8' })\n );\n const img = new Image();\n img.onload = () => {\n const scale = 2; // 2× for retina quality\n const canvas = document.createElement('canvas');\n canvas.width = w * scale;\n canvas.height = h * scale;\n const ctx = canvas.getContext('2d');\n ctx.scale(scale, scale);\n ctx.fillStyle = '#ffffff';\n ctx.fillRect(0, 0, w, h);\n ctx.drawImage(img, 0, 0, w, h);\n URL.revokeObjectURL(url);\n resolve(canvas);\n };\n img.src = url;\n });\n }\n\n // ── CSS variable resolution ───────────────────────────────────────────────────\n\n /** Recursively resolves `var(--x)` references in inline style and presentation attributes. */\n private resolveStyleVariables(el: Element): void {\n const style = el.getAttribute('style');\n if (style) {\n el.setAttribute('style', this.resolveVarsInString(style));\n }\n for (const attr of ['fill', 'stroke', 'color', 'background-color']) {\n const val = el.getAttribute(attr);\n if (val) {\n el.setAttribute(attr, this.resolveVarsInString(val));\n }\n }\n // Also resolve CSS var() in inline style properties directly set via D3 .style()\n const inlineStyle = (el as HTMLElement).style;\n if (inlineStyle) {\n const fill = inlineStyle.fill;\n if (fill?.includes('var(')) {\n inlineStyle.fill = this.resolveVarsInString(fill);\n }\n const stroke = inlineStyle.stroke;\n if (stroke?.includes('var(')) {\n inlineStyle.stroke = this.resolveVarsInString(stroke);\n }\n }\n Array.from(el.children).forEach(child => this.resolveStyleVariables(child));\n }\n\n /** Inlines `font-family` on every `<text>` / `<tspan>` element that doesn't already have one. */\n private inlineFontFamily(el: Element, fontFamily: string): void {\n if (!fontFamily) {\n return;\n }\n if (el.tagName === 'text' || el.tagName === 'tspan') {\n if (!el.getAttribute('font-family')) {\n el.setAttribute('font-family', fontFamily);\n }\n }\n Array.from(el.children).forEach(child => this.inlineFontFamily(child, fontFamily));\n }\n\n private resolveVarsInString(value: string): string {\n return value.replace(/var\\(\\s*(--[^,)]+?)\\s*(?:,\\s*([^)]+?))?\\s*\\)/g, (_match, varName, fallback) => {\n const computed = getComputedStyle(document.documentElement).getPropertyValue(varName.trim()).trim();\n return computed || fallback?.trim() || '';\n });\n }\n\n private resolveColor(color: string): string {\n if (!color) {\n return '#cccccc';\n }\n if (color.startsWith('--')) {\n const computed = getComputedStyle(document.documentElement).getPropertyValue(color).trim();\n return computed || '#cccccc';\n }\n // Handle var(...) wrapper\n if (color.startsWith('var(')) {\n return this.resolveVarsInString(color) || '#cccccc';\n }\n return color;\n }\n\n private getDocumentFontFamily(): string {\n return getComputedStyle(document.body).fontFamily || 'sans-serif';\n }\n\n // ── Download ──────────────────────────────────────────────────────────────────\n\n private download(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n a.click();\n setTimeout(() => URL.revokeObjectURL(url), 100);\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';\nimport { ClrDropdownModule, ClrIconModule } from '@clr/angular';\nimport { ChartExportService } from './chart-export.service';\nimport { ClarityIcons, downloadIcon } from '@cds/core/icon';\nimport { ChartLegendItem } from '../chart-legend/chart-legend.component';\n\nClarityIcons.addIcons(downloadIcon);\n@Component({\n selector: 'cng-chart-export-button',\n template: `\n <clr-dropdown>\n <button class=\"btn btn-sm btn-icon btn-link export-trigger\" clrDropdownTrigger title=\"Export chart\">\n <cds-icon shape=\"download\" size=\"16\"></cds-icon>\n {{ buttonTitle() }}\n </button>\n <clr-dropdown-menu *clrIfOpen clrPosition=\"bottom-left\">\n <button clrDropdownItem (click)=\"export('svg')\">SVG</button>\n <button clrDropdownItem (click)=\"export('png')\">PNG</button>\n </clr-dropdown-menu>\n </clr-dropdown>\n `,\n styles: [\n `\n :host {\n position: absolute;\n top: 15px;\n right: 15px;\n z-index: 10;\n opacity: 1;\n pointer-events: auto;\n }\n `,\n ],\n imports: [ClrDropdownModule, ClrIconModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartExportButtonComponent {\n public readonly svgRef = input<SVGSVGElement | undefined>(undefined);\n public readonly filename = input<string>('chart');\n public readonly buttonTitle = input<string>('Export');\n /** Legend items to include below the chart in the exported file. */\n public readonly legendItems = input<ChartLegendItem[] | undefined>(undefined);\n\n private readonly exportService = inject(ChartExportService);\n\n public export(format: 'svg' | 'png'): void {\n const svg = this.svgRef();\n if (!svg) {\n return;\n }\n switch (format) {\n case 'svg':\n this.exportService.exportSvg(svg, this.filename(), this.legendItems());\n break;\n case 'png':\n this.exportService.exportPng(svg, this.filename(), this.legendItems());\n break;\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { toChartColor } from '../utils';\n\nexport interface ChartLegendItem {\n label: string;\n color: string;\n}\n\n@Component({\n selector: 'cng-chart-legend',\n template: `\n <div class=\"chart-legend\">\n @for (item of items(); track item.label) {\n <div class=\"legend-item\">\n <span class=\"legend-color-square\" [style.background-color]=\"toChartColor(item.color)\"></span>\n <span class=\"legend-label\">{{ item.label }}</span>\n </div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n .chart-legend {\n display: flex;\n flex-wrap: wrap;\n gap: 0.25rem 1rem;\n padding: 0.5rem 0 0.25rem;\n font-size: 11px;\n color: var(--clr-color-neutral-600, #666);\n }\n\n .legend-item {\n display: flex;\n align-items: center;\n gap: 0.35rem;\n }\n\n .legend-color-square {\n width: 10px;\n height: 10px;\n border-radius: 2px;\n flex-shrink: 0;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartLegendComponent {\n public readonly items = input.required<ChartLegendItem[]>();\n protected readonly toChartColor = toChartColor;\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { NgxSkeletonLoaderComponent } from 'ngx-skeleton-loader';\n\n@Component({\n selector: 'cng-bar-chart-skeleton',\n templateUrl: './chart-skeleton.component.html',\n styleUrls: ['./chart-skeleton.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgxSkeletonLoaderComponent],\n})\nexport class ChartSkeletonComponent {\n public readonly skeletonType = input<'loading' | 'placeholder'>('loading');\n public readonly orientation = input.required<'vertical' | 'horizontal'>();\n\n protected readonly animationStyle = computed(() => (this.skeletonType() === 'loading' ? 'pulse' : undefined));\n}\n","<div class=\"chart-skeleton\" [class.placeholder-skeleton]=\"skeletonType() === 'placeholder'\">\n <div\n class=\"skeleton-bars\"\n [class.horizontal]=\"orientation() === 'horizontal'\"\n [class.vertical]=\"orientation() === 'vertical'\"\n >\n @for (_item of [1, 2, 3, 4, 5, 6]; track $index) {\n <div class=\"skeleton-bar bar-{{ $index + 1 }}\">\n <ngx-skeleton-loader\n [appearance]=\"'circle'\"\n [count]=\"1\"\n [animation]=\"animationStyle()\"\n [theme]=\"{\n width: '100%',\n height: '100%',\n 'border-radius': 'var(--clr-base-border-radius-xxs)',\n }\"\n />\n </div>\n }\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { ClrIconModule } from '@clr/angular';\nimport { toChartColor } from '../utils';\n\n@Component({\n selector: 'cng-chart-tooltip',\n templateUrl: './chart-tooltip.component.html',\n styleUrls: ['./chart-tooltip.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ClrIconModule],\n})\nexport class ChartTooltipComponent {\n public readonly tooltipPosition = input.required<{ x: number; y: number }>();\n public readonly tooltipOrientation = input<'top' | 'bottom'>('top');\n public readonly squareColor = input.required<string | undefined>();\n public readonly tooltipClickable = input(true);\n\n public readonly tooltipClosed = output<void>();\n public readonly tooltipHeaderClicked = output<void>();\n\n protected readonly toChartColor = toChartColor;\n}\n","<div\n class=\"tooltip-container\"\n [class.orientation-bottom]=\"tooltipOrientation() === 'bottom'\"\n (click)=\"$event.stopPropagation()\"\n [style.left.px]=\"tooltipPosition().x\"\n [style.top.px]=\"tooltipPosition().y\"\n>\n <div class=\"tooltip-header\">\n <div class=\"color-label-wrapper\">\n @if (squareColor()) {\n <div class=\"color-square\" [style.background-color]=\"toChartColor(squareColor())\"></div>\n }\n <h5\n [class.has-more-info]=\"tooltipClickable()\"\n (click)=\"$event.stopPropagation(); tooltipClickable() && tooltipHeaderClicked.emit()\"\n >\n <ng-content select=\"cng-title\" />\n </h5>\n </div>\n <cds-icon shape=\"times\" class=\"tooltip-close-btn\" (click)=\"$event.stopPropagation(); tooltipClosed.emit()\" />\n </div>\n <div class=\"tooltip-content\">\n <ng-content />\n </div>\n <hr />\n <div class=\"tooltip-footer\"><ng-content select=\"cng-footer\" /></div>\n</div>\n","import { AfterViewInit, DestroyRef, Directive, inject, output, Renderer2 } from '@angular/core';\n\n// Clarity actually has an \"outside-click\" directive, but they don't export it 🤷\n@Directive({\n selector: '[cngOutsideClick]',\n})\nexport class OutsideClickDirective implements AfterViewInit {\n public readonly outsideClick = output<void>({ alias: 'cngOutsideClick' });\n\n private readonly renderer = inject(Renderer2);\n private readonly destroyRef = inject(DestroyRef);\n\n public ngAfterViewInit(): void {\n const listener = this.renderer.listen('document', 'click', () => this.outsideClick.emit());\n this.destroyRef.onDestroy(listener);\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable, ReplaySubject, Subject } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\n\n/**\n * Enum for the Screen size in pixels, defined by clarity here https://vmware.github.io/clarity/documentation/v0.12/grid\n * We consider screens above 1200px to be a desktop, between 576px and 1199px to be a tablet and below 576px to be a phone.\n */\nexport enum ScreenWidth {\n EXTRA_LARGE = 1200,\n LARGE = 992,\n MEDIUM = 768,\n SMALL = 576,\n EXTRA_SMALL = 575,\n}\n\nexport enum ScreenOrientation {\n PORTRAIT = 'PORTRAIT',\n LANDSCAPE = 'LANDSCAPE',\n}\n\nexport const DATEPICKER_ENABLE_BREAKPOINT = 768;\nexport const MOBILE_USERAGENT_REGEX = /Mobi/i;\n\n@Injectable({ providedIn: 'root' })\nexport class ScreenStateService {\n private screenOrientation: ScreenOrientation;\n private isUserAgentMobile = false;\n\n private screenWidthSubject: Subject<number> = new ReplaySubject(1);\n private screenOrientationSubject: Subject<ScreenOrientation> = new ReplaySubject(1);\n\n public constructor(@Inject(DOCUMENT) private _document: Document) {\n window.addEventListener('resize', () => {\n this.onResize();\n });\n\n window.addEventListener('orientationchange', () => {\n this.onOrientationChange();\n });\n\n this.determineMobileUserAgent();\n\n // Execute them once for initial values\n this.onResize();\n this.onOrientationChange();\n }\n\n public getScreenWidthChanged(): Observable<number> {\n return this.screenWidthSubject;\n }\n\n public getMobileStateChanged(): Observable<boolean> {\n return this.getScreenWidthChanged().pipe(\n map(screenWidth => screenWidth < DATEPICKER_ENABLE_BREAKPOINT && this.isUserAgentMobile),\n distinctUntilChanged()\n );\n }\n\n public getScreenOrientationChanged(): Observable<ScreenOrientation> {\n return this.screenOrientationSubject;\n }\n\n private onResize() {\n const windowWidth = window.innerWidth;\n this.screenWidthSubject.next(windowWidth);\n }\n\n private onOrientationChange() {\n const prevOrientation = this.screenOrientation;\n const orientation = window.orientation;\n // Probably not always correct since this depends on the devices default orientation.\n // Better way to identify this would probably be comparing height & width of the screen.\n if (orientation === -90 || orientation === 90) {\n this.screenOrientation = ScreenOrientation.LANDSCAPE;\n } else {\n this.screenOrientation = ScreenOrientation.PORTRAIT;\n }\n if (this.screenOrientation !== prevOrientation) {\n this.screenOrientationSubject.next(this.screenOrientation);\n }\n }\n\n private determineMobileUserAgent() {\n if (this._document) {\n this.isUserAgentMobile = MOBILE_USERAGENT_REGEX.test(this._document.defaultView.navigator.userAgent);\n }\n }\n}\n","import { DestroyRef, Directive, inject, input, OnInit, output } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { skip } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { ScreenStateService } from './screen-state.service';\n\n@Directive({\n selector: '[cngWindowResize]',\n})\nexport class WindowResizeDirective implements OnInit {\n public readonly debounce = input<number>(250);\n public readonly includeFirst = input<boolean>(false);\n public readonly windowResize = output<number>({ alias: 'cngWindowResize' });\n\n private readonly screenStateService = inject(ScreenStateService);\n private readonly destroyRef = inject(DestroyRef);\n\n public ngOnInit(): void {\n const skipCount = this.includeFirst() ? 0 : 1;\n this.screenStateService\n .getScreenWidthChanged()\n .pipe(takeUntilDestroyed(this.destroyRef), skip(skipCount), debounceTime(this.debounce()))\n .subscribe(width => this.windowResize.emit(width));\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n OnChanges,\n output,\n signal,\n SimpleChanges,\n} from '@angular/core';\nimport {\n axisBottom as d3axisBottom,\n axisLeft as d3axisLeft,\n BaseType,\n format as d3format,\n group as d3group,\n max as d3max,\n scaleBand as d3scaleBand,\n ScaleBand,\n scaleLinear as d3scaleLinear,\n ScaleLinear,\n select as d3select,\n Selection,\n sum as d3sum,\n} from 'd3';\nimport {\n NO_ITEMS_ALERT_TYPE,\n NO_ITEMS_MESSAGE,\n TOO_MANY_ITEMS_ALERT_TYPE,\n TOO_MANY_ITEMS_GROUPED_MESSAGE,\n TOO_MANY_ITEMS_MESSAGE,\n} from '../constants';\nimport { ChartLegendItem } from '../chart-legend/chart-legend.component';\nimport { TextRenderer, toChartColor } from '../utils';\nimport { ChartBase } from '../shared/chart-base';\n\nexport interface BarChartData {\n key: string;\n label: string;\n fullLabel?: string;\n value: number;\n color?: string;\n stackKey?: string;\n}\n\nexport interface BarChartValue {\n key: string[];\n label: string;\n value: number;\n}\n\ntype BarChartDataPoint = BarChartData & {\n stackValue0: number;\n stackValue1: number;\n percentageOfStack: number;\n};\n\nexport type BarChartLabel = { stackKey: string; label: string };\n\n@Component({\n selector: 'clr-bar-chart',\n templateUrl: './bar-chart.component.html',\n styleUrls: ['./bar-chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class BarChartComponent extends ChartBase<BarChartDataPoint> implements OnChanges {\n public readonly data = input.required<BarChartData[]>();\n public readonly stacks = input<BarChartLabel[] | undefined>(undefined);\n public readonly orientation = input.required<'horizontal' | 'vertical'>();\n public readonly tooltipOrientation = input<'top' | 'bottom'>('top');\n\n public readonly barSizePx = input<number>(15);\n public readonly barAreaSizePx = input<number>(40);\n\n public readonly tooltipPercentOfTotal = input<string>('of total');\n public readonly tooltipPercentOf = input<string>('of');\n\n public readonly noItemsMessage = input<string>(NO_ITEMS_MESSAGE);\n public readonly tooManyItemsMessage = input<string>(TOO_MANY_ITEMS_MESSAGE);\n public readonly tooManyItemsGroupedMessage = input<string>(TOO_MANY_ITEMS_GROUPED_MESSAGE);\n\n public readonly showLegend = input(true);\n public readonly showExportButton = input(false);\n public readonly exportButtonTitle = input<string>('Export');\n public readonly exportFilename = input<string>('bar-chart');\n\n /** Optional label rendered below the X axis. */\n public readonly xAxisLabel = input<string>('');\n /** Optional label rendered rotated to the left of the Y axis. */\n public readonly yAxisLabel = input<string>('');\n\n public readonly valueClicked = output<BarChartValue>();\n\n private readonly textRenderer = new TextRenderer();\n\n private readonly MARGIN = { top: 10, right: 20, bottom: 30, left: 65 };\n private static readonly HORIZONTAL_BAR_MIN_HEIGHT_PX = 25;\n\n protected readonly toChartColor = toChartColor;\n\n protected readonly total = computed(() => this.data().reduce((acc, v) => acc + v.value, 0));\n protected readonly totalByStack = computed<Record<string, number>>(() => {\n const totals: Record<string, number> = {};\n for (const d of this.slicedDataPoints()) {\n totals[d.stackKey] = (totals[d.stackKey] ?? 0) + d.value;\n }\n return totals;\n });\n protected readonly keysByStack = computed<Record<string, string[]>>(() => {\n const keys: Record<string, string[]> = {};\n for (const d of this.slicedDataPoints()) {\n if (!keys[d.stackKey]) {\n keys[d.stackKey] = [];\n }\n keys[d.stackKey].push(d.key);\n }\n return keys;\n });\n\n // Count the total amount of bars by either the stacKey (if stacked) or the key (if not stacked)\n protected readonly totalBarCount = computed(\n () =>\n new Set(\n this.data()\n .filter(d => d.value > 0)\n .map(d => d.stackKey ?? d.key)\n ).size\n );\n protected readonly showingBarCount = computed(\n () =>\n new Set(\n this.slicedDataPoints()\n .filter(d => d.value > 0)\n .map(d => d.stackKey)\n ).size\n );\n\n public readonly alertMessageAndType = computed<[string, string] | undefined>(() => {\n if (this.loading()) {\n return undefined;\n }\n\n if (!this.showingBarCount()) {\n return [this.noItemsMessage(), NO_ITEMS_ALERT_TYPE];\n } else if (this.totalBarCount() !== this.showingBarCount()) {\n return [\n this.stacks() ? this.tooManyItemsGroupedMessage() : this.tooManyItemsMessage(),\n TOO_MANY_ITEMS_ALERT_TYPE,\n ];\n }\n\n return undefined;\n });\n\n public readonly legendItems = computed<ChartLegendItem[]>(() => {\n if (!this.showLegend() || !this.data()?.length) {\n return [];\n }\n if (this.stacks()?.length) {\n // Stacked: one legend entry per distinct label (= each layer in the stack)\n const seen = new Set<string>();\n const items: ChartLegendItem[] = [];\n for (const item of this.data()) {\n const label = item.fullLabel ?? item.label;\n if (!seen.has(label)) {\n seen.add(label);\n items.push({ label, color: item.color });\n }\n }\n return items;\n }\n // Non-stacked: one entry per bar\n return this.data().map(item => ({ label: item.fullLabel ?? item.label, color: item.color }));\n });\n\n /** Computed values used by the tooltip to avoid inline logic in the template. */\n protected readonly tooltipKey = computed<string[] | undefined>(() => {\n const item = this.selectedItem();\n if (!item) {\n return undefined;\n }\n return this.stacks()?.length ? this.keysByStack()[item.stackKey] ?? [] : [item.key];\n });\n\n protected readonly tooltipLabel = computed<string | undefined>(() => {\n const item = this.selectedItem();\n if (!item) {\n return undefined;\n }\n return this.stacks()?.find(stack => stack.stackKey === item.stackKey)?.label ?? item.fullLabel ?? item.label;\n });\n\n protected readonly tooltipValue = computed<number | undefined>(() => {\n const item = this.selectedItem();\n if (!item) {\n return undefined;\n }\n return this.stacks()?.length ? this.totalByStack()[item.stackKey] ?? 0 : item.value;\n });\n\n /** Slices belonging to the currently selected stack – used by the tooltip @for loop. */\n protected readonly selectedStackSlices = computed<BarChartDataPoint[]>(() => {\n const item = this.selectedItem();\n if (!item || !this.stacks()?.length) {\n return [];\n }\n return this.slicedDataPoints().filter(d => d.stackKey === item.stackKey);\n });\n\n private readonly maxAmountOfItems = signal<number>(undefined);\n private readonly slicedDataPoints = signal<BarChartDataPoint[]>([]);\n\n private svg: Selection<SVGGElement, unknown, null, undefined>;\n private barSelection: Selection<SVGGElement, BarChartDataPoint, SVGElement, undefined> | null = null;\n private labelSelection: Selection<SVGTextElement, BarChartLabel, SVGGElement, unknown> | null = null;\n\n public constructor() {\n super();\n }\n\n public ngOnChanges(_changes: SimpleChanges): void {\n if (!this.svg) {\n return;\n }\n requestAnimationFrame(() => this.updateChart());\n }\n\n public override ngAfterViewInit(): void {\n this.createChart();\n super.ngAfterViewInit(); // schedules the initial requestAnimationFrame(() => updateChart())\n }\n\n private createChart(): void {\n const element = this.chartRef().nativeElement;\n this.svg = d3select(element);\n }\n\n protected updateChart(): void {\n this.svg.selectAll('*').remove();\n\n if (this.loading()) {\n this.slicedDataPoints.set([]);\n return;\n }\n const { width: containerWidth, height: containerHeight } = this.getContainerDimensions();\n const extraBottom = this.xAxisLabel() ? 16 : 0;\n const extraLeft = this.yAxisLabel() ? 16 : 0;\n const leftMargin = (this.orientation() === 'horizontal' ? this.MARGIN.left : 30) + extraLeft;\n const width = containerWidth - leftMargin - this.MARGIN.right;\n const height = containerHeight - this.MARGIN.top - (this.MARGIN.bottom + extraBottom);\n\n this.maxAmountOfItems.set(this.getMaxAmountOfItems(width, height));\n if (!this.data()?.length) {\n this.slicedDataPoints.set([]);\n return;\n }\n\n const stacks = this.stackItems(this.data());\n const slicedStacks = stacks.slice(0, this.maxAmountOfItems());\n const flatStacks = slicedStacks.flat();\n this.slicedDataPoints.set(flatStacks);\n const slicedStackKeys = new Set(slicedStacks.map(stack => stack[0].stackKey));\n const labels: BarChartLabel[] = this.stacks()?.length\n ? this.stacks()\n .filter(stack => slicedStackKeys.has(stack.stackKey))\n .map(stack => ({ stackKey: stack.stackKey, label: stack.label }))\n : flatStacks.map(d => ({ stackKey: d.stackKey, label: d.label }));\n\n const g = this.svg\n .attr('width', width)\n .attr('height', height)\n .append('g')\n .attr('transform', `translate(${leftMargin},${this.MARGIN.top})`);\n\n if (this.orientation() === 'vertical') {\n this.createVerticalChart(g, labels, width, height, this.xAxisLabel(), this.yAxisLabel(), leftMargin);\n } else {\n this.createHorizontalChart(g, labels, width, height, this.xAxisLabel(), this.yAxisLabel(), leftMargin);\n }\n\n this.styleGridLines(g);\n }\n\n private createVerticalChart(\n g: Selection<SVGGElement, unknown, null, undefined>,\n labels: BarChartLabel[],\n width: number,\n height: number,\n xAxisLabel: string,\n yAxisLabel: string,\n leftMargin: number\n ): void {\n const keys = labels.map(d => d.stackKey);\n const x = d3scaleBand().domain(keys).range([0, width]);\n\n const y = d3scaleLinear()\n .domain([0, d3max(this.slicedDataPoints(), (d: BarChartDataPoint) => d.stackValue1) || 0])\n .nice()\n .range([height, 0]);\n\n // X Axis\n const labelSelection = g\n .append('g')\n .attr('transform', `translate(0,${height})`)\n .call(d3axisBottom(x))\n .selectAll<SVGTextElement, BarChartLabel>('text');\n this.labelSelection = labelSelection\n .data(labels)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .call(this.addTextCommonInfo as any)\n .style('cursor', 'pointer')\n .call(this.addTextAndTitle.bind(this), x.bandwidth())\n .call(this.addTextHoverHandlers.bind(this))\n .call(this.addTextClickHandler.bind(this));\n\n // Y Axis\n const tickValues = y.ticks(5).filter((tick: number) => Number.isInteger(tick));\n const yAxis = g\n .append('g')\n .call(d3axisLeft(y).tickValues(tickValues).tickSize(-width).tickFormat(d3format('~s')))\n .selectAll('text');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yAxis.call(this.addTextCommonInfo as any);\n\n this.createBarSelectionGroups(g);\n\n // Add highlight rect (behind)\n this.addVerticalBarRectangle(x, y, 2)\n .attr('class', 'bar-highlight')\n .attr('fill', '#fff')\n .style('stroke', (d: BarChartDataPoint) => toChartColor(d.color))\n .attr('stroke-width', 2)\n .style('opacity', 0); // hidden by default;\n\n // Add main bar rect (on top)\n this.addVerticalBarRectangle(x, y)\n .attr('class', 'bar')\n .style('fill', (d: BarChartDataPoint) => toChartColor(d.color));\n\n this.appendAxisLabel(g, xAxisLabel, width / 2, height + 40);\n this.appendAxisLabel(g, yAxisLabel, -height / 2, -(leftMargin - 10), 'rotate(-90)');\n }\n\n private createHorizontalChart(\n g: Selection<SVGGElement, unknown, null, undefined>,\n labels: BarChartLabel[],\n width: number,\n height: number,\n xAxisLabel: string,\n yAxisLabel: string,\n leftMargin: number\n ): void {\n const x = d3scaleLinear()\n .domain([0, d3max(this.slicedDataPoints(), (d: BarChartDataPoint) => d.stackValue1) || 0])\n .nice()\n .range([0, width]);\n\n const keys = labels.map(d => d.stackKey);\n const y = d3scaleBand().domain(keys).range([0, height]);\n\n // X Axis\n const tickValues = x.ticks(5).filter((tick: number) => Number.isInteger(tick));\n const xAxis = g\n .append('g')\n .attr('transform', `translate(0,${height})`)\n .call(d3axisBottom(x).tickValues(tickValues).tickSize(-height).tickFormat(d3format('~s')))\n .selectAll('text');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xAxis.call(this.addTextCommonInfo as any);\n\n // Y Axis\n const labelSelection = g\n .append('g')\n .attr('transform', `translate(0,0)`)\n .call(d3axisLeft(y))\n .selectAll<SVGTextElement, BarChartData>('text');\n this.labelSelection = labelSelection\n .data(labels)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .call(this.addTextCommonInfo as any)\n .style('cursor', 'pointer')\n .call(this.addTextAndTitle.bind(this), this.MARGIN.left - 10)\n .call(this.addTextHoverHandlers.bind(this))\n .call(this.addTextClickHandler.bind(this));\n\n this.createBarSelectionGroups(g);\n\n // Add highlight rect (behind)\n this.addHorizontalBarRectangle(x, y, 2)\n .attr('class', 'bar-highlight')\n .attr('fill', '#fff')\n .style('stroke', (d: BarChartDataPoint) => toChartColor(d.color))\n .attr('stroke-width', 2)\n .style('opacity', 0); // hidden by default;\n\n // Add main bar rect (on top)\n this.addHorizontalBarRectangle(x, y)\n .attr('class', 'bar')\n .style('fill', (d: BarChartDataPoint) => toChartColor(d.color));\n\n // X axis description label (value axis at bottom)\n this.appendAxisLabel(g, xAxisLabel, width / 2, height + 40);\n // Y axis description label: centred in the extra band reserved for it\n this.appendAxisLabel(g, yAxisLabel, -height / 2, -((this.MARGIN.left + leftMargin) / 2), 'rotate(-90)');\n }\n\n private createBarSelectionGroups(g: Selection<SVGGElement, unknown, null, undefined>) {\n this.barSelection = g\n .selectAll<SVGRectElement, BarChartDataPoint>('.bar-group')\n .data(this.slicedDataPoints(), (d: BarChartDataPoint) => d.key)\n .join('g')\n .attr('class', 'bar-group')\n .style('cursor', 'pointer')\n .on('mouseover', (_e: PointerEvent, d: BarChartDataPoint) =>\n this.setHoverStylesByStackKey(d.stackKey, d.key, true)\n )\n .on('mouseout', (_e: PointerEvent, d: BarChartDataPoint) =>\n this.setHoverStylesByStackKey(d.stackKey, d.key, false)\n )\n .call(this.addBarClickHandler.bind(this));\n }\n\n private addTextCommonInfo(g: Selection<BaseType, any, BaseType, any>): void {\n g.style('font-size', '11px').style('fill', 'var(--clr-color-neutral-600, #666)');\n }\n\n private addTextHoverHandlers(g: Selection<BaseType, BarChartData, SVGGElement, undefined>): void {\n g.on('mouseover', (_e: PointerEvent, d: BarChartData) => this.setHoverStylesByStackKey(d.stackKey, undefined, true)) //\n .on('mouseout', (_e: PointerEvent, d: BarChartData) =>\n this.setHoverStylesByStackKey(d.stackKey, undefined, false)\n );\n }\n\n private setHoverStylesByStackKey(stackKey: string, key: string | undefined, isHover: boolean): void {\n // When hovering a stack section, we also need to highlight the label, but not the other sections of the same stack.\n // But when hovering a label, we need to highlight all sections of the stack.\n const barGroup = this.barSelection.filter(\n (d: BarChartDataPoint) => d.stackKey === stackKey && (key == null || d.key === key)\n );\n barGroup.select('.bar').style('mix-blend-mode', isHover ? 'multiply' : 'unset');\n barGroup.select('.bar-highlight').style('opacity', isHover ? '1' : '0');\n\n this.labelSelection\n .filter((d: BarChartLabel) => d.stackKey === stackKey)\n .style('font-weight', isHover ? 'bold' : 'unset');\n }\n\n private addBarClickHandler(g: Selection<SVGRectElement, BarChartDataPoint, SVGElement, undefined>) {\n g.on('click', (event: PointerEvent, d: BarChartDataPoint) => {\n event.stopPropagation();\n this.openTooltipByKey(d.key);\n });\n }\n\n private addTextClickHandler(g: Selection<SVGTextElement, BarChartLabel, SVGElement, undefined>) {\n // no click handler for labels in stacked charts\n if (this.stacks()?.length) {\n return;\n }\n\n g.on('click', (event: PointerEvent, d: BarChartLabel) => {\n event.stopPropagation();\n // Note: In non-stacked charts, the stackKey is equal to the key, so this works - but the logic is confusing [VU3REQ-4790]\n this.openTooltipByKey(d.stackKey);\n });\n }\n\n private openTooltipByKey(key: string): void {\n const index = this.slicedDataPoints().findIndex(item => item.key === key);\n const rect = this.barSelection\n .filter((_d: BarChartDataPoint, i: number) => i === index)\n // we actually want the bar, not the group (because if value is 0, then the group is not positioned correctly\n .node()\n .children[0].getBoundingClientRect();\n const container = this.chartRef().nativeElement.getBoundingClientRect();\n\n this.tooltipPosition.set({\n x: rect.left - container.left + rect.width / 2,\n y: (this.tooltipOrientation() === 'top' ? rect.top : rect.bottom) - container.top,\n });\n this.selectedItem.set(this.slicedDataPoints()[index]);\n }\n\n private addTextAndTitle(g: Selection<SVGTextElement, BarChartLabel, SVGElement, undefined>, availableWidth: number) {\n g.each((d: BarChartLabel, index: number, nodes: SVGTextElement[] | ArrayLike<SVGTextElement>) => {\n const target = d3select(nodes[index]);\n target.text(\n this.textRenderer.render(d.label, 15, availableWidth, target.style('font-size'), target.style('font-family'))\n );\n target.append('title').text(d.label);\n });\n }\n\n private styleGridLines(g: Selection<SVGGElement, unknown, null, undefined>) {\n g.selectAll('.tick line').style('stroke', 'var(--clr-color-neutral-200, #e8e8e8)');\n }\n\n private addVerticalBarRectangle(\n x: ScaleBand<string>,\n y: ScaleLinear<number, number>,\n extraSize: number = 0\n ): Selection<SVGRectElement, BarChartDataPoint, SVGElement, undefined> {\n return this.barSelection\n .append('rect')\n .attr('x', (d: BarChartDataPoint) => {\n return (x(d.stackKey) || 0) + (x.bandwidth() - this.barSizePx()) / 2 + extraSize;\n })\n .attr('y', (d: BarChartDataPoint) => y(d.stackValue1))\n .attr('width', this.barSizePx() - 2 * extraSize)\n .attr('height', (d: BarChartDataPoint) => y(d.stackValue0) - y(d.stackValue1))\n .attr('rx', 1)\n .attr('ry', 1);\n }\n\n private addHorizontalBarRectangle(\n x: ScaleLinear<number, number>,\n y: ScaleBand<string>,\n extraSize: number = 0\n ): Selection<SVGRectElement, BarChartDataPoint, SVGElement, undefined> {\n return this.barSelection\n .append('rect')\n .attr('x', (d: BarChartDataPoint) => x(d.stackValue0))\n .attr('y', (d: BarChartDataPoint) => {\n return (y(d.stackKey) || 0) + (y.bandwidth() - this.barSizePx()) / 2 + extraSize;\n })\n .attr('width', (d: BarChartDataPoint) => x(d.stackValue1) - x(d.stackValue0))\n .attr('height', this.barSizePx() - 2 * extraSize)\n .attr('rx', 1)\n .attr('ry', 1);\n }\n\n /** Appends a shared-style axis description label to the chart group. */\n private appendAxisLabel(\n g: Selection<SVGGElement, unknown, null, undefined>,\n text: string,\n x: number,\n y: number,\n transform?: string\n ): void {\n if (!text) {\n return;\n }\n const el = g\n .append('text')\n .attr('text-anchor', 'middle')\n .style('font-size', '12px')\n .style('fill', 'var(--clr-color-neutral-600, #666)')\n .text(text)\n .attr('x', x)\n .attr('y', y);\n if (transform) {\n el.attr('transform', transform);\n }\n }\n\n private stackItems(data: BarChartData[]): BarChartDataPoint[][] {\n let groups: [string, BarChartData[]][];\n if (this.stacks()?.length) {\n groups = Array.from(d3group(data, (d: BarChartData) => d.stackKey ?? d.key));\n } else {\n groups = data.map(item => [item.key, [item]]);\n }\n\n return this.mapItems(groups);\n }\n\n private mapItems(groups: [string, BarChartData[]][]): BarChartDataPoint[][] {\n const result: BarChartDataPoint[][] = [];\n for (const [_, items] of groups) {\n let stackValue = 0;\n const stackSum = d3sum(items, (d: BarChartData) => d.value);\n result.push(\n items.map(item => {\n const stackValue0 = stackValue;\n stackValue += item.value;\n return {\n ...item,\n stackValue0,\n stackValue1: stackValue,\n stackKey: item.stackKey ?? item.key,\n percentageOfStack: stackSum === 0 ? 0 : (100 * item.value) / stackSum,\n };\n })\n );\n }\n\n return result;\n }\n\n private getMaxAmountOfItems(width: number, height: number) {\n if (this.orientation() === 'vertical') {\n return Math.floor(width / this.barAreaSizePx());\n }\n return Math.floor(height / BarChartComponent.HORIZONTAL_BAR_MIN_HEIGHT_PX);\n }\n}\n","<div class=\"chart-container\">\n <div class=\"chart-area\" #container (cngWindowResize)=\"updateChart()\" [class.pt-3]=\"alertMessageAndType()\">\n <svg [class.d-none]=\"loading() || !data()?.length\" #chart></svg>\n\n @if (tooltipPosition()) {\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipOrientation]=\"tooltipOrientation()\"\n [squareColor]=\"!stacks() ? selectedItem()?.color : undefined\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"valueClicked.emit({ key: tooltipKey(), label: tooltipLabel(), value: tooltipValue() })\"\n >\n <ng-container ngProjectAs=\"cng-title\"> ({{ tooltipValue() }}) {{ tooltipLabel() }}</ng-container>\n\n <p class=\"mt-0\">\n {{ (100 * tooltipValue()) / total() | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n </p>\n\n @if (stacks()) { @for (slice of selectedStackSlices(); track slice.key) {\n <div class=\"mt-0-5 d-flex\">\n <div class=\"color-square mr-0-5\" [style.background-color]=\"toChartColor(slice.color)\"></div>\n <strong>{{ slice.fullLabel || slice.label }}:&nbsp;</strong>\n <span\n class=\"has-more-info\"\n (click)=\"\n valueClicked.emit({\n key: [slice.key],\n label: slice.fullLabel || slice.label,\n value: slice.value,\n })\n \"\n >\n {{ slice.value }}\n </span>\n </div>\n <p class=\"mt-0-25 percentage-info\">\n {{ (100 * slice.value) / total() | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n {{ slice.percentageOfStack | number : '1.0-2' }}% {{ tooltipPercentOf() }} \"{{ tooltipLabel() }}\"\n </p>\n } }\n </cng-chart-tooltip>\n } @if (loading() || !data()?.length) {\n <cng-bar-chart-skeleton [orientation]=\"orientation()\" [skeletonType]=\"loading() ? 'loading' : 'placeholder'\" />\n } @if (alertMessageAndType()) {\n <cng-chart-alert-overlay [alertType]=\"alertMessageAndType()[1]\" [alertMessage]=\"alertMessageAndType()[0]\" />\n }\n </div>\n\n @if (showLegend() && !loading() && legendItems().length) {\n <cng-chart-legend [items]=\"legendItems()\" />\n } @if (showExportButton() && !loading() && data()?.length) {\n <cng-chart-export-button\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n [legendItems]=\"legendItems()\"\n />\n }\n</div>\n","/*\n * Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\nimport { ScaleLinear, ScalePoint, select as d3select, Selection } from 'd3';\nimport { XYChartPoint, XYChartSeries } from './xy-chart.types';\nimport { toChartColor } from '../utils';\n\n/**\n * Renders interactive dot circles for a single XY series onto the given D3 group.\n *\n * - Default radius: 4px, hover radius: 6px.\n * - Calls `onClick` with the clicked element, data point and series when a dot is clicked.\n *\n */\nexport function renderDots(\n g: Selection<SVGGElement, unknown, null, undefined>,\n series: XYChartSeries,\n x: ScalePoint<string>,\n y: ScaleLinear<number, number>,\n onClick: (el: SVGCircleElement, point: XYChartPoint, series: XYChartSeries) => void\n): void {\n g.selectAll<SVGCircleElement, XYChartPoint>(`.dot-${series.key}`)\n .data(series.data, (d: XYChartPoint) => d.x)\n .join('circle')\n .attr('class', `dot dot-${series.key}`)\n .attr('cx', (d: XYChartPoint) => x(d.x) ?? 0)\n .attr('cy', (d: XYChartPoint) => y(d.value))\n .attr('r', 4)\n .style('fill', toChartColor(series.color))\n .attr('stroke', '#fff')\n .attr('stroke-width', 2)\n .style('cursor', 'pointer')\n .on('mouseover', (e: PointerEvent) => {\n d3select(e.currentTarget as SVGCircleElement).attr('r', 6);\n })\n .on('mouseout', (e: PointerEvent) => {\n d3select(e.currentTarget as SVGCircleElement).attr('r', 4);\n })\n .on('click', (event: PointerEvent, d: XYChartPoint) => {\n event.stopPropagation();\n onClick(event.currentTarget as SVGCircleElement, d, series);\n });\n}\n","/*\n * Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\nimport {\n axisBottom as d3axisBottom,\n axisLeft as d3axisLeft,\n AxisScale,\n format as d3format,\n ScaleLinear,\n Selection,\n} from 'd3';\n\n/** Options passed to {@link drawXYAxes}. */\nexport interface XYAxisOptions {\n /** Maps each X key to its display label. */\n xLabelMap: Map<string, string>;\n width: number;\n height: number;\n /** Optional description label rendered below the X axis. */\n xAxisLabel?: string;\n /** Optional description label rendered rotated left of the Y axis. */\n yAxisLabel?: string;\n /** Left margin already accounting for the Y-axis label offset. */\n effectiveLeft: number;\n}\n\n/**\n * Computes sensible tick values for a linear Y scale.\n *\n * When the domain contains enough integer values (≥ 3) the ticks are filtered\n * to integers only (avoids fractional labels for count data). For small-range\n * domains – e.g. 0–1 ratios / probabilities – the raw D3 ticks are returned\n * unchanged so that decimal labels are still visible.\n */\nexport function computeYTickValues(y: ScaleLinear<number, number>, count = 5): number[] {\n const raw = y.ticks(count);\n const integers = raw.filter(Number.isInteger);\n // Keep integer-only ticks only when there are at least 3 of them; otherwise\n // the domain is too small (e.g. 0–1) and we need the decimal ticks.\n return integers.length >= 3 ? integers : raw;\n}\n\n/**\n * Returns a D3 tick-format function that matches the decision made in\n * {@link computeYTickValues}:\n *\n * - **Integer / large-value domain** (≥ 3 integer ticks): SI prefix format\n * (`~s`), e.g. `1k`, `200`.\n * - **Small / decimal domain** (< 3 integer ticks, e.g. 0–1 ratios): plain\n * fixed-point format (`.3~f`) – avoids the SI \"milli\" prefix (`m`) that\n * D3 would otherwise apply to values < 1.\n */\nexport function computeYTickFormat(\n y: ScaleLinear<number, number>,\n count = 5\n): (d: number | { valueOf(): number }) => string {\n const raw = y.ticks(count);\n const integers = raw.filter(Number.isInteger);\n return integers.length >= 3 ? d3format('~s') : d3format('.3~f');\n}\n\n/**\n * Draws the X and Y axes (with integer-only Y ticks and grid lines) plus\n * optional description labels onto the given D3 group.\n *\n * @param g The D3 group element to append into.\n * @param x Any D3 axis scale keyed on strings (`ScalePoint` or `ScaleBand`).\n * @param y The linear Y scale.\n * @param opts Axis configuration options.\n */\nexport function drawXYAxes(\n g: Selection<SVGGElement, unknown, null, undefined>,\n x: AxisScale<string>,\n y: ScaleLinear<number, number>,\n opts: XYAxisOptions\n): void {\n const { xLabelMap, width, height, xAxisLabel, yAxisLabel, effectiveLeft } = opts;\n\n // X axis\n g.append('g')\n .attr('transform', `translate(0,${height})`)\n .call(d3axisBottom(x).tickFormat((d: string) => xLabelMap.get(d) ?? d))\n .selectAll('text')\n .style('font-size', '11px')\n .style('fill', 'var(--clr-color-neutral-600, #666)');\n\n // Y axis\n const tickValues = computeYTickValues(y);\n const tickFormat = computeYTickFormat(y);\n g.append('g')\n .call(d3axisLeft(y).tickValues(tickValues).tickSize(-width).tickFormat(tickFormat))\n .selectAll('text')\n .style('font-size', '11px')\n .style('fill', 'var(--clr-color-neutral-600, #666)');\n\n // Optional X axis description label\n if (xAxisLabel) {\n g.append('text')\n .attr('x', width / 2)\n .attr('y', height + 40)\n .attr('text-anchor', 'middle')\n .style('font-size', '12px')\n .style('fill', 'var(--clr-color-neutral-600, #666)')\n .text(xAxisLabel);\n }\n\n // Optional Y axis description label (rotated, centred in the left-margin band)\n if (yAxisLabel) {\n g.append('text')\n .attr('transform', 'rotate(-90)')\n .attr('x', -height / 2)\n .attr('y', -(effectiveLeft / 2))\n .attr('text-anchor', 'middle')\n .style('font-size', '12px')\n .style('fill', 'var(--clr-color-neutral-600, #666)')\n .text(yAxisLabel);\n }\n}\n\n/**\n * Styles all D3 grid tick lines inside `g` with the neutral chart grid color.\n */\nexport function styleGridLines(g: Selection<SVGGElement, unknown, null, undefined>): void {\n g.selectAll('.tick line').style('stroke', 'var(--clr-color-neutral-200, #e8e8e8)');\n}\n","import { ChangeDetectionStrategy, Component, computed, input, OnChanges, output, SimpleChanges } from '@angular/core';\nimport {\n curveMonotoneX,\n format as d3format,\n line as d3line,\n max as d3max,\n min as d3min,\n scaleLinear as d3scaleLinear,\n ScaleLinear,\n scalePoint as d3scalePoint,\n ScalePoint,\n select as d3select,\n Selection,\n} from 'd3';\nimport { NO_ITEMS_ALERT_TYPE, NO_ITEMS_MESSAGE } from '../constants';\nimport { toChartColor } from '../utils';\nimport { ChartLegendItem } from '../chart-legend/chart-legend.component';\nimport { XYChartPoint, XYChartSeries, XYChartValue } from '../shared/xy-chart.types';\nimport { renderDots } from '../shared/d3-dots';\nimport { drawXYAxes, styleGridLines } from '../shared/d3-chart-axes';\nimport { ChartBase } from '../shared/chart-base';\n\n// Re-exported as chart-specific aliases for backward compatibility\nexport type {\n XYChartPoint as LineChartPoint,\n XYChartSeries as LineChartSeries,\n XYChartValue as LineChartValue,\n} from '../shared/xy-chart.types';\n\ntype LineChartSelectedPoint = XYChartPoint & {\n seriesKey: string;\n seriesLabel: string;\n color: string;\n};\n\n@Component({\n selector: 'clr-line-chart',\n templateUrl: './line-chart.component.html',\n styleUrls: ['./line-chart.component.scss'],\n standalone: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LineChartComponent extends ChartBase<LineChartSelectedPoint> implements OnChanges {\n public readonly series = input.required<XYChartSeries[]>();\n public readonly tooltipOrientation = input<'top' | 'bottom'>('top');\n public readonly showArea = input(false);\n public readonly showLegend = input(true);\n public readonly showValues = input(false);\n public readonly showExportButton = input(false);\n public readonly exportButtonTitle = input<string>('Export');\n public readonly exportFilename = input<string>('line-chart');\n\n public readonly noItemsMessage = input<string>(NO_ITEMS_MESSAGE);\n public readonly tooltipPercentOfTotal = input<string>('of total');\n\n /** Optional label rendered below the X axis. */\n public readonly xAxisLabel = input<string>('');\n /** Optional label rendered rotated to the left of the Y axis. */\n public readonly yAxisLabel = input<string>('');\n\n public readonly yMin = input<number>(0);\n public readonly autoscaleYAxis = input<boolean>(false);\n\n public readonly valueClicked = output<XYChartValue>();\n\n private readonly MARGIN = { top: 20, right: 30, bottom: 30, left: 65 };\n\n protected readonly hasData = computed(() => this.series().some(s => s.data.length > 0));\n\n protected readonly total = computed(() =>\n this.series().reduce((acc, s) => acc + s.data.reduce((a, d) => a + d.value, 0), 0)\n );\n\n public readonly alertMessageAndType = computed<[string, string] | undefined>(() => {\n if (this.loading()) {\n return undefined;\n }\n if (!this.hasData()) {\n return [this.noItemsMessage(), NO_ITEMS_ALERT_TYPE];\n }\n return undefined;\n });\n\n public readonly legendItems = computed<ChartLegendItem[]>(() => {\n if (!this.showLegend()) {\n return [];\n }\n return this.series().map(s => ({ label: s.label, color: s.color }));\n });\n\n private svg: Selection<SVGSVGElement, unknown, null, undefined>;\n\n public ngOnChanges(_changes: SimpleChanges): void {\n if (!this.svg) {\n return;\n }\n requestAnimationFrame(() => this.updateChart());\n }\n\n public override ngAfterViewInit(): void {\n this.svg = d3select(this.chartRef().nativeElement);\n super.ngAfterViewInit();\n }\n\n protected updateChart(): void {\n this.svg.selectAll('*').remove();\n\n if (this.loading()) {\n return;\n }\n\n if (!this.hasData()) {\n return;\n }\n\n const { width: containerWidth, height: containerHeight } = this.getContainerDimensions();\n const extraBottom = this.xAxisLabel() ? 16 : 0;\n const extraLeft = this.yAxisLabel() ? 16 : 0;\n const extraTop = this.showValues() ? 14 : 0;\n const effectiveLeft = this.MARGIN.left + extraLeft;\n const width = containerWidth - effectiveLeft - this.MARGIN.right;\n const height = containerHeight - (this.MARGIN.top + extraTop) - (this.MARGIN.bottom + extraBottom);\n\n // Collect all unique X keys in the order they appear across all series\n const xKeys = [...new Set(this.series().flatMap(s => s.data.map(d => d.x)))];\n // Build a display-label map\n const xLabelMap = new Map<string, string>();\n this.series().forEach(s => s.data.forEach(d => xLabelMap.set(d.x, d.xLabel ?? d.x)));\n\n const x = d3scalePoint<string>().domain(xKeys).range([0, width]).padding(0.5);\n const maxY = d3max(this.series().flatMap(s => s.data.map(d => d.value))) ?? 0;\n const minY = this.autoscaleYAxis() ? d3min(this.series().flatMap(s => s.data.map(d => d.value))) ?? 0 : this.yMin();\n const y = d3scaleLinear().domain([minY, maxY]).nice().range([height, 0]);\n\n const g = this.svg\n .attr('width', width)\n .attr('height', height)\n .append('g')\n .attr('transform', `translate(${effectiveLeft},${this.MARGIN.top + extraTop})`);\n\n drawXYAxes(g, x, y, {\n xLabelMap,\n width,\n height,\n xAxisLabel: this.xAxisLabel(),\n yAxisLabel: this.yAxisLabel(),\n effectiveLeft,\n });\n styleGridLines(g);\n this.drawSeries(g, x, y);\n }\n\n private drawSeries(\n g: Selection<SVGGElement, unknown, null, undefined>,\n x: ScalePoint<string>,\n y: ScaleLinear<number, number>\n ): void {\n const lineGenerator = d3line<XYChartPoint>()\n .x((d: XYChartPoint) => x(d.x) ?? 0)\n .y((d: XYChartPoint) => y(d.value))\n .curve(curveMonotoneX);\n\n for (const series of this.series()) {\n if (!series.data.length) {\n continue;\n }\n\n // Optional area fill\n if (this.showArea()) {\n g.append('path')\n .datum(series.data)\n .attr('class', `area area-${series.key}`)\n .style('fill', toChartColor(series.color))\n .attr('fill-opacity', 0.1)\n .attr('d', lineGenerator);\n }\n\n // Line path\n g.append('path')\n .datum(series.data)\n .attr('class', `line line-${series.key}`)\n .attr('fill', 'none')\n .style('stroke', toChartColor(series.color))\n .attr('stroke-width', 2)\n .attr('stroke-linejoin', 'round')\n .attr('stroke-linecap', 'round')\n .attr('d', lineGenerator);\n\n // Dots\n renderDots(g, series, x, y, (el, point, s) => this.openTooltip(el, point, s));\n\n // Value labels above each dot\n if (this.showValues()) {\n g.selectAll<SVGTextElement, XYChartPoint>(`.value-label-${series.key}`)\n .data(series.data, (d: XYChartPoint) => d.x)\n .join('text')\n .attr('class', `value-label value-label-${series.key}`)\n .attr('x', (d: XYChartPoint) => x(d.x) ?? 0)\n .attr('y', (d: XYChartPoint) => y(d.value) - 9)\n .attr('text-anchor', 'middle')\n .style('font-size', '11px')\n .style('font-weight', '600')\n .style('fill', toChartColor(series.color))\n .attr('stroke', '#fff')\n .attr('stroke-width', 3)\n .attr('paint-order', 'stroke fill')\n .style('pointer-events', 'none')\n .text((d: XYChartPoint) => d3format('~s')(d.value));\n }\n }\n }\n\n private openTooltip(el: SVGCircleElement, point: XYChartPoint, series: XYChartSeries): void {\n const rect = el.getBoundingClientRect();\n const container = this.chartRef().nativeElement.getBoundingClientRect();\n this.tooltipPosition.set({\n x: rect.left - container.left + rect.width / 2,\n y: (this.tooltipOrientation() === 'top' ? rect.top : rect.bottom) - container.top,\n });\n this.selectedItem.set({ ...point, seriesKey: series.key, seriesLabel: series.label, color: series.color });\n }\n}\n","<div class=\"chart-container\">\n <div class=\"chart-area\" #container (cngWindowResize)=\"updateChart()\" [class.pt-3]=\"alertMessageAndType()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (tooltipPosition()) {\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipOrientation]=\"tooltipOrientation()\"\n [squareColor]=\"selectedItem()?.color\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n valueClicked.emit({\n seriesKey: selectedItem().seriesKey,\n seriesLabel: selectedItem().seriesLabel,\n x: selectedItem().x,\n xLabel: selectedItem().xLabel,\n value: selectedItem().value,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n ({{ selectedItem().value }}) {{ selectedItem().xLabel || selectedItem().x }}\n </ng-container>\n\n <p class=\"mt-0\">\n <strong>{{ selectedItem().seriesLabel }}:</strong>\n {{ selectedItem().value }}\n </p>\n <p class=\"mt-0\">\n {{ (100 * selectedItem().value) / total() | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n </p>\n </cng-chart-tooltip>\n } @if (loading() || !hasData()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" [skeletonType]=\"loading() ? 'loading' : 'placeholder'\" />\n } @if (alertMessageAndType()) {\n <cng-chart-alert-overlay [alertType]=\"alertMessageAndType()[1]\" [alertMessage]=\"alertMessageAndType()[0]\" />\n }\n </div>\n\n @if (showLegend() && !loading() && legendItems().length) {\n <cng-chart-legend [items]=\"legendItems()\" />\n } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n [legendItems]=\"legendItems()\"\n />\n }\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input, OnChanges, output, SimpleChanges } from '@angular/core';\nimport {\n area as d3area,\n curveMonotoneX,\n line as d3line,\n max as d3max,\n scaleLinear as d3scaleLinear,\n ScaleLinear,\n scalePoint as d3scalePoint,\n ScalePoint,\n select as d3select,\n Selection,\n} from 'd3';\nimport { NO_ITEMS_ALERT_TYPE, NO_ITEMS_MESSAGE } from '../constants';\nimport { toChartColor } from '../utils';\nimport { ChartLegendItem } from '../chart-legend/chart-legend.component';\nimport { XYChartPoint, XYChartSeries, XYChartValue } from '../shared/xy-chart.types';\nimport { renderDots } from '../shared/d3-dots';\nimport { drawXYAxes, styleGridLines } from '../shared/d3-chart-axes';\nimport { ChartBase } from '../shared/chart-base';\n\n// Re-exported as chart-specific aliases for backward compatibility\nexport type {\n XYChartPoint as AreaChartPoint,\n XYChartSeries as AreaChartSeries,\n XYChartValue as AreaChartValue,\n} from '../shared/xy-chart.types';\n\ntype AreaChartSelectedPoint = XYChartPoint & {\n seriesKey: string;\n seriesLabel: string;\n color: string;\n};\n\n@Component({\n selector: 'clr-area-chart',\n templateUrl: './area-chart.component.html',\n styleUrls: ['./area-chart.component.scss'],\n standalone: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AreaChartComponent extends ChartBase<AreaChartSelectedPoint> implements OnChanges {\n public readonly series = input.required<XYChartSeries[]>();\n public readonly tooltipOrientation = input<'top' | 'bottom'>('top');\n public readonly showLegend = input(true);\n public readonly showExportButton = input(false);\n public readonly exportButtonTitle = input<string>('Export');\n public readonly exportFilename = input<string>('area-chart');\n /** Area fill opacity (0–1). Default: 0.2. */\n public readonly areaOpacity = input<number>(0.2);\n\n public readonly noItemsMessage = input<string>(NO_ITEMS_MESSAGE);\n public readonly tooltipPercentOfTotal = input<string>('of total');\n\n /** Optional label rendered below the X axis. */\n public readonly xAxisLabel = input<string>('');\n /** Optional label rendered rotated to the left of the Y axis. */\n public readonly yAxisLabel = input<string>('');\n\n public readonly valueClicked = output<XYChartValue>();\n\n private readonly MARGIN = { top: 20, right: 30, bottom: 30, left: 65 };\n\n protected readonly hasData = computed(() => this.series().some(s => s.data.length > 0));\n\n protected readonly total = computed(() =>\n this.series().reduce((acc, s) => acc + s.data.reduce((a: number, d) => a + d.value, 0), 0)\n );\n\n public readonly alertMessageAndType = computed<[string, string] | undefined>(() => {\n if (this.loading()) {\n return undefined;\n }\n if (!this.hasData()) {\n return [this.noItemsMessage(), NO_ITEMS_ALERT_TYPE];\n }\n return undefined;\n });\n\n public readonly legendItems = computed<ChartLegendItem[]>(() => {\n if (!this.showLegend()) {\n return [];\n }\n return this.series().map(s => ({ label: s.label, color: s.color }));\n });\n\n private svg: Selection<SVGSVGElement, unknown, null, undefined>;\n\n public ngOnChanges(_changes: SimpleChanges): void {\n if (!this.svg) {\n return;\n }\n requestAnimationFrame(() => this.updateChart());\n }\n\n public override ngAfterViewInit(): void {\n this.svg = d3select(this.chartRef().nativeElement);\n super.ngAfterViewInit();\n }\n\n protected updateChart(): void {\n this.svg.selectAll('*').remove();\n\n if (this.loading() || !this.hasData()) {\n return;\n }\n\n const { width: containerWidth, height: containerHeight } = this.getContainerDimensions();\n const extraBottom = this.xAxisLabel() ? 16 : 0;\n const extraLeft = this.yAxisLabel() ? 16 : 0;\n const effectiveLeft = this.MARGIN.left + extraLeft;\n const width = containerWidth - effectiveLeft - this.MARGIN.right;\n const height = containerHeight - this.MARGIN.top - (this.MARGIN.bottom + extraBottom);\n\n const xKeys = [...new Set(this.series().flatMap(s => s.data.map(d => d.x)))];\n const xLabelMap = new Map<string, string>();\n this.series().forEach(s => s.data.forEach(d => xLabelMap.set(d.x, d.xLabel ?? d.x)));\n\n const x = d3scalePoint<string>().domain(xKeys).range([0, width]).padding(0.5);\n const maxY = d3max(this.series().flatMap(s => s.data.map(d => d.value))) ?? 0;\n const y = d3scaleLinear().domain([0, maxY]).nice().range([height, 0]);\n\n const g = this.svg\n .attr('width', width)\n .attr('height', height)\n .append('g')\n .attr('transform', `translate(${effectiveLeft},${this.MARGIN.top})`);\n\n drawXYAxes(g, x, y, {\n xLabelMap,\n width,\n height,\n xAxisLabel: this.xAxisLabel(),\n yAxisLabel: this.yAxisLabel(),\n effectiveLeft,\n });\n styleGridLines(g);\n this.drawSeries(g, x, y, height);\n }\n\n private drawSeries(\n g: Selection<SVGGElement, unknown, null, undefined>,\n x: ScalePoint<string>,\n y: ScaleLinear<number, number>,\n height: number\n ): void {\n const areaGenerator = d3area<XYChartPoint>()\n .x((d: XYChartPoint) => x(d.x) ?? 0)\n .y0(height)\n .y1((d: XYChartPoint) => y(d.value))\n .curve(curveMonotoneX);\n\n const lineGenerator = d3line<XYChartPoint>()\n .x((d: XYChartPoint) => x(d.x) ?? 0)\n .y((d: XYChartPoint) => y(d.value))\n .curve(curveMonotoneX);\n\n // Draw areas first (behind lines)\n for (const series of this.series()) {\n if (!series.data.length) {\n continue;\n }\n g.append('path')\n .datum(series.data)\n .attr('class', `area area-${series.key}`)\n .style('fill', toChartColor(series.color))\n .attr('fill-opacity', this.areaOpacity())\n .attr('stroke', 'none')\n .attr('d', areaGenerator);\n }\n\n // Draw lines and dots on top\n for (const series of this.series()) {\n if (!series.data.length) {\n continue;\n }\n\n g.append('path')\n .datum(series.data)\n .attr('class', `line line-${series.key}`)\n .attr('fill', 'none')\n .style('stroke', toChartColor(series.color))\n .attr('stroke-width', 2)\n .attr('stroke-linejoin', 'round')\n .attr('stroke-linecap', 'round')\n .attr('d', lineGenerator);\n\n renderDots(g, series, x, y, (el, point, s) => this.openTooltip(el, point, s));\n }\n }\n\n private openTooltip(el: SVGCircleElement, point: XYChartPoint, series: XYChartSeries): void {\n const rect = el.getBoundingClientRect();\n const container = this.chartRef().nativeElement.getBoundingClientRect();\n this.tooltipPosition.set({\n x: rect.left - container.left + rect.width / 2,\n y: (this.tooltipOrientation() === 'top' ? rect.top : rect.bottom) - container.top,\n });\n this.selectedItem.set({ ...point, seriesKey: series.key, seriesLabel: series.label, color: series.color });\n }\n}\n","<div class=\"chart-container\">\n <div class=\"chart-area\" #container (cngWindowResize)=\"updateChart()\" [class.pt-3]=\"alertMessageAndType()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (tooltipPosition()) {\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipOrientation]=\"tooltipOrientation()\"\n [squareColor]=\"selectedItem()?.color\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n valueClicked.emit({\n seriesKey: selectedItem().seriesKey,\n seriesLabel: selectedItem().seriesLabel,\n x: selectedItem().x,\n xLabel: selectedItem().xLabel,\n value: selectedItem().value,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n ({{ selectedItem().value }}) {{ selectedItem().xLabel || selectedItem().x }}\n </ng-container>\n\n <p class=\"mt-0\">\n <strong>{{ selectedItem().seriesLabel }}:</strong>\n {{ selectedItem().value }}\n </p>\n <p class=\"mt-0\">\n {{ (100 * selectedItem().value) / total() | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n </p>\n </cng-chart-tooltip>\n } @if (loading() || !hasData()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" [skeletonType]=\"loading() ? 'loading' : 'placeholder'\" />\n } @if (alertMessageAndType()) {\n <cng-chart-alert-overlay [alertType]=\"alertMessageAndType()[1]\" [alertMessage]=\"alertMessageAndType()[0]\" />\n }\n </div>\n\n @if (showLegend() && !loading() && legendItems().length) {\n <cng-chart-legend [items]=\"legendItems()\" />\n } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n [legendItems]=\"legendItems()\"\n />\n }\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input, OnChanges, output, SimpleChanges } from '@angular/core';\nimport {\n axisRight as d3axisRight,\n curveMonotoneX,\n line as d3line,\n max as d3max,\n scaleBand as d3scaleBand,\n ScaleBand,\n ScaleLinear,\n scaleLinear as d3scaleLinear,\n select as d3select,\n Selection,\n} from 'd3';\nimport { NO_ITEMS_ALERT_TYPE, NO_ITEMS_MESSAGE } from '../constants';\nimport { toChartColor } from '../utils';\nimport { ChartLegendItem } from '../chart-legend/chart-legend.component';\nimport { computeYTickFormat, computeYTickValues, drawXYAxes, styleGridLines } from '../shared/d3-chart-axes';\nimport { ChartBase } from '../shared/chart-base';\n\n// ─── Public types ────────────────────────────────────────────────────────────\n\nexport interface ComboBarPoint {\n /** X category key (must match keys used in line data). */\n x: string;\n /** Optional display label for the X-axis tick. */\n xLabel?: string;\n value: number;\n}\n\nexport interface ComboBarSeries {\n key: string;\n label: string;\n color: string;\n data: ComboBarPoint[];\n}\n\nexport interface ComboLinePoint {\n x: string;\n value: number;\n}\n\nexport interface ComboLineSeries {\n key: string;\n label: string;\n color: string;\n data: ComboLinePoint[];\n}\n\n/** Emitted when the user clicks a bar segment or a line dot. */\nexport interface ComboChartValue {\n seriesKey: string;\n seriesLabel: string;\n seriesType: 'bar' | 'line';\n x: string;\n xLabel?: string;\n value: number;\n}\n\n// ─── Internal ────────────────────────────────────────────────────────────────\n\ninterface SelectedComboItem {\n seriesKey: string;\n seriesLabel: string;\n seriesType: 'bar' | 'line';\n color: string;\n x: string;\n xLabel?: string;\n value: number;\n total: number;\n}\n\n@Component({\n selector: 'clr-combo-chart',\n templateUrl: './combo-chart.component.html',\n styleUrls: ['./combo-chart.component.scss'],\n standalone: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ComboChartComponent extends ChartBase<SelectedComboItem> implements OnChanges {\n // ── Inputs ──────────────────────────────────────────────────────────────────\n public readonly barSeries = input<ComboBarSeries[]>([]);\n public readonly lineSeries = input<ComboLineSeries[]>([]);\n public readonly tooltipOrientation = input<'top' | 'bottom'>('top');\n public readonly showLegend = input(true);\n public readonly showExportButton = input(false);\n public readonly exportButtonTitle = input<string>('Export');\n public readonly exportFilename = input<string>('combo-chart');\n\n public readonly noItemsMessage = input<string>(NO_ITEMS_MESSAGE);\n public readonly tooltipPercentOfTotal = input<string>('of total');\n\n /** Optional label rendered below the X axis. */\n public readonly xAxisLabel = input<string>('');\n /** Optional label rendered rotated to the left of the Y axis (bar scale). */\n public readonly yAxisLabel = input<string>('');\n /** Optional label rendered rotated to the right of the Y axis (line scale). */\n public readonly yLineAxisLabel = input<string>('');\n /** Optional fixed maximum value for the bar Y axis (left). Defaults to auto. */\n public readonly yBarMax = input<number | undefined>(undefined);\n /** Optional fixed maximum value for the line Y axis (right). Defaults to auto. */\n public readonly yLineMax = input<number | undefined>(undefined);\n\n // ── Outputs ─────────────────────────────────────────────────────────────────\n public readonly valueClicked = output<ComboChartValue>();\n\n // ── Layout ───────────────────────────────────────────────────────────────────\n private readonly MARGIN = { top: 20, right: 30, bottom: 30, left: 65 };\n\n // ── Computed ─────────────────────────────────────────────────────────────────\n protected readonly hasData = computed(\n () => this.barSeries().some(s => s.data.length > 0) || this.lineSeries().some(s => s.data.length > 0)\n );\n\n protected readonly total = computed(() => {\n const barTotal = this.barSeries().reduce((acc, s) => acc + s.data.reduce((a, d) => a + d.value, 0), 0);\n const lineTotal = this.lineSeries().reduce((acc, s) => acc + s.data.reduce((a, d) => a + d.value, 0), 0);\n return barTotal + lineTotal;\n });\n\n public readonly alertMessageAndType = computed<[string, string] | undefined>(() => {\n if (this.loading()) {\n return undefined;\n }\n if (!this.hasData()) {\n return [this.noItemsMessage(), NO_ITEMS_ALERT_TYPE];\n }\n return undefined;\n });\n\n public readonly legendItems = computed<ChartLegendItem[]>(() => {\n if (!this.showLegend()) {\n return [];\n }\n const barItems = this.barSeries().map(s => ({ label: s.label, color: s.color }));\n const lineItems = this.lineSeries().map(s => ({ label: s.label, color: s.color }));\n return [...barItems, ...lineItems];\n });\n\n // ── State ────────────────────────────────────────────────────────────────────\n private svg: Selection<SVGSVGElement, unknown, null, undefined>;\n private _clipIdCounter = 0;\n\n // ── Lifecycle ────────────────────────────────────────────────────────────────\n public ngOnChanges(_changes: SimpleChanges): void {\n if (!this.svg) {\n return;\n }\n requestAnimationFrame(() => this.updateChart());\n }\n\n public override ngAfterViewInit(): void {\n this.svg = d3select(this.chartRef().nativeElement);\n super.ngAfterViewInit();\n }\n\n // ── Chart rendering ──────────────────────────────────────────────────────────\n protected updateChart(): void {\n this.svg.selectAll('*').remove();\n\n if (this.loading() || !this.hasData()) {\n return;\n }\n\n const { width: cw, height: ch } = this.getContainerDimensions();\n const extraBottom = this.xAxisLabel() ? 16 : 0;\n const extraLeft = this.yAxisLabel() ? 16 : 0;\n const effectiveLeft = this.MARGIN.left + extraLeft;\n\n // Reserve extra right margin when line series are present (right Y axis)\n const hasLines = this.lineSeries().some(s => s.data.length > 0);\n const extraRight = hasLines ? (this.yLineAxisLabel() ? 50 : 40) : 0;\n\n const width = cw - effectiveLeft - this.MARGIN.right - extraRight;\n const height = ch - this.MARGIN.top - (this.MARGIN.bottom + extraBottom);\n\n // Collect all unique X keys preserving order\n const allBarKeys = this.barSeries().flatMap(s => s.data.map(d => d.x));\n const allLineKeys = this.lineSeries().flatMap(s => s.data.map(d => d.x));\n const xKeys = [...new Set([...allBarKeys, ...allLineKeys])];\n\n // Build X-label map\n const xLabelMap = new Map<string, string>();\n this.barSeries().forEach(s => s.data.forEach(d => xLabelMap.set(d.x, d.xLabel ?? d.x)));\n\n // Outer X scale (one band per category)\n const x = d3scaleBand<string>().domain(xKeys).range([0, width]).paddingInner(0.35).paddingOuter(0.15);\n\n // ── Separate Y scales ────────────────────────────────────────────────────\n // Bar Y scale (left axis)\n const xStackTotals = new Map<string, number>();\n for (const series of this.barSeries()) {\n for (const point of series.data) {\n xStackTotals.set(point.x, (xStackTotals.get(point.x) ?? 0) + point.value);\n }\n }\n const maxBarAuto = d3max([...xStackTotals.values()]) ?? 0;\n const maxBar = this.yBarMax() ?? maxBarAuto;\n const yBar = d3scaleLinear()\n .domain([0, maxBar || 1])\n .nice(this.yBarMax() === undefined ? undefined : 0)\n .range([height, 0]);\n\n // Line Y scale (right axis)\n const maxLineAuto = d3max(this.lineSeries().flatMap(s => s.data.map(d => d.value))) ?? 0;\n const maxLine = this.yLineMax() ?? maxLineAuto;\n const yLine = d3scaleLinear()\n .domain([0, maxLine || 1])\n .nice(this.yLineMax() === undefined ? undefined : 0)\n .range([height, 0]);\n\n // ── SVG ClipPath ─────────────────────────────────────────────────────────\n // Ensures bars/lines that exceed the Y-axis maximum (yBarMax/yLineMax) are\n // visually clipped at the chart boundary without modifying the data values.\n const clipId = `combo-clip-${this._clipIdCounter++}`;\n this.svg\n .append('defs')\n .append('clipPath')\n .attr('id', clipId)\n .append('rect')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', width)\n .attr('height', height);\n\n const g = this.svg\n .attr('width', width)\n .attr('height', height)\n .append('g')\n .attr('transform', `translate(${effectiveLeft},${this.MARGIN.top})`);\n\n drawXYAxes(g, x, yBar, {\n xLabelMap,\n width,\n height,\n xAxisLabel: this.xAxisLabel(),\n yAxisLabel: this.yAxisLabel(),\n effectiveLeft,\n });\n styleGridLines(g);\n\n // ── Right Y axis for line series ─────────────────────────────────────────\n if (hasLines) {\n const lineTickValues = computeYTickValues(yLine);\n const lineTickFormat = computeYTickFormat(yLine);\n const rightAxisG = g\n .append('g')\n .attr('transform', `translate(${width},0)`)\n .call(d3axisRight(yLine).tickValues(lineTickValues).tickFormat(lineTickFormat).tickSize(-width));\n rightAxisG.selectAll('text').style('font-size', '11px').style('fill', 'var(--clr-color-neutral-600, #666)');\n // Style the line-axis grid lines with a distinct dashed color\n rightAxisG\n .selectAll('.tick line')\n .style('stroke', 'var(--clr-color-neutral-400, #b3b3b3)')\n .style('stroke-dasharray', '4 3')\n .style('stroke-opacity', '0.8');\n // Remove the default domain line so it doesn't overlap the chart\n rightAxisG.select('.domain').remove();\n\n if (this.yLineAxisLabel()) {\n g.append('text')\n .attr('transform', 'rotate(-90)')\n .attr('x', -height / 2)\n .attr('y', width + extraRight - 4)\n .attr('text-anchor', 'middle')\n .style('font-size', '12px')\n .style('fill', 'var(--clr-color-neutral-600, #666)')\n .text(this.yLineAxisLabel());\n }\n }\n\n // Wrap chart content in a clipped group so elements exceeding the Y max\n // are not visible beyond the chart boundary.\n const contentGroup = g.append('g').attr('clip-path', `url(#${clipId})`);\n\n this.drawBars(contentGroup, x, yBar);\n this.drawLines(contentGroup, x, yLine);\n }\n\n private drawBars(\n g: Selection<SVGGElement, unknown, null, undefined>,\n x: ScaleBand<string>,\n y: ScaleLinear<number, number>\n ): void {\n // Running stack base (cumulative sum) per X key across all bar series\n const stackBase = new Map<string, number>();\n\n for (const series of this.barSeries()) {\n if (!series.data.length) {\n continue;\n }\n\n // Snapshot the base for each point before updating the running total\n type StackedPoint = ComboBarPoint & { base: number };\n const stacked: StackedPoint[] = series.data.map(d => ({\n ...d,\n base: stackBase.get(d.x) ?? 0,\n }));\n\n // Advance running totals for the next series\n for (const d of series.data) {\n stackBase.set(d.x, (stackBase.get(d.x) ?? 0) + d.value);\n }\n\n g.selectAll<SVGRectElement, StackedPoint>(`.bar-${series.key}`)\n .data(stacked, (d: StackedPoint) => d.x)\n .join('rect')\n .attr('class', `bar bar-${series.key}`)\n .attr('x', (d: StackedPoint) => x(d.x) ?? 0)\n .attr('y', (d: StackedPoint) => y(d.base + d.value))\n .attr('width', x.bandwidth())\n .attr('height', (d: StackedPoint) => y(d.base) - y(d.base + d.value))\n .attr('rx', 2)\n .attr('ry', 2)\n .style('fill', toChartColor(series.color))\n .style('cursor', 'pointer')\n .on('mouseover', (e: PointerEvent) => {\n d3select(e.currentTarget as SVGRectElement).attr('fill-opacity', 0.75);\n })\n .on('mouseout', (e: PointerEvent) => {\n d3select(e.currentTarget as SVGRectElement).attr('fill-opacity', 1);\n })\n .on('click', (event: PointerEvent, d: StackedPoint) => {\n event.stopPropagation();\n const rect = (event.currentTarget as SVGRectElement).getBoundingClientRect();\n const container = this.chartRef().nativeElement.getBoundingClientRect();\n this.tooltipPosition.set({\n x: rect.left - container.left + rect.width / 2,\n y: (this.tooltipOrientation() === 'top' ? rect.top : rect.bottom) - container.top,\n });\n this.selectedItem.set({\n seriesKey: series.key,\n seriesLabel: series.label,\n seriesType: 'bar',\n color: series.color,\n x: d.x,\n xLabel: d.xLabel,\n value: d.value,\n total: this.total(),\n });\n });\n }\n }\n\n private drawLines(\n g: Selection<SVGGElement, unknown, null, undefined>,\n x: ScaleBand<string>,\n y: ScaleLinear<number, number>\n ): void {\n // Map X key → band center position for line/dot placement\n const lineX = (key: string) => (x(key) ?? 0) + x.bandwidth() / 2;\n\n const lineGenerator = d3line<ComboLinePoint>()\n .x((d: ComboLinePoint) => lineX(d.x))\n .y((d: ComboLinePoint) => y(d.value))\n .curve(curveMonotoneX);\n\n for (const series of this.lineSeries()) {\n if (!series.data.length) {\n continue;\n }\n\n // Line path\n g.append('path')\n .datum(series.data)\n .attr('class', `combo-line combo-line-${series.key}`)\n .attr('fill', 'none')\n .style('stroke', toChartColor(series.color))\n .attr('stroke-width', 2.5)\n .attr('stroke-linejoin', 'round')\n .attr('stroke-linecap', 'round')\n .attr('d', lineGenerator);\n\n // Dots\n g.selectAll<SVGCircleElement, ComboLinePoint>(`.combo-dot-${series.key}`)\n .data(series.data, (d: ComboLinePoint) => d.x)\n .join('circle')\n .attr('class', `combo-dot combo-dot-${series.key}`)\n .attr('cx', (d: ComboLinePoint) => lineX(d.x))\n .attr('cy', (d: ComboLinePoint) => y(d.value))\n .attr('r', 4)\n .style('fill', toChartColor(series.color))\n .attr('stroke', '#fff')\n .attr('stroke-width', 2)\n .style('cursor', 'pointer')\n .on('mouseover', (e: PointerEvent) => {\n d3select(e.currentTarget as SVGCircleElement).attr('r', 6);\n })\n .on('mouseout', (e: PointerEvent) => {\n d3select(e.currentTarget as SVGCircleElement).attr('r', 4);\n })\n .on('click', (event: PointerEvent, d: ComboLinePoint) => {\n event.stopPropagation();\n const el = event.currentTarget as SVGCircleElement;\n const rect = el.getBoundingClientRect();\n const container = this.chartRef().nativeElement.getBoundingClientRect();\n this.tooltipPosition.set({\n x: rect.left - container.left + rect.width / 2,\n y: (this.tooltipOrientation() === 'top' ? rect.top : rect.bottom) - container.top,\n });\n this.selectedItem.set({\n seriesKey: series.key,\n seriesLabel: series.label,\n seriesType: 'line',\n color: series.color,\n x: d.x,\n value: d.value,\n total: this.total(),\n });\n });\n }\n }\n\n // ── Tooltip ──────────────────────────────────────────────────────────────────\n}\n","<div class=\"chart-container\">\n <div class=\"chart-area\" #container (cngWindowResize)=\"updateChart()\" [class.pt-3]=\"alertMessageAndType()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (tooltipPosition()) {\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipOrientation]=\"tooltipOrientation()\"\n [squareColor]=\"selectedItem()?.color\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n valueClicked.emit({\n seriesKey: selectedItem().seriesKey,\n seriesLabel: selectedItem().seriesLabel,\n seriesType: selectedItem().seriesType,\n x: selectedItem().x,\n xLabel: selectedItem().xLabel,\n value: selectedItem().value,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n ({{ selectedItem().value }}) {{ selectedItem().xLabel || selectedItem().x }}\n </ng-container>\n\n <p class=\"mt-0\">\n <strong>{{ selectedItem().seriesLabel }}:</strong>\n {{ selectedItem().value }}\n </p>\n <p class=\"mt-0\">\n {{ (100 * selectedItem().value) / selectedItem().total | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n </p>\n </cng-chart-tooltip>\n } @if (loading() || !hasData()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" [skeletonType]=\"loading() ? 'loading' : 'placeholder'\" />\n } @if (alertMessageAndType()) {\n <cng-chart-alert-overlay [alertType]=\"alertMessageAndType()[1]\" [alertMessage]=\"alertMessageAndType()[0]\" />\n }\n </div>\n\n @if (showLegend() && !loading() && legendItems().length) {\n <cng-chart-legend [items]=\"legendItems()\" />\n } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n [legendItems]=\"legendItems()\"\n />\n }\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input, OnChanges, output, SimpleChanges } from '@angular/core';\nimport { Arc, arc as d3arc, format as d3format, pie as d3pie, PieArcDatum, select as d3select, Selection } from 'd3';\nimport { NO_ITEMS_ALERT_TYPE, NO_ITEMS_MESSAGE } from '../constants';\nimport { toChartColor } from '../utils';\nimport { ChartLegendItem } from '../chart-legend/chart-legend.component';\nimport { ChartBase } from '../shared/chart-base';\n\nexport interface PieChartData {\n key: string;\n label: string;\n fullLabel?: string;\n value: number;\n color: string;\n}\n\nexport interface PieChartValue {\n key: string;\n label: string;\n value: number;\n}\n\n@Component({\n selector: 'clr-pie-chart',\n templateUrl: './pie-chart.component.html',\n styleUrls: ['./pie-chart.component.scss'],\n standalone: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PieChartComponent extends ChartBase<PieChartData> implements OnChanges {\n public readonly data = input.required<PieChartData[]>();\n public readonly donut = input(true);\n public readonly showLegend = input(true);\n public readonly showExportButton = input(false);\n public readonly exportButtonTitle = input<string>('Export');\n public readonly exportFilename = input<string>('pie-chart');\n public readonly tooltipOrientation = input<'top' | 'bottom'>('top');\n\n public readonly noItemsMessage = input<string>(NO_ITEMS_MESSAGE);\n public readonly tooltipPercentOfTotal = input<string>('of total');\n\n public readonly valueClicked = output<PieChartValue>();\n\n protected readonly hasData = computed(() => this.data()?.some(d => d.value > 0));\n protected readonly total = computed(() => this.data()?.reduce((acc, d) => acc + d.value, 0) ?? 0);\n\n public readonly alertMessageAndType = computed<[string, string] | undefined>(() => {\n if (this.loading()) {\n return undefined;\n }\n if (!this.hasData()) {\n return [this.noItemsMessage(), NO_ITEMS_ALERT_TYPE];\n }\n return undefined;\n });\n\n public readonly legendItems = computed<ChartLegendItem[]>(() => {\n if (!this.showLegend()) {\n return [];\n }\n return (this.data() ?? []).filter(d => d.value > 0).map(d => ({ label: d.fullLabel ?? d.label, color: d.color }));\n });\n\n private svg: Selection<SVGSVGElement, unknown, null, undefined>;\n private arcGen: Arc<any, PieArcDatum<PieChartData>>;\n\n public ngOnChanges(_changes: SimpleChanges): void {\n if (!this.svg) {\n return;\n }\n requestAnimationFrame(() => this.updateChart());\n }\n\n public override ngAfterViewInit(): void {\n this.svg = d3select(this.chartRef().nativeElement);\n super.ngAfterViewInit();\n }\n\n protected updateChart(): void {\n this.svg.selectAll('*').remove();\n\n if (this.loading() || !this.hasData()) {\n return;\n }\n\n const { width, height } = this.getContainerDimensions();\n const radius = Math.min(width, height) / 2;\n const innerRadius = this.donut() ? radius * 0.55 : 0;\n const outerRadius = radius * 0.9;\n\n this.arcGen = d3arc<PieArcDatum<PieChartData>>().innerRadius(innerRadius).outerRadius(outerRadius);\n\n const hoverArc = d3arc<PieArcDatum<PieChartData>>()\n .innerRadius(innerRadius)\n .outerRadius(outerRadius * 1.06);\n\n const pieGen = d3pie<PieChartData>()\n .value(d => d.value)\n .sort(null);\n\n const arcs = pieGen(this.data().filter(d => d.value > 0));\n\n const g = this.svg\n .attr('width', width)\n .attr('height', height)\n .append('g')\n .attr('transform', `translate(${width / 2},${height / 2})`);\n\n // Slices\n g.selectAll<SVGPathElement, PieArcDatum<PieChartData>>('.slice')\n .data(arcs, (d: PieArcDatum<PieChartData>) => d.data.key)\n .join('path')\n .attr('class', 'slice')\n .attr('d', this.arcGen)\n .style('fill', (d: PieArcDatum<PieChartData>) => toChartColor(d.data.color))\n .attr('stroke', '#fff')\n .attr('stroke-width', 2)\n .style('cursor', 'pointer')\n .on('mouseover', (e: PointerEvent) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n d3select(e.currentTarget as SVGPathElement).attr('d', hoverArc as any);\n })\n .on('mouseout', (e: PointerEvent) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n d3select(e.currentTarget as SVGPathElement).attr('d', this.arcGen as any);\n })\n .on('click', (event: PointerEvent, d: PieArcDatum<PieChartData>) => {\n event.stopPropagation();\n this.openTooltip(d, width, height);\n });\n\n // Slice labels – only show when the slice angle is large enough to fit text\n const MIN_ANGLE = 0.4; // ~23°\n const labelRadius = this.donut() ? (innerRadius + outerRadius) / 2 : outerRadius * 0.65;\n const labelArc = d3arc<PieArcDatum<PieChartData>>().innerRadius(labelRadius).outerRadius(labelRadius);\n const total = this.total();\n\n const labelGroups = g\n .selectAll<SVGGElement, PieArcDatum<PieChartData>>('.slice-label')\n .data(\n arcs.filter((d: PieArcDatum<PieChartData>) => d.endAngle - d.startAngle >= MIN_ANGLE),\n (d: PieArcDatum<PieChartData>) => d.data.key\n )\n .join('g')\n .attr('class', 'slice-label')\n .attr('transform', (d: PieArcDatum<PieChartData>) => {\n const [x, y] = labelArc.centroid(d);\n return `translate(${x},${y})`;\n })\n .style('pointer-events', 'none');\n\n labelGroups\n .append('text')\n .attr('class', 'label-value')\n .attr('text-anchor', 'middle')\n .attr('dy', '-0.3em')\n .style('font-size', '11px')\n .style('font-weight', '600')\n .style('fill', '#fff')\n .style('pointer-events', 'none')\n .text((d: PieArcDatum<PieChartData>) => d3format('~s')(d.data.value));\n\n labelGroups\n .append('text')\n .attr('class', 'label-percent')\n .attr('text-anchor', 'middle')\n .attr('dy', '0.9em')\n .style('font-size', '10px')\n .style('fill', 'rgba(255, 255, 255, 0.9)')\n .style('pointer-events', 'none')\n .text((d: PieArcDatum<PieChartData>) => `${((100 * d.data.value) / total).toFixed(1)}%`);\n\n // Center label (donut only)\n if (this.donut()) {\n g.append('text')\n .attr('class', 'center-label')\n .attr('text-anchor', 'middle')\n .attr('dy', '-0.1em')\n .style('font-size', '1.4rem')\n .style('font-weight', '600')\n .style('fill', 'var(--clr-color-neutral-900, #21333b)')\n .text(d3format('~s')(this.total()));\n\n g.append('text')\n .attr('class', 'center-sublabel')\n .attr('text-anchor', 'middle')\n .attr('dy', '1.2em')\n .style('font-size', '0.65rem')\n .style('fill', 'var(--clr-color-neutral-600, #666)')\n .style('text-transform', 'uppercase')\n .style('letter-spacing', '0.05em')\n .text('Total');\n }\n }\n\n private openTooltip(d: PieArcDatum<PieChartData>, width: number, height: number): void {\n const [cx, cy] = this.arcGen.centroid(d);\n this.tooltipPosition.set({\n x: width / 2 + cx,\n y: height / 2 + cy,\n });\n this.selectedItem.set(d.data);\n }\n}\n","<div class=\"chart-container\">\n <div class=\"chart-area\" #container (cngWindowResize)=\"updateChart()\" [class.pt-3]=\"alertMessageAndType()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (tooltipPosition()) {\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipOrientation]=\"tooltipOrientation()\"\n [squareColor]=\"selectedItem()?.color\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n valueClicked.emit({\n key: selectedItem().key,\n label: selectedItem().fullLabel || selectedItem().label,\n value: selectedItem().value,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n ({{ selectedItem().value }}) {{ selectedItem().fullLabel || selectedItem().label }}\n </ng-container>\n\n <p class=\"mt-0\">\n {{ (100 * selectedItem().value) / total() | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n </p>\n </cng-chart-tooltip>\n } @if (loading() || !hasData()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" [skeletonType]=\"loading() ? 'loading' : 'placeholder'\" />\n } @if (alertMessageAndType()) {\n <cng-chart-alert-overlay [alertType]=\"alertMessageAndType()[1]\" [alertMessage]=\"alertMessageAndType()[0]\" />\n }\n </div>\n\n @if (showLegend() && !loading() && legendItems().length) {\n <cng-chart-legend [items]=\"legendItems()\" />\n } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n [legendItems]=\"legendItems()\"\n />\n }\n</div>\n","/*\n * Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n OnChanges,\n output,\n signal,\n SimpleChanges,\n} from '@angular/core';\nimport { color as d3color, max as d3max, scaleLinear as d3scaleLinear, select as d3select, Selection } from 'd3';\nimport { toChartColor } from '../utils';\nimport { ChartBase } from '../shared/chart-base';\n\n// ─── Public types ─────────────────────────────────────────────────────────────\n\nexport interface FunnelChartSection {\n key: string;\n label: string;\n value: number;\n /** Hex value ('#009ADB') or CSS custom property ('--cds-global-color-blue-800'). */\n color?: string;\n /** Text color rendered inside this section. */\n textColor?: string;\n}\n\nexport interface FunnelChartData {\n key: string;\n label: string;\n fullLabel?: string;\n description?: string;\n value: number;\n /** Optional breakdown of the bar into named segments. Values should sum to `value`. */\n sections?: FunnelChartSection[];\n}\n\nexport interface FunnelValue {\n value: number;\n label: string;\n key: string;\n /** Key of the clicked section, or `undefined` when the whole bar was clicked. */\n section?: string;\n}\n\nexport interface FunnelChartLabels {\n total: string;\n all: string;\n}\n\n// ─── Internal types ───────────────────────────────────────────────────────────\n\ninterface FunnelDataPointSection {\n key: string;\n label: string;\n x: number;\n width: number;\n value: number;\n percentage: number;\n cssColor: string;\n hoverColor: string;\n textColor: string;\n}\n\ninterface FunnelDataPoint {\n key: string;\n label: string;\n fullLabel?: string;\n description?: string;\n value: number;\n y: number;\n width: number;\n percentage: number;\n delta?: number;\n deltaPercentage?: number;\n sections: FunnelDataPointSection[];\n}\n\ninterface SectionTooltipData {\n key: string;\n x?: number;\n y?: number;\n description?: string;\n}\n\ninterface CenteredDataPoint {\n key: string;\n label: string;\n fullLabel?: string;\n description?: string;\n value: number;\n sections?: FunnelChartSection[];\n y: number;\n width: number;\n percentage: number;\n delta?: number;\n deltaPercentage?: number;\n}\n\ninterface SpacerDataPoint {\n index: number;\n topWidth: number;\n bottomWidth: number;\n topY: number;\n bottomY: number;\n topX: number;\n bottomX: number;\n deltaPercentage: number;\n}\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\nconst DEFAULT_SECTION_COLORS = ['#009ADB', '#66D1FF', '#D9D9D9', '#A6A6A6'];\nconst DEFAULT_TEXT_COLORS = ['#eee', '#eee', '#555', '#eee'];\n\nconst DEFAULT_CHART_LABELS: FunnelChartLabels = {\n total: 'Total',\n all: 'All',\n};\n\n@Component({\n selector: 'clr-funnel-chart',\n templateUrl: './funnel-chart.component.html',\n styleUrls: ['./funnel-chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class FunnelChartComponent extends ChartBase<FunnelDataPoint> implements OnChanges {\n // ── Inputs ──────────────────────────────────────────────────────────────────\n public readonly data = input<FunnelChartData[]>([]);\n public readonly showExportButton = input(false);\n public readonly exportButtonTitle = input<string>('Export');\n public readonly exportFilename = input<string>('funnel-chart');\n\n /** Rendering mode. 'default' = horizontal bars with sections; 'centered' = centered trapezoid funnel. */\n public readonly orientation = input<'default' | 'centered'>('default');\n\n /** Width reserved on each side for labels (px). */\n public readonly textSize = input(200);\n /** Gap between funnel bars and their side-line labels (px). */\n public readonly lineTextPadding = input(8);\n /** Vertical gap between funnel bars – default mode only (px). */\n public readonly barGap = input(2);\n /** Vertical padding inside the side measurement lines (px). */\n public readonly sideLineVerticalPadding = input(4);\n\n // ── Centered-mode specific inputs ────────────────────────────────────────────\n /** Minimum length of the horizontal measurement lines on each side (px). Centered mode only. */\n public readonly minLineSize = input(30);\n /** Ratio of bar height to spacer height. Centered mode only. */\n public readonly barToSpacerRatio = input(2);\n /** Vertical padding inside the center divider lines (px). Centered mode only. */\n public readonly middleLineVerticalPadding = input(4);\n /** Fill color of the centered-mode bars. Accepts hex or CSS custom property. Centered mode only. */\n public readonly barColor = input<string>(DEFAULT_SECTION_COLORS[0]);\n /** Fill color of the trapezoid spacers. Accepts hex or CSS custom property. Centered mode only. */\n public readonly spacerColor = input<string>('#D9D9D9');\n\n /**\n * Override the chart labels shown in the tooltip (total / all rows).\n * Partial – any key not provided falls back to the English default.\n */\n public readonly chartLabels = input<Partial<FunnelChartLabels>>({});\n\n /**\n * Override section colors by section key.\n * Accepts hex values ('#009ADB') or CSS custom properties ('--cds-global-color-blue-800').\n * Per-section `color` in the data takes priority over this map; this map takes priority over\n * the built-in default palette.\n */\n public readonly sectionColors = input<Record<string, string>>({});\n\n // ── Outputs ─────────────────────────────────────────────────────────────────\n public readonly valueClicked = output<FunnelValue>();\n\n // ── Computed ─────────────────────────────────────────────────────────────────\n protected readonly resolvedChartLabels = computed<FunnelChartLabels>(() => ({\n ...DEFAULT_CHART_LABELS,\n ...this.chartLabels(),\n }));\n\n /** CSS-ready color for the centered-mode bar. */\n protected readonly centeredBarCssColor = computed(() => toChartColor(this.barColor()));\n\n /** CSS-ready spacer color. */\n protected readonly centeredSpacerCssColor = computed(() => toChartColor(this.spacerColor()));\n\n protected readonly total = computed(() => this.data()[0]?.value ?? 0);\n\n protected readonly hasData = computed(() => this.data().length > 0);\n\n // ── State ─────────────────────────────────────────────────────────────────────\n protected readonly selectedItemLabel = computed(\n () => this.selectedItem()?.fullLabel ?? this.selectedItem()?.label ?? ''\n );\n protected readonly selectedSpacerItem = signal<SpacerDataPoint | undefined>(undefined);\n protected readonly sectionTooltips = signal<SectionTooltipData[]>([]);\n\n private svg: Selection<SVGSVGElement, unknown, null, undefined>;\n\n // ── Lifecycle ────────────────────────────────────────────────────────────────\n\n public ngOnChanges(_changes: SimpleChanges): void {\n if (!this.svg) {\n return;\n }\n requestAnimationFrame(() => this.updateChart());\n }\n\n public override ngAfterViewInit(): void {\n this.svg = d3select(this.chartRef().nativeElement);\n super.ngAfterViewInit();\n }\n\n // ── Chart rendering ──────────────────────────────────────────────────────────\n protected updateChart(): void {\n if (!this.svg) {\n return;\n }\n this.svg.selectAll('*').remove();\n\n if (this.loading() || !this.hasData()) {\n return;\n }\n\n const { width: containerWidth, height: containerHeight } = this.getContainerDimensions();\n\n if (this.orientation() === 'centered') {\n this.renderCenteredChart(containerWidth, containerHeight);\n } else {\n const funnelWidth = this.getFunnelWidth(containerWidth);\n const barHeight = this.getBarHeight(containerHeight);\n const dataPoints = this.calculateDataPoints(funnelWidth, barHeight);\n this.renderRightSideText(dataPoints, containerWidth, barHeight);\n this.renderLeftSideText(dataPoints, barHeight);\n this.renderSideLines(dataPoints, containerWidth, funnelWidth, barHeight);\n this.renderFunnel(dataPoints, containerWidth, containerHeight, funnelWidth, barHeight);\n }\n }\n\n // ── Data calculation ─────────────────────────────────────────────────────────\n private calculateDataPoints(funnelWidth: number, barHeight: number): FunnelDataPoint[] {\n const maxValue = d3max(this.data(), d => d.value) ?? 1;\n const widthScale = d3scaleLinear().domain([0, maxValue]).range([0, funnelWidth]);\n const sectionColorOverrides = this.sectionColors();\n\n return this.data().map((d, i) => {\n let xOffset = 0;\n\n const sections: FunnelDataPointSection[] = (d.sections ?? []).map((s, si) => {\n const rawColor =\n s.color ?? sectionColorOverrides[s.key] ?? DEFAULT_SECTION_COLORS[si % DEFAULT_SECTION_COLORS.length];\n const cssColor = toChartColor(rawColor);\n const hoverColor = rawColor.startsWith('--')\n ? cssColor\n : d3color(rawColor)?.darker(0.5)?.formatHex() ?? cssColor;\n const textColor = s.textColor ?? DEFAULT_TEXT_COLORS[si % DEFAULT_TEXT_COLORS.length];\n const sWidth = widthScale(s.value);\n\n const sec: FunnelDataPointSection = {\n key: s.key,\n label: s.label,\n x: xOffset,\n width: sWidth,\n value: s.value,\n percentage: d.value ? this.round((s.value / d.value) * 100) : 0,\n cssColor,\n hoverColor,\n textColor,\n };\n xOffset += sWidth;\n return sec;\n });\n\n const point: FunnelDataPoint = {\n ...d,\n sections,\n y: i * (barHeight + this.barGap()),\n width: widthScale(d.value),\n percentage: this.total() ? this.round((d.value / this.total()) * 100) : 0,\n };\n\n if (i > 0) {\n const previousValue = this.data()[i - 1].value;\n point.delta = previousValue - d.value;\n point.deltaPercentage = previousValue === 0 ? 0 : this.round((point.delta / previousValue) * 100);\n }\n\n return point;\n });\n }\n\n // ── Rendering helpers ────────────────────────────────────────────────────────\n private renderRightSideText(dataPoints: FunnelDataPoint[], containerWidth: number, barHeight: number): void {\n const rightG = this.svg.append('g').attr('transform', `translate(${containerWidth - this.textSize()},0)`);\n\n dataPoints.forEach((d, i) => {\n if (i === 0) {\n return;\n }\n const prev = dataPoints[i - 1];\n const labelY = (prev.y + barHeight + d.y) / 2 + 4;\n rightG\n .append('text')\n .attr('x', 0)\n .attr('y', labelY)\n .attr('text-anchor', 'start')\n .style('font-size', '12px')\n .style('fill', 'var(--clr-color-neutral-600, #666)')\n .text(`-${this.round(d.deltaPercentage)}% (${d.delta})`);\n });\n }\n\n private renderLeftSideText(dataPoints: FunnelDataPoint[], barHeight: number): void {\n const leftG = this.svg.append('g');\n const ICON_SPACE = 20;\n const positions: SectionTooltipData[] = [];\n\n dataPoints.forEach(d => {\n const labelY = (d.y + barHeight + d.y) / 2 + 4;\n const iconSpacing = d.description ? ICON_SPACE : 0;\n\n const textLength = leftG\n .append('text')\n .attr('x', this.textSize() - iconSpacing)\n .attr('y', labelY - 8)\n .attr('text-anchor', 'end')\n .style('font-size', '13px')\n .style('font-weight', '600')\n .style('fill', 'var(--clr-color-neutral-900, #21333b)')\n .style('cursor', 'pointer')\n .text(d.label)\n .on('click', () => this.valueClicked.emit({ value: d.value, label: d.label, key: d.key }))\n .node()\n .getComputedTextLength();\n\n if (d.description) {\n positions.push({\n x: this.textSize() - iconSpacing + 5,\n y: labelY - 24,\n key: d.key,\n description: d.description,\n });\n }\n\n leftG\n .append('line')\n .attr('x1', this.textSize() - textLength - iconSpacing)\n .attr('y1', labelY - 5)\n .attr('x2', this.textSize() - iconSpacing)\n .attr('y2', labelY - 5)\n .attr('stroke', 'var(--clr-color-neutral-600, #666)')\n .attr('stroke-width', 2)\n .attr('stroke-dasharray', '2,2');\n\n leftG\n .append('text')\n .attr('x', this.textSize())\n .attr('y', labelY + 10)\n .attr('text-anchor', 'end')\n .style('font-size', '12px')\n .style('fill', 'var(--clr-color-neutral-600, #666)')\n .text(`${this.round(d.percentage)}% (${d.value})`);\n });\n\n this.sectionTooltips.set(positions);\n }\n\n private renderSideLines(\n dataPoints: FunnelDataPoint[],\n containerWidth: number,\n funnelWidth: number,\n barHeight: number\n ): void {\n const lineG = this.svg.append('g').attr('transform', `translate(${(containerWidth - funnelWidth) / 2},0)`);\n\n dataPoints.forEach(d => {\n const midY = d.y + barHeight / 2;\n\n lineG\n .append('line')\n .attr('x1', 0)\n .attr('y1', midY)\n .attr('x2', funnelWidth)\n .attr('y2', midY)\n .attr('stroke', '#D9D9D9')\n .attr('stroke-width', 1);\n\n this.renderSideLine(lineG, funnelWidth, d.y, barHeight);\n\n if (d.value === 0) {\n this.renderSideLine(lineG, 0, d.y, barHeight);\n }\n });\n }\n\n private renderSideLine(\n g: Selection<SVGGElement, unknown, null, undefined>,\n x: number,\n y: number,\n barHeight: number\n ): void {\n g.append('line')\n .attr('x1', x)\n .attr('y1', y + this.sideLineVerticalPadding())\n .attr('x2', x)\n .attr('y2', y + barHeight - this.sideLineVerticalPadding())\n .attr('stroke', '#D9D9D9')\n .attr('stroke-width', 1);\n }\n\n private renderFunnel(\n dataPoints: FunnelDataPoint[],\n containerWidth: number,\n containerHeight: number,\n funnelWidth: number,\n barHeight: number\n ): void {\n const funnelG = this.svg\n .attr('width', containerWidth)\n .attr('height', containerHeight)\n .append('g')\n .attr('transform', `translate(${(containerWidth - funnelWidth) / 2},0)`);\n\n // First pass: all rects (z-order: rects below texts)\n dataPoints.forEach(dp => {\n dp.sections.forEach(section => {\n funnelG\n .append('rect')\n .attr('x', section.x)\n .attr('y', dp.y)\n .attr('width', section.width)\n .attr('height', barHeight)\n .style('fill', section.cssColor)\n .style('cursor', 'pointer')\n .on('mouseover', e => {\n d3select(e.currentTarget).style('fill', section.hoverColor);\n })\n .on('mouseout', e => {\n d3select(e.currentTarget).style('fill', section.cssColor);\n })\n .on('click', (event: PointerEvent) => {\n this.handleSectionClick(event, dp, section.key);\n });\n });\n });\n\n // Second pass: texts on top\n dataPoints.forEach(dp => {\n dp.sections.forEach(section => {\n if (section.width > 40) {\n funnelG\n .append('text')\n .attr('x', section.x + section.width / 2)\n .attr('y', dp.y + barHeight / 2)\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .style('font-size', '13px')\n .style('font-weight', '600')\n .style('pointer-events', 'none')\n .style('fill', section.textColor)\n .text(`${section.percentage}%`);\n }\n });\n });\n }\n\n // ── Event handlers ────────────────────────────────────────────────────────────\n private handleSectionClick(event: PointerEvent, d: FunnelDataPoint, _sectionKey: string): void {\n event.stopPropagation();\n const target = event.currentTarget as SVGElement;\n const rect = target.getBoundingClientRect();\n const container = this.chartRef().nativeElement.getBoundingClientRect();\n this.tooltipPosition.set({\n x: rect.left - container.left + rect.width / 2,\n y: rect.bottom - container.top,\n });\n this.selectedItem.set(d);\n }\n\n public override resetTooltip(): void {\n if (this.selectedItem() || this.selectedSpacerItem() || this.tooltipPosition()) {\n this.selectedItem.set(undefined);\n this.selectedSpacerItem.set(undefined);\n this.tooltipPosition.set(undefined);\n }\n }\n\n /** Formats a percentage to 2 decimal places for template use. */\n protected pct(value: number, total: number): number {\n return this.round(total ? (value / total) * 100 : 0);\n }\n\n // ── Centered chart ────────────────────────────────────────────────────────────\n private renderCenteredChart(containerWidth: number, containerHeight: number): void {\n const maxFunnelWidth = this.getMaxFunnelWidth(containerWidth);\n const barHeight = this.getCenteredBarHeight(containerHeight);\n const spacerHeight = this.getCenteredSpacerHeight(containerHeight);\n\n const dataPoints = this.calculateCenteredDataPoints(maxFunnelWidth, barHeight, spacerHeight);\n const spacerPoints = this.calculateSpacerDataPoints(dataPoints, maxFunnelWidth, barHeight);\n\n this.renderCenteredLeftSideText(dataPoints, barHeight);\n this.renderCenteredLeftSideLines(dataPoints, maxFunnelWidth, barHeight);\n this.renderCenteredRightSideText(dataPoints, containerWidth, barHeight);\n this.renderCenteredRightSideLines(dataPoints, containerWidth, maxFunnelWidth, barHeight);\n this.renderCenteredMiddleLines(dataPoints, spacerPoints, containerWidth, barHeight);\n this.renderCenteredFunnel(\n dataPoints,\n spacerPoints,\n containerWidth,\n containerHeight,\n maxFunnelWidth,\n barHeight,\n spacerHeight\n );\n }\n\n private calculateCenteredDataPoints(\n maxFunnelWidth: number,\n barHeight: number,\n spacerHeight: number\n ): CenteredDataPoint[] {\n const total = this.data()[0]?.value ?? 1;\n const maxValue = d3max(this.data(), d => d.value) ?? 1;\n const scale = d3scaleLinear().domain([0, maxValue]).range([0, maxFunnelWidth]);\n\n return this.data().map((d, i) => {\n const point: CenteredDataPoint = {\n ...d,\n y: i * (barHeight + spacerHeight),\n width: scale(d.value),\n percentage: total ? this.round((d.value / total) * 100) : 0,\n };\n if (i > 0) {\n const prev = this.data()[i - 1].value;\n point.delta = prev - d.value;\n point.deltaPercentage = prev === 0 ? 0 : this.round((point.delta / prev) * 100);\n }\n return point;\n });\n }\n\n private calculateSpacerDataPoints(\n dataPoints: CenteredDataPoint[],\n maxFunnelWidth: number,\n barHeight: number\n ): SpacerDataPoint[] {\n const spacers: SpacerDataPoint[] = [];\n for (let i = 0; i < dataPoints.length - 1; i++) {\n const cur = dataPoints[i];\n const next = dataPoints[i + 1];\n spacers.push({\n index: i,\n topWidth: cur.width,\n bottomWidth: next.width,\n topY: cur.y + barHeight,\n bottomY: next.y,\n topX: (maxFunnelWidth - cur.width) / 2,\n bottomX: (maxFunnelWidth - next.width) / 2,\n deltaPercentage: next.deltaPercentage ?? 0,\n });\n }\n return spacers;\n }\n\n private renderCenteredLeftSideText(dataPoints: CenteredDataPoint[], barHeight: number): void {\n const g = this.svg.append('g').attr('transform', `translate(${this.textSize()},0)`);\n const ICON_SPACE = 20;\n const positions: SectionTooltipData[] = [];\n\n dataPoints.forEach(d => {\n const cy = d.y + barHeight / 2;\n const iconSpacing = d.description ? ICON_SPACE : 0;\n\n const textLen = g\n .append('text')\n .attr('x', -iconSpacing)\n .attr('y', cy - 8)\n .attr('text-anchor', 'end')\n .style('font-size', '13px')\n .style('font-weight', '600')\n .style('fill', 'var(--clr-color-neutral-900, #21333b)')\n .style('cursor', 'pointer')\n .text(d.label)\n .on('click', () => this.valueClicked.emit({ value: d.value, label: d.label, key: d.key }))\n .node()\n .getComputedTextLength();\n\n if (d.description) {\n positions.push({ key: d.key, x: this.textSize() - iconSpacing + 5, y: cy - 24, description: d.description });\n }\n\n g.append('line')\n .attr('x1', -textLen - iconSpacing)\n .attr('y1', cy - 5)\n .attr('x2', -iconSpacing)\n .attr('y2', cy - 5)\n .attr('stroke', 'var(--clr-color-neutral-600, #666)')\n .attr('stroke-width', 2)\n .attr('stroke-dasharray', '2,2');\n\n g.append('text')\n .attr('x', 0)\n .attr('y', cy + 10)\n .attr('text-anchor', 'end')\n .style('font-size', '12px')\n .style('fill', 'var(--clr-color-neutral-600, #666)')\n .text(`${this.round(d.percentage)}% (${d.value})`);\n });\n\n this.sectionTooltips.set(positions);\n }\n\n private renderCenteredLeftSideLines(\n dataPoints: CenteredDataPoint[],\n maxFunnelWidth: number,\n barHeight: number\n ): void {\n const g = this.svg.append('g').attr('transform', `translate(${this.textSize() + this.lineTextPadding()},0)`);\n dataPoints.forEach(d => {\n g.append('line')\n .attr('x1', 0)\n .attr('y1', d.y + barHeight / 2)\n .attr('x2', maxFunnelWidth / 2 + this.minLineSize())\n .attr('y2', d.y + barHeight / 2)\n .attr('stroke', '#D9D9D9')\n .attr('stroke-width', 1);\n });\n }\n\n private renderCenteredRightSideText(\n dataPoints: CenteredDataPoint[],\n containerWidth: number,\n barHeight: number\n ): void {\n const g = this.svg.append('g').attr('transform', `translate(${containerWidth - this.textSize()},0)`);\n dataPoints.forEach((d, i) => {\n if (i === 0) {\n return;\n }\n const prev = dataPoints[i - 1];\n const cy = (prev.y + barHeight + d.y) / 2 + 4;\n g.append('text')\n .attr('x', 0)\n .attr('y', cy)\n .attr('text-anchor', 'start')\n .style('font-size', '12px')\n .style('fill', 'var(--clr-color-neutral-600, #666)')\n .text(`-${this.round(d.deltaPercentage)}% (${d.delta})`);\n });\n }\n\n private renderCenteredRightSideLines(\n dataPoints: CenteredDataPoint[],\n containerWidth: number,\n maxFunnelWidth: number,\n barHeight: number\n ): void {\n const g = this.svg.append('g').attr('transform', `translate(${containerWidth / 2},0)`);\n dataPoints.forEach((d, i) => {\n if (i === 0) {\n return;\n }\n const prev = dataPoints[i - 1];\n const cy = (prev.y + barHeight + d.y) / 2;\n g.append('line')\n .attr('x1', 0)\n .attr('y1', cy)\n .attr('x2', maxFunnelWidth / 2 + this.minLineSize())\n .attr('y2', cy)\n .attr('stroke', '#D9D9D9')\n .attr('stroke-width', 1);\n });\n }\n\n private renderCenteredMiddleLines(\n dataPoints: CenteredDataPoint[],\n spacerPoints: SpacerDataPoint[],\n containerWidth: number,\n barHeight: number\n ): void {\n const vPad = this.middleLineVerticalPadding();\n const g = this.svg.append('g').attr('transform', `translate(${containerWidth / 2},0)`);\n\n g.selectAll('.bar-mid')\n .data(dataPoints)\n .enter()\n .append('line')\n .attr('x1', 0)\n .attr('y1', d => d.y + vPad)\n .attr('x2', 0)\n .attr('y2', d => d.y + barHeight - vPad)\n .attr('stroke', '#D9D9D9')\n .attr('stroke-width', 1);\n\n g.selectAll('.spacer-mid')\n .data(spacerPoints)\n .enter()\n .append('line')\n .attr('x1', 0)\n .attr('y1', d => d.topY + vPad)\n .attr('x2', 0)\n .attr('y2', d => d.bottomY - vPad)\n .attr('stroke', '#D9D9D9')\n .attr('stroke-width', 1);\n }\n\n private renderCenteredFunnel(\n dataPoints: CenteredDataPoint[],\n spacerPoints: SpacerDataPoint[],\n containerWidth: number,\n containerHeight: number,\n maxFunnelWidth: number,\n barHeight: number,\n spacerHeight: number\n ): void {\n const g = this.svg\n .attr('width', containerWidth)\n .attr('height', containerHeight)\n .append('g')\n .attr('transform', `translate(${(containerWidth - maxFunnelWidth) / 2},0)`);\n\n // ── Bars ──────────────────────────────────────────────────────────────────\n const rawBarColor = this.barColor();\n const cssBarColor = toChartColor(rawBarColor);\n const hoverBarColor = rawBarColor.startsWith('--')\n ? cssBarColor\n : d3color(rawBarColor)?.darker(0.5)?.formatHex() ?? cssBarColor;\n\n const bars = g\n .selectAll<SVGGElement, CenteredDataPoint>('.c-bar')\n .data(dataPoints)\n .enter()\n .append('g')\n .attr('class', 'c-bar');\n\n bars\n .append('rect')\n .attr('x', d => (maxFunnelWidth - d.width) / 2)\n .attr('y', d => d.y)\n .attr('width', d => d.width)\n .attr('height', barHeight)\n .style('fill', cssBarColor)\n .style('cursor', 'pointer')\n .on('mouseover', e => {\n d3select(e.currentTarget).style('fill', hoverBarColor);\n })\n .on('mouseout', e => {\n d3select(e.currentTarget).style('fill', cssBarColor);\n })\n .on('click', (event: PointerEvent, d: CenteredDataPoint) => {\n event.stopPropagation();\n const rect = (event.currentTarget as SVGElement).getBoundingClientRect();\n const cont = this.chartRef().nativeElement.getBoundingClientRect();\n this.tooltipPosition.set({ x: rect.left - cont.left + rect.width / 2, y: rect.top - cont.top });\n this.selectedSpacerItem.set(undefined);\n this.selectedItem.set(d as unknown as FunnelDataPoint);\n });\n\n bars\n .selectAll<SVGTextElement, CenteredDataPoint>('.c-bar-label')\n .data(dataPoints.filter(d => d.width > 40))\n .enter()\n .append('text')\n .attr('x', maxFunnelWidth / 2)\n .attr('y', d => d.y + barHeight / 2)\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .style('font-size', '13px')\n .style('font-weight', '600')\n .style('pointer-events', 'none')\n .style('fill', '#eee')\n .text(d => `${this.round(d.percentage)}%`);\n\n // ── Spacers ───────────────────────────────────────────────────────────────\n const rawSpacerColor = this.spacerColor();\n const cssSpacerColor = toChartColor(rawSpacerColor);\n const hoverSpacerColor = rawSpacerColor.startsWith('--')\n ? cssSpacerColor\n : d3color(rawSpacerColor)?.darker(0.2)?.formatHex() ?? cssSpacerColor;\n\n g.selectAll<SVGPolygonElement, SpacerDataPoint>('.c-spacer')\n .data(spacerPoints)\n .enter()\n .append('polygon')\n .attr('class', 'c-spacer')\n .attr(\n 'points',\n d =>\n `${d.topX},${d.topY} ${d.topX + d.topWidth},${d.topY} ${d.bottomX + d.bottomWidth},${d.bottomY} ${\n d.bottomX\n },${d.bottomY}`\n )\n .style('fill', cssSpacerColor)\n .style('cursor', 'pointer')\n .on('mouseover', e => {\n d3select(e.currentTarget).style('fill', hoverSpacerColor);\n })\n .on('mouseout', e => {\n d3select(e.currentTarget).style('fill', cssSpacerColor);\n })\n .on('click', (event: PointerEvent, d: SpacerDataPoint) => {\n event.stopPropagation();\n const rect = (event.currentTarget as SVGElement).getBoundingClientRect();\n const cont = this.chartRef().nativeElement.getBoundingClientRect();\n this.tooltipPosition.set({ x: rect.left - cont.left + rect.width / 2, y: rect.top - cont.top });\n this.selectedItem.set(undefined);\n this.selectedSpacerItem.set(d);\n });\n\n g.selectAll<SVGTextElement, SpacerDataPoint>('.c-spacer-label')\n .data(spacerPoints.filter(d => d.bottomWidth > 40))\n .enter()\n .append('text')\n .attr('x', maxFunnelWidth / 2)\n .attr('y', d => d.topY + spacerHeight / 2)\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .style('font-size', '13px')\n .style('font-weight', '600')\n .style('pointer-events', 'none')\n .style('fill', '#333')\n .text(d => `-${this.round(d.deltaPercentage)}%`);\n }\n\n // ── Helpers ───────────────────────────────────────────────────────────────────\n private getMaxFunnelWidth(containerWidth: number): number {\n return containerWidth - this.textSize() * 2 - this.minLineSize() * 2 - this.lineTextPadding() * 2;\n }\n\n private getCenteredFractionHeight(containerHeight: number): number {\n return containerHeight / (this.data().length * (this.barToSpacerRatio() + 1) - 1);\n }\n\n private getCenteredBarHeight(containerHeight: number): number {\n return this.getCenteredFractionHeight(containerHeight) * this.barToSpacerRatio();\n }\n\n private getCenteredSpacerHeight(containerHeight: number): number {\n return this.getCenteredFractionHeight(containerHeight);\n }\n\n private getFunnelWidth(containerWidth: number): number {\n return containerWidth - this.textSize() * 2 - this.lineTextPadding() * 2;\n }\n\n private getBarHeight(containerHeight: number): number {\n const n = this.data().length;\n if (n === 0) {\n return 0;\n }\n return (containerHeight - (n - 1) * this.barGap()) / n;\n }\n\n private round(value: number, decimals = 2): number {\n const factor = 10 ** decimals;\n return Math.round(factor * value) / factor;\n }\n}\n","<div class=\"funnel-container\" #container (cngWindowResize)=\"updateChart()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (!loading()) { @for (pos of sectionTooltips(); track pos.key) {\n <clr-signpost [style.left.px]=\"pos.x\" [style.top.px]=\"pos.y\">\n <cds-icon clrSignpostTrigger shape=\"info-circle\" size=\"18\" />\n <clr-signpost-content clrPosition=\"bottom-left\">\n <p class=\"mt-0\">{{ pos.description }}</p>\n </clr-signpost-content>\n </clr-signpost>\n } } @if (loading()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" skeletonType=\"loading\" />\n } @if (tooltipPosition()) { @if (orientation() === 'centered') {\n\n <!-- ── Centered mode tooltip ─────────────────────────────────────────── -->\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n tooltipOrientation=\"bottom\"\n [squareColor]=\"selectedSpacerItem() ? centeredSpacerCssColor() : centeredBarCssColor()\"\n [tooltipClickable]=\"!selectedSpacerItem()\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n selectedItem() && valueClicked.emit({\n value: selectedItem().value,\n label: selectedItem().label,\n key: selectedItem().key,\n section: undefined,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n @if (selectedSpacerItem()) {\n {{ data()[selectedSpacerItem().index].label }} → {{ data()[selectedSpacerItem().index + 1].label }} } @else { ({{\n selectedItem().value\n }}) {{ selectedItem().label }}\n }\n </ng-container>\n\n @if (selectedSpacerItem()) {\n <p class=\"mt-0\">\n <strong\n >{{ data()[selectedSpacerItem().index].value }} → {{ data()[selectedSpacerItem().index + 1].value }}</strong\n >\n </p>\n @for (section of (data()[selectedSpacerItem().index].sections ?? []); track section.key) { @let drillable =\n section.value > 0;\n <p class=\"tooltip-row mt-0 mt-0-5 d-flex\">\n <strong>{{ section.label }}:&nbsp;</strong>\n <span\n class=\"row-right\"\n [class.has-more-info]=\"drillable\"\n (click)=\"\n drillable && valueClicked.emit({\n value: section.value,\n label: data()[selectedSpacerItem().index].label + ': ' + section.label,\n key: data()[selectedSpacerItem().index].key,\n section: section.key,\n })\n \"\n >{{ section.value }}</span\n >\n &nbsp;({{ pct(section.value, data()[selectedSpacerItem().index].value) }}%)\n </p>\n } } @else {\n <p class=\"mt-0\">{{ pct(selectedItem().value, total()) }}% {{ resolvedChartLabels().all }}</p>\n }\n </cng-chart-tooltip>\n\n } @else {\n\n <!-- ── Default mode tooltip ──────────────────────────────────────────── -->\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n tooltipOrientation=\"bottom\"\n [squareColor]=\"undefined\"\n [tooltipClickable]=\"false\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n >\n <ng-container ngProjectAs=\"cng-title\">{{ selectedItemLabel() }}</ng-container>\n @for (section of selectedItem().sections; track section.key) { @let drillable = section.value > 0;\n <p class=\"tooltip-row mt-0 mt-0-5 d-flex\">\n <span>\n <div class=\"color-square mr-0-5\" [style.background-color]=\"section.cssColor\"></div>\n </span>\n <strong>{{ section.label }}:&nbsp;</strong>\n <span\n class=\"row-right\"\n [class.has-more-info]=\"drillable\"\n (click)=\"\n drillable && valueClicked.emit({\n value: section.value,\n label: selectedItemLabel() + ': ' + section.label,\n key: selectedItem().key,\n section: section.key,\n })\n \"\n >{{ section.value }}</span\n >\n &nbsp;({{ section.percentage }}%)\n </p>\n }\n\n <p class=\"tooltip-row mt-0-5\">\n <strong>{{ resolvedChartLabels().total }}:&nbsp;</strong>\n <span\n class=\"has-more-info\"\n (click)=\"\n valueClicked.emit({\n value: selectedItem().value,\n label: selectedItemLabel(),\n key: selectedItem().key,\n section: undefined\n })\n \"\n >{{ selectedItem().value }}</span\n >\n </p>\n\n <ng-container ngProjectAs=\"cng-footer\">\n <p class=\"tooltip-row mt-0\">\n <strong>{{ resolvedChartLabels().all }}:&nbsp;</strong>\n <span class=\"row-right\">{{ total() }}</span>\n </p>\n </ng-container>\n </cng-chart-tooltip>\n\n } } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n class=\"funnel-export-btn\"\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n />\n }\n</div>\n","import { Directive, ElementRef, inject, OnDestroy, OnInit } from '@angular/core';\nimport { ClrSignpostContent } from '@clr/angular';\n\ntype SignpostPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n\nconst PREFERRED_ORDER: SignpostPosition[] = ['top-right', 'top-left', 'bottom-right', 'bottom-left'];\n\n@Directive({\n selector: 'clr-signpost-content[autoPosition]',\n standalone: true,\n})\nexport class AutoPositionDirective implements OnInit, OnDestroy {\n private readonly signpostContent = inject(ClrSignpostContent, { optional: true });\n private readonly elementRef = inject(ElementRef);\n private resizeObserver?: ResizeObserver;\n private trigger?: Element;\n\n public ngOnInit(): void {\n const signpost = this.elementRef.nativeElement.closest('clr-signpost');\n this.trigger = signpost?.querySelector('[clrSignpostTrigger]');\n\n if (this.trigger) {\n this.trigger.addEventListener('mousedown', this.handleMouseDown);\n }\n\n this.resizeObserver = new ResizeObserver(() => {\n if (!this.elementRef.nativeElement.classList.contains('is-off-screen')) {\n this.updatePosition();\n }\n });\n this.resizeObserver.observe(document.body);\n }\n\n private readonly handleMouseDown = (): void => {\n // Only calculate when signpost is closed (about to open)\n if (this.elementRef.nativeElement.classList.contains('is-off-screen')) {\n this.updatePosition();\n }\n };\n\n private updatePosition(): void {\n if (!this.signpostContent || !this.trigger) {\n return;\n }\n\n const triggerRect = this.trigger.getBoundingClientRect();\n this.signpostContent.position = this.getBestPosition(triggerRect);\n }\n\n private getBestPosition(triggerRect: DOMRect): SignpostPosition {\n const contentWidth = 300;\n const contentHeight = 200;\n const buffer = 50;\n const contentHeaderHeight = document.querySelector('.content-header')?.getBoundingClientRect().height ?? 0;\n const appHeaderHight = document.querySelector('.header')?.getBoundingClientRect().height ?? 0;\n const headerHeight = contentHeaderHeight + appHeaderHight;\n\n // Find first position with enough space\n for (const pos of PREFERRED_ORDER) {\n if (this.hasSpace(triggerRect, pos, contentWidth, contentHeight, headerHeight, buffer)) {\n return pos;\n }\n }\n\n return PREFERRED_ORDER[0]; // Fallback to first preference\n }\n\n private hasSpace(\n rect: DOMRect,\n position: SignpostPosition,\n width: number,\n height: number,\n headerHeight: number,\n buffer: number\n ): boolean {\n const [vertical, horizontal] = position.split('-') as ['top' | 'bottom', 'left' | 'right'];\n\n const verticalSpace =\n vertical === 'top'\n ? rect.top - headerHeight - height - buffer\n : window.innerHeight - rect.bottom - height - buffer;\n\n const horizontalSpace =\n horizontal === 'left' ? rect.left - width - buffer : window.innerWidth - rect.right - width - buffer;\n\n return Math.min(verticalSpace, horizontalSpace) > 0;\n }\n\n public ngOnDestroy(): void {\n if (this.trigger) {\n this.trigger.removeEventListener('mousedown', this.handleMouseDown);\n }\n this.resizeObserver?.disconnect();\n }\n}\n","import { AfterContentInit, contentChild, Directive } from '@angular/core';\nimport { ClrEndDateInput, ClrStartDateInput } from '@clr/angular';\n\n@Directive({\n selector: 'clr-date-range-container[cngTenantFullDateRange]',\n standalone: true,\n})\nexport class TenantFullDateRangeDirective implements AfterContentInit {\n private readonly start = contentChild(ClrStartDateInput);\n private readonly end = contentChild(ClrEndDateInput);\n\n public ngAfterContentInit(): void {\n if (this.start()) {\n const originalStartEmit = this.start().dateChange.emit.bind(this.start().dateChange);\n this.start().dateChange.emit = date => {\n originalStartEmit(this.toTenantDateTime(date, '00:00'));\n };\n }\n\n if (this.end()) {\n const originalEndEmit = this.end().dateChange.emit.bind(this.end().dateChange);\n this.end().dateChange.emit = date => {\n originalEndEmit(this.toTenantDateTime(date, '23:59'));\n };\n }\n }\n\n private toTenantDateTime(date: Date, time: string): Date {\n if (!date) {\n return date;\n }\n const [hours, minutes] = time.split(':').map(Number);\n const result = new Date(date);\n result.setHours(hours, minutes, 0, 0);\n return result;\n }\n}\n","/*\n * Copyright (c) 2026 Porsche Informatik. All Rights Reserved.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule, DecimalPipe } from '@angular/common';\nimport { ClrAlertModule, ClrIconModule, ClrSignpostModule } from '@clr/angular';\n\nimport { AreaChartComponent } from './area-chart/area-chart.component';\nimport { BarChartComponent } from './bar-chart/bar-chart.component';\nimport { ComboChartComponent } from './combo-chart/combo-chart.component';\nimport { FunnelChartComponent } from './funnel-chart/funnel-chart.component';\nimport { LineChartComponent } from './line-chart/line-chart.component';\nimport { PieChartComponent } from './pie-chart/pie-chart.component';\n\nimport { ChartAlertOverlayComponent } from './chart-alert-overlay/chart-alert-overlay.component';\nimport { ChartExportButtonComponent } from './chart-export/chart-export-button.component';\nimport { ChartLegendComponent } from './chart-legend/chart-legend.component';\nimport { ChartSkeletonComponent } from './shared/chart-skeleton.component';\nimport { ChartTooltipComponent } from './chart-tooltip/chart-tooltip.component';\nimport { OutsideClickDirective, WindowResizeDirective } from './directives';\n\nconst CLR_CHARTS_DECLARATIONS = [\n AreaChartComponent,\n BarChartComponent,\n ComboChartComponent,\n FunnelChartComponent,\n LineChartComponent,\n PieChartComponent,\n];\n\n@NgModule({\n imports: [\n CommonModule,\n DecimalPipe,\n ClrAlertModule,\n ClrIconModule,\n ClrSignpostModule,\n // standalone helpers consumed by the non-standalone chart components\n ChartAlertOverlayComponent,\n ChartExportButtonComponent,\n ChartLegendComponent,\n ChartSkeletonComponent,\n ChartTooltipComponent,\n OutsideClickDirective,\n WindowResizeDirective,\n ],\n declarations: [...CLR_CHARTS_DECLARATIONS],\n exports: [...CLR_CHARTS_DECLARATIONS],\n})\nexport class ClrChartsModule {}\n","/*\n * Copyright (c) 2026 Porsche Informatik. All Rights Reserved.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './shared/xy-chart.types';\nexport * from './bar-chart/bar-chart.component';\nexport * from './line-chart/line-chart.component';\nexport * from './area-chart/area-chart.component';\nexport * from './combo-chart/combo-chart.component';\nexport * from './pie-chart/pie-chart.component';\nexport * from './funnel-chart/funnel-chart.component';\nexport * from './charts.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["d3select","d3scaleBand","d3scaleLinear","d3max","d3axisBottom","d3axisLeft","d3format","d3group","d3sum","i1.ChartAlertOverlayComponent","i2.ChartExportButtonComponent","i3.ChartLegendComponent","i4.ChartSkeletonComponent","i5.ChartTooltipComponent","i6.OutsideClickDirective","i7.WindowResizeDirective","d3scalePoint","d3min","d3line","d3area","d3axisRight","d3arc","d3pie","d3color","i3.ChartSkeletonComponent","i4.ChartTooltipComponent","i5.OutsideClickDirective","i6.WindowResizeDirective"],"mappings":"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"}
1
+ {"version":3,"file":"porscheinformatik-clr-addons-charts.mjs","sources":["../../../src/clr-addons/charts/shared/xy-chart.types.ts","../../../src/clr-addons/charts/constants/alert-message-constants.ts","../../../src/clr-addons/charts/utils/color.utils.ts","../../../src/clr-addons/charts/utils/text.utils.ts","../../../src/clr-addons/charts/utils/utils.ts","../../../src/clr-addons/charts/shared/chart-base.ts","../../../src/clr-addons/charts/chart-alert-overlay/chart-alert-overlay.component.ts","../../../src/clr-addons/charts/chart-export/chart-export.service.ts","../../../src/clr-addons/charts/chart-export/chart-export-button.component.ts","../../../src/clr-addons/charts/chart-legend/chart-legend.component.ts","../../../src/clr-addons/charts/shared/chart-skeleton.component.ts","../../../src/clr-addons/charts/shared/chart-skeleton.component.html","../../../src/clr-addons/charts/chart-tooltip/chart-tooltip.component.ts","../../../src/clr-addons/charts/chart-tooltip/chart-tooltip.component.html","../../../src/clr-addons/charts/directives/outside-click.directive.ts","../../../src/clr-addons/charts/directives/screen-state.service.ts","../../../src/clr-addons/charts/directives/window-resize.directive.ts","../../../src/clr-addons/charts/bar-chart/bar-chart.component.ts","../../../src/clr-addons/charts/bar-chart/bar-chart.component.html","../../../src/clr-addons/charts/shared/d3-dots.ts","../../../src/clr-addons/charts/shared/d3-chart-axes.ts","../../../src/clr-addons/charts/line-chart/line-chart.component.ts","../../../src/clr-addons/charts/line-chart/line-chart.component.html","../../../src/clr-addons/charts/area-chart/area-chart.component.ts","../../../src/clr-addons/charts/area-chart/area-chart.component.html","../../../src/clr-addons/charts/combo-chart/combo-chart.component.ts","../../../src/clr-addons/charts/combo-chart/combo-chart.component.html","../../../src/clr-addons/charts/pie-chart/pie-chart.component.ts","../../../src/clr-addons/charts/pie-chart/pie-chart.component.html","../../../src/clr-addons/charts/funnel-chart/funnel-chart.component.ts","../../../src/clr-addons/charts/funnel-chart/funnel-chart.component.html","../../../src/clr-addons/charts/directives/auto-position.directive.ts","../../../src/clr-addons/charts/directives/tenant-full-date-range.directive.ts","../../../src/clr-addons/charts/charts.module.ts","../../../src/clr-addons/charts/index.ts","../../../src/clr-addons/charts/porscheinformatik-clr-addons-charts.ts"],"sourcesContent":["/*\n * Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\n/**\n * A single data point on an XY chart (line, area).\n * `x` is used as the category key; `xLabel` is the optional display label for the axis tick.\n */\nexport interface XYChartPoint {\n /** Unique key used as the X-axis category. */\n x: string;\n /** Optional display label for the X-axis tick (defaults to `x`). */\n xLabel?: string;\n /** Y value. */\n value: number;\n}\n\n/**\n * A named data series for an XY chart.\n */\nexport interface XYChartSeries {\n /** Unique identifier. */\n key: string;\n /** Display name shown in the legend and tooltip. */\n label: string;\n /** Line / area / dot colour. Accepts hex or CSS custom property. */\n color: string;\n /** Ordered data points for this series. */\n data: XYChartPoint[];\n}\n\n/**\n * Emitted when the user clicks a data point on an XY chart.\n */\nexport interface XYChartValue {\n seriesKey: string;\n seriesLabel: string;\n x: string;\n xLabel?: string;\n value: number;\n}\n","export const TOO_MANY_ITEMS_MESSAGE = 'too many items';\nexport const TOO_MANY_ITEMS_GROUPED_MESSAGE = 'too many items';\nexport const TOO_MANY_ITEMS_ALERT_TYPE = 'warning';\n\nexport const NO_ITEMS_MESSAGE = 'no items';\nexport const NO_ITEMS_ALERT_TYPE = 'info';\n","/**\n * Converts a chart color value to a CSS-compatible string.\n *\n * Supports:\n * - Hex values: '#e57200' → returned as-is\n * - CSS custom props: '--cds-global-color-lavender-1000' → wrapped in var(...)\n * - Any other string: 'rgb(...)' / 'hsl(...)' → returned as-is\n */\nexport function toChartColor(color: string | undefined): string {\n if (!color) {\n return '';\n }\n return color.startsWith('--') ? `var(${color})` : color;\n}\n","export class TextRenderer {\n private canvas: HTMLCanvasElement;\n private context: CanvasRenderingContext2D;\n private cachedFont = '';\n private cachedEllipsisWidth = 0;\n\n public constructor() {\n this.canvas = document.createElement('canvas');\n const ctx = this.canvas.getContext('2d');\n if (!ctx) {\n throw new Error('2D context error');\n }\n this.context = ctx;\n }\n\n public render(\n text: string,\n availableHeight: number,\n availableWidth: number,\n fontSize: string = '12px',\n fontFamily: string = 'Arial'\n ): string {\n const font = `${fontSize} ${fontFamily}`;\n if (this.cachedFont !== font) {\n this.context.font = font;\n this.cachedEllipsisWidth = this.context.measureText('...').width;\n this.cachedFont = font;\n } else {\n this.context.font = font;\n }\n\n const textMetrics = this.context.measureText(text);\n const textWidth = textMetrics.width;\n const textHeight = Math.abs(textMetrics.actualBoundingBoxAscent) + Math.abs(textMetrics.actualBoundingBoxDescent);\n\n if (textWidth <= availableWidth && textHeight <= availableHeight) {\n return text;\n }\n\n let remainingWidth = availableWidth - this.cachedEllipsisWidth;\n let truncatedText = '';\n\n for (const char of text) {\n const charWidth = this.context.measureText(char).width;\n if (remainingWidth - charWidth >= 0) {\n truncatedText += char;\n remainingWidth -= charWidth;\n } else {\n break;\n }\n }\n\n truncatedText = truncatedText.trim();\n\n if (truncatedText.length === 0) {\n return '';\n }\n\n return truncatedText + '...';\n }\n}\n","import { format } from 'd3';\n\nexport const percentage = (value: number, total: number): number => {\n if (total <= 0) {\n return 0;\n }\n return Math.min(100, Math.max(0, Math.round((value / total) * 100)));\n};\n\nexport const d3percentFormat = (\n f =>\n (d: number): string =>\n `${f(d)}%`\n)(format('.1f'));\n","/*\n * Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\nimport { AfterViewInit, computed, Directive, ElementRef, input, signal, viewChild } from '@angular/core';\n\n/**\n * Abstract base class shared by all chart components.\n * ...\n */\n@Directive()\nexport abstract class ChartBase<TSelected = unknown> implements AfterViewInit {\n // ── Common Input ───────────────────────────────────────────────────────────\n /** Whether the chart is in loading state (shows skeleton). */\n readonly loading = input(false);\n\n // ── View references ────────────────────────────────────────────────────────\n /** Reference to the `<svg #chart>` element in the component template. */\n protected readonly chartRef = viewChild<ElementRef>('chart');\n /** Reference to the `<div #container>` host element in the component template. */\n protected readonly containerRef = viewChild<ElementRef>('container');\n /** Exposes the raw SVG element for the chart-export button. */\n readonly svgElement = computed(() => this.chartRef()?.nativeElement as SVGSVGElement | undefined);\n\n // ── Tooltip State ──────────────────────────────────────────────────────────\n protected readonly selectedItem = signal<TSelected | undefined>(undefined);\n protected readonly tooltipPosition = signal<{ x: number; y: number } | undefined>(undefined);\n\n // ── Lifecycle ──────────────────────────────────────────────────────────────\n /** Schedules the first render after the view is ready. */\n ngAfterViewInit(): void {\n requestAnimationFrame(() => this.updateChart());\n }\n\n // ── Abstract ───────────────────────────────────────────────────────────────\n /** Each chart implements its own D3 rendering logic here. */\n protected abstract updateChart(): void;\n\n // ── Common Implementations ─────────────────────────────────────────────────\n /** Returns the pixel dimensions of the container div. */\n protected getContainerDimensions(): { width: number; height: number } {\n const el: HTMLElement = this.containerRef().nativeElement;\n return { width: el.clientWidth, height: el.clientHeight };\n }\n\n /**\n * Clears the active tooltip. Override in subclasses that have additional\n * selection state\n */\n public resetTooltip(): void {\n if (this.selectedItem() || this.tooltipPosition()) {\n this.selectedItem.set(undefined);\n this.tooltipPosition.set(undefined);\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { ClrAlertModule } from '@clr/angular';\n\n@Component({\n selector: 'cng-chart-alert-overlay',\n template: `\n <clr-alert [clrAlertSizeSmall]=\"true\" [clrAlertClosable]=\"false\" [clrAlertType]=\"alertType()\">\n <clr-alert-item>\n <span class=\"alert-text\">\n {{ alertMessage() }}\n </span>\n </clr-alert-item>\n </clr-alert>\n <div class=\"overlay\"></div>\n `,\n styles: `\n :host {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n z-index: 1;\n\n clr-alert {\n pointer-events: auto;\n\n ::ng-deep .alert {\n margin-bottom: 0;\n }\n }\n\n .overlay {\n height: 2rem;\n background: linear-gradient(to bottom, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0));\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ClrAlertModule],\n})\nexport class ChartAlertOverlayComponent {\n public readonly alertMessage = input.required<string>();\n public readonly alertType = input<string>('info');\n}\n","import { Injectable } from '@angular/core';\nimport { ChartLegendItem } from '../chart-legend/chart-legend.component';\n\n// ── Legend layout constants (mirror chart-legend.component styles) ─────────────\nconst LEGEND_PADDING_TOP = 12;\nconst LEGEND_PADDING_H = 4;\nconst LEGEND_ITEM_HEIGHT = 22;\nconst LEGEND_COLOR_SIZE = 10;\nconst LEGEND_FONT_SIZE = 11;\nconst LEGEND_TEXT_COLOR = '#666666';\n/** Approximate pixel width reserved per legend item (color square + gap + label). */\nconst LEGEND_APPROX_ITEM_WIDTH = 130;\n\n@Injectable({ providedIn: 'root' })\nexport class ChartExportService {\n exportSvg(svgEl: SVGSVGElement, filename: string, legendItems?: ChartLegendItem[]): void {\n const root = this.buildExportSvg(svgEl, legendItems);\n const svgStr = new XMLSerializer().serializeToString(root);\n this.download(new Blob([svgStr], { type: 'image/svg+xml;charset=utf-8' }), `${filename}.svg`);\n }\n\n exportPng(svgEl: SVGSVGElement, filename: string, legendItems?: ChartLegendItem[]): void {\n const root = this.buildExportSvg(svgEl, legendItems);\n this.toCanvas(root).then(canvas => canvas.toBlob(blob => this.download(blob, `${filename}.png`), 'image/png'));\n }\n\n // ── Core builder ──────────────────────────────────────────────────────────────\n\n private buildExportSvg(svgEl: SVGSVGElement, legendItems?: ChartLegendItem[]): SVGSVGElement {\n const w = svgEl.clientWidth || Number(svgEl.getAttribute('width')) || 800;\n const chartH = svgEl.clientHeight || Number(svgEl.getAttribute('height')) || 600;\n const fontFamily = this.getDocumentFontFamily();\n\n const itemsToRender = legendItems?.length ? legendItems : [];\n const legendH = itemsToRender.length\n ? LEGEND_PADDING_TOP +\n Math.ceil(itemsToRender.length / this.legendItemsPerRow(w, itemsToRender)) * LEGEND_ITEM_HEIGHT\n : 0;\n\n const totalH = chartH + legendH;\n const ns = 'http://www.w3.org/2000/svg';\n\n // Root SVG\n const root = document.createElementNS(ns, 'svg') as SVGSVGElement;\n root.setAttribute('xmlns', ns);\n root.setAttribute('width', String(w));\n root.setAttribute('height', String(totalH));\n root.style.background = '#ffffff';\n if (fontFamily) {\n root.setAttribute('font-family', fontFamily);\n }\n\n // Chart contents – clone, resolve CSS vars, inline fonts, then wrap in <g>\n const chartClone = svgEl.cloneNode(true) as SVGSVGElement;\n chartClone.querySelectorAll('.domain').forEach(el => el.remove());\n this.resolveStyleVariables(chartClone);\n this.inlineFontFamily(chartClone, fontFamily);\n const chartGroup = document.createElementNS(ns, 'g');\n Array.from(chartClone.childNodes).forEach(n => chartGroup.appendChild(n.cloneNode(true)));\n root.appendChild(chartGroup);\n\n // Legend group below the chart\n if (itemsToRender.length) {\n root.appendChild(this.buildLegendGroup(itemsToRender, w, chartH, fontFamily));\n }\n\n return root;\n }\n\n // ── Legend SVG builder ────────────────────────────────────────────────────────\n\n private buildLegendGroup(items: ChartLegendItem[], width: number, offsetY: number, fontFamily: string): SVGGElement {\n const ns = 'http://www.w3.org/2000/svg';\n const g = document.createElementNS(ns, 'g');\n g.setAttribute('transform', `translate(0,${offsetY + LEGEND_PADDING_TOP})`);\n\n const perRow = this.legendItemsPerRow(width, items);\n const colWidth = Math.floor((width - 2 * LEGEND_PADDING_H) / perRow);\n let col = 0;\n let row = 0;\n\n for (const item of items) {\n const x = LEGEND_PADDING_H + col * colWidth;\n const y = row * LEGEND_ITEM_HEIGHT;\n\n // Color square\n const rect = document.createElementNS(ns, 'rect');\n rect.setAttribute('x', String(x));\n rect.setAttribute('y', String(y));\n rect.setAttribute('width', String(LEGEND_COLOR_SIZE));\n rect.setAttribute('height', String(LEGEND_COLOR_SIZE));\n rect.setAttribute('rx', '2');\n rect.setAttribute('ry', '2');\n rect.setAttribute('fill', this.resolveColor(item.color));\n g.appendChild(rect);\n\n // Label text – vertically centred with the square\n const text = document.createElementNS(ns, 'text');\n text.setAttribute('x', String(x + LEGEND_COLOR_SIZE + 5));\n text.setAttribute('y', String(y + LEGEND_COLOR_SIZE - 1));\n text.setAttribute('font-size', String(LEGEND_FONT_SIZE));\n text.setAttribute('fill', LEGEND_TEXT_COLOR);\n if (fontFamily) {\n text.setAttribute('font-family', fontFamily);\n }\n text.textContent = item.label;\n g.appendChild(text);\n\n col++;\n if (col >= perRow) {\n col = 0;\n row++;\n }\n }\n\n return g;\n }\n\n private legendItemsPerRow(width: number, items: ChartLegendItem[]): number {\n const usable = width - 2 * LEGEND_PADDING_H;\n const perRow = Math.max(1, Math.floor(usable / LEGEND_APPROX_ITEM_WIDTH));\n return Math.min(perRow, items.length);\n }\n\n // ── Canvas / PNG ──────────────────────────────────────────────────────────────\n\n private toCanvas(svgEl: SVGSVGElement): Promise<HTMLCanvasElement> {\n return new Promise(resolve => {\n const w = Number(svgEl.getAttribute('width')) || 800;\n const h = Number(svgEl.getAttribute('height')) || 600;\n const url = URL.createObjectURL(\n new Blob([new XMLSerializer().serializeToString(svgEl)], { type: 'image/svg+xml;charset=utf-8' })\n );\n const img = new Image();\n img.onload = () => {\n const scale = 2; // 2× for retina quality\n const canvas = document.createElement('canvas');\n canvas.width = w * scale;\n canvas.height = h * scale;\n const ctx = canvas.getContext('2d');\n ctx.scale(scale, scale);\n ctx.fillStyle = '#ffffff';\n ctx.fillRect(0, 0, w, h);\n ctx.drawImage(img, 0, 0, w, h);\n URL.revokeObjectURL(url);\n resolve(canvas);\n };\n img.src = url;\n });\n }\n\n // ── CSS variable resolution ───────────────────────────────────────────────────\n\n /** Recursively resolves `var(--x)` references in inline style and presentation attributes. */\n private resolveStyleVariables(el: Element): void {\n const style = el.getAttribute('style');\n if (style) {\n el.setAttribute('style', this.resolveVarsInString(style));\n }\n for (const attr of ['fill', 'stroke', 'color', 'background-color']) {\n const val = el.getAttribute(attr);\n if (val) {\n el.setAttribute(attr, this.resolveVarsInString(val));\n }\n }\n // Also resolve CSS var() in inline style properties directly set via D3 .style()\n const inlineStyle = (el as HTMLElement).style;\n if (inlineStyle) {\n const fill = inlineStyle.fill;\n if (fill?.includes('var(')) {\n inlineStyle.fill = this.resolveVarsInString(fill);\n }\n const stroke = inlineStyle.stroke;\n if (stroke?.includes('var(')) {\n inlineStyle.stroke = this.resolveVarsInString(stroke);\n }\n }\n Array.from(el.children).forEach(child => this.resolveStyleVariables(child));\n }\n\n /** Inlines `font-family` on every `<text>` / `<tspan>` element that doesn't already have one. */\n private inlineFontFamily(el: Element, fontFamily: string): void {\n if (!fontFamily) {\n return;\n }\n if (el.tagName === 'text' || el.tagName === 'tspan') {\n if (!el.getAttribute('font-family')) {\n el.setAttribute('font-family', fontFamily);\n }\n }\n Array.from(el.children).forEach(child => this.inlineFontFamily(child, fontFamily));\n }\n\n private resolveVarsInString(value: string): string {\n return value.replace(/var\\(\\s*(--[^,)]+?)\\s*(?:,\\s*([^)]+?))?\\s*\\)/g, (_match, varName, fallback) => {\n const computed = getComputedStyle(document.documentElement).getPropertyValue(varName.trim()).trim();\n return computed || fallback?.trim() || '';\n });\n }\n\n private resolveColor(color: string): string {\n if (!color) {\n return '#cccccc';\n }\n if (color.startsWith('--')) {\n const computed = getComputedStyle(document.documentElement).getPropertyValue(color).trim();\n return computed || '#cccccc';\n }\n // Handle var(...) wrapper\n if (color.startsWith('var(')) {\n return this.resolveVarsInString(color) || '#cccccc';\n }\n return color;\n }\n\n private getDocumentFontFamily(): string {\n return getComputedStyle(document.body).fontFamily || 'sans-serif';\n }\n\n // ── Download ──────────────────────────────────────────────────────────────────\n\n private download(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n a.click();\n setTimeout(() => URL.revokeObjectURL(url), 100);\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';\nimport { ClrDropdownModule, ClrIcon } from '@clr/angular';\nimport { ChartExportService } from './chart-export.service';\nimport { ClarityIcons, downloadIcon } from '@clr/angular/icon';\nimport { ChartLegendItem } from '../chart-legend/chart-legend.component';\n\nClarityIcons.addIcons(downloadIcon);\n@Component({\n selector: 'cng-chart-export-button',\n template: `\n <clr-dropdown>\n <button class=\"btn btn-sm btn-icon btn-link export-trigger\" clrDropdownTrigger title=\"Export chart\">\n <cds-icon shape=\"download\" size=\"16\"></cds-icon>\n {{ buttonTitle() }}\n </button>\n <clr-dropdown-menu *clrIfOpen clrPosition=\"bottom-left\">\n <button clrDropdownItem (click)=\"export('svg')\">SVG</button>\n <button clrDropdownItem (click)=\"export('png')\">PNG</button>\n </clr-dropdown-menu>\n </clr-dropdown>\n `,\n styles: [\n `\n :host {\n position: absolute;\n top: 15px;\n right: 15px;\n z-index: 10;\n opacity: 1;\n pointer-events: auto;\n }\n `,\n ],\n imports: [ClrDropdownModule, ClrIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartExportButtonComponent {\n public readonly svgRef = input<SVGSVGElement | undefined>(undefined);\n public readonly filename = input<string>('chart');\n public readonly buttonTitle = input<string>('Export');\n /** Legend items to include below the chart in the exported file. */\n public readonly legendItems = input<ChartLegendItem[] | undefined>(undefined);\n\n private readonly exportService = inject(ChartExportService);\n\n public export(format: 'svg' | 'png'): void {\n const svg = this.svgRef();\n if (!svg) {\n return;\n }\n switch (format) {\n case 'svg':\n this.exportService.exportSvg(svg, this.filename(), this.legendItems());\n break;\n case 'png':\n this.exportService.exportPng(svg, this.filename(), this.legendItems());\n break;\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { toChartColor } from '../utils';\n\nexport interface ChartLegendItem {\n label: string;\n color: string;\n}\n\n@Component({\n selector: 'cng-chart-legend',\n template: `\n <div class=\"chart-legend\">\n @for (item of items(); track item.label) {\n <div class=\"legend-item\">\n <span class=\"legend-color-square\" [style.background-color]=\"toChartColor(item.color)\"></span>\n <span class=\"legend-label\">{{ item.label }}</span>\n </div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n .chart-legend {\n display: flex;\n flex-wrap: wrap;\n gap: 0.25rem 1rem;\n padding: 0.5rem 0 0.25rem;\n font-size: 11px;\n color: var(--cds-global-color-construction-400, #666);\n }\n\n .legend-item {\n display: flex;\n align-items: center;\n gap: 0.35rem;\n }\n\n .legend-color-square {\n width: 10px;\n height: 10px;\n border-radius: 2px;\n flex-shrink: 0;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartLegendComponent {\n public readonly items = input.required<ChartLegendItem[]>();\n protected readonly toChartColor = toChartColor;\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { NgxSkeletonLoaderComponent } from 'ngx-skeleton-loader';\n\n@Component({\n selector: 'cng-bar-chart-skeleton',\n templateUrl: './chart-skeleton.component.html',\n styleUrls: ['./chart-skeleton.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgxSkeletonLoaderComponent],\n})\nexport class ChartSkeletonComponent {\n public readonly skeletonType = input<'loading' | 'placeholder'>('loading');\n public readonly orientation = input.required<'vertical' | 'horizontal'>();\n\n protected readonly animationStyle = computed(() => (this.skeletonType() === 'loading' ? 'pulse' : undefined));\n}\n","<div class=\"chart-skeleton\" [class.placeholder-skeleton]=\"skeletonType() === 'placeholder'\">\n <div\n class=\"skeleton-bars\"\n [class.horizontal]=\"orientation() === 'horizontal'\"\n [class.vertical]=\"orientation() === 'vertical'\"\n >\n @for (_item of [1, 2, 3, 4, 5, 6]; track $index) {\n <div class=\"skeleton-bar bar-{{ $index + 1 }}\">\n <ngx-skeleton-loader\n [appearance]=\"'circle'\"\n [count]=\"1\"\n [animation]=\"animationStyle()\"\n [theme]=\"{\n width: '100%',\n height: '100%',\n 'border-radius': 'var(--clr-base-border-radius-xxs)',\n }\"\n />\n </div>\n }\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { ClrIcon } from '@clr/angular';\nimport { toChartColor } from '../utils';\n\n@Component({\n selector: 'cng-chart-tooltip',\n templateUrl: './chart-tooltip.component.html',\n styleUrls: ['./chart-tooltip.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ClrIcon],\n})\nexport class ChartTooltipComponent {\n public readonly tooltipPosition = input.required<{ x: number; y: number }>();\n public readonly tooltipOrientation = input<'top' | 'bottom'>('top');\n public readonly squareColor = input.required<string | undefined>();\n public readonly tooltipClickable = input(true);\n\n public readonly tooltipClosed = output<void>();\n public readonly tooltipHeaderClicked = output<void>();\n\n protected readonly toChartColor = toChartColor;\n}\n","<div\n class=\"tooltip-container\"\n [class.orientation-bottom]=\"tooltipOrientation() === 'bottom'\"\n (click)=\"$event.stopPropagation()\"\n [style.left.px]=\"tooltipPosition().x\"\n [style.top.px]=\"tooltipPosition().y\"\n>\n <div class=\"tooltip-header\">\n <div class=\"color-label-wrapper\">\n @if (squareColor()) {\n <div class=\"color-square\" [style.background-color]=\"toChartColor(squareColor())\"></div>\n }\n <h5\n [class.has-more-info]=\"tooltipClickable()\"\n (click)=\"$event.stopPropagation(); tooltipClickable() && tooltipHeaderClicked.emit()\"\n >\n <ng-content select=\"cng-title\" />\n </h5>\n </div>\n <cds-icon shape=\"times\" class=\"tooltip-close-btn\" (click)=\"$event.stopPropagation(); tooltipClosed.emit()\" />\n </div>\n <div class=\"tooltip-content\">\n <ng-content />\n </div>\n <hr />\n <div class=\"tooltip-footer\"><ng-content select=\"cng-footer\" /></div>\n</div>\n","import { AfterViewInit, DestroyRef, Directive, inject, output, Renderer2 } from '@angular/core';\n\n// Clarity actually has an \"outside-click\" directive, but they don't export it 🤷\n@Directive({\n selector: '[cngOutsideClick]',\n})\nexport class OutsideClickDirective implements AfterViewInit {\n public readonly outsideClick = output<void>({ alias: 'cngOutsideClick' });\n\n private readonly renderer = inject(Renderer2);\n private readonly destroyRef = inject(DestroyRef);\n\n public ngAfterViewInit(): void {\n const listener = this.renderer.listen('document', 'click', () => this.outsideClick.emit());\n this.destroyRef.onDestroy(listener);\n }\n}\n","import { Inject, Injectable, DOCUMENT } from '@angular/core';\nimport { Observable, ReplaySubject, Subject } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\n\n/**\n * Enum for the Screen size in pixels, defined by clarity here https://vmware.github.io/clarity/documentation/v0.12/grid\n * We consider screens above 1200px to be a desktop, between 576px and 1199px to be a tablet and below 576px to be a phone.\n */\nexport enum ScreenWidth {\n EXTRA_LARGE = 1200,\n LARGE = 992,\n MEDIUM = 768,\n SMALL = 576,\n EXTRA_SMALL = 575,\n}\n\nexport enum ScreenOrientation {\n PORTRAIT = 'PORTRAIT',\n LANDSCAPE = 'LANDSCAPE',\n}\n\nexport const DATEPICKER_ENABLE_BREAKPOINT = 768;\nexport const MOBILE_USERAGENT_REGEX = /Mobi/i;\n\n@Injectable({ providedIn: 'root' })\nexport class ScreenStateService {\n private screenOrientation: ScreenOrientation;\n private isUserAgentMobile = false;\n\n private screenWidthSubject: Subject<number> = new ReplaySubject(1);\n private screenOrientationSubject: Subject<ScreenOrientation> = new ReplaySubject(1);\n\n public constructor(@Inject(DOCUMENT) private _document: Document) {\n window.addEventListener('resize', () => {\n this.onResize();\n });\n\n window.addEventListener('orientationchange', () => {\n this.onOrientationChange();\n });\n\n this.determineMobileUserAgent();\n\n // Execute them once for initial values\n this.onResize();\n this.onOrientationChange();\n }\n\n public getScreenWidthChanged(): Observable<number> {\n return this.screenWidthSubject;\n }\n\n public getMobileStateChanged(): Observable<boolean> {\n return this.getScreenWidthChanged().pipe(\n map(screenWidth => screenWidth < DATEPICKER_ENABLE_BREAKPOINT && this.isUserAgentMobile),\n distinctUntilChanged()\n );\n }\n\n public getScreenOrientationChanged(): Observable<ScreenOrientation> {\n return this.screenOrientationSubject;\n }\n\n private onResize() {\n const windowWidth = window.innerWidth;\n this.screenWidthSubject.next(windowWidth);\n }\n\n private onOrientationChange() {\n const prevOrientation = this.screenOrientation;\n const orientation = window.orientation;\n // Probably not always correct since this depends on the devices default orientation.\n // Better way to identify this would probably be comparing height & width of the screen.\n if (orientation === -90 || orientation === 90) {\n this.screenOrientation = ScreenOrientation.LANDSCAPE;\n } else {\n this.screenOrientation = ScreenOrientation.PORTRAIT;\n }\n if (this.screenOrientation !== prevOrientation) {\n this.screenOrientationSubject.next(this.screenOrientation);\n }\n }\n\n private determineMobileUserAgent() {\n if (this._document) {\n this.isUserAgentMobile = MOBILE_USERAGENT_REGEX.test(this._document.defaultView.navigator.userAgent);\n }\n }\n}\n","import { DestroyRef, Directive, inject, input, OnInit, output } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { skip } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { ScreenStateService } from './screen-state.service';\n\n@Directive({\n selector: '[cngWindowResize]',\n})\nexport class WindowResizeDirective implements OnInit {\n public readonly debounce = input<number>(250);\n public readonly includeFirst = input<boolean>(false);\n public readonly windowResize = output<number>({ alias: 'cngWindowResize' });\n\n private readonly screenStateService = inject(ScreenStateService);\n private readonly destroyRef = inject(DestroyRef);\n\n public ngOnInit(): void {\n const skipCount = this.includeFirst() ? 0 : 1;\n this.screenStateService\n .getScreenWidthChanged()\n .pipe(takeUntilDestroyed(this.destroyRef), skip(skipCount), debounceTime(this.debounce()))\n .subscribe(width => this.windowResize.emit(width));\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n OnChanges,\n output,\n signal,\n SimpleChanges,\n} from '@angular/core';\nimport {\n axisBottom as d3axisBottom,\n axisLeft as d3axisLeft,\n BaseType,\n format as d3format,\n group as d3group,\n max as d3max,\n scaleBand as d3scaleBand,\n ScaleBand,\n scaleLinear as d3scaleLinear,\n ScaleLinear,\n select as d3select,\n Selection,\n sum as d3sum,\n} from 'd3';\nimport {\n NO_ITEMS_ALERT_TYPE,\n NO_ITEMS_MESSAGE,\n TOO_MANY_ITEMS_ALERT_TYPE,\n TOO_MANY_ITEMS_GROUPED_MESSAGE,\n TOO_MANY_ITEMS_MESSAGE,\n} from '../constants';\nimport { ChartLegendItem } from '../chart-legend/chart-legend.component';\nimport { TextRenderer, toChartColor } from '../utils';\nimport { ChartBase } from '../shared/chart-base';\n\nexport interface BarChartData {\n key: string;\n label: string;\n fullLabel?: string;\n value: number;\n color?: string;\n stackKey?: string;\n}\n\nexport interface BarChartValue {\n key: string[];\n label: string;\n value: number;\n}\n\ntype BarChartDataPoint = BarChartData & {\n stackValue0: number;\n stackValue1: number;\n percentageOfStack: number;\n};\n\nexport type BarChartLabel = { stackKey: string; label: string };\n\n@Component({\n selector: 'clr-bar-chart',\n templateUrl: './bar-chart.component.html',\n styleUrls: ['./bar-chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class BarChartComponent extends ChartBase<BarChartDataPoint> implements OnChanges {\n public readonly data = input.required<BarChartData[]>();\n public readonly stacks = input<BarChartLabel[] | undefined>(undefined);\n public readonly orientation = input.required<'horizontal' | 'vertical'>();\n public readonly tooltipOrientation = input<'top' | 'bottom'>('top');\n\n public readonly barSizePx = input<number>(15);\n public readonly barAreaSizePx = input<number>(40);\n\n public readonly tooltipPercentOfTotal = input<string>('of total');\n public readonly tooltipPercentOf = input<string>('of');\n\n public readonly noItemsMessage = input<string>(NO_ITEMS_MESSAGE);\n public readonly tooManyItemsMessage = input<string>(TOO_MANY_ITEMS_MESSAGE);\n public readonly tooManyItemsGroupedMessage = input<string>(TOO_MANY_ITEMS_GROUPED_MESSAGE);\n\n public readonly showLegend = input(true);\n public readonly showExportButton = input(false);\n public readonly exportButtonTitle = input<string>('Export');\n public readonly exportFilename = input<string>('bar-chart');\n\n /** Optional label rendered below the X axis. */\n public readonly xAxisLabel = input<string>('');\n /** Optional label rendered rotated to the left of the Y axis. */\n public readonly yAxisLabel = input<string>('');\n\n public readonly valueClicked = output<BarChartValue>();\n\n private readonly textRenderer = new TextRenderer();\n\n private readonly MARGIN = { top: 10, right: 20, bottom: 30, left: 65 };\n private static readonly HORIZONTAL_BAR_MIN_HEIGHT_PX = 25;\n\n protected readonly toChartColor = toChartColor;\n\n protected readonly total = computed(() => this.data().reduce((acc, v) => acc + v.value, 0));\n protected readonly totalByStack = computed<Record<string, number>>(() => {\n const totals: Record<string, number> = {};\n for (const d of this.slicedDataPoints()) {\n totals[d.stackKey] = (totals[d.stackKey] ?? 0) + d.value;\n }\n return totals;\n });\n protected readonly keysByStack = computed<Record<string, string[]>>(() => {\n const keys: Record<string, string[]> = {};\n for (const d of this.slicedDataPoints()) {\n if (!keys[d.stackKey]) {\n keys[d.stackKey] = [];\n }\n keys[d.stackKey].push(d.key);\n }\n return keys;\n });\n\n // Count the total amount of bars by either the stacKey (if stacked) or the key (if not stacked)\n protected readonly totalBarCount = computed(\n () =>\n new Set(\n this.data()\n .filter(d => d.value > 0)\n .map(d => d.stackKey ?? d.key)\n ).size\n );\n protected readonly showingBarCount = computed(\n () =>\n new Set(\n this.slicedDataPoints()\n .filter(d => d.value > 0)\n .map(d => d.stackKey)\n ).size\n );\n\n public readonly alertMessageAndType = computed<[string, string] | undefined>(() => {\n if (this.loading()) {\n return undefined;\n }\n\n if (!this.showingBarCount()) {\n return [this.noItemsMessage(), NO_ITEMS_ALERT_TYPE];\n } else if (this.totalBarCount() !== this.showingBarCount()) {\n return [\n this.stacks() ? this.tooManyItemsGroupedMessage() : this.tooManyItemsMessage(),\n TOO_MANY_ITEMS_ALERT_TYPE,\n ];\n }\n\n return undefined;\n });\n\n public readonly legendItems = computed<ChartLegendItem[]>(() => {\n if (!this.showLegend() || !this.data()?.length) {\n return [];\n }\n if (this.stacks()?.length) {\n // Stacked: one legend entry per distinct label (= each layer in the stack)\n const seen = new Set<string>();\n const items: ChartLegendItem[] = [];\n for (const item of this.data()) {\n const label = item.fullLabel ?? item.label;\n if (!seen.has(label)) {\n seen.add(label);\n items.push({ label, color: item.color });\n }\n }\n return items;\n }\n // Non-stacked: one entry per bar\n return this.data().map(item => ({ label: item.fullLabel ?? item.label, color: item.color }));\n });\n\n /** Computed values used by the tooltip to avoid inline logic in the template. */\n protected readonly tooltipKey = computed<string[] | undefined>(() => {\n const item = this.selectedItem();\n if (!item) {\n return undefined;\n }\n return this.stacks()?.length ? this.keysByStack()[item.stackKey] ?? [] : [item.key];\n });\n\n protected readonly tooltipLabel = computed<string | undefined>(() => {\n const item = this.selectedItem();\n if (!item) {\n return undefined;\n }\n return this.stacks()?.find(stack => stack.stackKey === item.stackKey)?.label ?? item.fullLabel ?? item.label;\n });\n\n protected readonly tooltipValue = computed<number | undefined>(() => {\n const item = this.selectedItem();\n if (!item) {\n return undefined;\n }\n return this.stacks()?.length ? this.totalByStack()[item.stackKey] ?? 0 : item.value;\n });\n\n /** Slices belonging to the currently selected stack – used by the tooltip @for loop. */\n protected readonly selectedStackSlices = computed<BarChartDataPoint[]>(() => {\n const item = this.selectedItem();\n if (!item || !this.stacks()?.length) {\n return [];\n }\n return this.slicedDataPoints().filter(d => d.stackKey === item.stackKey);\n });\n\n private readonly maxAmountOfItems = signal<number>(undefined);\n private readonly slicedDataPoints = signal<BarChartDataPoint[]>([]);\n\n private svg: Selection<SVGGElement, unknown, null, undefined>;\n private barSelection: Selection<SVGGElement, BarChartDataPoint, SVGElement, undefined> | null = null;\n private labelSelection: Selection<SVGTextElement, BarChartLabel, SVGGElement, unknown> | null = null;\n\n public constructor() {\n super();\n }\n\n public ngOnChanges(_changes: SimpleChanges): void {\n if (!this.svg) {\n return;\n }\n requestAnimationFrame(() => this.updateChart());\n }\n\n public override ngAfterViewInit(): void {\n this.createChart();\n super.ngAfterViewInit(); // schedules the initial requestAnimationFrame(() => updateChart())\n }\n\n private createChart(): void {\n const element = this.chartRef().nativeElement;\n this.svg = d3select(element);\n }\n\n protected updateChart(): void {\n this.svg.selectAll('*').remove();\n\n if (this.loading()) {\n this.slicedDataPoints.set([]);\n return;\n }\n const { width: containerWidth, height: containerHeight } = this.getContainerDimensions();\n const extraBottom = this.xAxisLabel() ? 16 : 0;\n const extraLeft = this.yAxisLabel() ? 16 : 0;\n const leftMargin = (this.orientation() === 'horizontal' ? this.MARGIN.left : 30) + extraLeft;\n const width = containerWidth - leftMargin - this.MARGIN.right;\n const height = containerHeight - this.MARGIN.top - (this.MARGIN.bottom + extraBottom);\n\n this.maxAmountOfItems.set(this.getMaxAmountOfItems(width, height));\n if (!this.data()?.length) {\n this.slicedDataPoints.set([]);\n return;\n }\n\n const stacks = this.stackItems(this.data());\n const slicedStacks = stacks.slice(0, this.maxAmountOfItems());\n const flatStacks = slicedStacks.flat();\n this.slicedDataPoints.set(flatStacks);\n const slicedStackKeys = new Set(slicedStacks.map(stack => stack[0].stackKey));\n const labels: BarChartLabel[] = this.stacks()?.length\n ? this.stacks()\n .filter(stack => slicedStackKeys.has(stack.stackKey))\n .map(stack => ({ stackKey: stack.stackKey, label: stack.label }))\n : flatStacks.map(d => ({ stackKey: d.stackKey, label: d.label }));\n\n const g = this.svg\n .attr('width', width)\n .attr('height', height)\n .append('g')\n .attr('transform', `translate(${leftMargin},${this.MARGIN.top})`);\n\n if (this.orientation() === 'vertical') {\n this.createVerticalChart(g, labels, width, height, this.xAxisLabel(), this.yAxisLabel(), leftMargin);\n } else {\n this.createHorizontalChart(g, labels, width, height, this.xAxisLabel(), this.yAxisLabel(), leftMargin);\n }\n\n this.styleGridLines(g);\n }\n\n private createVerticalChart(\n g: Selection<SVGGElement, unknown, null, undefined>,\n labels: BarChartLabel[],\n width: number,\n height: number,\n xAxisLabel: string,\n yAxisLabel: string,\n leftMargin: number\n ): void {\n const keys = labels.map(d => d.stackKey);\n const x = d3scaleBand().domain(keys).range([0, width]);\n\n const y = d3scaleLinear()\n .domain([0, d3max(this.slicedDataPoints(), (d: BarChartDataPoint) => d.stackValue1) || 0])\n .nice()\n .range([height, 0]);\n\n // X Axis\n const labelSelection = g\n .append('g')\n .attr('transform', `translate(0,${height})`)\n .call(d3axisBottom(x))\n .selectAll<SVGTextElement, BarChartLabel>('text');\n this.labelSelection = labelSelection\n .data(labels)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .call(this.addTextCommonInfo as any)\n .style('cursor', 'pointer')\n .call(this.addTextAndTitle.bind(this), x.bandwidth())\n .call(this.addTextHoverHandlers.bind(this))\n .call(this.addTextClickHandler.bind(this));\n\n // Y Axis\n const tickValues = y.ticks(5).filter((tick: number) => Number.isInteger(tick));\n const yAxis = g\n .append('g')\n .call(d3axisLeft(y).tickValues(tickValues).tickSize(-width).tickFormat(d3format('~s')))\n .selectAll('text');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yAxis.call(this.addTextCommonInfo as any);\n\n this.createBarSelectionGroups(g);\n\n // Add highlight rect (behind)\n this.addVerticalBarRectangle(x, y, 2)\n .attr('class', 'bar-highlight')\n .attr('fill', '#fff')\n .style('stroke', (d: BarChartDataPoint) => toChartColor(d.color))\n .attr('stroke-width', 2)\n .style('opacity', 0); // hidden by default;\n\n // Add main bar rect (on top)\n this.addVerticalBarRectangle(x, y)\n .attr('class', 'bar')\n .style('fill', (d: BarChartDataPoint) => toChartColor(d.color));\n\n this.appendAxisLabel(g, xAxisLabel, width / 2, height + 40);\n this.appendAxisLabel(g, yAxisLabel, -height / 2, -(leftMargin - 10), 'rotate(-90)');\n }\n\n private createHorizontalChart(\n g: Selection<SVGGElement, unknown, null, undefined>,\n labels: BarChartLabel[],\n width: number,\n height: number,\n xAxisLabel: string,\n yAxisLabel: string,\n leftMargin: number\n ): void {\n const x = d3scaleLinear()\n .domain([0, d3max(this.slicedDataPoints(), (d: BarChartDataPoint) => d.stackValue1) || 0])\n .nice()\n .range([0, width]);\n\n const keys = labels.map(d => d.stackKey);\n const y = d3scaleBand().domain(keys).range([0, height]);\n\n // X Axis\n const tickValues = x.ticks(5).filter((tick: number) => Number.isInteger(tick));\n const xAxis = g\n .append('g')\n .attr('transform', `translate(0,${height})`)\n .call(d3axisBottom(x).tickValues(tickValues).tickSize(-height).tickFormat(d3format('~s')))\n .selectAll('text');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xAxis.call(this.addTextCommonInfo as any);\n\n // Y Axis\n const labelSelection = g\n .append('g')\n .attr('transform', `translate(0,0)`)\n .call(d3axisLeft(y))\n .selectAll<SVGTextElement, BarChartData>('text');\n this.labelSelection = labelSelection\n .data(labels)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .call(this.addTextCommonInfo as any)\n .style('cursor', 'pointer')\n .call(this.addTextAndTitle.bind(this), this.MARGIN.left - 10)\n .call(this.addTextHoverHandlers.bind(this))\n .call(this.addTextClickHandler.bind(this));\n\n this.createBarSelectionGroups(g);\n\n // Add highlight rect (behind)\n this.addHorizontalBarRectangle(x, y, 2)\n .attr('class', 'bar-highlight')\n .attr('fill', '#fff')\n .style('stroke', (d: BarChartDataPoint) => toChartColor(d.color))\n .attr('stroke-width', 2)\n .style('opacity', 0); // hidden by default;\n\n // Add main bar rect (on top)\n this.addHorizontalBarRectangle(x, y)\n .attr('class', 'bar')\n .style('fill', (d: BarChartDataPoint) => toChartColor(d.color));\n\n // X axis description label (value axis at bottom)\n this.appendAxisLabel(g, xAxisLabel, width / 2, height + 40);\n // Y axis description label: centred in the extra band reserved for it\n this.appendAxisLabel(g, yAxisLabel, -height / 2, -((this.MARGIN.left + leftMargin) / 2), 'rotate(-90)');\n }\n\n private createBarSelectionGroups(g: Selection<SVGGElement, unknown, null, undefined>) {\n this.barSelection = g\n .selectAll<SVGRectElement, BarChartDataPoint>('.bar-group')\n .data(this.slicedDataPoints(), (d: BarChartDataPoint) => d.key)\n .join('g')\n .attr('class', 'bar-group')\n .style('cursor', 'pointer')\n .on('mouseover', (_e: PointerEvent, d: BarChartDataPoint) =>\n this.setHoverStylesByStackKey(d.stackKey, d.key, true)\n )\n .on('mouseout', (_e: PointerEvent, d: BarChartDataPoint) =>\n this.setHoverStylesByStackKey(d.stackKey, d.key, false)\n )\n .call(this.addBarClickHandler.bind(this));\n }\n\n private addTextCommonInfo(g: Selection<BaseType, any, BaseType, any>): void {\n g.style('font-size', '11px').style('fill', 'var(--cds-global-color-construction-400, #666)');\n }\n\n private addTextHoverHandlers(g: Selection<BaseType, BarChartData, SVGGElement, undefined>): void {\n g.on('mouseover', (_e: PointerEvent, d: BarChartData) => this.setHoverStylesByStackKey(d.stackKey, undefined, true)) //\n .on('mouseout', (_e: PointerEvent, d: BarChartData) =>\n this.setHoverStylesByStackKey(d.stackKey, undefined, false)\n );\n }\n\n private setHoverStylesByStackKey(stackKey: string, key: string | undefined, isHover: boolean): void {\n // When hovering a stack section, we also need to highlight the label, but not the other sections of the same stack.\n // But when hovering a label, we need to highlight all sections of the stack.\n const barGroup = this.barSelection.filter(\n (d: BarChartDataPoint) => d.stackKey === stackKey && (key == null || d.key === key)\n );\n barGroup.select('.bar').style('mix-blend-mode', isHover ? 'multiply' : 'unset');\n barGroup.select('.bar-highlight').style('opacity', isHover ? '1' : '0');\n\n this.labelSelection\n .filter((d: BarChartLabel) => d.stackKey === stackKey)\n .style('font-weight', isHover ? 'bold' : 'unset');\n }\n\n private addBarClickHandler(g: Selection<SVGRectElement, BarChartDataPoint, SVGElement, undefined>) {\n g.on('click', (event: PointerEvent, d: BarChartDataPoint) => {\n event.stopPropagation();\n this.openTooltipByKey(d.key);\n });\n }\n\n private addTextClickHandler(g: Selection<SVGTextElement, BarChartLabel, SVGElement, undefined>) {\n // no click handler for labels in stacked charts\n if (this.stacks()?.length) {\n return;\n }\n\n g.on('click', (event: PointerEvent, d: BarChartLabel) => {\n event.stopPropagation();\n // Note: In non-stacked charts, the stackKey is equal to the key, so this works - but the logic is confusing [VU3REQ-4790]\n this.openTooltipByKey(d.stackKey);\n });\n }\n\n private openTooltipByKey(key: string): void {\n const index = this.slicedDataPoints().findIndex(item => item.key === key);\n const rect = this.barSelection\n .filter((_d: BarChartDataPoint, i: number) => i === index)\n // we actually want the bar, not the group (because if value is 0, then the group is not positioned correctly\n .node()\n .children[0].getBoundingClientRect();\n const container = this.chartRef().nativeElement.getBoundingClientRect();\n\n this.tooltipPosition.set({\n x: rect.left - container.left + rect.width / 2,\n y: (this.tooltipOrientation() === 'top' ? rect.top : rect.bottom) - container.top,\n });\n this.selectedItem.set(this.slicedDataPoints()[index]);\n }\n\n private addTextAndTitle(g: Selection<SVGTextElement, BarChartLabel, SVGElement, undefined>, availableWidth: number) {\n g.each((d: BarChartLabel, index: number, nodes: SVGTextElement[] | ArrayLike<SVGTextElement>) => {\n const target = d3select(nodes[index]);\n target.text(\n this.textRenderer.render(d.label, 15, availableWidth, target.style('font-size'), target.style('font-family'))\n );\n target.append('title').text(d.label);\n });\n }\n\n private styleGridLines(g: Selection<SVGGElement, unknown, null, undefined>) {\n g.selectAll('.tick line').style('stroke', 'var(--cds-global-color-gray-200, #e8e8e8)');\n }\n\n private addVerticalBarRectangle(\n x: ScaleBand<string>,\n y: ScaleLinear<number, number>,\n extraSize: number = 0\n ): Selection<SVGRectElement, BarChartDataPoint, SVGElement, undefined> {\n return this.barSelection\n .append('rect')\n .attr('x', (d: BarChartDataPoint) => {\n return (x(d.stackKey) || 0) + (x.bandwidth() - this.barSizePx()) / 2 + extraSize;\n })\n .attr('y', (d: BarChartDataPoint) => y(d.stackValue1))\n .attr('width', this.barSizePx() - 2 * extraSize)\n .attr('height', (d: BarChartDataPoint) => y(d.stackValue0) - y(d.stackValue1))\n .attr('rx', 1)\n .attr('ry', 1);\n }\n\n private addHorizontalBarRectangle(\n x: ScaleLinear<number, number>,\n y: ScaleBand<string>,\n extraSize: number = 0\n ): Selection<SVGRectElement, BarChartDataPoint, SVGElement, undefined> {\n return this.barSelection\n .append('rect')\n .attr('x', (d: BarChartDataPoint) => x(d.stackValue0))\n .attr('y', (d: BarChartDataPoint) => {\n return (y(d.stackKey) || 0) + (y.bandwidth() - this.barSizePx()) / 2 + extraSize;\n })\n .attr('width', (d: BarChartDataPoint) => x(d.stackValue1) - x(d.stackValue0))\n .attr('height', this.barSizePx() - 2 * extraSize)\n .attr('rx', 1)\n .attr('ry', 1);\n }\n\n /** Appends a shared-style axis description label to the chart group. */\n private appendAxisLabel(\n g: Selection<SVGGElement, unknown, null, undefined>,\n text: string,\n x: number,\n y: number,\n transform?: string\n ): void {\n if (!text) {\n return;\n }\n const el = g\n .append('text')\n .attr('text-anchor', 'middle')\n .style('font-size', '12px')\n .style('fill', 'var(--cds-global-color-construction-400, #666)')\n .text(text)\n .attr('x', x)\n .attr('y', y);\n if (transform) {\n el.attr('transform', transform);\n }\n }\n\n private stackItems(data: BarChartData[]): BarChartDataPoint[][] {\n let groups: [string, BarChartData[]][];\n if (this.stacks()?.length) {\n groups = Array.from(d3group(data, (d: BarChartData) => d.stackKey ?? d.key));\n } else {\n groups = data.map(item => [item.key, [item]]);\n }\n\n return this.mapItems(groups);\n }\n\n private mapItems(groups: [string, BarChartData[]][]): BarChartDataPoint[][] {\n const result: BarChartDataPoint[][] = [];\n for (const [_, items] of groups) {\n let stackValue = 0;\n const stackSum = d3sum(items, (d: BarChartData) => d.value);\n result.push(\n items.map(item => {\n const stackValue0 = stackValue;\n stackValue += item.value;\n return {\n ...item,\n stackValue0,\n stackValue1: stackValue,\n stackKey: item.stackKey ?? item.key,\n percentageOfStack: stackSum === 0 ? 0 : (100 * item.value) / stackSum,\n };\n })\n );\n }\n\n return result;\n }\n\n private getMaxAmountOfItems(width: number, height: number) {\n if (this.orientation() === 'vertical') {\n return Math.floor(width / this.barAreaSizePx());\n }\n return Math.floor(height / BarChartComponent.HORIZONTAL_BAR_MIN_HEIGHT_PX);\n }\n}\n","<div class=\"chart-container\">\n <div class=\"chart-area\" #container (cngWindowResize)=\"updateChart()\" [class.pt-3]=\"alertMessageAndType()\">\n <svg [class.d-none]=\"loading() || !data()?.length\" #chart></svg>\n\n @if (tooltipPosition()) {\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipOrientation]=\"tooltipOrientation()\"\n [squareColor]=\"!stacks() ? selectedItem()?.color : undefined\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"valueClicked.emit({ key: tooltipKey(), label: tooltipLabel(), value: tooltipValue() })\"\n >\n <ng-container ngProjectAs=\"cng-title\"> ({{ tooltipValue() }}) {{ tooltipLabel() }}</ng-container>\n\n <p class=\"mt-0\">\n {{ (100 * tooltipValue()) / total() | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n </p>\n\n @if (stacks()) { @for (slice of selectedStackSlices(); track slice.key) {\n <div class=\"mt-0-5 d-flex\">\n <div class=\"color-square mr-0-5\" [style.background-color]=\"toChartColor(slice.color)\"></div>\n <strong>{{ slice.fullLabel || slice.label }}:&nbsp;</strong>\n <span\n class=\"has-more-info\"\n (click)=\"\n valueClicked.emit({\n key: [slice.key],\n label: slice.fullLabel || slice.label,\n value: slice.value,\n })\n \"\n >\n {{ slice.value }}\n </span>\n </div>\n <p class=\"mt-0-25 percentage-info\">\n {{ (100 * slice.value) / total() | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n {{ slice.percentageOfStack | number : '1.0-2' }}% {{ tooltipPercentOf() }} \"{{ tooltipLabel() }}\"\n </p>\n } }\n </cng-chart-tooltip>\n } @if (loading() || !data()?.length) {\n <cng-bar-chart-skeleton [orientation]=\"orientation()\" [skeletonType]=\"loading() ? 'loading' : 'placeholder'\" />\n } @if (alertMessageAndType()) {\n <cng-chart-alert-overlay [alertType]=\"alertMessageAndType()[1]\" [alertMessage]=\"alertMessageAndType()[0]\" />\n }\n </div>\n\n @if (showLegend() && !loading() && legendItems().length) {\n <cng-chart-legend [items]=\"legendItems()\" />\n } @if (showExportButton() && !loading() && data()?.length) {\n <cng-chart-export-button\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n [legendItems]=\"legendItems()\"\n />\n }\n</div>\n","/*\n * Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\nimport { ScaleLinear, ScalePoint, select as d3select, Selection } from 'd3';\nimport { XYChartPoint, XYChartSeries } from './xy-chart.types';\nimport { toChartColor } from '../utils';\n\n/**\n * Renders interactive dot circles for a single XY series onto the given D3 group.\n *\n * - Default radius: 4px, hover radius: 6px.\n * - Calls `onClick` with the clicked element, data point and series when a dot is clicked.\n *\n */\nexport function renderDots(\n g: Selection<SVGGElement, unknown, null, undefined>,\n series: XYChartSeries,\n x: ScalePoint<string>,\n y: ScaleLinear<number, number>,\n onClick: (el: SVGCircleElement, point: XYChartPoint, series: XYChartSeries) => void\n): void {\n g.selectAll<SVGCircleElement, XYChartPoint>(`.dot-${series.key}`)\n .data(series.data, (d: XYChartPoint) => d.x)\n .join('circle')\n .attr('class', `dot dot-${series.key}`)\n .attr('cx', (d: XYChartPoint) => x(d.x) ?? 0)\n .attr('cy', (d: XYChartPoint) => y(d.value))\n .attr('r', 4)\n .style('fill', toChartColor(series.color))\n .attr('stroke', '#fff')\n .attr('stroke-width', 2)\n .style('cursor', 'pointer')\n .on('mouseover', (e: PointerEvent) => {\n d3select(e.currentTarget as SVGCircleElement).attr('r', 6);\n })\n .on('mouseout', (e: PointerEvent) => {\n d3select(e.currentTarget as SVGCircleElement).attr('r', 4);\n })\n .on('click', (event: PointerEvent, d: XYChartPoint) => {\n event.stopPropagation();\n onClick(event.currentTarget as SVGCircleElement, d, series);\n });\n}\n","/*\n * Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\nimport {\n axisBottom as d3axisBottom,\n axisLeft as d3axisLeft,\n AxisScale,\n format as d3format,\n ScaleLinear,\n Selection,\n} from 'd3';\n\n/** Options passed to {@link drawXYAxes}. */\nexport interface XYAxisOptions {\n /** Maps each X key to its display label. */\n xLabelMap: Map<string, string>;\n width: number;\n height: number;\n /** Optional description label rendered below the X axis. */\n xAxisLabel?: string;\n /** Optional description label rendered rotated left of the Y axis. */\n yAxisLabel?: string;\n /** Left margin already accounting for the Y-axis label offset. */\n effectiveLeft: number;\n}\n\n/**\n * Computes sensible tick values for a linear Y scale.\n *\n * When the domain contains enough integer values (≥ 3) the ticks are filtered\n * to integers only (avoids fractional labels for count data). For small-range\n * domains – e.g. 0–1 ratios / probabilities – the raw D3 ticks are returned\n * unchanged so that decimal labels are still visible.\n */\nexport function computeYTickValues(y: ScaleLinear<number, number>, count = 5): number[] {\n const raw = y.ticks(count);\n const integers = raw.filter(Number.isInteger);\n // Keep integer-only ticks only when there are at least 3 of them; otherwise\n // the domain is too small (e.g. 0–1) and we need the decimal ticks.\n return integers.length >= 3 ? integers : raw;\n}\n\n/**\n * Returns a D3 tick-format function that matches the decision made in\n * {@link computeYTickValues}:\n *\n * - **Integer / large-value domain** (≥ 3 integer ticks): SI prefix format\n * (`~s`), e.g. `1k`, `200`.\n * - **Small / decimal domain** (< 3 integer ticks, e.g. 0–1 ratios): plain\n * fixed-point format (`.3~f`) – avoids the SI \"milli\" prefix (`m`) that\n * D3 would otherwise apply to values < 1.\n */\nexport function computeYTickFormat(\n y: ScaleLinear<number, number>,\n count = 5\n): (d: number | { valueOf(): number }) => string {\n const raw = y.ticks(count);\n const integers = raw.filter(Number.isInteger);\n return integers.length >= 3 ? d3format('~s') : d3format('.3~f');\n}\n\n/**\n * Draws the X and Y axes (with integer-only Y ticks and grid lines) plus\n * optional description labels onto the given D3 group.\n *\n * @param g The D3 group element to append into.\n * @param x Any D3 axis scale keyed on strings (`ScalePoint` or `ScaleBand`).\n * @param y The linear Y scale.\n * @param opts Axis configuration options.\n */\nexport function drawXYAxes(\n g: Selection<SVGGElement, unknown, null, undefined>,\n x: AxisScale<string>,\n y: ScaleLinear<number, number>,\n opts: XYAxisOptions\n): void {\n const { xLabelMap, width, height, xAxisLabel, yAxisLabel, effectiveLeft } = opts;\n\n // X axis\n g.append('g')\n .attr('transform', `translate(0,${height})`)\n .call(d3axisBottom(x).tickFormat((d: string) => xLabelMap.get(d) ?? d))\n .selectAll('text')\n .style('font-size', '11px')\n .style('fill', 'var(--cds-global-color-construction-400, #666)');\n\n // Y axis\n const tickValues = computeYTickValues(y);\n const tickFormat = computeYTickFormat(y);\n g.append('g')\n .call(d3axisLeft(y).tickValues(tickValues).tickSize(-width).tickFormat(tickFormat))\n .selectAll('text')\n .style('font-size', '11px')\n .style('fill', 'var(--cds-global-color-construction-400, #666)');\n\n // Optional X axis description label\n if (xAxisLabel) {\n g.append('text')\n .attr('x', width / 2)\n .attr('y', height + 40)\n .attr('text-anchor', 'middle')\n .style('font-size', '12px')\n .style('fill', 'var(--cds-global-color-construction-400, #666)')\n .text(xAxisLabel);\n }\n\n // Optional Y axis description label (rotated, centred in the left-margin band)\n if (yAxisLabel) {\n g.append('text')\n .attr('transform', 'rotate(-90)')\n .attr('x', -height / 2)\n .attr('y', -(effectiveLeft / 2))\n .attr('text-anchor', 'middle')\n .style('font-size', '12px')\n .style('fill', 'var(--cds-global-color-construction-400, #666)')\n .text(yAxisLabel);\n }\n}\n\n/**\n * Styles all D3 grid tick lines inside `g` with the neutral chart grid color.\n */\nexport function styleGridLines(g: Selection<SVGGElement, unknown, null, undefined>): void {\n g.selectAll('.tick line').style('stroke', 'var(--cds-global-color-gray-200, #e8e8e8)');\n}\n","import { ChangeDetectionStrategy, Component, computed, input, OnChanges, output, SimpleChanges } from '@angular/core';\nimport {\n curveMonotoneX,\n format as d3format,\n line as d3line,\n max as d3max,\n min as d3min,\n scaleLinear as d3scaleLinear,\n ScaleLinear,\n scalePoint as d3scalePoint,\n ScalePoint,\n select as d3select,\n Selection,\n} from 'd3';\nimport { NO_ITEMS_ALERT_TYPE, NO_ITEMS_MESSAGE } from '../constants';\nimport { toChartColor } from '../utils';\nimport { ChartLegendItem } from '../chart-legend/chart-legend.component';\nimport { XYChartPoint, XYChartSeries, XYChartValue } from '../shared/xy-chart.types';\nimport { renderDots } from '../shared/d3-dots';\nimport { drawXYAxes, styleGridLines } from '../shared/d3-chart-axes';\nimport { ChartBase } from '../shared/chart-base';\n\n// Re-exported as chart-specific aliases for backward compatibility\nexport type {\n XYChartPoint as LineChartPoint,\n XYChartSeries as LineChartSeries,\n XYChartValue as LineChartValue,\n} from '../shared/xy-chart.types';\n\ntype LineChartSelectedPoint = XYChartPoint & {\n seriesKey: string;\n seriesLabel: string;\n color: string;\n};\n\n@Component({\n selector: 'clr-line-chart',\n templateUrl: './line-chart.component.html',\n styleUrls: ['./line-chart.component.scss'],\n standalone: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LineChartComponent extends ChartBase<LineChartSelectedPoint> implements OnChanges {\n public readonly series = input.required<XYChartSeries[]>();\n public readonly tooltipOrientation = input<'top' | 'bottom'>('top');\n public readonly showArea = input(false);\n public readonly showLegend = input(true);\n public readonly showValues = input(false);\n public readonly showExportButton = input(false);\n public readonly exportButtonTitle = input<string>('Export');\n public readonly exportFilename = input<string>('line-chart');\n\n public readonly noItemsMessage = input<string>(NO_ITEMS_MESSAGE);\n public readonly tooltipPercentOfTotal = input<string>('of total');\n\n /** Optional label rendered below the X axis. */\n public readonly xAxisLabel = input<string>('');\n /** Optional label rendered rotated to the left of the Y axis. */\n public readonly yAxisLabel = input<string>('');\n\n public readonly yMin = input<number>(0);\n public readonly autoscaleYAxis = input<boolean>(false);\n\n public readonly valueClicked = output<XYChartValue>();\n\n private readonly MARGIN = { top: 20, right: 30, bottom: 30, left: 65 };\n\n protected readonly hasData = computed(() => this.series().some(s => s.data.length > 0));\n\n protected readonly total = computed(() =>\n this.series().reduce((acc, s) => acc + s.data.reduce((a, d) => a + d.value, 0), 0)\n );\n\n public readonly alertMessageAndType = computed<[string, string] | undefined>(() => {\n if (this.loading()) {\n return undefined;\n }\n if (!this.hasData()) {\n return [this.noItemsMessage(), NO_ITEMS_ALERT_TYPE];\n }\n return undefined;\n });\n\n public readonly legendItems = computed<ChartLegendItem[]>(() => {\n if (!this.showLegend()) {\n return [];\n }\n return this.series().map(s => ({ label: s.label, color: s.color }));\n });\n\n private svg: Selection<SVGSVGElement, unknown, null, undefined>;\n\n public ngOnChanges(_changes: SimpleChanges): void {\n if (!this.svg) {\n return;\n }\n requestAnimationFrame(() => this.updateChart());\n }\n\n public override ngAfterViewInit(): void {\n this.svg = d3select(this.chartRef().nativeElement);\n super.ngAfterViewInit();\n }\n\n protected updateChart(): void {\n this.svg.selectAll('*').remove();\n\n if (this.loading()) {\n return;\n }\n\n if (!this.hasData()) {\n return;\n }\n\n const { width: containerWidth, height: containerHeight } = this.getContainerDimensions();\n const extraBottom = this.xAxisLabel() ? 16 : 0;\n const extraLeft = this.yAxisLabel() ? 16 : 0;\n const extraTop = this.showValues() ? 14 : 0;\n const effectiveLeft = this.MARGIN.left + extraLeft;\n const width = containerWidth - effectiveLeft - this.MARGIN.right;\n const height = containerHeight - (this.MARGIN.top + extraTop) - (this.MARGIN.bottom + extraBottom);\n\n // Collect all unique X keys in the order they appear across all series\n const xKeys = [...new Set(this.series().flatMap(s => s.data.map(d => d.x)))];\n // Build a display-label map\n const xLabelMap = new Map<string, string>();\n this.series().forEach(s => s.data.forEach(d => xLabelMap.set(d.x, d.xLabel ?? d.x)));\n\n const x = d3scalePoint<string>().domain(xKeys).range([0, width]).padding(0.5);\n const maxY = d3max(this.series().flatMap(s => s.data.map(d => d.value))) ?? 0;\n const minY = this.autoscaleYAxis() ? d3min(this.series().flatMap(s => s.data.map(d => d.value))) ?? 0 : this.yMin();\n const y = d3scaleLinear().domain([minY, maxY]).nice().range([height, 0]);\n\n const g = this.svg\n .attr('width', width)\n .attr('height', height)\n .append('g')\n .attr('transform', `translate(${effectiveLeft},${this.MARGIN.top + extraTop})`);\n\n drawXYAxes(g, x, y, {\n xLabelMap,\n width,\n height,\n xAxisLabel: this.xAxisLabel(),\n yAxisLabel: this.yAxisLabel(),\n effectiveLeft,\n });\n styleGridLines(g);\n this.drawSeries(g, x, y);\n }\n\n private drawSeries(\n g: Selection<SVGGElement, unknown, null, undefined>,\n x: ScalePoint<string>,\n y: ScaleLinear<number, number>\n ): void {\n const lineGenerator = d3line<XYChartPoint>()\n .x((d: XYChartPoint) => x(d.x) ?? 0)\n .y((d: XYChartPoint) => y(d.value))\n .curve(curveMonotoneX);\n\n for (const series of this.series()) {\n if (!series.data.length) {\n continue;\n }\n\n // Optional area fill\n if (this.showArea()) {\n g.append('path')\n .datum(series.data)\n .attr('class', `area area-${series.key}`)\n .style('fill', toChartColor(series.color))\n .attr('fill-opacity', 0.1)\n .attr('d', lineGenerator);\n }\n\n // Line path\n g.append('path')\n .datum(series.data)\n .attr('class', `line line-${series.key}`)\n .attr('fill', 'none')\n .style('stroke', toChartColor(series.color))\n .attr('stroke-width', 2)\n .attr('stroke-linejoin', 'round')\n .attr('stroke-linecap', 'round')\n .attr('d', lineGenerator);\n\n // Dots\n renderDots(g, series, x, y, (el, point, s) => this.openTooltip(el, point, s));\n\n // Value labels above each dot\n if (this.showValues()) {\n g.selectAll<SVGTextElement, XYChartPoint>(`.value-label-${series.key}`)\n .data(series.data, (d: XYChartPoint) => d.x)\n .join('text')\n .attr('class', `value-label value-label-${series.key}`)\n .attr('x', (d: XYChartPoint) => x(d.x) ?? 0)\n .attr('y', (d: XYChartPoint) => y(d.value) - 9)\n .attr('text-anchor', 'middle')\n .style('font-size', '11px')\n .style('font-weight', '600')\n .style('fill', toChartColor(series.color))\n .attr('stroke', '#fff')\n .attr('stroke-width', 3)\n .attr('paint-order', 'stroke fill')\n .style('pointer-events', 'none')\n .text((d: XYChartPoint) => d3format('~s')(d.value));\n }\n }\n }\n\n private openTooltip(el: SVGCircleElement, point: XYChartPoint, series: XYChartSeries): void {\n const rect = el.getBoundingClientRect();\n const container = this.chartRef().nativeElement.getBoundingClientRect();\n this.tooltipPosition.set({\n x: rect.left - container.left + rect.width / 2,\n y: (this.tooltipOrientation() === 'top' ? rect.top : rect.bottom) - container.top,\n });\n this.selectedItem.set({ ...point, seriesKey: series.key, seriesLabel: series.label, color: series.color });\n }\n}\n","<div class=\"chart-container\">\n <div class=\"chart-area\" #container (cngWindowResize)=\"updateChart()\" [class.pt-3]=\"alertMessageAndType()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (tooltipPosition()) {\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipOrientation]=\"tooltipOrientation()\"\n [squareColor]=\"selectedItem()?.color\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n valueClicked.emit({\n seriesKey: selectedItem().seriesKey,\n seriesLabel: selectedItem().seriesLabel,\n x: selectedItem().x,\n xLabel: selectedItem().xLabel,\n value: selectedItem().value,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n ({{ selectedItem().value }}) {{ selectedItem().xLabel || selectedItem().x }}\n </ng-container>\n\n <p class=\"mt-0\">\n <strong>{{ selectedItem().seriesLabel }}:</strong>\n {{ selectedItem().value }}\n </p>\n <p class=\"mt-0\">\n {{ (100 * selectedItem().value) / total() | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n </p>\n </cng-chart-tooltip>\n } @if (loading() || !hasData()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" [skeletonType]=\"loading() ? 'loading' : 'placeholder'\" />\n } @if (alertMessageAndType()) {\n <cng-chart-alert-overlay [alertType]=\"alertMessageAndType()[1]\" [alertMessage]=\"alertMessageAndType()[0]\" />\n }\n </div>\n\n @if (showLegend() && !loading() && legendItems().length) {\n <cng-chart-legend [items]=\"legendItems()\" />\n } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n [legendItems]=\"legendItems()\"\n />\n }\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input, OnChanges, output, SimpleChanges } from '@angular/core';\nimport {\n area as d3area,\n curveMonotoneX,\n line as d3line,\n max as d3max,\n scaleLinear as d3scaleLinear,\n ScaleLinear,\n scalePoint as d3scalePoint,\n ScalePoint,\n select as d3select,\n Selection,\n} from 'd3';\nimport { NO_ITEMS_ALERT_TYPE, NO_ITEMS_MESSAGE } from '../constants';\nimport { toChartColor } from '../utils';\nimport { ChartLegendItem } from '../chart-legend/chart-legend.component';\nimport { XYChartPoint, XYChartSeries, XYChartValue } from '../shared/xy-chart.types';\nimport { renderDots } from '../shared/d3-dots';\nimport { drawXYAxes, styleGridLines } from '../shared/d3-chart-axes';\nimport { ChartBase } from '../shared/chart-base';\n\n// Re-exported as chart-specific aliases for backward compatibility\nexport type {\n XYChartPoint as AreaChartPoint,\n XYChartSeries as AreaChartSeries,\n XYChartValue as AreaChartValue,\n} from '../shared/xy-chart.types';\n\ntype AreaChartSelectedPoint = XYChartPoint & {\n seriesKey: string;\n seriesLabel: string;\n color: string;\n};\n\n@Component({\n selector: 'clr-area-chart',\n templateUrl: './area-chart.component.html',\n styleUrls: ['./area-chart.component.scss'],\n standalone: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AreaChartComponent extends ChartBase<AreaChartSelectedPoint> implements OnChanges {\n public readonly series = input.required<XYChartSeries[]>();\n public readonly tooltipOrientation = input<'top' | 'bottom'>('top');\n public readonly showLegend = input(true);\n public readonly showExportButton = input(false);\n public readonly exportButtonTitle = input<string>('Export');\n public readonly exportFilename = input<string>('area-chart');\n /** Area fill opacity (0–1). Default: 0.2. */\n public readonly areaOpacity = input<number>(0.2);\n\n public readonly noItemsMessage = input<string>(NO_ITEMS_MESSAGE);\n public readonly tooltipPercentOfTotal = input<string>('of total');\n\n /** Optional label rendered below the X axis. */\n public readonly xAxisLabel = input<string>('');\n /** Optional label rendered rotated to the left of the Y axis. */\n public readonly yAxisLabel = input<string>('');\n\n public readonly valueClicked = output<XYChartValue>();\n\n private readonly MARGIN = { top: 20, right: 30, bottom: 30, left: 65 };\n\n protected readonly hasData = computed(() => this.series().some(s => s.data.length > 0));\n\n protected readonly total = computed(() =>\n this.series().reduce((acc, s) => acc + s.data.reduce((a: number, d) => a + d.value, 0), 0)\n );\n\n public readonly alertMessageAndType = computed<[string, string] | undefined>(() => {\n if (this.loading()) {\n return undefined;\n }\n if (!this.hasData()) {\n return [this.noItemsMessage(), NO_ITEMS_ALERT_TYPE];\n }\n return undefined;\n });\n\n public readonly legendItems = computed<ChartLegendItem[]>(() => {\n if (!this.showLegend()) {\n return [];\n }\n return this.series().map(s => ({ label: s.label, color: s.color }));\n });\n\n private svg: Selection<SVGSVGElement, unknown, null, undefined>;\n\n public ngOnChanges(_changes: SimpleChanges): void {\n if (!this.svg) {\n return;\n }\n requestAnimationFrame(() => this.updateChart());\n }\n\n public override ngAfterViewInit(): void {\n this.svg = d3select(this.chartRef().nativeElement);\n super.ngAfterViewInit();\n }\n\n protected updateChart(): void {\n this.svg.selectAll('*').remove();\n\n if (this.loading() || !this.hasData()) {\n return;\n }\n\n const { width: containerWidth, height: containerHeight } = this.getContainerDimensions();\n const extraBottom = this.xAxisLabel() ? 16 : 0;\n const extraLeft = this.yAxisLabel() ? 16 : 0;\n const effectiveLeft = this.MARGIN.left + extraLeft;\n const width = containerWidth - effectiveLeft - this.MARGIN.right;\n const height = containerHeight - this.MARGIN.top - (this.MARGIN.bottom + extraBottom);\n\n const xKeys = [...new Set(this.series().flatMap(s => s.data.map(d => d.x)))];\n const xLabelMap = new Map<string, string>();\n this.series().forEach(s => s.data.forEach(d => xLabelMap.set(d.x, d.xLabel ?? d.x)));\n\n const x = d3scalePoint<string>().domain(xKeys).range([0, width]).padding(0.5);\n const maxY = d3max(this.series().flatMap(s => s.data.map(d => d.value))) ?? 0;\n const y = d3scaleLinear().domain([0, maxY]).nice().range([height, 0]);\n\n const g = this.svg\n .attr('width', width)\n .attr('height', height)\n .append('g')\n .attr('transform', `translate(${effectiveLeft},${this.MARGIN.top})`);\n\n drawXYAxes(g, x, y, {\n xLabelMap,\n width,\n height,\n xAxisLabel: this.xAxisLabel(),\n yAxisLabel: this.yAxisLabel(),\n effectiveLeft,\n });\n styleGridLines(g);\n this.drawSeries(g, x, y, height);\n }\n\n private drawSeries(\n g: Selection<SVGGElement, unknown, null, undefined>,\n x: ScalePoint<string>,\n y: ScaleLinear<number, number>,\n height: number\n ): void {\n const areaGenerator = d3area<XYChartPoint>()\n .x((d: XYChartPoint) => x(d.x) ?? 0)\n .y0(height)\n .y1((d: XYChartPoint) => y(d.value))\n .curve(curveMonotoneX);\n\n const lineGenerator = d3line<XYChartPoint>()\n .x((d: XYChartPoint) => x(d.x) ?? 0)\n .y((d: XYChartPoint) => y(d.value))\n .curve(curveMonotoneX);\n\n // Draw areas first (behind lines)\n for (const series of this.series()) {\n if (!series.data.length) {\n continue;\n }\n g.append('path')\n .datum(series.data)\n .attr('class', `area area-${series.key}`)\n .style('fill', toChartColor(series.color))\n .attr('fill-opacity', this.areaOpacity())\n .attr('stroke', 'none')\n .attr('d', areaGenerator);\n }\n\n // Draw lines and dots on top\n for (const series of this.series()) {\n if (!series.data.length) {\n continue;\n }\n\n g.append('path')\n .datum(series.data)\n .attr('class', `line line-${series.key}`)\n .attr('fill', 'none')\n .style('stroke', toChartColor(series.color))\n .attr('stroke-width', 2)\n .attr('stroke-linejoin', 'round')\n .attr('stroke-linecap', 'round')\n .attr('d', lineGenerator);\n\n renderDots(g, series, x, y, (el, point, s) => this.openTooltip(el, point, s));\n }\n }\n\n private openTooltip(el: SVGCircleElement, point: XYChartPoint, series: XYChartSeries): void {\n const rect = el.getBoundingClientRect();\n const container = this.chartRef().nativeElement.getBoundingClientRect();\n this.tooltipPosition.set({\n x: rect.left - container.left + rect.width / 2,\n y: (this.tooltipOrientation() === 'top' ? rect.top : rect.bottom) - container.top,\n });\n this.selectedItem.set({ ...point, seriesKey: series.key, seriesLabel: series.label, color: series.color });\n }\n}\n","<div class=\"chart-container\">\n <div class=\"chart-area\" #container (cngWindowResize)=\"updateChart()\" [class.pt-3]=\"alertMessageAndType()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (tooltipPosition()) {\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipOrientation]=\"tooltipOrientation()\"\n [squareColor]=\"selectedItem()?.color\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n valueClicked.emit({\n seriesKey: selectedItem().seriesKey,\n seriesLabel: selectedItem().seriesLabel,\n x: selectedItem().x,\n xLabel: selectedItem().xLabel,\n value: selectedItem().value,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n ({{ selectedItem().value }}) {{ selectedItem().xLabel || selectedItem().x }}\n </ng-container>\n\n <p class=\"mt-0\">\n <strong>{{ selectedItem().seriesLabel }}:</strong>\n {{ selectedItem().value }}\n </p>\n <p class=\"mt-0\">\n {{ (100 * selectedItem().value) / total() | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n </p>\n </cng-chart-tooltip>\n } @if (loading() || !hasData()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" [skeletonType]=\"loading() ? 'loading' : 'placeholder'\" />\n } @if (alertMessageAndType()) {\n <cng-chart-alert-overlay [alertType]=\"alertMessageAndType()[1]\" [alertMessage]=\"alertMessageAndType()[0]\" />\n }\n </div>\n\n @if (showLegend() && !loading() && legendItems().length) {\n <cng-chart-legend [items]=\"legendItems()\" />\n } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n [legendItems]=\"legendItems()\"\n />\n }\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input, OnChanges, output, SimpleChanges } from '@angular/core';\nimport {\n axisRight as d3axisRight,\n curveMonotoneX,\n line as d3line,\n max as d3max,\n scaleBand as d3scaleBand,\n ScaleBand,\n ScaleLinear,\n scaleLinear as d3scaleLinear,\n select as d3select,\n Selection,\n} from 'd3';\nimport { NO_ITEMS_ALERT_TYPE, NO_ITEMS_MESSAGE } from '../constants';\nimport { toChartColor } from '../utils';\nimport { ChartLegendItem } from '../chart-legend/chart-legend.component';\nimport { computeYTickFormat, computeYTickValues, drawXYAxes, styleGridLines } from '../shared/d3-chart-axes';\nimport { ChartBase } from '../shared/chart-base';\n\n// ─── Public types ────────────────────────────────────────────────────────────\n\nexport interface ComboBarPoint {\n /** X category key (must match keys used in line data). */\n x: string;\n /** Optional display label for the X-axis tick. */\n xLabel?: string;\n value: number;\n}\n\nexport interface ComboBarSeries {\n key: string;\n label: string;\n color: string;\n data: ComboBarPoint[];\n}\n\nexport interface ComboLinePoint {\n x: string;\n value: number;\n}\n\nexport interface ComboLineSeries {\n key: string;\n label: string;\n color: string;\n data: ComboLinePoint[];\n}\n\n/** Emitted when the user clicks a bar segment or a line dot. */\nexport interface ComboChartValue {\n seriesKey: string;\n seriesLabel: string;\n seriesType: 'bar' | 'line';\n x: string;\n xLabel?: string;\n value: number;\n}\n\n// ─── Internal ────────────────────────────────────────────────────────────────\n\ninterface SelectedComboItem {\n seriesKey: string;\n seriesLabel: string;\n seriesType: 'bar' | 'line';\n color: string;\n x: string;\n xLabel?: string;\n value: number;\n total: number;\n}\n\n@Component({\n selector: 'clr-combo-chart',\n templateUrl: './combo-chart.component.html',\n styleUrls: ['./combo-chart.component.scss'],\n standalone: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ComboChartComponent extends ChartBase<SelectedComboItem> implements OnChanges {\n // ── Inputs ──────────────────────────────────────────────────────────────────\n public readonly barSeries = input<ComboBarSeries[]>([]);\n public readonly lineSeries = input<ComboLineSeries[]>([]);\n public readonly tooltipOrientation = input<'top' | 'bottom'>('top');\n public readonly showLegend = input(true);\n public readonly showExportButton = input(false);\n public readonly exportButtonTitle = input<string>('Export');\n public readonly exportFilename = input<string>('combo-chart');\n\n public readonly noItemsMessage = input<string>(NO_ITEMS_MESSAGE);\n public readonly tooltipPercentOfTotal = input<string>('of total');\n\n /** Optional label rendered below the X axis. */\n public readonly xAxisLabel = input<string>('');\n /** Optional label rendered rotated to the left of the Y axis (bar scale). */\n public readonly yAxisLabel = input<string>('');\n /** Optional label rendered rotated to the right of the Y axis (line scale). */\n public readonly yLineAxisLabel = input<string>('');\n /** Optional fixed maximum value for the bar Y axis (left). Defaults to auto. */\n public readonly yBarMax = input<number | undefined>(undefined);\n /** Optional fixed maximum value for the line Y axis (right). Defaults to auto. */\n public readonly yLineMax = input<number | undefined>(undefined);\n\n // ── Outputs ─────────────────────────────────────────────────────────────────\n public readonly valueClicked = output<ComboChartValue>();\n\n // ── Layout ───────────────────────────────────────────────────────────────────\n private readonly MARGIN = { top: 20, right: 30, bottom: 30, left: 65 };\n\n // ── Computed ─────────────────────────────────────────────────────────────────\n protected readonly hasData = computed(\n () => this.barSeries().some(s => s.data.length > 0) || this.lineSeries().some(s => s.data.length > 0)\n );\n\n protected readonly total = computed(() => {\n const barTotal = this.barSeries().reduce((acc, s) => acc + s.data.reduce((a, d) => a + d.value, 0), 0);\n const lineTotal = this.lineSeries().reduce((acc, s) => acc + s.data.reduce((a, d) => a + d.value, 0), 0);\n return barTotal + lineTotal;\n });\n\n public readonly alertMessageAndType = computed<[string, string] | undefined>(() => {\n if (this.loading()) {\n return undefined;\n }\n if (!this.hasData()) {\n return [this.noItemsMessage(), NO_ITEMS_ALERT_TYPE];\n }\n return undefined;\n });\n\n public readonly legendItems = computed<ChartLegendItem[]>(() => {\n if (!this.showLegend()) {\n return [];\n }\n const barItems = this.barSeries().map(s => ({ label: s.label, color: s.color }));\n const lineItems = this.lineSeries().map(s => ({ label: s.label, color: s.color }));\n return [...barItems, ...lineItems];\n });\n\n // ── State ────────────────────────────────────────────────────────────────────\n private svg: Selection<SVGSVGElement, unknown, null, undefined>;\n private _clipIdCounter = 0;\n\n // ── Lifecycle ────────────────────────────────────────────────────────────────\n public ngOnChanges(_changes: SimpleChanges): void {\n if (!this.svg) {\n return;\n }\n requestAnimationFrame(() => this.updateChart());\n }\n\n public override ngAfterViewInit(): void {\n this.svg = d3select(this.chartRef().nativeElement);\n super.ngAfterViewInit();\n }\n\n // ── Chart rendering ──────────────────────────────────────────────────────────\n protected updateChart(): void {\n this.svg.selectAll('*').remove();\n\n if (this.loading() || !this.hasData()) {\n return;\n }\n\n const { width: cw, height: ch } = this.getContainerDimensions();\n const extraBottom = this.xAxisLabel() ? 16 : 0;\n const extraLeft = this.yAxisLabel() ? 16 : 0;\n const effectiveLeft = this.MARGIN.left + extraLeft;\n\n // Reserve extra right margin when line series are present (right Y axis)\n const hasLines = this.lineSeries().some(s => s.data.length > 0);\n const extraRight = hasLines ? (this.yLineAxisLabel() ? 50 : 40) : 0;\n\n const width = cw - effectiveLeft - this.MARGIN.right - extraRight;\n const height = ch - this.MARGIN.top - (this.MARGIN.bottom + extraBottom);\n\n // Collect all unique X keys preserving order\n const allBarKeys = this.barSeries().flatMap(s => s.data.map(d => d.x));\n const allLineKeys = this.lineSeries().flatMap(s => s.data.map(d => d.x));\n const xKeys = [...new Set([...allBarKeys, ...allLineKeys])];\n\n // Build X-label map\n const xLabelMap = new Map<string, string>();\n this.barSeries().forEach(s => s.data.forEach(d => xLabelMap.set(d.x, d.xLabel ?? d.x)));\n\n // Outer X scale (one band per category)\n const x = d3scaleBand<string>().domain(xKeys).range([0, width]).paddingInner(0.35).paddingOuter(0.15);\n\n // ── Separate Y scales ────────────────────────────────────────────────────\n // Bar Y scale (left axis)\n const xStackTotals = new Map<string, number>();\n for (const series of this.barSeries()) {\n for (const point of series.data) {\n xStackTotals.set(point.x, (xStackTotals.get(point.x) ?? 0) + point.value);\n }\n }\n const maxBarAuto = d3max([...xStackTotals.values()]) ?? 0;\n const maxBar = this.yBarMax() ?? maxBarAuto;\n const yBar = d3scaleLinear()\n .domain([0, maxBar || 1])\n .nice(this.yBarMax() === undefined ? undefined : 0)\n .range([height, 0]);\n\n // Line Y scale (right axis)\n const maxLineAuto = d3max(this.lineSeries().flatMap(s => s.data.map(d => d.value))) ?? 0;\n const maxLine = this.yLineMax() ?? maxLineAuto;\n const yLine = d3scaleLinear()\n .domain([0, maxLine || 1])\n .nice(this.yLineMax() === undefined ? undefined : 0)\n .range([height, 0]);\n\n // ── SVG ClipPath ─────────────────────────────────────────────────────────\n // Ensures bars/lines that exceed the Y-axis maximum (yBarMax/yLineMax) are\n // visually clipped at the chart boundary without modifying the data values.\n const clipId = `combo-clip-${this._clipIdCounter++}`;\n this.svg\n .append('defs')\n .append('clipPath')\n .attr('id', clipId)\n .append('rect')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', width)\n .attr('height', height);\n\n const g = this.svg\n .attr('width', width)\n .attr('height', height)\n .append('g')\n .attr('transform', `translate(${effectiveLeft},${this.MARGIN.top})`);\n\n drawXYAxes(g, x, yBar, {\n xLabelMap,\n width,\n height,\n xAxisLabel: this.xAxisLabel(),\n yAxisLabel: this.yAxisLabel(),\n effectiveLeft,\n });\n styleGridLines(g);\n\n // ── Right Y axis for line series ─────────────────────────────────────────\n if (hasLines) {\n const lineTickValues = computeYTickValues(yLine);\n const lineTickFormat = computeYTickFormat(yLine);\n const rightAxisG = g\n .append('g')\n .attr('transform', `translate(${width},0)`)\n .call(d3axisRight(yLine).tickValues(lineTickValues).tickFormat(lineTickFormat).tickSize(-width));\n rightAxisG\n .selectAll('text')\n .style('font-size', '11px')\n .style('fill', 'var(--cds-global-color-construction-400, #666)');\n // Style the line-axis grid lines with a distinct dashed color\n rightAxisG\n .selectAll('.tick line')\n .style('stroke', 'var(--cds-global-color-gray-400, #b3b3b3)')\n .style('stroke-dasharray', '4 3')\n .style('stroke-opacity', '0.8');\n // Remove the default domain line so it doesn't overlap the chart\n rightAxisG.select('.domain').remove();\n\n if (this.yLineAxisLabel()) {\n g.append('text')\n .attr('transform', 'rotate(-90)')\n .attr('x', -height / 2)\n .attr('y', width + extraRight - 4)\n .attr('text-anchor', 'middle')\n .style('font-size', '12px')\n .style('fill', 'var(--cds-global-color-construction-400, #666)')\n .text(this.yLineAxisLabel());\n }\n }\n\n // Wrap chart content in a clipped group so elements exceeding the Y max\n // are not visible beyond the chart boundary.\n const contentGroup = g.append('g').attr('clip-path', `url(#${clipId})`);\n\n this.drawBars(contentGroup, x, yBar);\n this.drawLines(contentGroup, x, yLine);\n }\n\n private drawBars(\n g: Selection<SVGGElement, unknown, null, undefined>,\n x: ScaleBand<string>,\n y: ScaleLinear<number, number>\n ): void {\n // Running stack base (cumulative sum) per X key across all bar series\n const stackBase = new Map<string, number>();\n\n for (const series of this.barSeries()) {\n if (!series.data.length) {\n continue;\n }\n\n // Snapshot the base for each point before updating the running total\n type StackedPoint = ComboBarPoint & { base: number };\n const stacked: StackedPoint[] = series.data.map(d => ({\n ...d,\n base: stackBase.get(d.x) ?? 0,\n }));\n\n // Advance running totals for the next series\n for (const d of series.data) {\n stackBase.set(d.x, (stackBase.get(d.x) ?? 0) + d.value);\n }\n\n g.selectAll<SVGRectElement, StackedPoint>(`.bar-${series.key}`)\n .data(stacked, (d: StackedPoint) => d.x)\n .join('rect')\n .attr('class', `bar bar-${series.key}`)\n .attr('x', (d: StackedPoint) => x(d.x) ?? 0)\n .attr('y', (d: StackedPoint) => y(d.base + d.value))\n .attr('width', x.bandwidth())\n .attr('height', (d: StackedPoint) => y(d.base) - y(d.base + d.value))\n .attr('rx', 2)\n .attr('ry', 2)\n .style('fill', toChartColor(series.color))\n .style('cursor', 'pointer')\n .on('mouseover', (e: PointerEvent) => {\n d3select(e.currentTarget as SVGRectElement).attr('fill-opacity', 0.75);\n })\n .on('mouseout', (e: PointerEvent) => {\n d3select(e.currentTarget as SVGRectElement).attr('fill-opacity', 1);\n })\n .on('click', (event: PointerEvent, d: StackedPoint) => {\n event.stopPropagation();\n const rect = (event.currentTarget as SVGRectElement).getBoundingClientRect();\n const container = this.chartRef().nativeElement.getBoundingClientRect();\n this.tooltipPosition.set({\n x: rect.left - container.left + rect.width / 2,\n y: (this.tooltipOrientation() === 'top' ? rect.top : rect.bottom) - container.top,\n });\n this.selectedItem.set({\n seriesKey: series.key,\n seriesLabel: series.label,\n seriesType: 'bar',\n color: series.color,\n x: d.x,\n xLabel: d.xLabel,\n value: d.value,\n total: this.total(),\n });\n });\n }\n }\n\n private drawLines(\n g: Selection<SVGGElement, unknown, null, undefined>,\n x: ScaleBand<string>,\n y: ScaleLinear<number, number>\n ): void {\n // Map X key → band center position for line/dot placement\n const lineX = (key: string) => (x(key) ?? 0) + x.bandwidth() / 2;\n\n const lineGenerator = d3line<ComboLinePoint>()\n .x((d: ComboLinePoint) => lineX(d.x))\n .y((d: ComboLinePoint) => y(d.value))\n .curve(curveMonotoneX);\n\n for (const series of this.lineSeries()) {\n if (!series.data.length) {\n continue;\n }\n\n // Line path\n g.append('path')\n .datum(series.data)\n .attr('class', `combo-line combo-line-${series.key}`)\n .attr('fill', 'none')\n .style('stroke', toChartColor(series.color))\n .attr('stroke-width', 2.5)\n .attr('stroke-linejoin', 'round')\n .attr('stroke-linecap', 'round')\n .attr('d', lineGenerator);\n\n // Dots\n g.selectAll<SVGCircleElement, ComboLinePoint>(`.combo-dot-${series.key}`)\n .data(series.data, (d: ComboLinePoint) => d.x)\n .join('circle')\n .attr('class', `combo-dot combo-dot-${series.key}`)\n .attr('cx', (d: ComboLinePoint) => lineX(d.x))\n .attr('cy', (d: ComboLinePoint) => y(d.value))\n .attr('r', 4)\n .style('fill', toChartColor(series.color))\n .attr('stroke', '#fff')\n .attr('stroke-width', 2)\n .style('cursor', 'pointer')\n .on('mouseover', (e: PointerEvent) => {\n d3select(e.currentTarget as SVGCircleElement).attr('r', 6);\n })\n .on('mouseout', (e: PointerEvent) => {\n d3select(e.currentTarget as SVGCircleElement).attr('r', 4);\n })\n .on('click', (event: PointerEvent, d: ComboLinePoint) => {\n event.stopPropagation();\n const el = event.currentTarget as SVGCircleElement;\n const rect = el.getBoundingClientRect();\n const container = this.chartRef().nativeElement.getBoundingClientRect();\n this.tooltipPosition.set({\n x: rect.left - container.left + rect.width / 2,\n y: (this.tooltipOrientation() === 'top' ? rect.top : rect.bottom) - container.top,\n });\n this.selectedItem.set({\n seriesKey: series.key,\n seriesLabel: series.label,\n seriesType: 'line',\n color: series.color,\n x: d.x,\n value: d.value,\n total: this.total(),\n });\n });\n }\n }\n\n // ── Tooltip ──────────────────────────────────────────────────────────────────\n}\n","<div class=\"chart-container\">\n <div class=\"chart-area\" #container (cngWindowResize)=\"updateChart()\" [class.pt-3]=\"alertMessageAndType()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (tooltipPosition()) {\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipOrientation]=\"tooltipOrientation()\"\n [squareColor]=\"selectedItem()?.color\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n valueClicked.emit({\n seriesKey: selectedItem().seriesKey,\n seriesLabel: selectedItem().seriesLabel,\n seriesType: selectedItem().seriesType,\n x: selectedItem().x,\n xLabel: selectedItem().xLabel,\n value: selectedItem().value,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n ({{ selectedItem().value }}) {{ selectedItem().xLabel || selectedItem().x }}\n </ng-container>\n\n <p class=\"mt-0\">\n <strong>{{ selectedItem().seriesLabel }}:</strong>\n {{ selectedItem().value }}\n </p>\n <p class=\"mt-0\">\n {{ (100 * selectedItem().value) / selectedItem().total | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n </p>\n </cng-chart-tooltip>\n } @if (loading() || !hasData()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" [skeletonType]=\"loading() ? 'loading' : 'placeholder'\" />\n } @if (alertMessageAndType()) {\n <cng-chart-alert-overlay [alertType]=\"alertMessageAndType()[1]\" [alertMessage]=\"alertMessageAndType()[0]\" />\n }\n </div>\n\n @if (showLegend() && !loading() && legendItems().length) {\n <cng-chart-legend [items]=\"legendItems()\" />\n } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n [legendItems]=\"legendItems()\"\n />\n }\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input, OnChanges, output, SimpleChanges } from '@angular/core';\nimport { Arc, arc as d3arc, format as d3format, pie as d3pie, PieArcDatum, select as d3select, Selection } from 'd3';\nimport { NO_ITEMS_ALERT_TYPE, NO_ITEMS_MESSAGE } from '../constants';\nimport { toChartColor } from '../utils';\nimport { ChartLegendItem } from '../chart-legend/chart-legend.component';\nimport { ChartBase } from '../shared/chart-base';\n\nexport interface PieChartData {\n key: string;\n label: string;\n fullLabel?: string;\n value: number;\n color: string;\n}\n\nexport interface PieChartValue {\n key: string;\n label: string;\n value: number;\n}\n\n@Component({\n selector: 'clr-pie-chart',\n templateUrl: './pie-chart.component.html',\n styleUrls: ['./pie-chart.component.scss'],\n standalone: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PieChartComponent extends ChartBase<PieChartData> implements OnChanges {\n public readonly data = input.required<PieChartData[]>();\n public readonly donut = input(true);\n public readonly showLegend = input(true);\n public readonly showExportButton = input(false);\n public readonly exportButtonTitle = input<string>('Export');\n public readonly exportFilename = input<string>('pie-chart');\n public readonly tooltipOrientation = input<'top' | 'bottom'>('top');\n\n public readonly noItemsMessage = input<string>(NO_ITEMS_MESSAGE);\n public readonly tooltipPercentOfTotal = input<string>('of total');\n\n public readonly valueClicked = output<PieChartValue>();\n\n protected readonly hasData = computed(() => this.data()?.some(d => d.value > 0));\n protected readonly total = computed(() => this.data()?.reduce((acc, d) => acc + d.value, 0) ?? 0);\n\n public readonly alertMessageAndType = computed<[string, string] | undefined>(() => {\n if (this.loading()) {\n return undefined;\n }\n if (!this.hasData()) {\n return [this.noItemsMessage(), NO_ITEMS_ALERT_TYPE];\n }\n return undefined;\n });\n\n public readonly legendItems = computed<ChartLegendItem[]>(() => {\n if (!this.showLegend()) {\n return [];\n }\n return (this.data() ?? []).filter(d => d.value > 0).map(d => ({ label: d.fullLabel ?? d.label, color: d.color }));\n });\n\n private svg: Selection<SVGSVGElement, unknown, null, undefined>;\n private arcGen: Arc<any, PieArcDatum<PieChartData>>;\n\n public ngOnChanges(_changes: SimpleChanges): void {\n if (!this.svg) {\n return;\n }\n requestAnimationFrame(() => this.updateChart());\n }\n\n public override ngAfterViewInit(): void {\n this.svg = d3select(this.chartRef().nativeElement);\n super.ngAfterViewInit();\n }\n\n protected updateChart(): void {\n this.svg.selectAll('*').remove();\n\n if (this.loading() || !this.hasData()) {\n return;\n }\n\n const { width, height } = this.getContainerDimensions();\n const radius = Math.min(width, height) / 2;\n const innerRadius = this.donut() ? radius * 0.55 : 0;\n const outerRadius = radius * 0.9;\n\n this.arcGen = d3arc<PieArcDatum<PieChartData>>().innerRadius(innerRadius).outerRadius(outerRadius);\n\n const hoverArc = d3arc<PieArcDatum<PieChartData>>()\n .innerRadius(innerRadius)\n .outerRadius(outerRadius * 1.06);\n\n const pieGen = d3pie<PieChartData>()\n .value(d => d.value)\n .sort(null);\n\n const arcs = pieGen(this.data().filter(d => d.value > 0));\n\n const g = this.svg\n .attr('width', width)\n .attr('height', height)\n .append('g')\n .attr('transform', `translate(${width / 2},${height / 2})`);\n\n // Slices\n g.selectAll<SVGPathElement, PieArcDatum<PieChartData>>('.slice')\n .data(arcs, (d: PieArcDatum<PieChartData>) => d.data.key)\n .join('path')\n .attr('class', 'slice')\n .attr('d', this.arcGen)\n .style('fill', (d: PieArcDatum<PieChartData>) => toChartColor(d.data.color))\n .attr('stroke', '#fff')\n .attr('stroke-width', 2)\n .style('cursor', 'pointer')\n .on('mouseover', (e: PointerEvent) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n d3select(e.currentTarget as SVGPathElement).attr('d', hoverArc as any);\n })\n .on('mouseout', (e: PointerEvent) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n d3select(e.currentTarget as SVGPathElement).attr('d', this.arcGen as any);\n })\n .on('click', (event: PointerEvent, d: PieArcDatum<PieChartData>) => {\n event.stopPropagation();\n this.openTooltip(d, width, height);\n });\n\n // Slice labels – only show when the slice angle is large enough to fit text\n const MIN_ANGLE = 0.4; // ~23°\n const labelRadius = this.donut() ? (innerRadius + outerRadius) / 2 : outerRadius * 0.65;\n const labelArc = d3arc<PieArcDatum<PieChartData>>().innerRadius(labelRadius).outerRadius(labelRadius);\n const total = this.total();\n\n const labelGroups = g\n .selectAll<SVGGElement, PieArcDatum<PieChartData>>('.slice-label')\n .data(\n arcs.filter((d: PieArcDatum<PieChartData>) => d.endAngle - d.startAngle >= MIN_ANGLE),\n (d: PieArcDatum<PieChartData>) => d.data.key\n )\n .join('g')\n .attr('class', 'slice-label')\n .attr('transform', (d: PieArcDatum<PieChartData>) => {\n const [x, y] = labelArc.centroid(d);\n return `translate(${x},${y})`;\n })\n .style('pointer-events', 'none');\n\n labelGroups\n .append('text')\n .attr('class', 'label-value')\n .attr('text-anchor', 'middle')\n .attr('dy', '-0.3em')\n .style('font-size', '11px')\n .style('font-weight', '600')\n .style('fill', '#fff')\n .style('pointer-events', 'none')\n .text((d: PieArcDatum<PieChartData>) => d3format('~s')(d.data.value));\n\n labelGroups\n .append('text')\n .attr('class', 'label-percent')\n .attr('text-anchor', 'middle')\n .attr('dy', '0.9em')\n .style('font-size', '10px')\n .style('fill', 'rgba(255, 255, 255, 0.9)')\n .style('pointer-events', 'none')\n .text((d: PieArcDatum<PieChartData>) => `${((100 * d.data.value) / total).toFixed(1)}%`);\n\n // Center label (donut only)\n if (this.donut()) {\n g.append('text')\n .attr('class', 'center-label')\n .attr('text-anchor', 'middle')\n .attr('dy', '-0.1em')\n .style('font-size', '1.4rem')\n .style('font-weight', '600')\n .style('fill', 'var(--cds-global-color-gray-900, #21333b)')\n .text(d3format('~s')(this.total()));\n\n g.append('text')\n .attr('class', 'center-sublabel')\n .attr('text-anchor', 'middle')\n .attr('dy', '1.2em')\n .style('font-size', '0.65rem')\n .style('fill', 'var(--cds-global-color-construction-400, #666)')\n .style('text-transform', 'uppercase')\n .style('letter-spacing', '0.05em')\n .text('Total');\n }\n }\n\n private openTooltip(d: PieArcDatum<PieChartData>, width: number, height: number): void {\n const [cx, cy] = this.arcGen.centroid(d);\n this.tooltipPosition.set({\n x: width / 2 + cx,\n y: height / 2 + cy,\n });\n this.selectedItem.set(d.data);\n }\n}\n","<div class=\"chart-container\">\n <div class=\"chart-area\" #container (cngWindowResize)=\"updateChart()\" [class.pt-3]=\"alertMessageAndType()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (tooltipPosition()) {\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipOrientation]=\"tooltipOrientation()\"\n [squareColor]=\"selectedItem()?.color\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n valueClicked.emit({\n key: selectedItem().key,\n label: selectedItem().fullLabel || selectedItem().label,\n value: selectedItem().value,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n ({{ selectedItem().value }}) {{ selectedItem().fullLabel || selectedItem().label }}\n </ng-container>\n\n <p class=\"mt-0\">\n {{ (100 * selectedItem().value) / total() | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n </p>\n </cng-chart-tooltip>\n } @if (loading() || !hasData()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" [skeletonType]=\"loading() ? 'loading' : 'placeholder'\" />\n } @if (alertMessageAndType()) {\n <cng-chart-alert-overlay [alertType]=\"alertMessageAndType()[1]\" [alertMessage]=\"alertMessageAndType()[0]\" />\n }\n </div>\n\n @if (showLegend() && !loading() && legendItems().length) {\n <cng-chart-legend [items]=\"legendItems()\" />\n } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n [legendItems]=\"legendItems()\"\n />\n }\n</div>\n","/*\n * Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n OnChanges,\n output,\n signal,\n SimpleChanges,\n} from '@angular/core';\nimport { color as d3color, max as d3max, scaleLinear as d3scaleLinear, select as d3select, Selection } from 'd3';\nimport { toChartColor } from '../utils';\nimport { ChartBase } from '../shared/chart-base';\n\n// ─── Public types ─────────────────────────────────────────────────────────────\n\nexport interface FunnelChartSection {\n key: string;\n label: string;\n value: number;\n /** Hex value ('#009ADB') or CSS custom property ('--cds-global-color-blue-800'). */\n color?: string;\n /** Text color rendered inside this section. */\n textColor?: string;\n}\n\nexport interface FunnelChartData {\n key: string;\n label: string;\n fullLabel?: string;\n description?: string;\n value: number;\n /** Optional breakdown of the bar into named segments. Values should sum to `value`. */\n sections?: FunnelChartSection[];\n}\n\nexport interface FunnelValue {\n value: number;\n label: string;\n key: string;\n /** Key of the clicked section, or `undefined` when the whole bar was clicked. */\n section?: string;\n}\n\nexport interface FunnelChartLabels {\n total: string;\n all: string;\n}\n\n// ─── Internal types ───────────────────────────────────────────────────────────\n\ninterface FunnelDataPointSection {\n key: string;\n label: string;\n x: number;\n width: number;\n value: number;\n percentage: number;\n cssColor: string;\n hoverColor: string;\n textColor: string;\n}\n\ninterface FunnelDataPoint {\n key: string;\n label: string;\n fullLabel?: string;\n description?: string;\n value: number;\n y: number;\n width: number;\n percentage: number;\n delta?: number;\n deltaPercentage?: number;\n sections: FunnelDataPointSection[];\n}\n\ninterface SectionTooltipData {\n key: string;\n x?: number;\n y?: number;\n description?: string;\n}\n\ninterface CenteredDataPoint {\n key: string;\n label: string;\n fullLabel?: string;\n description?: string;\n value: number;\n sections?: FunnelChartSection[];\n y: number;\n width: number;\n percentage: number;\n delta?: number;\n deltaPercentage?: number;\n}\n\ninterface SpacerDataPoint {\n index: number;\n topWidth: number;\n bottomWidth: number;\n topY: number;\n bottomY: number;\n topX: number;\n bottomX: number;\n deltaPercentage: number;\n}\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\nconst DEFAULT_SECTION_COLORS = ['#009ADB', '#66D1FF', '#D9D9D9', '#A6A6A6'];\nconst DEFAULT_TEXT_COLORS = ['#eee', '#eee', '#555', '#eee'];\n\nconst DEFAULT_CHART_LABELS: FunnelChartLabels = {\n total: 'Total',\n all: 'All',\n};\n\n@Component({\n selector: 'clr-funnel-chart',\n templateUrl: './funnel-chart.component.html',\n styleUrls: ['./funnel-chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class FunnelChartComponent extends ChartBase<FunnelDataPoint> implements OnChanges {\n // ── Inputs ──────────────────────────────────────────────────────────────────\n public readonly data = input<FunnelChartData[]>([]);\n public readonly showExportButton = input(false);\n public readonly exportButtonTitle = input<string>('Export');\n public readonly exportFilename = input<string>('funnel-chart');\n\n /** Rendering mode. 'default' = horizontal bars with sections; 'centered' = centered trapezoid funnel. */\n public readonly orientation = input<'default' | 'centered'>('default');\n\n /** Width reserved on each side for labels (px). */\n public readonly textSize = input(200);\n /** Gap between funnel bars and their side-line labels (px). */\n public readonly lineTextPadding = input(8);\n /** Vertical gap between funnel bars – default mode only (px). */\n public readonly barGap = input(2);\n /** Vertical padding inside the side measurement lines (px). */\n public readonly sideLineVerticalPadding = input(4);\n\n // ── Centered-mode specific inputs ────────────────────────────────────────────\n /** Minimum length of the horizontal measurement lines on each side (px). Centered mode only. */\n public readonly minLineSize = input(30);\n /** Ratio of bar height to spacer height. Centered mode only. */\n public readonly barToSpacerRatio = input(2);\n /** Vertical padding inside the center divider lines (px). Centered mode only. */\n public readonly middleLineVerticalPadding = input(4);\n /** Fill color of the centered-mode bars. Accepts hex or CSS custom property. Centered mode only. */\n public readonly barColor = input<string>(DEFAULT_SECTION_COLORS[0]);\n /** Fill color of the trapezoid spacers. Accepts hex or CSS custom property. Centered mode only. */\n public readonly spacerColor = input<string>('#D9D9D9');\n\n /**\n * Override the chart labels shown in the tooltip (total / all rows).\n * Partial – any key not provided falls back to the English default.\n */\n public readonly chartLabels = input<Partial<FunnelChartLabels>>({});\n\n /**\n * Override section colors by section key.\n * Accepts hex values ('#009ADB') or CSS custom properties ('--cds-global-color-blue-800').\n * Per-section `color` in the data takes priority over this map; this map takes priority over\n * the built-in default palette.\n */\n public readonly sectionColors = input<Record<string, string>>({});\n\n // ── Outputs ─────────────────────────────────────────────────────────────────\n public readonly valueClicked = output<FunnelValue>();\n\n // ── Computed ─────────────────────────────────────────────────────────────────\n protected readonly resolvedChartLabels = computed<FunnelChartLabels>(() => ({\n ...DEFAULT_CHART_LABELS,\n ...this.chartLabels(),\n }));\n\n /** CSS-ready color for the centered-mode bar. */\n protected readonly centeredBarCssColor = computed(() => toChartColor(this.barColor()));\n\n /** CSS-ready spacer color. */\n protected readonly centeredSpacerCssColor = computed(() => toChartColor(this.spacerColor()));\n\n protected readonly total = computed(() => this.data()[0]?.value ?? 0);\n\n protected readonly hasData = computed(() => this.data().length > 0);\n\n // ── State ─────────────────────────────────────────────────────────────────────\n protected readonly selectedItemLabel = computed(\n () => this.selectedItem()?.fullLabel ?? this.selectedItem()?.label ?? ''\n );\n protected readonly selectedSpacerItem = signal<SpacerDataPoint | undefined>(undefined);\n protected readonly sectionTooltips = signal<SectionTooltipData[]>([]);\n\n private svg: Selection<SVGSVGElement, unknown, null, undefined>;\n\n // ── Lifecycle ────────────────────────────────────────────────────────────────\n\n public ngOnChanges(_changes: SimpleChanges): void {\n if (!this.svg) {\n return;\n }\n requestAnimationFrame(() => this.updateChart());\n }\n\n public override ngAfterViewInit(): void {\n this.svg = d3select(this.chartRef().nativeElement);\n super.ngAfterViewInit();\n }\n\n // ── Chart rendering ──────────────────────────────────────────────────────────\n protected updateChart(): void {\n if (!this.svg) {\n return;\n }\n this.svg.selectAll('*').remove();\n\n if (this.loading() || !this.hasData()) {\n return;\n }\n\n const { width: containerWidth, height: containerHeight } = this.getContainerDimensions();\n\n if (this.orientation() === 'centered') {\n this.renderCenteredChart(containerWidth, containerHeight);\n } else {\n const funnelWidth = this.getFunnelWidth(containerWidth);\n const barHeight = this.getBarHeight(containerHeight);\n const dataPoints = this.calculateDataPoints(funnelWidth, barHeight);\n this.renderRightSideText(dataPoints, containerWidth, barHeight);\n this.renderLeftSideText(dataPoints, barHeight);\n this.renderSideLines(dataPoints, containerWidth, funnelWidth, barHeight);\n this.renderFunnel(dataPoints, containerWidth, containerHeight, funnelWidth, barHeight);\n }\n }\n\n // ── Data calculation ─────────────────────────────────────────────────────────\n private calculateDataPoints(funnelWidth: number, barHeight: number): FunnelDataPoint[] {\n const maxValue = d3max(this.data(), d => d.value) ?? 1;\n const widthScale = d3scaleLinear().domain([0, maxValue]).range([0, funnelWidth]);\n const sectionColorOverrides = this.sectionColors();\n\n return this.data().map((d, i) => {\n let xOffset = 0;\n\n const sections: FunnelDataPointSection[] = (d.sections ?? []).map((s, si) => {\n const rawColor =\n s.color ?? sectionColorOverrides[s.key] ?? DEFAULT_SECTION_COLORS[si % DEFAULT_SECTION_COLORS.length];\n const cssColor = toChartColor(rawColor);\n const hoverColor = rawColor.startsWith('--')\n ? cssColor\n : d3color(rawColor)?.darker(0.5)?.formatHex() ?? cssColor;\n const textColor = s.textColor ?? DEFAULT_TEXT_COLORS[si % DEFAULT_TEXT_COLORS.length];\n const sWidth = widthScale(s.value);\n\n const sec: FunnelDataPointSection = {\n key: s.key,\n label: s.label,\n x: xOffset,\n width: sWidth,\n value: s.value,\n percentage: d.value ? this.round((s.value / d.value) * 100) : 0,\n cssColor,\n hoverColor,\n textColor,\n };\n xOffset += sWidth;\n return sec;\n });\n\n const point: FunnelDataPoint = {\n ...d,\n sections,\n y: i * (barHeight + this.barGap()),\n width: widthScale(d.value),\n percentage: this.total() ? this.round((d.value / this.total()) * 100) : 0,\n };\n\n if (i > 0) {\n const previousValue = this.data()[i - 1].value;\n point.delta = previousValue - d.value;\n point.deltaPercentage = previousValue === 0 ? 0 : this.round((point.delta / previousValue) * 100);\n }\n\n return point;\n });\n }\n\n // ── Rendering helpers ────────────────────────────────────────────────────────\n private renderRightSideText(dataPoints: FunnelDataPoint[], containerWidth: number, barHeight: number): void {\n const rightG = this.svg.append('g').attr('transform', `translate(${containerWidth - this.textSize()},0)`);\n\n dataPoints.forEach((d, i) => {\n if (i === 0) {\n return;\n }\n const prev = dataPoints[i - 1];\n const labelY = (prev.y + barHeight + d.y) / 2 + 4;\n rightG\n .append('text')\n .attr('x', 0)\n .attr('y', labelY)\n .attr('text-anchor', 'start')\n .style('font-size', '12px')\n .style('fill', 'var(--cds-global-color-construction-400, #666)')\n .text(`-${this.round(d.deltaPercentage)}% (${d.delta})`);\n });\n }\n\n private renderLeftSideText(dataPoints: FunnelDataPoint[], barHeight: number): void {\n const leftG = this.svg.append('g');\n const ICON_SPACE = 20;\n const positions: SectionTooltipData[] = [];\n\n dataPoints.forEach(d => {\n const labelY = (d.y + barHeight + d.y) / 2 + 4;\n const iconSpacing = d.description ? ICON_SPACE : 0;\n\n const textLength = leftG\n .append('text')\n .attr('x', this.textSize() - iconSpacing)\n .attr('y', labelY - 8)\n .attr('text-anchor', 'end')\n .style('font-size', '13px')\n .style('font-weight', '600')\n .style('fill', 'var(--cds-global-color-gray-900, #21333b)')\n .style('cursor', 'pointer')\n .text(d.label)\n .on('click', () => this.valueClicked.emit({ value: d.value, label: d.label, key: d.key }))\n .node()\n .getComputedTextLength();\n\n if (d.description) {\n positions.push({\n x: this.textSize() - iconSpacing + 5,\n y: labelY - 24,\n key: d.key,\n description: d.description,\n });\n }\n\n leftG\n .append('line')\n .attr('x1', this.textSize() - textLength - iconSpacing)\n .attr('y1', labelY - 5)\n .attr('x2', this.textSize() - iconSpacing)\n .attr('y2', labelY - 5)\n .attr('stroke', 'var(--cds-global-color-construction-400, #666)')\n .attr('stroke-width', 2)\n .attr('stroke-dasharray', '2,2');\n\n leftG\n .append('text')\n .attr('x', this.textSize())\n .attr('y', labelY + 10)\n .attr('text-anchor', 'end')\n .style('font-size', '12px')\n .style('fill', 'var(--cds-global-color-construction-400, #666)')\n .text(`${this.round(d.percentage)}% (${d.value})`);\n });\n\n this.sectionTooltips.set(positions);\n }\n\n private renderSideLines(\n dataPoints: FunnelDataPoint[],\n containerWidth: number,\n funnelWidth: number,\n barHeight: number\n ): void {\n const lineG = this.svg.append('g').attr('transform', `translate(${(containerWidth - funnelWidth) / 2},0)`);\n\n dataPoints.forEach(d => {\n const midY = d.y + barHeight / 2;\n\n lineG\n .append('line')\n .attr('x1', 0)\n .attr('y1', midY)\n .attr('x2', funnelWidth)\n .attr('y2', midY)\n .attr('stroke', '#D9D9D9')\n .attr('stroke-width', 1);\n\n this.renderSideLine(lineG, funnelWidth, d.y, barHeight);\n\n if (d.value === 0) {\n this.renderSideLine(lineG, 0, d.y, barHeight);\n }\n });\n }\n\n private renderSideLine(\n g: Selection<SVGGElement, unknown, null, undefined>,\n x: number,\n y: number,\n barHeight: number\n ): void {\n g.append('line')\n .attr('x1', x)\n .attr('y1', y + this.sideLineVerticalPadding())\n .attr('x2', x)\n .attr('y2', y + barHeight - this.sideLineVerticalPadding())\n .attr('stroke', '#D9D9D9')\n .attr('stroke-width', 1);\n }\n\n private renderFunnel(\n dataPoints: FunnelDataPoint[],\n containerWidth: number,\n containerHeight: number,\n funnelWidth: number,\n barHeight: number\n ): void {\n const funnelG = this.svg\n .attr('width', containerWidth)\n .attr('height', containerHeight)\n .append('g')\n .attr('transform', `translate(${(containerWidth - funnelWidth) / 2},0)`);\n\n // First pass: all rects (z-order: rects below texts)\n dataPoints.forEach(dp => {\n dp.sections.forEach(section => {\n funnelG\n .append('rect')\n .attr('x', section.x)\n .attr('y', dp.y)\n .attr('width', section.width)\n .attr('height', barHeight)\n .style('fill', section.cssColor)\n .style('cursor', 'pointer')\n .on('mouseover', e => {\n d3select(e.currentTarget).style('fill', section.hoverColor);\n })\n .on('mouseout', e => {\n d3select(e.currentTarget).style('fill', section.cssColor);\n })\n .on('click', (event: PointerEvent) => {\n this.handleSectionClick(event, dp, section.key);\n });\n });\n });\n\n // Second pass: texts on top\n dataPoints.forEach(dp => {\n dp.sections.forEach(section => {\n if (section.width > 40) {\n funnelG\n .append('text')\n .attr('x', section.x + section.width / 2)\n .attr('y', dp.y + barHeight / 2)\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .style('font-size', '13px')\n .style('font-weight', '600')\n .style('pointer-events', 'none')\n .style('fill', section.textColor)\n .text(`${section.percentage}%`);\n }\n });\n });\n }\n\n // ── Event handlers ────────────────────────────────────────────────────────────\n private handleSectionClick(event: PointerEvent, d: FunnelDataPoint, _sectionKey: string): void {\n event.stopPropagation();\n const target = event.currentTarget as SVGElement;\n const rect = target.getBoundingClientRect();\n const container = this.chartRef().nativeElement.getBoundingClientRect();\n this.tooltipPosition.set({\n x: rect.left - container.left + rect.width / 2,\n y: rect.bottom - container.top,\n });\n this.selectedItem.set(d);\n }\n\n public override resetTooltip(): void {\n if (this.selectedItem() || this.selectedSpacerItem() || this.tooltipPosition()) {\n this.selectedItem.set(undefined);\n this.selectedSpacerItem.set(undefined);\n this.tooltipPosition.set(undefined);\n }\n }\n\n /** Formats a percentage to 2 decimal places for template use. */\n protected pct(value: number, total: number): number {\n return this.round(total ? (value / total) * 100 : 0);\n }\n\n // ── Centered chart ────────────────────────────────────────────────────────────\n private renderCenteredChart(containerWidth: number, containerHeight: number): void {\n const maxFunnelWidth = this.getMaxFunnelWidth(containerWidth);\n const barHeight = this.getCenteredBarHeight(containerHeight);\n const spacerHeight = this.getCenteredSpacerHeight(containerHeight);\n\n const dataPoints = this.calculateCenteredDataPoints(maxFunnelWidth, barHeight, spacerHeight);\n const spacerPoints = this.calculateSpacerDataPoints(dataPoints, maxFunnelWidth, barHeight);\n\n this.renderCenteredLeftSideText(dataPoints, barHeight);\n this.renderCenteredLeftSideLines(dataPoints, maxFunnelWidth, barHeight);\n this.renderCenteredRightSideText(dataPoints, containerWidth, barHeight);\n this.renderCenteredRightSideLines(dataPoints, containerWidth, maxFunnelWidth, barHeight);\n this.renderCenteredMiddleLines(dataPoints, spacerPoints, containerWidth, barHeight);\n this.renderCenteredFunnel(\n dataPoints,\n spacerPoints,\n containerWidth,\n containerHeight,\n maxFunnelWidth,\n barHeight,\n spacerHeight\n );\n }\n\n private calculateCenteredDataPoints(\n maxFunnelWidth: number,\n barHeight: number,\n spacerHeight: number\n ): CenteredDataPoint[] {\n const total = this.data()[0]?.value ?? 1;\n const maxValue = d3max(this.data(), d => d.value) ?? 1;\n const scale = d3scaleLinear().domain([0, maxValue]).range([0, maxFunnelWidth]);\n\n return this.data().map((d, i) => {\n const point: CenteredDataPoint = {\n ...d,\n y: i * (barHeight + spacerHeight),\n width: scale(d.value),\n percentage: total ? this.round((d.value / total) * 100) : 0,\n };\n if (i > 0) {\n const prev = this.data()[i - 1].value;\n point.delta = prev - d.value;\n point.deltaPercentage = prev === 0 ? 0 : this.round((point.delta / prev) * 100);\n }\n return point;\n });\n }\n\n private calculateSpacerDataPoints(\n dataPoints: CenteredDataPoint[],\n maxFunnelWidth: number,\n barHeight: number\n ): SpacerDataPoint[] {\n const spacers: SpacerDataPoint[] = [];\n for (let i = 0; i < dataPoints.length - 1; i++) {\n const cur = dataPoints[i];\n const next = dataPoints[i + 1];\n spacers.push({\n index: i,\n topWidth: cur.width,\n bottomWidth: next.width,\n topY: cur.y + barHeight,\n bottomY: next.y,\n topX: (maxFunnelWidth - cur.width) / 2,\n bottomX: (maxFunnelWidth - next.width) / 2,\n deltaPercentage: next.deltaPercentage ?? 0,\n });\n }\n return spacers;\n }\n\n private renderCenteredLeftSideText(dataPoints: CenteredDataPoint[], barHeight: number): void {\n const g = this.svg.append('g').attr('transform', `translate(${this.textSize()},0)`);\n const ICON_SPACE = 20;\n const positions: SectionTooltipData[] = [];\n\n dataPoints.forEach(d => {\n const cy = d.y + barHeight / 2;\n const iconSpacing = d.description ? ICON_SPACE : 0;\n\n const textLen = g\n .append('text')\n .attr('x', -iconSpacing)\n .attr('y', cy - 8)\n .attr('text-anchor', 'end')\n .style('font-size', '13px')\n .style('font-weight', '600')\n .style('fill', 'var(--cds-global-color-gray-900, #21333b)')\n .style('cursor', 'pointer')\n .text(d.label)\n .on('click', () => this.valueClicked.emit({ value: d.value, label: d.label, key: d.key }))\n .node()\n .getComputedTextLength();\n\n if (d.description) {\n positions.push({ key: d.key, x: this.textSize() - iconSpacing + 5, y: cy - 24, description: d.description });\n }\n\n g.append('line')\n .attr('x1', -textLen - iconSpacing)\n .attr('y1', cy - 5)\n .attr('x2', -iconSpacing)\n .attr('y2', cy - 5)\n .attr('stroke', 'var(--cds-global-color-construction-400, #666)')\n .attr('stroke-width', 2)\n .attr('stroke-dasharray', '2,2');\n\n g.append('text')\n .attr('x', 0)\n .attr('y', cy + 10)\n .attr('text-anchor', 'end')\n .style('font-size', '12px')\n .style('fill', 'var(--cds-global-color-construction-400, #666)')\n .text(`${this.round(d.percentage)}% (${d.value})`);\n });\n\n this.sectionTooltips.set(positions);\n }\n\n private renderCenteredLeftSideLines(\n dataPoints: CenteredDataPoint[],\n maxFunnelWidth: number,\n barHeight: number\n ): void {\n const g = this.svg.append('g').attr('transform', `translate(${this.textSize() + this.lineTextPadding()},0)`);\n dataPoints.forEach(d => {\n g.append('line')\n .attr('x1', 0)\n .attr('y1', d.y + barHeight / 2)\n .attr('x2', maxFunnelWidth / 2 + this.minLineSize())\n .attr('y2', d.y + barHeight / 2)\n .attr('stroke', '#D9D9D9')\n .attr('stroke-width', 1);\n });\n }\n\n private renderCenteredRightSideText(\n dataPoints: CenteredDataPoint[],\n containerWidth: number,\n barHeight: number\n ): void {\n const g = this.svg.append('g').attr('transform', `translate(${containerWidth - this.textSize()},0)`);\n dataPoints.forEach((d, i) => {\n if (i === 0) {\n return;\n }\n const prev = dataPoints[i - 1];\n const cy = (prev.y + barHeight + d.y) / 2 + 4;\n g.append('text')\n .attr('x', 0)\n .attr('y', cy)\n .attr('text-anchor', 'start')\n .style('font-size', '12px')\n .style('fill', 'var(--cds-global-color-construction-400, #666)')\n .text(`-${this.round(d.deltaPercentage)}% (${d.delta})`);\n });\n }\n\n private renderCenteredRightSideLines(\n dataPoints: CenteredDataPoint[],\n containerWidth: number,\n maxFunnelWidth: number,\n barHeight: number\n ): void {\n const g = this.svg.append('g').attr('transform', `translate(${containerWidth / 2},0)`);\n dataPoints.forEach((d, i) => {\n if (i === 0) {\n return;\n }\n const prev = dataPoints[i - 1];\n const cy = (prev.y + barHeight + d.y) / 2;\n g.append('line')\n .attr('x1', 0)\n .attr('y1', cy)\n .attr('x2', maxFunnelWidth / 2 + this.minLineSize())\n .attr('y2', cy)\n .attr('stroke', '#D9D9D9')\n .attr('stroke-width', 1);\n });\n }\n\n private renderCenteredMiddleLines(\n dataPoints: CenteredDataPoint[],\n spacerPoints: SpacerDataPoint[],\n containerWidth: number,\n barHeight: number\n ): void {\n const vPad = this.middleLineVerticalPadding();\n const g = this.svg.append('g').attr('transform', `translate(${containerWidth / 2},0)`);\n\n g.selectAll('.bar-mid')\n .data(dataPoints)\n .enter()\n .append('line')\n .attr('x1', 0)\n .attr('y1', d => d.y + vPad)\n .attr('x2', 0)\n .attr('y2', d => d.y + barHeight - vPad)\n .attr('stroke', '#D9D9D9')\n .attr('stroke-width', 1);\n\n g.selectAll('.spacer-mid')\n .data(spacerPoints)\n .enter()\n .append('line')\n .attr('x1', 0)\n .attr('y1', d => d.topY + vPad)\n .attr('x2', 0)\n .attr('y2', d => d.bottomY - vPad)\n .attr('stroke', '#D9D9D9')\n .attr('stroke-width', 1);\n }\n\n private renderCenteredFunnel(\n dataPoints: CenteredDataPoint[],\n spacerPoints: SpacerDataPoint[],\n containerWidth: number,\n containerHeight: number,\n maxFunnelWidth: number,\n barHeight: number,\n spacerHeight: number\n ): void {\n const g = this.svg\n .attr('width', containerWidth)\n .attr('height', containerHeight)\n .append('g')\n .attr('transform', `translate(${(containerWidth - maxFunnelWidth) / 2},0)`);\n\n // ── Bars ──────────────────────────────────────────────────────────────────\n const rawBarColor = this.barColor();\n const cssBarColor = toChartColor(rawBarColor);\n const hoverBarColor = rawBarColor.startsWith('--')\n ? cssBarColor\n : d3color(rawBarColor)?.darker(0.5)?.formatHex() ?? cssBarColor;\n\n const bars = g\n .selectAll<SVGGElement, CenteredDataPoint>('.c-bar')\n .data(dataPoints)\n .enter()\n .append('g')\n .attr('class', 'c-bar');\n\n bars\n .append('rect')\n .attr('x', d => (maxFunnelWidth - d.width) / 2)\n .attr('y', d => d.y)\n .attr('width', d => d.width)\n .attr('height', barHeight)\n .style('fill', cssBarColor)\n .style('cursor', 'pointer')\n .on('mouseover', e => {\n d3select(e.currentTarget).style('fill', hoverBarColor);\n })\n .on('mouseout', e => {\n d3select(e.currentTarget).style('fill', cssBarColor);\n })\n .on('click', (event: PointerEvent, d: CenteredDataPoint) => {\n event.stopPropagation();\n const rect = (event.currentTarget as SVGElement).getBoundingClientRect();\n const cont = this.chartRef().nativeElement.getBoundingClientRect();\n this.tooltipPosition.set({ x: rect.left - cont.left + rect.width / 2, y: rect.top - cont.top });\n this.selectedSpacerItem.set(undefined);\n this.selectedItem.set(d as unknown as FunnelDataPoint);\n });\n\n bars\n .selectAll<SVGTextElement, CenteredDataPoint>('.c-bar-label')\n .data(dataPoints.filter(d => d.width > 40))\n .enter()\n .append('text')\n .attr('x', maxFunnelWidth / 2)\n .attr('y', d => d.y + barHeight / 2)\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .style('font-size', '13px')\n .style('font-weight', '600')\n .style('pointer-events', 'none')\n .style('fill', '#eee')\n .text(d => `${this.round(d.percentage)}%`);\n\n // ── Spacers ───────────────────────────────────────────────────────────────\n const rawSpacerColor = this.spacerColor();\n const cssSpacerColor = toChartColor(rawSpacerColor);\n const hoverSpacerColor = rawSpacerColor.startsWith('--')\n ? cssSpacerColor\n : d3color(rawSpacerColor)?.darker(0.2)?.formatHex() ?? cssSpacerColor;\n\n g.selectAll<SVGPolygonElement, SpacerDataPoint>('.c-spacer')\n .data(spacerPoints)\n .enter()\n .append('polygon')\n .attr('class', 'c-spacer')\n .attr(\n 'points',\n d =>\n `${d.topX},${d.topY} ${d.topX + d.topWidth},${d.topY} ${d.bottomX + d.bottomWidth},${d.bottomY} ${\n d.bottomX\n },${d.bottomY}`\n )\n .style('fill', cssSpacerColor)\n .style('cursor', 'pointer')\n .on('mouseover', e => {\n d3select(e.currentTarget).style('fill', hoverSpacerColor);\n })\n .on('mouseout', e => {\n d3select(e.currentTarget).style('fill', cssSpacerColor);\n })\n .on('click', (event: PointerEvent, d: SpacerDataPoint) => {\n event.stopPropagation();\n const rect = (event.currentTarget as SVGElement).getBoundingClientRect();\n const cont = this.chartRef().nativeElement.getBoundingClientRect();\n this.tooltipPosition.set({ x: rect.left - cont.left + rect.width / 2, y: rect.top - cont.top });\n this.selectedItem.set(undefined);\n this.selectedSpacerItem.set(d);\n });\n\n g.selectAll<SVGTextElement, SpacerDataPoint>('.c-spacer-label')\n .data(spacerPoints.filter(d => d.bottomWidth > 40))\n .enter()\n .append('text')\n .attr('x', maxFunnelWidth / 2)\n .attr('y', d => d.topY + spacerHeight / 2)\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .style('font-size', '13px')\n .style('font-weight', '600')\n .style('pointer-events', 'none')\n .style('fill', '#333')\n .text(d => `-${this.round(d.deltaPercentage)}%`);\n }\n\n // ── Helpers ───────────────────────────────────────────────────────────────────\n private getMaxFunnelWidth(containerWidth: number): number {\n return containerWidth - this.textSize() * 2 - this.minLineSize() * 2 - this.lineTextPadding() * 2;\n }\n\n private getCenteredFractionHeight(containerHeight: number): number {\n return containerHeight / (this.data().length * (this.barToSpacerRatio() + 1) - 1);\n }\n\n private getCenteredBarHeight(containerHeight: number): number {\n return this.getCenteredFractionHeight(containerHeight) * this.barToSpacerRatio();\n }\n\n private getCenteredSpacerHeight(containerHeight: number): number {\n return this.getCenteredFractionHeight(containerHeight);\n }\n\n private getFunnelWidth(containerWidth: number): number {\n return containerWidth - this.textSize() * 2 - this.lineTextPadding() * 2;\n }\n\n private getBarHeight(containerHeight: number): number {\n const n = this.data().length;\n if (n === 0) {\n return 0;\n }\n return (containerHeight - (n - 1) * this.barGap()) / n;\n }\n\n private round(value: number, decimals = 2): number {\n const factor = 10 ** decimals;\n return Math.round(factor * value) / factor;\n }\n}\n","<div class=\"funnel-container\" #container (cngWindowResize)=\"updateChart()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (!loading()) { @for (pos of sectionTooltips(); track pos.key) {\n <clr-signpost [style.left.px]=\"pos.x\" [style.top.px]=\"pos.y\">\n <cds-icon clrSignpostTrigger shape=\"info-circle\" size=\"18\" />\n <clr-signpost-content clrPosition=\"bottom-left\">\n <p class=\"mt-0\">{{ pos.description }}</p>\n </clr-signpost-content>\n </clr-signpost>\n } } @if (loading()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" skeletonType=\"loading\" />\n } @if (tooltipPosition()) { @if (orientation() === 'centered') {\n\n <!-- ── Centered mode tooltip ─────────────────────────────────────────── -->\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n tooltipOrientation=\"bottom\"\n [squareColor]=\"selectedSpacerItem() ? centeredSpacerCssColor() : centeredBarCssColor()\"\n [tooltipClickable]=\"!selectedSpacerItem()\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n selectedItem() && valueClicked.emit({\n value: selectedItem().value,\n label: selectedItem().label,\n key: selectedItem().key,\n section: undefined,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n @if (selectedSpacerItem()) {\n {{ data()[selectedSpacerItem().index].label }} → {{ data()[selectedSpacerItem().index + 1].label }} } @else { ({{\n selectedItem().value\n }}) {{ selectedItem().label }}\n }\n </ng-container>\n\n @if (selectedSpacerItem()) {\n <p class=\"mt-0\">\n <strong\n >{{ data()[selectedSpacerItem().index].value }} → {{ data()[selectedSpacerItem().index + 1].value }}</strong\n >\n </p>\n @for (section of (data()[selectedSpacerItem().index].sections ?? []); track section.key) { @let drillable =\n section.value > 0;\n <p class=\"tooltip-row mt-0 mt-0-5 d-flex\">\n <strong>{{ section.label }}:&nbsp;</strong>\n <span\n class=\"row-right\"\n [class.has-more-info]=\"drillable\"\n (click)=\"\n drillable && valueClicked.emit({\n value: section.value,\n label: data()[selectedSpacerItem().index].label + ': ' + section.label,\n key: data()[selectedSpacerItem().index].key,\n section: section.key,\n })\n \"\n >{{ section.value }}</span\n >\n &nbsp;({{ pct(section.value, data()[selectedSpacerItem().index].value) }}%)\n </p>\n } } @else {\n <p class=\"mt-0\">{{ pct(selectedItem().value, total()) }}% {{ resolvedChartLabels().all }}</p>\n }\n </cng-chart-tooltip>\n\n } @else {\n\n <!-- ── Default mode tooltip ──────────────────────────────────────────── -->\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n tooltipOrientation=\"bottom\"\n [squareColor]=\"undefined\"\n [tooltipClickable]=\"false\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n >\n <ng-container ngProjectAs=\"cng-title\">{{ selectedItemLabel() }}</ng-container>\n @for (section of selectedItem().sections; track section.key) { @let drillable = section.value > 0;\n <p class=\"tooltip-row mt-0 mt-0-5 d-flex\">\n <span>\n <div class=\"color-square mr-0-5\" [style.background-color]=\"section.cssColor\"></div>\n </span>\n <strong>{{ section.label }}:&nbsp;</strong>\n <span\n class=\"row-right\"\n [class.has-more-info]=\"drillable\"\n (click)=\"\n drillable && valueClicked.emit({\n value: section.value,\n label: selectedItemLabel() + ': ' + section.label,\n key: selectedItem().key,\n section: section.key,\n })\n \"\n >{{ section.value }}</span\n >\n &nbsp;({{ section.percentage }}%)\n </p>\n }\n\n <p class=\"tooltip-row mt-0-5\">\n <strong>{{ resolvedChartLabels().total }}:&nbsp;</strong>\n <span\n class=\"has-more-info\"\n (click)=\"\n valueClicked.emit({\n value: selectedItem().value,\n label: selectedItemLabel(),\n key: selectedItem().key,\n section: undefined\n })\n \"\n >{{ selectedItem().value }}</span\n >\n </p>\n\n <ng-container ngProjectAs=\"cng-footer\">\n <p class=\"tooltip-row mt-0\">\n <strong>{{ resolvedChartLabels().all }}:&nbsp;</strong>\n <span class=\"row-right\">{{ total() }}</span>\n </p>\n </ng-container>\n </cng-chart-tooltip>\n\n } } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n class=\"funnel-export-btn\"\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n />\n }\n</div>\n","import { Directive, ElementRef, inject, OnDestroy, OnInit } from '@angular/core';\nimport { ClrSignpostContent } from '@clr/angular';\n\ntype SignpostPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n\nconst PREFERRED_ORDER: SignpostPosition[] = ['top-right', 'top-left', 'bottom-right', 'bottom-left'];\n\n@Directive({\n selector: 'clr-signpost-content[autoPosition]',\n standalone: true,\n})\nexport class AutoPositionDirective implements OnInit, OnDestroy {\n private readonly signpostContent = inject(ClrSignpostContent, { optional: true });\n private readonly elementRef = inject(ElementRef);\n private resizeObserver?: ResizeObserver;\n private trigger?: Element;\n\n public ngOnInit(): void {\n const signpost = this.elementRef.nativeElement.closest('clr-signpost');\n this.trigger = signpost?.querySelector('[clrSignpostTrigger]');\n\n if (this.trigger) {\n this.trigger.addEventListener('mousedown', this.handleMouseDown);\n }\n\n this.resizeObserver = new ResizeObserver(() => {\n if (!this.elementRef.nativeElement.classList.contains('is-off-screen')) {\n this.updatePosition();\n }\n });\n this.resizeObserver.observe(document.body);\n }\n\n private readonly handleMouseDown = (): void => {\n // Only calculate when signpost is closed (about to open)\n if (this.elementRef.nativeElement.classList.contains('is-off-screen')) {\n this.updatePosition();\n }\n };\n\n private updatePosition(): void {\n if (!this.signpostContent || !this.trigger) {\n return;\n }\n\n const triggerRect = this.trigger.getBoundingClientRect();\n this.signpostContent.position = this.getBestPosition(triggerRect);\n }\n\n private getBestPosition(triggerRect: DOMRect): SignpostPosition {\n const contentWidth = 300;\n const contentHeight = 200;\n const buffer = 50;\n const contentHeaderHeight = document.querySelector('.content-header')?.getBoundingClientRect().height ?? 0;\n const appHeaderHight = document.querySelector('.header')?.getBoundingClientRect().height ?? 0;\n const headerHeight = contentHeaderHeight + appHeaderHight;\n\n // Find first position with enough space\n for (const pos of PREFERRED_ORDER) {\n if (this.hasSpace(triggerRect, pos, contentWidth, contentHeight, headerHeight, buffer)) {\n return pos;\n }\n }\n\n return PREFERRED_ORDER[0]; // Fallback to first preference\n }\n\n private hasSpace(\n rect: DOMRect,\n position: SignpostPosition,\n width: number,\n height: number,\n headerHeight: number,\n buffer: number\n ): boolean {\n const [vertical, horizontal] = position.split('-') as ['top' | 'bottom', 'left' | 'right'];\n\n const verticalSpace =\n vertical === 'top'\n ? rect.top - headerHeight - height - buffer\n : window.innerHeight - rect.bottom - height - buffer;\n\n const horizontalSpace =\n horizontal === 'left' ? rect.left - width - buffer : window.innerWidth - rect.right - width - buffer;\n\n return Math.min(verticalSpace, horizontalSpace) > 0;\n }\n\n public ngOnDestroy(): void {\n if (this.trigger) {\n this.trigger.removeEventListener('mousedown', this.handleMouseDown);\n }\n this.resizeObserver?.disconnect();\n }\n}\n","import { AfterContentInit, contentChild, Directive } from '@angular/core';\nimport { ClrEndDateInput, ClrStartDateInput } from '@clr/angular';\n\n@Directive({\n selector: 'clr-date-range-container[cngTenantFullDateRange]',\n standalone: true,\n})\nexport class TenantFullDateRangeDirective implements AfterContentInit {\n private readonly start = contentChild(ClrStartDateInput);\n private readonly end = contentChild(ClrEndDateInput);\n\n public ngAfterContentInit(): void {\n if (this.start()) {\n const originalStartEmit = this.start().dateChange.emit.bind(this.start().dateChange);\n this.start().dateChange.emit = date => {\n originalStartEmit(this.toTenantDateTime(date, '00:00'));\n };\n }\n\n if (this.end()) {\n const originalEndEmit = this.end().dateChange.emit.bind(this.end().dateChange);\n this.end().dateChange.emit = date => {\n originalEndEmit(this.toTenantDateTime(date, '23:59'));\n };\n }\n }\n\n private toTenantDateTime(date: Date, time: string): Date {\n if (!date) {\n return date;\n }\n const [hours, minutes] = time.split(':').map(Number);\n const result = new Date(date);\n result.setHours(hours, minutes, 0, 0);\n return result;\n }\n}\n","/*\n * Copyright (c) 2026 Porsche Informatik. All Rights Reserved.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule, DecimalPipe } from '@angular/common';\nimport { ClrAlertModule, ClrIcon, ClrSignpostModule } from '@clr/angular';\n\nimport { AreaChartComponent } from './area-chart/area-chart.component';\nimport { BarChartComponent } from './bar-chart/bar-chart.component';\nimport { ComboChartComponent } from './combo-chart/combo-chart.component';\nimport { FunnelChartComponent } from './funnel-chart/funnel-chart.component';\nimport { LineChartComponent } from './line-chart/line-chart.component';\nimport { PieChartComponent } from './pie-chart/pie-chart.component';\n\nimport { ChartAlertOverlayComponent } from './chart-alert-overlay/chart-alert-overlay.component';\nimport { ChartExportButtonComponent } from './chart-export/chart-export-button.component';\nimport { ChartLegendComponent } from './chart-legend/chart-legend.component';\nimport { ChartSkeletonComponent } from './shared/chart-skeleton.component';\nimport { ChartTooltipComponent } from './chart-tooltip/chart-tooltip.component';\nimport { OutsideClickDirective, WindowResizeDirective } from './directives';\n\nconst CLR_CHARTS_DECLARATIONS = [\n AreaChartComponent,\n BarChartComponent,\n ComboChartComponent,\n FunnelChartComponent,\n LineChartComponent,\n PieChartComponent,\n];\n\n@NgModule({\n imports: [\n CommonModule,\n DecimalPipe,\n ClrAlertModule,\n ClrIcon,\n ClrSignpostModule,\n // standalone helpers consumed by the non-standalone chart components\n ChartAlertOverlayComponent,\n ChartExportButtonComponent,\n ChartLegendComponent,\n ChartSkeletonComponent,\n ChartTooltipComponent,\n OutsideClickDirective,\n WindowResizeDirective,\n ],\n declarations: [...CLR_CHARTS_DECLARATIONS],\n exports: [...CLR_CHARTS_DECLARATIONS],\n})\nexport class ClrChartsModule {}\n","/*\n * Copyright (c) 2026 Porsche Informatik. All Rights Reserved.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './shared/xy-chart.types';\nexport * from './bar-chart/bar-chart.component';\nexport * from './line-chart/line-chart.component';\nexport * from './area-chart/area-chart.component';\nexport * from './combo-chart/combo-chart.component';\nexport * from './pie-chart/pie-chart.component';\nexport * from './funnel-chart/funnel-chart.component';\nexport * from './charts.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["d3select","d3scaleBand","d3scaleLinear","d3max","d3axisBottom","d3axisLeft","d3format","d3group","d3sum","i1.ChartAlertOverlayComponent","i2.ChartExportButtonComponent","i3.ChartLegendComponent","i4.ChartSkeletonComponent","i5.ChartTooltipComponent","i6.OutsideClickDirective","i7.WindowResizeDirective","d3scalePoint","d3min","d3line","d3area","d3axisRight","d3arc","d3pie","d3color","i3.ChartSkeletonComponent","i4.ChartTooltipComponent","i5.OutsideClickDirective","i6.WindowResizeDirective"],"mappings":"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"}