{"version":3,"file":"nova-ui-dashboards.mjs","sources":["../../src/lib/common/components/preview-overlay/preview-overlay.component.ts","../../src/lib/common/components/widget-error/widget-error.component.ts","../../src/lib/common/components/widget-error/widget-error.component.html","../../src/lib/common/constants.ts","../../src/lib/common/pipes/dashboard-unit-conversion-pipe.ts","../../src/lib/common/common.module.ts","../../src/lib/common/components/public-api.ts","../../src/lib/common/pipes/public-api.ts","../../src/lib/common/public-api.ts","../../src/lib/components/dashboard/default-gridster-config.ts","../../src/lib/services/types.ts","../../src/lib/types.ts","../../src/lib/directives/gridster-item-widget-id/gridster-item-widget-id.directive.ts","../../src/lib/components/loading/loading.component.ts","../../src/lib/components/loading/loading.component.html","../../src/lib/services/widget-configuration.service.ts","../../src/lib/services/widget-types.service.ts","../../src/lib/functions/merge-changes.ts","../../src/lib/pizzagna/services/dynamic-component-creator.service.ts","../../src/lib/pizzagna/functions/get-pizzagna-property-path.ts","../../src/lib/pizzagna/services/pizzagna.service.ts","../../src/lib/configurator/types.ts","../../src/lib/components/providers/data-source-adapter.ts","../../src/lib/components/providers/drilldown-data-source-adapter.ts","../../src/lib/components/providers/event-bus-debugger.ts","../../src/lib/components/providers/interaction/interaction-handler.ts","../../src/lib/services/url-interaction.service.ts","../../src/lib/components/providers/interaction/url-interaction-handler.ts","../../src/lib/services/kpi-color-comparators-registry.service.ts","../../src/lib/components/providers/kpi-color-prioritizer.ts","../../src/lib/configurator/components/widgets/kpi/types.ts","../../src/lib/components/providers/kpi-data-source-adapter.ts","../../src/lib/components/providers/kpi-scale-sync-broker.ts","../../src/lib/components/providers/status-content-fallback-adapter.ts","../../src/lib/components/providers/kpi-status-content-fallback-adapter.ts","../../src/lib/components/providers/loading-adapter.ts","../../src/lib/functions/get-parent-component-id.ts","../../src/lib/functions/parse-string-with-data.ts","../../src/lib/components/providers/pizzagna-broadcaster.service.ts","../../src/lib/components/providers/types.ts","../../src/lib/components/providers/refresher-settings.service.ts","../../src/lib/components/providers/refresher.ts","../../src/lib/components/providers/table-data-source-adapter.ts","../../src/lib/components/providers/timeseries-data-source-adapter.ts","../../src/lib/configurator/components/wizard/dashwiz/dashwiz.service.ts","../../src/lib/configurator/services/configurator-data-source-manager.service.ts","../../src/lib/configurator/services/preview.service.ts","../../src/lib/configurator/services/converters/base-converter.ts","../../src/lib/configurator/services/converters/kpi/kpi-section-converter/kpi-section-converter.service.ts","../../src/lib/configurator/services/converters/kpi/kpi-tiles-converter.service.ts","../../src/lib/widget-types/common/widget/legend.ts","../../src/lib/configurator/services/converters/proportional/proportional-widget-chart-options-converter.service.ts","../../src/lib/configurator/services/converters/shared/generic-array-converter/generic-array-converter.service.ts","../../src/lib/configurator/services/converters/shared/generic-converter/generic-converter.service.ts","../../src/lib/configurator/services/converters/shared/title-and-description-converter/title-and-description-converter.service.ts","../../src/lib/configurator/services/converters/table/table-columns-converter.service.ts","../../src/lib/configurator/services/converters/table/table-filters-converter.service.ts","../../src/lib/configurator/services/converters/table/table-scroll-type-converter.service.ts","../../src/lib/configurator/services/converters/timeseries/timeseries-metadata-converter.service.ts","../../src/lib/configurator/services/converters/timeseries/timeseries-series-converter.service.ts","../../src/lib/configurator/services/converters/timeseries/timeseries-tile-indicator-data-converter.service.ts","../../src/lib/configurator/services/converters/types.ts","../../src/lib/services/event-registry.service.ts","../../src/lib/services/registry-service.ts","../../src/lib/services/table-formatter-registry.service.ts","../../src/lib/services/widget-to-dashboard-event-proxy.service.ts","../../src/lib/services/provider-registry.service.ts","../../src/lib/pizzagna/services/component-registry.service.ts","../../src/lib/components/template-load-error/template-load-error.component.ts","../../src/lib/pizzagna/services/component-portal.service.ts","../../src/lib/pizzagna/directives/component-portal/component-portal.directive.ts","../../src/lib/pizzagna/components/pizzagna/pizzagna.component.ts","../../src/lib/pizzagna/components/pizzagna/pizzagna.component.html","../../src/lib/components/widget/widget.component.ts","../../src/lib/components/widget/widget.component.html","../../src/lib/components/dashboard/dashboard.component.ts","../../src/lib/components/dashboard/dashboard.component.html","../../src/lib/components/types.ts","../../src/lib/components/embedded-content/embedded-content.component.ts","../../src/lib/functions/map-data-to-formatter-properties.ts","../../src/lib/components/kpi-widget/kpi.component.ts","../../src/lib/components/kpi-widget/kpi.component.html","../../src/lib/components/layouts/base-layout.ts","../../src/lib/components/layouts/stack/stack.component.ts","../../src/lib/components/layouts/stack/stack.component.html","../../src/lib/components/layouts/tiles/tiles.component.ts","../../src/lib/components/layouts/tiles/tiles.component.html","../../src/lib/components/list-widget/list-elements/list-group-item/list-group-item.component.ts","../../src/lib/components/list-widget/list-elements/list-group-item/list-group-item.component.html","../../src/lib/components/list-widget/list-elements/list-leaf-item/list-leaf-item.component.ts","../../src/lib/components/list-widget/list-elements/list-leaf-item/list-leaf-item.component.html","../../src/lib/components/list-widget/list-elements/list-navigation-bar/list-navigation-bar.component.ts","../../src/lib/components/list-widget/list-elements/list-navigation-bar/list-navigation-bar.component.html","../../src/lib/components/list-widget/list-widget.component.ts","../../src/lib/components/list-widget/list-widget.component.html","../../src/lib/services/proportional-content-aggregators-registry.service.ts","../../src/lib/services/unit-test-registry.service.ts","../../src/lib/services/public-api.ts","../../src/lib/components/proportional-widget/proportional-donut-content/proportional-donut-content.component.ts","../../src/lib/components/proportional-widget/proportional-donut-content/proportional-donut-content.component.html","../../src/lib/components/proportional-widget/types.ts","../../src/lib/services/category-chart-util.service.ts","../../src/lib/components/proportional-widget/proportional-widget.component.ts","../../src/lib/components/proportional-widget/proportional-widget.component.html","../../src/lib/components/risk-score-tile/risk-score-tile.component.ts","../../src/lib/components/risk-score-tile/risk-score-tile.component.html","../../src/lib/components/table-widget/delayed-mouse-presence-detection.directive.ts","../../src/lib/components/table-widget/addons/paginator-feature-addon.service.ts","../../src/lib/components/table-widget/addons/search-feature-addon.service.ts","../../src/lib/components/table-widget/addons/virtual-scroll-feature-addon.service.ts","../../src/lib/components/table-widget/types.ts","../../src/lib/components/table-widget/table-widget.component.ts","../../src/lib/components/table-widget/table-widget.component.html","../../src/lib/configurator/services/timeframe-serialization.service.ts","../../src/lib/components/time-frame-selection/timeframe-selection.component.ts","../../src/lib/components/time-frame-selection/timeframe-selection.component.html","../../src/lib/components/timeseries-widget/types.ts","../../src/lib/components/timeseries-widget/timeseries-helpers.ts","../../src/lib/functions/round-array-values.ts","../../src/lib/functions/timeseries-datetime-formatter.ts","../../src/lib/components/timeseries-widget/timeseries-scales.service.ts","../../src/lib/components/timeseries-widget/chart-presets/timeseries-chart.component.ts","../../src/lib/components/timeseries-widget/chart-presets/status-bar-chart/status-bar-chart.component.ts","../../src/lib/components/timeseries-widget/chart-presets/status-bar-chart/status-bar-chart.component.html","../../src/lib/components/timeseries-widget/transformer/transformer-difference.ts","../../src/lib/components/timeseries-widget/transformer/loess.ts","../../src/lib/components/timeseries-widget/transformer/transformer-loess.ts","../../src/lib/components/timeseries-widget/transformer/transformer-change-point.ts","../../src/lib/components/timeseries-widget/transformer/transformer-floating-average.ts","../../src/lib/components/timeseries-widget/transformer/transformer-normalize.ts","../../src/lib/components/timeseries-widget/transformer/transformer-lin-reg.ts","../../src/lib/components/timeseries-widget/transformer/transformer-standardize.ts","../../src/lib/components/timeseries-widget/transformer/transformer-loess-standardize.ts","../../src/lib/components/timeseries-widget/transformer/transformer-percentile-std.ts","../../src/lib/components/timeseries-widget/transformer/public-api.ts","../../src/lib/components/timeseries-widget/chart-presets/xy-chart/xy-chart.component.ts","../../src/lib/components/timeseries-widget/chart-presets/xy-chart/chart-types/line-chart.component.ts","../../src/lib/components/timeseries-widget/chart-presets/xy-chart/xy-chart.component.html","../../src/lib/components/timeseries-widget/chart-presets/xy-chart/chart-types/stacked-area-chart.component.ts","../../src/lib/components/timeseries-widget/chart-presets/xy-chart/chart-types/stacked-bar-chart.component.ts","../../src/lib/components/timeseries-widget/chart-presets/xy-chart/chart-types/stacked-percentage-area-chart.component.ts","../../src/lib/components/timeseries-widget/timeseries-inspection-menu/timeseries-inspection-menu.component.ts","../../src/lib/components/timeseries-widget/timeseries-inspection-menu/timeseries-inspection-menu.component.html","../../src/lib/components/timeseries-widget/timeseries-chart-preset.service.ts","../../src/lib/components/timeseries-widget/timeseries-widget.component.ts","../../src/lib/components/timeseries-widget/timeseries-widget.component.html","../../src/lib/components/widget/widget-body/widget-body.component.ts","../../src/lib/components/widget/widget-body/widget-body.component.html","../../src/lib/widget-types/common/widget/types.ts","../../src/lib/components/widget/widget-body-content/widget-body-content.component.ts","../../src/lib/components/widget/widget-body-content/widget-body-content.component.html","../../src/lib/components/widget/widget-header/widget-header.component.ts","../../src/lib/components/widget/widget-header/widget-header.component.html","../../src/lib/components/widget-search/widget-search.component.ts","../../src/lib/components/widget-search/widget-search.component.html","../../src/lib/pizzagna/pizzagna.module.ts","../../src/lib/configurator/pipe/pizzagna-root.pipe.ts","../../src/lib/configurator/components/configurator/configurator.component.ts","../../src/lib/configurator/components/configurator/configurator.component.html","../../src/lib/configurator/components/drop-area/drop-area.component.ts","../../src/lib/configurator/components/form-stack/form-stack.component.ts","../../src/lib/configurator/components/form-stack/form-stack.component.html","../../src/lib/pizzagna/services/public-api.ts","../../src/lib/pizzagna/components/pizzagna/public-api.ts","../../src/lib/pizzagna/directives/component-portal/public-api.ts","../../src/lib/pizzagna/functions/public-api.ts","../../src/lib/pizzagna/public-api.ts","../../src/lib/configurator/components/formatters/widget-formatter-configurators/donut-formatter-configurator.component.ts","../../src/lib/configurator/components/formatters/donut-content-percentage-formatter/donut-content-percentage-configuration.component.ts","../../src/lib/configurator/components/formatters/donut-content-percentage-formatter/donut-content-percentage-configuration.component.html","../../src/lib/configurator/components/formatters/donut-content-percentage-formatter/donut-content-percentage-formatter.component.ts","../../src/lib/configurator/components/formatters/donut-content-raw-formatter/donut-content-raw-formatter.component.ts","../../src/lib/configurator/components/formatters/donut-content-sum-formatter/donut-content-sum-formatter.component.ts","../../src/lib/configurator/components/formatters/icon-formatter/icon-formatter.component.ts","../../src/lib/configurator/components/formatters/link-formatter/link-formatter.component.ts","../../src/lib/configurator/components/formatters/raw-formatter/raw-formatter.component.ts","../../src/lib/configurator/components/formatters/percentage-formatter/percentage-formatter.component.ts","../../src/lib/constants/si-units-prefixes.ts","../../src/lib/configurator/components/formatters/si-units-formatter/si-units-formatter.component.ts","../../src/lib/configurator/components/formatters/status-with-icon-formatter/status-with-icon-formatter.component.ts","../../src/lib/configurator/services/configurator-heading.service.ts","../../src/lib/configurator/components/heading/configurator-heading.component.ts","../../src/lib/configurator/components/heading/configurator-heading.component.html","../../src/lib/configurator/pipe/add-data.pipe.ts","../../src/lib/configurator/pipe/widget-configurator-section-header.pipe.ts","../../src/lib/configurator/components/items-dynamic/items-dynamic.component.ts","../../src/lib/configurator/components/items-dynamic/items-dynamic.component.html","../../src/lib/configurator/components/preview-placeholder/preview-placeholder.component.ts","../../src/lib/configurator/components/preview-placeholder/preview-placeholder.component.html","../../src/lib/configurator/components/wizard/dashwiz-step/dashwiz-step.component.ts","../../src/lib/configurator/components/wizard/dashwiz-step/dashwiz-step.component.html","../../src/lib/configurator/components/wizard/dashwiz/dashwiz-buttons.component.ts","../../src/lib/configurator/components/wizard/dashwiz/dashwiz.component.ts","../../src/lib/configurator/components/wizard/dashwiz/dashwiz.component.html","../../src/lib/configurator/components/widget-cloner/widget-cloner.component.ts","../../src/lib/configurator/components/widget-cloner/widget-cloner.component.html","../../src/lib/configurator/components/widget-configurator-section/widget-configurator-section-coordinator.service.ts","../../src/lib/configurator/components/widget-configurator-section/widget-configurator-section.component.ts","../../src/lib/configurator/components/widget-configurator-section/widget-configurator-section.component.html","../../src/lib/configurator/components/widget-editor/widget-editor.component.ts","../../src/lib/configurator/components/widget-editor/widget-editor.component.html","../../src/lib/configurator/components/widget-editor-accordion/widget-editor-accordion-header/widget-editor-accordion-header.component.ts","../../src/lib/configurator/components/widget-editor-accordion/widget-editor-accordion-header/widget-editor-accordion-header.component.html","../../src/lib/configurator/components/widget-editor-accordion/widget-editor-accordion.component.ts","../../src/lib/configurator/components/widget-editor-accordion/widget-editor-accordion.component.html","../../src/lib/constants/default-palette.ts","../../src/lib/configurator/functions/has-control-in-error-state.ts","../../src/lib/configurator/pipe/widget-editor-accordion-form-state.pipe.ts","../../src/lib/configurator/pipe/widget-editor-accordion-header-icon.pipe.ts","../../src/lib/configurator/components/widgets/configurator-items/background-color-rules-configuration/background-color-rules-configuration.component.ts","../../src/lib/configurator/components/widgets/configurator-items/background-color-rules-configuration/background-color-rules-configuration.component.html","../../src/lib/configurator/components/widgets/configurator-items/data-source-error/data-source-error.component.ts","../../src/lib/configurator/components/widgets/configurator-items/data-source-error/data-source-error.component.html","../../src/lib/configurator/components/widgets/configurator-items/data-source-configuration/data-source-configuration.component.ts","../../src/lib/configurator/components/widgets/configurator-items/data-source-configuration/data-source-configuration.component.html","../../src/lib/configurator/components/widgets/configurator-items/data-source-configuration-v2/data-source-configuration-v2.component.ts","../../src/lib/configurator/components/widgets/configurator-items/data-source-configuration-v2/data-source-configuration-v2.component.html","../../src/lib/configurator/components/widgets/configurator-items/data-source-error/table/table-data-source-error.component.ts","../../src/lib/configurator/components/widgets/configurator-items/data-source-error/table/table-data-source-error.component.html","../../src/lib/configurator/components/widgets/configurator-items/embedded-content-configuration/embedded-content-configuration.component.ts","../../src/lib/configurator/components/widgets/configurator-items/embedded-content-configuration/embedded-content-configuration.component.html","../../src/lib/configurator/components/widgets/configurator-items/info-message-configuration/info-message-configuration.component.ts","../../src/lib/configurator/components/widgets/configurator-items/info-message-configuration/info-message-configuration.component.html","../../src/lib/configurator/components/widgets/configurator-items/kpi-description-configuration/kpi-description-configuration.component.ts","../../src/lib/configurator/components/widgets/configurator-items/kpi-description-configuration/kpi-description-configuration.component.html","../../src/lib/configurator/components/widgets/configurator-items/refresher-configuration/refresh-rate-configurator/time-units.ts","../../src/lib/configurator/components/widgets/configurator-items/refresher-configuration/refresh-rate-configurator/refresh-rate-configurator.component.ts","../../src/lib/configurator/components/widgets/configurator-items/refresher-configuration/refresh-rate-configurator/refresh-rate-configurator.component.html","../../src/lib/configurator/components/widgets/configurator-items/refresher-configuration/refresher-configuration.component.ts","../../src/lib/configurator/components/widgets/configurator-items/refresher-configuration/refresher-configuration.component.html","../../src/lib/configurator/components/widgets/configurator-items/risk-score-tile-description-configuration/risk-score-tile-description-configuration.component.ts","../../src/lib/configurator/components/widgets/configurator-items/risk-score-tile-description-configuration/risk-score-tile-description-configuration.component.html","../../src/lib/configurator/components/widgets/configurator-items/thresholds-configuration/thresholds-validator.ts","../../src/lib/configurator/components/widgets/configurator-items/thresholds-configuration/thresholds-configuration.component.ts","../../src/lib/configurator/components/widgets/configurator-items/thresholds-configuration/thresholds-configuration.component.html","../../src/lib/configurator/components/widgets/configurator-items/timeseries-metadata-configuration/timeseries-metadata-configuration.component.ts","../../src/lib/configurator/components/widgets/configurator-items/timeseries-metadata-configuration/timeseries-metadata-configuration.component.html","../../src/lib/configurator/components/widgets/configurator-items/title-and-description-configuration/title-and-description-configuration.component.ts","../../src/lib/configurator/components/widgets/configurator-items/title-and-description-configuration/title-and-description-configuration.component.html","../../src/lib/configurator/components/widgets/drilldown/entity-formatting-configuration/entity-formatting-configuration.component.ts","../../src/lib/configurator/components/widgets/drilldown/entity-formatting-configuration/entity-formatting-configuration.component.html","../../src/lib/configurator/components/widgets/drilldown/grouping-configuration/grouping-configuration.component.ts","../../src/lib/configurator/components/widgets/drilldown/grouping-configuration/grouping-configuration.component.html","../../src/lib/configurator/components/widgets/kpi/kpi-tiles-configuration/kpi-tiles-configuration.component.ts","../../src/lib/configurator/components/widgets/kpi/kpi-tiles-configuration/kpi-tiles-configuration.component.html","../../src/lib/configurator/components/widgets/proportional/aggregators-configurators/aggregator-configurator/aggregator-configurator.component.ts","../../src/lib/configurator/components/widgets/proportional/aggregators-configurators/aggregator-configurator/aggregator-configurator.component.html","../../src/lib/configurator/components/widgets/proportional/aggregators-configurators/field-mapper-aggregator-configurator/field-mapper-aggregator-configurator.component.ts","../../src/lib/configurator/components/widgets/proportional/aggregators-configurators/field-mapper-aggregator-configurator/field-mapper-aggregator-configurator.component.html","../../src/lib/configurator/components/widgets/proportional/chart-options-editor/proportional-chart-options-editor.component.ts","../../src/lib/configurator/components/widgets/proportional/chart-options-editor/proportional-chart-options-editor.component.html","../../src/lib/configurator/components/widgets/proportional/chart-options-editor-v2/proportional-chart-options-editor-v2.component.ts","../../src/lib/configurator/components/widgets/proportional/chart-options-editor-v2/proportional-chart-options-editor-v2.component.html","../../src/lib/configurator/components/widgets/proportional/donut-content-configuration/donut-content-configuration.component.ts","../../src/lib/configurator/components/widgets/proportional/donut-content-configuration/donut-content-configuration.component.html","../../src/lib/configurator/components/widgets/risk-score/risk-score-tiles-configuration/risk-score-tiles-configuration.component.ts","../../src/lib/configurator/components/widgets/risk-score/risk-score-tiles-configuration/risk-score-tiles-configuration.component.html","../../src/lib/configurator/components/widgets/table/columns-editor/column-configuration/description-configuration/description-configuration.component.ts","../../src/lib/configurator/components/widgets/table/columns-editor/column-configuration/description-configuration/description-configuration.component.html","../../src/lib/configurator/components/widgets/table/columns-editor/column-configuration/presentation-configuration/portals/formatter-configurator.component.ts","../../src/lib/configurator/components/widgets/table/columns-editor/column-configuration/presentation-configuration/portals/link-configurator/link-configurator.component.ts","../../src/lib/configurator/components/widgets/table/columns-editor/column-configuration/presentation-configuration/portals/link-configurator/link-configurator.component.html","../../src/lib/configurator/components/widgets/table/columns-editor/column-configuration/presentation-configuration/portals/value-selector/value-selector.component.ts","../../src/lib/configurator/components/widgets/table/columns-editor/column-configuration/presentation-configuration/portals/value-selector/value-selector.component.html","../../src/lib/configurator/components/widgets/table/columns-editor/column-configuration/presentation-configuration/presentation-configuration.component.ts","../../src/lib/configurator/components/widgets/table/columns-editor/column-configuration/presentation-configuration/presentation-configuration.component.html","../../src/lib/configurator/components/widgets/table/columns-editor/table-columns-configuration.component.ts","../../src/lib/configurator/components/widgets/table/columns-editor/table-columns-configuration.component.html","../../src/lib/functions/on-mark-as-touched.ts","../../src/lib/configurator/components/widgets/table/columns-editor-v2/column-configuration/description-configuration/description-configuration-v2.component.ts","../../src/lib/configurator/components/widgets/table/columns-editor-v2/column-configuration/description-configuration/description-configuration-v2.component.html","../../src/lib/widget-types/table/default-table-formatters.ts","../../src/lib/configurator/components/widgets/table/columns-editor-v2/column-configuration/presentation-configuration/presentation-configuration-v2.component.ts","../../src/lib/configurator/components/widgets/table/columns-editor-v2/column-configuration/presentation-configuration/presentation-configuration-v2.component.html","../../src/lib/configurator/components/widgets/table/columns-editor-v2/column-configuration/table-column-configuration/table-column-configuration.component.ts","../../src/lib/configurator/components/widgets/table/columns-editor-v2/column-configuration/table-column-configuration/table-column-configuration.component.html","../../src/lib/configurator/components/widgets/table/columns-editor-v2/table-columns-configuration-v2.component.ts","../../src/lib/configurator/components/widgets/table/columns-editor-v2/table-columns-configuration-v2.component.html","../../src/lib/configurator/components/widgets/table/filters-editor/table-filters-editor.component.ts","../../src/lib/configurator/components/widgets/table/filters-editor/table-filters-editor.component.html","../../src/lib/configurator/components/widgets/table/scrollType-editor/scroll-type-editor.service.ts","../../src/lib/configurator/components/widgets/table/scrollType-editor/scroll-type-editor.component.ts","../../src/lib/configurator/components/widgets/table/scrollType-editor/scroll-type-editor.component.html","../../src/lib/configurator/components/widgets/timeseries/timeseries-series-collection-configuration/timeseries-series-collection-configuration.component.ts","../../src/lib/configurator/components/widgets/timeseries/timeseries-series-collection-configuration/timeseries-series-collection-configuration.component.html","../../src/lib/configurator/components/widgets/timeseries/timeseries-tile-description-configuration/timeseries-tile-description-configuration.component.ts","../../src/lib/configurator/components/widgets/timeseries/timeseries-tile-description-configuration/timeseries-tile-description-configuration.component.html","../../src/lib/configurator/components/widgets/timeseries/timeseries-tile-indicator-data-configuration/timeseries-tile-indicator-data-configuration.component.ts","../../src/lib/configurator/components/widgets/timeseries/timeseries-tile-indicator-data-configuration/timeseries-tile-indicator-data-configuration.component.html","../../src/lib/configurator/services/configurator.service.ts","../../src/lib/configurator/services/kpi-widget-color.service.ts","../../src/lib/configurator/services/widget-cloner.service.ts","../../src/lib/configurator/services/widget-editor.service.ts","../../src/lib/configurator/services/types.ts","../../src/lib/configurator/services/converters/public-api.ts","../../src/lib/configurator/services/public-api.ts","../../src/lib/configurator/configurator.module.ts","../../src/lib/services/widget-removal.service.ts","../../src/lib/directives/widget-editor/widget-editor.directive.ts","../../src/lib/widget-types/drilldown/drilldown-configurator.ts","../../src/lib/widget-types/common/widget/components.ts","../../src/lib/widget-types/common/widget/providers.ts","../../src/lib/widget-types/drilldown/drilldown-widget.ts","../../src/lib/widget-types/drilldown/drilldown.ts","../../src/lib/widget-types/embedded-content/embedded-content-configurator.ts","../../src/lib/widget-types/embedded-content/embedded-content-widget.ts","../../src/lib/widget-types/embedded-content/embedded-content.ts","../../src/lib/widget-types/common/configurator/components.ts","../../src/lib/widget-types/kpi/kpi-configurator.ts","../../src/lib/widget-types/kpi/kpi-widget.ts","../../src/lib/widget-types/kpi/kpi.ts","../../src/lib/widget-types/preview-placeholder.ts","../../src/lib/functions/proportional-aggregators/field-mapper.ts","../../src/lib/functions/proportional-aggregators/percentage-aggregator.ts","../../src/lib/functions/proportional-aggregators/sum-aggregator.ts","../../src/lib/widget-types/proportional/proportional-configurator.ts","../../src/lib/widget-types/proportional/proportional-widget.ts","../../src/lib/widget-types/proportional/proportional.ts","../../src/lib/widget-types/risk-score/risk-score-configurator.ts","../../src/lib/widget-types/risk-score/risk-score-widget.ts","../../src/lib/widget-types/risk-score/risk-score.ts","../../src/lib/widget-types/table/table-configurator.ts","../../src/lib/widget-types/table/table-widget.ts","../../src/lib/widget-types/table/table.ts","../../src/lib/widget-types/timeseries/timeseries-configurator.ts","../../src/lib/widget-types/timeseries/timeseries-widget.ts","../../src/lib/widget-types/timeseries/timeseries.ts","../../src/lib/dashboards.module.ts","../../src/lib/configurator/pipe/public-api.ts","../../src/lib/configurator/functions/public-api.ts","../../src/lib/configurator/components/widgets/kpi/kpi-tiles-configuration/public-api.ts","../../src/lib/configurator/components/widgets/kpi/public-api.ts","../../src/lib/configurator/components/widgets/risk-score/risk-score-tiles-configuration/public-api.ts","../../src/lib/configurator/components/widgets/risk-score/types.ts","../../src/lib/configurator/components/widgets/risk-score/public-api.ts","../../src/lib/configurator/components/widgets/table/public-api.ts","../../src/lib/configurator/components/widgets/timeseries/types.ts","../../src/lib/configurator/components/widgets/timeseries/public-api.ts","../../src/lib/configurator/components/widgets/proportional/public-api.ts","../../src/lib/configurator/components/widgets/configurator-items/refresher-configuration/public-api.ts","../../src/lib/configurator/components/widgets/configurator-items/data-source-error/public-api.ts","../../src/lib/configurator/components/widgets/configurator-items/public-api.ts","../../src/lib/configurator/components/widgets/drilldown/public-api.ts","../../src/lib/configurator/components/widgets/public-api.ts","../../src/lib/configurator/components/wizard/dashwiz/model.ts","../../src/lib/configurator/components/wizard/dashwiz/public-api.ts","../../src/lib/configurator/components/wizard/dashwiz-step/public-api.ts","../../src/lib/configurator/components/wizard/types.ts","../../src/lib/configurator/components/wizard/public-api.ts","../../src/lib/configurator/components/types.ts","../../src/lib/configurator/components/public-api.ts","../../src/lib/configurator/public-api.ts","../../src/lib/components/dashboard/types.ts","../../src/lib/components/dashboard/public-api.ts","../../src/lib/components/widget/widget-header/types.ts","../../src/lib/components/widget/types.ts","../../src/lib/components/widget/public-api.ts","../../src/lib/components/layouts/public-api.ts","../../src/lib/components/template-load-error/public-api.ts","../../src/lib/components/proportional-widget/public-api.ts","../../src/lib/components/kpi-widget/types.ts","../../src/lib/components/kpi-widget/public-api.ts","../../src/lib/components/risk-score-tile/types.ts","../../src/lib/components/risk-score-tile/public-api.ts","../../src/lib/components/timeseries-widget/chart-presets/status-bar-chart/apply-status-endpoints.ts","../../src/lib/components/timeseries-widget/chart-presets/public-api.ts","../../src/lib/components/timeseries-widget/public-api.ts","../../src/lib/components/table-widget/public-api.ts","../../src/lib/components/providers/public-api.ts","../../src/lib/components/time-frame-selection/public-api.ts","../../src/lib/components/loading/public-api.ts","../../src/lib/components/list-widget/types.ts","../../src/lib/components/list-widget/public-api.ts","../../src/lib/components/widget-search/types.ts","../../src/lib/components/public-api.ts","../../src/lib/directives/widget-editor/public-api.ts","../../src/lib/directives/public-api.ts","../../src/lib/functions/proportional-aggregators/types.ts","../../src/lib/functions/proportional-aggregators/public-api.ts","../../src/lib/functions/public-api.ts","../../src/lib/widget-types/common/configurator/public-api.ts","../../src/lib/widget-types/common/widget/public-api.ts","../../src/lib/widget-types/common/public-api.ts","../../src/lib/widget-types/proportional/donut-content-configurator-slice.ts","../../src/lib/widget-types/public-api.ts","../../src/lib/constants/public-api.ts","../../src/public-api.ts","../../src/nova-ui-dashboards.ts"],"sourcesContent":["// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Component } from \"@angular/core\";\n\n@Component({\n    selector: \"nui-preview-overlay\",\n    template: `<div class=\"nui-text-label content\" i18n>\n        This is a non-interactive widget preview\n    </div>`,\n    styleUrls: [\"./preview-overlay.component.less\"],\n    standalone: false,\n})\nexport class PreviewOverlayComponent {\n    static lateLoadKey = \"PreviewOverlayComponent\";\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    HostBinding,\n    Input,\n    OnInit,\n} from \"@angular/core\";\n\nimport { IWidgetErrorDisplayProperties } from \"../../../components/widget/types\";\nimport { IHasChangeDetector } from \"../../../types\";\n\n@Component({\n    selector: \"nui-widget-error\",\n    templateUrl: \"./widget-error.component.html\",\n    styleUrls: [\"./widget-error.component.less\"],\n    standalone: false,\n})\nexport class WidgetErrorComponent\n    implements OnInit, IHasChangeDetector, IWidgetErrorDisplayProperties\n{\n    public static lateLoadKey = \"WidgetErrorComponent\";\n\n    public readonly defaultClasses =\n        \"d-flex flex-column justify-content-center w-100 p-3\";\n\n    @Input() public image: string;\n    @Input() public title: string;\n    @Input() public description: string;\n\n    /**\n     * Optional class for styling\n     */\n    @Input() public elementClass = \"\";\n\n    @HostBinding(\"class\") public classNames: string;\n\n    constructor(public changeDetector: ChangeDetectorRef) {}\n\n    public ngOnInit(): void {\n        this.classNames = `${this.defaultClasses} ${this.elementClass}`;\n    }\n}\n","<nui-image [image]=\"image\"></nui-image>\n<div class=\"widget-error__title\">\n    <strong>{{ title }}</strong>\n</div>\n<div class=\"d-flex justify-content-center text-center\">{{ description }}</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n/** The default threshold at which unit conversion goes into effect */\nexport const DEFAULT_UNIT_CONVERSION_THRESHOLD = 1000000;\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { UnitConversionService, UnitOption, unitConversionBases } from \"@nova-ui/bits\";\n\nimport { DEFAULT_UNIT_CONVERSION_THRESHOLD } from \"../constants\";\n\n/**\n * Pipe for transforming large values to their abbreviated counterparts.\n * Conversions are applied for values 10000 or greater\n */\n@Pipe({\n    name: \"nuiDashboardUnitConversion\",\n    standalone: false,\n})\nexport class DashboardUnitConversionPipe implements PipeTransform {\n    constructor(private unitConversionService: UnitConversionService) {}\n\n    /**\n     * Transforms a large number value to its abbreviated counterpart\n     *\n     * @param value The value to convert\n     *\n     * @returns The string representation of the converted value\n     */\n    public transform = (\n        value: string | number | undefined,\n        units: UnitOption = \"generic\",\n        defaultThreshold: number = DEFAULT_UNIT_CONVERSION_THRESHOLD\n    ): string => {\n        const valueAsNumber =\n            typeof value === \"string\" ? parseFloat(value) : value;\n\n        if (\n            valueAsNumber === undefined ||\n            isNaN(valueAsNumber) ||\n            (valueAsNumber < defaultThreshold && units !== \"percent\" && units !== \"milliseconds\")\n        ) {\n            return value?.toString() || \"\";\n        }\n\n        const conversion = this.unitConversionService.convert(\n            valueAsNumber,\n            unitConversionBases[units],\n            1\n        );\n        return this.unitConversionService.getFullDisplay(conversion, units);\n    };\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { NuiImageModule } from \"@nova-ui/bits\";\n\nimport { PreviewOverlayComponent } from \"./components/preview-overlay/preview-overlay.component\";\nimport { WidgetErrorComponent } from \"./components/widget-error/widget-error.component\";\nimport { DashboardUnitConversionPipe } from \"./pipes/dashboard-unit-conversion-pipe\";\n\nconst commonComponents = [PreviewOverlayComponent, WidgetErrorComponent];\n\n@NgModule({\n    imports: [CommonModule, NuiImageModule],\n    declarations: [DashboardUnitConversionPipe, ...commonComponents],\n    exports: [CommonModule, DashboardUnitConversionPipe, ...commonComponents],\n})\nexport class NuiDashboardsCommonModule {}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./preview-overlay/preview-overlay.component\";\nexport * from \"./widget-error/widget-error.component\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./dashboard-unit-conversion-pipe\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./common.module\";\nexport * from \"./components/public-api\";\nexport * from \"./pipes/public-api\";\nexport * from \"./constants\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    CompactType,\n    DisplayGrid,\n    GridsterConfig,\n    GridType,\n} from \"angular-gridster2\";\n\nexport const DEFAULT_GRIDSTER_CONFIG: GridsterConfig = {\n    displayGrid: DisplayGrid.None,\n    gridType: GridType.VerticalFixed,\n    compactType: CompactType.CompactUp,\n    margin: 15,\n    outerMargin: true,\n    outerMarginTop: null,\n    outerMarginRight: null,\n    outerMarginBottom: null,\n    outerMarginLeft: null,\n    mobileBreakpoint: 640,\n    minCols: 12,\n    maxCols: 12,\n    minRows: 12,\n    fixedRowHeight: 44,\n    minItemArea: 1,\n    defaultItemCols: 6,\n    defaultItemRows: 6,\n    keepFixedHeightInMobile: false,\n    keepFixedWidthInMobile: false,\n    scrollSensitivity: 10,\n    scrollSpeed: 20,\n    enableEmptyCellClick: false,\n    enableEmptyCellContextMenu: false,\n    enableEmptyCellDrop: false,\n    enableEmptyCellDrag: false,\n    emptyCellDragMaxCols: 50,\n    emptyCellDragMaxRows: 50,\n    ignoreMarginInRow: false,\n    draggable: {\n        enabled: false,\n        ignoreContent: true,\n        dragHandleClass: \"nui-dashboard__widget--drag-handle\",\n    },\n    resizable: {\n        enabled: false,\n        handles: {\n            s: true,\n            e: true,\n            n: true,\n            w: true,\n            se: true,\n            ne: true,\n            sw: true,\n            nw: true,\n        },\n    },\n    swap: false,\n    pushItems: true,\n    pushResizeItems: true,\n    disablePushOnDrag: false,\n    disablePushOnResize: false,\n    pushDirections: { north: true, east: true, south: true, west: true },\n    disableWindowResize: false,\n    disableWarnings: false,\n    scrollToNewItems: false,\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { StaticProvider } from \"@angular/core\";\nimport { BehaviorSubject, ReplaySubject } from \"rxjs\";\n\nimport {\n    EventDefinition,\n    IEvent,\n    IEventDefinition,\n    ISelection,\n} from \"@nova-ui/bits\";\n\nimport { IInteractionPayload } from \"../components/providers/interaction/interaction-handler\";\nimport { IDataSourceBusyPayload } from \"../components/providers/types\";\nimport { ISerializableTimeframe } from \"../types\";\n\nexport const DEFAULT_PIZZAGNA_ROOT = \"/\";\n\nexport interface IStaticProviders {\n    [providerId: string]: StaticProvider;\n}\n\nexport interface ISetPropertyPayload {\n    path: string;\n    value: any;\n}\n\nexport interface IPreviewEventPayload {\n    id: IEventDefinition;\n    payload: any;\n}\n\nexport interface IRegistryAddOptions {\n    overrideExisting: boolean;\n}\nexport type IAddFormattersOptions = Pick<IRegistryAddOptions, \"overrideExisting\">;\n\nexport interface IRemoveMetricPayload {\n    metricId: string;\n    groupUniqueId: string;\n}\n\nexport interface IWidgetPayload {\n    widgetId: string;\n}\n\nexport interface IWidgetResizePayload extends IWidgetPayload {\n    height?: number;\n    width?: number;\n}\n\nexport const REFRESH = new EventDefinition(\"REFRESH\");\nexport const SET_NEXT_PAGE = new EventDefinition(\"SET_NEXT_PAGE\");\nexport const SCROLL_NEXT_PAGE = new EventDefinition(\"SCROLL_NEXT_PAGE\");\nexport const WIDGET_REMOVE = new EventDefinition(\"WIDGET_REMOVE\");\nexport const WIDGET_EDIT = new EventDefinition(\"WIDGET_EDIT\");\nexport const WIDGET_CREATE = new EventDefinition(\"WIDGET_CREATE\");\nexport const WIDGET_READY = new EventDefinition(\"WIDGET_READY\");\nexport const WIDGET_RESIZE = new EventDefinition<IWidgetResizePayload>(\n    \"WIDGET_RESIZE\"\n);\nexport const WIDGET_POSITION_CHANGE = new EventDefinition(\n    \"WIDGET_POSITION_CHANGE\"\n);\nexport const WIDGET_SEARCH = new EventDefinition<string>(\n    \"WIDGET_SEARCH\",\n    () => new BehaviorSubject<IEvent>({ payload: \"\" })\n);\nexport const SET_PROPERTY_VALUE = new EventDefinition<ISetPropertyPayload>(\n    \"SET_PROPERTY_VALUE\"\n);\nexport const SET_TIMEFRAME = new EventDefinition<ISerializableTimeframe>(\n    \"SET_TIMEFRAME\"\n);\nexport const PREVIEW_EVENT = new EventDefinition<IPreviewEventPayload>(\n    \"PREVIEW_EVENT\"\n);\nexport const DATA_SOURCE_BUSY = new EventDefinition<IDataSourceBusyPayload>(\n    \"DATA_SOURCE_BUSY\"\n);\nexport const DASHBOARD_EDIT_MODE = new EventDefinition<boolean>(\n    \"DASHBOARD_EDIT_MODE\",\n    () => new ReplaySubject<IEvent>(1)\n);\nexport const INTERACTION = new EventDefinition<IInteractionPayload<any>>(\n    \"INTERACTION\"\n);\nexport const SELECTION = new EventDefinition<ISelection>(\"SELECTION\");\nexport const CHANGE_SELECTION = new EventDefinition<ISelection>(\"CHANGE_SELECTION\");\nexport const SELECTED_ITEMS = new EventDefinition<any[]>(\"SELECTED_ITEMS\");\nexport const DATA_SOURCE_INVOKED = new EventDefinition<void>(\n    \"DATA_SOURCE_INVOKED\"\n);\nexport const DRILLDOWN = new EventDefinition(\"DRILLDOWN\");\n\nexport const NOVA_DATASOURCE_INTERVAL_REFRESHER =\n    \"NOVA_DATASOURCE_INTERVAL_REFRESHER\";\nexport const NOVA_DATASOURCE_ADAPTER = \"NOVA_DATASOURCE_ADAPTER\";\nexport const NOVA_TIMESERIES_DATASOURCE_ADAPTER =\n    \"NOVA_TIMESERIES_DATASOURCE_ADAPTER\";\nexport const NOVA_KPI_DATASOURCE_ADAPTER = \"NOVA_KPI_DATASOURCE_ADAPTER\";\nexport const NOVA_DRILLDOWN_DATASOURCE_ADAPTER =\n    \"NOVA_DRILLDOWN_DATASOURCE_ADAPTER\";\nexport const NOVA_KPI_COLOR_PRIORITIZER = \"NOVA_KPI_COLOR_PRIORITIZER\";\nexport const NOVA_TITLE_AND_DESCRIPTION_CONVERTER =\n    \"NOVA_TITLE_AND_DESCRIPTION_CONVERTER\";\nexport const NOVA_PROPORTIONAL_WIDGET_CHART_OPTIONS_CONVERTER =\n    \"NOVA_PROPORTIONAL_WIDGET_CHART_OPTIONS_CONVERTER\";\nexport const NOVA_KPI_TILES_CONVERTER = \"NOVA_KPI_TILES_CONVERTER\";\nexport const NOVA_TIMESERIES_METADATA_CONVERTER =\n    \"NOVA_TIMESERIES_METADATA_CONVERTER\";\nexport const NOVA_TIMESERIES_SERIES_CONVERTER =\n    \"NOVA_TIMESERIES_SERIES_CONVERTER\";\nexport const NOVA_DASHBOARD_EVENT_PROXY = \"NOVA_DASHBOARD_EVENT_PROXY\";\nexport const NOVA_TABLE_COLUMNS_CONVERTER = \"NOVA_TABLE_COLUMNS_CONVERTER\";\nexport const NOVA_TABLE_FILTERS_CONVERTER = \"NOVA_TABLE_FILTERS_CONVERTER\";\nexport const NOVA_TABLE_SCROLL_TYPE_CONVERTER =\n    \"NOVA_TABLE_SCROLL_TYPE_CONVERTER\";\nexport const NOVA_TABLE_DATASOURCE_ADAPTER = \"NOVA_TABLE_DATASOURCE_ADAPTER\";\nexport const NOVA_GENERIC_CONVERTER = \"NOVA_GENERIC_CONVERTER\";\nexport const NOVA_GENERIC_ARRAY_CONVERTER = \"NOVA_GENERIC_ARRAY_CONVERTER\";\nexport const NOVA_KPI_SECTION_CONVERTER = \"NOVA_KPI_SECTION_CONVERTER\";\nexport const NOVA_TIMESERIES_TILE_INDICATOR_DATA_CONVERTER =\n    \"NOVA_TIMESERIES_TILE_INDICATOR_DATA_CONVERTER\";\nexport const NOVA_LOADING_ADAPTER = \"NOVA_LOADING_ADAPTER\";\nexport const NOVA_STATUS_CONTENT_FALLBACK_ADAPTER =\n    \"NOVA_STATUS_CONTENT_FALLBACK_ADAPTER\";\nexport const NOVA_KPI_STATUS_CONTENT_FALLBACK_ADAPTER =\n    \"NOVA_KPI_STATUS_CONTENT_FALLBACK_ADAPTER\";\nexport const NOVA_KPI_SCALE_SYNC_BROKER = \"NOVA_KPI_SCALE_SYNC_BROKER\";\nexport const NOVA_URL_INTERACTION_HANDLER = \"NOVA_URL_INTERACTION_HANDLER\";\nexport const NOVA_EVENT_BUS_DEBUGGER = \"NOVA_EVENT_BUS_DEBUGGER\";\nexport const NOVA_PIZZAGNA_BROADCASTER = \"NOVA_PIZZAGNA_BROADCASTER\";\nexport const NOVA_VIRTUAL_VIEWPORT_MANAGER = \"NOVA_VIRTUAL_VIEWPORT_MANAGER\";\nexport const NOVA_TABLE_FORMATTERS_REGISTRY = \"NOVA_TABLE_FORMATTERS_REGISTRY\";\nexport const NOVA_KPI_FORMATTERS_REGISTRY = \"NOVA_KPI_FORMATTERS_REGISTRY\";\nexport const NOVA_RISK_SCORE_FORMATTERS_REGISTRY =\n    \"NOVA_RISK_SCORE_FORMATTERS_REGISTRY\";\nexport const NOVA_PROPORTIONAL_CONTENT_FORMATTERS_REGISTRY =\n    \"NOVA_PROPORTIONAL_CONTENT_FORMATTERS_REGISTRY\";\nexport const NOVA_TEST_REGISTRY = \"NOVA_TEST_REGISTRY\";\nexport const NOVA_CONFIGURATOR_DATA_SOURCE_MANAGER =\n    \"NOVA_CONFIGURATOR_DATA_SOURCE_MANAGER\";\n\nexport const CHART_METRIC_REMOVE: IEventDefinition<\n    IEvent<IRemoveMetricPayload>\n> = {\n    id: \"CHART_METRIC_REMOVE\",\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    EventEmitter,\n    InjectionToken,\n    Injector,\n    StaticProvider,\n} from \"@angular/core\";\nimport { AbstractControl, FormGroup } from \"@angular/forms\";\n\nimport { EventBus, IEvent } from \"@nova-ui/bits\";\n\n/**\n * Same as Partial<T> but goes deeper and makes all of its properties and sub-properties Parti al<T>.\n */\nexport type DeepPartial<T> = T extends object\n    ? { [K in keyof T]?: DeepPartial<T[K]> }\n    : T;\n\nexport const PIZZAGNA_EVENT_BUS = new InjectionToken<EventBus<IEvent>>(\n    \"PIZZAGNA_EVENT_BUS\"\n);\nexport const DASHBOARD_EVENT_BUS = new InjectionToken<EventBus<IEvent>>(\n    \"DASHBOARD_EVENT_BUS\"\n);\nexport const DATA_SOURCE = new InjectionToken<EventBus<IEvent>>(\"DATA_SOURCE\");\nexport const FORMATTERS_REGISTRY = new InjectionToken<EventBus<IEvent>>(\n    \"FORMATTERS_REGISTRY\"\n);\nexport const TEST_REGISTRY = new InjectionToken<EventBus<IEvent>>(\n    \"TEST_REGISTRY\"\n);\nexport const HEADER_LINK_PROVIDER = new InjectionToken<EventBus<IEvent>>(\n    \"HEADER_LINK_PROVIDER\"\n);\n\nexport enum WellKnownProviders {\n    DataSource = \"dataSource\",\n    Adapter = \"adapter\",\n    Converter = \"converter\",\n    Broadcaster = \"broadcaster\",\n    Refresher = \"refresher\",\n    EventProxy = \"eventProxy\",\n    LoadingAdapter = \"loadingAdapter\",\n    ContentFallbackAdapter = \"contentFallbackAdapter\",\n    InteractionHandler = \"interactionHandler\",\n    EventBusDebugger = \"eventBusDebugger\",\n    KpiColorPrioritizer = \"kpiColorPrioritizer\",\n    FormattersRegistry = \"formattersRegistry\",\n    DataSourceManager = \"dataSourceManager\",\n}\n\nexport enum WellKnownPathKey {\n    Root = \"root\",\n    DataSourceConfigComponentType = \"dataSourceConfigComponentType\",\n    TileDescriptionConfigComponentType = \"tileDescriptionConfigComponentType\",\n    DataSourceProviders = \"dataSourceProviders\",\n    Formatters = \"formatters\",\n    TileDescriptionBackgroundColors = \"tileDescriptionBackgroundColors\",\n    TileBackgroundColorRulesBackgroundColors = \"tileBackgroundColorRulesBackgroundColors\",\n}\n\nexport enum WellKnownDataSourceFeatures {\n    Interactivity = \"interactivity\",\n    DisableTableColumnGeneration = \"disableTableColumnGeneration\",\n}\n\nexport type IProperties = Record<string, any>;\n\nexport interface IProviderProperties extends IProperties {\n    /** This is property is set by the component portal directive to give providers self-awareness they need to update properties in pizzagna. */\n    providerKey?: string;\n}\n\nexport interface ISerializableTimeframe {\n    startDatetime: string;\n    endDatetime: string;\n    selectedPresetId?: string;\n    title?: string;\n}\n\nexport interface IComponentConfiguration {\n    id: string;\n    componentType: string;\n    providers?: Record<string, IProviderConfiguration>;\n    properties?: IProperties;\n}\n\nexport interface IProviderConfiguration {\n    providerId: string;\n    properties?: IProviderProperties;\n}\n\nexport interface IProviderConfigurationForDisplay\n    extends IProviderConfiguration {\n    label: string;\n}\n\nexport interface IPortalEnvironment {\n    providers?: StaticProvider[];\n    injector?: Injector;\n}\n\nexport type IPizzagnaLayer = Record<string, DeepPartial<IComponentConfiguration>>;\n\nexport type IPizzagna = Record<string, IPizzagnaLayer>;\n\nexport type IPizza = Record<string, IComponentConfiguration>;\n\n/**\n * Interface for components that can be dynamically refreshed from the outside using the changeDetector\n */\nexport interface IHasChangeDetector {\n    changeDetector: ChangeDetectorRef;\n}\n\n/**\n * Interface for components that expose a form\n */\nexport interface IHasForm<T extends AbstractControl = FormGroup> {\n    form: T;\n    formReady: EventEmitter<T>;\n}\n\n/**\n * Interface for providers that require the related component info\n */\nexport interface IHasComponent<T = any> {\n    setComponent(component: T, componentId: string): void;\n}\n\n/**\n * Interface for configurable providers\n */\nexport interface IConfigurable {\n    providerKey?: string;\n    setComponent?: (component: any, componentId: string) => void;\n    // TODO: BREAKING rename to 'updateProperties' in v12 - NUI-5828\n    updateConfiguration(properties: IProperties): void;\n}\n\nexport enum PizzagnaLayer {\n    Structure = \"structure\",\n    Configuration = \"configuration\",\n    Data = \"data\",\n}\n\nexport enum AccordionState {\n    CRITICAL = \"critical\",\n    WARNING = \"warning\",\n    DEFAULT = \"default\",\n}\n\nexport enum HttpStatusCode {\n    Unknown = \"0\",\n    Ok = \"200\",\n    Forbidden = \"403\",\n    NotFound = \"404\",\n}\n\nexport interface IPaletteColor {\n    color: string;\n    label: string;\n}\n\nexport type ComparatorFn = (a: any, b: any) => boolean;\nexport type ComparatorTypes = \">\" | \">=\" | \"==\" | \"<\" | \"<=\";\nexport interface IBackgroundColorComparator {\n    comparatorFn: ComparatorFn;\n    label?: string;\n}\nexport type IComparatorsDict = Partial<\n        Record<ComparatorTypes | string, IBackgroundColorComparator>\n    >;\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    Directive,\n    Host,\n    Input,\n    OnChanges,\n    Self,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { GridsterItemComponent } from \"angular-gridster2\";\n\n/**\n * This directive assigns a \"widgetId\" property to host gridster item. We need it there because moving and resizing the widget with gridster only contains\n * gridster position data and gridster component payload, so we need to identify which widget that event belongs to.\n */\n@Directive({\n    selector: \"[nuiGridsterItemWidgetId]\",\n    standalone: false,\n})\nexport class GridsterItemWidgetIdDirective implements OnChanges {\n    @Input() nuiGridsterItemWidgetId: string;\n\n    constructor(@Host() @Self() private gridsterItem: GridsterItemComponent) {}\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.nuiGridsterItemWidgetId) {\n            (this.gridsterItem as any).widgetId = this.nuiGridsterItemWidgetId;\n        }\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    animate,\n    state,\n    style,\n    transition,\n    trigger,\n} from \"@angular/animations\";\nimport { ChangeDetectorRef, Component, Input } from \"@angular/core\";\n\nimport { IHasChangeDetector } from \"../../types\";\n\n@Component({\n    selector: \"nui-loading\",\n    templateUrl: \"./loading.component.html\",\n    styleUrls: [\"./loading.component.less\"],\n    animations: [\n        trigger(\"animate\", [\n            state(\"true\", style({ opacity: 1 })),\n            state(\"false\", style({ opacity: 0 })),\n            transition(\"false <=> true\", animate(500)),\n        ]),\n    ],\n    standalone: false,\n})\nexport class LoadingComponent implements IHasChangeDetector {\n    static lateLoadKey = \"LoadingComponent\";\n\n    @Input() public active = false;\n\n    constructor(public changeDetector: ChangeDetectorRef) {}\n}\n","<nui-progress\n    [@animate]=\"active\"\n    (@animate.start)=\"$event.element.style.display = 'block'\"\n    (@animate.done)=\"\n        $event.element.style.display = $event.toState ? 'block' : 'none'\n    \"\n    [show]=\"true\"\n    compactMode=\"true\"\n>\n</nui-progress>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\n\nimport { IWidget } from \"../components/widget/types\";\n\n@Injectable()\nexport class WidgetConfigurationService {\n    private widget: IWidget;\n\n    public updateWidget(widget: IWidget): void {\n        this.widget = widget;\n    }\n\n    public getWidget(): IWidget {\n        return this.widget;\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\nimport defaultsDeep from \"lodash/defaultsDeep\";\nimport set from \"lodash/set\";\n\nimport { IWidget, IWidgetTypeDefinition } from \"../components/widget/types\";\nimport { PizzagnaLayer } from \"../types\";\n\n@Injectable()\nexport class WidgetTypesService {\n    private widgetTypes: Record<string, IWidgetTypeDefinition[]> = {};\n\n    constructor() {}\n\n    public registerWidgetType(\n        key: string,\n        version: number,\n        widgetType: IWidgetTypeDefinition\n    ): void {\n        let widgetTypeVersions = this.widgetTypes[key];\n        if (!widgetTypeVersions) {\n            widgetTypeVersions = [];\n            this.widgetTypes[key] = widgetTypeVersions;\n        }\n        if (widgetTypeVersions.length < version) {\n            widgetTypeVersions.length = version;\n        }\n        widgetTypeVersions[version - 1] = widgetType;\n    }\n\n    public getWidgetType(\n        type: string,\n        version?: number\n    ): IWidgetTypeDefinition {\n        const widgetTypeVersions = this.widgetTypes[type];\n        if (!widgetTypeVersions || widgetTypeVersions.length === 0) {\n            throw new Error(\n                \"Type '\" +\n                    type +\n                    \"' not found in the registry. Available types: \" +\n                    Object.keys(this.widgetTypes).join(\", \")\n            );\n        }\n\n        if (\n            typeof version !== \"undefined\" &&\n            (version <= 0 || widgetTypeVersions.length < version)\n        ) {\n            throw new Error(\n                \"Version \" +\n                    version +\n                    \" for widget type '\" +\n                    type +\n                    \"' not registered. Max available version is \" +\n                    widgetTypeVersions.length\n            );\n        }\n\n        const adjustedVersion =\n            typeof version === \"undefined\"\n                ? widgetTypeVersions.length\n                : version;\n        return widgetTypeVersions[adjustedVersion - 1];\n    }\n\n    /**\n     * Take a widget and merge it with the pizzagna of its type\n     *\n     * @param widget\n     *\n     * @return new reference of a widget including the pizzagna of its type\n     */\n    public mergeWithWidgetType(widget: IWidget): IWidget {\n        const widgetType = this.getWidgetType(widget.type, widget.version);\n        return {\n            ...widget,\n            pizzagna: defaultsDeep(widget.pizzagna, widgetType.widget),\n        };\n    }\n\n    public setNode(\n        widgetTemplate: IWidgetTypeDefinition,\n        section: \"widget\" | \"configurator\",\n        pathKey: string,\n        value: any\n    ): void {\n        const widgetSection = `${section}.${PizzagnaLayer.Structure}`;\n        const itemPath = `${\n            widgetTemplate.paths?.[section]?.[pathKey] || pathKey\n        }`;\n\n        const path = `${widgetSection}.${itemPath}`;\n        set(widgetTemplate, path, value);\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport isArray from \"lodash/isArray\";\nimport some from \"lodash/some\";\nimport union from \"lodash/union\";\n\nexport interface IValueChange {\n    previousValue: any;\n    currentValue: any;\n}\n\n/**\n * This function takes a source object with a prioritized list of changes. Goes through and detects the changes on every one of these structures and builds\n * a new object that respects immutability and updates object references only where necessary. This is used to merge lasagna overlays into a component state\n * that maintains its immutability and high performance of change detection.\n *\n * @param result\n * @param changes\n */\nexport function mergeChanges<T>(result: T, ...changes: IValueChange[]): T {\n    const validChanges = changes.filter(\n        (c) =>\n            typeof c.previousValue !== \"undefined\" ||\n            typeof c.currentValue !== \"undefined\"\n    );\n\n    // there were no changes in the provided values, so just return the input object\n    if (!some(validChanges, (c) => c.currentValue !== c.previousValue)) {\n        return result;\n    }\n\n    // if there is only one layer of change just return the currentValue to preserve references\n    if (validChanges.length === 1) {\n        return validChanges[0].currentValue;\n    }\n\n    // first we need to determine the value type\n    const valueType = findType(validChanges);\n    // if it's a primitive type or an array, then we don't go further and we take a new value with the highest priority\n    if (![\"object\", \"object[]\"].includes(valueType)) {\n        // we take the value with the last priority\n        return takeHighestPriorityValue(validChanges);\n    }\n\n    // collect all the keys of all the objects in given changes\n    const keys: string[] = union(\n        ...validChanges.map((c) =>\n            typeof c.currentValue === \"object\"\n                ? Object.keys(c.currentValue || {})\n                : []\n        )\n    );\n\n    const accTemplate = valueType === \"object[]\" ? [] : {};\n\n    const ret = keys.reduce((acc: Record<string, any>, key) => {\n        const checkedResult =\n            typeof result === \"undefined\" ||\n            result === null ||\n            typeof (<Record<string, any>>result)[key] === \"undefined\"\n                ? undefined\n                : (<Record<string, any>>result)[key];\n        const nestedChanges = validChanges.map((c) => ({\n            previousValue:\n                typeof c.previousValue === \"undefined\" ||\n                c.previousValue == null\n                    ? undefined\n                    : c.previousValue[key],\n            currentValue:\n                typeof c.currentValue === \"undefined\" || c.currentValue == null\n                    ? undefined\n                    : c.currentValue[key],\n        }));\n\n        // recursively execute this method for given property\n        acc[key] = mergeChanges(\n            checkedResult as Record<string, any>,\n            ...nestedChanges\n        );\n        return acc;\n    }, accTemplate);\n\n    return ret as T;\n}\n\n/**\n * Take current value from given changes with highest priority - the last one wins\n *\n * @param changes\n */\nfunction takeHighestPriorityValue(changes: IValueChange[]) {\n    for (let i = changes.length - 1; i >= 0; i--) {\n        const value = changes[i].currentValue;\n        if (typeof value !== \"undefined\") {\n            return value;\n        }\n    }\n    return undefined;\n}\n\nfunction findType(changes: IValueChange[]): string {\n    for (const c of changes) {\n        const type = typeof c.currentValue;\n        if (type !== \"undefined\" && c.currentValue != null) {\n            if (isArray(c.currentValue)) {\n                const arrElemType = typeof c.currentValue[0];\n                if (arrElemType === \"object\") {\n                    return \"object[]\";\n                } else {\n                    return \"array\";\n                }\n            }\n            if (c.currentValue.constructor !== Object) {\n                return \"advanced\";\n            }\n\n            return type;\n        }\n    }\n    return typeof undefined;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\n\nimport { immutableSet } from \"@nova-ui/bits\";\n\nimport { IComponentConfiguration, IPizzagna, PizzagnaLayer } from \"../../types\";\n\n// TODO: make it dynamic!\nconst CHILD_ELEM_COMPONENT_TYPE = \"WidgetConfiguratorSectionComponent\";\n\n@Injectable()\nexport class DynamicComponentCreator {\n    public getPizzagnaUpdatedWithComponents(\n        pizzagna: IPizzagna,\n        parentPath: string,\n        componentIds: string[]\n    ): IPizzagna {\n        const parent = pizzagna[PizzagnaLayer.Structure][parentPath];\n        const template = parent.properties\n            ?.template as Partial<IComponentConfiguration>[];\n\n        return this.getPizzagnaWithChildren(\n            pizzagna,\n            componentIds,\n            template,\n            parentPath\n        );\n    }\n\n    private getPizzagnaWithChildren(\n        pizzagna: IPizzagna,\n        componentIds: string[],\n        template: Partial<IComponentConfiguration>[],\n        parentPath: string\n    ) {\n        const children = componentIds.map((id) => ({\n            id,\n            componentType: CHILD_ELEM_COMPONENT_TYPE,\n        })) as IComponentConfiguration[];\n\n        let updatedPizzagna = children.reduce(\n            (res, child) => this.updateChildPizzagna(res, template, child),\n            pizzagna\n        );\n        updatedPizzagna = this.getPizzagnaWithNodesSet(\n            updatedPizzagna,\n            parentPath,\n            componentIds\n        );\n\n        return updatedPizzagna;\n    }\n\n    private updateChildPizzagna(\n        pizzagna: IPizzagna,\n        template: Partial<IComponentConfiguration>[],\n        child: IComponentConfiguration\n    ) {\n        let updatedPizzagna = immutableSet(\n            pizzagna,\n            `${PizzagnaLayer.Structure}.${child.id}`,\n            child\n        );\n\n        const nodes = template.map((node) => ({\n            ...node,\n            id: `${child.id}/${node.id}`,\n        }));\n        updatedPizzagna = nodes.reduce(\n            (res, node) =>\n                immutableSet(\n                    res,\n                    `${PizzagnaLayer.Structure}.${node.id}`,\n                    node\n                ),\n            updatedPizzagna\n        );\n\n        const nodesIDs = nodes.map((node) => node.id);\n        updatedPizzagna = this.getPizzagnaWithNodesSet(\n            updatedPizzagna,\n            child.id,\n            nodesIDs\n        );\n\n        return updatedPizzagna;\n    }\n\n    private getPizzagnaWithNodesSet(\n        pizzagna: IPizzagna,\n        componentId: string,\n        nodes: string[]\n    ) {\n        const path = `${PizzagnaLayer.Structure}.${componentId}.properties.nodes`;\n\n        return immutableSet(pizzagna, path, nodes);\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { PizzagnaLayer } from \"../../types\";\n\nexport interface IPizzagnaProperty {\n    pizzagnaKey?: string;\n    componentId: string;\n    providerKey?: string;\n    propertyPath: string[];\n}\n\nexport function getPizzagnaPropertyPath(definition: IPizzagnaProperty): string {\n    if (definition.providerKey) {\n        return [\n            definition.pizzagnaKey || PizzagnaLayer.Data,\n            definition.componentId,\n            \"providers\",\n            definition.providerKey,\n            \"properties\",\n            ...definition.propertyPath,\n        ].join(\".\");\n    } else {\n        return [\n            definition.pizzagnaKey || PizzagnaLayer.Data,\n            definition.componentId,\n            \"properties\",\n            ...definition.propertyPath,\n        ].join(\".\");\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Inject, Injectable } from \"@angular/core\";\nimport isArray from \"lodash/isArray\";\nimport omit from \"lodash/omit\";\nimport { ReplaySubject } from \"rxjs\";\n\nimport { EventBus, IEvent, immutableSet } from \"@nova-ui/bits\";\n\nimport { DynamicComponentCreator } from \"./dynamic-component-creator.service\";\nimport { ISetPropertyPayload, SET_PROPERTY_VALUE } from \"../../services/types\";\nimport {\n    IComponentConfiguration,\n    IPizza,\n    IPizzagna,\n    PizzagnaLayer,\n    PIZZAGNA_EVENT_BUS,\n} from \"../../types\";\nimport {\n    getPizzagnaPropertyPath,\n    IPizzagnaProperty,\n} from \"../functions/get-pizzagna-property-path\";\n\n/**\n * This service allows pizzagna sub-components to read data of other components and initiate changes of property values\n */\n@Injectable()\nexport class PizzagnaService {\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>,\n        private dynamicComponentCreator: DynamicComponentCreator\n    ) {}\n\n    public pizzagna: IPizzagna;\n    public pizzaChanged = new ReplaySubject<IPizza>(1);\n    private components: IPizza;\n\n    public updatePizzagna(pizzagna: IPizzagna): void {\n        this.pizzagna = pizzagna;\n    }\n\n    public updateComponents(components: IPizza): void {\n        this.components = components;\n        this.pizzaChanged.next(components);\n    }\n\n    public getComponent(refId: string): IComponentConfiguration {\n        const component = this.components[refId] as IComponentConfiguration;\n        if (!component) {\n            throw new Error(\"Component '\" + refId + \"' is not defined!\");\n        }\n        return component;\n    }\n\n    public setProperty(property: IPizzagnaProperty | string, value: any): void {\n        const path =\n            typeof property === \"string\"\n                ? property\n                : getPizzagnaPropertyPath(property);\n        this.eventBus\n            .getStream(SET_PROPERTY_VALUE)\n            .next({ payload: { path, value } as ISetPropertyPayload });\n    }\n\n    public createComponentsFromTemplateWithProperties(\n        parentPath: string,\n        components: any\n    ): void {\n        const componentIds = components.map((c: any) => c.id);\n        let updatedPizzagna: IPizzagna =\n            this.dynamicComponentCreator.getPizzagnaUpdatedWithComponents(\n                this.pizzagna,\n                parentPath,\n                componentIds\n            );\n\n        for (const component of components) {\n            for (const childId of Object.keys(component.children)) {\n                updatedPizzagna = immutableSet(\n                    updatedPizzagna,\n                    `${PizzagnaLayer.Data}.${childId}.properties`,\n                    component.children[childId]\n                );\n            }\n        }\n\n        // this is here to update the pizzagna for other converters that need to access the value immediately\n        this.updatePizzagna(updatedPizzagna);\n\n        this.eventBus.getStream(SET_PROPERTY_VALUE).next({\n            payload: {\n                path: \"\",\n                value: updatedPizzagna,\n            } as ISetPropertyPayload,\n        });\n    }\n\n    public createComponentsFromTemplate(\n        parentPath: string,\n        componentIds: string[]\n    ): void {\n        const updatedPizzagna =\n            this.dynamicComponentCreator.getPizzagnaUpdatedWithComponents(\n                this.pizzagna,\n                parentPath,\n                componentIds\n            );\n        // this is here to update the pizzagna for other converters that need to access the value immediately\n        this.updatePizzagna(updatedPizzagna);\n        this.eventBus.getStream(SET_PROPERTY_VALUE).next({\n            payload: {\n                path: \"\",\n                value: updatedPizzagna,\n            } as ISetPropertyPayload,\n        });\n    }\n\n    public removeComponents(ids: string | string[]): void {\n        if (isArray(ids)) {\n            ids.forEach((id) => this.removeComponent(id));\n        } else {\n            this.removeComponent(ids);\n        }\n    }\n\n    private removeComponent(id: string): void {\n        const updatedPizzagna: IPizzagna = { ...this.pizzagna };\n\n        const componentNodes =\n            this.pizzagna[PizzagnaLayer.Structure][id].properties?.nodes;\n        const componentsToRemove = [id, ...componentNodes];\n\n        const layers = [\n            PizzagnaLayer.Structure,\n            PizzagnaLayer.Configuration,\n            PizzagnaLayer.Data,\n        ];\n        for (const layer of layers) {\n            if (!updatedPizzagna[layer]) {\n                continue;\n            }\n            for (const component of componentsToRemove) {\n                updatedPizzagna[layer] = omit(\n                    updatedPizzagna[layer],\n                    component\n                );\n            }\n        }\n\n        this.eventBus.getStream(SET_PROPERTY_VALUE).next({\n            payload: {\n                path: \"\",\n                value: updatedPizzagna,\n            } as ISetPropertyPayload,\n        });\n        this.updatePizzagna(updatedPizzagna);\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { BehaviorSubject, ReplaySubject } from \"rxjs\";\n\nimport { EventDefinition, IEvent } from \"@nova-ui/bits\";\n\nimport { IComponentIdPayload } from \"../components/providers/types\";\n\nexport const DATA_SOURCE_OUTPUT = new EventDefinition(\n    \"DATA_SOURCE_OUTPUT\",\n    () => new ReplaySubject<IEvent>(1)\n);\nexport const DATA_SOURCE_DESTROYED = new EventDefinition<IComponentIdPayload>(\n    \"DATA_SOURCE_DESTROYED\"\n);\nexport const DATA_SOURCE_CHANGE = new EventDefinition(\"DATA_SOURCE_CHANGE\");\nexport const DATA_SOURCE_CREATED = new EventDefinition(\n    \"DATA_SOURCE_CREATED\",\n    () => new BehaviorSubject<IEvent>({ payload: undefined })\n);\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Inject, Injectable, OnDestroy, Optional } from \"@angular/core\";\nimport isUndefined from \"lodash/isUndefined\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport {\n    EventBus,\n    IDataSource,\n    IEvent,\n    IFilteringOutputs,\n} from \"@nova-ui/bits\";\n\nimport {\n    IComponentIdPayload,\n    IDataSourceBusyPayload,\n    IDataSourceOutput,\n} from \"./types\";\nimport {\n    DATA_SOURCE_DESTROYED,\n    DATA_SOURCE_OUTPUT,\n} from \"../../configurator/types\";\nimport { PizzagnaService } from \"../../pizzagna/services/pizzagna.service\";\nimport {\n    DATA_SOURCE_BUSY,\n    DATA_SOURCE_INVOKED,\n    REFRESH,\n} from \"../../services/types\";\nimport {\n    DATA_SOURCE,\n    IConfigurable,\n    IProperties,\n    PizzagnaLayer,\n    PIZZAGNA_EVENT_BUS,\n} from \"../../types\";\n\n@Injectable()\nexport class DataSourceAdapter<T extends IFilteringOutputs = IFilteringOutputs>\n    implements IConfigurable, OnDestroy\n{\n    protected componentId: string;\n    protected lastValue: T;\n    protected readonly destroy$ = new Subject<void>();\n    protected dataSourceConfiguration: Record<string, any>;\n\n    private propertyPath: string;\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) public eventBus: EventBus<IEvent>,\n        @Optional() @Inject(DATA_SOURCE) public dataSource: IDataSource<T>,\n        protected pizzagnaService: PizzagnaService\n    ) {\n        if (!this.dataSource) {\n            return;\n        }\n        this.setupRefreshListener();\n\n        this.dataSource.outputsSubject\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((event: T | IDataSourceOutput<T>) =>\n                this.handleDataSourceUpdate(event)\n            );\n\n        if (this.dataSource.busy) {\n            this.dataSource.busy\n                .pipe(takeUntil(this.destroy$))\n                .subscribe((busy: boolean) => {\n                    this.eventBus.getStream(DATA_SOURCE_BUSY).next({\n                        payload: {\n                            componentId: this.componentId,\n                            busy,\n                        } as IDataSourceBusyPayload,\n                    });\n                });\n        }\n    }\n\n    protected setupRefreshListener(): void {\n        this.eventBus\n            .getStream(REFRESH)\n            .pipe(takeUntil(this.destroy$))\n            .subscribe(() => this.handleRefresh());\n    }\n\n    protected handleRefresh(): void {\n        this.eventBus.getStream(DATA_SOURCE_INVOKED).next({});\n        this.dataSource.applyFilters();\n    }\n\n    protected handleDataSourceUpdate(value: T | IDataSourceOutput<T>): void {\n        this.lastValue = isUndefined(value?.result) ? value : value?.result;\n        this.updateOutput(this.lastValue);\n        this.eventBus\n            .getStream(DATA_SOURCE_OUTPUT)\n            .next({ payload: { componentId: this.componentId, ...value } });\n    }\n\n    public ngOnDestroy(): void {\n        this.updateOutput(undefined);\n\n        const destroyedEvent: IEvent<IComponentIdPayload> = {\n            payload: { componentId: this.componentId },\n        };\n        this.eventBus.getStream(DATA_SOURCE_DESTROYED).next(destroyedEvent);\n\n        const busyEvent: IEvent<IDataSourceBusyPayload> = {\n            payload: { componentId: this.componentId, busy: false },\n        };\n        this.eventBus.getStream(DATA_SOURCE_BUSY).next(busyEvent);\n\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    public updateConfiguration(properties: IProperties): void {\n        if (properties.componentId) {\n            this.componentId = properties.componentId;\n        }\n\n        this.updateAdapterProperties(properties);\n        this.updateDataSourceProperties(properties);\n\n        if (typeof this.lastValue !== \"undefined\") {\n            this.updateOutput(this.lastValue);\n        }\n    }\n\n    protected updateAdapterProperties(properties: IProperties): void {\n        this.propertyPath = properties.propertyPath;\n    }\n\n    protected updateDataSourceProperties(properties: IProperties): void {\n        const dataSourceConfiguration = properties?.dataSource?.properties;\n        if (this.dataSourceConfiguration !== dataSourceConfiguration) {\n            this.dataSourceConfiguration = dataSourceConfiguration;\n            const configurableDataSource = this\n                .dataSource as unknown as IConfigurable;\n            if (configurableDataSource?.updateConfiguration) {\n                configurableDataSource.updateConfiguration(\n                    properties.dataSource?.properties\n                );\n            }\n            this.eventBus.getStream(REFRESH).next({});\n        }\n\n        // check if this is the first call of updateConfiguration and there is no dataSource configuration present in the incoming properties\n        // This results in two initial invocations of the data source, and we should eventually remove it. But, currently,\n        // widgets sometimes rely on it in order to display their initial data.\n        if (\n            typeof this.dataSourceConfiguration === \"undefined\" &&\n            typeof dataSourceConfiguration === \"undefined\"\n        ) {\n            // using a setTimeout here to give configurable data sources time to receive their configurations before they're invoked\n            setTimeout(() => this.eventBus.getStream(REFRESH).next({}));\n        }\n    }\n\n    protected updateOutput(value: T | undefined): void {\n        this.pizzagnaService.setProperty(\n            {\n                pizzagnaKey: PizzagnaLayer.Data,\n                componentId: this.componentId,\n                propertyPath: [this.propertyPath],\n            },\n            this.processOutput(value)\n        );\n    }\n\n    protected processOutput(value: T | undefined): T | undefined {\n        return value;\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Inject } from \"@angular/core\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport {\n    EventBus,\n    IDataSourceDrilldown,\n    IEvent,\n    IFilteringOutputs,\n} from \"@nova-ui/bits\";\n\nimport { DataSourceAdapter } from \"./data-source-adapter\";\nimport {\n    IDrilldownComponentConfiguration,\n    IDrilldownComponentsConfiguration,\n} from \"./types\";\nimport { PizzagnaService } from \"../../pizzagna/services/pizzagna.service\";\nimport { DRILLDOWN, REFRESH } from \"../../services/types\";\nimport {\n    DATA_SOURCE,\n    IProperties,\n    PizzagnaLayer,\n    PIZZAGNA_EVENT_BUS,\n} from \"../../types\";\n\nexport class DrilldownDataSourceAdapter extends DataSourceAdapter {\n    protected dataPath: string;\n    protected navigationBarId: string;\n    protected drillstate: string[] = [];\n    protected groupBy: string[];\n    protected componentsConfig: IDrilldownComponentsConfiguration;\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        @Inject(DATA_SOURCE) public dataSource: IDataSourceDrilldown,\n        pizzagnaService: PizzagnaService\n    ) {\n        super(eventBus, dataSource, pizzagnaService);\n\n        this.eventBus\n            .getStream(DRILLDOWN)\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((event: IEvent) => {\n                if (this.dataSource.busy?.value) {\n                    return;\n                }\n                this.onDrilldown(event);\n            });\n\n        this.registerFilters();\n    }\n\n    protected updateAdapterProperties(properties: IProperties): void {\n        this.dataPath = properties.dataPath;\n        this.drillstate = properties.drillstate || this.drillstate;\n        this.groupBy = properties.groupBy;\n        this.componentsConfig = properties.componentsConfig;\n        this.navigationBarId = properties.navigationBarId;\n    }\n\n    protected updateOutput(output: IFilteringOutputs | undefined): void {\n        const widgetInput = this.getWidgetInput(\n            output,\n            this.drillstate.length !== this.groupBy.length\n        );\n        const widgetPath = `${PizzagnaLayer.Data}.${this.componentId}.properties`;\n        this.pizzagnaService.setProperty(widgetPath, widgetInput);\n\n        // update navBar label\n        if (this.navigationBarId) {\n            const navBarPath = `${PizzagnaLayer.Data}.${this.navigationBarId}.properties.navBarConfig.label`;\n            const navBarIsRootPath = `${PizzagnaLayer.Data}.${this.navigationBarId}.properties.navBarConfig.isRoot`;\n            const navBarBackPath = `${PizzagnaLayer.Data}.${this.navigationBarId}.properties.navBarConfig.buttons.back.disabled`;\n            this.pizzagnaService.setProperty(\n                navBarPath,\n                this.drillstate[this.drillstate.length - 1]\n            );\n            this.pizzagnaService.setProperty(\n                navBarBackPath,\n                !!this.drillstate.length\n            );\n            this.pizzagnaService.setProperty(\n                navBarIsRootPath,\n                !this.drillstate.length\n            );\n        }\n    }\n\n    protected getWidgetInput(\n        data: any,\n        group: boolean\n    ): Record<string, any> & {\n        configuration: IDrilldownComponentConfiguration;\n    } {\n        const configuration = this.componentsConfig[group ? \"group\" : \"leaf\"];\n\n        return {\n            [this.dataPath]: data,\n            configuration,\n        };\n    }\n\n    protected onDrilldown(event: IEvent): void {\n        const { payload } = event;\n\n        if (payload.reset) {\n            this.drillstate = [];\n            this.eventBus.next(REFRESH, {});\n            return;\n        }\n\n        if (payload.back) {\n            this.drillstate.length = this.drillstate.length - 1;\n            this.eventBus.next(REFRESH, {});\n            return;\n        }\n\n        this.drillstate.push(payload.id);\n        this.eventBus.next(REFRESH, {});\n    }\n\n    private registerFilters() {\n        this.dataSource.registerComponent({\n            group: {\n                componentInstance: {\n                    getFilters: () => ({\n                        // type: \"group\",\n                        value: this.groupBy,\n                    }),\n                },\n            },\n            drillstate: {\n                componentInstance: {\n                    getFilters: () => ({\n                        // type: \"drillstate\",\n                        value: this.drillstate,\n                    }),\n                },\n            },\n        });\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Inject, Injectable, OnDestroy } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IEvent } from \"@nova-ui/bits\";\n\nimport { PIZZAGNA_EVENT_BUS } from \"../../types\";\n\n/**\n * A provider that helps with debugging events on the pizzagna event bus. Include it anywhere in the widget to activate it.\n */\n@Injectable()\nexport class EventBusDebugger implements OnDestroy {\n    private readonly destroy$ = new Subject<void>();\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>\n    ) {\n        eventBus.streamAdded\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((stream) => {\n                eventBus\n                    .getStream({ id: stream })\n                    .pipe(takeUntil(this.destroy$))\n                    .subscribe((event) => {\n                        console.log(`${event.id}: `, event.payload);\n                    });\n            });\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Inject, Injectable } from \"@angular/core\";\n\nimport { EventBus, IEvent } from \"@nova-ui/bits\";\n\nimport { INTERACTION } from \"../../../services/types\";\nimport { IConfigurable, IProperties, PIZZAGNA_EVENT_BUS } from \"../../../types\";\n\nexport interface IInteractionPayload<T> {\n    interactionType?: string;\n    data: T;\n}\n\nexport interface IInteractionHandlerProperties extends IProperties {\n    interactionType?: string;\n}\n\n@Injectable()\nexport abstract class InteractionHandler<\n    T extends IInteractionHandlerProperties,\n    P\n> implements IConfigurable\n{\n    protected properties: T;\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS)\n        protected readonly eventBus: EventBus<IEvent>\n    ) {\n        this.initializeSubscriptions();\n    }\n\n    public updateConfiguration(properties: T): void {\n        this.properties = properties;\n    }\n\n    protected initializeSubscriptions(): void {\n        this.eventBus.getStream(INTERACTION).subscribe((event) => {\n            if (\n                !this.properties?.interactionType ||\n                this.properties?.interactionType ===\n                    event.payload?.interactionType\n            ) {\n                // TODO: ensure that payload is defined\n                // @ts-ignore\n                this.handleInteraction(event.payload);\n            }\n        });\n    }\n\n    protected abstract handleInteraction(\n        interaction: IInteractionPayload<P>\n    ): void;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\n\nimport { LoggerService } from \"@nova-ui/bits\";\n\n@Injectable({\n    providedIn: \"root\",\n})\nexport class UrlInteractionService {\n    constructor(private logger: LoggerService) {}\n\n    public template(url: string, data: any): string {\n        const regex = new RegExp(/\\$\\{([a-zA-Z0-9.]*)\\}/g);\n        return url.replace(regex, (match, captured) => {\n            try {\n                return this.evaluate(captured.split(\".\"), data) ?? \"\";\n            } catch (e) {\n                this.logger.error(e);\n                return \"\";\n            }\n        });\n    }\n\n    private evaluate(expresion: string[], data: any): string {\n        return expresion.reduce((result, item) => result[item], data);\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Inject, Injectable } from \"@angular/core\";\n\nimport { EventBus, IEvent, LoggerService } from \"@nova-ui/bits\";\n\nimport {\n    IInteractionHandlerProperties,\n    IInteractionPayload,\n    InteractionHandler,\n} from \"./interaction-handler\";\nimport { UrlInteractionService } from \"../../../services/url-interaction.service\";\nimport { PIZZAGNA_EVENT_BUS } from \"../../../types\";\n\nexport interface IUrlInteractionHandlerProperties\n    extends IInteractionHandlerProperties {\n    url: string;\n    newWindow?: boolean;\n}\n\n// Window is an interface, so it fails when used in constructor parameters for AoT\nexport class WindowObject extends Window {}\n\n@Injectable()\nexport class UrlInteractionHandler extends InteractionHandler<\n    IUrlInteractionHandlerProperties,\n    any\n> {\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        @Inject(\"windowObject\") private window: WindowObject,\n        private logger: LoggerService,\n        private urlInteractionService: UrlInteractionService\n    ) {\n        super(eventBus);\n    }\n\n    protected handleInteraction(interaction: IInteractionPayload<any>): void {\n        if (!this.properties?.url) {\n            this.logger.warn(\"The target url has not been defined.\");\n            return;\n        }\n        const href = this.urlInteractionService.template(this.properties.url, {\n            data: interaction.data,\n        });\n\n        // if the link evaluates as empty, then don't go anywhere\n        if (!href) {\n            return;\n        }\n\n        if (this.properties.newWindow) {\n            this.window.open(href);\n        } else {\n            this.window.location.href = href;\n        }\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\n\nimport { IComparatorsDict } from \"../types\";\n\nexport const DEFAULT_COMPARATORS: IComparatorsDict = {\n    \">\": {\n        comparatorFn: (a: any, b: any) => a > b,\n        label: \"Value is greater than\",\n    },\n    \"<\": {\n        comparatorFn: (a: any, b: any) => a < b,\n        label: \"Value is less than\",\n    },\n    \">=\": {\n        comparatorFn: (a: any, b: any) => a >= b,\n        label: \"Value is greater, or equal to\",\n    },\n    \"<=\": {\n        comparatorFn: (a: any, b: any) => a <= b,\n        label: \"Value is less than, or equal to\",\n    },\n    \"==\": {\n        // eslint-disable-next-line eqeqeq\n        comparatorFn: (a: any, b: any) => a == b,\n        label: \"Value is exactly\",\n    },\n};\n\n@Injectable({ providedIn: \"root\" })\nexport class KpiColorComparatorsRegistryService {\n    protected comparators: IComparatorsDict;\n\n    constructor() {\n        this.comparators = { ...DEFAULT_COMPARATORS };\n    }\n\n    public registerComparators(comparators: IComparatorsDict): void {\n        this.comparators = {\n            ...this.comparators,\n            ...comparators,\n        };\n    }\n\n    public clearComparators(): void {\n        this.comparators = {};\n    }\n\n    public getComparators(): IComparatorsDict {\n        return this.comparators;\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Inject, Injectable, OnDestroy, Optional } from \"@angular/core\";\nimport { Subject, Subscription } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { IDataSource } from \"@nova-ui/bits\";\n\nimport { IDataSourceOutput, IKpiColorRules } from \"./types\";\nimport { PizzagnaService } from \"../../pizzagna/services/pizzagna.service\";\nimport { KpiColorComparatorsRegistryService } from \"../../services/kpi-color-comparators-registry.service\";\nimport { DATA_SOURCE, IComparatorsDict, IConfigurable } from \"../../types\";\nimport { IKpiData } from \"../kpi-widget/types\";\n\n@Injectable()\nexport class KpiColorPrioritizer implements IConfigurable, OnDestroy {\n    protected readonly destroy$ = new Subject<void>();\n    protected componentId: string;\n    protected propertyPath: string = \"backgroundColor\";\n    protected rules: IKpiColorRules[] | undefined;\n    protected comparators: IComparatorsDict;\n\n    private dsSubscription$: Subscription;\n    private latestValueFromDS: any;\n\n    constructor(\n        @Optional() @Inject(DATA_SOURCE) public dataSource: IDataSource,\n        protected pizzagnaService: PizzagnaService,\n        comparatorsRegistry: KpiColorComparatorsRegistryService\n    ) {\n        this.comparators = comparatorsRegistry.getComparators();\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    public updateConfiguration(properties: any): void {\n        if (properties?.rules) {\n            this.rules = properties?.rules;\n            this.subscribeToDataChanges();\n            this.checkColorConditions();\n        }\n    }\n\n    public setComponent(component: any, componentId: string): void {\n        this.subscribeToDataChanges();\n\n        this.componentId = componentId;\n    }\n\n    private subscribeToDataChanges() {\n        if (!this.dataSource) {\n            return;\n        }\n\n        this.dsSubscription$?.unsubscribe();\n\n        this.dsSubscription$ = this.dataSource.outputsSubject\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((event: IDataSourceOutput<IKpiData>) => {\n                this.latestValueFromDS =\n                    event.result?.value || this.latestValueFromDS;\n                this.checkColorConditions();\n            });\n    }\n\n    private checkColorConditions() {\n        if (!this.rules) {\n            return;\n        }\n\n        if (this.rules.length === 0) {\n            this.setColor(undefined);\n            this.dsSubscription$?.unsubscribe();\n            return;\n        }\n\n        let colorToSet: string | undefined;\n        // reverse because last rule has top priority\n        const newRules = this.rules && [...this.rules].reverse();\n        for (const rule of newRules) {\n            if (\n                this.comparators[rule.comparisonType]?.comparatorFn(\n                    this.latestValueFromDS,\n                    rule.value\n                )\n            ) {\n                colorToSet = rule.color;\n                break; // exit if the rule matches\n            }\n        }\n\n        this.setColor(colorToSet);\n    }\n\n    /**\n     * Sets the color to pizzagna\n     *\n     * @param color - Color to set\n     */\n    private setColor(color: string | undefined) {\n        this.pizzagnaService.setProperty(\n            {\n                componentId: this.componentId,\n                propertyPath: [this.propertyPath],\n            },\n            color\n        );\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { IKpiData } from \"../../../../components/kpi-widget/types\";\nimport { IProviderConfiguration } from \"../../../../types\";\nimport { IItemConfiguration } from \"../../types\";\n\nexport interface IKpiItemConfiguration extends IItemConfiguration {\n    widgetData: IKpiData;\n    thresholds: IKpiThresholdsConfig;\n    dataSource: IProviderConfiguration;\n}\n\nexport interface IKpiThresholdsConfig {\n    showThresholds: boolean;\n    reversedThresholds: boolean;\n    warningThresholdValue?: number;\n    criticalThresholdValue: number;\n    backgroundColor?: string;\n}\n\n/**\n * @deprecated - Please use IKpiData instead - NUI-5853\n */\nexport interface IKpiWidgetIndicatorData extends IKpiData {\n    description?: string;\n}\n\n/** @ignore */\nexport enum KpiWidgetThresholdColors {\n    Warning = \"var(--nui-color-semantic-warning)\",\n    Critical = \"var(--nui-color-semantic-critical)\",\n}\n\nexport enum KpiWidgetFontSizes {\n    Small = \"24px\",\n    Medium = \"48px\",\n    Large = \"72px\",\n    ExtraLarge = \"120px\",\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { DecimalPipe } from \"@angular/common\";\nimport { Inject, Optional } from \"@angular/core\";\nimport _isNil from \"lodash/isNil\";\n\nimport { EventBus, IDataSource, IEvent } from \"@nova-ui/bits\";\n\nimport { DataSourceAdapter } from \"./data-source-adapter\";\nimport {\n    IKpiThresholdsConfig,\n    KpiWidgetThresholdColors,\n} from \"../../configurator/components/widgets/kpi/types\";\nimport { PizzagnaService } from \"../../pizzagna/services/pizzagna.service\";\nimport { DATA_SOURCE, PIZZAGNA_EVENT_BUS } from \"../../types\";\nimport { IKpiData } from \"../kpi-widget/types\";\n\nexport interface IKpiDataSourceAdapterConfiguration {\n    thresholds: IKpiThresholdsConfig;\n}\n\nexport class KpiDataSourceAdapter extends DataSourceAdapter<IKpiData> {\n    private thresholds: IKpiThresholdsConfig;\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        @Optional() @Inject(DATA_SOURCE) dataSource: IDataSource,\n        pizzagnaService: PizzagnaService,\n        private numberPipe: DecimalPipe\n    ) {\n        super(eventBus, dataSource, pizzagnaService);\n    }\n\n    public updateConfiguration(\n        properties: IKpiDataSourceAdapterConfiguration\n    ): void {\n        this.thresholds = properties.thresholds;\n\n        super.updateConfiguration(properties);\n    }\n\n    protected processOutput(data: IKpiData): IKpiData {\n        const processedValue = this.processThresholds(data);\n        // processNumberFormat changes data.value to a string which is why this function needs to be run after processThresholds.\n        return this.processNumberFormat(processedValue);\n    }\n\n    public setComponent(component: any, componentId: string): void {\n        if (componentId) {\n            this.componentId = componentId;\n        }\n    }\n\n    private getThresholdColor(\n        thresholdsConfig: IKpiThresholdsConfig,\n        indicatorData: IKpiData,\n        defaultColor: string | undefined\n    ) {\n        const thresholdChecks = this.getThresholdChecks(\n            thresholdsConfig,\n            indicatorData,\n            thresholdsConfig.reversedThresholds\n        );\n        if (thresholdChecks.warningCheck) {\n            return KpiWidgetThresholdColors.Warning;\n        }\n        if (thresholdChecks.criticalCheck) {\n            return KpiWidgetThresholdColors.Critical;\n        }\n        return defaultColor;\n    }\n\n    private getThresholdChecks(\n        indicatorConfig: IKpiThresholdsConfig,\n        indicatorData: IKpiData,\n        isReversed: boolean\n    ) {\n        const warningThreshold = indicatorConfig.warningThresholdValue;\n        const criticalThreshold = indicatorConfig.criticalThresholdValue;\n        const reversedWarningCheck =\n            !_isNil(warningThreshold) &&\n            indicatorData.value <= warningThreshold &&\n            indicatorData.value > criticalThreshold;\n        const reversedCriticalCheck = indicatorData.value <= criticalThreshold;\n        const normalWarningCheck =\n            !_isNil(warningThreshold) &&\n            indicatorData.value >= warningThreshold &&\n            indicatorData.value < criticalThreshold;\n        const normalCriticalCheck = indicatorData.value >= criticalThreshold;\n        return {\n            warningCheck: isReversed\n                ? reversedWarningCheck\n                : normalWarningCheck,\n            criticalCheck: isReversed\n                ? reversedCriticalCheck\n                : normalCriticalCheck,\n        };\n    }\n\n    private processThresholds(data: IKpiData) {\n        if (\n            !data ||\n            !this.thresholds?.showThresholds ||\n            typeof data.value !== \"number\"\n        ) {\n            return data;\n        }\n        const thresholdColor = this.getThresholdColor(\n            this.thresholds,\n            data,\n            data.backgroundColor\n        );\n        return {\n            ...data,\n            backgroundColor: thresholdColor,\n        };\n    }\n\n    private processNumberFormat(data: IKpiData) {\n        if (typeof data?.value !== \"number\" || !data?.numberFormat) {\n            return data;\n        }\n        const numValue = this.numberPipe.transform(\n            data.value,\n            data.numberFormat\n        );\n        return {\n            ...data,\n            value: numValue,\n        };\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Inject, Injectable } from \"@angular/core\";\nimport isArray from \"lodash/isArray\";\nimport { BehaviorSubject, Observable, Subject } from \"rxjs\";\nimport { distinctUntilChanged, filter, takeUntil, tap } from \"rxjs/operators\";\n\nimport { EventBus, IEvent } from \"@nova-ui/bits\";\n\nimport { IBroker, IBrokerUserConfig, IBrokerValue } from \"./types\";\nimport { IPizzagnaProperty } from \"../../pizzagna/functions/get-pizzagna-property-path\";\nimport { PizzagnaService } from \"../../pizzagna/services/pizzagna.service\";\nimport {\n    IConfigurable,\n    IProperties,\n    PizzagnaLayer,\n    PIZZAGNA_EVENT_BUS,\n} from \"../../types\";\n\n@Injectable()\nexport class KpiScaleSyncBroker implements IConfigurable {\n    protected properties: IProperties;\n    protected componentId: string;\n\n    private valuesObject: Record<string, Array<Partial<IBrokerValue>>>;\n    private brokers: IBroker[] = [];\n    private builder = new KpiScaleSyncBrokerBuilder(this.brokers);\n    private destroySubscriptions$ = new Subject<void>();\n    private tileNodes: string[];\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>,\n        private pizzagnaService: PizzagnaService\n    ) {\n        this.valuesObject = this.builder.valuesObject;\n    }\n\n    public updateConfiguration(properties: IProperties): void {\n        this.properties = properties;\n\n        if (this.componentId) {\n            this.createPropertiesAndSubscribeToBrokers();\n        }\n    }\n\n    public configure(): KpiScaleSyncBrokerBuilder {\n        return this.builder;\n    }\n\n    public getBrokers(): readonly IBroker[] {\n        return [...this.brokers];\n    }\n\n    public subscribeToBrokers(): void {\n        this.destroy();\n\n        this.brokers.forEach((broker) => {\n            broker.in$\n                .pipe(\n                    filter((_) => !!broker.in$.observers.length),\n                    distinctUntilChanged(),\n                    tap((data) => this.configureValueModel(data)),\n                    tap((data) => this.processAndEmitSyncedValue(data, broker)),\n                    takeUntil(this.destroySubscriptions$)\n                )\n                .subscribe();\n        });\n    }\n\n    public setComponent(component: any, componentId: string): void {\n        this.componentId = componentId;\n        this.updateConfiguration(this.properties);\n    }\n\n    public destroy(): void {\n        this.destroySubscriptions$.next();\n        this.destroySubscriptions$.complete();\n    }\n\n    private processAndEmitSyncedValue(data: IBrokerValue, broker: IBroker) {\n        let fn: Function = this.getMin;\n\n        if (broker?.type) {\n            fn = broker.type === \"min\" ? this.getMin : this.getMax;\n        }\n\n        const valuesToCompare: (number | undefined)[] = this.valuesObject[\n            broker.id\n        ]\n            .filter((item) => item.targetID && item.targetValue)\n            .map((item) => item.targetValue);\n\n        broker.out$.next({\n            ...data,\n            targetValue: fn([...valuesToCompare]),\n        });\n    }\n\n    private configureValueModel(data: IBrokerValue) {\n        const targetObj = this.valuesObject[data.id].filter(\n            (obj) => obj.targetID === data.targetID\n        );\n\n        targetObj.length\n            ? (targetObj[0].targetValue = data.targetValue)\n            : this.valuesObject[data.id].push({\n                  targetID: data.targetID,\n                  targetValue: data.targetValue,\n              });\n    }\n\n    private createPropertiesAndSubscribeToBrokers() {\n        this.tileNodes = this.pizzagnaService.getComponent(\n            this.componentId\n        ).properties?.nodes;\n        const { scaleSyncConfig } = this.properties;\n\n        if (!this.tileNodes?.length) {\n            return;\n        }\n\n        if (scaleSyncConfig && isArray(scaleSyncConfig)) {\n            // remove brokers that are not in the scaleSyncConfig\n            this.brokers\n                .filter(\n                    (broker) => !scaleSyncConfig.find((s) => s.id === broker.id)\n                )\n                .forEach(({ id }) => this.builder.removeBroker(id));\n\n            // add new brokers from scaleSyncConfig\n            scaleSyncConfig.forEach((s: IBrokerUserConfig) =>\n                this.configure().addBroker({ id: s.id, type: s?.type })\n            );\n            this.subscribeToBrokers();\n        }\n\n        this.tileNodes.forEach((node, i) => {\n            const property: IPizzagnaProperty = {\n                componentId: node,\n                pizzagnaKey: PizzagnaLayer.Data,\n                propertyPath: [`syncValuesBroker`],\n            };\n            this.pizzagnaService.setProperty(property, this.getBrokers());\n        });\n    }\n\n    private getMin = (n: number[]) => Math.min(...n);\n    private getMax = (n: number[]) => Math.max(...n);\n}\n\nclass KpiScaleSyncBrokerBuilder {\n    public readonly valuesObject: Record<string, Array<Partial<IBrokerValue>>> =\n        {};\n\n    constructor(private brokers: IBroker[]) {}\n\n    public addBroker(broker: IBrokerUserConfig): KpiScaleSyncBrokerBuilder {\n        if (\n            this.brokers.find(\n                (existingBroker) => existingBroker.id === broker.id\n            )\n        ) {\n            // Prevent adding the same broker multiple times\n            return this;\n        }\n\n        const newBrokerSetting: IBrokerValue = {\n            id: broker.id,\n            targetID: \"\",\n            targetValue: 1,\n        };\n        this.valuesObject[broker.id] = new Array<Partial<IBrokerValue>>();\n        this.brokers.push({\n            ...broker,\n            ...this.getDefaultBrokerObject(newBrokerSetting, newBrokerSetting),\n        });\n        return this;\n    }\n\n    public removeBroker(brokerId: string): void {\n        const brokerIndex = this.brokers.findIndex((b) => b.id === brokerId);\n        if (brokerIndex !== -1) {\n            this.brokers.splice(brokerIndex, 1);\n            delete this.valuesObject[brokerId];\n        }\n    }\n\n    private getDefaultBrokerObject(input: IBrokerValue, output: IBrokerValue) {\n        return {\n            in$: new BehaviorSubject<IBrokerValue>(input),\n            out$: new BehaviorSubject<IBrokerValue>(output),\n        };\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Inject, Injectable, OnDestroy } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IEvent } from \"@nova-ui/bits\";\n\nimport { IDataSourceOutputPayload } from \"./types\";\nimport { DATA_SOURCE_OUTPUT } from \"../../configurator/types\";\nimport { PizzagnaService } from \"../../pizzagna/services/pizzagna.service\";\nimport { IHasComponent, PizzagnaLayer, PIZZAGNA_EVENT_BUS } from \"../../types\";\n\n@Injectable()\nexport class StatusContentFallbackAdapter implements OnDestroy, IHasComponent {\n    protected readonly destroy$ = new Subject<void>();\n    protected componentId: string;\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) protected eventBus: EventBus<IEvent>,\n        protected pizzagnaService: PizzagnaService\n    ) {\n        this.eventBus\n            .getStream(DATA_SOURCE_OUTPUT)\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((event: IEvent<any | IDataSourceOutputPayload<any>>) => {\n                this.handleDataSourceOutput(event);\n            });\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    public setComponent(component: any, componentId: string): void {\n        this.componentId = componentId;\n    }\n\n    protected handleDataSourceOutput(\n        event: IEvent<any | IDataSourceOutputPayload<any>>\n    ): void {\n        this.pizzagnaService.setProperty(\n            {\n                componentId: this.componentId,\n                propertyPath: [\"fallbackKey\"],\n                pizzagnaKey: PizzagnaLayer.Data,\n            },\n            typeof event.payload?.error?.type !== \"undefined\"\n                ? event.payload?.error?.type.toString()\n                : undefined\n        );\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Inject, Injectable, OnDestroy } from \"@angular/core\";\nimport isEmpty from \"lodash/isEmpty\";\nimport uniq from \"lodash/uniq\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IEvent } from \"@nova-ui/bits\";\n\nimport { StatusContentFallbackAdapter } from \"./status-content-fallback-adapter\";\nimport { IComponentIdPayload, IDataSourceOutputPayload } from \"./types\";\nimport { DATA_SOURCE_DESTROYED } from \"../../configurator/types\";\nimport { PizzagnaService } from \"../../pizzagna/services/pizzagna.service\";\nimport {\n    HttpStatusCode,\n    IConfigurable,\n    IHasComponent,\n    IProperties,\n    PizzagnaLayer,\n    PIZZAGNA_EVENT_BUS,\n} from \"../../types\";\n\nexport interface IKpiFallbackAdapterProperties extends IProperties {\n    // Fallback node key to use if multiple tile data sources report different errors\n    multipleErrorFallbackKey: string;\n}\n\n@Injectable()\nexport class KpiStatusContentFallbackAdapter\n    extends StatusContentFallbackAdapter\n    implements OnDestroy, IHasComponent, IConfigurable\n{\n    /**\n     * Fallback node key to use if multiple tile data sources report different errors\n     */\n    public multipleErrorFallbackKey: string = HttpStatusCode.Unknown;\n\n    /**\n     * Map of kpi tile component id's to their corresponding error\n     */\n    private errorMap: Record<string, string> = {};\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        pizzagnaService: PizzagnaService\n    ) {\n        super(eventBus, pizzagnaService);\n\n        this.eventBus\n            .getStream(DATA_SOURCE_DESTROYED)\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((event) => {\n                this.handleDataSourceDestroyed(event);\n            });\n    }\n\n    public updateConfiguration(\n        properties: IKpiFallbackAdapterProperties\n    ): void {\n        if (properties.multipleErrorFallbackKey) {\n            this.multipleErrorFallbackKey = properties.multipleErrorFallbackKey;\n        }\n    }\n\n    protected handleDataSourceOutput(\n        event: IEvent<any | IDataSourceOutputPayload<any>>\n    ): void {\n        this.errorMap = this.updateErrorMap(event);\n\n        this.setFallbackKeyProperty();\n    }\n\n    protected handleDataSourceDestroyed(\n        event: IEvent<IComponentIdPayload>\n    ): void {\n        if (event.payload?.componentId) {\n            delete this.errorMap[event.payload.componentId];\n        }\n\n        this.setFallbackKeyProperty();\n    }\n\n    private setFallbackKeyProperty() {\n        this.pizzagnaService.setProperty(\n            {\n                componentId: this.componentId,\n                propertyPath: [\"fallbackKey\"],\n                pizzagnaKey: PizzagnaLayer.Data,\n            },\n            this.getFallbackKey()\n        );\n    }\n\n    private getFallbackKey(): string | undefined {\n        if (isEmpty(this.errorMap)) {\n            return undefined;\n        }\n\n        const uniqueErrors = uniq(Object.values(this.errorMap));\n        return uniqueErrors.length === 1\n            ? uniqueErrors[0]\n            : this.multipleErrorFallbackKey;\n    }\n\n    private updateErrorMap(event: IEvent<any | IDataSourceOutputPayload<any>>) {\n        const errorMap = this.errorMap;\n        const errorCode =\n            typeof event.payload?.error?.type !== \"undefined\"\n                ? event.payload?.error?.type.toString()\n                : undefined;\n\n        // an undefined result indicates the kpi tile was destroyed\n        if (!errorCode) {\n            delete errorMap[event.payload.componentId];\n        } else if (errorCode) {\n            errorMap[event.payload.componentId] = errorCode;\n        }\n\n        return errorMap;\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Inject, Injectable, OnDestroy } from \"@angular/core\";\nimport isEmpty from \"lodash/isEmpty\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IEvent } from \"@nova-ui/bits\";\n\nimport { IDataSourceBusyPayload } from \"./types\";\nimport { PizzagnaService } from \"../../pizzagna/services/pizzagna.service\";\nimport { DATA_SOURCE_BUSY } from \"../../services/types\";\nimport { IHasComponent, PizzagnaLayer, PIZZAGNA_EVENT_BUS } from \"../../types\";\n\n@Injectable()\nexport class LoadingAdapter implements OnDestroy, IHasComponent {\n    private loadingMap: Record<string, boolean> = {};\n    private readonly destroy$ = new Subject<void>();\n    private componentId: string;\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>,\n        private pizzagnaService: PizzagnaService\n    ) {\n        this.eventBus\n            .getStream(DATA_SOURCE_BUSY)\n            .pipe(takeUntil(this.destroy$))\n            .subscribe(({ payload }: IEvent<IDataSourceBusyPayload>) => {\n                if (payload?.componentId) {\n                    if (payload?.busy) {\n                        this.loadingMap[payload.componentId] = true;\n                    } else {\n                        delete this.loadingMap[payload.componentId];\n                    }\n                }\n\n                this.pizzagnaService.setProperty(\n                    {\n                        componentId: this.componentId,\n                        propertyPath: [\"active\"],\n                        pizzagnaKey: PizzagnaLayer.Data,\n                    },\n                    !isEmpty(this.loadingMap)\n                );\n            });\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    public setComponent(component: any, componentId: string): void {\n        this.componentId = componentId;\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n/**\n * Gets parent component id in the pizzagna.\n * Valid ONLY for the component ids which have parent in the their own id!\n *\n * e.g. for \"kpi3/description\" gets \"kpi3\"\n */\nexport function getParentComponentId(path: string): string {\n    const parts = path.split(\"/\");\n\n    return parts?.length > 1 ? parts[parts.length - 2] : path;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nconst keyToParseRegex = /\\{.*?\\}/g;\nconst paramsRegex = /\\{|\\}/g;\n\n/**\n * Parses the string with the values in brackets.\n * e.g. \"{componentId}.properties\" => \"chart.properties\", \"chart\" is taken from the \"data\" argument.\n */\nexport function parseStringWithData(path: string, data: any): string {\n    const match = path.match(keyToParseRegex);\n\n    if (!match) {\n        return path;\n    }\n\n    let updatedPath = path;\n\n    for (const input of match) {\n        const key = getKeyFromParam(input);\n        if (data[key]) {\n            updatedPath = updatedPath.replace(input, data[key]);\n        } else {\n            console.warn(`There's no ${input} key found in the data: ${data}`);\n        }\n    }\n\n    return updatedPath;\n}\n\nconst getKeyFromParam = (entry: string): string =>\n    entry.replace(paramsRegex, \"\");\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable, OnDestroy } from \"@angular/core\";\nimport get from \"lodash/get\";\nimport { Observable, Subscription } from \"rxjs\";\nimport { distinctUntilChanged, map } from \"rxjs/operators\";\n\nimport { BroadcasterTrackOnType, IBroadcasterConfig } from \"./types\";\nimport { getParentComponentId } from \"../../functions/get-parent-component-id\";\nimport { parseStringWithData } from \"../../functions/parse-string-with-data\";\nimport { PizzagnaService } from \"../../pizzagna/services/pizzagna.service\";\nimport { IConfigurable, IProperties } from \"../../types\";\n\n@Injectable()\nexport class PizzagnaBroadcasterService implements IConfigurable, OnDestroy {\n    private component: any;\n    private configs: IBroadcasterConfig[];\n    private readonly defaultTrackOn: BroadcasterTrackOnType = \"pizzagna\";\n\n    private subscriptions: Subscription[] = [];\n    private componentId: string;\n    private parentComponentId: string;\n\n    constructor(private pizzagnaService: PizzagnaService) {}\n\n    public setComponent(component: any, componentId: string): void {\n        this.component = component;\n        this.componentId = componentId;\n        this.parentComponentId = getParentComponentId(componentId);\n\n        this.initChangeSubscriptions();\n    }\n\n    public updateConfiguration(properties: IProperties): void {\n        this.configs = properties?.configs;\n    }\n\n    private initChangeSubscriptions() {\n        for (const config of this.configs) {\n            const observable = this.getObservableFor(config);\n\n            if (!observable) {\n                console.warn(\n                    \"no observable found on 'PizzagnaBroadcasterService', for part: \",\n                    config\n                );\n                return;\n            }\n\n            const subscription = observable.subscribe((v) => {\n                for (const path of config.paths) {\n                    const validatedPath = parseStringWithData(path, this);\n                    this.pizzagnaService.setProperty(validatedPath, v);\n                }\n            });\n            this.subscriptions.push(subscription);\n        }\n    }\n\n    private getObservableFor(config: IBroadcasterConfig) {\n        const trackOn: BroadcasterTrackOnType =\n            config.trackOn || this.defaultTrackOn;\n        const observable: Observable<any> =\n            trackOn === \"component\"\n                ? this.getComponentObservableFor(config)\n                : this.getPizzagnaObservableFor(config);\n        return observable;\n    }\n\n    private getPizzagnaObservableFor(part: IBroadcasterConfig) {\n        return this.pizzagnaService.pizzaChanged.pipe(\n            map((v) => get(v, part.key)),\n            distinctUntilChanged()\n        );\n    }\n\n    private getComponentObservableFor(part: IBroadcasterConfig) {\n        const obs: Observable<any> = get(this.component, part.key);\n        return obs?.pipe(distinctUntilChanged());\n    }\n\n    public ngOnDestroy(): void {\n        for (const subscription of this.subscriptions) {\n            subscription.unsubscribe();\n        }\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { BehaviorSubject } from \"rxjs\";\n\nimport { ComparatorTypes, IProperties } from \"../../types\";\nimport { ITimeseriesWidgetSeries } from \"../timeseries-widget/types\";\nimport { IFormatter } from \"../types\";\n\n/** Default refresh interval in seconds */\nexport const DEFAULT_REFRESH_INTERVAL = 300;\n\nexport interface ITimeseriesDataSourceAdapterConfiguration extends IProperties {\n    series: ITimeseriesWidgetSeries[];\n}\n\nexport interface IDataSourceOutput<T> {\n    result: T;\n    error?: IDataSourceError;\n}\n\nexport interface IComponentIdPayload {\n    componentId: string;\n}\n\nexport interface IDataSourceOutputPayload<T>\n    extends IDataSourceOutput<T>,\n        IComponentIdPayload {}\n\nexport interface IDataSourceBusyPayload extends IComponentIdPayload {\n    busy: boolean;\n}\n\nexport interface IDataSourceError {\n    type: string | number;\n    message?: string;\n}\n\nexport type BroadcasterTrackOnType = \"component\" | \"pizzagna\";\n\nexport interface IBroadcasterConfig {\n    trackOn?: BroadcasterTrackOnType;\n    key: string;\n    paths: string[];\n}\n\nexport interface IKpiColorRules {\n    comparisonType: ComparatorTypes;\n    value: any;\n    color: any;\n}\n\nexport interface IDrilldownComponentConfiguration extends IFormatter {\n    properties: Record<string, any>;\n    itemProperties?: IProperties;\n}\n\nexport interface IDrilldownComponentsConfiguration {\n    group: IDrilldownComponentConfiguration;\n    leaf: IDrilldownComponentConfiguration;\n}\n\nexport interface IBrokerValue {\n    id: string;\n    targetID: string;\n    targetValue: number;\n}\n\nexport interface IBrokerUserConfig {\n    id: string;\n    type?: \"min\" | \"max\";\n}\n\nexport interface IBroker extends IBrokerUserConfig {\n    in$: BehaviorSubject<IBrokerValue>;\n    out$: BehaviorSubject<IBrokerValue>;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\nimport { BehaviorSubject } from \"rxjs\";\n\nimport { DEFAULT_REFRESH_INTERVAL } from \"./types\";\n\n/**\n * This provider allows a system wide definition of widget refresh rates.\n */\n@Injectable({\n    providedIn: \"root\",\n})\nexport class RefresherSettingsService {\n    private _refreshRateSeconds: number = DEFAULT_REFRESH_INTERVAL;\n    public refreshRateSeconds$ = new BehaviorSubject(this.refreshRateSeconds);\n\n    /**\n     * This is a system wide definition of refresh rate. Widgets have to be configured to use\n     * the system settings to leverage this value.\n     */\n    public get refreshRateSeconds(): number {\n        return this._refreshRateSeconds;\n    }\n\n    public set refreshRateSeconds(value: number) {\n        this._refreshRateSeconds = value;\n        this.refreshRateSeconds$.next(this._refreshRateSeconds);\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Inject, Injectable, NgZone, OnDestroy } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, EventDefinition } from \"@nova-ui/bits\";\n\nimport { RefresherSettingsService } from \"./refresher-settings.service\";\nimport { DEFAULT_REFRESH_INTERVAL } from \"./types\";\nimport { REFRESH } from \"../../services/types\";\nimport { IWidgetEvent } from \"../../services/widget-to-dashboard-event-proxy.service\";\nimport { IConfigurable, IProperties, PIZZAGNA_EVENT_BUS } from \"../../types\";\n\nexport interface IRefresherProperties extends IProperties {\n    // refresh interval in seconds\n    interval?: number;\n    enabled?: boolean;\n    overrideDefaultSettings?: boolean;\n    eventDef?: EventDefinition<any>;\n}\n\n/**\n * This provider emits the REFRESH event every X milliseconds\n */\n@Injectable()\nexport class Refresher implements OnDestroy, IConfigurable {\n    private intervalRef?: number;\n\n    protected enabled = true;\n    protected overrideDefaultSettings = true;\n    protected interval = DEFAULT_REFRESH_INTERVAL;\n    protected eventDef = REFRESH;\n\n    public readonly destroy$ = new Subject<void>();\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) protected eventBus: EventBus<IWidgetEvent>,\n        protected ngZone: NgZone,\n        protected refresherSettings: RefresherSettingsService\n    ) {\n        this.refresherSettings.refreshRateSeconds$\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((systemRefreshRate) => {\n                if (!this.overrideDefaultSettings) {\n                    this.initializeInterval();\n                }\n            });\n    }\n\n    public updateConfiguration(properties: IRefresherProperties): void {\n        this.interval = properties.interval ?? DEFAULT_REFRESH_INTERVAL;\n        this.enabled = properties.enabled ?? true;\n        this.overrideDefaultSettings =\n            properties.overrideDefaultSettings ?? true;\n        this.eventDef = properties.event ?? REFRESH;\n\n        this.initializeInterval();\n    }\n\n    public ngOnDestroy(): void {\n        this.clearInterval();\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    private initializeInterval() {\n        this.clearInterval();\n\n        if (\n            typeof this.interval === \"undefined\" ||\n            this.getInterval() <= 0 ||\n            this.enabled === false\n        ) {\n            return;\n        }\n\n        this.ngZone.runOutsideAngular(() => {\n            // running timeout outside of angular zone to prevent visual tests from timing out\n            this.intervalRef = setInterval(() => {\n                this.ngZone.run(() => {\n                    // callback function should be executed in zone to preserve the angular change detection\n                    this.performAction();\n                });\n            }, this.getInterval() * 1000) as any;\n        });\n    }\n\n    protected performAction(): void {\n        this.eventBus.getStream(this.eventDef).next({});\n    }\n\n    private getInterval() {\n        return this.overrideDefaultSettings\n            ? this.interval\n            : this.refresherSettings.refreshRateSeconds;\n    }\n\n    private clearInterval() {\n        if (typeof this.intervalRef !== \"undefined\") {\n            clearInterval(this.intervalRef);\n            this.intervalRef = undefined;\n        }\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Inject, Optional } from \"@angular/core\";\n// eslint-disable-next-line import/no-deprecated\nimport { merge, Observable, zip } from \"rxjs\";\nimport {\n    debounceTime,\n    map,\n    startWith,\n    // eslint-disable-next-line import/no-deprecated\n    switchMap,\n    takeUntil,\n    tap,\n} from \"rxjs/operators\";\n\nimport {\n    EventBus,\n    IDataSource,\n    IEvent,\n    IFilteringOutputs,\n    VirtualViewportManager,\n} from \"@nova-ui/bits\";\n\nimport { DataSourceAdapter } from \"./data-source-adapter\";\nimport { PizzagnaService } from \"../../pizzagna/services/pizzagna.service\";\nimport {\n    REFRESH,\n    SCROLL_NEXT_PAGE,\n    SET_NEXT_PAGE,\n    WIDGET_READY,\n} from \"../../services/types\";\nimport {\n    DATA_SOURCE,\n    IProperties,\n    PizzagnaLayer,\n    PIZZAGNA_EVENT_BUS,\n} from \"../../types\";\n\nexport class TableDataSourceAdapter<\n    T extends IFilteringOutputs\n> extends DataSourceAdapter<T> {\n    private dataPath: string;\n    private dataFieldsPath: string;\n    private totalItemsPath: string;\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        @Inject(DATA_SOURCE) dataSource: IDataSource,\n        pizzagnaService: PizzagnaService,\n        @Optional() protected virtualViewport: VirtualViewportManager\n    ) {\n        super(eventBus, dataSource, pizzagnaService);\n    }\n\n    protected setupRefreshListener(): void {\n        // Note: We should wait until TableWidget is ready to be able to proceed with reset event\n        // We can also listen after SCROLL_NEXT_PAGE instead of WIDGET_READY because right now\n        // they are executed simultaneously but we don't know how things will change in the future\n        const refresh$: Observable<void> = zip(\n            this.eventBus.getStream(WIDGET_READY),\n            this.eventBus.getStream(REFRESH)\n        ).pipe(\n            // Note: Using startWith() to re-trigger the REFRESH stream that was triggered at least on time before WIDGET_READY\n            // eslint-disable-next-line import/no-deprecated\n            switchMap(() =>\n                // eslint-disable-next-line import/no-deprecated\n                this.eventBus.getStream(REFRESH).pipe(startWith(undefined))\n            ),\n            tap(() => this.virtualViewport.reset({ emitFirstPage: false })),\n            map(() => {})\n        );\n\n        // eslint-disable-next-line import/no-deprecated\n        merge(refresh$, this.eventBus.getStream(SCROLL_NEXT_PAGE), this.eventBus.getStream(SET_NEXT_PAGE))\n            .pipe(\n                // Note: While SCROLL_NEXT_PAGE is triggered on TableWidget initialization aka WIDGET_READY\n                // we might encounter REFRESH and SCROLL_NEXT_PAGE triggered at the same time.\n                // Setting a small debounceTime will help us manage simultaneous requests\n                debounceTime(10),\n                tap(() => this.handleRefresh()),\n                takeUntil(this.destroy$)\n            )\n            .subscribe();\n    }\n\n    protected updateAdapterProperties(properties: IProperties): void {\n        this.dataPath = properties.dataPath;\n        this.dataFieldsPath = properties.dataFieldsPath;\n        this.totalItemsPath = properties.totalItemsPath;\n    }\n\n    protected updateOutput(output: IFilteringOutputs | undefined): void {\n        const total = output?.paginator?.total;\n        const items = output?.repeat?.itemsSource;\n        const dataFields = output?.dataFields;\n\n        this.pizzagnaService.setProperty(\n            {\n                pizzagnaKey: PizzagnaLayer.Data,\n                componentId: this.componentId,\n                propertyPath: [this.totalItemsPath],\n            },\n            total\n        );\n\n        this.pizzagnaService.setProperty(\n            {\n                pizzagnaKey: PizzagnaLayer.Data,\n                componentId: this.componentId,\n                propertyPath: [this.dataPath],\n            },\n            items\n        );\n\n        this.pizzagnaService.setProperty(\n            {\n                pizzagnaKey: PizzagnaLayer.Data,\n                componentId: this.componentId,\n                propertyPath: [this.dataFieldsPath],\n            },\n            dataFields\n        );\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Inject } from \"@angular/core\";\nimport clone from \"lodash/clone\";\n\nimport {\n    EventBus,\n    IDataSource,\n    IEvent,\n    IFilteringOutputs,\n} from \"@nova-ui/bits\";\n\nimport { DataSourceAdapter } from \"./data-source-adapter\";\nimport { ITimeseriesDataSourceAdapterConfiguration } from \"./types\";\nimport { PizzagnaService } from \"../../pizzagna/services/pizzagna.service\";\nimport { DATA_SOURCE, PIZZAGNA_EVENT_BUS } from \"../../types\";\nimport {\n    ITimeseriesWidgetData,\n    ITimeseriesWidgetSeries,\n} from \"../timeseries-widget/types\";\n\nexport class TimeseriesDataSourceAdapter extends DataSourceAdapter {\n    private seriesIndex: ITimeseriesWidgetSeries[] = [];\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        @Inject(DATA_SOURCE) dataSource: IDataSource,\n        pizzagnaService: PizzagnaService\n    ) {\n        super(eventBus, dataSource, pizzagnaService);\n    }\n\n    public updateConfiguration(\n        properties: ITimeseriesDataSourceAdapterConfiguration\n    ): void {\n        this.seriesIndex = clone(properties.series);\n\n        super.updateConfiguration(properties);\n    }\n\n    protected processOutput(value: IFilteringOutputs): IFilteringOutputs {\n        if (!value) {\n            return value;\n        }\n        return {\n            ...value,\n            series: this.buildSeriesSet(value?.series),\n        };\n    }\n\n    /**\n     * Builds the series set by mapping the series selected in the configurator to the data received from the data source.\n     * @param data\n     */\n    private buildSeriesSet(data: ITimeseriesWidgetData[]) {\n        if (!data) {\n            return [];\n        }\n\n        // displaying only series which are in widget config\n        return data\n            .filter((series: ITimeseriesWidgetData) =>\n                this.seriesIndex.find((s) => s.selectedSeriesId === series.id)\n            )\n            .map((series: ITimeseriesWidgetData) => ({\n                id: series.id,\n                data: series.data,\n                link: series.link,\n                secondaryLink: series.secondaryLink,\n                legendDescriptionPrimary: this.seriesIndex.find(\n                    (s) => s.selectedSeriesId === series.id\n                )?.label,\n                legendDescriptionSecondary: series.description,\n            }));\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\n\nimport { IDashwizComponent } from \"./model\";\n\n@Injectable({\n    providedIn: \"root\",\n})\nexport class DashwizService {\n    public component: IDashwizComponent | undefined;\n\n    constructor() {}\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Inject, Injectable, OnDestroy } from \"@angular/core\";\nimport isUndefined from \"lodash/isUndefined\";\nimport { BehaviorSubject, Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IDataField, IDataSource, IEvent } from \"@nova-ui/bits\";\n\nimport { IDataSourceError } from \"../../components/providers/types\";\nimport { PIZZAGNA_EVENT_BUS } from \"../../types\";\nimport { DashwizService } from \"../components/wizard/dashwiz/dashwiz.service\";\nimport { DATA_SOURCE_CREATED, DATA_SOURCE_OUTPUT } from \"../types\";\n\n@Injectable()\nexport class ConfiguratorDataSourceManagerService implements OnDestroy {\n    private onDestroy$: Subject<void> = new Subject<void>();\n    private dataSourceCreated$: Subject<void> = new Subject<void>();\n    public dataSource: IDataSource;\n    public error$: Subject<IDataSourceError | null> =\n        new Subject<IDataSourceError | null>();\n    public busy$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(\n        false\n    );\n    public dataSourceFields$: BehaviorSubject<Array<IDataField>> =\n        new BehaviorSubject<Array<IDataField>>([]);\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>,\n        private dashwizService: DashwizService\n    ) {\n        this.eventBus.subscribeUntil(\n            DATA_SOURCE_CREATED,\n            this.onDestroy$,\n            (event: IEvent<IDataSource>) => {\n                if (!event.payload) {\n                    return;\n                }\n                this.onDataSourceCreated(event.payload);\n            }\n        );\n\n        this.eventBus.subscribeUntil(\n            DATA_SOURCE_OUTPUT,\n            this.onDestroy$,\n            (event: IEvent) => {\n                if (event.payload?.error) {\n                    this.error$.next(event.payload.error);\n                } else {\n                    this.error$.next(null);\n                    const payload = isUndefined(event.payload.result)\n                        ? event.payload\n                        : event.payload.result || {};\n                    if (payload?.dataFields) {\n                        this.dataSourceFields$.next(payload.dataFields);\n                    }\n                }\n            }\n        );\n    }\n\n    onDataSourceCreated(dataSource: IDataSource): void {\n        this.dataSource = dataSource;\n        this.dataSourceCreated$.next();\n\n        this.dataSource.busy\n            ?.pipe(takeUntil(this.dataSourceCreated$))\n            .subscribe((isBusy: boolean) => {\n                this.dashwizService?.component?.navigationControl.next({\n                    busyState: {\n                        busy: isBusy,\n                    },\n                    allowStepChange: !isBusy,\n                });\n\n                this.busy$.next(isBusy);\n            });\n    }\n\n    public ngOnDestroy(): void {\n        this.onDestroy$.next();\n        this.onDestroy$.complete();\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\n\nimport { IPizzagnaLayer } from \"../../types\";\n\n@Injectable()\nexport class PreviewService {\n    private _preview: IPizzagnaLayer;\n\n    public get preview(): IPizzagnaLayer {\n        return this._preview;\n    }\n\n    public set preview(value: IPizzagnaLayer) {\n        this._preview = value;\n        this.previewChanged.next(value);\n    }\n\n    public previewChanged = new Subject<IPizzagnaLayer>();\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { AfterViewInit, Inject, Injectable, OnDestroy } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport { Subject } from \"rxjs\";\n\nimport { EventBus, IEvent } from \"@nova-ui/bits\";\n\nimport { PizzagnaService } from \"../../../pizzagna/services/pizzagna.service\";\nimport {\n    ISetPropertyPayload,\n    SET_PROPERTY_VALUE,\n} from \"../../../services/types\";\nimport { IPizzagna, IPizzagnaLayer, PIZZAGNA_EVENT_BUS } from \"../../../types\";\nimport { PreviewService } from \"../preview.service\";\nimport { IConfiguratorConverter } from \"./types\";\n\n@Injectable()\nexport abstract class BaseConverter\n    implements AfterViewInit, IConfiguratorConverter, OnDestroy\n{\n    public component: any;\n    public componentId: string;\n\n    public readonly destroy$ = new Subject<void>();\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) protected eventBus: EventBus<IEvent>,\n        private previewService: PreviewService,\n        protected pizzagnaService: PizzagnaService\n    ) {}\n\n    public ngAfterViewInit(): void {\n        this.buildForm();\n\n        this.toPreview(this.component.form);\n    }\n\n    public abstract buildForm(): void;\n\n    public abstract toPreview(form: FormGroup): void;\n\n    public setComponent(component: any, componentId: string): void {\n        this.component = component;\n        this.componentId = componentId;\n    }\n\n    public getPreview(): IPizzagnaLayer {\n        return this.previewService.preview;\n    }\n\n    public updatePreview(preview: IPizzagnaLayer): void {\n        this.previewService.preview = preview;\n    }\n\n    public updateFormPizzagna(pizzagna: IPizzagna): void {\n        this.pizzagnaService.updatePizzagna(pizzagna);\n        this.eventBus.getStream(SET_PROPERTY_VALUE).next({\n            payload: { path: \"\", value: pizzagna } as ISetPropertyPayload,\n        });\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Inject, Injectable } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport get from \"lodash/get\";\nimport pick from \"lodash/pick\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IEvent, immutableSet } from \"@nova-ui/bits\";\n\nimport { PizzagnaService } from \"../../../../../pizzagna/services/pizzagna.service\";\nimport { PizzagnaLayer, PIZZAGNA_EVENT_BUS } from \"../../../../../types\";\nimport { PreviewService } from \"../../../preview.service\";\nimport { BaseConverter } from \"../../base-converter\";\nimport { IConverterFormPartsProperties } from \"../../types\";\n\n@Injectable()\nexport class KpiSectionConverterService extends BaseConverter {\n    private formParts: IConverterFormPartsProperties[];\n\n    private get previewComponentId() {\n        return this.componentId.split(\"/\")[0];\n    }\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        previewService: PreviewService,\n        pizzagnaService: PizzagnaService\n    ) {\n        super(eventBus, previewService, pizzagnaService);\n    }\n\n    public updateConfiguration(properties: {\n        formParts: IConverterFormPartsProperties[];\n    }): void {\n        if (properties && properties.formParts) {\n            this.formParts = properties.formParts;\n        }\n    }\n\n    public buildForm(): void {\n        const preview = this.getPreview();\n\n        const updatedPizzagna = this.formParts.reduce((res, v) => {\n            const previewPath = `${this.previewComponentId}.${v.previewPath}`;\n            // TODO: Define correct index type\n            const previewSlice: Record<string, any> = get(preview, previewPath);\n\n            if (previewSlice) {\n                for (const key of v.keys) {\n                    if (previewSlice[key] !== undefined) {\n                        res = immutableSet(\n                            res,\n                            `${PizzagnaLayer.Data}.${this.componentId}.properties.${key}`,\n                            previewSlice[key]\n                        );\n                    }\n                }\n            }\n\n            return res;\n        }, this.pizzagnaService.pizzagna);\n        this.updateFormPizzagna(updatedPizzagna);\n    }\n\n    public toPreview(form: FormGroup): void {\n        form.valueChanges\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((formData) => {\n                const updatedPreview = this.formParts.reduce((p, v) => {\n                    let outPath = v.previewOutputPath || v.previewPath;\n                    outPath = `${this.previewComponentId}.${outPath}`;\n\n                    const preview = get(p, outPath) as any[];\n\n                    const fromForm = pick(formData, v.keys);\n                    const merged = { ...preview, ...fromForm };\n\n                    return immutableSet(p, `${outPath}`, merged);\n                }, this.getPreview());\n\n                this.updatePreview(updatedPreview);\n            });\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { AfterViewInit, Inject, Injectable } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport difference from \"lodash/difference\";\nimport keyBy from \"lodash/keyBy\";\nimport omit from \"lodash/omit\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { immutableSet } from \"@nova-ui/bits\";\nimport { EventBus, IEvent } from \"@nova-ui/bits\";\n\nimport { PizzagnaService } from \"../../../../pizzagna/services/pizzagna.service\";\nimport {\n    IComponentConfiguration,\n    PizzagnaLayer,\n    PIZZAGNA_EVENT_BUS,\n} from \"../../../../types\";\nimport { IItemConfiguration } from \"../../../components/types\";\nimport { IKpiItemConfiguration } from \"../../../components/widgets/kpi/types\";\nimport { PreviewService } from \"../../preview.service\";\nimport { BaseConverter } from \"../base-converter\";\n\n@Injectable()\nexport class KpiTilesConverterService\n    extends BaseConverter\n    implements AfterViewInit\n{\n    private shouldReadForm = false;\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        previewService: PreviewService,\n        pizzagnaService: PizzagnaService\n    ) {\n        super(eventBus, previewService, pizzagnaService);\n    }\n\n    public ngAfterViewInit(): void {\n        super.ngAfterViewInit();\n    }\n\n    public buildForm(): void {\n        const preview = this.getPreview();\n        const tiles: IKpiItemConfiguration[] =\n            preview?.tiles?.properties?.nodes?.map(\n                (id: string) =>\n                    ({\n                        id,\n                        componentType: preview[id].componentType,\n                    } as IKpiItemConfiguration)\n            ) || [];\n        const tileIds = tiles?.map((tile) => tile.id);\n\n        this.pizzagnaService.createComponentsFromTemplate(\"tiles\", tileIds);\n        let updatedPizzagna = this.pizzagnaService.pizzagna;\n\n        updatedPizzagna = immutableSet(\n            updatedPizzagna,\n            `${PizzagnaLayer.Data}.tiles.properties.tiles`,\n            tiles\n        );\n\n        setTimeout(() => (this.shouldReadForm = true));\n        this.updateFormPizzagna(updatedPizzagna);\n    }\n\n    public toPreview(form: FormGroup): void {\n        form.get(\"tiles\")\n            ?.valueChanges.pipe(takeUntil(this.destroy$))\n            .subscribe((kpiTiles) => {\n                if (!this.shouldReadForm) {\n                    return;\n                }\n                let preview = this.getPreview();\n                const tileIds = (kpiTiles || []).map(\n                    (t: IItemConfiguration) => t.id\n                );\n                const idDifference: string[] = difference(\n                    preview?.tiles?.properties?.nodes,\n                    tileIds\n                );\n                if (idDifference.length) {\n                    preview = omit(preview, idDifference);\n                }\n                const tilesIndex = keyBy(kpiTiles, (t) => t.id); // this helps us to access the actual tile forms\n                preview = immutableSet(\n                    preview,\n                    \"tiles.properties.nodes\",\n                    tileIds\n                );\n\n                for (const tileId of tileIds) {\n                    const tile = tilesIndex[tileId];\n                    if (!tile) {\n                        // tile might not have been created yet\n                        continue;\n                    }\n\n                    if (!preview[tile.id]) {\n                        const value: IComponentConfiguration =\n                            this.getTileConfiguration(\n                                tile.id,\n                                tile.componentType\n                            );\n                        preview = immutableSet(preview, tile.id, value);\n                    }\n                }\n                this.updatePreview(preview);\n            });\n    }\n\n    protected getTileConfiguration(\n        id: string,\n        componentType: string\n    ): IComponentConfiguration {\n        return {\n            id: id,\n            // componentType: componentType,\n            providers: {\n                dataSource: {\n                    // @ts-ignore: The expected type comes from property 'providerId'\n                    // which is declared here on type 'IProviderConfiguration'\n                    providerId: undefined,\n                },\n            },\n        };\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport enum LegendPlacement {\n    None = \"None\",\n    Right = \"Right\",\n    Bottom = \"Bottom\",\n}\n\nexport interface ILegendPlacementOption {\n    id: LegendPlacement;\n    label: string;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { AfterViewInit, Inject, Injectable } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IEvent, immutableSet } from \"@nova-ui/bits\";\n\nimport { IProportionalWidgetChartOptions } from \"../../../../components/proportional-widget/types\";\nimport { PizzagnaService } from \"../../../../pizzagna/services/pizzagna.service\";\nimport { PizzagnaLayer, PIZZAGNA_EVENT_BUS } from \"../../../../types\";\nimport { LegendPlacement } from \"../../../../widget-types/common/widget/legend\";\nimport { PreviewService } from \"../../preview.service\";\nimport { BaseConverter } from \"../base-converter\";\n\n@Injectable()\nexport class ProportionalWidgetChartOptionsConverterService\n    extends BaseConverter\n    implements AfterViewInit\n{\n    private readonly PROPERTIES_PATH = `${PizzagnaLayer.Configuration}.chartOptionsEditor.properties`;\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        previewService: PreviewService,\n        pizzagnaService: PizzagnaService\n    ) {\n        super(eventBus, previewService, pizzagnaService);\n    }\n\n    public ngAfterViewInit(): void {\n        super.ngAfterViewInit();\n    }\n\n    public buildForm(): void {\n        const chartOptions: IProportionalWidgetChartOptions =\n            this.getPreview().chart?.properties?.configuration?.chartOptions;\n        let editorPizzagna = this.pizzagnaService.pizzagna;\n\n        editorPizzagna = immutableSet(\n            editorPizzagna,\n            `${this.PROPERTIES_PATH}.chartType`,\n            chartOptions?.type ?? undefined\n        );\n\n        editorPizzagna = immutableSet(\n            editorPizzagna,\n            `${this.PROPERTIES_PATH}.legendPlacement`,\n            chartOptions?.legendPlacement ?? LegendPlacement.None\n        );\n\n        editorPizzagna = immutableSet(\n            editorPizzagna,\n            `${this.PROPERTIES_PATH}.legendFormatterComponentType`,\n            chartOptions?.legendFormatter?.componentType ?? \"\"\n        );\n\n        editorPizzagna = immutableSet(\n            editorPizzagna,\n            `${this.PROPERTIES_PATH}.contentFormatterComponentType`,\n            chartOptions?.contentFormatter?.componentType ??\n                \"DonutContentRawFormatterComponent\"\n        );\n\n        editorPizzagna = immutableSet(\n            editorPizzagna,\n            `${this.PROPERTIES_PATH}.contentFormatterProperties`,\n            chartOptions?.contentFormatter?.properties ?? \"\"\n        );\n\n        this.updateFormPizzagna(editorPizzagna);\n    }\n\n    public toPreview(form: FormGroup): void {\n        form.valueChanges\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((chartOptions) => {\n                const preview = immutableSet(\n                    this.getPreview(),\n                    \"chart.properties.configuration.chartOptions\",\n                    chartOptions\n                );\n                this.updatePreview(preview);\n            });\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Inject, Injectable } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport get from \"lodash/get\";\nimport pick from \"lodash/pick\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IEvent, immutableSet } from \"@nova-ui/bits\";\n\nimport { PizzagnaService } from \"../../../../../pizzagna/services/pizzagna.service\";\nimport { PizzagnaLayer, PIZZAGNA_EVENT_BUS } from \"../../../../../types\";\nimport { PreviewService } from \"../../../preview.service\";\nimport { BaseConverter } from \"../../base-converter\";\nimport { IConverterFormPartsProperties } from \"../../types\";\n\n@Injectable()\nexport class GenericArrayConverterService extends BaseConverter {\n    private formParts: IConverterFormPartsProperties[];\n\n    private get previewComponentId() {\n        return this.componentId.split(\"/\")[0];\n    }\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        previewService: PreviewService,\n        pizzagnaService: PizzagnaService\n    ) {\n        super(eventBus, previewService, pizzagnaService);\n    }\n\n    public updateConfiguration(properties: {\n        formParts: IConverterFormPartsProperties[];\n    }): void {\n        if (properties && properties.formParts) {\n            this.formParts = properties.formParts;\n        }\n    }\n\n    public buildForm(): void {\n        const preview = this.getPreview();\n\n        const updatedPizzagna = this.formParts.reduce((res, v) => {\n            const previewSlice = get(preview, v.previewPath) as any[];\n            const componentInArray = previewSlice?.find(\n                (c) => c.id === this.previewComponentId\n            );\n            const fromPreview = pick(componentInArray, v.keys);\n\n            res = immutableSet(\n                res,\n                `${PizzagnaLayer.Data}.${this.componentId}.properties`,\n                fromPreview\n            );\n\n            return res;\n        }, this.pizzagnaService.pizzagna);\n        this.updateFormPizzagna(updatedPizzagna);\n    }\n\n    public toPreview(form: FormGroup): void {\n        form.valueChanges\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((formData) => {\n                const updatedPreview = this.formParts.reduce((p, v) => {\n                    const outPath = v.previewOutputPath || v.previewPath;\n\n                    const preview = get(p, outPath) as any[];\n                    const compIndex = preview.findIndex(\n                        (c) => c.id === this.previewComponentId\n                    );\n                    const fromPreview = preview[compIndex];\n\n                    const fromForm = pick(formData, v.keys);\n                    const merged = { ...fromPreview, ...fromForm };\n\n                    return immutableSet(p, `${outPath}[${compIndex}]`, merged);\n                }, this.getPreview());\n\n                this.updatePreview(updatedPreview);\n            });\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Inject, Injectable } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport get from \"lodash/get\";\nimport pick from \"lodash/pick\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IEvent, immutableSet } from \"@nova-ui/bits\";\n\nimport { PizzagnaService } from \"../../../../../pizzagna/services/pizzagna.service\";\nimport { PizzagnaLayer, PIZZAGNA_EVENT_BUS } from \"../../../../../types\";\nimport { PreviewService } from \"../../../preview.service\";\nimport { BaseConverter } from \"../../base-converter\";\nimport { IConverterFormPartsProperties } from \"../../types\";\n\n@Injectable()\nexport class GenericConverterService extends BaseConverter {\n    private formParts: IConverterFormPartsProperties[];\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        previewService: PreviewService,\n        pizzagnaService: PizzagnaService\n    ) {\n        super(eventBus, previewService, pizzagnaService);\n    }\n\n    public updateConfiguration(properties: {\n        formParts: IConverterFormPartsProperties[];\n    }): void {\n        if (properties && properties.formParts) {\n            this.formParts = properties.formParts;\n        }\n    }\n\n    public buildForm(): void {\n        const preview = this.getPreview();\n\n        const updatedPizzagna = this.formParts.reduce((res, v) => {\n            // TODO: Define correct index type\n            const previewSlice: Record<string, any> = get(\n                preview,\n                v.previewPath\n            );\n\n            if (previewSlice) {\n                for (const key of v.keys) {\n                    if (previewSlice[key] !== undefined) {\n                        res = immutableSet(\n                            res,\n                            `${PizzagnaLayer.Data}.${this.componentId}.properties.${key}`,\n                            previewSlice[key]\n                        );\n                    }\n                }\n            }\n\n            return res;\n        }, this.pizzagnaService.pizzagna);\n        this.updateFormPizzagna(updatedPizzagna);\n    }\n\n    public toPreview(form: FormGroup): void {\n        form.valueChanges\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((formData) => {\n                const updatedPreview = this.formParts.reduce((p, v) => {\n                    const outPath = v.previewOutputPath || v.previewPath;\n                    const fromPreview = get(p, outPath);\n                    const fromForm = pick(formData, v.keys);\n                    const merged = { ...fromPreview, ...fromForm };\n\n                    return immutableSet(p, outPath, merged);\n                }, this.getPreview());\n\n                this.updatePreview(updatedPreview);\n            });\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { AfterViewInit, Inject, Injectable } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IEvent, immutableSet } from \"@nova-ui/bits\";\n\nimport { PizzagnaService } from \"../../../../../pizzagna/services/pizzagna.service\";\nimport { PizzagnaLayer, PIZZAGNA_EVENT_BUS } from \"../../../../../types\";\nimport { PreviewService } from \"../../../preview.service\";\nimport { BaseConverter } from \"../../base-converter\";\n\n@Injectable()\nexport class TitleAndDescriptionConverterService\n    extends BaseConverter\n    implements AfterViewInit\n{\n    public static readonly PROPERTIES_PATH = `${PizzagnaLayer.Configuration}.titleAndDescription.properties`;\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        previewService: PreviewService,\n        pizzagnaService: PizzagnaService\n    ) {\n        super(eventBus, previewService, pizzagnaService);\n    }\n\n    public ngAfterViewInit(): void {\n        super.ngAfterViewInit();\n    }\n\n    public buildForm(): void {\n        let editorPizzagna = this.pizzagnaService.pizzagna;\n        const headerProperties = this.getPreview()?.header?.properties;\n\n        editorPizzagna = immutableSet(\n            editorPizzagna,\n            `${TitleAndDescriptionConverterService.PROPERTIES_PATH}.title`,\n            headerProperties?.title\n        );\n        editorPizzagna = immutableSet(\n            editorPizzagna,\n            `${TitleAndDescriptionConverterService.PROPERTIES_PATH}.subtitle`,\n            headerProperties?.subtitle\n        );\n        editorPizzagna = immutableSet(\n            editorPizzagna,\n            `${TitleAndDescriptionConverterService.PROPERTIES_PATH}.url`,\n            headerProperties?.url\n        );\n        editorPizzagna = immutableSet(\n            editorPizzagna,\n            `${TitleAndDescriptionConverterService.PROPERTIES_PATH}.description`,\n            headerProperties?.description\n        );\n        editorPizzagna = immutableSet(\n            editorPizzagna,\n            `${TitleAndDescriptionConverterService.PROPERTIES_PATH}.collapsible`,\n            headerProperties?.collapsible\n        );\n\n        this.updateFormPizzagna(editorPizzagna);\n    }\n\n    public toPreview(form: FormGroup): void {\n        form.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((value) => {\n            const preview = immutableSet(\n                this.getPreview(),\n                `header.properties`,\n                value\n            );\n            this.updatePreview(preview);\n        });\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { AfterViewInit, Inject, Injectable } from \"@angular/core\";\nimport {\n    AbstractControl,\n    FormArray,\n    FormGroup,\n    Validators,\n} from \"@angular/forms\";\nimport get from \"lodash/get\";\nimport isEmpty from \"lodash/isEmpty\";\nimport isEqual from \"lodash/isEqual\";\nimport {\n    distinctUntilChanged,\n    distinctUntilKeyChanged,\n    filter,\n    map,\n    pluck,\n    // eslint-disable-next-line import/no-deprecated\n    startWith,\n    takeUntil,\n    tap,\n} from \"rxjs/operators\";\n\nimport { EventBus, IEvent, immutableSet } from \"@nova-ui/bits\";\n\nimport { ITableWidgetColumnConfig } from \"../../../../components/table-widget/types\";\nimport { PizzagnaService } from \"../../../../pizzagna/services/pizzagna.service\";\nimport { PizzagnaLayer, PIZZAGNA_EVENT_BUS } from \"../../../../types\";\nimport { IItemConfiguration } from \"../../../components/types\";\nimport { PreviewService } from \"../../preview.service\";\nimport { BaseConverter } from \"../base-converter\";\n\n@Injectable()\nexport class TableColumnsConverterService\n    extends BaseConverter\n    implements AfterViewInit\n{\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        previewService: PreviewService,\n        pizzagnaService: PizzagnaService\n    ) {\n        super(eventBus, previewService, pizzagnaService);\n    }\n\n    public ngAfterViewInit(): void {\n        super.ngAfterViewInit();\n    }\n\n    public buildForm(): void {\n        const table = this.getPreview()?.table;\n        const dataFields = table?.properties?.dataFields;\n        const columns = table?.properties?.configuration?.columns;\n\n        let formPizzagna = this.pizzagnaService.pizzagna;\n\n        formPizzagna = immutableSet(\n            formPizzagna,\n            `${PizzagnaLayer.Data}.columns.properties.columns`,\n            columns ?? []\n        );\n        formPizzagna = immutableSet(\n            formPizzagna,\n            `${PizzagnaLayer.Data}.columns.properties.dataFields`,\n            dataFields\n        );\n\n        this.updateFormPizzagna(formPizzagna);\n    }\n\n    public toPreview(form: FormGroup): void {\n        // table configurator v2 doesn't have `columnsOutput`, it just uses `columns` as source of truth\n        const formControl = form.contains(\"columnsOutput\")\n            ? form.get(\"columnsOutput\")\n            : form.get(\"columns\");\n\n        if (!formControl) {\n            throw new Error(\"FormControl is not defined!\");\n        }\n\n        formControl.valueChanges\n            .pipe(takeUntil(this.destroy$), distinctUntilChanged(isEqual))\n            .subscribe((columns: ITableWidgetColumnConfig[]) => {\n                const columnsPath = \"table.properties.configuration.columns\";\n\n                // need to wait till forms are initialized in case of creating new column\n                setTimeout(() => {\n                    const preview = this.getPreview();\n                    this.updatePreview(\n                        immutableSet(preview, columnsPath, columns)\n                    );\n                });\n\n                let formPizzagna = this.pizzagnaService.pizzagna;\n\n                // using setTimeout here updates the \"filters\" component properly - without it it doesn't update the dropdown with sortable columns\n                setTimeout(() => {\n                    // hackfix for NUI-5712\n                    // this assigment resolves a race condition that sometimes occured when data fields received from the data source would be\n                    // overwritten by an \"older\" formPizzagna value assigned above\n                    formPizzagna = immutableSet(\n                        formPizzagna,\n                        `${PizzagnaLayer.Structure}.columns.properties.template`,\n                        this.pizzagnaService.pizzagna[PizzagnaLayer.Structure]\n                            .columns.properties?.template\n                    );\n\n                    formPizzagna = immutableSet(\n                        formPizzagna,\n                        `${PizzagnaLayer.Data}.filters.properties.columns`,\n                        columns\n                    );\n                    // this triggers change detection on the \"filters\" component\n                    formPizzagna = immutableSet(\n                        formPizzagna,\n                        `${PizzagnaLayer.Structure}.presentation.properties.nodes`,\n                        [\n                            ...(formPizzagna?.structure?.presentation\n                                ?.properties?.nodes ?? []),\n                        ]\n                    );\n\n                    this.updateFormPizzagna(formPizzagna);\n                });\n            });\n\n        this.subscribeToColumnsValueChange();\n    }\n\n    private subscribeToColumnsValueChange() {\n        this.component.form\n            .get(\"columnsOutput\")\n            ?.valueChanges.pipe(\n                // trigger subscription after tableColumnsFormArray is filled with values\n                // eslint-disable-next-line import/no-deprecated\n                startWith(this.component.form.get(\"columnsOutput\").value),\n                filter((columns: IItemConfiguration[]) => columns.length > 0),\n                tap(() => this.handleWidthValidation()),\n                map((columns: ITableWidgetColumnConfig[]) =>\n                    this.filterColumnsWithoutSpecifiedWidth(columns)\n                ),\n                map((activeColumnsWithoutWidth: ITableWidgetColumnConfig[]) =>\n                    this.handleColumnsWithoutSpecifiedWidth(\n                        activeColumnsWithoutWidth\n                    )\n                ),\n                distinctUntilKeyChanged(\"id\"),\n                pluck(\"id\"),\n                takeUntil(this.destroy$)\n            )\n            .subscribe((columnId: string) => this.setWidthMessages(columnId));\n    }\n\n    /**\n     * Filters columns which are active (visible) and don't have specified width\n     * @param columns\n     */\n    private filterColumnsWithoutSpecifiedWidth(\n        columns: ITableWidgetColumnConfig[]\n    ) {\n        return columns.filter((column) => column.isActive && !column.width);\n    }\n\n    /**\n     * Receives columns which are active and don't have specified width and returns:\n     * - if all columns have specified width, reset width of the last column and return its id\n     * - if there are only one column, set this columns id as last without specified width\n     * - if there are more than one column that don't have specified width, do nothing\n     * @param activeColumnsWithoutWidth\n     */\n    private handleColumnsWithoutSpecifiedWidth(\n        activeColumnsWithoutWidth: Array<ITableWidgetColumnConfig>\n    ) {\n        switch (activeColumnsWithoutWidth.length) {\n            // if all columns have specified width, reset last columns value so that other columns can resize\n            case 0: {\n                const activeColumns = (\n                    this.component.form.get(\"columns\") as FormArray\n                ).controls.filter((control) =>\n                    get(\n                        control,\n                        `value.properties[${control.value.id}/description].isActive`\n                    )\n                );\n                if (isEmpty(activeColumns)) {\n                    return {\n                        id: undefined,\n                        label: undefined,\n                    };\n                }\n                const lastActiveColumn =\n                    activeColumns[activeColumns.length - 1];\n                console.warn(\n                    `Cannot set width for all columns. Resetting \"${lastActiveColumn.value.label}\" width.`\n                );\n                lastActiveColumn.patchValue(\n                    { width: null },\n                    { emitEvent: false }\n                );\n                return lastActiveColumn.value;\n            }\n            case 1:\n                return activeColumnsWithoutWidth[0];\n            default:\n                return {\n                    id: undefined,\n                    label: undefined,\n                };\n        }\n    }\n\n    private handleWidthValidation() {\n        (this.component.form.get(\"columns\") as FormArray).controls.forEach(\n            (formGroup: AbstractControl) => {\n                const descriptionFormPath = `properties.${formGroup.value.id}/description`;\n                const descriptionForm = formGroup.get(descriptionFormPath);\n\n                if (!descriptionForm) {\n                    return;\n                }\n                const isActive = descriptionForm.get(\"isActive\")?.value;\n                const widthFormField = descriptionForm.get(\"width\");\n                if (isActive) {\n                    widthFormField?.setValidators([Validators.min(62)]);\n                    widthFormField?.markAllAsTouched();\n                    widthFormField?.updateValueAndValidity({\n                        emitEvent: false,\n                    });\n                } else {\n                    widthFormField?.clearValidators();\n                    widthFormField?.updateValueAndValidity({\n                        emitEvent: false,\n                    });\n                }\n            }\n        );\n    }\n\n    private setWidthMessages(columnId: string) {\n        if (!this.pizzagnaService.pizzagna) {\n            return;\n        }\n\n        const widthMessageInput = \"isWidthMessageDisplayed\";\n        const { pizzagna } = this.pizzagnaService;\n        const columns = pizzagna.data.columns.properties?.columns;\n        columns.forEach((col: ITableWidgetColumnConfig) =>\n            this.pizzagnaService.setProperty(\n                `${PizzagnaLayer.Data}.${col.id}/description.properties.${widthMessageInput}`,\n                false\n            )\n        );\n\n        if (!columnId) {\n            return;\n        }\n        this.pizzagnaService.setProperty(\n            `${PizzagnaLayer.Data}.${columnId}/description.properties.${widthMessageInput}`,\n            true\n        );\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { AfterViewInit, Inject, Injectable } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IEvent, immutableSet } from \"@nova-ui/bits\";\n\nimport { PizzagnaService } from \"../../../../pizzagna/services/pizzagna.service\";\nimport { PizzagnaLayer, PIZZAGNA_EVENT_BUS } from \"../../../../types\";\nimport { PreviewService } from \"../../preview.service\";\nimport { BaseConverter } from \"../base-converter\";\n\n@Injectable()\nexport class TableFiltersConverterService\n    extends BaseConverter\n    implements AfterViewInit\n{\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        previewService: PreviewService,\n        pizzagnaService: PizzagnaService\n    ) {\n        super(eventBus, previewService, pizzagnaService);\n    }\n\n    public ngAfterViewInit(): void {\n        super.ngAfterViewInit();\n    }\n\n    public buildForm(): void {\n        let formPizzagna = this.pizzagnaService.pizzagna;\n\n        const table = this.getPreview()?.table;\n        const columns = table?.properties?.configuration?.columns;\n        const sorterConfiguration =\n            table?.properties?.configuration?.sorterConfiguration;\n\n        formPizzagna = immutableSet(\n            formPizzagna,\n            `${PizzagnaLayer.Data}.filters.properties.columns`,\n            columns\n        );\n        formPizzagna = immutableSet(\n            formPizzagna,\n            `${PizzagnaLayer.Data}.filters.properties.sorterConfiguration`,\n            sorterConfiguration\n        );\n\n        this.updateFormPizzagna(formPizzagna);\n    }\n\n    public toPreview(form: FormGroup): void {\n        form.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((form) => {\n            let preview = this.getPreview();\n            preview = immutableSet(\n                preview,\n                \"table.properties.configuration.sorterConfiguration\",\n                form.sorterConfiguration\n            );\n\n            this.updatePreview(preview);\n            // we need to update form with columns that are available\n            this.buildForm();\n        });\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { AfterViewInit, Inject, Injectable } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IEvent, immutableSet } from \"@nova-ui/bits\";\n\nimport { PizzagnaService } from \"../../../../pizzagna/services/pizzagna.service\";\nimport { PizzagnaLayer, PIZZAGNA_EVENT_BUS } from \"../../../../types\";\nimport { PreviewService } from \"../../preview.service\";\nimport { BaseConverter } from \"../base-converter\";\n\n@Injectable()\nexport class TableScrollTypeConverterService\n    extends BaseConverter\n    implements AfterViewInit\n{\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        previewService: PreviewService,\n        pizzagnaService: PizzagnaService\n    ) {\n        super(eventBus, previewService, pizzagnaService);\n    }\n\n    public ngAfterViewInit(): void {\n        super.ngAfterViewInit();\n    }\n\n    public buildForm(): void {\n        let formPizzagna = this.pizzagnaService.pizzagna;\n\n        const table = this.getPreview()?.table;\n\n        const paginatorConfiguration =\n            table?.properties?.configuration?.paginatorConfiguration;\n        const hasVirtualScroll =\n            table?.properties?.configuration?.hasVirtualScroll;\n        const scrollType = table?.properties?.configuration?.scrollType;\n\n        formPizzagna = immutableSet(\n            formPizzagna,\n            `${PizzagnaLayer.Data}.scrollType.properties.paginatorConfiguration`,\n            paginatorConfiguration\n        );\n\n        formPizzagna = immutableSet(\n            formPizzagna,\n            `${PizzagnaLayer.Data}.scrollType.properties.hasVirtualScroll`,\n            hasVirtualScroll\n        );\n\n        formPizzagna = immutableSet(\n            formPizzagna,\n            `${PizzagnaLayer.Data}.scrollType.properties.scrollType`,\n            scrollType\n        );\n\n        this.updateFormPizzagna(formPizzagna);\n    }\n\n    public toPreview(form: FormGroup): void {\n        form.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((form) => {\n            let preview = this.getPreview();\n\n            preview = immutableSet(\n                preview,\n                \"table.properties.configuration.hasVirtualScroll\",\n                false\n            );\n\n            preview = immutableSet(\n                preview,\n                \"table.properties.configuration.scrollType\",\n                form.paginatorConfiguration.scrollType\n            );\n\n            preview = immutableSet(\n                preview,\n                \"table.properties.configuration.paginatorConfiguration.pageSizeSet\",\n                form.paginatorConfiguration.pageSizeSet\n            );\n\n            preview = immutableSet(\n                preview,\n                \"table.properties.configuration.paginatorConfiguration.pageSize\",\n                form.paginatorConfiguration.pageSize\n            );\n\n            this.updatePreview(preview);\n        });\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { AfterViewInit, Inject, Injectable } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport get from \"lodash/get\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport {\n    EventBus,\n    IEvent,\n    immutableSet,\n    TimeframeService,\n} from \"@nova-ui/bits\";\n\nimport { ITimeseriesWidgetConfig } from \"../../../../components/timeseries-widget/types\";\nimport { PizzagnaService } from \"../../../../pizzagna/services/pizzagna.service\";\nimport { PizzagnaLayer, PIZZAGNA_EVENT_BUS } from \"../../../../types\";\nimport { PreviewService } from \"../../preview.service\";\nimport { BaseConverter } from \"../base-converter\";\n\n@Injectable()\nexport class TimeseriesMetadataConverterService\n    extends BaseConverter\n    implements AfterViewInit\n{\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        previewService: PreviewService,\n        pizzagnaService: PizzagnaService,\n        private timeframeService: TimeframeService\n    ) {\n        super(eventBus, previewService, pizzagnaService);\n    }\n\n    public ngAfterViewInit(): void {\n        super.ngAfterViewInit();\n    }\n\n    public buildForm(): void {\n        let formPizzagna = this.pizzagnaService.pizzagna;\n        const preview = this.getPreview();\n        const timeSpans = Object.keys(this.timeframeService.currentPresets).map(\n            (k) => ({\n                id: k,\n                name: this.timeframeService.currentPresets[k].name,\n            })\n        );\n\n        const propertyPrefix = `${PizzagnaLayer.Data}.timeseriesMetadata.properties`;\n        formPizzagna = immutableSet(\n            formPizzagna,\n            `${propertyPrefix}.timeSpans`,\n            timeSpans\n        );\n\n        const selectedPresetId = get(\n            preview,\n            `timeframeSelection.properties.timeframe.selectedPresetId`,\n            \"last7Days\"\n        ) as unknown as string;\n        const selectedTimeSpan = timeSpans.find(\n            (timeSpan) => timeSpan.id === selectedPresetId\n        );\n        if (selectedTimeSpan) {\n            formPizzagna = immutableSet(\n                formPizzagna,\n                `${propertyPrefix}.startingTimespan`,\n                selectedTimeSpan\n            );\n        }\n\n        const configuration = get(\n            preview,\n            `chart.properties.configuration`\n        ) as unknown as ITimeseriesWidgetConfig;\n        if (configuration) {\n            formPizzagna = immutableSet(\n                formPizzagna,\n                `${propertyPrefix}.legendPlacement`,\n                configuration.legendPlacement\n            );\n            formPizzagna = immutableSet(\n                formPizzagna,\n                `${propertyPrefix}.leftAxisLabel`,\n                configuration.leftAxisLabel\n            );\n            formPizzagna = immutableSet(\n                formPizzagna,\n                `${propertyPrefix}.preset`,\n                configuration.preset\n            );\n        }\n\n        this.updateFormPizzagna(formPizzagna);\n    }\n\n    public toPreview(form: FormGroup): void {\n        form.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((value) => {\n            let preview = this.getPreview();\n\n            const presetId = get(value, \"startingTimespan.id\");\n            if (presetId) {\n                preview = immutableSet(\n                    preview,\n                    \"timeframeSelection.properties.timeframe.selectedPresetId\",\n                    presetId\n                );\n            }\n\n            const chartConfig = `chart.properties.configuration`;\n            preview = immutableSet(\n                preview,\n                `${chartConfig}.legendPlacement`,\n                get(value, \"legendPlacement\", \"\")\n            );\n            preview = immutableSet(\n                preview,\n                `${chartConfig}.leftAxisLabel`,\n                get(value, \"leftAxisLabel\", \"\")\n            );\n            preview = immutableSet(\n                preview,\n                `${chartConfig}.preset`,\n                get(value, \"preset\", \"\")\n            );\n\n            this.updatePreview(preview);\n        });\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { AfterViewInit, Inject, Injectable, OnDestroy } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport get from \"lodash/get\";\nimport isEmpty from \"lodash/isEmpty\";\nimport isEqual from \"lodash/isEqual\";\nimport isUndefined from \"lodash/isUndefined\";\n// eslint-disable-next-line import/no-deprecated\nimport { combineLatest, Subject } from \"rxjs\";\nimport { distinctUntilChanged, map, takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IEvent, immutableSet } from \"@nova-ui/bits\";\n\nimport { IDataSourceOutput } from \"../../../../components/providers/types\";\nimport {\n    ITimeseriesWidgetData,\n    ITimeseriesWidgetSeries,\n} from \"../../../../components/timeseries-widget/types\";\nimport { PizzagnaService } from \"../../../../pizzagna/services/pizzagna.service\";\nimport {\n    PizzagnaLayer,\n    PIZZAGNA_EVENT_BUS,\n    WellKnownProviders,\n} from \"../../../../types\";\nimport { IItemConfiguration } from \"../../../components/types\";\nimport { ITimeseriesItemConfiguration } from \"../../../components/widgets/timeseries/types\";\nimport { DATA_SOURCE_CHANGE, DATA_SOURCE_OUTPUT } from \"../../../types\";\nimport { PreviewService } from \"../../preview.service\";\nimport { BaseConverter } from \"../base-converter\";\n\n@Injectable()\nexport class TimeseriesSeriesConverterService\n    extends BaseConverter\n    implements AfterViewInit, OnDestroy\n{\n    private indicatorDataKey = \"indicatorData\";\n    private previewSeriesPath = `providers.${WellKnownProviders.Adapter}.properties.series`;\n    private formSeriesComponentPath = `${PizzagnaLayer.Data}.series.properties`;\n\n    private dataSourceSeries$ = new Subject<ITimeseriesWidgetData[]>();\n    private selectedSeriesIds$ = new Subject<string[]>();\n    private shouldReadForm = false;\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        previewService: PreviewService,\n        pizzagnaService: PizzagnaService\n    ) {\n        super(eventBus, previewService, pizzagnaService);\n\n        this.subscribeToAvailableDataFieldsChange();\n\n        this.eventBus.subscribeUntil(DATA_SOURCE_CHANGE, this.destroy$, (v) => {\n            const nodesPath = `${PizzagnaLayer.Structure}.series.properties.nodes`;\n            const nodes = get(\n                this.pizzagnaService.pizzagna,\n                nodesPath\n            ) as unknown as string[];\n            this.pizzagnaService.removeComponents(nodes);\n\n            let updatedPizzagna = this.pizzagnaService.pizzagna;\n            updatedPizzagna = immutableSet(updatedPizzagna, nodesPath, []);\n            updatedPizzagna = immutableSet(\n                updatedPizzagna,\n                `${this.formSeriesComponentPath}.series`,\n                []\n            );\n            this.updateFormPizzagna(updatedPizzagna);\n        });\n\n        this.eventBus.subscribeUntil(\n            DATA_SOURCE_OUTPUT,\n            this.destroy$,\n            (event: IEvent<any | IDataSourceOutput<any>>) => {\n                // Because typing is lenient for the data source output, the event may or may not contain an IDataSourceOutput\n                // with a result property; the payload may actually be the result itself, so both possibilities are accommodated.\n                const { series } = isUndefined(event.payload.result)\n                    ? event.payload\n                    : event.payload.result || {};\n\n                if (series) {\n                    this.dataSourceSeries$.next(series);\n\n                    let updatedPizzagna = this.pizzagnaService.pizzagna;\n                    updatedPizzagna = immutableSet(\n                        updatedPizzagna,\n                        `${this.formSeriesComponentPath}.allSeries`,\n                        series\n                    );\n\n                    const seriesTemplate =\n                        this.pizzagnaService.pizzagna[PizzagnaLayer.Structure][\n                            this.component.componentId\n                        ].properties?.template;\n                    const indicatorDataIndex = seriesTemplate.findIndex(\n                        (val: IItemConfiguration) =>\n                            val.id === this.indicatorDataKey\n                    );\n                    const indicatorDataPath = `${PizzagnaLayer.Structure}.series.properties.template[${indicatorDataIndex}].properties.allSeries`;\n                    updatedPizzagna = immutableSet(\n                        updatedPizzagna,\n                        indicatorDataPath,\n                        series\n                    );\n\n                    const previewSeries = get(\n                        this.getPreview(),\n                        `chart.${this.previewSeriesPath}`,\n                        []\n                    ) as ITimeseriesWidgetSeries[];\n                    updatedPizzagna = previewSeries.reduce(\n                        (res, s) =>\n                            immutableSet(\n                                res,\n                                `${PizzagnaLayer.Data}.${s.id}/${this.indicatorDataKey}.properties.allSeries`,\n                                series\n                            ),\n                        updatedPizzagna\n                    );\n\n                    this.updateFormPizzagna(updatedPizzagna);\n\n                    // updating preview series if no series set in editor. this occurs when changing DS, for example.\n                    // in DS is changing all the series are removed and then all series from DS should be set.\n                    // that's why updating preview series.\n                    const editorSeriesPath = `${this.formSeriesComponentPath}.series`;\n                    const editorSeries = get(\n                        this.pizzagnaService.pizzagna,\n                        editorSeriesPath\n                    );\n                    if (isEmpty(editorSeries)) {\n                        this.shouldReadForm = false;\n\n                        const seriesForPreview: ITimeseriesWidgetSeries[] =\n                            series.map((s: ITimeseriesWidgetData) => ({\n                                id: s.id,\n                                selectedSeriesId: s.id,\n                                label: s.name,\n                            }));\n                        const updatedPreview = immutableSet(\n                            this.getPreview(),\n                            `chart.${this.previewSeriesPath}`,\n                            seriesForPreview\n                        );\n                        this.updatePreview(updatedPreview);\n\n                        this.buildForm();\n\n                        setTimeout(() => {\n                            this.updateAvailableSeries([]);\n                            this.shouldReadForm = true;\n                        });\n                    }\n                }\n            }\n        );\n    }\n\n    public buildForm(): void {\n        const preview = this.getPreview();\n        const series = get(\n            preview,\n            `chart.${this.previewSeriesPath}`,\n            []\n        ) as ITimeseriesWidgetSeries[];\n        const seriesToSet = series.map(\n            (s) =>\n                ({\n                    id: s.id,\n                    selectedSeriesId: s.selectedSeriesId,\n                } as ITimeseriesItemConfiguration)\n        );\n        const seriesIds = series.map((s) => s.id);\n\n        this.pizzagnaService.createComponentsFromTemplate(\"series\", seriesIds);\n        const editorPizzagna = this.pizzagnaService.pizzagna;\n        const pizzagnaWithSeries = immutableSet(\n            editorPizzagna,\n            `${this.formSeriesComponentPath}.series`,\n            seriesToSet\n        );\n\n        this.updateFormPizzagna(pizzagnaWithSeries);\n        this.selectedSeriesIds$.next(\n            seriesToSet.map((s) => s.selectedSeriesId)\n        );\n        setTimeout(() => (this.shouldReadForm = true));\n    }\n\n    public toPreview(form: FormGroup): void {\n        form.valueChanges\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((formSeries) => {\n                if (!this.shouldReadForm) {\n                    return;\n                }\n                const preview = this.getPreview();\n                const { chart } = preview;\n                const seriesFromPreview = get(\n                    chart,\n                    this.previewSeriesPath,\n                    []\n                ) as ITimeseriesWidgetSeries[];\n\n                const series: ITimeseriesWidgetSeries[] = formSeries.map(\n                    (s: ITimeseriesWidgetSeries) => ({\n                        id: s.id,\n                        selectedSeriesId: s.selectedSeriesId,\n                        ...seriesFromPreview.find(\n                            (previewSeries) => previewSeries.id === s.id\n                        ),\n                    })\n                );\n\n                const updatedPreview = immutableSet(\n                    preview,\n                    `chart.${this.previewSeriesPath}`,\n                    series\n                );\n                this.updatePreview(updatedPreview);\n\n                const selectedSeriesIds = formSeries\n                    .map((s: ITimeseriesWidgetSeries) =>\n                        get(s, `properties[${s.id}/indicatorData].id`)\n                    )\n                    .filter((v: any) => !isEmpty(v)) as string[];\n                this.selectedSeriesIds$.next(selectedSeriesIds);\n            });\n    }\n\n    public ngOnDestroy(): void {\n        this.dataSourceSeries$.complete();\n        this.selectedSeriesIds$.complete();\n        super.ngOnDestroy();\n    }\n\n    private updateAvailableSeries(availableSeries: ITimeseriesWidgetData[]) {\n        if (!this.pizzagnaService.pizzagna) {\n            return;\n        }\n\n        let updatedPizzagna = this.pizzagnaService.pizzagna;\n\n        // configuration component\n        updatedPizzagna = immutableSet(\n            updatedPizzagna,\n            `${this.formSeriesComponentPath}.availableSeries`,\n            availableSeries\n        );\n\n        // template\n        const seriesTemplate =\n            this.pizzagnaService.pizzagna[PizzagnaLayer.Structure][\n                this.component.componentId\n            ].properties?.template;\n        const indicatorDataIndex = seriesTemplate.findIndex(\n            (val: ITimeseriesWidgetSeries) => val.id === this.indicatorDataKey\n        );\n        const indicatorDataPath = `${PizzagnaLayer.Structure}.series.properties.template[${indicatorDataIndex}].properties.availableSeries`;\n        updatedPizzagna = immutableSet(\n            updatedPizzagna,\n            indicatorDataPath,\n            availableSeries\n        );\n\n        // already created forms\n        const seriesIds = get(\n            this.pizzagnaService.pizzagna,\n            `${PizzagnaLayer.Structure}.series.properties.nodes`\n        ) as unknown as string[];\n        updatedPizzagna = seriesIds.reduce(\n            (res, id) =>\n                immutableSet(\n                    res,\n                    `${PizzagnaLayer.Data}.${id}/${this.indicatorDataKey}.properties.availableSeries`,\n                    availableSeries\n                ),\n            updatedPizzagna\n        );\n\n        this.updateFormPizzagna(updatedPizzagna);\n    }\n\n    private subscribeToAvailableDataFieldsChange() {\n        // eslint-disable-next-line import/no-deprecated\n        combineLatest([this.dataSourceSeries$, this.selectedSeriesIds$])\n            .pipe(\n                takeUntil(this.destroy$),\n                map(([dsSeries, usedSeriesIds]) =>\n                    dsSeries.filter(\n                        (ds) => !usedSeriesIds.find((id) => id === ds.id)\n                    )\n                ),\n                distinctUntilChanged(isEqual)\n            )\n            .subscribe(this.updateAvailableSeries.bind(this));\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Inject, Injectable } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport get from \"lodash/get\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IEvent, immutableSet } from \"@nova-ui/bits\";\n\nimport { ITimeseriesWidgetSeries } from \"../../../../components/timeseries-widget/types\";\nimport { PizzagnaService } from \"../../../../pizzagna/services/pizzagna.service\";\nimport {\n    PizzagnaLayer,\n    PIZZAGNA_EVENT_BUS,\n    WellKnownProviders,\n} from \"../../../../types\";\nimport { PreviewService } from \"../../preview.service\";\nimport { BaseConverter } from \"../base-converter\";\n\n@Injectable()\nexport class TimeseriesTileIndicatorDataConverterService extends BaseConverter {\n    private previewSeriesPath = `chart.providers.${WellKnownProviders.Adapter}.properties.series`;\n\n    private get previewComponentId() {\n        return this.componentId.split(\"/\")[0];\n    }\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        previewService: PreviewService,\n        pizzagnaService: PizzagnaService\n    ) {\n        super(eventBus, previewService, pizzagnaService);\n    }\n\n    public buildForm(): void {\n        const series = get(\n            this.getPreview(),\n            this.previewSeriesPath,\n            []\n        ) as ITimeseriesWidgetSeries[];\n        const currentSeries = series.find(\n            (s) => s.id === this.previewComponentId\n        );\n        const selectedSeriesId =\n            currentSeries && currentSeries.selectedSeriesId;\n\n        const updatedPizzagna = immutableSet(\n            this.pizzagnaService.pizzagna,\n            `${PizzagnaLayer.Data}.${this.componentId}.properties`,\n            { selectedSeriesId }\n        );\n        this.updateFormPizzagna(updatedPizzagna);\n    }\n\n    public toPreview(form: FormGroup): void {\n        form.valueChanges\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((formData) => {\n                const selectedSeriesId = formData.id;\n                const preview = this.getPreview();\n\n                const seriesFromPreview = get(\n                    preview,\n                    this.previewSeriesPath,\n                    []\n                ) as ITimeseriesWidgetSeries[];\n                const currentSeriesIndex = seriesFromPreview.findIndex(\n                    (s) => s.id === this.previewComponentId\n                );\n\n                if (currentSeriesIndex > -1) {\n                    const newSeries = [...seriesFromPreview];\n                    newSeries[currentSeriesIndex] = {\n                        ...newSeries[currentSeriesIndex],\n                        selectedSeriesId,\n                    };\n\n                    const updatedPreview = immutableSet(\n                        preview,\n                        `${this.previewSeriesPath}`,\n                        newSeries\n                    );\n                    this.updatePreview(updatedPreview);\n                }\n            });\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { InjectionToken } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\n\nimport { IPizzagna } from \"../../../types\";\n\nexport const CONFIGURATOR_CONVERTER =\n    new InjectionToken<IConfiguratorConverter>(\"CONFIGURATOR_CONVERTER\");\n\nexport interface IConfiguratorForm {\n    pizzagna: IPizzagna;\n    formGroup: FormGroup;\n    previousValue: any;\n}\n\nexport interface IConfiguratorConverter {\n    buildForm(): any;\n\n    toPreview(form: FormGroup): any;\n}\n\nexport interface IConverterFormPartsProperties {\n    previewPath: string;\n    keys: string[];\n    /** In case you need to put data in different place use this property */\n    previewOutputPath?: string;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\n\nimport { IEventDefinition } from \"@nova-ui/bits\";\n@Injectable({\n    providedIn: \"root\",\n})\nexport class EventRegistryService {\n    private events: Record<string, IEventDefinition> = {};\n\n    public registerEvent(eventDefinition: IEventDefinition): void {\n        this.events[eventDefinition.id] = eventDefinition;\n    }\n\n    public getEvent(id: string): IEventDefinition {\n        const event = this.events[id];\n\n        if (!event) {\n            throw new Error(\n                \"Event with id '\" +\n                    id +\n                    \"' is not registered. Registered events are: \" +\n                    JSON.stringify(Object.keys(this.events))\n            );\n        }\n\n        return event;\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Directive, OnDestroy } from \"@angular/core\";\nimport { BehaviorSubject, Observable } from \"rxjs\";\nimport { map } from \"rxjs/operators\";\n\nimport { LoggerService, uuid } from \"@nova-ui/bits\";\n\nimport { IRegistryAddOptions } from \"./types\";\n\ntype IRegistryMap<T> = Record<string, T>;\n\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class RegistryService<T = object> implements OnDestroy {\n    protected state$: BehaviorSubject<IRegistryMap<T>> = new BehaviorSubject<\n        IRegistryMap<T>\n    >({});\n\n    public stateChanged$: Observable<T[]> = this.state$\n        .asObservable()\n        .pipe(map(() => this.getItems()));\n\n    private _stateVersion: string;\n    /* Helper method for non-reactive usages */\n    public get stateVersion(): string {\n        return this._stateVersion;\n    }\n\n    private _isEmpty: boolean = true;\n    public get isEmpty(): boolean {\n        return this._isEmpty;\n    }\n\n    protected constructor(\n        private logger: LoggerService,\n        private className?: string\n    ) {}\n\n    public addItems(\n        items: T[],\n        options: IRegistryAddOptions = { overrideExisting: true }\n    ): void {\n        const storageValue: IRegistryMap<T> = this.state$.value;\n\n        items.forEach((item: T) => {\n            if (\n                storageValue[this.getItemKey(item)] &&\n                !options.overrideExisting\n            ) {\n                this.logger.warn(`Logger - ${\n                    this.className\n                }: item with ${this.getItemKey(item)}\n                    is already registered. Skipping.`);\n\n                return;\n            }\n\n            storageValue[this.getItemKey(item)] = { ...item };\n        });\n\n        this.state$.next(storageValue);\n\n        if (items.length > 0) {\n            this.updateStateFlags(false);\n        }\n    }\n\n    public getItem(id: string): T | undefined {\n        return this.state$.value[id];\n    }\n\n    public getItems(): T[] {\n        return Object.values(this.state$.value);\n    }\n\n    public reset(): void {\n        this.state$.next({});\n        this.updateStateFlags(true);\n    }\n\n    public ngOnDestroy(): void {\n        this.state$.complete();\n    }\n\n    protected abstract getItemKey(item: T): string;\n\n    private updateStateFlags(isEmpty: boolean): void {\n        this._isEmpty = isEmpty;\n        this._stateVersion = uuid();\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\n\nimport { LoggerService } from \"@nova-ui/bits\";\n\nimport { RegistryService } from \"./registry-service\";\nimport { IAddFormattersOptions } from \"./types\";\nimport {\n    IFormatterDefinition,\n    ITableFormatterDefinition,\n} from \"../components/types\";\n\nexport abstract class FormatterRegistryService<\n    TFormatter extends IFormatterDefinition = IFormatterDefinition\n> extends RegistryService<TFormatter> {\n    /** @deprecated use 'stateChanged$' instead - NUI-5852 */\n    public formattersStateChanged$: Observable<TFormatter[]> =\n        this.stateChanged$;\n\n    /** @deprecated use 'addItems' instead - NUI-5852 */\n    public addFormatters(\n        formatters: TFormatter[],\n        options: IAddFormattersOptions = { overrideExisting: true }\n    ): void {\n        super.addItems(formatters, options);\n    }\n\n    /** @deprecated use 'getItems' instead - NUI-5852 */\n    public getFormatters(): TFormatter[] {\n        return super.getItems();\n    }\n\n    protected getItemKey(item: TFormatter): string {\n        return item.componentType;\n    }\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class TableFormatterRegistryService extends FormatterRegistryService<ITableFormatterDefinition> {\n    constructor(logger: LoggerService) {\n        super(logger, \"TableFormatterRegistryService\");\n    }\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class KpiFormattersRegistryService extends FormatterRegistryService<IFormatterDefinition> {\n    constructor(logger: LoggerService) {\n        super(logger, \"KpiFormattersRegistryService\");\n    }\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class RiskScoreFormattersRegistryService extends FormatterRegistryService<IFormatterDefinition> {\n    constructor(logger: LoggerService) {\n        super(logger, \"RiskScoreFormattersRegistryService\");\n    }\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class ProportionalDonutContentFormattersRegistryService extends FormatterRegistryService<IFormatterDefinition> {\n    constructor(logger: LoggerService) {\n        super(logger, \"ProportionalDonutContentFormattersRegistryService\");\n    }\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class ProportionalLegendFormattersRegistryService extends FormatterRegistryService<IFormatterDefinition> {\n    constructor(logger: LoggerService) {\n        super(logger, \"ProportionalLegendFormattersRegistryService\");\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Inject, Injectable, OnDestroy, Optional } from \"@angular/core\";\nimport keyBy from \"lodash/keyBy\";\nimport uniq from \"lodash/uniq\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IEvent, IEventDefinition } from \"@nova-ui/bits\";\n\nimport { PizzagnaService } from \"../pizzagna/services/pizzagna.service\";\nimport {\n    DASHBOARD_EVENT_BUS,\n    IConfigurable,\n    IProperties,\n    PizzagnaLayer,\n    PIZZAGNA_EVENT_BUS,\n} from \"../types\";\nimport { EventRegistryService } from \"./event-registry.service\";\nimport { WidgetConfigurationService } from \"./widget-configuration.service\";\n\nexport interface IWidgetEvent extends IEvent {\n    widgetId?: string;\n}\n\n/**\n * Configuration of WidgetToDashboardEventProxy\n */\nexport interface IWidgetToDashboardEventProxyConfiguration extends IProperties {\n    /**\n     * List of events that are transmitted from widget to dashboard\n     */\n    upstreams?: string[];\n    /**\n     * List of events that are transmitted from dashboard to widget\n     */\n    downstreams?: string[];\n}\n\n/**\n * This provider transmits events between the dashboard event bus and the widget event bus.\n * It needs to be configured with the events that need transmission each way.\n */\n@Injectable()\nexport class WidgetToDashboardEventProxyService\n    implements IConfigurable, OnDestroy\n{\n    private upstreamSubscriptions: Record<string, any> = {};\n    private downstreamSubscriptions: Record<string, any> = {};\n    private readonly destroy$ = new Subject<void>();\n    private component: { componentId: string };\n\n    private upstreams?: string[];\n    private downstreams?: string[];\n    public providerKey: string;\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) private pizzagnaBus: EventBus<IEvent>,\n        @Optional()\n        @Inject(DASHBOARD_EVENT_BUS)\n        private dashboardBus: EventBus<IEvent>,\n        @Optional()\n        private widgetConfigurationService: WidgetConfigurationService,\n        private eventRegistry: EventRegistryService,\n        private pizzagnaService: PizzagnaService\n    ) {}\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    public setComponent(component: any): void {\n        this.component = component;\n    }\n\n    public updateConfiguration(\n        properties: IWidgetToDashboardEventProxyConfiguration\n    ): void {\n        this.providerKey = properties.providerKey;\n        this.upstreams = properties.upstreams;\n        this.downstreams = properties.downstreams;\n\n        if (this.upstreams) {\n            // upstream = widget -> dashboard\n            this.registerUpstreamSubscriptions(...this.upstreams);\n        }\n        if (this.downstreams) {\n            // downstream = dashboard -> widget\n            this.registerDownstreamSubscriptions(...this.downstreams);\n        }\n    }\n\n    public addUpstream(stream: IEventDefinition): void {\n        this.addStream(stream, \"upstreams\");\n    }\n\n    public addDownstream(stream: IEventDefinition): void {\n        this.addStream(stream, \"downstreams\");\n    }\n\n    private addStream(\n        stream: IEventDefinition,\n        streamKey: \"upstreams\" | \"downstreams\"\n    ) {\n        const streams = uniq((this[streamKey] || []).concat(stream.id));\n        this[streamKey] = streams;\n\n        if (!this.component) {\n            return;\n        }\n\n        this.pizzagnaService.setProperty(\n            {\n                componentId: this.component.componentId,\n                pizzagnaKey: PizzagnaLayer.Data,\n                providerKey: this.providerKey,\n                propertyPath: [streamKey],\n            },\n            streams\n        );\n    }\n\n    private registerUpstreamSubscriptions(...upstreams: string[]) {\n        if (!this.dashboardBus) {\n            return;\n        }\n\n        this.registerSubscriptions(\n            upstreams,\n            this.upstreamSubscriptions,\n            this.pizzagnaBus,\n            (stream: IEventDefinition, event: IEvent) => {\n                // add widgetId to all events passed to the dashboard\n                const widgetId = this.widgetConfigurationService.getWidget().id;\n\n                this.dashboardBus\n                    .getStream(stream)\n                    .next(<any>Object.assign({}, event, { widgetId }));\n            }\n        );\n    }\n\n    private registerDownstreamSubscriptions(...downstreams: string[]) {\n        if (!this.dashboardBus) {\n            return;\n        }\n\n        this.registerSubscriptions(\n            downstreams,\n            this.downstreamSubscriptions,\n            this.dashboardBus,\n            (stream: IEventDefinition, event: IWidgetEvent) => {\n                // pass only events that have matching widgetId or a widgetId that is not defined\n                const widgetId = this.widgetConfigurationService.getWidget().id;\n                if (\n                    typeof event.widgetId === \"undefined\" ||\n                    widgetId === event.widgetId\n                ) {\n                    this.pizzagnaBus.getStream(stream).next(event);\n                }\n            }\n        );\n    }\n\n    private registerSubscriptions(\n        streams: string[] = [],\n        subscriptions: Record<string, any>,\n        sourceBus: EventBus<IEvent>,\n        handleEvent: (stream: IEventDefinition, event: IEvent) => void\n    ) {\n        const streamsIndex: Record<string, string> | null = streams\n            ? keyBy(streams, (x) => x)\n            : null;\n\n        // remove subscriptions that are not valid anymore\n        for (const streamId of Object.keys(subscriptions)) {\n            if (!streamsIndex || !streamsIndex[streamId]) {\n                subscriptions[streamId].unsubscribe();\n                delete subscriptions[streamId];\n            }\n        }\n\n        // add subscriptions that were not registered before\n        for (const streamId of Object.keys(streamsIndex ?? {}).filter(\n            (s) => !subscriptions[s]\n        )) {\n            const eventDefinition = this.eventRegistry.getEvent(streamId);\n            subscriptions[streamId] = (\n                sourceBus.getStream(\n                    eventDefinition\n                ) as object as Subject<IEvent>\n            )\n                .pipe(takeUntil(this.destroy$))\n                .subscribe((event: IEvent) => {\n                    handleEvent(eventDefinition, event);\n                });\n        }\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { DecimalPipe } from \"@angular/common\";\nimport {\n    Injectable,\n    Injector,\n    NgZone,\n    Optional,\n    StaticProvider,\n} from \"@angular/core\";\n\nimport {\n    LoggerService,\n    TimeframeService,\n    VirtualViewportManager,\n} from \"@nova-ui/bits\";\n\nimport { DataSourceAdapter } from \"../components/providers/data-source-adapter\";\nimport { DrilldownDataSourceAdapter } from \"../components/providers/drilldown-data-source-adapter\";\nimport { EventBusDebugger } from \"../components/providers/event-bus-debugger\";\nimport { UrlInteractionHandler } from \"../components/providers/interaction/url-interaction-handler\";\nimport { KpiColorPrioritizer } from \"../components/providers/kpi-color-prioritizer\";\nimport { KpiDataSourceAdapter } from \"../components/providers/kpi-data-source-adapter\";\nimport { KpiScaleSyncBroker } from \"../components/providers/kpi-scale-sync-broker\";\nimport { KpiStatusContentFallbackAdapter } from \"../components/providers/kpi-status-content-fallback-adapter\";\nimport { LoadingAdapter } from \"../components/providers/loading-adapter\";\nimport { PizzagnaBroadcasterService } from \"../components/providers/pizzagna-broadcaster.service\";\nimport { Refresher } from \"../components/providers/refresher\";\nimport { RefresherSettingsService } from \"../components/providers/refresher-settings.service\";\nimport { StatusContentFallbackAdapter } from \"../components/providers/status-content-fallback-adapter\";\nimport { TableDataSourceAdapter } from \"../components/providers/table-data-source-adapter\";\nimport { TimeseriesDataSourceAdapter } from \"../components/providers/timeseries-data-source-adapter\";\nimport { DashwizService } from \"../configurator/components/wizard/dashwiz/dashwiz.service\";\nimport { ConfiguratorDataSourceManagerService } from \"../configurator/services/configurator-data-source-manager.service\";\nimport { KpiSectionConverterService } from \"../configurator/services/converters/kpi/kpi-section-converter/kpi-section-converter.service\";\nimport { KpiTilesConverterService } from \"../configurator/services/converters/kpi/kpi-tiles-converter.service\";\n// eslint-disable-next-line max-len\nimport { ProportionalWidgetChartOptionsConverterService } from \"../configurator/services/converters/proportional/proportional-widget-chart-options-converter.service\";\nimport { GenericArrayConverterService } from \"../configurator/services/converters/shared/generic-array-converter/generic-array-converter.service\";\nimport { GenericConverterService } from \"../configurator/services/converters/shared/generic-converter/generic-converter.service\";\n// eslint-disable-next-line max-len\nimport { TitleAndDescriptionConverterService } from \"../configurator/services/converters/shared/title-and-description-converter/title-and-description-converter.service\";\nimport { TableColumnsConverterService } from \"../configurator/services/converters/table/table-columns-converter.service\";\nimport { TableFiltersConverterService } from \"../configurator/services/converters/table/table-filters-converter.service\";\nimport { TableScrollTypeConverterService } from \"../configurator/services/converters/table/table-scroll-type-converter.service\";\nimport { TimeseriesMetadataConverterService } from \"../configurator/services/converters/timeseries/timeseries-metadata-converter.service\";\nimport { TimeseriesSeriesConverterService } from \"../configurator/services/converters/timeseries/timeseries-series-converter.service\";\nimport { TimeseriesTileIndicatorDataConverterService } from \"../configurator/services/converters/timeseries/timeseries-tile-indicator-data-converter.service\";\nimport { CONFIGURATOR_CONVERTER } from \"../configurator/services/converters/types\";\nimport { PreviewService } from \"../configurator/services/preview.service\";\nimport { PizzagnaService } from \"../pizzagna/services/pizzagna.service\";\nimport {\n    DASHBOARD_EVENT_BUS,\n    DATA_SOURCE,\n    FORMATTERS_REGISTRY,\n    PIZZAGNA_EVENT_BUS,\n} from \"../types\";\nimport { EventRegistryService } from \"./event-registry.service\";\nimport { KpiColorComparatorsRegistryService } from \"./kpi-color-comparators-registry.service\";\nimport {\n    KpiFormattersRegistryService,\n    ProportionalDonutContentFormattersRegistryService,\n    RiskScoreFormattersRegistryService,\n    TableFormatterRegistryService,\n} from \"./table-formatter-registry.service\";\nimport {\n    IStaticProviders,\n    NOVA_CONFIGURATOR_DATA_SOURCE_MANAGER,\n    NOVA_DASHBOARD_EVENT_PROXY,\n    NOVA_DATASOURCE_ADAPTER,\n    NOVA_DATASOURCE_INTERVAL_REFRESHER,\n    NOVA_DRILLDOWN_DATASOURCE_ADAPTER,\n    NOVA_EVENT_BUS_DEBUGGER,\n    NOVA_GENERIC_ARRAY_CONVERTER,\n    NOVA_GENERIC_CONVERTER,\n    NOVA_KPI_COLOR_PRIORITIZER,\n    NOVA_KPI_DATASOURCE_ADAPTER,\n    NOVA_KPI_FORMATTERS_REGISTRY,\n    NOVA_KPI_SCALE_SYNC_BROKER,\n    NOVA_KPI_SECTION_CONVERTER,\n    NOVA_KPI_STATUS_CONTENT_FALLBACK_ADAPTER,\n    NOVA_KPI_TILES_CONVERTER,\n    NOVA_LOADING_ADAPTER,\n    NOVA_PIZZAGNA_BROADCASTER,\n    NOVA_PROPORTIONAL_CONTENT_FORMATTERS_REGISTRY,\n    NOVA_PROPORTIONAL_WIDGET_CHART_OPTIONS_CONVERTER,\n    NOVA_STATUS_CONTENT_FALLBACK_ADAPTER,\n    NOVA_TABLE_COLUMNS_CONVERTER,\n    NOVA_TABLE_DATASOURCE_ADAPTER,\n    NOVA_TABLE_FILTERS_CONVERTER,\n    NOVA_TABLE_FORMATTERS_REGISTRY,\n    NOVA_TIMESERIES_DATASOURCE_ADAPTER,\n    NOVA_TIMESERIES_METADATA_CONVERTER,\n    NOVA_TIMESERIES_SERIES_CONVERTER,\n    NOVA_TIMESERIES_TILE_INDICATOR_DATA_CONVERTER,\n    NOVA_TITLE_AND_DESCRIPTION_CONVERTER,\n    NOVA_URL_INTERACTION_HANDLER,\n    NOVA_VIRTUAL_VIEWPORT_MANAGER,\n    NOVA_RISK_SCORE_FORMATTERS_REGISTRY,\n    NOVA_TABLE_SCROLL_TYPE_CONVERTER,\n} from \"./types\";\nimport { UrlInteractionService } from \"./url-interaction.service\";\nimport { WidgetConfigurationService } from \"./widget-configuration.service\";\nimport { WidgetToDashboardEventProxyService } from \"./widget-to-dashboard-event-proxy.service\";\n\n@Injectable({ providedIn: \"root\" })\nexport class ProviderRegistryService {\n    public staticProviders: IStaticProviders = {};\n\n    constructor(private logger: LoggerService) {\n        this.setProviders({\n            [NOVA_DATASOURCE_INTERVAL_REFRESHER]: {\n                provide: Refresher,\n                deps: [PIZZAGNA_EVENT_BUS, NgZone, RefresherSettingsService],\n            },\n            [NOVA_DASHBOARD_EVENT_PROXY]: {\n                provide: WidgetToDashboardEventProxyService,\n                deps: [\n                    PIZZAGNA_EVENT_BUS,\n                    [new Optional(), DASHBOARD_EVENT_BUS],\n                    [new Optional(), WidgetConfigurationService],\n                    EventRegistryService,\n                    PizzagnaService,\n                ],\n            },\n            [NOVA_DATASOURCE_ADAPTER]: {\n                provide: DataSourceAdapter,\n                deps: [\n                    PIZZAGNA_EVENT_BUS,\n                    [new Optional(), DATA_SOURCE],\n                    PizzagnaService,\n                ],\n            },\n            [NOVA_TABLE_DATASOURCE_ADAPTER]: {\n                provide: TableDataSourceAdapter,\n                deps: [\n                    PIZZAGNA_EVENT_BUS,\n                    [new Optional(), DATA_SOURCE],\n                    PizzagnaService,\n                    VirtualViewportManager,\n                ],\n            },\n            [NOVA_TIMESERIES_DATASOURCE_ADAPTER]: {\n                provide: TimeseriesDataSourceAdapter,\n                deps: [\n                    PIZZAGNA_EVENT_BUS,\n                    [new Optional(), DATA_SOURCE],\n                    PizzagnaService,\n                ],\n            },\n            [NOVA_KPI_DATASOURCE_ADAPTER]: {\n                provide: KpiDataSourceAdapter,\n                deps: [\n                    PIZZAGNA_EVENT_BUS,\n                    [new Optional(), DATA_SOURCE],\n                    PizzagnaService,\n                    DecimalPipe,\n                ],\n            },\n            [NOVA_DRILLDOWN_DATASOURCE_ADAPTER]: {\n                provide: DrilldownDataSourceAdapter,\n                deps: [\n                    PIZZAGNA_EVENT_BUS,\n                    [new Optional(), DATA_SOURCE],\n                    PizzagnaService,\n                ],\n            },\n            [NOVA_KPI_COLOR_PRIORITIZER]: {\n                provide: KpiColorPrioritizer,\n                deps: [\n                    [new Optional(), DATA_SOURCE],\n                    PizzagnaService,\n                    KpiColorComparatorsRegistryService,\n                ],\n            },\n            [NOVA_TITLE_AND_DESCRIPTION_CONVERTER]: {\n                provide: CONFIGURATOR_CONVERTER,\n                useClass: TitleAndDescriptionConverterService,\n                deps: [PIZZAGNA_EVENT_BUS, PreviewService, PizzagnaService],\n            },\n            [NOVA_PROPORTIONAL_WIDGET_CHART_OPTIONS_CONVERTER]: {\n                provide: CONFIGURATOR_CONVERTER,\n                useClass: ProportionalWidgetChartOptionsConverterService,\n                deps: [PIZZAGNA_EVENT_BUS, PreviewService, PizzagnaService],\n            },\n            [NOVA_KPI_TILES_CONVERTER]: {\n                provide: CONFIGURATOR_CONVERTER,\n                useClass: KpiTilesConverterService,\n                deps: [PIZZAGNA_EVENT_BUS, PreviewService, PizzagnaService],\n            },\n            [NOVA_KPI_SECTION_CONVERTER]: {\n                provide: CONFIGURATOR_CONVERTER,\n                useClass: KpiSectionConverterService,\n                deps: [PIZZAGNA_EVENT_BUS, PreviewService, PizzagnaService],\n            },\n            [NOVA_GENERIC_CONVERTER]: {\n                provide: CONFIGURATOR_CONVERTER,\n                useClass: GenericConverterService,\n                deps: [PIZZAGNA_EVENT_BUS, PreviewService, PizzagnaService],\n            },\n            [NOVA_GENERIC_ARRAY_CONVERTER]: {\n                provide: CONFIGURATOR_CONVERTER,\n                useClass: GenericArrayConverterService,\n                deps: [PIZZAGNA_EVENT_BUS, PreviewService, PizzagnaService],\n            },\n            [NOVA_TIMESERIES_TILE_INDICATOR_DATA_CONVERTER]: {\n                provide: CONFIGURATOR_CONVERTER,\n                useClass: TimeseriesTileIndicatorDataConverterService,\n                deps: [\n                    PIZZAGNA_EVENT_BUS,\n                    PreviewService,\n                    PizzagnaService,\n                    TimeframeService,\n                ],\n            },\n            [NOVA_TIMESERIES_METADATA_CONVERTER]: {\n                provide: CONFIGURATOR_CONVERTER,\n                useClass: TimeseriesMetadataConverterService,\n                deps: [\n                    PIZZAGNA_EVENT_BUS,\n                    PreviewService,\n                    PizzagnaService,\n                    TimeframeService,\n                ],\n            },\n            [NOVA_TIMESERIES_SERIES_CONVERTER]: {\n                provide: CONFIGURATOR_CONVERTER,\n                useClass: TimeseriesSeriesConverterService,\n                deps: [PIZZAGNA_EVENT_BUS, PreviewService, PizzagnaService],\n            },\n            [NOVA_TABLE_COLUMNS_CONVERTER]: {\n                provide: CONFIGURATOR_CONVERTER,\n                useClass: TableColumnsConverterService,\n                deps: [PIZZAGNA_EVENT_BUS, PreviewService, PizzagnaService],\n            },\n            [NOVA_TABLE_FILTERS_CONVERTER]: {\n                provide: CONFIGURATOR_CONVERTER,\n                useClass: TableFiltersConverterService,\n                deps: [PIZZAGNA_EVENT_BUS, PreviewService, PizzagnaService],\n            },\n            [NOVA_TABLE_SCROLL_TYPE_CONVERTER]: {\n                provide: CONFIGURATOR_CONVERTER,\n                useClass: TableScrollTypeConverterService,\n                deps: [PIZZAGNA_EVENT_BUS, PreviewService, PizzagnaService],\n            },\n            [NOVA_LOADING_ADAPTER]: {\n                provide: LoadingAdapter,\n                deps: [PIZZAGNA_EVENT_BUS, PizzagnaService],\n            },\n            [NOVA_STATUS_CONTENT_FALLBACK_ADAPTER]: {\n                provide: StatusContentFallbackAdapter,\n                deps: [PIZZAGNA_EVENT_BUS, PizzagnaService],\n            },\n            [NOVA_KPI_STATUS_CONTENT_FALLBACK_ADAPTER]: {\n                provide: KpiStatusContentFallbackAdapter,\n                deps: [PIZZAGNA_EVENT_BUS, PizzagnaService],\n            },\n            [NOVA_KPI_SCALE_SYNC_BROKER]: {\n                provide: KpiScaleSyncBroker,\n                deps: [PIZZAGNA_EVENT_BUS, PizzagnaService],\n            },\n            [NOVA_URL_INTERACTION_HANDLER]: {\n                provide: UrlInteractionHandler,\n                deps: [\n                    PIZZAGNA_EVENT_BUS,\n                    \"windowObject\",\n                    LoggerService,\n                    UrlInteractionService,\n                ],\n            },\n            [NOVA_EVENT_BUS_DEBUGGER]: {\n                provide: EventBusDebugger,\n                deps: [PIZZAGNA_EVENT_BUS],\n            },\n            [NOVA_VIRTUAL_VIEWPORT_MANAGER]: {\n                provide: VirtualViewportManager,\n                deps: [],\n            },\n            [NOVA_PIZZAGNA_BROADCASTER]: {\n                provide: PizzagnaBroadcasterService,\n                deps: [PizzagnaService],\n            },\n            [NOVA_TABLE_FORMATTERS_REGISTRY]: {\n                provide: FORMATTERS_REGISTRY,\n                useExisting: TableFormatterRegistryService,\n                deps: [PizzagnaService],\n            },\n            [NOVA_KPI_FORMATTERS_REGISTRY]: {\n                provide: FORMATTERS_REGISTRY,\n                useExisting: KpiFormattersRegistryService,\n                deps: [PizzagnaService],\n            },\n            [NOVA_RISK_SCORE_FORMATTERS_REGISTRY]: {\n                provide: FORMATTERS_REGISTRY,\n                useExisting: RiskScoreFormattersRegistryService,\n                deps: [PizzagnaService],\n            },\n            [NOVA_PROPORTIONAL_CONTENT_FORMATTERS_REGISTRY]: {\n                provide: FORMATTERS_REGISTRY,\n                useExisting: ProportionalDonutContentFormattersRegistryService,\n                deps: [PizzagnaService],\n            },\n            [NOVA_CONFIGURATOR_DATA_SOURCE_MANAGER]: {\n                provide: ConfiguratorDataSourceManagerService,\n                deps: [PIZZAGNA_EVENT_BUS, [new Optional(), DashwizService]],\n            },\n        });\n    }\n\n    public setProviders(providers: IStaticProviders): void {\n        this.staticProviders = Object.assign(\n            {},\n            this.staticProviders,\n            providers\n        );\n    }\n\n    public getProvider(providerId: string): StaticProvider {\n        const provider = this.staticProviders[providerId];\n        if (!provider) {\n            this.logger.warn(\"No provider registered for id\", providerId);\n            this.logger.warn(\n                \"Known providers:\",\n                Object.keys(this.staticProviders).join(\", \")\n            );\n        }\n        return provider;\n    }\n\n    public getProviderInstance(\n        provider: StaticProvider,\n        parentInjector: Injector\n    ): any {\n        const injector = Injector.create({\n            providers: [provider],\n            parent: parentInjector,\n        });\n        return injector.get(DATA_SOURCE);\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable, Type } from \"@angular/core\";\n\nimport { LoggerService } from \"@nova-ui/bits\";\n\n// Extending with Type<any> to be compatible with EntryComponents type\nexport interface IComponentWithLateLoadKey extends Type<any> {\n    lateLoadKey: string;\n}\n\n@Injectable({\n    providedIn: \"root\",\n})\nexport class ComponentRegistryService {\n    private components: Record<string, any> = {};\n\n    constructor(private logger: LoggerService) {}\n\n    public registerByLateLoadKey(component: IComponentWithLateLoadKey): void {\n        this.registerComponentType(component.lateLoadKey, component);\n    }\n\n    public registerComponentType(key: string, component: any): void {\n        this.components[key] = component;\n    }\n\n    public getComponentType(key: string): any {\n        const component = this.components[key];\n\n        if (!component) {\n            this.logger.warn(\n                \"Component '\" +\n                    key +\n                    \"' not defined. Available components: \" +\n                    JSON.stringify(Object.keys(this.components))\n            );\n        }\n\n        return component;\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Component } from \"@angular/core\";\n\n/** @ignore */\n@Component({\n    template: `<code>\n        <pre>Template load error!</pre>\n    </code>`,\n    standalone: false,\n})\nexport class TemplateLoadErrorComponent {\n    static lateLoadKey = \"TemplateLoadErrorComponent\";\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { ComponentPortal } from \"@angular/cdk/portal\";\nimport { Injectable, Injector } from \"@angular/core\";\n\nimport { LoggerService } from \"@nova-ui/bits\";\n\nimport { ComponentRegistryService } from \"./component-registry.service\";\nimport { TemplateLoadErrorComponent } from \"../../components/template-load-error/template-load-error.component\";\nimport { IPortalEnvironment } from \"../../types\";\n\n/** @ignore */\n@Injectable({\n    providedIn: \"root\",\n})\nexport class ComponentPortalService {\n    constructor(\n        private componentRegistry: ComponentRegistryService,\n        private logger: LoggerService\n    ) {}\n\n    public createComponentPortal(\n        componentType: string | Function,\n        injector: Injector | null\n    ): ComponentPortal<any> {\n        let loadType: any;\n        if (typeof componentType === \"string\") {\n            loadType = this.componentRegistry.getComponentType(componentType);\n        } else {\n            loadType = componentType;\n        }\n\n        if (!loadType) {\n            this.logger.error(`Cannot Find Component Type ${componentType}`);\n            loadType = TemplateLoadErrorComponent;\n        }\n\n        return new ComponentPortal(loadType, null, injector);\n    }\n\n    public createInjector(environment: IPortalEnvironment): Injector {\n        const providers = environment.providers || [];\n        return Injector.create({\n            providers,\n            parent: environment.injector,\n            name: \"Component Injector\",\n        });\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Portal } from \"@angular/cdk/portal\";\nimport {\n    AfterViewInit,\n    ComponentRef,\n    Directive,\n    EventEmitter,\n    Injector,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    Renderer2,\n    SimpleChange,\n    SimpleChanges,\n    StaticProvider,\n} from \"@angular/core\";\nimport isArray from \"lodash/isArray\";\nimport values from \"lodash/values\";\nimport xor from \"lodash/xor\";\nimport { ReplaySubject, Subject, Subscription } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { IEvent, LoggerService } from \"@nova-ui/bits\";\n\nimport { ProviderRegistryService } from \"../../../services/provider-registry.service\";\nimport { IConfigurable, IProviderConfiguration } from \"../../../types\";\nimport { ComponentPortalService } from \"../../services/component-portal.service\";\n\n@Directive({\n    selector: \"[nuiComponentPortal]\",\n    exportAs: \"nuiComponentPortal\",\n    standalone: false,\n})\nexport class ComponentPortalDirective\n    implements OnInit, AfterViewInit, OnDestroy, OnChanges\n{\n    @Input() public componentId: string;\n    @Input() public componentType: string | Function;\n    @Input() public properties: Record<string, any>;\n    @Input() public providers: Record<string, IProviderConfiguration>;\n    @Input() public outputs: string[];\n\n    @Output() public output = new EventEmitter<IEvent>();\n\n    public portal: Portal<any>;\n    private component: any;\n    private propertiesChanges = new ReplaySubject<SimpleChange>();\n    private providerInstances: Record<string, any> = {};\n    private readonly destroy$ = new Subject<void>();\n    private changesSubscription?: Subscription;\n    private listenerUnsubscriber?: () => void;\n\n    constructor(\n        private injector: Injector,\n        private logger: LoggerService,\n        private portalService: ComponentPortalService,\n        private renderer: Renderer2,\n        private providerRegistry: ProviderRegistryService\n    ) {}\n\n    public ngOnInit(): void {\n        this.logger.debug(\"Portal created:\", this.componentId);\n        this.recreatePortal();\n    }\n\n    public ngAfterViewInit(): void {\n        Object.keys(this.providerInstances).forEach((key) => {\n            const provider = this.providerInstances[key];\n            if (provider.ngAfterViewInit) {\n                provider.ngAfterViewInit();\n            }\n        });\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        let recreated = false;\n        const providersChange = changes.providers;\n\n        if (providersChange && !providersChange.isFirstChange()) {\n            if (this.checkForProviderChanges(providersChange)) {\n                this.logger.debug(\n                    \"Portal recreated (provider change):\",\n                    this.componentId\n                );\n                this.recreatePortal();\n                recreated = true; // we want to prevent multiple recreations within one ngOnChanges cycle\n            } else {\n                this.updateProviderConfigurations(providersChange);\n            }\n        }\n\n        if (\n            changes.componentType &&\n            !changes.componentType.isFirstChange() &&\n            !recreated\n        ) {\n            this.logger.debug(\n                \"Portal recreated (component change):\",\n                this.componentId\n            );\n            this.recreatePortal();\n        }\n\n        if (changes.properties) {\n            this.propertiesChanges.next(changes.properties);\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.logger.debug(\"Portal destroyed:\", this.componentId);\n\n        this.destroyProviders();\n        this.listenerUnsubscriber?.();\n\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    public attached(componentRef: ComponentRef<any>): void {\n        this.component = componentRef.instance;\n\n        // ctrl+shift+click on a pizzagna to get a dump of its properties\n        // this will propagate through the parent components, so it should dump the parent pizzagnas as well\n        this.listenerUnsubscriber = this.renderer.listen(\n            componentRef.location.nativeElement,\n            \"click\",\n            (event: MouseEvent) => {\n                // event.metaKey is a CMD key for Mac\n                if (\n                    (event.ctrlKey || event.metaKey) &&\n                    event.shiftKey &&\n                    event.button === 0\n                ) {\n                    console.log(\n                        \"==================== PIZZAGNA DUMP =========================\"\n                    );\n                    console.log(\"componentId:\", this.componentId);\n                    console.log(\"component:\", this.component);\n                    console.log(\"componentType:\", this.componentType);\n                    console.log(\"properties:\", this.properties);\n                    console.log(\"providers:\", this.providers);\n                    console.log(\"providerInstances:\", this.providerInstances);\n                    console.log(\n                        \"============================================================\"\n                    );\n                }\n            }\n        );\n\n        for (const key of Object.keys(this.providerInstances)) {\n            const provider = this.providerInstances[key];\n            if (provider.setComponent) {\n                // setting componentId separately because \"componentId\" is used as another input,\n                // at the moment of setting the component here, 'this.component' doesn't have 'componentId' property,\n                // because 'changesSubscription' has not received any changes. it leads to the issue\n                // when providers do not know the ID until component property changed\n                provider.setComponent(this.component, this.componentId);\n            }\n            if (provider.setProviders) {\n                provider.setProviders(this.providerInstances, this.componentId);\n            }\n        }\n\n        this.subscribeToOutputs();\n\n        this.changesSubscription = this.propertiesChanges\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((change) => this.applyPropertiesChange(change));\n    }\n\n    private recreatePortal() {\n        if (this.changesSubscription) {\n            this.changesSubscription.unsubscribe();\n            this.changesSubscription = undefined;\n            this.propertiesChanges = new ReplaySubject<SimpleChange>();\n        }\n\n        let injector = this.injector;\n\n        this.destroyProviders();\n\n        if (this.providers) {\n            injector = this.updateProviders(injector);\n        }\n\n        this.portal = this.portalService.createComponentPortal(\n            this.componentType,\n            injector\n        );\n\n        // apply initial property values to the freshly (re)created component\n        if (this.properties) {\n            // eslint-disable-next-line @typescript-eslint/no-unused-vars\n            for (const key of Object.keys(this.properties)) {\n                this.propertiesChanges.next(\n                    new SimpleChange(undefined, this.properties, true)\n                );\n            }\n        }\n    }\n\n    private updateProviders(injector: Injector) {\n        const providerKeys = Object.keys(this.providers);\n        const registeredProviders = providerKeys.reduce((acc, next) => {\n            // for cases when providerId is just empty string, null or undefined (for example adding a tile doesn't provide a DS to it)\n            if (this.providers[next].providerId) {\n                acc[next] = this.providerRegistry.getProvider(\n                    this.providers[next].providerId\n                );\n            }\n            return acc;\n        }, {} as Record<string, StaticProvider>);\n\n        const portalInjector = this.portalService.createInjector({\n            injector: injector,\n            providers: values(registeredProviders),\n        });\n\n        this.providerInstances = providerKeys.reduce((acc, next) => {\n            const registeredProvider = registeredProviders[next] as any;\n            const providerConfig = this.providers[next];\n            if (registeredProvider) {\n                // TODO: Why do we pass null to the injectFlags parameter?\n                // TODO: How to retrieve info about the provider options to inject?InjectOptions\n                const injections = portalInjector.get(\n                    registeredProvider.provide,\n                    null\n                );\n                const providerInstance = isArray(injections)\n                    ? (injections as any).find(\n                          (v: any) => v instanceof registeredProvider.useClass\n                      )\n                    : injections;\n\n                if (!providerInstance) {\n                    throw new Error(\"Provider '\" + next + \"' does not exist.\");\n                }\n                if (\n                    providerInstance.updateConfiguration &&\n                    providerConfig.properties\n                ) {\n                    providerInstance.updateConfiguration({\n                        providerKey: next,\n                        ...(providerConfig.properties || {}),\n                    });\n                }\n                providerInstance.providerKey = next;\n\n                acc[next] = providerInstance;\n            } else if (providerConfig.providerId) {\n                this.logger.error(\n                    \"There's no registered provider for id\",\n                    next\n                );\n            }\n            return acc;\n        }, this.providerInstances);\n\n        for (const key of Object.keys(this.providerInstances)) {\n            const pi = this.providerInstances[key];\n            if (pi.ngOnInit) {\n                pi.ngOnInit();\n            }\n        }\n\n        return portalInjector;\n    }\n\n    private updateProviderConfigurations(providersChange: SimpleChange) {\n        for (const providerKey of Object.keys(this.providers)) {\n            // for cases when providerId is just empty string, null or undefined (for example adding a tile doesn't provide a DS to it)\n            if (!this.providers[providerKey].providerId) {\n                return;\n            }\n            const providerInstance = this.providerInstances[providerKey];\n            if (!providerInstance) {\n                throw new Error(\n                    \"Provider '\" + providerKey + \"' does not exist.\"\n                );\n            }\n\n            const previousValue = providersChange.previousValue[providerKey];\n            const currentValue = providersChange.currentValue[providerKey];\n\n            const previousProperties =\n                previousValue && previousValue.properties;\n            const currentProperties = currentValue && currentValue.properties;\n\n            if (\n                previousProperties !== currentProperties &&\n                providerInstance.updateConfiguration\n            ) {\n                (providerInstance as IConfigurable).updateConfiguration({\n                    providerKey,\n                    ...currentProperties,\n                });\n            }\n        }\n    }\n\n    private subscribeToOutputs() {\n        if (!this.outputs) {\n            return;\n        }\n\n        for (const output of this.outputs.filter(\n            (o) => this.component[o] instanceof EventEmitter\n        )) {\n            this.component[output]\n                .pipe(takeUntil(this.destroy$))\n                .subscribe(($event: any) => {\n                    this.output.emit({\n                        id: output,\n                        payload: $event,\n                    });\n                });\n        }\n    }\n\n    private checkForProviderChanges(change: SimpleChange): boolean {\n        const previousKeys = change.previousValue\n            ? Object.keys(change.previousValue)\n            : [];\n        const currentKeys = change.currentValue\n            ? Object.keys(change.currentValue)\n            : [];\n        if (\n            previousKeys.length !== currentKeys.length ||\n            xor(previousKeys, currentKeys).length > 0\n        ) {\n            return true;\n        }\n\n        const previousIds = Object.keys(change.previousValue).map(\n            (key: string) => change.previousValue[key].providerId\n        );\n        const currentIds = Object.keys(change.currentValue).map(\n            (key: string) => change.currentValue[key].providerId\n        );\n        if (xor(previousIds, currentIds).length > 0) {\n            return true;\n        }\n\n        return false;\n    }\n\n    private destroyProviders() {\n        if (this.providerInstances) {\n            for (const piKey of Object.keys(this.providerInstances)) {\n                const providerInstance = this.providerInstances[piKey];\n                if (providerInstance.ngOnDestroy) {\n                    providerInstance.ngOnDestroy();\n                }\n                delete this.providerInstances[piKey];\n            }\n        }\n    }\n\n    /**\n     * There was a change in component properties, so we need to handle that here\n     *\n     * @param change a change of the `properties` input\n     */\n    private applyPropertiesChange(change: SimpleChange) {\n        let properties = change.currentValue;\n        if (!properties) {\n            return;\n        }\n\n        // we add componentId to the mix, so components will be able to use it\n        properties = {\n            ...properties,\n            componentId: this.componentId,\n        };\n\n        const changes: SimpleChanges = {};\n        let changeHappened = false;\n        for (const key of Object.keys(properties)) {\n            const previousValue = this.component[key];\n\n            // reference based change detection in action here!\n            if (properties[key] !== previousValue) {\n                changeHappened = true;\n                this.component[key] = properties[key];\n                // we're simulating angular by calling ngOnChanges manually\n                if (this.component.ngOnChanges) {\n                    changes[key] = new SimpleChange(\n                        previousValue,\n                        properties[key],\n                        change.isFirstChange()\n                    );\n                }\n            }\n        }\n\n        if (changeHappened) {\n            if (this.component.ngOnChanges) {\n                this.component.ngOnChanges(changes);\n            }\n            const changeDetector = this.component.changeDetector;\n            if (changeDetector) {\n                changeDetector.markForCheck();\n            } else {\n                this.logger.warn(\n                    `Property 'changeDetector' is missing on component '${this.componentType}',` +\n                        ` so dynamic refresh of given component might not work.`\n                );\n            }\n        }\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    Component,\n    EventEmitter,\n    Inject,\n    Input,\n    OnChanges,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\n\nimport { EventBus, IEvent, immutableSet, LoggerService } from \"@nova-ui/bits\";\n\nimport { mergeChanges } from \"../../../functions/merge-changes\";\nimport {\n    DEFAULT_PIZZAGNA_ROOT,\n    ISetPropertyPayload,\n    SET_PROPERTY_VALUE,\n} from \"../../../services/types\";\nimport {\n    IComponentConfiguration,\n    IPizza,\n    IPizzagna,\n    PizzagnaLayer,\n    PIZZAGNA_EVENT_BUS,\n} from \"../../../types\";\nimport { DynamicComponentCreator } from \"../../services/dynamic-component-creator.service\";\nimport { PizzagnaService } from \"../../services/pizzagna.service\";\n\n@Component({\n    selector: \"nui-pizzagna\",\n    templateUrl: \"./pizzagna.component.html\",\n    providers: [\n        PizzagnaService,\n        DynamicComponentCreator,\n        {\n            provide: PIZZAGNA_EVENT_BUS,\n            useClass: EventBus,\n        },\n    ],\n    standalone: false,\n})\nexport class PizzagnaComponent implements OnChanges {\n    @Input() rootNode = DEFAULT_PIZZAGNA_ROOT;\n\n    @Input()\n    get pizzagna(): IPizzagna {\n        return this._pizzagnaBuffer || this._pizzagna;\n    }\n\n    set pizzagna(value: IPizzagna) {\n        this._pizzagna = value;\n        this._pizzagnaBuffer = null;\n    }\n\n    private _pizzagna: IPizzagna;\n    private _pizzagnaBuffer: IPizzagna | null;\n\n    @Input() outputs: string[];\n\n    @Output() pizzagnaChange = new EventEmitter<IPizzagna>();\n    @Output() output = new EventEmitter<IEvent>();\n\n    public pizza: Record<string, IComponentConfiguration>;\n\n    constructor(\n        public pizzagnaService: PizzagnaService,\n        public logger: LoggerService,\n        @Inject(PIZZAGNA_EVENT_BUS) public eventBus: EventBus<IEvent>\n    ) {\n        eventBus\n            .getStream(SET_PROPERTY_VALUE)\n            .subscribe((event: IEvent<ISetPropertyPayload>) => {\n                // TODO: Ensure that payload is defined\n                const p = immutableSet(\n                    this.pizzagna,\n                    // @ts-ignore: Object is possibly 'undefined'.\n                    event.payload.path,\n                    // @ts-ignore: Object is possibly 'undefined'.\n                    event.payload.value\n                );\n\n                this._pizzagnaBuffer = p;\n                this.pizzagnaChange.emit(p);\n            });\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.pizzagna) {\n            const previousPizzagna = changes.pizzagna\n                .previousValue as IPizzagna;\n\n            this.pizzagnaService.updatePizzagna(this.pizzagna);\n\n            this.pizza = this.mergePizzagnaIntoPizza(\n                this.pizza,\n                previousPizzagna,\n                this.pizzagna\n            );\n            if (this.pizza && !this.pizza[this.rootNode]) {\n                this.logger.warn(\n                    \"Pizzagna doesn't contain root node '\" +\n                        this.rootNode +\n                        \"'. Pizzagna = \",\n                    this.pizzagna\n                );\n            }\n            this.pizzagnaService.updateComponents(this.pizza);\n        }\n    }\n\n    public onOutput(event: IEvent): void {\n        this.output.emit(event);\n    }\n\n    /**\n     * This takes all the pizzagna layers and merges them into one component pizza\n     *\n     * @param pizza\n     * @param previousPizzagna\n     * @param currentPizzagna\n     */\n    private mergePizzagnaIntoPizza(\n        pizza: IPizza,\n        previousPizzagna: IPizzagna,\n        currentPizzagna: IPizzagna\n    ) {\n        return mergeChanges(\n            pizza,\n            // These are merged in reverse priority order so that values in higher priority layers\n            // override the corresponding values in lower priority layers\n            this.getLayerChanges(\n                previousPizzagna,\n                currentPizzagna,\n                PizzagnaLayer.Structure\n            ),\n            this.getLayerChanges(\n                previousPizzagna,\n                currentPizzagna,\n                PizzagnaLayer.Configuration\n            ),\n            this.getLayerChanges(\n                previousPizzagna,\n                currentPizzagna,\n                PizzagnaLayer.Data\n            )\n        ) as Record<string, IComponentConfiguration>;\n    }\n\n    private getLayerChanges(\n        previous: IPizzagna,\n        current: IPizzagna,\n        overlayKey: string\n    ) {\n        return {\n            previousValue: this.getLayerSafe(previous, overlayKey),\n            currentValue: this.getLayerSafe(current, overlayKey),\n        };\n    }\n\n    private getLayerSafe(pizzagna: IPizzagna, overlayKey: string) {\n        return pizzagna && pizzagna[overlayKey];\n    }\n}\n","<ng-container *ngIf=\"pizza && pizza[rootNode]\">\n    <ng-container\n        nuiComponentPortal\n        [componentId]=\"rootNode\"\n        [componentType]=\"pizza[rootNode]?.componentType\"\n        [properties]=\"pizza[rootNode]?.properties\"\n        [providers]=\"pizza[rootNode]?.providers\"\n        [outputs]=\"outputs\"\n        (output)=\"onOutput($event)\"\n        #componentPortal=\"nuiComponentPortal\"\n    >\n        <ng-template\n            [cdkPortalOutlet]=\"componentPortal.portal\"\n            (attached)=\"componentPortal.attached($event)\"\n        ></ng-template>\n    </ng-container>\n</ng-container>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\n\nimport { IWidget } from \"./types\";\nimport { DEFAULT_PIZZAGNA_ROOT } from \"../../services/types\";\nimport { WidgetConfigurationService } from \"../../services/widget-configuration.service\";\nimport { WidgetTypesService } from \"../../services/widget-types.service\";\nimport { IPizzagna } from \"../../types\";\n\n@Component({\n    selector: \"nui-widget\",\n    templateUrl: \"./widget.component.html\",\n    styleUrls: [\"./widget.component.less\"],\n    providers: [WidgetConfigurationService],\n    host: { class: \"nui-widget\" },\n    standalone: false,\n})\nexport class WidgetComponent implements OnChanges {\n    @Input() widget: IWidget;\n    @Output() widgetChange = new EventEmitter<IWidget>();\n\n    public rootNode = DEFAULT_PIZZAGNA_ROOT;\n\n    constructor(\n        private widgetConfigurationService: WidgetConfigurationService,\n        private widgetTypesService: WidgetTypesService\n    ) {}\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.widget) {\n            const type = this.widget.type;\n            const previousType =\n                changes.widget.previousValue &&\n                changes.widget.previousValue.type;\n            if (previousType !== type) {\n                const widgetType = this.widgetTypesService.getWidgetType(\n                    type,\n                    this.widget.version\n                );\n                this.rootNode =\n                    widgetType?.paths?.widget?.root || DEFAULT_PIZZAGNA_ROOT;\n            }\n            this.widgetConfigurationService.updateWidget(this.widget);\n        }\n    }\n\n    public onPizzagnaChange(pizzagna: IPizzagna): void {\n        this.widgetChange.emit({\n            ...this.widget,\n            pizzagna: pizzagna,\n        });\n    }\n}\n","<nui-pizzagna\n    [rootNode]=\"rootNode\"\n    [pizzagna]=\"widget.pizzagna\"\n    (pizzagnaChange)=\"onPizzagnaChange($event)\"\n></nui-pizzagna>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { KeyValue } from \"@angular/common\";\nimport {\n    AfterViewInit,\n    Component,\n    EventEmitter,\n    HostBinding,\n    Inject,\n    Input,\n    OnChanges,\n    Output,\n    QueryList,\n    SimpleChanges,\n    ViewChild,\n    ViewChildren,\n    ViewEncapsulation,\n} from \"@angular/core\";\nimport {\n    GridsterComponent,\n    GridsterConfig,\n    GridsterItem,\n    GridsterItemComponent,\n    GridsterItemComponentInterface,\n} from \"angular-gridster2\";\nimport _defaultsDeep from \"lodash/defaultsDeep\";\n\nimport { EventBus, immutableSet } from \"@nova-ui/bits\";\n\nimport { DEFAULT_GRIDSTER_CONFIG } from \"./default-gridster-config\";\nimport { IDashboard, IDashboardBelowFoldLazyLoadingConfig } from \"./types\";\nimport {\n    DASHBOARD_EDIT_MODE,\n    WIDGET_POSITION_CHANGE,\n    WIDGET_RESIZE,\n} from \"../../services/types\";\nimport { IWidgetEvent } from \"../../services/widget-to-dashboard-event-proxy.service\";\nimport { DASHBOARD_EVENT_BUS } from \"../../types\";\nimport { IWidget } from \"../widget/types\";\n\n@Component({\n    selector: \"nui-dashboard\",\n    templateUrl: \"./dashboard.component.html\",\n    styleUrls: [\"./dashboard.component.less\"],\n    encapsulation: ViewEncapsulation.None,\n    providers: [\n        {\n            provide: DASHBOARD_EVENT_BUS,\n            useClass: EventBus,\n        },\n    ],\n    standalone: false,\n})\nexport class DashboardComponent implements OnChanges, AfterViewInit {\n    @Input() gridsterConfig: GridsterConfig;\n\n    @Input()\n    get dashboard(): IDashboard {\n        return this.dashboardBuffer || this._dashboard;\n    }\n\n    set dashboard(value: IDashboard) {\n        this._dashboard = value;\n        this.dashboardBuffer = null;\n    }\n\n    private _dashboard: IDashboard;\n    // we use this buffer to store temporary values when cumulative changes are necessary before two-way binding kicks in\n    public dashboardBuffer: IDashboard | null;\n\n    @Input() editMode = false;\n    @Input()\n    public belowFoldLazyLoadingConfig: IDashboardBelowFoldLazyLoadingConfig;\n\n    @Output() gridsterConfigChange = new EventEmitter<GridsterConfig>();\n    @Output() dashboardChange = new EventEmitter<IDashboard>();\n\n    @HostBinding(\"class.nui-dashboard\")\n    get hostClass(): boolean {\n        return true;\n    }\n\n    @ViewChild(GridsterComponent)\n    public gridster: GridsterComponent;\n\n    @ViewChildren(GridsterItemComponent)\n    public gridsterItems: QueryList<GridsterItemComponent>;\n\n    public gridsterItemsVisibilityMap: Record<string, boolean> = {};\n\n    constructor(\n        @Inject(DASHBOARD_EVENT_BUS)\n        public readonly eventBus: EventBus<IWidgetEvent>\n    ) {}\n\n    public ngAfterViewInit(): void {\n        // need to wait till DOM is rendered because of \"getBoundingClientRect\" under the hood\n        setTimeout(() => this.calculateWidgetsVisibility());\n    }\n\n    public onGridsterScroll(): void {\n        this.calculateWidgetsVisibility();\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.gridsterConfig) {\n            if (changes.gridsterConfig.isFirstChange()) {\n                const gridsterConfig = _defaultsDeep(\n                    this.gridsterConfig || {},\n                    DEFAULT_GRIDSTER_CONFIG\n                );\n\n                this.hookEvent(\n                    gridsterConfig,\n                    \"itemChangeCallback\",\n                    this.updateWidgetPosition\n                );\n                this.hookEvent(\n                    gridsterConfig,\n                    \"itemResizeCallback\",\n                    this.emitWidgetResize\n                );\n\n                this.gridsterConfigChange.emit(gridsterConfig);\n            }\n\n            if (this.gridsterConfig?.api) {\n                this.gridsterConfig.api.optionsChanged?.();\n            }\n        }\n\n        if (changes.editMode) {\n            if (!this.gridsterConfig.resizable) {\n                throw new Error(`Gridster's resizable prop is undefined`);\n            }\n            this.gridsterConfig.resizable.enabled = this.editMode;\n\n            if (!this.gridsterConfig.draggable) {\n                throw new Error(`Gridster's draggable prop is undefined`);\n            }\n            this.gridsterConfig.draggable.enabled = this.editMode;\n\n            this.gridsterConfigChange.emit(\n                Object.assign({}, this.gridsterConfig)\n            );\n\n            this.eventBus\n                .getStream(DASHBOARD_EDIT_MODE)\n                .next({ payload: this.editMode });\n        }\n\n        // TODO: position doesn't update on external change of position\n        // if (!changes.dashboard.isFirstChange() &&\n        //     changes.dashboard.currentValue.positions !== changes.dashboard.previousValue.positions) {\n        //     if (this.gridsterConfig.api) {\n        //         this.gridsterConfig.api.optionsChanged();\n        //     }\n        // }\n    }\n\n    public orderWidgets = (\n        a: KeyValue<string, IWidget>,\n        b: KeyValue<string, IWidget>\n    ): number => {\n        const nextWidget = this.dashboard.positions[a.key];\n        const currentWidget = this.dashboard.positions[b.key];\n\n        return nextWidget.y - currentWidget.y || nextWidget.x - currentWidget.x;\n    };\n\n    public trackByFn = (\n        index: number,\n        item: KeyValue<string, IWidget>\n    ): string => item.key;\n\n    public onWidgetChange(widget: IWidget): void {\n        // this could happen when changes are being made on a widget that is being removed\n        if (!this.dashboard.widgets[widget.id]) {\n            return;\n        }\n        this.updateWidget(widget);\n    }\n\n    public updateWidget(widget: IWidget): void {\n        let dashboard: IDashboard = this.dashboard;\n        if (!this.dashboard.positions[widget.id] && this.gridsterConfig?.api) {\n            const gridsterItem =\n                this.gridsterConfig.api.getFirstPossiblePosition?.({\n                    x: 0,\n                    y: 0,\n                    rows: this.gridsterConfig?.defaultItemRows as number,\n                    cols: this.gridsterConfig?.defaultItemCols as number,\n                });\n            dashboard = immutableSet(\n                dashboard,\n                `positions.${widget.id}`,\n                gridsterItem\n            );\n        }\n\n        dashboard = immutableSet(dashboard, `widgets.${widget.id}`, widget);\n        this.dashboardBuffer = dashboard;\n        this.dashboardChange.emit(dashboard);\n    }\n\n    public removeWidget(widgetId: string, removePosition = true): void {\n        let dashboard: IDashboard = this.dashboard;\n        if (!dashboard.widgets[widgetId]) {\n            return;\n        }\n\n        const widgetsClone = Object.assign({}, dashboard.widgets);\n        delete widgetsClone[widgetId];\n        dashboard = immutableSet(dashboard, \"widgets\", widgetsClone);\n\n        if (removePosition) {\n            const positionsClone = Object.assign({}, dashboard.positions);\n            delete positionsClone[widgetId];\n            dashboard = immutableSet(dashboard, \"positions\", positionsClone);\n        }\n\n        this.dashboardChange.emit(dashboard);\n    }\n\n    public shouldWidgetRender(key: string): boolean {\n        return this.belowFoldLazyLoadingConfig?.enabled\n            ? this.gridsterItemsVisibilityMap[key]\n            : true;\n    }\n\n    private updateWidgetPosition = (\n        item: GridsterItem,\n        itemComponent: GridsterItemComponentInterface\n    ): void => {\n        const widgetId = String((itemComponent as any).widgetId);\n        const dashboard = immutableSet(\n            this.dashboard,\n            \"positions.\" + widgetId,\n            item\n        );\n\n        this.dashboardChange.emit(dashboard);\n\n        this.eventBus.getStream(WIDGET_POSITION_CHANGE).next({\n            widgetId,\n            payload: item,\n        });\n    };\n\n    private emitWidgetResize = (\n        item: GridsterItem,\n        itemComponent: GridsterItemComponentInterface\n    ): void => {\n        const widgetId = (itemComponent as any).widgetId;\n\n        this.eventBus.getStream(WIDGET_RESIZE).next({\n            widgetId,\n            payload: {\n                widgetId,\n                height: itemComponent.height,\n                width: itemComponent.width,\n            },\n        });\n    };\n\n    private hookEvent(\n        options: GridsterConfig,\n        eventName: string,\n        invoke: (\n            item: GridsterItem,\n            itemComponent: GridsterItemComponentInterface\n        ) => void\n    ) {\n        const prevEvent = options[eventName];\n        options[eventName] = (\n            item: GridsterItem,\n            itemComponent: GridsterItemComponentInterface\n        ) => {\n            invoke(item, itemComponent);\n\n            if (prevEvent) {\n                prevEvent(item, itemComponent);\n            }\n        };\n    }\n\n    private calculateWidgetsVisibility(): void {\n        if (!this.belowFoldLazyLoadingConfig?.enabled) {\n            return;\n        }\n\n        const gridsterRect: ClientRect =\n            this.gridster.el.getBoundingClientRect();\n\n        this.gridsterItemsVisibilityMap = this.gridsterItems.reduce(\n            (acc: Record<string, boolean>, next) => {\n                const { el } = next;\n                const idx: string = (next as any).widgetId;\n\n                // if widget is already loaded don't hide it\n                if (\n                    !this.belowFoldLazyLoadingConfig.configuration\n                        ?.reloadWidgetsOnScroll\n                ) {\n                    const prevVisibility = acc[idx];\n                    if (prevVisibility) {\n                        return acc;\n                    }\n                }\n\n                const rect: ClientRect = el.getBoundingClientRect();\n\n                const getHeightVisibility = () =>\n                    (rect.top > gridsterRect.top &&\n                        rect.top < gridsterRect.bottom) ||\n                    (rect.bottom > gridsterRect.top &&\n                        rect.bottom < gridsterRect.bottom);\n\n                const getWidthVisibility = () =>\n                    (rect.left > gridsterRect.left &&\n                        rect.left < gridsterRect.right) ||\n                    (rect.right > gridsterRect.left &&\n                        rect.right < gridsterRect.right);\n\n                const isVisible = getHeightVisibility() && getWidthVisibility();\n\n                acc[idx] = isVisible;\n\n                return acc;\n            },\n            this.gridsterItemsVisibilityMap\n        );\n    }\n}\n","<gridster\n    class=\"nui-dashboard__gridster\"\n    [options]=\"gridsterConfig\"\n    (scroll)=\"onGridsterScroll()\"\n>\n    <gridster-item\n        *ngFor=\"\n            let widget of dashboard.widgets | keyvalue : orderWidgets;\n            trackBy: trackByFn\n        \"\n        [item]=\"dashboard.positions[widget.key]\"\n        class=\"nui-dashboard__gridster-item\"\n        [nuiGridsterItemWidgetId]=\"widget.key\"\n    >\n        <nui-widget\n            *ngIf=\"shouldWidgetRender(widget.key); else emptyWidgetTpl\"\n            [widget]=\"widget.value\"\n            (widgetChange)=\"onWidgetChange($event)\"\n            [attr.widget-id]=\"widget.key\"\n            [attr.widget-type]=\"widget.value.type\"\n            [attr.widget-guid]=\"widget.value.uniqueKey\"\n            class=\"w-100 h-100 d-block\"\n        >\n        </nui-widget>\n    </gridster-item>\n</gridster>\n\n<ng-template #emptyWidgetTpl>\n    <div class=\"w-100 h-100 d-block\">\n        <nui-loading [active]=\"true\"></nui-loading>\n    </div>\n</ng-template>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { IDataField, TableAlignmentOptions } from \"@nova-ui/bits\";\n\nimport { IFormatterData } from \"../configurator/components/formatters/types\";\nimport { IProperties } from \"../types\";\nexport interface IFormatterProperties extends IProperties {\n    dataFieldIds?: IFormatterData;\n}\n\nexport interface IFormatter {\n    componentType: string;\n    properties: IFormatterProperties;\n}\n\nexport interface IFormatterConfigurator {\n    formatter?: IFormatter;\n    formatterDefinition: IFormatterDefinition;\n    dataFields: IDataField[];\n}\n\nexport interface IFormatterDefinitionProperties {\n    /** CSS class to be applied to the formatter host element */\n    elementClass?: string;\n}\n\nexport interface IFormatterDefinition {\n    componentType: string;\n    label: string;\n    /**\n     * The formatter's compatible data types.\n     */\n    dataTypes: Record<string, string | string[]>;\n    /**\n     * Component used to configure values for formatter.\n     */\n    configurationComponent?: string;\n    properties?: IFormatterDefinitionProperties;\n}\n\nexport interface ITableFormatterDefinition extends IFormatterDefinition {\n    alignment?: TableAlignmentOptions;\n}\n\nexport interface IInfoMessage {\n    componentType: string;\n    properties: IInfoMessageProperties;\n}\n\nexport interface IInfoMessageProperties {\n    generalText: string;\n    emphasizeText?: string;\n    link?: ILinkDefinition;\n    allowDismiss?: boolean;\n}\n\nexport interface ILinkDefinition {\n    href: string;\n    target: string;\n    text: string;\n}\n\nexport enum EmbeddedContentMode {\n    URL,\n    HTML,\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { DOCUMENT } from \"@angular/common\";\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    HostBinding,\n    Inject,\n    Input,\n    OnChanges,\n    OnInit,\n    SecurityContext,\n    SimpleChanges,\n    ViewChild,\n} from \"@angular/core\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\n\nimport { IHasChangeDetector } from \"../../types\";\nimport { EmbeddedContentMode } from \"../types\";\n\n/* @dynamic */\n@Component({\n    selector: \"nui-embedded-content\",\n    template: `<div style=\"width: 100%; height: 100%\" #anchor></div>`,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class EmbeddedContentComponent\n    implements IHasChangeDetector, OnInit, OnChanges\n{\n    public static lateLoadKey = \"EmbeddedContentComponent\";\n\n    @Input() public mode: EmbeddedContentMode;\n    @Input() public customEmbeddedContent: string;\n    @Input() public sanitized: boolean = true;\n\n    @Input() @HostBinding(\"class\") public elementClass = \"\";\n\n    @ViewChild(\"anchor\", { static: true }) anchor: ElementRef;\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        @Inject(DOCUMENT) private document: Document,\n        private domSanitizer: DomSanitizer\n    ) {}\n\n    public ngOnInit(): void {\n        this.validateAndApplyEmbeddedContent();\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (\n            changes.customEmbeddedContent &&\n            !changes.customEmbeddedContent.firstChange\n        ) {\n            this.validateAndApplyEmbeddedContent();\n        }\n    }\n\n    private validateAndApplyEmbeddedContent() {\n        const context =\n            this.sanitized &&\n            this.sanitizeContext(\n                this.mode === EmbeddedContentMode.URL\n                    ? SecurityContext.URL\n                    : SecurityContext.HTML\n            );\n\n        this.anchor.nativeElement.innerHTML = \"\";\n\n        if (this.mode === EmbeddedContentMode.URL) {\n            const iframe = this.document.createElement(\"iframe\");\n            iframe.src = (\n                this.sanitized ? context : this.customEmbeddedContent\n            ) as string;\n            iframe.width = \"100%\";\n            iframe.height = \"100%\";\n\n            this.anchor.nativeElement.appendChild(iframe);\n        } else {\n            this.anchor.nativeElement.innerHTML = this.sanitized\n                ? context\n                : this.customEmbeddedContent;\n        }\n    }\n\n    private sanitizeContext(\n        securityContextValue: SecurityContext\n    ): string | null {\n        return this.domSanitizer.sanitize(\n            securityContextValue,\n            this.customEmbeddedContent?.trim()\n        );\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { IFormatter } from \"../components/types\";\nimport { IFormatterData } from \"../configurator/components/formatters/types\";\n\n/**\n *\n * Takes formatter \"dataFieldIds\" from \"properties\" and maps the data to the formatter input.\n * Might be used for nuiComponentPortal directive for formatter \"properties\"\n *\n * @param formatter\n * @param data\n */\nexport function mapDataToFormatterProperties<T extends { [key: string]: any }>(\n    formatter: IFormatter,\n    data: T\n): { data: IFormatterData } {\n    const { dataFieldIds } = formatter.properties || {};\n\n    let formatterProps;\n    if (!dataFieldIds) {\n        // assign just \"value\" if no dataFields provided\n        formatterProps = { value: data.value };\n    } else {\n        formatterProps = Object.keys(dataFieldIds).reduce(\n            (dataFieldsAcc: any, formatterKey) => {\n                const widgetDataKey: string = dataFieldIds[formatterKey];\n\n                dataFieldsAcc[formatterKey] = data[widgetDataKey];\n                return dataFieldsAcc;\n            },\n            {}\n        );\n    }\n\n    return formatterProps;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    HostBinding,\n    Inject,\n    Input,\n    OnChanges,\n    Optional,\n    SimpleChanges,\n    ViewEncapsulation,\n} from \"@angular/core\";\nimport _isNil from \"lodash/isNil\";\n\nimport { EventBus, IDataSource, IEvent } from \"@nova-ui/bits\";\n\nimport {\n    IKpiConfiguration,\n    IKpiData,\n    IKpiFormatterProperties,\n    IKpiFormattersConfiguration,\n} from \"./types\";\nimport { mapDataToFormatterProperties } from \"../../functions/map-data-to-formatter-properties\";\nimport { INTERACTION } from \"../../services/types\";\nimport {\n    DATA_SOURCE,\n    IHasChangeDetector,\n    PIZZAGNA_EVENT_BUS,\n    WellKnownDataSourceFeatures,\n} from \"../../types\";\nimport { IBroker } from \"../providers/types\";\n\n@Component({\n    selector: \"nui-kpi\",\n    templateUrl: \"./kpi.component.html\",\n    styleUrls: [\"./kpi.component.less\"],\n    encapsulation: ViewEncapsulation.Emulated,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class KpiComponent implements IHasChangeDetector, OnChanges {\n    public static lateLoadKey = \"KpiComponent\";\n\n    @Input()\n    public widgetData: IKpiData;\n\n    @Input()\n    public backgroundColor: string;\n\n    @Input()\n    public syncValuesBroker: IBroker[];\n\n    @Input()\n    public configuration: IKpiConfiguration;\n\n    @Input()\n    public busy = false;\n\n    @HostBinding(\"class\")\n    public elementClass = \"\";\n\n    public formattersProperties: IKpiFormatterProperties;\n    public defaultColor: string = \"var(--nui-color-bg-secondary)\";\n\n    public get interactive(): boolean {\n        return (\n            ((this.configuration?.interactive ||\n                this.dataSource?.features?.getFeatureConfig(\n                    WellKnownDataSourceFeatures.Interactivity\n                )?.enabled) &&\n                !_isNil(this.widgetData?.value)) ||\n            false\n        );\n    }\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        @Optional() @Inject(DATA_SOURCE) public dataSource: IDataSource,\n        @Inject(PIZZAGNA_EVENT_BUS) public eventBus: EventBus<IEvent>\n    ) {}\n\n    public onInteraction(): void {\n        if (!this.interactive) {\n            return;\n        }\n        this.eventBus\n            .getStream(INTERACTION)\n            .next({ payload: { data: this.widgetData } });\n    }\n\n    public getScaleBroker(id: string): IBroker | undefined {\n        if (this.syncValuesBroker) {\n            return this.syncValuesBroker.find((b) => b.id === id);\n        }\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.configuration) {\n            const formattersConfiguration: IKpiFormattersConfiguration =\n                changes.configuration.currentValue.formatters;\n\n            if (formattersConfiguration) {\n                this.formattersProperties = this.getFormatterProperties(\n                    formattersConfiguration\n                );\n            }\n        }\n\n        if (changes.widgetData) {\n            if (this.configuration?.formatters) {\n                this.formattersProperties = this.getFormatterProperties(\n                    this.configuration.formatters\n                );\n            }\n        }\n    }\n\n    public get showEmpty(): boolean {\n        if (typeof this.widgetData?.value === \"boolean\") {\n            return false;\n        }\n\n        if (\n            Array.isArray(this.widgetData?.value) &&\n            this.widgetData?.value.length === 0\n        ) {\n            return true;\n        }\n\n        return !this.widgetData?.value && this.widgetData?.value !== 0;\n    }\n\n    /**\n     * Iterates over formatters and maps their properties from the data\n     *\n     * @param formattersConfiguration\n     */\n    private getFormatterProperties(\n        formattersConfiguration: IKpiFormattersConfiguration\n    ) {\n        const formatterKeys = Object.keys(formattersConfiguration);\n\n        const formattersProperties = formatterKeys.reduce(\n            (acc: IKpiFormatterProperties, key: string) => {\n                const formatterCfg = formattersConfiguration[key]?.formatter;\n                if (formatterCfg) {\n                    acc[key] = {\n                        data: mapDataToFormatterProperties(\n                            formatterCfg,\n                            this.widgetData\n                        ),\n                    };\n                }\n                return acc;\n            },\n            {}\n        );\n\n        return formattersProperties;\n    }\n}\n","<div class=\"w-100 h-100\" nui-busy [busy]=\"busy\">\n    <ng-container *ngIf=\"widgetData?.link\">\n        <a class=\"nui-kpi-indicator\" [href]=\"widgetData.link\">\n            <ng-container [ngTemplateOutlet]=\"kpiContent\"></ng-container>\n        </a>\n    </ng-container>\n\n    <ng-container *ngIf=\"!widgetData?.link\">\n        <div class=\"nui-kpi-indicator\" (click)=\"onInteraction()\">\n            <ng-container [ngTemplateOutlet]=\"kpiContent\"></ng-container>\n        </div>\n    </ng-container>\n</div>\n\n<ng-template #kpiContent>\n    <div class=\"nui-kpi-indicator__background\"\n         [class.nui-kpi-indicator--interactive]=\"interactive\"\n         [ngStyle]=\"{'background-color': backgroundColor || widgetData?.backgroundColor}\">\n    </div>\n    <div class=\"nui-kpi-indicator__text\"\n         [ngStyle]=\"{'color': widgetData?.textColor || backgroundColor ||  widgetData?.backgroundColor || defaultColor}\">\n        <div class=\"nui-kpi-indicator__zoom-container\">\n            <div class=\"nui-kpi-indicator__description nui-kpi-indicator__zoom-container__row\"\n                 [title]=\"widgetData?.label\">\n                    <span nuiZoomContent\n                          [useZoom]=\"false\"\n                          [minScale]=\"0.5\"\n                          [scaleIN$]=\"getScaleBroker('label')?.out$\"\n                          [scaleOUT$]=\"getScaleBroker('label')?.in$\"\n                    >{{widgetData?.label}}</span>\n            </div>\n\n            <ng-container *ngIf=\"configuration?.formatters?.Value; else kpiValueRaw\"\n                          nuiComponentPortal\n                          #componentPortal=\"nuiComponentPortal\"\n                          componentId=\"KpiValueFormatter\"\n                          [componentType]=\"configuration?.formatters?.Value?.formatter?.componentType\"\n                          [properties]=\"formattersProperties.Value\">\n                <div class=\"nui-kpi-indicator__value nui-kpi-indicator__zoom-container__row\">\n                            <span nuiZoomContent\n                                  [ngClass]=\"configuration?.formatters?.Value?.formatter?.componentType === 'IconFormatterComponent' ? 'without-filter' : ''\"\n                                  [useZoom]=\"false\"\n                                  [margin]=\"widgetData?.margin ?? 2\"\n                                  [scaleIN$]=\"getScaleBroker('value')?.out$\"\n                                  [scaleOUT$]=\"getScaleBroker('value')?.in$\">\n                                <ng-template\n                                    [cdkPortalOutlet]=\"componentPortal.portal\"\n                                    (attached)=\"componentPortal.attached($event)\"></ng-template>\n                            </span>\n                </div>\n            </ng-container>\n\n            <div class=\"nui-kpi-indicator__units nui-kpi-indicator__zoom-container__row\"\n                 *ngIf=\"widgetData?.units\"\n                 [title]=\"widgetData?.units\">\n                    <span nuiZoomContent\n                          [useZoom]=\"false\"\n                          [scaleIN$]=\"getScaleBroker('units')?.out$\"\n                          [scaleOUT$]=\"getScaleBroker('units')?.in$\"\n                          [minScale]=\"0.5\">{{widgetData?.units}}</span>\n            </div>\n        </div>\n    </div>\n</ng-template>\n\n<ng-template #kpiValueRaw>\n    <div class=\"nui-kpi-indicator__value nui-kpi-indicator__zoom-container__row\"\n         [style.font-size]=\"widgetData?.fontSize\"\n         [title]=\"widgetData?.value\">\n   <span nuiZoomContent\n         [useZoom]=\"false\"\n         [margin]=\"widgetData?.margin ?? 2\"\n         [scaleIN$]=\"getScaleBroker('value')?.out$\"\n         [scaleOUT$]=\"getScaleBroker('value')?.in$\">\n       {{widgetData?.value}}</span>\n    </div>\n</ng-template>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    DoCheck,\n    Injectable,\n    Input,\n    OnChanges,\n    OnDestroy,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { Subject } from \"rxjs\";\n\nimport { LoggerService } from \"@nova-ui/bits\";\n\nimport { IValueChange, mergeChanges } from \"../../functions/merge-changes\";\nimport { PizzagnaService } from \"../../pizzagna/services/pizzagna.service\";\nimport { IComponentConfiguration, IHasChangeDetector } from \"../../types\";\n\n@Injectable()\nexport abstract class BaseLayout\n    implements IHasChangeDetector, OnChanges, DoCheck, OnDestroy\n{\n    // components config from 'pizza'\n    public nodeComponentsConfigs: IComponentConfiguration[];\n    // result config from merging 'nodeComponentsConfig' and parent 'template'\n    public nodeConfigs: IComponentConfiguration[];\n\n    protected destroyed$: Subject<void> = new Subject<void>();\n\n    @Input() public template: Partial<IComponentConfiguration>;\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        protected pizzagnaService: PizzagnaService,\n        protected logger: LoggerService\n    ) {}\n\n    public abstract getNodes(): string[];\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.nodes || changes.template) {\n            this.updateNodeConfigs({\n                changesNodes: changes.nodes,\n                changesTemplate: changes.template,\n            });\n        }\n    }\n\n    public ngDoCheck(): void {\n        if (this.checkNodeConfigs()) {\n            this.updateNodeConfigs();\n            this.changeDetector.detectChanges();\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.destroyed$.next();\n        this.destroyed$.complete();\n    }\n\n    public trackByFn(index: number, node: IComponentConfiguration): string {\n        return node.id;\n    }\n\n    private checkNodeConfigs(): boolean {\n        const nodes = this.getNodes();\n\n        if (\n            !this.nodeComponentsConfigs ||\n            nodes.length !== this.nodeComponentsConfigs.length\n        ) {\n            return true;\n        }\n\n        for (let i = 0; i < nodes.length; i++) {\n            if (\n                this.pizzagnaService.getComponent(nodes[i]) !==\n                this.nodeComponentsConfigs[i]\n            ) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    private updateNodeComponentConfigs() {\n        const nodes = this.getNodes();\n\n        this.nodeComponentsConfigs =\n            nodes &&\n            nodes.map((n) => {\n                const c = this.pizzagnaService.getComponent(n);\n                if (typeof c === \"undefined\") {\n                    throw new Error(\n                        \"No component with id '\" +\n                            n +\n                            \"' was defined in the configuration.\"\n                    );\n                }\n                return c;\n            });\n    }\n\n    private updateNodeConfigs(changes?: SimpleChanges) {\n        this.nodeConfigs = mergeChanges(\n            this.nodeConfigs,\n            this.getTemplateChangeForNodes(changes),\n            this.getNodeComponentsConfigs()\n        );\n    }\n\n    private getNodeComponentsConfigs() {\n        const nodeComponentsConfigsChanges: IValueChange = {\n            currentValue: undefined,\n            previousValue: this.nodeComponentsConfigs\n                ? [...this.nodeComponentsConfigs]\n                : undefined,\n        };\n        this.updateNodeComponentConfigs();\n        nodeComponentsConfigsChanges.currentValue = this.nodeComponentsConfigs;\n\n        return nodeComponentsConfigsChanges;\n    }\n\n    private getTemplateChangeForNodes(changes?: SimpleChanges): IValueChange {\n        const { changesNodes, changesTemplate } = changes || {};\n\n        const getTemplatePerNode = (template: IComponentConfiguration) =>\n            template && this.getNodes()?.map(() => template);\n\n        return {\n            currentValue: getTemplatePerNode(\n                changesTemplate ? changesTemplate.currentValue : this.template\n            ),\n            previousValue: changesNodes\n                ? this.template\n                : getTemplatePerNode(\n                      changesTemplate\n                          ? changesTemplate.previousValue\n                          : this.template\n                  ),\n        };\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    HostBinding,\n    Input,\n    OnDestroy,\n    OnInit,\n} from \"@angular/core\";\n\nimport { LoggerService } from \"@nova-ui/bits\";\n\nimport { PizzagnaService } from \"../../../pizzagna/services/pizzagna.service\";\nimport { BaseLayout } from \"../base-layout\";\n\n@Component({\n    selector: \"nui-stack\",\n    templateUrl: \"./stack.component.html\",\n    standalone: false,\n})\nexport class StackComponent extends BaseLayout implements OnInit, OnDestroy {\n    public static lateLoadKey = \"StackComponent\";\n\n    @Input() nodes: string[] = [];\n    @Input() direction = \"column\";\n    @Input() elementClass = \"\";\n\n    @HostBinding(\"class\") public classNames: string;\n    public readonly defaultClassNames = \"h-100 w-100 d-flex\";\n\n    constructor(\n        changeDetector: ChangeDetectorRef,\n        pizzagnaService: PizzagnaService,\n        logger: LoggerService\n    ) {\n        super(changeDetector, pizzagnaService, logger);\n    }\n\n    public ngOnInit(): void {\n        this.classNames = `${this.defaultClassNames} flex-${this.direction} ${this.elementClass}`;\n    }\n\n    public ngOnDestroy(): void {\n        // Ensures that any base class observables are unsubscribed.\n        super.ngOnDestroy();\n    }\n\n    public getNodes(): string[] {\n        return this.nodes;\n    }\n}\n","<ng-container *ngFor=\"let node of nodeConfigs; trackBy: trackByFn\">\n    <ng-container\n        nuiComponentPortal\n        #componentPortal=\"nuiComponentPortal\"\n        [componentId]=\"node.id\"\n        [componentType]=\"node.componentType\"\n        [providers]=\"node.providers\"\n        [properties]=\"node.properties\"\n    >\n        <ng-template\n            [cdkPortalOutlet]=\"componentPortal.portal\"\n            (attached)=\"componentPortal.attached($event)\"\n        ></ng-template>\n    </ng-container>\n</ng-container>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    HostBinding,\n    Input,\n    NgZone,\n    OnDestroy,\n    ViewChild,\n} from \"@angular/core\";\n\nimport { LoggerService } from \"@nova-ui/bits\";\n\nimport { PizzagnaService } from \"../../../pizzagna/services/pizzagna.service\";\nimport { BaseLayout } from \"../base-layout\";\n\n@Component({\n    selector: \"nui-tiles\",\n    styleUrls: [\"./tiles.component.less\"],\n    templateUrl: \"./tiles.component.html\",\n    standalone: false,\n})\nexport class TilesComponent\n    extends BaseLayout\n    implements OnDestroy, AfterViewInit\n{\n    public static lateLoadKey = \"TilesComponent\";\n\n    @Input() public nodes: string[] = [];\n    @Input() public direction = \"column\";\n\n    @HostBinding(\"class\") public elementClass: string;\n    public prioritizeGridRows: boolean = false;\n\n    @ViewChild(\"gridItemsContainer\", { static: true })\n    private gridItemsContainer: ElementRef<HTMLElement>;\n\n    private tilesResizeObserver: ResizeObserver;\n\n    constructor(\n        changeDetector: ChangeDetectorRef,\n        pizzagnaService: PizzagnaService,\n        logger: LoggerService,\n        private ngZone: NgZone\n    ) {\n        super(changeDetector, pizzagnaService, logger);\n    }\n\n    public ngAfterViewInit(): void {\n        this.handleGridFlowOnResize();\n    }\n\n    public ngOnDestroy(): void {\n        this.tilesResizeObserver?.disconnect();\n        // Ensures that any base class observables are unsubscribed.\n        super.ngOnDestroy();\n    }\n\n    public getNodes(): string[] {\n        return this.nodes;\n    }\n\n    private handleGridFlowOnResize() {\n        this.tilesResizeObserver = new ResizeObserver(() => this.onResize());\n        this.ngZone.runOutsideAngular(() => {\n            this.tilesResizeObserver.observe(\n                this.gridItemsContainer.nativeElement\n            );\n        });\n    }\n\n    private onResize() {\n        if (this.nodes?.length < 2) {\n            return;\n        }\n\n        const cssAttributes =\n            this.gridItemsContainer.nativeElement.getBoundingClientRect();\n        const { height, width } = cssAttributes;\n\n        const h2WRatio = height / width;\n        const allowedH2WRatio = getHeightToWidthRatioFor(this.nodes.length);\n\n        const gap = 0.05; // height/width gap used in transitions to avoid widget lagging\n\n        if (h2WRatio - gap > allowedH2WRatio && !this.prioritizeGridRows) {\n            this.prioritizeGridRows = true;\n            this.changeDetector.detectChanges();\n            return;\n        }\n\n        if (h2WRatio + gap < allowedH2WRatio && this.prioritizeGridRows) {\n            this.prioritizeGridRows = false;\n            this.changeDetector.detectChanges();\n            return;\n        }\n    }\n}\n\n/**\n * Height to Width container ratio varies per tiles amount.\n * Experimentally was determined valid h/w ratio for 2...8 tiles and\n * This function represents the linear dependency (approximately).\n */\nconst getHeightToWidthRatioFor = (tilesAmount: number) =>\n    0.25 * tilesAmount + 0.7;\n","<div\n    #gridItemsContainer\n    class=\"nui-grid-layout\"\n    [ngClass]=\"{ 'prioritize-rows': prioritizeGridRows }\"\n>\n    <ng-container *ngFor=\"let node of nodeConfigs; trackBy: trackByFn\">\n        <ng-container\n            nuiComponentPortal\n            #componentPortal=\"nuiComponentPortal\"\n            [componentId]=\"node.id\"\n            [componentType]=\"node.componentType\"\n            [properties]=\"node.properties\"\n            [providers]=\"node.providers\"\n        >\n            <ng-template\n                [cdkPortalOutlet]=\"componentPortal.portal\"\n                (attached)=\"componentPortal.attached($event)\"\n            ></ng-template>\n        </ng-container>\n    </ng-container>\n    <div *ngIf=\"nodeConfigs.length === 0\" class=\"is-empty\">\n        <nui-image image=\"no-data-to-show\"></nui-image>\n    </div>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    Output,\n} from \"@angular/core\";\n\nimport { IHasChangeDetector } from \"../../../../types\";\n\nconst MEDIUM_WIDTH = 600;\nconst SMALL_WIDTH = 480;\n\n@Component({\n    selector: \"nui-list-group-item\",\n    templateUrl: \"./list-group-item.component.html\",\n    styleUrls: [\"list-group-item.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        class: \"w-100\",\n    },\n    standalone: false,\n})\nexport class ListGroupItemComponent implements IHasChangeDetector {\n    static lateLoadKey = \"ListGroupItemComponent\";\n\n    @Input() public id: string;\n    @Input() public label: string;\n    @Input() public statuses: Array<{ [key: string]: any }>;\n\n    @Input() public canNavigate: boolean;\n    @Input() set widgetWidth(res: number) {\n        this.isMedium = res <= MEDIUM_WIDTH && res > SMALL_WIDTH;\n        this.isSmall = res <= SMALL_WIDTH;\n    }\n\n    @Output() public navigated = new EventEmitter<ListGroupItemComponent>();\n\n    public isMedium: boolean;\n    public isSmall: boolean;\n\n    constructor(public changeDetector: ChangeDetectorRef) {}\n\n    public onButtonClick(): void {\n        if (this.canNavigate) {\n            this.navigated.emit(this);\n        }\n    }\n}\n","<div\n    class=\"list-group-item\"\n    [ngClass]=\"{ 'widget-medium': isMedium, 'widget-small': isSmall }\"\n    (click)=\"onButtonClick()\"\n>\n    <div class=\"list-group-item__label\" [title]=\"label\">{{ label }}</div>\n    <div class=\"list-group-item__statuses\">\n        <div class=\"statuses\">\n            <div class=\"status-column\" *ngFor=\"let status of statuses\">\n                <nui-icon [icon]=\"status.key\" class=\"mr-2\"></nui-icon>\n                <span class=\"status-column__label\" [title]=\"status.value\">{{\n                    status.value\n                }}</span>\n            </div>\n        </div>\n        <nui-icon *ngIf=\"canNavigate\" icon=\"caret-right\"></nui-icon>\n    </div>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Inject,\n    Input,\n    OnInit,\n    Output,\n} from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IEvent } from \"@nova-ui/bits\";\n\nimport { WIDGET_SEARCH } from \"../../../../services/types\";\nimport { IHasChangeDetector, PIZZAGNA_EVENT_BUS } from \"../../../../types\";\n\n@Component({\n    selector: \"nui-list-leaf-item\",\n    templateUrl: \"./list-leaf-item.component.html\",\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: { class: \"w-100\" },\n    styleUrls: [\"list-leaf-item.component.less\"],\n    standalone: false,\n})\nexport class ListLeafItemComponent implements IHasChangeDetector, OnInit {\n    static lateLoadKey = \"ListLeafItemComponent\";\n\n    @Input() public icon: string;\n    @Input() public status: string;\n    @Input() public detailedUrl: string;\n    @Input() public label: string;\n    @Input() public canNavigate: boolean;\n    @Input() public url: string;\n\n    @Output() public navigated = new EventEmitter<ListLeafItemComponent>();\n\n    public searchTerm: string = \"\";\n    protected readonly destroy$ = new Subject<void>();\n\n    public onButtonClick(): void {\n        if (this.canNavigate) {\n            this.navigated.emit(this);\n        }\n    }\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        @Inject(PIZZAGNA_EVENT_BUS) public eventBus: EventBus<IEvent>\n    ) {}\n\n    public ngOnInit(): void {\n        this.eventBus\n            .getStream(WIDGET_SEARCH)\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((event) => {\n                this.searchTerm = event.payload ?? \"\";\n                this.changeDetector.markForCheck();\n            });\n    }\n}\n","<div class=\"nui-list-leaf-item\" (click)=\"onButtonClick()\">\n    <div class=\"nui-list-leaf-item__info-container\">\n        <div class=\"nui-list-leaf-item__icon-container\">\n            <nui-icon\n                *ngIf=\"icon; else statusTpl\"\n                [icon]=\"icon\"\n                [status]=\"status\"\n                class=\"mr-1\"\n            ></nui-icon>\n        </div>\n        <div class=\"nui-list-leaf-item__description\">\n            <a\n                class=\"nui-text-ellipsis\"\n                [ngClass]=\"url ? '' : 'not-active'\"\n                [attr.target]=\"url ? '_blank' : null\"\n                [attr.href]=\"url || null\"\n                [innerHTML]=\"label | nuiHighlight : searchTerm\"\n            ></a>\n            <div\n                class=\"nui-text-secondary nui-text-ellipsis\"\n                [innerHTML]=\"detailedUrl | nuiHighlight : searchTerm\"\n            ></div>\n        </div>\n\n        <ng-template #statusTpl>{{ status }}</ng-template>\n    </div>\n    <nui-icon *ngIf=\"canNavigate\" icon=\"caret-right\"></nui-icon>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Inject,\n    Input,\n    Output,\n} from \"@angular/core\";\n\nimport { EventBus, IEvent } from \"@nova-ui/bits\";\n\nimport { DRILLDOWN } from \"../../../../services/types\";\nimport { PIZZAGNA_EVENT_BUS } from \"../../../../types\";\nimport { INavigationBarConfig } from \"../../types\";\n\n@Component({\n    selector: \"nui-navigation-bar\",\n    templateUrl: \"./list-navigation-bar.component.html\",\n    styleUrls: [\"list-navigation-bar.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class ListNavigationBarComponent {\n    static lateLoadKey = \"ListNavigationBarComponent\";\n\n    @Input() public navBarConfig: INavigationBarConfig;\n\n    @Output() public navigated = new EventEmitter();\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>\n    ) {}\n\n    public onBack(): void {\n        if (this.navBarConfig) {\n            this.eventBus.getStream(DRILLDOWN).next({\n                payload: {\n                    back: this.navBarConfig?.buttons?.back?.disabled,\n                },\n            });\n        }\n    }\n\n    public onHome(): void {\n        this.eventBus.getStream(DRILLDOWN).next({ payload: { reset: true } });\n    }\n}\n","<div class=\"list-nav-bar\" *ngIf=\"navBarConfig && !navBarConfig?.isRoot\">\n    <button\n        nui-button\n        type=\"button\"\n        [isRepeat]=\"true\"\n        displayStyle=\"action\"\n        icon=\"arrow-left\"\n        [disabled]=\"!navBarConfig?.buttons?.back?.disabled\"\n        (click)=\"onBack()\"\n    ></button>\n\n    <button\n        nui-button\n        type=\"button\"\n        [isRepeat]=\"true\"\n        displayStyle=\"action\"\n        icon=\"overview\"\n        (click)=\"onHome()\"\n    ></button>\n    <div class=\"list-nav-bar__label\">{{ navBarConfig?.label }}</div>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    HostBinding,\n    Inject,\n    Input,\n    NgZone,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IEvent, ResizeObserverDirective } from \"@nova-ui/bits\";\n\nimport { IListWidgetConfiguration } from \"./types\";\nimport { mapDataToFormatterProperties } from \"../../functions/map-data-to-formatter-properties\";\nimport { DRILLDOWN } from \"../../services/types\";\nimport { IHasChangeDetector, PIZZAGNA_EVENT_BUS } from \"../../types\";\n\nconst RESIZE_DEBOUNCE_TIME = 10;\n\n@Component({\n    selector: \"nui-list-widget\",\n    templateUrl: \"./list-widget.component.html\",\n    styleUrls: [\"./list-widget.component.less\"],\n    standalone: false,\n})\nexport class ListWidgetComponent\n    implements OnDestroy, OnInit, IHasChangeDetector, OnChanges\n{\n    static lateLoadKey = \"ListWidgetComponent\";\n\n    @Input() public data: any[];\n    @Input() public configuration: IListWidgetConfiguration;\n    @Input() @HostBinding(\"class\") public elementClass: string;\n\n    private itemFormatterProps = new Map();\n    private readonly destroy$ = new Subject<void>();\n    private widgetWidth: number;\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        private zone: NgZone,\n        private host: ElementRef,\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>\n    ) {}\n\n    public ngOnInit(): void {\n        this.initResizeObserver();\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.data?.currentValue) {\n            changes.data.currentValue.forEach((v: any) =>\n                this.itemFormatterProps.set(v, this.calcItemProps(v))\n            );\n        }\n    }\n\n    // TODO: think of how to get rid of this logic on listWidget\n    // since it's very specific for drilldown and appstack\n    public onListItemEvent(item: any): void {\n        this.eventBus.getStream(DRILLDOWN).next({ payload: item });\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n        this.itemFormatterProps.clear();\n    }\n\n    public getPropsFor(item: any): any {\n        return {\n            ...this.itemFormatterProps.get(item),\n            widgetWidth: this.widgetWidth,\n        };\n    }\n\n    public shouldDisplayRepeat(): boolean {\n        return this.data?.length > 0;\n    }\n\n    private calcItemProps(item: any) {\n        if (!this.configuration) {\n            return item;\n        }\n        return {\n            ...mapDataToFormatterProperties(this.configuration, item),\n            ...this.configuration.itemProperties,\n        };\n    }\n\n    // think of using eventBus to let widget entities know about it's width. - mb some formatters for widget doesn't care about it's width.\n    private initResizeObserver() {\n        const resizeDirective = new ResizeObserverDirective(\n            this.host,\n            this.zone\n        );\n        resizeDirective.debounceTime = RESIZE_DEBOUNCE_TIME;\n        resizeDirective.ngAfterViewInit();\n\n        resizeDirective.containerResize\n            .pipe(takeUntil(this.destroy$))\n            .subscribe(() => {\n                this.widgetWidth = this.host.nativeElement.offsetWidth;\n            });\n    }\n}\n","<nui-repeat\n    *ngIf=\"shouldDisplayRepeat()\"\n    [itemsSource]=\"data\"\n    [repeatItemTemplateRef]=\"repeatItemTemplate\"\n>\n</nui-repeat>\n\n<div class=\"empty\" *ngIf=\"!shouldDisplayRepeat()\">\n    <nui-image image=\"no-data-to-show\"></nui-image>\n</div>\n\n<ng-template #repeatItemTemplate let-item=\"item\">\n    <div class=\"empty\" *ngIf=\"!item\">\n        <nui-image image=\"no-data-to-show\"></nui-image>\n    </div>\n    <ng-container\n        nuiComponentPortal\n        #componentPortal=\"nuiComponentPortal\"\n        [componentId]=\"configuration.componentType\"\n        [componentType]=\"configuration.componentType\"\n        [properties]=\"getPropsFor(item)\"\n        [outputs]=\"['navigated']\"\n        (output)=\"onListItemEvent(item)\"\n    >\n        <ng-template\n            [cdkPortalOutlet]=\"componentPortal.portal\"\n            (attached)=\"componentPortal.attached($event)\"\n        ></ng-template>\n    </ng-container>\n</ng-template>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\n\nimport { LoggerService } from \"@nova-ui/bits\";\n\nimport { RegistryService } from \"./registry-service\";\nimport { IProportionalDonutContentAggregatorDefinition } from \"../functions/proportional-aggregators/types\";\n\n@Injectable({ providedIn: \"root\" })\nexport class ProportionalContentAggregatorsRegistryService extends RegistryService<IProportionalDonutContentAggregatorDefinition> {\n    constructor(logger: LoggerService) {\n        super(logger, \"ProportionalContentAggregatorsRegistryService\");\n    }\n\n    getItemKey(item: IProportionalDonutContentAggregatorDefinition): string {\n        return item.aggregatorType;\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\n\n@Injectable({ providedIn: \"root\" })\nexport class UnitTestRegistryService {\n    public static providerId = \"UnitTestRegistryService\";\n    public componentMap: any = {};\n    public providersMap: any = {};\n\n    setComponent(component: any, componentId: string): void {\n        this.componentMap[componentId] = component;\n    }\n\n    setProviders(services: any, componentId: string): void {\n        this.providersMap[componentId] = services;\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./types\";\nexport * from \"./provider-registry.service\";\nexport * from \"./unit-test-registry.service\";\nexport * from \"./widget-configuration.service\";\nexport * from \"./widget-to-dashboard-event-proxy.service\";\nexport * from \"./widget-types.service\";\nexport * from \"./event-registry.service\";\nexport * from \"./table-formatter-registry.service\";\nexport * from \"./kpi-color-comparators-registry.service\";\nexport * from \"./proportional-content-aggregators-registry.service\";\nexport * from \"./url-interaction.service\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    Input,\n    OnChanges,\n    OnDestroy,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { Subject, Subscription } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { LoggerService } from \"@nova-ui/bits\";\nimport {\n    ChartAssist,\n    IAccessors,\n    IChartAssistEvent,\n    IChartAssistSeries,\n} from \"@nova-ui/charts\";\n\nimport { mapDataToFormatterProperties } from \"../../../functions/map-data-to-formatter-properties\";\nimport {\n    IProportionalDonutContentAggregator,\n    IProportionalDonutContentAggregatorDefinition,\n    IProportionalDonutContentAggregatorProperties,\n} from \"../../../functions/proportional-aggregators/types\";\nimport { ProportionalContentAggregatorsRegistryService } from \"../../../services/proportional-content-aggregators-registry.service\";\nimport { ProportionalDonutContentFormattersRegistryService } from \"../../../services/public-api\";\nimport { IHasChangeDetector } from \"../../../types\";\nimport {\n    IFormatter,\n    IFormatterDefinition,\n    IFormatterProperties,\n} from \"../../types\";\nimport { IDonutContentConfig } from \"../types\";\n\n@Component({\n    selector: \"nui-proportional-donut-content\",\n    templateUrl: \"./proportional-donut-content.component.html\",\n    styleUrls: [\"./proportional-donut-content.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class ProportionalDonutContentComponent\n    implements OnChanges, OnDestroy, IHasChangeDetector\n{\n    static lateLoadKey = \"ProportionalDonutContentComponent\";\n\n    @Input() public widgetData: IChartAssistSeries<IAccessors>[];\n    @Input() public donutConfig: IDonutContentConfig;\n\n    @Input() private chartAssist: ChartAssist;\n\n    public aggregatedValue: string;\n    public contentFormatter: IFormatter;\n    public contentFormatterProperties: IFormatterProperties | undefined;\n\n    private contentFormatterDefinition: IFormatterDefinition;\n    private contentAggregatorDefinition: IProportionalDonutContentAggregatorDefinition;\n    /** Hovered series Id */\n    private emphasizedSeriesId: string;\n    private destroy$ = new Subject<void>();\n    private chartAssistSubscription: Subscription;\n\n    constructor(\n        private aggregatorRegistry: ProportionalContentAggregatorsRegistryService,\n        private formatterRegistry: ProportionalDonutContentFormattersRegistryService,\n        public changeDetector: ChangeDetectorRef,\n        private logger: LoggerService\n    ) {}\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.donutConfig) {\n            const donutConfig: IDonutContentConfig =\n                changes.donutConfig.currentValue;\n\n            const { formatter, aggregator } = donutConfig;\n            if (aggregator?.aggregatorType) {\n                this.updateAggregatorDefinition(aggregator);\n                this.updateAggregatedValue();\n            }\n\n            if (formatter?.componentType) {\n                this.contentFormatter = formatter;\n                this.updateFormatterDefinition(formatter);\n                this.updateFormatterProperties();\n            }\n        }\n\n        if (changes.widgetData) {\n            this.updateAggregatedValue();\n            this.updateFormatterProperties();\n        }\n\n        if (changes.chartAssist) {\n            this.subscribeToChartAssist();\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    /**\n     * Iterates over formatters and maps their properties from the data\n     *\n     * @param formattersConfiguration\n     */\n    private getFormatterProperties(formatter: IFormatter | undefined) {\n        if (!formatter) {\n            return undefined;\n        }\n\n        return {\n            ...this.contentFormatterDefinition?.properties,\n            data: mapDataToFormatterProperties(formatter, {\n                // add \"aggregatedValue\" as \"value\" so that formatter processes it by default\n                value: this.aggregatedValue,\n            }),\n        };\n    }\n\n    private updateAggregatorDefinition(\n        aggregatorConfig: IProportionalDonutContentAggregator\n    ) {\n        const fromRegistry = this.aggregatorRegistry.getItem(\n            aggregatorConfig.aggregatorType\n        );\n\n        if (fromRegistry) {\n            this.contentAggregatorDefinition = fromRegistry;\n        } else {\n            this.logger.warn(\n                `No aggregator with key ${aggregatorConfig.aggregatorType} found in registry.`\n            );\n        }\n    }\n\n    private updateFormatterDefinition(formatterConfig: IFormatter) {\n        const fromRegistry = this.formatterRegistry.getItem(\n            formatterConfig.componentType\n        );\n\n        if (fromRegistry) {\n            this.contentFormatterDefinition = fromRegistry;\n        } else {\n            this.logger.warn(\n                `No aggregator with key ${formatterConfig.componentType} found in registry.`\n            );\n        }\n    }\n\n    private updateAggregatedValue(): void {\n        if (!this.widgetData || !this.contentAggregatorDefinition) {\n            this.logger.warn(\n                `Can't aggregate value. Aggregator key: ${this.contentAggregatorDefinition?.aggregatorType}. Data: ${this.widgetData}`\n            );\n            return;\n        }\n\n        const properties = this.getAggregatorProperties();\n\n        this.aggregatedValue = this.contentAggregatorDefinition\n            .fn(this.widgetData, {\n                ...properties,\n                // prioritize emphasizedSeriesId if series is hovered on the chart\n                activeMetricId:\n                    this.emphasizedSeriesId || properties.activeMetricId,\n            })\n            .toString();\n    }\n\n    private updateFormatterProperties() {\n        this.contentFormatterProperties = this.getFormatterProperties(\n            this.contentFormatter\n        );\n    }\n\n    private getAggregatorProperties(): IProportionalDonutContentAggregatorProperties {\n        return {\n            ...this.contentAggregatorDefinition?.properties,\n            ...this.donutConfig?.aggregator?.properties,\n        };\n    }\n\n    private subscribeToChartAssist() {\n        this.chartAssistSubscription?.unsubscribe();\n        this.chartAssistSubscription = this.chartAssist?.chartAssistSubject\n            ?.pipe(takeUntil(this.destroy$))\n            .subscribe((data: IChartAssistEvent) => {\n                this.emphasizedSeriesId = data.payload?.seriesId;\n                this.updateAggregatedValue();\n                this.updateFormatterProperties();\n                this.changeDetector.detectChanges();\n            });\n    }\n}\n","<ng-container\n    *ngIf=\"contentFormatter?.componentType\"\n    nuiComponentPortal\n    [componentType]=\"contentFormatter?.componentType\"\n    [properties]=\"contentFormatterProperties\"\n    #componentPortal=\"nuiComponentPortal\"\n>\n    <ng-template\n        [cdkPortalOutlet]=\"componentPortal.portal\"\n        (attached)=\"componentPortal.attached($event)\"\n    ></ng-template>\n</ng-container>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { BehaviorSubject } from \"rxjs\";\n\nimport { IDataField, IDataFieldsConfig } from \"@nova-ui/bits\";\nimport { IAllAround, IAccessors, IChartAssistSeries } from \"@nova-ui/charts\";\n\nimport { IProportionalDonutContentAggregator } from \"../../functions/proportional-aggregators/types\";\nimport {\n    ILegendPlacementOption,\n    LegendPlacement,\n} from \"../../widget-types/common/widget/legend\";\nimport { IFormatter, IFormatterDefinition } from \"../types\";\n\nexport enum ProportionalWidgetChartTypes {\n    DonutChart = \"DonutChart\",\n    PieChart = \"PieChart\",\n    VerticalBarChart = \"VerticalBarChart\",\n    HorizontalBarChart = \"HorizontalBarChart\",\n}\n\nexport interface IProportionalWidgetChartTypeConfiguration {\n    id: ProportionalWidgetChartTypes;\n    label: string;\n}\n\nexport interface ITickLabelConfig {\n    maxWidth: Partial<IAllAround<number>>;\n}\n\nexport interface IProportionalWidgetChartOptions {\n    type: ProportionalWidgetChartTypes;\n    contentFormatter?: IFormatter;\n    legendPlacement?: LegendPlacement;\n    legendFormatter?: IFormatter;\n    chartFormatterComponentType?: string;\n    donutContentConfig?: IDonutContentConfig;\n    horizontalBarTickLabelConfig?: ITickLabelConfig;\n}\n\nexport interface IProportionalWidgetConfig {\n    chartDonutContentLabel?: string;\n    chartDonutContentIcon?: string;\n    chartOptions: IProportionalWidgetChartOptions;\n    /** Chart and legend will emit an INTERACTION event on click if this property is enabled */\n    interactive?: boolean;\n    chartColors?: string[] | { [key: string]: string };\n    /** set \"true\" if you want for widget configuration to override colors that come built-in data */\n    prioritizeWidgetColors?: boolean;\n}\n\nexport interface ILegendFormat {\n    displayValue: string;\n    formatKey: string;\n}\n\nexport interface IProportionalWidgetChartEditorOptions {\n    chartTypes: ProportionalWidgetChartTypes[];\n    legendPlacementOptions: ILegendPlacementOption[];\n    legendFormats: Array<ILegendFormat>;\n    legendFormatters: IFormatterDefinition[];\n    contentFormatters?: IFormatterDefinition[];\n}\n\nexport interface IDonutContentConfig {\n    formatter: IFormatter;\n    aggregator: IProportionalDonutContentAggregator;\n}\n\nexport interface IProportionalDataFieldsConfig extends IDataFieldsConfig {\n    chartSeriesDataFields$: BehaviorSubject<IDataField[]>;\n}\n\nexport interface IProportionalWidgetData\n    extends IChartAssistSeries<IAccessors> {\n    link?: string;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\n\nimport {\n    barAccessors,\n    barGrid,\n    BarRenderer,\n    barScales,\n    BarSeriesHighlightStrategy,\n    ChartAssist,\n    IAccessors,\n    IBarChartConfig,\n    IChartAssistSeries,\n    IChartMarker,\n    IDataSeries,\n    IGrid,\n    IRadialAccessors,\n    IValueProvider,\n    PieRenderer,\n    radial,\n    RadialAccessors,\n    radialGrid,\n    RadialRenderer,\n    radialScales,\n    Renderer,\n    Scales,\n} from \"@nova-ui/charts\";\n\nimport { ProportionalWidgetChartTypes } from \"../components/proportional-widget/types\";\n\ntype PreprocessorType<T extends IAccessors> = (\n    this: ChartAssist,\n    series: IChartAssistSeries<T>[]\n) => IChartAssistSeries<T>[];\n\nexport interface IChartAttributes<T extends IAccessors = IAccessors> {\n    grid: IGrid;\n    accessors: IAccessors;\n    renderer: Renderer<IAccessors>;\n    scales: Scales;\n    preprocessor?: PreprocessorType<T>;\n}\n\ninterface IChartTools<T extends IAccessors = IAccessors> {\n    config?: IBarChartConfig;\n    preprocessor?: PreprocessorType<T>;\n    gridFunction: () => IGrid;\n    rendererFunction: () => Renderer<IAccessors>;\n    accessorFunction: (\n        colors?: IValueProvider<string>,\n        markers?: IValueProvider<IChartMarker>\n    ) => IAccessors;\n    scaleFunction: () => Scales;\n}\n\n@Injectable()\nexport class CategoryChartUtilService {\n    /**\n     *  Combines each of IDataSeries with accessors, renderer and scales provided\n     *\n     * @param data\n     * @param accessors\n     * @param renderer\n     * @param scales\n     *\n     * @returns resulting set of IChartAssistSeries\n     */\n    public static buildChartSeries(\n        data: IDataSeries<IAccessors>[],\n        accessors: IAccessors,\n        renderer: Renderer<IAccessors>,\n        scales: Scales\n    ): IChartAssistSeries<IAccessors>[] {\n        const result = (data || []).map((s) => ({\n            ...s,\n            accessors,\n            renderer,\n            scales,\n        }));\n        return result;\n    }\n\n    public static getChartAttributes(\n        chartType: ProportionalWidgetChartTypes,\n        colors?: IValueProvider<string>,\n        markers?: IValueProvider<IChartMarker>\n    ): IChartAttributes | IChartAttributes<IRadialAccessors> {\n        const t: IChartTools | IChartTools<IRadialAccessors> =\n            CategoryChartUtilService.getChartTools(chartType);\n        const result: IChartAttributes | IChartAttributes<IRadialAccessors> = {\n            grid: t.gridFunction(),\n            accessors: t.accessorFunction(colors, markers),\n            renderer: t.rendererFunction(),\n            scales: t.scaleFunction(),\n        };\n\n        if (t.preprocessor) {\n            result.preprocessor =\n                t.preprocessor as PreprocessorType<IRadialAccessors>;\n        }\n        return result;\n    }\n\n    private static getChartTools(\n        chartType: ProportionalWidgetChartTypes\n    ): IChartTools | IChartTools<IRadialAccessors> {\n        const radialChartAccessors = (colors: IValueProvider<string>) => {\n            const accessors = new RadialAccessors(colors);\n            accessors.series.color = (seriesId: any, series: any) =>\n                series.color ?? colors.get(seriesId);\n            return accessors;\n        };\n\n        function barChartAccessors(\n            colors?: IValueProvider<string>,\n            markers?: IValueProvider<IChartMarker>\n        ) {\n            // TODO: Refactor to accept config reference from arguments not from outer context\n            // @ts-ignore: TS2683: 'this' implicitly has type 'any' because it does not have a type annotation.;\n            // An outer value of 'this' is shadowed by this container.\n            const accessors = barAccessors(this.config, colors, markers);\n            accessors.series.color = (\n                seriesId: string,\n                series: IDataSeries<IAccessors>\n            ) => series.color ?? colors?.get(seriesId);\n            // TODO: Remove custom accessor after fixing NUI-3688 in charts\n            accessors.data.value = (d: any) =>\n                Number.isFinite(d) ? d : d.value;\n            return accessors;\n        }\n\n        const chartTools: Record<\n            ProportionalWidgetChartTypes,\n            IChartTools<IRadialAccessors> | IChartTools\n        > = {\n            [ProportionalWidgetChartTypes.DonutChart]: {\n                preprocessor: radial,\n                gridFunction: radialGrid,\n                rendererFunction: () => new RadialRenderer(),\n                // TODO: replace with correct type\n                accessorFunction: radialChartAccessors as (\n                    colors?: IValueProvider<string>,\n                    markers?: IValueProvider<IChartMarker>\n                ) => IAccessors,\n                scaleFunction: radialScales,\n            },\n            [ProportionalWidgetChartTypes.PieChart]: {\n                preprocessor: radial,\n                gridFunction: radialGrid,\n                rendererFunction: () => new PieRenderer(),\n                // TODO: replace with correct type\n                accessorFunction: radialChartAccessors as (\n                    colors?: IValueProvider<string>,\n                    markers?: IValueProvider<IChartMarker>\n                ) => IAccessors,\n                scaleFunction: radialScales,\n            },\n            [ProportionalWidgetChartTypes.HorizontalBarChart]: {\n                config: { horizontal: true },\n                gridFunction() {\n                    return barGrid(this.config);\n                },\n                rendererFunction: () =>\n                    new BarRenderer({\n                        highlightStrategy: new BarSeriesHighlightStrategy(\"y\"),\n                    }),\n                accessorFunction: barChartAccessors,\n                scaleFunction() {\n                    return barScales(this.config);\n                },\n            },\n            [ProportionalWidgetChartTypes.VerticalBarChart]: {\n                config: { horizontal: false },\n                gridFunction() {\n                    return barGrid(this.config);\n                },\n                rendererFunction: () =>\n                    new BarRenderer({\n                        highlightStrategy: new BarSeriesHighlightStrategy(\"x\"),\n                    }),\n                accessorFunction: barChartAccessors,\n                scaleFunction() {\n                    return barScales(this.config);\n                },\n            },\n        };\n\n        return chartTools[chartType];\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    HostBinding,\n    Inject,\n    Input,\n    KeyValueDiffer,\n    KeyValueDiffers,\n    NgZone,\n    OnChanges,\n    OnDestroy,\n    SimpleChanges,\n    ViewChild,\n    ViewEncapsulation,\n} from \"@angular/core\";\nimport isEqual from \"lodash/isEqual\";\nimport some from \"lodash/some\";\nimport { Subscription } from \"rxjs\";\n\nimport {\n    EventBus,\n    IDataSource,\n    IEvent,\n    LoggerService,\n    UnitConversionService,\n} from \"@nova-ui/bits\";\nimport {\n    Chart,\n    ChartAssist,\n    ChartDonutContentPlugin,\n    ChartPalette,\n    defaultColorProvider,\n    IAccessors,\n    IChartAssistSeries,\n    IChartPalette,\n    IValueProvider,\n    MappedValueProvider,\n    Renderer,\n    Scales,\n    SELECT_DATA_POINT_EVENT,\n    SequentialColorProvider,\n    XYGridConfig,\n} from \"@nova-ui/charts\";\n\nimport { DashboardUnitConversionPipe } from \"../../common/pipes/dashboard-unit-conversion-pipe\";\nimport { CategoryChartUtilService } from \"../../services/category-chart-util.service\";\nimport { INTERACTION } from \"../../services/types\";\nimport {\n    DATA_SOURCE,\n    IHasChangeDetector,\n    PIZZAGNA_EVENT_BUS,\n    WellKnownDataSourceFeatures,\n} from \"../../types\";\nimport { LegendPlacement } from \"../../widget-types/common/widget/legend\";\nimport { IFormatter } from \"../types\";\nimport {\n    IProportionalWidgetData,\n    IProportionalWidgetConfig,\n    ProportionalWidgetChartTypes,\n} from \"./types\";\n\n/** @ignore */\n@Component({\n    selector: \"nui-proportional-widget\",\n    templateUrl: \"./proportional-widget.component.html\",\n    styleUrls: [\"./proportional-widget.component.less\"],\n    encapsulation: ViewEncapsulation.Emulated,\n    standalone: false,\n})\nexport class ProportionalWidgetComponent\n    implements AfterViewInit, OnChanges, IHasChangeDetector, OnDestroy\n{\n    static lateLoadKey = \"ProportionalWidgetComponent\";\n    private static NO_SWITCH_LAYOUT_INTERVAL_SIZE = 20;\n    private static MAX_ROW_LAYOUT_SIZE = 360;\n    private static TICK_LABEL_MAX_WIDTH = 75;\n\n    @Input() public widgetData: IProportionalWidgetData[];\n    @Input() public configuration: IProportionalWidgetConfig;\n    @Input() @HostBinding(\"class\") public elementClass: string;\n    @Input() public seriesToIconMap: { [seriesId: string]: string }; // will be defined using dataSource\n\n    public chartAssist: ChartAssist;\n    public accessors: IAccessors;\n    public donutContentPlugin: ChartDonutContentPlugin | null;\n    public legendUnitLabel: string;\n    public legendFormatter: IFormatter | undefined;\n    public contentFormatter: IFormatter | undefined;\n    public chartFormatterComponentType: string | undefined;\n    public contentFormatterProperties: any;\n    public prioritizedGridRows = {\n        right: false,\n        bottom: false,\n    };\n\n    private differ: KeyValueDiffer<any, any>;\n\n    private renderer: Renderer<IAccessors>;\n    private scales: Scales;\n    private chartPalette: IChartPalette = new ChartPalette(\n        defaultColorProvider()\n    );\n    private proportionalWidgetResizeObserver: ResizeObserver;\n    private unitConversionPipe: DashboardUnitConversionPipe;\n\n    @ViewChild(\"gridContainer\", { static: true })\n    private gridContainer: ElementRef;\n\n    private chartTypeSubscription$: Subscription;\n\n    public get interactive(): boolean {\n        return (\n            this.configuration?.interactive ||\n            this.dataSource?.features?.getFeatureConfig(\n                WellKnownDataSourceFeatures.Interactivity\n            )?.enabled ||\n            false\n        );\n    }\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        private ngZone: NgZone,\n        private kvDiffers: KeyValueDiffers,\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>,\n        @Inject(DATA_SOURCE) private dataSource: IDataSource,\n        private logger: LoggerService,\n        unitConversionService: UnitConversionService\n    ) {\n        this.differ = this.kvDiffers.find(this.prioritizedGridRows).create();\n        this.unitConversionPipe = new DashboardUnitConversionPipe(\n            unitConversionService\n        );\n    }\n\n    // Note: Using this helper method to be able to use\n    // optional method chaining and prevent strict mode error\n    public computeLegendTileValue(legendSeries: unknown): string | undefined {\n        // @ts-ignore: Suppressing series null parameter value error to avoid breaking default flow\n        return this.accessors.data?.value?.(legendSeries, 0, null, null);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        const newChartColors = changes.configuration?.currentValue?.chartColors;\n        const prevChartColors =\n            changes.configuration?.previousValue?.chartColors;\n\n        if (changes.widgetData || !isEqual(newChartColors, prevChartColors)) {\n            this.updateChartColors();\n        }\n\n        if (changes.configuration) {\n            const newChartType =\n                changes.configuration.currentValue.chartOptions.type;\n            const prevChartType =\n                changes.configuration.previousValue &&\n                changes.configuration.previousValue.chartOptions.type;\n\n            // configure the chart\n            if (newChartType && newChartType !== prevChartType) {\n                this.buildChart(newChartType);\n\n                if (this.widgetData) {\n                    this.updateChart();\n                }\n            }\n\n            this.legendFormatter =\n                this.configuration.chartOptions.legendFormatter;\n            this.contentFormatter =\n                this.configuration.chartOptions.contentFormatter;\n            this.chartFormatterComponentType =\n                this.configuration.chartOptions.chartFormatterComponentType;\n\n            this.getContentFormatterProperties();\n\n            this.changeDetector.markForCheck();\n        }\n\n        if (changes.widgetData) {\n            if (this.chartAssist) {\n                this.updateChart();\n                this.getContentFormatterProperties();\n                this.changeDetector.markForCheck();\n            }\n        }\n    }\n\n    public ngAfterViewInit(): void {\n        this.handleGridFlowOnResize();\n    }\n\n    public ngOnDestroy(): void {\n        this.proportionalWidgetResizeObserver?.disconnect();\n        this.chartTypeSubscription$?.unsubscribe();\n    }\n\n    public getContentFormatterProperties(): void {\n        this.contentFormatterProperties = {\n            data: this.widgetData,\n            config: this.configuration,\n            chartAssist: this.chartAssist,\n            properties: this.contentFormatter?.properties,\n        };\n    }\n\n    /** Checks if chart is donut. */\n    public isDonutChart(): boolean {\n        return (\n            this.configuration.chartOptions.type ===\n            ProportionalWidgetChartTypes.DonutChart\n        );\n    }\n\n    /** Checks if chart is radial. */\n    public isRadialChart(): boolean {\n        return (\n            [\n                ProportionalWidgetChartTypes.DonutChart,\n                ProportionalWidgetChartTypes.PieChart,\n            ].indexOf(this.configuration.chartOptions.type) !== -1\n        );\n    }\n\n    /** Checks if legend should be shown. */\n    public hasLegend(): boolean {\n        return (\n            this.configuration.chartOptions.legendPlacement !==\n            LegendPlacement.None\n        );\n    }\n\n    /** Checks if legend should be aligned to right. */\n    public legendShouldBeAlignedRight(): boolean {\n        return (\n            this.configuration.chartOptions.legendPlacement ===\n            LegendPlacement.Right\n        );\n    }\n\n    public onInteraction(data: any): void {\n        if (!this.interactive) {\n            return;\n        }\n\n        this.eventBus.getStream(INTERACTION).next({ payload: { data } });\n    }\n\n    /** Configures the chart options */\n    private buildChart(chartType: ProportionalWidgetChartTypes): void {\n        this.donutContentPlugin = null;\n        const { grid, accessors, renderer, scales, preprocessor } =\n            CategoryChartUtilService.getChartAttributes(\n                chartType,\n                this.chartPalette?.standardColors\n            );\n        // TODO: Refactor this to be able to pass different types of preprocessor to get rid of the any\n        this.chartAssist = new ChartAssist(\n            new Chart(grid),\n            <any>preprocessor,\n            this.chartPalette\n        );\n        this.renderer = renderer;\n        this.accessors = accessors;\n        this.scales = scales;\n        if (this.isDonutChart()) {\n            this.donutContentPlugin = new ChartDonutContentPlugin();\n            this.chartAssist.chart.addPlugin(this.donutContentPlugin);\n        }\n\n        if (\n            this.configuration.chartOptions.type ===\n            ProportionalWidgetChartTypes.HorizontalBarChart\n        ) {\n            this.scales.x.formatters.tick = (\n                value: string | number | undefined\n            ) => this.unitConversionPipe.transform(value);\n            this.applyTickLabelMaxWidths();\n        } else if (\n            this.configuration.chartOptions.type ===\n            ProportionalWidgetChartTypes.VerticalBarChart\n        ) {\n            this.scales.y.formatters.tick = (\n                value: string | number | undefined\n            ) => this.unitConversionPipe.transform(value);\n        }\n\n        this.chartTypeSubscription$?.unsubscribe();\n        this.chartTypeSubscription$ = this.chartAssist.chart\n            .getEventBus()\n            .getStream(SELECT_DATA_POINT_EVENT)\n            .subscribe((event) => {\n                // event payload is a data point from the chart - since we display one data point for every series,\n                // we convert the data point to the original series\n                const series = this.widgetData.find(\n                    (s) => s.id === event.data.seriesId\n                );\n                this.onInteraction(series);\n            });\n    }\n\n    private handleGridFlowOnResize(): void {\n        this.proportionalWidgetResizeObserver = new ResizeObserver(() =>\n            this.onResize()\n        );\n        this.ngZone.runOutsideAngular(() => {\n            this.proportionalWidgetResizeObserver.observe(\n                this.gridContainer.nativeElement\n            );\n        });\n    }\n\n    private applyTickLabelMaxWidths() {\n        const gridConfigAxis = (\n            this.chartAssist.chart.getGrid().config() as XYGridConfig\n        ).axis;\n\n        gridConfigAxis.left.tickLabel.maxWidth =\n            this.configuration.chartOptions.horizontalBarTickLabelConfig\n                ?.maxWidth?.left ??\n            ProportionalWidgetComponent.TICK_LABEL_MAX_WIDTH;\n        gridConfigAxis.right.tickLabel.maxWidth =\n            this.configuration.chartOptions.horizontalBarTickLabelConfig\n                ?.maxWidth?.right ??\n            ProportionalWidgetComponent.TICK_LABEL_MAX_WIDTH;\n    }\n\n    private onResize(): void {\n        if (this.isContainerInNoSwitchLayoutInterval()) {\n            return;\n        }\n\n        switch (this.configuration.chartOptions.legendPlacement) {\n            case LegendPlacement.Bottom:\n                this.prioritizedGridRows.bottom =\n                    this.containerHasRowLayoutWidth();\n                break;\n            case LegendPlacement.Right:\n                this.prioritizedGridRows.right =\n                    this.containerHasRowLayoutWidth();\n                break;\n        }\n\n        if (this.differ.diff(this.prioritizedGridRows)) {\n            this.changeDetector.detectChanges();\n        }\n    }\n\n    private isContainerInNoSwitchLayoutInterval(): boolean {\n        const containerWidth =\n            this.gridContainer.nativeElement.getBoundingClientRect().width;\n        return (\n            containerWidth >\n                ProportionalWidgetComponent.MAX_ROW_LAYOUT_SIZE -\n                    ProportionalWidgetComponent.NO_SWITCH_LAYOUT_INTERVAL_SIZE /\n                        2 &&\n            containerWidth <\n                ProportionalWidgetComponent.MAX_ROW_LAYOUT_SIZE +\n                    ProportionalWidgetComponent.NO_SWITCH_LAYOUT_INTERVAL_SIZE /\n                        2\n        );\n    }\n\n    private containerHasRowLayoutWidth(): boolean {\n        const containerWidth =\n            this.gridContainer.nativeElement.getBoundingClientRect().width;\n        return containerWidth < ProportionalWidgetComponent.MAX_ROW_LAYOUT_SIZE;\n    }\n\n    /** Builds the chart */\n    private updateChart(): void {\n        this.chartAssist.update(\n            CategoryChartUtilService.buildChartSeries(\n                this.widgetData,\n                this.accessors,\n                this.renderer,\n                this.scales\n            )\n        );\n    }\n\n    private updateChartColors(): void {\n        let colorProvider: IValueProvider<string>;\n\n        const dataColors = this.widgetData?.map((v) => v.color);\n        const configurationColors = this.configuration.chartColors;\n\n        if (!this.configuration.prioritizeWidgetColors && some(dataColors)) {\n            colorProvider = this.getDataDriverColorProvider(this.widgetData);\n        } else if (configurationColors) {\n            colorProvider =\n                this.getConfigurationColorProvider(configurationColors);\n        } else {\n            colorProvider = defaultColorProvider();\n        }\n\n        this.chartPalette = new ChartPalette(colorProvider);\n        this.buildChart(this.configuration?.chartOptions.type);\n        if (this.chartAssist) {\n            this.chartAssist.palette = this.chartPalette;\n            this.updateChart();\n        }\n    }\n\n    private getDataDriverColorProvider(\n        widgetData: IChartAssistSeries<IAccessors<any>>[]\n    ): IValueProvider<string> {\n        let colorProvider: IValueProvider<string>;\n\n        const dataColors = widgetData?.map((v) => v.color).filter((v) => !!v);\n\n        if (dataColors.length === widgetData.length) {\n            const colorMap = widgetData.reduce(\n                (acc: { [key: string]: string }, next) => {\n                    acc[next.id] = next.color;\n                    return acc;\n                },\n                {}\n            );\n            colorProvider = new MappedValueProvider<string>(colorMap);\n        } else {\n            const widgetDataWithColor = widgetData.filter(\n                (series) => series.color\n            );\n\n            this.logger.warn(\n                `Not all series have colors set, setting default pallette. Current series color config: ${JSON.stringify(\n                    widgetDataWithColor\n                )}`\n            );\n            colorProvider = defaultColorProvider();\n        }\n\n        return colorProvider;\n    }\n\n    private getConfigurationColorProvider(\n        configurationColors:\n            | string[]\n            | {\n                  [key: string]: string;\n              }\n    ): IValueProvider<string> {\n        let colorProvider: IValueProvider<string>;\n\n        // remove data colors since nui-chart takes them into consideration no matter what\n        if (this.configuration.prioritizeWidgetColors && this.widgetData) {\n            this.widgetData = this.widgetData.map((origin) => {\n                const series = { ...origin };\n                if (series.color) {\n                    delete series.color;\n                }\n                return series;\n            });\n        }\n\n        if (Array.isArray(configurationColors)) {\n            colorProvider = new SequentialColorProvider(configurationColors);\n        } else {\n            const setupColorsLength = Object.keys(configurationColors).length;\n            if (setupColorsLength === this.widgetData?.length) {\n                colorProvider = new MappedValueProvider(configurationColors);\n            } else {\n                // eslint-disable-next-line max-len\n                this.logger.warn(\n                    `Not all series have colors set, setting default pallette. Current series color config: ${JSON.stringify(\n                        configurationColors\n                    )}`\n                );\n                colorProvider = defaultColorProvider();\n            }\n        }\n\n        return colorProvider;\n    }\n\n    public get isEmpty(): boolean {\n        return (\n            !this.widgetData ||\n            this.widgetData.length === 0 ||\n            !this.chartAssist\n        );\n    }\n}\n","<div\n    #gridContainer\n    class=\"w-100 nui-chart-layout flex-grow-1 p-3\"\n    [ngClass]=\"{\n        'prioritize-rows__right': prioritizedGridRows.right,\n        'prioritize-rows__bottom': prioritizedGridRows.bottom,\n        'empty-grid': !(widgetData && widgetData.length > 0 && chartAssist)\n    }\"\n>\n    <div class=\"d-flex chart has-overlay\" *ngIf=\"!isEmpty\">\n        <nui-chart class=\"w-100\" [chart]=\"chartAssist.chart\"></nui-chart>\n        <nui-chart-donut-content\n            *ngIf=\"donutContentPlugin\"\n            class=\"nui-proportional-widget__chart-donut-content\"\n            [plugin]=\"donutContentPlugin\"\n        >\n            <div\n                class=\"h-100 w-100 d-flex justify-content-center align-items-center text-center\"\n            >\n                <div class=\"d-inline-block\" nuiZoomContent [useZoom]=\"false\">\n                    <!-- OLD CONFIG HERE -->\n                    <ng-container\n                        *ngIf=\"!configuration?.chartOptions?.donutContentConfig\"\n                    >\n                        <ng-container\n                            nuiComponentPortal\n                            [componentType]=\"\n                                contentFormatter?.componentType ||\n                                'DonutContentRawFormatterComponent'\n                            \"\n                            [properties]=\"contentFormatterProperties\"\n                            #componentPortal2=\"nuiComponentPortal\"\n                        >\n                            <ng-template\n                                [cdkPortalOutlet]=\"componentPortal2.portal\"\n                                (attached)=\"componentPortal2.attached($event)\"\n                            ></ng-template>\n                        </ng-container>\n                    </ng-container>\n\n                    <!-- NEW CONFIG HERE -->\n                    <ng-container\n                        *ngIf=\"configuration?.chartOptions?.donutContentConfig\"\n                    >\n                        <nui-proportional-donut-content\n                            [widgetData]=\"widgetData\"\n                            [donutConfig]=\"\n                                configuration?.chartOptions?.donutContentConfig\n                            \"\n                            [chartAssist]=\"chartAssist\"\n                        ></nui-proportional-donut-content>\n                    </ng-container>\n                </div>\n            </div>\n        </nui-chart-donut-content>\n    </div>\n    <div\n        class=\"w-100 d-flex legend\"\n        [ngClass]=\"[\n            legendShouldBeAlignedRight() ? 'scrollable' : 'legend-bottom'\n        ]\"\n        *ngIf=\"hasLegend() && chartAssist\"\n    >\n        <nui-legend\n            class=\"w-100 m-auto\"\n            [interactive]=\"false\"\n            (mouseleave)=\"chartAssist.resetVisibleSeries()\"\n            [orientation]=\"\n                legendShouldBeAlignedRight() ? 'vertical' : 'horizontal'\n            \"\n        >\n            <nui-legend-series\n                class=\"proportional-chart__legend-series\"\n                *ngFor=\"\n                    let legendSeries of chartAssist.legendSeriesSet;\n                    trackBy: chartAssist.seriesTrackByFn;\n                    let i = index\n                \"\n                [ngClass]=\"\n                    (prioritizedGridRows.right || prioritizedGridRows.bottom) &&\n                    'description-min-width--unset'\n                \"\n                [isSelected]=\"!chartAssist.isSeriesHidden(legendSeries.id)\"\n                (isSelectedChange)=\"\n                    chartAssist.toggleSeries(legendSeries.id, $event)\n                \"\n                [seriesRenderState]=\"\n                    chartAssist.renderStatesIndex[legendSeries.id]?.state\n                \"\n                (mouseenter)=\"chartAssist.emphasizeSeries(legendSeries.id)\"\n                (click)=\"onInteraction(legendSeries)\"\n                [class.nui-proportional-widget__legend--interactive]=\"\n                    interactive\n                \"\n            >\n                <div\n                    *ngIf=\"\n                        legendFormatter && legendFormatter.componentType;\n                        else legendDefaultTile\n                    \"\n                >\n                    <div description>\n                        <ng-container\n                            nuiComponentPortal\n                            [componentType]=\"legendFormatter.componentType\"\n                            [properties]=\"{ data: widgetData[i] }\"\n                            #componentPortal=\"nuiComponentPortal\"\n                        >\n                            <ng-template\n                                [cdkPortalOutlet]=\"componentPortal.portal\"\n                                (attached)=\"componentPortal.attached($event)\"\n                            ></ng-template>\n                        </ng-container>\n                    </div>\n                </div>\n                <ng-template #legendDefaultTile>\n                    <nui-rich-legend-tile\n                        [value]=\"\n                            computeLegendTileValue(legendSeries.data[0])\n                                | nuiDashboardUnitConversion\n                        \"\n                        [unitLabel]=\"legendUnitLabel\"\n                        [color]=\"\n                            chartAssist.palette.textColors.get(legendSeries.id)\n                        \"\n                        [backgroundColor]=\"\n                            chartAssist.palette.standardColors.get(\n                                legendSeries.id\n                            )\n                        \"\n                    >\n                    </nui-rich-legend-tile>\n\n                    <nui-icon\n                        legendTransclusion\n                        *ngIf=\"\n                            seriesToIconMap && seriesToIconMap[legendSeries.id]\n                        \"\n                        class=\"align-items-center\"\n                        [icon]=\"seriesToIconMap[legendSeries.id]\"\n                    ></nui-icon>\n\n                    <div\n                        description\n                        class=\"description-container d-flex flex-column nui-text-small justify-content-center\"\n                    >\n                        <div\n                            *ngIf=\"!legendSeries.link\"\n                            class=\"description description-primary\"\n                            [ngClass]=\"{\n                                'nui-text-link-small link': interactive\n                            }\"\n                        >\n                            {{ legendSeries.name }}\n                        </div>\n                        <a\n                            class=\"description description-primary nui-text-link-small link\"\n                            (click)=\"$event.stopPropagation()\"\n                            *ngIf=\"legendSeries.link\"\n                            [href]=\"legendSeries.link\"\n                            rel=\"noopener noreferrer\"\n                            [title]=\"legendSeries.name\"\n                        >\n                            {{ legendSeries.name }}\n                        </a>\n                    </div>\n                </ng-template>\n            </nui-legend-series>\n        </nui-legend>\n    </div>\n    <div *ngIf=\"isEmpty\" class=\"is-empty\">\n        <nui-image image=\"no-data-to-show\"></nui-image>\n    </div>\n</div>\n","// © 2023 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    HostBinding,\n    Inject,\n    Input,\n    OnChanges,\n    Optional,\n    SimpleChanges,\n    ViewEncapsulation,\n} from \"@angular/core\";\nimport _isNil from \"lodash/isNil\";\n\nimport { EventBus, IDataSource, IEvent } from \"@nova-ui/bits\";\n\nimport {\n    IRiskScoreConfiguration,\n    IRiskScoreData,\n    IRiskScoreFormatterProperties,\n    IRiskScoreFormattersConfiguration,\n} from \"./types\";\nimport { mapDataToFormatterProperties } from \"../../functions/map-data-to-formatter-properties\";\nimport { INTERACTION } from \"../../services/types\";\nimport {\n    DATA_SOURCE,\n    IHasChangeDetector,\n    PIZZAGNA_EVENT_BUS,\n    WellKnownDataSourceFeatures,\n} from \"../../types\";\nimport { IBroker } from \"../providers/types\";\n\n@Component({\n    selector: \"nui-risk-score-tile\",\n    templateUrl: \"./risk-score-tile.component.html\",\n    styleUrls: [\"./risk-score-tile.component.less\"],\n    encapsulation: ViewEncapsulation.Emulated,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class RiskScoreTileComponent implements IHasChangeDetector, OnChanges {\n    public static lateLoadKey = \"RiskScoreTileComponent\";\n\n    @Input()\n    public widgetData: IRiskScoreData;\n\n    @Input()\n    public syncValuesBroker: IBroker[];\n\n    @Input()\n    public configuration: IRiskScoreConfiguration;\n\n    @Input()\n    public busy = false;\n\n    @HostBinding(\"class\")\n    public elementClass = \"\";\n\n    public formattersProperties: IRiskScoreFormatterProperties;\n    public defaultColor: string = \"var(--nui-color-bg-secondary)\";\n\n    public get interactive(): boolean {\n        return (\n            ((this.configuration?.interactive ||\n                this.dataSource?.features?.getFeatureConfig(\n                    WellKnownDataSourceFeatures.Interactivity\n                )?.enabled) &&\n                !_isNil(this.widgetData?.value)) ||\n            false\n        );\n    }\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        @Optional() @Inject(DATA_SOURCE) public dataSource: IDataSource,\n        @Inject(PIZZAGNA_EVENT_BUS) public eventBus: EventBus<IEvent>\n    ) {}\n\n    public onInteraction(): void {\n        if (!this.interactive) {\n            return;\n        }\n        this.eventBus\n            .getStream(INTERACTION)\n            .next({ payload: { data: this.widgetData } });\n    }\n\n    public getScaleBroker(id: string): IBroker | undefined {\n        if (this.syncValuesBroker) {\n            return this.syncValuesBroker.find((b) => b.id === id);\n        }\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes.configuration) {\n            const formattersConfiguration: IRiskScoreFormattersConfiguration =\n                changes.configuration.currentValue.formatters;\n\n            if (formattersConfiguration) {\n                this.formattersProperties = this.getFormatterProperties(\n                    formattersConfiguration\n                );\n            }\n        }\n\n        if (changes.widgetData) {\n            if (this.configuration?.formatters) {\n                this.formattersProperties = this.getFormatterProperties(\n                    this.configuration.formatters\n                );\n            }\n        }\n    }\n\n    /**\n     * Iterates over formatters and maps their properties from the data\n     *\n     * @param formattersConfiguration\n     */\n    private getFormatterProperties(\n        formattersConfiguration: IRiskScoreFormattersConfiguration\n    ) {\n        const formatterKeys = Object.keys(formattersConfiguration);\n\n        const formattersProperties = formatterKeys.reduce(\n            (acc: IRiskScoreFormatterProperties, key: string) => {\n                const formatterCfg = formattersConfiguration[key]?.formatter;\n                if (formatterCfg) {\n                    acc[key] = {\n                        data: mapDataToFormatterProperties(\n                            formatterCfg,\n                            this.widgetData\n                        ),\n                    };\n                }\n                return acc;\n            },\n            {}\n        );\n\n        return formattersProperties;\n    }\n}\n","<div class=\"w-100 h-100\" nui-busy [busy]=\"busy\">\n    <ng-container *ngIf=\"widgetData?.link\">\n        <a class=\"nui-risk-score-tile-indicator\" [href]=\"widgetData.link\">\n            <ng-container [ngTemplateOutlet]=\"riskScoreContent\"></ng-container>\n        </a>\n    </ng-container>\n\n    <ng-container *ngIf=\"!widgetData?.link\">\n        <div class=\"nui-risk-score-tile-indicator\" (click)=\"onInteraction()\">\n            <ng-container [ngTemplateOutlet]=\"riskScoreContent\"></ng-container>\n        </div>\n    </ng-container>\n</div>\n\n<ng-template #riskScoreContent>\n    <div\n        class=\"nui-risk-score-tile-indicator__background\"\n        [class.nui-risk-score-tile-indicator--interactive]=\"interactive\"\n    ></div>\n    <div\n        class=\"nui-risk-score-tile-indicator__text\"\n        [ngStyle]=\"{\n            color: widgetData?.textColor || defaultColor\n        }\"\n    >\n        <div class=\"nui-risk-score-tile-indicator__zoom-container\">\n            <div\n                class=\"nui-risk-score-tile-indicator__label\"\n                [title]=\"widgetData?.label\"\n            >\n                <span\n                    nuiZoomContent\n                    [useZoom]=\"false\"\n                    [minScale]=\"0.5\"\n                    [scaleIN$]=\"getScaleBroker('label')?.out$\"\n                    [scaleOUT$]=\"getScaleBroker('label')?.in$\"\n                    >{{ widgetData?.label }}</span\n                >\n            </div>\n\n            <div\n                class=\"nui-risk-score-tile-indicator__value\"\n                [style.font-size]=\"widgetData?.fontSize\"\n                [title]=\"widgetData?.value\"\n            >\n                <nui-risk-score\n                    nuiZoomContent\n                    [useZoom]=\"false\"\n                    [scaleIN$]=\"getScaleBroker('value')?.out$\"\n                    [scaleOUT$]=\"getScaleBroker('value')?.in$\"\n                    class=\"nui-risk-score-tile-indicator__score\"\n                    [level]=\"widgetData?.value\"\n                    [minLevel]=\"widgetData?.minValue ?? 0\"\n                    [maxLevel]=\"widgetData?.maxValue ?? 10\"\n                    [title]=\"\n                        widgetData?.useStaticLabel ?? false\n                            ? widgetData?.staticLabel\n                            : widgetData?.value\n                    \"\n                ></nui-risk-score>\n            </div>\n\n            <div\n                class=\"nui-risk-score-tile-indicator__description\"\n                [title]=\"widgetData?.description\"\n            >\n                <div\n                    class=\"nui-risk-score-tile-indicator__description__text\"\n                    nuiZoomContent\n                    [useZoom]=\"false\"\n                    [minScale]=\"0.7\"\n                    [scaleIN$]=\"getScaleBroker('description')?.out$\"\n                    [scaleOUT$]=\"getScaleBroker('description')?.in$\"\n                >\n                    <p>{{ widgetData?.description }}</p>\n                </div>\n            </div>\n        </div>\n    </div>\n</ng-template>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Directive, HostListener, Input } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\n\n@Directive({\n    selector: \"[nuiDelayedMousePresenceDetection]\",\n    standalone: false,\n})\nexport class DelayedMousePresenceDetectionDirective {\n    @Input(\"nuiDelayedMousePresenceDetection\") public enabled: boolean = true;\n    @Input() mousePresentSubject: Subject<boolean>;\n    @Input() delay: number = 500;\n\n    private timeout: NodeJS.Timeout;\n\n    @HostListener(\"mouseenter\") onHostMouseenter(): void {\n        if (!this.enabled) {\n            return;\n        }\n        this.timeout = setTimeout(() => {\n            this.mousePresentSubject.next(true);\n        }, this.delay);\n    }\n\n    @HostListener(\"click\") onHostClick(): void {\n        if (!this.enabled) {\n            return;\n        }\n        this.mousePresentSubject.next(true);\n    }\n\n    @HostListener(\"mouseleave\") onHostMouseleave(): void {\n        if (!this.enabled) {\n            return;\n        }\n        clearTimeout(this.timeout);\n\n        this.mousePresentSubject.next(false);\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\nimport isEqual from \"lodash/isEqual\";\nimport { merge, Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { IEvent, INovaFilteringOutputs } from \"@nova-ui/bits\";\n\nimport { SET_NEXT_PAGE } from \"../../../services/types\";\nimport { IPaginatorState, TableWidgetComponent } from \"../public-api\";\n\n\n@Injectable()\nexport class PaginatorFeatureAddonService {\n    public defaultPaginatorState: IPaginatorState = {\n        page: 1,\n        pageSize: 10,\n        pageSizeSet: [10, 20, 50],\n        total: 0,\n    };\n    public paginatorState: IPaginatorState = this.defaultPaginatorState;\n    private widget: TableWidgetComponent; // TODO: generic widget\n    private reinit$ = new Subject<void>();\n\n    public initPaginator(widget: TableWidgetComponent): void {\n        this.reinit$.next();\n        this.widget = widget;\n        this.setPaginatorState();\n        this.listenPaginatorChanges();\n    }\n\n    public applyFilters(): void {\n        this.widget.dataSource.applyFilters();\n    }\n\n    private registerPaginator() {\n        if (this.widget.dataSource) {\n            this.widget.dataSource.registerComponent({\n                paginator: {\n                    componentInstance: this.widget.paginator,\n                },\n            });\n        }\n    }\n\n    private deregisterPaginator() {\n        if (this.widget.dataSource) {\n            this.widget.dataSource.deregisterComponent?.(\"paginator\");\n        }\n    }\n\n    private setPaginatorState() {\n        const paginatorConfiguration =\n            this.widget.configuration?.paginatorConfiguration;\n\n        if (this.widget.hasPaginator && this.widget.paginator) {\n            this.registerPaginator();\n            // pageSize, pageSizeSet comes from static config\n            const modifiedConfiguration = {\n                pageSize:\n                    paginatorConfiguration?.pageSize ??\n                    this.defaultPaginatorState.pageSize,\n                pageSizeSet:\n                    paginatorConfiguration?.pageSizeSet ??\n                    this.defaultPaginatorState.pageSizeSet,\n            };\n\n            // update only if needed to avoid additional calls to ds\n            if (!isEqual(modifiedConfiguration, {\n                pageSize: this.paginatorState.pageSize,\n                pageSizeSet: this.paginatorState.pageSizeSet,\n            } )) {\n                this.updatePaginatorState(modifiedConfiguration);\n                this.widget.eventBus.getStream(SET_NEXT_PAGE).next({});\n                this.widget.changeDetector.detectChanges();\n            }\n\n            // page and total are dynamically set\n            this.widget.dataSource.outputsSubject\n                .pipe(takeUntil(merge(this.reinit$, this.widget.onDestroy$)))\n                .subscribe((data: INovaFilteringOutputs) => {\n                    this.updatePaginatorState({\n                        total: data.paginator?.total ?? 0,\n                    });\n                });\n        } else {\n            this.deregisterPaginator();\n        }\n    }\n\n    private updatePaginatorState(param: Partial<IPaginatorState>) {\n        this.paginatorState = {\n            ...this.paginatorState,\n            ...param,\n        };\n    }\n\n    private listenPaginatorChanges() {\n        this.widget.eventBus\n            .getStream(SET_NEXT_PAGE)\n            .pipe(takeUntil(merge(this.reinit$, this.widget.onDestroy$)))\n            .subscribe(({ payload }: IEvent<any>) => {\n                if (!payload) {\n                    return;\n                }\n                this.updatePaginatorState({\n                    page: payload.page ?? 1,\n                });\n                this.applyFilters();\n            });\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\nimport isNil from \"lodash/isNil\";\nimport { merge, Subject } from \"rxjs\";\nimport { debounceTime, takeUntil } from \"rxjs/operators\";\n\nimport { IFilter } from \"@nova-ui/bits\";\n\nimport { REFRESH } from \"../../../services/types\";\nimport { PizzagnaLayer } from \"../../../types\";\nimport { TableWidgetComponent } from \"../public-api\";\n\n@Injectable()\nexport class SearchFeatureAddonService {\n    private widget: TableWidgetComponent; // TODO: generic widget\n\n    private searchDebounceTime = 500;\n    private reinit$ = new Subject<void>();\n\n    public initWidget(widget: TableWidgetComponent): void {\n        this.reinit$.next();\n        this.widget = widget;\n        this.initSearch();\n    }\n\n    private initSearch() {\n        this.defineSearch();\n\n        const dsFeaturesChange =\n            this.widget.dataSource?.features?.featuresChanged;\n        if (dsFeaturesChange) {\n            dsFeaturesChange\n                .pipe(takeUntil(merge(this.reinit$, this.widget.onDestroy$)))\n                .subscribe(() => {\n                    this.defineSearch();\n                });\n        }\n    }\n\n    private registerSearch() {\n        if (this.widget.dataSource) {\n            this.widget.dataSource.registerComponent({\n                search: {\n                    componentInstance: {\n                        getFilters: () =>\n                            <IFilter<string>>{\n                                type: \"search\",\n                                value: this.widget.searchValue,\n                            },\n                    },\n                },\n            });\n        }\n    }\n\n    private deregisterSearch() {\n        if (this.widget.dataSource) {\n            this.widget.dataSource.deregisterComponent?.(\"search\");\n        }\n    }\n\n    private defineSearch() {\n        const searchConfiguration =\n            this.widget.configuration?.searchConfiguration;\n        const searchDsConfig =\n            this.widget.dataSource.features?.getFeatureConfig(\"search\");\n\n        this.widget.isSearchEnabled = !!(\n            searchConfiguration?.enabled && searchDsConfig?.enabled\n        );\n\n        if (this.widget.isSearchEnabled) {\n            this.widget.searchValue = searchConfiguration?.searchTerm || \"\";\n            this.registerSearch();\n            this.searchDebounceTime = !isNil(\n                searchConfiguration?.searchDebounce\n            )\n                ? // Note: asserting value to prevent compilation error on unable to infer correct type\n                  (searchConfiguration?.searchDebounce as number)\n                : this.searchDebounceTime;\n            this.watchSearchTerm();\n        } else {\n            this.deregisterSearch();\n        }\n    }\n\n    private watchSearchTerm() {\n        this.widget.searchTerm$\n            .pipe(\n                debounceTime(this.searchDebounceTime),\n                takeUntil(merge(this.reinit$, this.widget.onDestroy$))\n            )\n            .subscribe(() => {\n                this.widget.pizzagnaService.setProperty(\n                    {\n                        pizzagnaKey: PizzagnaLayer.Configuration,\n                        componentId: this.widget.componentId,\n                        propertyPath: [\n                            \"configuration.searchConfiguration.searchTerm\",\n                        ],\n                    },\n                    this.widget.searchValue\n                );\n                this.widget.eventBus.getStream(REFRESH).next({});\n            });\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { ListRange } from \"@angular/cdk/collections\";\nimport { Injectable } from \"@angular/core\";\n// eslint-disable-next-line import/no-deprecated\nimport { merge } from \"rxjs\";\nimport { filter, map, takeUntil, tap } from \"rxjs/operators\";\n\nimport { INovaFilters, nameof } from \"@nova-ui/bits\";\n\nimport { SCROLL_NEXT_PAGE } from \"../../../services/types\";\nimport { TableWidgetComponent } from \"../public-api\";\n\n@Injectable()\nexport class VirtualScrollFeatureAddonService {\n    private widget: TableWidgetComponent; // TODO: generic widget\n\n    public visibleItems: unknown[] = [];\n\n    public initWidget(widget: TableWidgetComponent): void {\n        this.widget = widget;\n    }\n\n    public initVirtualScroll(widget: TableWidgetComponent): void {\n        if (!this.widget) {\n            this.initWidget(widget);\n        }\n\n        if (this.widget.hasVirtualScroll) {\n            this.registerVirtualScroll();\n        } else {\n            this.deregisterVirtualScroll();\n        }\n    }\n\n    private registerVirtualScroll() {\n        if (this.widget.dataSource) {\n            this.widget.dataSource.registerComponent({\n                [nameof<INovaFilters>(\"virtualScroll\")]: {\n                    componentInstance: this.widget.viewportManager,\n                },\n            });\n        }\n    }\n\n    private deregisterVirtualScroll() {\n        if (this.widget.dataSource) {\n            this.widget.dataSource.deregisterComponent?.(\n                nameof<INovaFilters>(\"virtualScroll\")\n            );\n        }\n    }\n\n    /**\n     * Subscribe to virtual scroll rendered items and fetches next items\n     */\n    public subscribeToVirtualScroll(): void {\n        if (!this.widget.vscrollViewport) {\n            return;\n        }\n\n        // Note: Using this additional stream to pass the visible range to\n        // the table and trigger change detection on range change and table data update.\n        // eslint-disable-next-line import/no-deprecated\n        merge(\n            this.widget.vscrollViewport.renderedRangeStream,\n            this.widget.tableUpdate$.pipe(\n                map(() => this.widget.vscrollViewport?.getRenderedRange())\n            )\n        )\n            .pipe(\n                tap((range: ListRange | undefined) => {\n                    this.visibleItems = this.widget.tableData.slice(\n                        range?.start,\n                        range?.end\n                    );\n                    // Since we're using onPush strategy we should trigger CD manually to ensure that visible items are updated properly\n                    this.widget.changeDetector.detectChanges();\n                }),\n                takeUntil(this.widget.onDestroy$)\n            )\n            .subscribe();\n\n        this.widget.viewportManager\n            .setViewport(this.widget.vscrollViewport)\n            .observeNextPage$({\n                pageSize: this.widget.range,\n                emitFirstPage: true,\n            })\n            .pipe(\n                // Note: A special check to keep our server-client-side sorting in place\n                filter(\n                    (range) =>\n                        range.end >=\n                        (this.widget.vscrollViewport?.getDataLength() ?? 0)\n                ),\n                tap((range) =>\n                    this.widget.zone.run(() => {\n                        // TODO: Remove \"page\" in V10. Compute page on datasource level. - NUI-5830\n                        // @ts-ignore: Provide a proper interface to DS\n                        this.widget.dataSource.page =\n                            range.end / (range.end - range.start);\n                        this.widget.eventBus\n                            .getStream(SCROLL_NEXT_PAGE)\n                            .next({});\n                        this.widget.changeDetector.detectChanges();\n                    })\n                ),\n                takeUntil(this.widget.onDestroy$)\n            )\n            .subscribe();\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ITableSelectionConfigDisabled,\n    ITableSelectionConfigEnabled,\n    TableSelectionConfig,\n    TableSelectionMode,\n} from \"@nova-ui/bits\";\n\nimport { IFormatter } from \"../types\";\n\nexport interface ITableWidgetColumnConfig {\n    id: string;\n    label: string;\n    /**\n     * Possibility to show or hide column without removing it\n     */\n    isActive?: boolean;\n    /**\n     * Formatter configuration\n     */\n    formatter?: IFormatter;\n    /**\n     * Width of the column\n     */\n    width?: number;\n    /**\n     * If column is sortable\n     */\n    sortable?: boolean;\n}\n\nexport interface ITableWidgetConfig {\n    reorderable?: boolean;\n    columns: Array<ITableWidgetColumnConfig>;\n    sortable?: boolean;\n    sorterConfiguration: ITableWidgetSorterConfig;\n    /**\n     * Allows to choose row selection behavior of a table.\n     * Can be None | Multi | Single | Radio.\n     */\n    selectionConfiguration?: TableWidgetSelectionConfig;\n    /**\n     * @deprecated Use scrollType and set it to \"infinite\" instead\n     */\n    hasVirtualScroll?: boolean;\n    scrollType?: ScrollType;\n    /**\n     * Makes table rows interactive.\n     * Disabled if 'selectable' is set to true.\n     */\n    interactive?: boolean;\n    headerTooltipsEnabled?: boolean;\n    scrollActivationDelayMs?: number;\n    /**\n     * Selectors for target elements to be ignored for row click.\n     *\n     * Default value [\"button\", \"input[type='button']\", \"a[href]\"]\n     */\n    interactionIgnoredSelectors?: string[];\n\n    searchConfiguration?: {\n        enabled: boolean;\n        searchTerm?: string;\n        searchDebounce?: number;\n        maxSearchLength?: number;\n    };\n\n    paginatorConfiguration?: ITableWidgetPaginatorConfig;\n}\n\nexport interface ITableWidgetSorterConfig {\n    descendantSorting: boolean;\n    sortBy: string;\n}\n\nexport interface ITableWidgetPaginatorConfig {\n    pageSizeSet?: number[];\n    pageSize?: number;\n}\n\nexport interface IPaginatorState {\n    page: number;\n    pageSize: number;\n    pageSizeSet: number[];\n    total: number;\n}\n\nexport enum ScrollType {\n    virtual = \"virtual\",\n    paginator = \"paginator\",\n    default = \"default\",\n}\n\ninterface ITableWidgetSelectionConfigEnabled\n    extends ITableSelectionConfigEnabled {\n    /**\n     * Property name that is unique.\n     * Needs to be set in order for selection to work in combination with filtering.\n     *\n     * Using property that is not unique across table data will result in a selection\n     * of all rows with the same column value at once.\n\n     @default \"id\"\n     */\n    trackByProperty?: string;\n    /**\n     * If clicking on row should select it.\n     * True if selectionMode is set to \"single\".\n     * @default false\n     */\n    clickableRow?: boolean;\n    /**\n     * Controls if the dropdown is needed for selection on other pages\n     * Only available for the pagination\n     */\n    allPages?: boolean;\n}\n\ntype ITableWidgetSelectionConfigDisabled = ITableSelectionConfigDisabled;\n\nexport type TableWidgetSelectionConfig =\n    | ITableWidgetSelectionConfigEnabled\n    | ITableSelectionConfigDisabled;\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { CdkVirtualScrollViewport } from \"@angular/cdk/scrolling\";\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    HostBinding,\n    Inject,\n    Input,\n    NgZone,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Optional,\n    QueryList,\n    signal,\n    SimpleChange,\n    SimpleChanges,\n    ViewChild,\n    ViewChildren,\n} from \"@angular/core\";\nimport get from \"lodash/get\";\nimport isEqual from \"lodash/isEqual\";\nimport omit from \"lodash/omit\";\n// eslint-disable-next-line import/no-deprecated\nimport { BehaviorSubject, merge, Observable, of, Subject } from \"rxjs\";\n// eslint-disable-next-line import/no-deprecated\nimport { filter, map, take, takeUntil, tap } from \"rxjs/operators\";\n\nimport {\n    DEFAULT_INTERACTIVE_ELEMENTS,\n    EventBus,\n    IDataField,\n    IDataSource,\n    IEvent,\n    IFilter,\n    ISelection,\n    ISortedItem,\n    LoggerService,\n    PaginatorComponent,\n    SelectorService,\n    SorterDirection,\n    TableAlignmentOptions,\n    TableComponent,\n    TableRowComponent,\n    TableSelectionMode,\n    VirtualViewportManager,\n} from \"@nova-ui/bits\";\n\nimport { PizzagnaService } from \"../../pizzagna/services/pizzagna.service\";\nimport { TableFormatterRegistryService } from \"../../services/table-formatter-registry.service\";\nimport {\n    CHANGE_SELECTION,\n    INTERACTION,\n    REFRESH,\n    SELECTED_ITEMS,\n    SELECTION,\n    SET_NEXT_PAGE,\n    WIDGET_READY,\n    WIDGET_RESIZE,\n} from \"../../services/types\";\nimport { WidgetConfigurationService } from \"../../services/widget-configuration.service\";\nimport {\n    DATA_SOURCE,\n    PIZZAGNA_EVENT_BUS,\n    PizzagnaLayer,\n    WellKnownDataSourceFeatures,\n} from \"../../types\";\nimport { ITableFormatterDefinition } from \"../types\";\nimport { PaginatorFeatureAddonService } from \"./addons/paginator-feature-addon.service\";\nimport { SearchFeatureAddonService } from \"./addons/search-feature-addon.service\";\nimport { VirtualScrollFeatureAddonService } from \"./addons/virtual-scroll-feature-addon.service\";\nimport {\n    ITableWidgetColumnConfig,\n    ITableWidgetConfig,\n    ScrollType,\n} from \"./types\";\n\n/**\n * @ignore\n */\n@Component({\n    selector: \"nui-table-widget\",\n    templateUrl: \"./table-widget.component.html\",\n    styleUrls: [\"./table-widget.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        SearchFeatureAddonService,\n        VirtualScrollFeatureAddonService,\n        PaginatorFeatureAddonService,\n    ],\n    host: {\n        // Note: Moved here from configuration to ensure that consumers will not override it.\n        // Used to prevent table overflowing preview container in the edit/configuration mode.\n        \"[class.table-widget-fullwidth]\": \"true\",\n    },\n    standalone: false,\n})\nexport class TableWidgetComponent\n    implements AfterViewInit, OnChanges, OnDestroy, OnInit\n{\n    static lateLoadKey = \"TableWidgetComponent\";\n\n    @Input() public widgetData: any[];\n    @Input() public componentId: string;\n    @Input() public configuration: ITableWidgetConfig;\n    @Input() public dataFields: IDataField[];\n    @Input() public totalItems: number;\n    // 70 px stands for widget header and margins\n    @Input() public indentFromTop: number = 70;\n    @Input() public sortable: boolean = true;\n    @Input() public delayedMousePresenceDetectionEnabled: boolean = true;\n    @Input() @HostBinding(\"class\") public elementClass: string;\n    public tableData: any[] = [];\n    public headers: string[];\n    public sortedColumn: ISortedItem;\n    public columns: ITableWidgetColumnConfig[] = [];\n    public columnsWidthMap: Map<string, number | undefined> = new Map<\n        string,\n        number | undefined\n    >();\n    public scrollType: ScrollType = ScrollType.virtual;\n    public tableContainerHeight: number;\n    public isSearchEnabled: boolean = false;\n    public searchTerm$ = new Subject<string>();\n    public searchValue: string;\n    public onDestroy$: Subject<void> = new Subject<void>();\n    public tableUpdate$: Subject<void> = new Subject<void>();\n    public mousePresent$: BehaviorSubject<boolean> =\n        new BehaviorSubject<boolean>(false);\n    public rowHeight: number = 24;\n    public selection: ISelection = {\n        isAllPages: false,\n        include: [],\n        exclude: [],\n    };\n    @ViewChild(\"widgetTable\") table: TableComponent<any>;\n    @ViewChild(\"paginator\") paginator: PaginatorComponent;\n    @ViewChild(CdkVirtualScrollViewport)\n    vscrollViewport?: CdkVirtualScrollViewport;\n    @ViewChildren(TableRowComponent, { read: ElementRef })\n    tableRows: QueryList<ElementRef>;\n    private sortFilter: ISortedItem;\n    private totalPages: number = 0;\n    private lastPageFetched: number = 0;\n    public isBusy: boolean = this.lastPageFetched !== this.totalPages;\n    private sortableSet: Record<string, boolean> = {};\n    private formatters: {\n        version: string;\n        items: Record<string, ITableFormatterDefinition>;\n    };\n    private tableWidgetHeight: number;\n    private readonly defaultColumnAlignment: TableAlignmentOptions = \"left\";\n    private idle: boolean = false;\n    public isSearchLimitWarningDisplayed = signal(false);\n    private readonly defaultMaxSearchLength: number = 2000;\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) public eventBus: EventBus<IEvent>,\n        @Optional() @Inject(DATA_SOURCE) public dataSource: IDataSource,\n        @Optional()\n        private widgetConfigurationService: WidgetConfigurationService,\n        public changeDetector: ChangeDetectorRef,\n        public pizzagnaService: PizzagnaService,\n        public viewportManager: VirtualViewportManager,\n        public zone: NgZone,\n        private el: ElementRef,\n        private logger: LoggerService,\n        private searchAddon: SearchFeatureAddonService,\n        public paginatorAddon: PaginatorFeatureAddonService,\n        public virtualScrollAddon: VirtualScrollFeatureAddonService,\n        private formattersRegistryService: TableFormatterRegistryService,\n        private selectorService: SelectorService\n    ) {}\n\n    public get headerTooltipsEnabled(): boolean {\n        // Note: If tooltip state is not provided treat is as true;\n        return this.configuration.headerTooltipsEnabled ?? true;\n    }\n\n    private _scrollBuffer: number = 0;\n\n    public set scrollBuffer(value: number) {\n        if (value > 100 || value < 0) {\n            throw new Error(\n                \"Invalid scroll buffer provided. Required range 1..100\"\n            );\n        }\n        this._scrollBuffer = value;\n    }\n\n    private _range: number;\n\n    public get range(): number {\n        return this.getTableScrollRange();\n    }\n\n    @Input()\n    public set range(value: number) {\n        this._range = value;\n    }\n\n    public get interactive(): boolean {\n        return (\n            this.configuration?.interactive ??\n            this.dataSource?.features?.getFeatureConfig(\n                WellKnownDataSourceFeatures.Interactivity\n            )?.enabled ??\n            false\n        );\n    }\n\n    public get clickableRow(): boolean {\n        const configuration = this.configuration?.selectionConfiguration;\n        return (\n            !!configuration?.enabled &&\n            (configuration.clickableRow ||\n                configuration.selectionMode === TableSelectionMode.Single)\n        );\n    }\n\n    public get hasVirtualScroll(): boolean {\n        return this.scrollType === ScrollType.virtual;\n    }\n\n    public get hasPaginator(): boolean {\n        return this.scrollType === ScrollType.paginator;\n    }\n\n    public get searchLimitMaxLength(): number {\n        return this.configuration?.searchConfiguration?.maxSearchLength ?? this.defaultMaxSearchLength;\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.dataFields) {\n            if (this.dataFields?.length) {\n                this.setSortableSet();\n            }\n        }\n\n        if (changes.widgetData || changes.configuration || changes.dataFields) {\n            this.updateTable();\n            // Note: CDK Viewport does not have a proper mechanism to identify the changes and trigger checkViewportSize\n            // we have to do it manually. Using optional chaining because vscrollViewport can be unavailable at initialization.\n            // Related issue: https://github.com/angular/components/issues/10117\n            this.vscrollViewport?.checkViewportSize();\n        }\n\n        if (changes.configuration) {\n            this.resolveSortBy(changes);\n            this.resolveScrollType(changes);\n            this.resolveSearch(changes);\n        }\n\n        if (changes.totalItems) {\n            this.totalPages = Math.floor((this.totalItems ?? 0) / this.range);\n        }\n    }\n\n    public resolveScrollType(changes: SimpleChanges): void {\n        // Since removing \"hasVirtualScroll\" from configuration would cause breaking changes, it is used as primary source of truth\n        const newHasVirtualScroll = get(\n            changes,\n            \"configuration.currentValue.hasVirtualScroll\",\n            true\n        ) as boolean;\n\n        const scrollType = get(\n            changes,\n            \"configuration.currentValue.scrollType\",\n            ScrollType.virtual\n        ) as ScrollType;\n\n        const newScrollType = newHasVirtualScroll ? ScrollType.virtual : scrollType;\n        const scrollTypeActuallyChanged = newScrollType !== this.scrollType;\n        this.scrollType = newScrollType;\n\n        if (scrollTypeActuallyChanged) {\n            this.initPrefetchAddon();\n        }\n\n        if (this.scrollTypeChanged(changes.configuration)) {\n            this.dataSource.applyFilters();\n        }\n    }\n\n    public ngOnInit(): void {\n        if (this.dataSource) {\n            // Since the sortFilter is not initialized, we have to retrieve and set the correct filter value from the configuration before registering it\n            this.setSortFilter();\n            this.registerSorter();\n        }\n    }\n\n    public ngAfterViewInit(): void {\n        if (!this.dataSource) {\n            return;\n        }\n\n        this.dataSource.busy\n            ?.pipe(\n                // eslint-disable-next-line import/no-deprecated\n                tap((isBusy) => (this.isBusy = isBusy)),\n                takeUntil(this.onDestroy$)\n            )\n            .subscribe();\n        this.initPrefetchAddon();\n        this.searchAddon.initWidget(this);\n\n        const tableHeightChanged$: Observable<number> = this.eventBus\n            .getStream(WIDGET_RESIZE)\n            .pipe(\n                filter(\n                    (event) =>\n                        event.payload?.widgetId?.toString() ===\n                        this.widgetConfigurationService.getWidget().id\n                ),\n                // eslint-disable-next-line import/no-deprecated\n                map((event) => event.payload?.height ?? 0)\n            );\n\n        // subscribing to widget resize event from dashboard and update virtual scroll viewport size\n        tableHeightChanged$\n            .pipe(takeUntil(this.onDestroy$))\n            .subscribe((height) => {\n                this.tableContainerHeight = height - this.indentFromTop;\n                this.vscrollViewport?.checkViewportSize();\n                this.changeDetector.detectChanges();\n            });\n\n        // Note: Secondary stream used to trigger widget ready event when table is properly displayed and we can start\n        // loading data for our virtual scroll\n        // setTimeout is needed because this.el.nativeElement.getBoundingClientRect().height is 0  when it switches components from\n        // fallback component to table widget and it needs to have height\n        setTimeout(() => {\n            // eslint-disable-next-line import/no-deprecated\n            merge(\n                of(this.range * this.rowHeight),\n                tableHeightChanged$,\n                of(this.el.nativeElement.getBoundingClientRect().height)\n            )\n                .pipe(\n                    filter((value) => !!value),\n                    take(1),\n                    // eslint-disable-next-line import/no-deprecated\n                    tap((value) => {\n                        this.tableWidgetHeight = value;\n                        if (this.hasVirtualScroll) {\n                            this.virtualScrollAddon.subscribeToVirtualScroll();\n                        }\n                        this.eventBus.getStream(WIDGET_READY).next({});\n                    })\n                )\n                .subscribe();\n        });\n\n        this.eventBus\n            .getStream(CHANGE_SELECTION)\n            .pipe(takeUntil(this.onDestroy$))\n            .subscribe(({ payload: selection }) => {\n                if (selection) {\n                    this.selection = selection;\n                } else {\n                    this.logger.warn(\n                        `widget CHANGE_SELECTION, ${this.componentId} has received the incorrect selection object`\n                    );\n                }\n            });\n    }\n\n    public ngOnDestroy(): void {\n        this.onDestroy$.next();\n        this.onDestroy$.complete();\n        this.tableUpdate$.complete();\n        this.searchTerm$?.complete();\n\n        // erase the error status when this component gets destroyed to prevent an error status leak when changing data sources\n        this.pizzagnaService.setProperty(\n            {\n                componentId: \"bodyContent\",\n                propertyPath: [\"fallbackKey\"],\n                pizzagnaKey: PizzagnaLayer.Data,\n            },\n            undefined\n        );\n    }\n\n    /** Checks if table should be displayed */\n    public shouldDisplayTable(): boolean {\n        const columnsCondition = this.columns.length > 0;\n        const dataCondition = this.tableData?.length > 0;\n\n        return this.isSearchEnabled ||\n            (this.hasVirtualScroll && (this.isBusy || this.idle))\n            ? columnsCondition\n            : columnsCondition && dataCondition;\n    }\n\n    public dataTrackBy(): (index: any, item: any) => any {\n        const configuration = this?.configuration?.selectionConfiguration;\n        const trackByProperty =\n            (configuration?.enabled && configuration.trackByProperty) || \"id\";\n\n        // we are returning a function here because the scope of \"this\" changes once it's passed\n        // to the table component and are therefore unable to access the configuration in its body\n        return (index: number, item: any): any => {\n            // selection uses a set of the columns in prior of selection correct data id we need to use record\n            if (item[\"__record\"]) {\n                item = item[\"__record\"];\n            }\n            return item ? item[trackByProperty] : index;\n        };\n    }\n\n    public columnTrackBy(\n        index: number,\n        item: ITableWidgetColumnConfig\n    ): string {\n        return item.id;\n    }\n\n    /**\n     * Handles updating of columns.\n     * @param configuration\n     */\n    public updateColumns(configuration: ITableWidgetConfig): void {\n        this.headers = configuration.columns\n            .filter((item) => item.isActive)\n            .map((item) => item.id);\n        const allColumnsHaveWidthSpecified = configuration.columns.every(\n            (column) => Boolean(column.width)\n        );\n\n        const columns = configuration.columns.map((column, index, array) => {\n            this.columnsWidthMap.set(column.id, column.width);\n            if (allColumnsHaveWidthSpecified) {\n                const lastColumn = array[array.length - 1];\n                this.columnsWidthMap.set(lastColumn.id, undefined);\n            }\n            return {\n                ...column,\n                sortable:\n                    this.sortableSet[\n                        column?.formatter?.properties?.dataFieldIds?.value\n                    ] ?? true,\n            };\n        });\n\n        if (columns.length > 0 && allColumnsHaveWidthSpecified) {\n            this.logger.warn(\n                `Cannot set width for all columns. Resetting last column width.`\n            );\n        }\n\n        if (this.columns.length !== columns.length) {\n            this.columns = [...columns];\n        } else {\n            // This Object.assign is important. It helps to track changes in column header names\n            this.columns.forEach((c, i) => {\n                Object.assign(c, columns[i], {});\n            });\n        }\n    }\n\n    /**\n     * Takes widgetData from back-end, columns which are provided in table widget config and dataFields and maps them to data-format\n     * which is acceptable by table component.\n     * Also it can merge multiple data fields into one column. If you provide more than one dataFieldId in your\n     * widget config, they will be merged to an object with needed data. This data can be passed to formatter and displayed\n     * in one column.\n     * @param widgetData\n     * @param columns\n     * @param dataFields\n     * @returns any[]\n     */\n    public mapTableData(\n        widgetData: any[],\n        columns: ITableWidgetColumnConfig[],\n        dataFields: IDataField[]\n    ): any[] {\n        if (!dataFields || dataFields.length === 0) {\n            this.logger.warn(\n                \"There are no data fields defined, so table data cannot be displayed.\"\n            );\n            return [];\n        }\n\n        return widgetData.map((record) => {\n            const row = columns.reduce(\n                (result: Record<string, any>, column) => {\n                    const dataFieldIds =\n                        column.formatter?.properties?.dataFieldIds;\n                    if (!dataFieldIds) {\n                        return result;\n                    }\n\n                    const data = Object.keys(dataFieldIds).reduce(\n                        (mapping: Record<string, any>, next) => {\n                            mapping[next] = record[dataFieldIds[next]];\n                            return mapping;\n                        },\n                        {}\n                    );\n\n                    result[column.id] = {\n                        data,\n                        ...omit(column.formatter?.properties, \"dataFieldIds\"),\n                    };\n\n                    return result;\n                },\n                {}\n            );\n\n            // we want to include original record for row interaction\n            row.__record = record;\n\n            return row;\n        });\n    }\n\n    /**\n     * Handles change of sorting. Gets sorted column from columns array.\n     * @param event\n     */\n    public onSortOrderChanged(event: ISortedItem): void {\n        this.sortedColumn = event;\n        const columnToSort = this.columns.find(\n            (column) => column.id === event.sortBy\n        );\n        if (!columnToSort) {\n            return;\n        }\n\n        const dataFieldIds = columnToSort.formatter?.properties?.dataFieldIds;\n        const sortField = dataFieldIds?.value;\n        if (!sortField) {\n            return;\n        }\n        const newSortFilter = {\n            sortBy: sortField,\n            direction: event.direction,\n        };\n        if (isEqual(newSortFilter, this.sortFilter)) {\n            return;\n        }\n        this.sortFilter = newSortFilter;\n\n        // Note: Since we're relying on the CDK Viewport internal logic to perform data load\n        // we have to move to the start of the range for dataSource to take correct range,\n        // if we will keep old data user can think (NUI-5333) that data is already reloaded.\n        // So we're flushing the old data and waiting for new one to avoid confusion.\n        this.flushTableData();\n\n        this.eventBus.getStream(REFRESH).next({});\n    }\n\n    public onSelectionChange(event: ISelection): void {\n        this.selection = event;\n        this.eventBus.getStream(SELECTED_ITEMS).next({\n            payload: this.selectorService.getSelectedItems(\n                this.selection,\n                this.widgetData,\n                (a, b) => this.dataTrackBy()(0, a) === b\n            ),\n            id: this.componentId,\n        });\n        this.eventBus.getStream(SELECTION).next({ payload: this.selection });\n    }\n\n    public onInteraction(row: any, event: MouseEvent): void {\n        if (\n            !this.interactive ||\n            this.configuration.selectionConfiguration?.enabled\n        ) {\n            // allowing interactive and selection at the same time would trigger both\n            // events when clicking on a row (not checkbox/radio)\n            return;\n        }\n\n        const ignoredSelectors =\n            this.configuration.interactionIgnoredSelectors ||\n            DEFAULT_INTERACTIVE_ELEMENTS;\n\n        // avoid emitting events when an ignored element was clicked\n        if ((event.target as HTMLElement).closest(ignoredSelectors.join(\",\"))) {\n            return;\n        }\n\n        this.eventBus\n            .getStream(INTERACTION)\n            .next({ payload: { data: row.__record } });\n    }\n\n    public onSearchInputChanged(searchTerm: string): void {\n        if (searchTerm?.length > this.searchLimitMaxLength) {\n            this.isSearchLimitWarningDisplayed.set(true);\n            return;\n        }\n\n        this.isSearchLimitWarningDisplayed.set(false);\n        this.searchValue = searchTerm;\n        this.searchTerm$.next(\"\");\n        this.selection = {\n            include: [],\n            exclude: [],\n            isAllPages: false,\n        };\n    }\n\n    public getColumnAlignment(\n        column: ITableWidgetColumnConfig\n    ): TableAlignmentOptions {\n        // Note: In case we have provided formatters by old manner (via config)\n        // we don't have to proceed with calculations\n        if (\n            !column?.formatter?.componentType ||\n            this.formattersRegistryService.isEmpty\n        ) {\n            return this.defaultColumnAlignment;\n        }\n\n        // Note: We don't want to invoke getFormattersMap() on every change detection cycle\n        // but only when it was changed\n        if (\n            this.formatters?.version !==\n            this.formattersRegistryService.stateVersion\n        ) {\n            this.formatters = {\n                // Transforming array into map\n                items: this.formattersRegistryService.getItems().reduce(\n                    (prev, next) => ({\n                        ...prev,\n                        [next.componentType]: next,\n                    }),\n                    {}\n                ),\n                version: this.formattersRegistryService.stateVersion,\n            };\n        }\n\n        return (\n            this.formatters.items[column.formatter.componentType]?.alignment ||\n            this.defaultColumnAlignment\n        );\n    }\n\n    private setSortFilter() {\n        if (this.configuration) {\n            const sortBy = this.configuration.sorterConfiguration?.sortBy;\n            const columnValue = this.configuration.columns?.find(\n                (column) => column.id === sortBy\n            )?.formatter?.properties?.dataFieldIds?.value;\n\n            this.sortFilter = {\n                direction: this.configuration.sorterConfiguration\n                    ?.descendantSorting\n                    ? SorterDirection.descending\n                    : SorterDirection.ascending,\n                sortBy: columnValue,\n            };\n        }\n    }\n\n    /**\n     * Checks if column id has changed or if sorting order has changed\n     * @param configuration\n     */\n    private isSortByUpdated(configuration: SimpleChange) {\n        const oldSorterConfiguration =\n            configuration.previousValue?.sorterConfiguration;\n        const newSorterConfiguration =\n            configuration.currentValue.sorterConfiguration;\n        const oldSortById = oldSorterConfiguration?.sortBy;\n        const newSortById = newSorterConfiguration?.sortBy;\n        if (!newSortById) {\n            return Boolean(oldSortById);\n        }\n\n        const equalSortingState =\n            oldSortById === newSortById &&\n            newSorterConfiguration.descendantSorting ===\n                oldSorterConfiguration.descendantSorting;\n\n        return !equalSortingState;\n    }\n\n    /**\n     * Updates table columns and maps table data.\n     */\n    private updateTable() {\n        if (this.widgetData && this.dataFields && this.configuration.columns) {\n            this.updateColumns(this.configuration);\n            this.idle = false;\n            this.tableData = this.mapTableData(\n                this.widgetData,\n                this.configuration.columns,\n                this.dataFields\n            );\n            this.tableUpdate$.next();\n            this.changeDetector.detectChanges();\n        }\n    }\n\n    /**\n     * Registers sorter filter.\n     */\n    private registerSorter() {\n        this.dataSource.registerComponent({\n            sorter: {\n                componentInstance: {\n                    getFilters: () =>\n                        <IFilter<ISortedItem>>{\n                            type: \"sorter\",\n                            value: this.sortFilter,\n                        },\n                },\n            },\n        });\n    }\n\n    private setSortableSet() {\n        this.sortableSet = {};\n        this.dataFields.forEach((dataField) => {\n            this.sortableSet[dataField.id] = dataField.sortable ?? true;\n        });\n    }\n\n    private flushTableData(): void {\n        this.idle = true;\n        this.tableData = [];\n    }\n\n    private scrollTypeChanged(configurationChange: SimpleChange): boolean {\n        return (\n            !!configurationChange.previousValue &&\n            configurationChange.previousValue.scrollType !==\n                configurationChange.currentValue.scrollType\n        );\n    }\n\n    private getTableScrollRange(): number {\n        // Note: To work properly virtual viewport should be scrollable\n        // to ensure that container will be scrollable we're adding 50% more items\n        // Ex: Viewport height: 100px, itemSize: 20px => 5 (range) in current configuration the viewport\n        // will not be scrollable/work properly because all the items fits the screen.\n        // We're adding 50% more items and in this case, we're covered even the user provides 0% buffer.\n        const internalBuffer: number = 2;\n        const scrollBuffer: number = (this._scrollBuffer ?? 0) / 100 + 1;\n\n        if (this._range) {\n            // Note: In case user provided a range we don't need\n            // to add our internal buffer. Totally relying on user calculus\n            return Math.floor(this._range * scrollBuffer);\n        }\n\n        return Math.floor(\n            (this.tableWidgetHeight / this.rowHeight) *\n                internalBuffer *\n                scrollBuffer\n        );\n    }\n\n    public onPagerAction(page: any): void {\n        this.eventBus\n            .getStream(SET_NEXT_PAGE)\n            .next({ payload: page, id: this.componentId });\n    }\n\n    private initPrefetchAddon() {\n        if (this.hasVirtualScroll) {\n            this.virtualScrollAddon.initVirtualScroll(this);\n        } else if (this.hasPaginator) {\n            this.paginatorAddon.initPaginator(this);\n        } else {\n            this.virtualScrollAddon.initVirtualScroll(this);\n        }\n    }\n\n    private resolveSortBy(changes: SimpleChanges): void {\n        // Note: We don't have to trigger sorting in case sortable flag is false.\n        // Note: Using true as a default sortable value to maintain backward compatibility\n        if (\n            this.isSortByUpdated(changes.configuration) &&\n            (changes.configuration.currentValue.sortable ?? true)\n        ) {\n            const sortedColumn = {\n                direction: changes.configuration.currentValue\n                    .sorterConfiguration.descendantSorting\n                    ? SorterDirection.descending\n                    : SorterDirection.ascending,\n                sortBy: changes.configuration.currentValue.sorterConfiguration\n                    .sortBy,\n            };\n            this.onSortOrderChanged(sortedColumn);\n        }\n    }\n\n    private resolveSearch(changes: SimpleChanges) {\n        const prev = omit(\n            (changes.configuration.previousValue as ITableWidgetConfig)\n                ?.searchConfiguration,\n            \"searchTerm\"\n        );\n        const curr = omit(\n            (changes.configuration.currentValue as ITableWidgetConfig)\n                ?.searchConfiguration,\n            \"searchTerm\"\n        );\n        if (!isEqual(curr, prev)) {\n            this.searchAddon.initWidget(this);\n        }\n    }\n}\n","<div\n    class=\"h-100 d-flex justify-content-center align-items-center\"\n    *ngIf=\"!shouldDisplayTable()\"\n>\n    <nui-image image=\"no-data-to-show\"></nui-image>\n</div>\n<!-- h-100 gets added only when there's data to show to prevent an extra scrollbar when the table is empty -->\n<!-- Using invisible class instead of *ngIf as an non-virtual-scroll breakable way to hide the content. -->\n<div\n    class=\"nui-table-widget d-flex flex-column\"\n    [ngClass]=\"shouldDisplayTable() ? 'h-100' : 'invisible'\"\n>\n    <div class=\"mr-2 mb-2 flex-row\" *ngIf=\"isSearchEnabled\">\n        <nui-search\n            class=\"unlimited-width d-flex justify-content-end flex-grow-1\"\n            [value]=\"searchValue\"\n            (inputChange)=\"onSearchInputChanged($event)\"\n            (cancel)=\"onSearchInputChanged($event)\"\n        >\n        </nui-search>\n        @if (isSearchLimitWarningDisplayed()) {\n            <nui-message\n                class=\"nui-table-search-limit-warning\"\n                type=\"warning\"\n                [allowDismiss]=\"false\"\n                i18n>\n                Search query limit is {{ searchLimitMaxLength }} characters.\n            </nui-message>\n        }\n    </div>\n    <div\n        class=\"flex-row h-100 nui-table-widget-container\"\n        [nuiDelayedMousePresenceDetection]=\"\n            delayedMousePresenceDetectionEnabled\n        \"\n        [delay]=\"configuration.scrollActivationDelayMs\"\n        [mousePresentSubject]=\"mousePresent$\"\n    >\n        <!-- Note: Using inline style to let tableStickyHeader pick the actual height and update it with header height when it is detached -->\n        <cdk-virtual-scroll-viewport\n            class=\"calc-height\"\n            style=\"height: calc(100% - 2px)\"\n            tableStickyHeader\n            [itemSize]=\"rowHeight\"\n            [ngClass]=\"{\n                'virtual-scroll-disabled':\n                    (mousePresent$ | async) === false &&\n                    delayedMousePresenceDetectionEnabled\n            }\"\n        >\n            <table\n                class=\"nui-table-widget__main\"\n                nui-table\n                [reorderable]=\"configuration?.reorderable\"\n                [sortable]=\"sortable\"\n                [selection]=\"selection\"\n                [selectionConfig]=\"configuration?.selectionConfiguration\"\n                [totalItems]=\"totalItems\"\n                [paginatorUsed]=\"hasPaginator && configuration?.selectionConfiguration?.allPages\"\n                [dataSource]=\"hasVirtualScroll ? virtualScrollAddon.visibleItems : tableData\"\n                [sortedColumn]=\"sortedColumn\"\n                (sortOrderChanged)=\"onSortOrderChanged($event)\"\n                (selectionChange)=\"onSelectionChange($event)\"\n                [trackBy]=\"dataTrackBy()\"\n                #widgetTable\n            >\n                <ng-container\n                    nuiColumnDef=\"{{ column.id }}\"\n                    *ngFor=\"let column of columns; trackBy: columnTrackBy\"\n                >\n                    <th\n                        nui-header-cell\n                        [isColumnSortingDisabled]=\"!column.sortable\"\n                        *nuiHeaderCellDef\n                        [style.width.px]=\"columnsWidthMap.get(column.id)\"\n                        [style.max-width.px]=\"columnsWidthMap.get(column.id)\"\n                        [style.min-width.px]=\"columnsWidthMap.get(column.id)\"\n                        [title]=\"column.label\"\n                        [tooltipText]=\"\n                            headerTooltipsEnabled ? column.label : undefined\n                        \"\n                        [alignment]=\"getColumnAlignment(column)\"\n                    >\n                        {{ column.label }}\n                    </th>\n                    <ng-container>\n                        <td\n                            nui-cell\n                            *nuiCellDef=\"let element\"\n                            [style.width.px]=\"columnsWidthMap.get(column.id)\"\n                            [style.max-width.px]=\"\n                                columnsWidthMap.get(column.id)\n                            \"\n                            [style.min-width.px]=\"\n                                columnsWidthMap.get(column.id)\n                            \"\n                            [alignment]=\"getColumnAlignment(column)\"\n                        >\n                            <ng-container\n                                nuiComponentPortal\n                                componentId=\"formatter\"\n                                *ngIf=\"element[column.id] && column.formatter\"\n                                [componentType]=\"\n                                    column.formatter?.componentType\n                                \"\n                                [properties]=\"element[column.id]\"\n                                #componentPortal=\"nuiComponentPortal\"\n                            >\n                                <ng-template\n                                    [cdkPortalOutlet]=\"componentPortal.portal\"\n                                    (attached)=\"\n                                        componentPortal.attached($event)\n                                    \"\n                                ></ng-template>\n                            </ng-container>\n                        </td>\n                    </ng-container>\n                </ng-container>\n                <tr nui-header-row *nuiHeaderRowDef=\"headers\"></tr>\n                <ng-template\n                    nuiRowDef\n                    cdkVirtualFor\n                    let-row\n                    [nuiRowDefColumns]=\"headers\"\n                    [cdkVirtualForOf]=\"tableData\"\n                    [cdkVirtualForTemplateCacheSize]=\"10\"\n                    [cdkVirtualForTrackBy]=\"dataTrackBy()\"\n                >\n                    <tr\n                        nui-row\n                        (click)=\"onInteraction(row, $event)\"\n                        [attr.role]=\"interactive ? 'button' : ''\"\n                        density=\"tiny\"\n                        [rowObject]=\"row.__record\"\n                        [clickableRow]=\"clickableRow\"\n                    ></tr>\n                </ng-template>\n            </table>\n        </cdk-virtual-scroll-viewport>\n    </div>\n    <div [hidden]=\"!hasPaginator\" class=\"mt-2\">\n        <ng-container *ngTemplateOutlet=\"footer\"></ng-container>\n    </div>\n</div>\n\n<ng-template #footer>\n    <footer>\n        <nui-paginator\n            #paginator\n            id=\"nui-table-widget-paginator\"\n            [appendToBody]=\"true\"\n            [page]=\"paginatorAddon.paginatorState.page\"\n            [pageSize]=\"paginatorAddon.paginatorState.pageSize\"\n            [pageSizeSet]=\"paginatorAddon.paginatorState.pageSizeSet\"\n            [total]=\"paginatorAddon.paginatorState.total\"\n            (pagerAction)=\"onPagerAction($event)\"\n        >\n        </nui-paginator>\n    </footer>\n</ng-template>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\nimport moment from \"moment/moment\";\n\nimport { ITimeframe } from \"@nova-ui/bits\";\n\nimport { ISerializableTimeframe } from \"../../types\";\n\n@Injectable({\n    providedIn: \"root\",\n})\nexport class TimeframeSerializationService {\n    public convertToSerializable(\n        timeframe: ITimeframe\n    ): ISerializableTimeframe {\n        return {\n            startDatetime: timeframe.startDatetime.format(),\n            endDatetime: timeframe.endDatetime.format(),\n            selectedPresetId: timeframe.selectedPresetId,\n            title: timeframe.title,\n        };\n    }\n\n    public convertFromSerializable(\n        timeframe: ISerializableTimeframe\n    ): ITimeframe {\n        return {\n            startDatetime: moment(\n                timeframe.startDatetime,\n                moment.defaultFormat\n            ),\n            endDatetime: moment(timeframe.endDatetime, moment.defaultFormat),\n            selectedPresetId: timeframe.selectedPresetId,\n            title: timeframe.title,\n        };\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    HostBinding,\n    Inject,\n    Input,\n    OnChanges,\n    OnInit,\n    Optional,\n    SimpleChanges,\n} from \"@angular/core\";\nimport moment, { Moment } from \"moment/moment\";\n\nimport {\n    EventBus,\n    HistoryStorage,\n    IDataSource,\n    IEvent,\n    IFilter,\n    ITimeframe,\n    TimeframeService,\n} from \"@nova-ui/bits\";\n\nimport { TimeframeSerializationService } from \"../../configurator/services/timeframe-serialization.service\";\nimport { PizzagnaService } from \"../../pizzagna/services/pizzagna.service\";\nimport { REFRESH, SET_TIMEFRAME } from \"../../services/types\";\nimport {\n    DATA_SOURCE,\n    IHasChangeDetector,\n    ISerializableTimeframe,\n    PizzagnaLayer,\n    PIZZAGNA_EVENT_BUS,\n} from \"../../types\";\n\n@Component({\n    selector: \"nui-timeframe-selection\",\n    templateUrl: \"./timeframe-selection.component.html\",\n    styleUrls: [\"./timeframe-selection.component.less\"],\n    providers: [HistoryStorage],\n    standalone: false,\n})\nexport class TimeframeSelectionComponent\n    implements OnChanges, OnInit, IHasChangeDetector\n{\n    public static lateLoadKey = \"TimeframeSelectionComponent\";\n\n    public currentTimeframe: ITimeframe;\n    public minDateAsMoment: Moment;\n    public maxDateAsMoment: Moment;\n\n    @Input() public componentId: string;\n    @Input() public minDate: string;\n    @Input() public maxDate: string;\n    @Input() public timeframe: ISerializableTimeframe;\n\n    @HostBinding(\"class\") public elementClass: string;\n\n    constructor(\n        private pizzagnaService: PizzagnaService,\n        public timeframeService: TimeframeService,\n        private tfSerialization: TimeframeSerializationService,\n        public history: HistoryStorage<ITimeframe>,\n        @Optional() @Inject(DATA_SOURCE) private dataSource: IDataSource,\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>,\n        public changeDetector: ChangeDetectorRef\n    ) {\n        // just setting the timeframe to some reasonable default value\n        this.currentTimeframe =\n            this.timeframeService.getTimeframeByPresetId(\"last7Days\");\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.timeframe) {\n            let timeframe = this.tfSerialization.convertFromSerializable(\n                this.timeframe\n            );\n            timeframe = this.timeframeService.reconcileTimeframe(timeframe);\n            if (timeframe.selectedPresetId) {\n                // populate the title\n                timeframe = this.timeframeService.getTimeframeByPresetId(\n                    timeframe.selectedPresetId\n                );\n            }\n            this.currentTimeframe = timeframe;\n            if (!changes.timeframe.isFirstChange()) {\n                this.eventBus.getStream(REFRESH).next({});\n            }\n        }\n\n        if (changes.minDate) {\n            this.minDateAsMoment = moment(this.minDate, moment.defaultFormat);\n        }\n\n        if (changes.maxDate) {\n            this.maxDateAsMoment = moment(this.maxDate, moment.defaultFormat);\n        }\n    }\n\n    public ngOnInit(): void {\n        this.history.restart(this.currentTimeframe);\n        this.eventBus.getStream(SET_TIMEFRAME).subscribe((event) => {\n            if (!event.payload) {\n                throw new Error(\n                    \"Unable to set timeframe. Event payload is undefined\"\n                );\n            }\n            this.onTimeframeChange(\n                this.history.save(\n                    this.tfSerialization.convertFromSerializable(event.payload)\n                )\n            );\n        });\n\n        if (this.dataSource) {\n            this.dataSource.registerComponent({\n                timeframe: {\n                    componentInstance: {\n                        getFilters: () => {\n                            const timeframe =\n                                this.timeframeService.reconcileTimeframe(\n                                    this.currentTimeframe\n                                );\n                            return <IFilter<ITimeframe>>{\n                                type: \"timeframe\",\n                                value: timeframe,\n                            };\n                        },\n                    },\n                },\n            });\n        }\n    }\n\n    public onTimeframeChange(timeframe: ITimeframe): void {\n        const newTimeframe =\n            this.timeframeService.reconcileTimeframe(timeframe);\n\n        // replace undefined preset value with empty string to explicitly override any value on the pizzagna's config layer\n        newTimeframe.selectedPresetId = newTimeframe.selectedPresetId || \"\";\n\n        if (\n            !this.timeframeService.isEqual(newTimeframe, this.currentTimeframe)\n        ) {\n            this.pizzagnaService.setProperty(\n                {\n                    pizzagnaKey: PizzagnaLayer.Data,\n                    componentId: this.componentId,\n                    propertyPath: [\"timeframe\"],\n                },\n                this.tfSerialization.convertToSerializable(newTimeframe)\n            );\n        }\n    }\n}\n","<nui-time-frame-bar\n    [minDate]=\"minDateAsMoment\"\n    [maxDate]=\"maxDateAsMoment\"\n    [timeFrame]=\"currentTimeframe\"\n    (timeFrameChange)=\"onTimeframeChange(history.restart($event))\"\n    [historyIndex]=\"history.index\"\n    (undo)=\"onTimeframeChange(history.undo())\"\n    (clear)=\"onTimeframeChange(history.restart())\"\n>\n    <!-- content for default projection slot -->\n    <nui-icon icon=\"calendar\" class=\"pr-3\"></nui-icon>\n    {{ currentTimeframe | timeFrame }}\n\n    <!-- content for time frame selection projection slot -->\n    <nui-quick-picker\n        [presets]=\"timeframeService.currentPresets\"\n        timeFrameSelection\n    >\n        <nui-time-frame-picker></nui-time-frame-picker>\n    </nui-quick-picker>\n</nui-time-frame-bar>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { ITimeFramePresetDictionary, UnitOption } from \"@nova-ui/bits\";\nimport { TimeseriesZoomPlugin, ZoomPlugin } from \"@nova-ui/charts\";\n\nimport { IProperties } from \"../../types\";\nimport { LegendPlacement } from \"../../widget-types/common/widget/legend\";\n\nexport interface ITimeseriesWidgetConfig {\n    interaction: null | \"series\" | \"dataPoints\";\n    displayedSeries: ITimeseriesWidgetSeries[];\n    legendPlacement: LegendPlacement;\n    leftAxisLabel?: string;\n    timeFramePickerPresets?: ITimeFramePresetDictionary;\n    enableZoom: boolean; // might go under the 'chart' configuration\n    chartColors?: string[]; // might go under the 'chart' configuration\n    preset: TimeseriesChartPreset;\n    scales: ITimeseriesScalesConfig;\n    units: UnitOption;\n    collectionId?: string;\n    leftYAxisUnits?: UnitOption;\n    rightYAxisUnits?: UnitOption;\n    gridConfig?: {\n        [key: string]: any;\n    };\n    hasAdjacentChart?: boolean;\n    groupUniqueId?: string;\n    allowLegendMenu?: boolean;\n    metricIds?: string;\n    realTimeIds?: string[];\n    type?: number;\n    projectType?: TimeseriesWidgetProjectType;\n}\n\nexport interface ITimeseriesWidgetSeries {\n    id: string;\n    label: string;\n    selectedSeriesId: string;\n}\n\nexport interface ITimeseriesWidgetData<T = ITimeseriesWidgetSeriesData> {\n    id: string;\n    name: string;\n    description: string;\n    data: T[];\n    rawData?: T[];\n    transformer?: (data: T[], hasPercentile?: boolean) => T[];\n    link?: string;\n    secondaryLink?: string;\n    metricUnits?: UnitOption;\n}\n\nexport interface ITimeseriesWidgetSeriesData {\n    x: any; // used to be Moment, but TimeIntervalScale isn't Moment compatible, so it needs to support primarily Date type\n    y: any;\n    [key: string]: any;\n}\n\nexport interface ITimeseriesWidgetStatusData\n    extends ITimeseriesWidgetSeriesData {\n    thick?: boolean;\n    color?: string;\n    icon?: string;\n}\n\nexport interface ITimeseriesOutput<T = ITimeseriesWidgetSeriesData> {\n    series: ITimeseriesWidgetData<T>[];\n    summarySerie?: ITimeseriesWidgetData<T>;\n}\n\nexport enum TimeseriesInteractionType {\n    DataPoints = \"dataPoints\",\n    Series = \"series\",\n    Values = \"values\",\n}\n\n/** Configuration for a chart preset */\nexport interface IChartPreset {\n    componentType: string;\n}\n\n/**\n * Configuration of scales for a x/y chart\n */\nexport interface ITimeseriesScalesConfig {\n    x: ITimeseriesScaleConfig;\n    y: ITimeseriesScaleConfig;\n    yRight?: ITimeseriesScaleConfig;\n}\n\n/**\n * Configuration of a scale for timeseries widget\n */\nexport interface ITimeseriesScaleConfig {\n    /** Type of the scale */\n    type: TimeseriesScaleType;\n    /** Additional properties of the scale */\n    properties?: IProperties;\n}\n\n/**\n * List of supported scale types for the timeseries widget\n */\nexport enum TimeseriesScaleType {\n    /** Continous time scale */\n    Time = \"time\",\n    /** Time interval scale */\n    TimeInterval = \"timeInterval\",\n    /** Numeric linear scale */\n    Linear = \"linear\",\n}\n\n/** Enumeration of chart presets supported by the timeseries widget */\nexport enum TimeseriesChartPreset {\n    Line = \"line\",\n    StackedArea = \"stackedArea\",\n    StackedPercentageArea = \"stackedPercentageArea\",\n    StackedBar = \"stackedBar\",\n    StatusBar = \"statusBar\",\n}\n\n/** Enumeration of timeseries chart types recieved from the backend */\nexport enum TimeseriesChartTypes {\n    line = 1, // Line\n    counter = 2, // StackedBar\n    event = 3, // StackedBar\n    alert = 4, // StackedArea\n    status = 5, // StackedArea\n    multi = 6, // StatusBar\n    dpaWaitTime = 7, // StatusBar\n}\n\nexport enum TimeseriesTransformer {\n    None = \"none\",\n    Normalize = \"normalize\",\n    ChangePoint = \"changePoint\",\n    Difference = \"difference\",\n    Linear = \"linear\",\n    PercentileStd = \"percentileStd\",\n    Smoothing = \"smoothing\",\n    LoessStandardize = \"loessStandardize\",\n    Standardize = \"standardize\",\n    FloatingAverage = \"floatingAverage\",\n}\n\nexport enum TimeseriesWidgetProjectType {\n    ModernDashboard,\n    PerfstackApp,\n}\n\nexport type TimeseriesWidgetZoomPlugin = TimeseriesZoomPlugin | ZoomPlugin;\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { UnitOption } from \"@nova-ui/bits\";\n\nimport { ITimeseriesWidgetData, TimeseriesChartTypes } from \"./types\";\n\nexport function metricsSeriesMeasurementsMinMax(\n    series: ITimeseriesWidgetData<any>[],\n    axisUnits: UnitOption\n): { min: number; max: number } {\n    if (axisUnits === \"percent\") {\n        const percentMetrics = series.filter(\n            (metric) => metric.metricUnits === \"percent\" && metric.data?.length\n        );\n        const percentMax =\n            percentMetrics.length > 0\n                ? percentMetrics\n                      .flatMap((m) => m.data ?? [])\n                      .reduce(\n                          (acc, measurement) => Math.max(acc, measurement.y),\n                          0\n                      )\n                : 0;\n        return { min: 0, max: Math.max(100, percentMax) };\n    }\n    // skips percent measurements as they are displayed on the left y-axis and would affect right y-axis domain\n    const nonPercentMetrics = series.filter(\n        (metric) => metric.metricUnits !== \"percent\" && metric.data?.length\n    );\n\n    // case where there are no measurements for non-percent metrics,  e.g when a license expires\n    if (nonPercentMetrics.length === 0) {\n        return { min: -1, max: 1 };\n    }\n\n    const measurements = nonPercentMetrics.flatMap((m) => m.data ?? []);\n\n    return measurements.reduce(\n        (acc: { min: number; max: number }, measurement) => ({\n            min: Math.min(acc.min, measurement.y),\n            max: Math.max(acc.max, measurement.y),\n        }),\n        { min: measurements[0].y, max: measurements[0].y }\n    );\n}\n\nexport function hasTimeseriesWidgetSummaryLegend(\n    type: TimeseriesChartTypes\n): boolean {\n    return (\n        type === TimeseriesChartTypes.alert ||\n        type === TimeseriesChartTypes.event ||\n        type === TimeseriesChartTypes.multi\n    );\n}\n\nexport const SUMMARY_LEGEND_BCG_COLOR = \"var(--nui-color-chart-sum)\";\nexport const SUMMARY_LEGEND_COLOR = \"var(--nui-color-text-inverse)\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport function roundToOptimalDecimals(\n    arr: number[],\n    optimalDecimals = new Map<number, number>([\n        [1, 2],\n        [2, 2],\n        [3, 2],\n        [4, 1],\n    ])\n): number[] {\n    return arr.map((v) => {\n        const digits = Math.floor(Math.abs(v)).toString().length;\n        const optimalDecimalsForDigits = optimalDecimals.get(digits) ?? 0;\n        return +v.toFixed(optimalDecimalsForDigits);\n    });\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport moment from \"moment/moment\";\n\nconst intlFormatOptions: Intl.DateTimeFormatOptions = {\n    year: \"numeric\",\n    month: \"2-digit\",\n    day: \"2-digit\",\n    hour: \"2-digit\",\n    minute: \"2-digit\",\n};\n\nconst intlFormat = (date: Date, options: Intl.DateTimeFormatOptions) =>\n    new Intl.DateTimeFormat(moment.locale(), options).format(date);\n\n/**\n * Formatter for timeserie label dates\n */\nexport const timeSeriesDatetimeFormatter = (date: Date): string => {\n    const dateFormatted = intlFormat(date, intlFormatOptions);\n\n    const dateSplitted = dateFormatted.split(\",\");\n    if (dateSplitted.length !== 2) {\n        throw new Error(\"Invalid timeseries date time format.\");\n    }\n    return `${dateSplitted[0]} ${dateSplitted[1]}`;\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\nimport { duration } from \"moment/moment\";\n\nimport { UnitBase, UnitConversionService, UnitOption } from \"@nova-ui/bits\";\nimport {\n    IScale,\n    LinearScale,\n    TimeIntervalScale,\n    TimeScale,\n} from \"@nova-ui/charts\";\n\nimport {\n    ITimeseriesScaleConfig,\n    ITimeseriesWidgetConfig,\n    TimeseriesScaleType,\n    TimeseriesChartPreset,\n} from \"./types\";\nimport { DashboardUnitConversionPipe } from \"../../common/pipes/public-api\";\nimport { roundToOptimalDecimals } from \"../../functions/round-array-values\";\nimport { timeSeriesDatetimeFormatter } from \"../../functions/timeseries-datetime-formatter\";\n\n/**\n * This service handles scale creation and configuration for the timeseries widget\n */\n@Injectable()\nexport class TimeseriesScalesService {\n    private unitConversionPipe: DashboardUnitConversionPipe;\n\n    constructor(private unitConversionService: UnitConversionService) {\n        this.unitConversionPipe = new DashboardUnitConversionPipe(\n            this.unitConversionService\n        );\n    }\n\n    /**\n     * Creates a scale based on given configuration\n     *\n     * @param scaleConfig\n     */\n    public getScale(\n        scaleConfig: ITimeseriesScaleConfig,\n        units: UnitOption,\n        widgetConfig?: ITimeseriesWidgetConfig\n    ): IScale<any> {\n        let scale: IScale<any>;\n\n        switch (scaleConfig.type) {\n            case TimeseriesScaleType.Time: {\n                scale = new TimeScale();\n                scale.isTimeseriesScale = true;\n                scale.formatters.title = timeSeriesDatetimeFormatter;\n                break;\n            }\n            case TimeseriesScaleType.Linear: {\n                scale = new LinearScale();\n                scale.isTimeseriesScale = true;\n                scale.formatters.tick = (\n                    value: string | number | undefined,\n                    isLabelFormatter?: boolean\n                ) =>\n                    this.unitConversionPipe.transform(\n                        value,\n                        scaleConfig.properties?.axisUnits ?? units,\n                        UnitBase.Standard\n                    );\n                break;\n            }\n            case TimeseriesScaleType.TimeInterval: {\n                scale = new TimeIntervalScale(duration(1, \"hour\"));\n                break;\n            }\n        }\n\n        this.updateConfiguration(scale, scaleConfig, widgetConfig);\n\n        return scale;\n    }\n\n    /**\n     * Currently only TimeIntervalScale has configuration\n     *\n     * @param scale\n     * @param scaleConfig\n     */\n    public updateConfiguration(\n        scale: IScale<any>,\n        scaleConfig: ITimeseriesScaleConfig,\n        widgetConfig?: ITimeseriesWidgetConfig\n    ): void {\n        switch (scaleConfig.type) {\n            case TimeseriesScaleType.Time: {\n                const interval = scaleConfig.properties?.timeInterval;\n                if (interval?.startDatetime && interval?.endDatetime) {\n                    scale.fixDomain([\n                        interval.startDatetime,\n                        interval.endDatetime,\n                    ]);\n                }\n                break;\n            }\n            case TimeseriesScaleType.TimeInterval: {\n                const interval = scaleConfig.properties?.interval;\n                if (typeof interval === \"number\") {\n                    if (interval <= 0) {\n                        throw new Error(\n                            \"Interval value must be greater than zero.\"\n                        );\n                    }\n                    if (scale instanceof TimeIntervalScale) {\n                        scale.interval(duration(interval, \"seconds\"));\n                    }\n                }\n                break;\n            }\n            case TimeseriesScaleType.Linear: {\n                if (scaleConfig.properties?.axisUnits) {\n                    scale.scaleUnits = scaleConfig.properties.axisUnits;\n                }\n\n                if (widgetConfig?.preset === TimeseriesChartPreset.StatusBar) {\n                    return;\n                }\n\n                if (\n                    scaleConfig.properties?.axisUnits === \"percent\" &&\n                    scale.setFixDomainValues\n                ) {\n                    const domainMax =\n                        scaleConfig.properties?.domain?.max ?? 100;\n                    const upperBound = Math.max(\n                        100,\n                        Math.ceil(domainMax / 25) * 25\n                    );\n                    const points: number[] = [];\n                    for (let i = 0; i <= upperBound; i += 25) {\n                        points.push(i);\n                    }\n                    scale.setFixDomainValues(points);\n                }\n                if (\n                    scaleConfig.properties?.axisUnits !== \"percent\" &&\n                    scaleConfig.properties?.domain &&\n                    scale.setFixDomainValues\n                ) {\n                    let domainAdjusted;\n                    switch (widgetConfig?.preset) {\n                        case TimeseriesChartPreset.StackedBar:\n                            domainAdjusted = this.getStackedBarScaleDomain(\n                                scaleConfig.properties.domain\n                            );\n                            break;\n                        case TimeseriesChartPreset.StackedArea:\n                            domainAdjusted = this.getStackedAreaScaleDomain(\n                                scaleConfig.properties.domain.max\n                            );\n                            break;\n                        default:\n                            domainAdjusted = this.getLineScaleDomain(\n                                scaleConfig.properties.domain\n                            );\n                    }\n\n                    scale.setFixDomainValues(domainAdjusted);\n                }\n                break;\n            }\n        }\n    }\n\n    private getStackedBarScaleDomain({\n        min,\n        max,\n    }: {\n        min: number;\n        max: number;\n    }): number[] {\n        if (max === 0 || max % 4 > 0) {\n            max = max + 4 - (max % 4);\n        }\n        const increment = Math.floor((max - min) / 4);\n        return [\n            min,\n            min + increment,\n            min + 2 * increment,\n            max - increment,\n            max,\n        ];\n    }\n\n    private getLineScaleDomain({\n        min,\n        max,\n    }: {\n        min: number;\n        max: number;\n    }): number[] {\n        if (min > max) {\n            const tmp = min;\n            min = max;\n            max = tmp;\n        }\n\n        const extentRange = Math.abs((max - min) / ((max + min) / 2));\n\n        // for small domain ranges increase domain so that spikes are not exaggerated\n        if (extentRange < 0.5) {\n            min = min - Math.abs(min) * 0.5;\n            max = max + Math.abs(max) * 0.5;\n        }\n\n        // handles zero case\n        if (min === 0 && max === 0) {\n            min = -1;\n            max = 1;\n        }\n\n        // special case for real small number since not using si prefix anymore\n        if (Math.abs(max - min) < 0.04) {\n            max += 0.04;\n        }\n\n        const point = (max - min) / 4;\n        return roundToOptimalDecimals([\n            min,\n            min + point,\n            min + 2 * point,\n            max - point,\n            max,\n        ]);\n    }\n\n    private getStackedAreaScaleDomain(max: number): number[] {\n        const point = max / 4;\n        return [0, point, point * 2, max - point, max];\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    Directive,\n    Inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IDataSource, IEvent } from \"@nova-ui/bits\";\nimport { IXYScales } from \"@nova-ui/charts\";\n\nimport { CHART_METRIC_REMOVE } from \"../../../services/types\";\nimport {\n    PIZZAGNA_EVENT_BUS,\n    WellKnownDataSourceFeatures,\n} from \"../../../types\";\nimport { metricsSeriesMeasurementsMinMax } from \"../timeseries-helpers\";\nimport { TimeseriesScalesService } from \"../timeseries-scales.service\";\nimport {\n    ITimeseriesOutput,\n    ITimeseriesScalesConfig,\n    ITimeseriesWidgetConfig,\n    ITimeseriesWidgetData,\n    ITimeseriesWidgetSeriesData,\n    TimeseriesChartPreset,\n} from \"../types\";\n\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class TimeseriesChartComponent<T = ITimeseriesWidgetSeriesData>\n    implements OnChanges, OnDestroy, OnInit\n{\n    @Input() public widgetData: ITimeseriesOutput<T> =\n        {} as ITimeseriesOutput<T>;\n    @Input() public configuration: ITimeseriesWidgetConfig =\n        {} as ITimeseriesWidgetConfig;\n\n    protected scales: IXYScales = {} as IXYScales;\n    protected destroy$ = new Subject<void>();\n    protected buildChart$ = new Subject<void>();\n    protected resetChart = false;\n    protected chartBuilt = false;\n\n    public get seriesInteractive(): boolean {\n        return (\n            this.configuration?.interaction === \"series\" ||\n            this.dataSource?.features?.getFeatureConfig(\n                WellKnownDataSourceFeatures.Interactivity\n            )?.enabled ||\n            false\n        );\n    }\n\n    protected constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) protected eventBus: EventBus<IEvent>,\n        public timeseriesScalesService: TimeseriesScalesService,\n        public dataSource: IDataSource\n    ) {\n        this.buildChart$.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.chartBuilt = true;\n        });\n    }\n\n    public ngOnInit(): void {\n        // save original data\n        if (\n            this.configuration.preset === TimeseriesChartPreset.Line &&\n            this.widgetData &&\n            this.widgetData.series\n        ) {\n            this.widgetData.series.forEach(\n                (serie) => (serie.rawData = serie.data)\n            );\n        }\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        let shouldUpdateChart = false;\n        let shouldRebuildChart = false;\n\n        if (changes.configuration) {\n            const configurationCurrent: ITimeseriesWidgetConfig =\n                changes.configuration.currentValue;\n            const configurationPrevious: ITimeseriesWidgetConfig =\n                changes.configuration.previousValue;\n\n            if (\n                configurationCurrent?.preset !== configurationPrevious?.preset\n            ) {\n                shouldRebuildChart = true;\n            }\n\n            if (\n                configurationCurrent?.scales !== configurationPrevious?.scales\n            ) {\n                const scaleKeys = Object.keys(\n                    configurationCurrent?.scales\n                ) as Array<keyof ITimeseriesScalesConfig>;\n\n                for (const scaleKey of scaleKeys) {\n                    const scaleConfigCurrent =\n                        configurationCurrent?.scales?.[scaleKey];\n                    const scaleConfigPrevious =\n                        configurationPrevious?.scales?.[scaleKey];\n\n                    if (!scaleConfigCurrent) {\n                        continue;\n                    }\n\n                    if (\n                        scaleConfigCurrent?.type !==\n                            scaleConfigPrevious?.type ||\n                        scaleConfigCurrent?.properties?.axisUnits !==\n                            scaleConfigPrevious?.properties?.axisUnits\n                    ) {\n                        this.scales[scaleKey] =\n                            this.timeseriesScalesService.getScale(\n                                scaleConfigCurrent,\n                                configurationCurrent.units,\n                                this.configuration\n                            );\n\n                        shouldUpdateChart = true;\n                    } else if (\n                        scaleConfigCurrent?.properties !==\n                        scaleConfigPrevious?.properties\n                    ) {\n                        this.timeseriesScalesService.updateConfiguration(\n                            this.scales[scaleKey],\n                            scaleConfigCurrent,\n                            this.configuration\n                        );\n                        shouldUpdateChart = true;\n                    }\n                }\n            }\n        }\n\n        if (shouldRebuildChart || !this.chartBuilt) {\n            this.buildChart();\n        }\n\n        if (changes.widgetData && !changes.widgetData.isFirstChange()) {\n            if (this.widgetData?.series?.length === 0) {\n                this.resetChart = true;\n            }\n\n            if (this.widgetData && this.widgetData.series) {\n                if (this.resetChart && this.widgetData?.series?.length > 0) {\n                    this.resetChart = false;\n                    this.buildChart();\n                }\n                this.applyPreviousTransformer(changes.widgetData.previousValue);\n\n                shouldUpdateChart = true;\n            }\n        }\n\n        if (shouldUpdateChart) {\n            this.updateChartData();\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n        this.buildChart$.complete();\n    }\n\n    protected applyPreviousTransformer(previousData: any): void {\n        // save original data and transform it\n        this.widgetData.series.forEach((serie) => {\n            serie.rawData = serie.data;\n            serie.transformer = previousData?.series.find(\n                (prevSerie: ITimeseriesWidgetData) => prevSerie.id === serie.id\n            )?.transformer;\n            this.transformSeriesData(serie);\n        });\n    }\n\n    protected transformSeriesData(serie: ITimeseriesWidgetData<T>): void {\n        if (serie.transformer && serie.rawData && serie.rawData.length > 0) {\n            try {\n                const hasPercentile = serie.metricUnits === \"percent\";\n                serie.data = serie.transformer(serie.rawData, hasPercentile);\n                this.updateYAxisDomain();\n            } catch (e) {\n                serie.transformer = undefined;\n                serie.data = serie.rawData;\n                console.error(e.message);\n            }\n        }\n    }\n\n    public updateYAxisDomain(): void {\n        const scaleKeys = [\"y\", \"yRight\"] as Array<\n            keyof ITimeseriesScalesConfig\n        >;\n        for (const scaleKey of scaleKeys) {\n            const scaleConfig = this.configuration.scales?.[scaleKey];\n            if (scaleConfig?.properties) {\n                scaleConfig.properties.domain = {\n                    ...metricsSeriesMeasurementsMinMax(\n                        this.widgetData.series,\n                        scaleConfig?.properties?.axisUnits\n                    ),\n                };\n                this.timeseriesScalesService.updateConfiguration(\n                    this.scales[scaleKey],\n                    scaleConfig,\n                    this.configuration\n                );\n            }\n        }\n    }\n\n    public removeMetric(metricId: string): void {\n        this.eventBus.next(CHART_METRIC_REMOVE, {\n            payload: {\n                metricId: metricId,\n                groupUniqueId: this.configuration.groupUniqueId,\n            },\n        });\n    }\n\n    /** Updates chart data. */\n    protected abstract updateChartData(): void;\n\n    protected abstract buildChart(): void;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    Inject,\n    OnInit,\n    Optional,\n} from \"@angular/core\";\n// eslint-disable-next-line import/no-deprecated\nimport { merge, Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport {\n    EventBus,\n    IconService,\n    IDataSource,\n    IEvent,\n    uuid,\n} from \"@nova-ui/bits\";\nimport {\n    BandScale,\n    BarHighlightStrategy,\n    BarHighlightStrategyOutline,\n    BarRenderer,\n    Chart,\n    DESTROY_EVENT,\n    IAccessors,\n    IChartAssistSeries,\n    IChartEvent,\n    ISetDomainEventPayload,\n    IStatusAccessors,\n    Renderer,\n    SET_DOMAIN_EVENT,\n    SparkChartAssist,\n    StatusAccessors,\n    statusAccessors,\n    TimeIntervalScale,\n    TimeseriesZoomPlugin,\n    XYGridConfig,\n    ZoomPlugin,\n} from \"@nova-ui/charts\";\n\nimport { SET_TIMEFRAME } from \"../../../../services/types\";\nimport { DATA_SOURCE, PIZZAGNA_EVENT_BUS } from \"../../../../types\";\nimport {\n    SUMMARY_LEGEND_BCG_COLOR,\n    SUMMARY_LEGEND_COLOR,\n} from \"../../timeseries-helpers\";\nimport { TimeseriesScalesService } from \"../../timeseries-scales.service\";\nimport {\n    ITimeseriesWidgetData,\n    ITimeseriesWidgetStatusData,\n    TimeseriesChartTypes,\n    TimeseriesWidgetProjectType,\n    TimeseriesWidgetZoomPlugin,\n} from \"../../types\";\nimport { TimeseriesChartComponent } from \"../timeseries-chart.component\";\n\n@Component({\n    selector: \"nui-status-bar-chart\",\n    templateUrl: \"./status-bar-chart.component.html\",\n    styleUrls: [\"./status-bar-chart.component.less\"],\n    standalone: false,\n})\nexport class StatusBarChartComponent\n    extends TimeseriesChartComponent<ITimeseriesWidgetStatusData>\n    implements OnInit\n{\n    public static lateLoadKey = \"StatusChartComponent\";\n\n    public chartAssist: SparkChartAssist;\n    public collectionId: string = uuid(\"timeseries-status-charts\");\n    protected accessors: StatusAccessors;\n    protected renderer: Renderer<IAccessors>;\n    private chartUpdate$ = new Subject<void>();\n\n    public zoomPlugins: TimeseriesWidgetZoomPlugin[];\n    public timeseriesChartTypes = TimeseriesChartTypes;\n    public summaryLegendBcgColor = SUMMARY_LEGEND_BCG_COLOR;\n    public summaryLegendColor = SUMMARY_LEGEND_COLOR;\n\n    constructor(\n        private iconService: IconService,\n        @Optional() @Inject(DATA_SOURCE) dataSource: IDataSource,\n        public timeseriesScalesService: TimeseriesScalesService,\n        public changeDetector: ChangeDetectorRef,\n        @Inject(PIZZAGNA_EVENT_BUS) protected eventBus: EventBus<IEvent>\n    ) {\n        super(eventBus, timeseriesScalesService, dataSource);\n    }\n\n    public ngOnInit(): void {}\n\n    public getDataPointData(\n        series: IChartAssistSeries<IAccessors>,\n        key: string\n    ): any {\n        const data = this.chartAssist.highlightedDataPoints[series.id]?.data;\n        if (data) {\n            return data[key];\n        }\n        return series.data.length > 0\n            ? series.data[series.data.length - 1][key]\n            : undefined;\n    }\n\n    protected buildChart(): void {\n        this.buildChart$.next();\n        this.chartAssist = new SparkChartAssist();\n\n        this.accessors = statusAccessors(\n            this.chartAssist.palette.standardColors\n        );\n        this.accessors.data.color = (d, i, series, dataSeries) =>\n            typeof d.color === \"undefined\"\n                ? \"var(--nui-color-semantic-unknown)\"\n                : d.color;\n\n        this.accessors.data.thickness = (data: any) =>\n            typeof data.thick === \"undefined\" || data.thick\n                ? BarRenderer.THICK\n                : BarRenderer.THIN;\n\n        const iconSize: number = 8;\n        this.accessors.data.marker = (data: any) =>\n            data.icon\n                ? this.iconService.getIconResized(\n                      this.iconService.getIconData(data.icon).code,\n                      iconSize\n                  )\n                : undefined;\n\n        this.accessors.data.y = (d) => d.value;\n\n        // disable pointer events on bars to ensure the zoom drag target is the mouse interactive area rather than the bars\n        this.renderer = new BarRenderer({\n            highlightStrategy:\n                this.configuration?.projectType ===\n                TimeseriesWidgetProjectType.PerfstackApp\n                    ? new BarHighlightStrategyOutline(\"x\")\n                    : new BarHighlightStrategy(\"x\"),\n            pointerEvents: false,\n        });\n\n        this.setGridConfigFromConfiguration(this.chartAssist.gridConfig);\n        this.setGridConfigFromConfiguration(this.chartAssist.lastGridConfig);\n\n        this.scales.y = new BandScale();\n        this.scales.y.fixDomain(StatusAccessors.STATUS_DOMAIN);\n        this.scales.y.isTimeseriesScale = true;\n\n        if (this.scales.yRight) {\n            this.scales.yRight = this.scales.y;\n        }\n    }\n\n    protected updateChartData(): void {\n        const { gridConfig, lastGridConfig } = this.chartAssist;\n        // hides botom axis if it's not last chart in the group\n        gridConfig.axis.bottom.visible = !this.configuration?.hasAdjacentChart;\n        lastGridConfig.axis.bottom.visible =\n            !this.configuration?.hasAdjacentChart;\n        gridConfig.borders.bottom.className = this.configuration\n            ?.hasAdjacentChart\n            ? \"nui-chart-border\"\n            : \"nui-chart-border nui-chart-border--thick\";\n        lastGridConfig.borders.bottom.className = this.configuration\n            ?.hasAdjacentChart\n            ? \"nui-chart-border\"\n            : \"nui-chart-border nui-chart-border--thick\";\n\n        this.chartUpdate$.next();\n\n        // Assemble the series set\n        let series = this.widgetData.series;\n        const summarySerie = this.widgetData.summarySerie\n            ? [this.widgetData.summarySerie]\n            : [];\n        if (\n            series.length === 1 &&\n            series[0].id === this.widgetData.summarySerie?.id\n        ) {\n            // if the series contains only one item and its the same as the summary serie,\n            // there is no submetric and only the summary serie should be displayed\n            series = [];\n        }\n        const seriesSet: IChartAssistSeries<IStatusAccessors>[] = [\n            ...summarySerie,\n            ...series,\n        ].map((d: ITimeseriesWidgetData<ITimeseriesWidgetStatusData>) => ({\n            ...d,\n            data: this.transformData(\n                d.data,\n                this.scales.x instanceof TimeIntervalScale\n            ),\n            accessors: this.accessors,\n            renderer: this.renderer,\n            scales: this.scales,\n        }));\n\n        // Update the chart\n        this.chartAssist.update(seriesSet);\n\n        if (this.configuration.enableZoom) {\n            this.chartAssist.sparks.forEach((spark, i) => {\n                if (\n                    this.configuration?.projectType ===\n                    TimeseriesWidgetProjectType.PerfstackApp\n                ) {\n                    if (\n                        !(spark?.chart as Chart)?.hasPlugin(\n                            TimeseriesZoomPlugin\n                        )\n                    ) {\n                        spark?.chart?.addPlugin(this.zoomPlugins[i]);\n                    }\n                } else {\n                    if (!(spark?.chart as Chart)?.hasPlugin(ZoomPlugin)) {\n                        spark?.chart?.addPlugin(\n                            new ZoomPlugin({ enableExternalEvents: true })\n                        );\n                    }\n                }\n            });\n\n            // only need to subscribe to one chart's SET_DOMAIN_EVENT\n            this.chartAssist.sparks[0].chart\n                ?.getEventBus()\n                .getStream(SET_DOMAIN_EVENT)\n                .pipe(\n                    takeUntil(\n                        // eslint-disable-next-line import/no-deprecated\n                        merge(\n                            this.chartUpdate$,\n                            (\n                                this.chartAssist.sparks[0].chart as Chart\n                            )?.eventBus.getStream(DESTROY_EVENT),\n                            this.buildChart$\n                        )\n                    )\n                )\n                .subscribe((event: IChartEvent) => {\n                    const payload = <ISetDomainEventPayload>event.data;\n                    const newDomain = payload[Object.keys(payload)[0]];\n                    this.eventBus.getStream(SET_TIMEFRAME).next({\n                        payload: {\n                            startDatetime: newDomain[0],\n                            endDatetime: newDomain[1],\n                            selectedPresetId: undefined,\n                        },\n                    });\n                });\n        }\n    }\n\n    /**\n     * Transforms standard timeseries x/y data so that it can be understood by a status chart\n     *\n     * @param data The data to transform\n     * @param isIntervalProgression Whether the data should be treated as continuous or occurring at a regular interval\n     *\n     * @returns The transformed data\n     */\n    protected transformData(\n        data: ITimeseriesWidgetStatusData[],\n        isIntervalProgression: boolean\n    ): IStatusData[] {\n        const statusDataArray: any[] = [];\n        data.forEach((d, i) => {\n            if (isIntervalProgression || data.length - 1 !== i) {\n                statusDataArray.push({\n                    start: d.x,\n                    end: isIntervalProgression ? d.x : data[i + 1].x,\n                    status: d.y,\n                    color: d.color,\n                    thick: d.thick,\n                    icon: d.icon,\n                    value: d.y,\n                });\n            }\n        });\n        return statusDataArray;\n    }\n\n    private setGridConfigFromConfiguration(gridConfig: XYGridConfig): void {\n        const configuration = this.configuration;\n\n        if (configuration.gridConfig?.xAxisTicksCount) {\n            gridConfig.axis.bottom.approximateTicks =\n                configuration.gridConfig.xAxisTicksCount;\n        }\n\n        if (\n            gridConfig.dimension.marginLocked &&\n            configuration.gridConfig?.sideMarginLocked\n        ) {\n            gridConfig.dimension.marginLocked.left = true;\n            gridConfig.dimension.marginLocked.right = true;\n        }\n\n        if (configuration.gridConfig?.sideMargin) {\n            gridConfig.dimension.margin.left =\n                configuration.gridConfig.sideMargin;\n            gridConfig.dimension.margin.right =\n                configuration.gridConfig.sideMargin;\n        }\n    }\n\n    public displayDeleteButton(): boolean {\n        return (\n            !!this.configuration.allowLegendMenu &&\n            this.configuration.projectType ===\n                TimeseriesWidgetProjectType.PerfstackApp\n        );\n    }\n\n    public isStatusChart(): boolean {\n        return this.configuration?.type !== TimeseriesChartTypes.alert;\n    }\n\n    public getDescriptionSecondary(\n        series: IChartAssistSeries<IAccessors>,\n        index: number\n    ): string {\n        if (this.isStatusChart()) {\n            return series.legendDescriptionSecondary;\n        }\n\n        return index === 0 ? series.legendDescriptionSecondary : \"\";\n    }\n}\n\ninterface IStatusData {\n    start: Date;\n    end: Date;\n    thick?: boolean;\n    color?: string;\n    icon?: string;\n}\n","<div\n    *ngIf=\"chartAssist\"\n    class=\"status-bar-chart\"\n    [class.layout-fixed]=\"configuration.gridConfig?.fixedLayout\"\n>\n    <div\n        class=\"d-flex\"\n        *ngFor=\"\n            let spark of chartAssist.sparks;\n            let i = index;\n            trackBy: chartAssist.trackByFn\n        \"\n    >\n        <nui-chart\n            class=\"d-flex flex-grow-1\"\n            [chart]=\"spark.chart\"\n            [nuiChartCollectionId]=\"collectionId\"\n        ></nui-chart>\n        <div\n            class=\"d-flex flex-column pl-2\"\n            [class.justify-content-center]=\"\n                configuration.type === timeseriesChartTypes.alert &&\n                chartAssist.sparks.length > 1\n            \"\n            [class.last-legend-margin]=\"\n                configuration.type === timeseriesChartTypes.alert &&\n                i > 0 &&\n                i === chartAssist.sparks.length - 1\n            \"\n            [class.layout-fixed-legend]=\"configuration.gridConfig?.fixedLayout\"\n            *ngIf=\"\n                spark.chartSeriesSet?.length > 0 && spark.chartSeriesSet[0];\n                let series\n            \"\n        >\n            <nui-legend\n                class=\"status-bar-chart__legend\"\n                [active]=\"chartAssist.isLegendActive\"\n            >\n                <nui-legend-series\n                    [descriptionPrimary]=\"series.legendDescriptionPrimary\"\n                    [descriptionSecondary]=\"getDescriptionSecondary(series, i)\"\n                >\n                    <nui-rich-legend-tile\n                        *ngIf=\"\n                            configuration.type === timeseriesChartTypes.alert\n                        \"\n                        [value]=\"\n                            chartAssist.getHighlightedValue(\n                                series,\n                                'y',\n                                'value'\n                            )\n                        \"\n                        [backgroundColor]=\"\n                            i === 0\n                                ? summaryLegendBcgColor\n                                : chartAssist.palette.standardColors.get(\n                                      series.id\n                                  )\n                        \"\n                        [color]=\"\n                            i === 0\n                                ? summaryLegendColor\n                                : chartAssist.palette.textColors.get(series.id)\n                        \"\n                    >\n                    </nui-rich-legend-tile>\n                    <div\n                        *ngIf=\"isStatusChart()\"\n                        class=\"status-bar-chart__legend__tile d-flex justify-content-center align-items-center\"\n                    >\n                        <div\n                            class=\"w-100 h-100 status-bar-chart__legend__tile__background\"\n                            [style.background-color]=\"\n                                getDataPointData(series, 'color')\n                            \"\n                        ></div>\n                        <nui-icon\n                            *ngIf=\"getDataPointData(series, 'icon'); let icon\"\n                            class=\"status-bar-chart__legend__tile__icon\"\n                            [icon]=\"icon\"\n                        ></nui-icon>\n                    </div>\n                    <button\n                        nui-button\n                        legendMenu\n                        *ngIf=\"displayDeleteButton()\"\n                        (click)=\"removeMetric(series.id)\"\n                        icon=\"remove\"\n                        type=\"button\"\n                        displayStyle=\"action\"\n                    ></button>\n                </nui-legend-series>\n            </nui-legend>\n        </div>\n    </div>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport cloneDeep from \"lodash/cloneDeep\";\n\nimport { ITimeseriesWidgetSeriesData } from \"../types\";\n\nexport function transformDifference(\n    data: ITimeseriesWidgetSeriesData[],\n    hasPercentile?: boolean\n): ITimeseriesWidgetSeriesData[] {\n    const transformed = cloneDeep(data);\n    const n = data.length;\n\n    const dataValues: { x: any[]; y: any[] } = {\n        x: [],\n        y: [],\n    };\n\n    transformed.forEach((d: ITimeseriesWidgetSeriesData) => {\n        dataValues.x.push(d.x.valueOf());\n        dataValues.y.push(d.y);\n    });\n\n    function differenceData(data: number[]) {\n        const newData: number[] = [];\n        let currentYvalue: number;\n        let previousYvalue: number;\n        let answer: number = 0;\n\n        for (let i = 0; i < n; i++) {\n            if (i === n - 1) {\n                newData.push(answer);\n                break;\n            }\n            currentYvalue = data[i + 1];\n            previousYvalue = data[i];\n            answer = currentYvalue - previousYvalue;\n            if (hasPercentile) {\n                answer = Math.abs(answer);\n            }\n            newData.push(answer);\n        }\n        return newData;\n    }\n\n    const differencedData: number[] = differenceData(dataValues.y);\n    differencedData.forEach((value: number, index: number) => {\n        transformed[index].y = value;\n    });\n\n    return transformed;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n// Based on org.apache.commons.math.analysis.interpolation.LoessInterpolator\n// from http://commons.apache.org/math/\n\n// Extracted from https://github.com/jasondavies/science.js\n\nexport function loess() {\n    let bandwidth = 0.3,\n        robustnessIters = 2,\n        accuracy = 1e-12;\n\n    function smooth(xval: number[], yval: number[], weights: number[]) {\n        let n = xval.length,\n            i;\n\n        if (n !== yval.length) {\n            throw new Error(\"Mismatched array lengths\");\n        }\n        if (n === 0) {\n            throw new Error(\"At least one point required.\");\n        }\n\n        if (arguments.length < 3) {\n            weights = [];\n            i = -1;\n            while (++i < n) {\n                weights[i] = 1;\n            }\n        }\n\n        science_stats_loessFiniteReal(xval);\n        science_stats_loessFiniteReal(yval);\n        science_stats_loessFiniteReal(weights);\n        science_stats_loessStrictlyIncreasing(xval);\n\n        if (n === 1) {\n            return [yval[0]];\n        }\n        if (n === 2) {\n            return [yval[0], yval[1]];\n        }\n\n        const bandwidthInPoints = Math.floor(bandwidth * n);\n\n        if (bandwidthInPoints < 2) {\n            throw new Error(\"Bandwidth too small.\");\n        }\n\n        const res = [],\n            residuals = [],\n            robustnessWeights = [];\n\n        // Do an initial fit and 'robustnessIters' robustness iterations.\n        // This is equivalent to doing 'robustnessIters+1' robustness iterations\n        // starting with all robustness weights set to 1.\n        i = -1;\n        while (++i < n) {\n            res[i] = 0;\n            residuals[i] = 0;\n            robustnessWeights[i] = 1;\n        }\n\n        let iter = -1;\n        while (++iter <= robustnessIters) {\n            const bandwidthInterval = [0, bandwidthInPoints - 1];\n            // At each x, compute a local weighted linear regression\n            let x;\n            i = -1;\n            while (++i < n) {\n                x = xval[i];\n\n                // Find out the interval of source points on which\n                // a regression is to be made.\n                if (i > 0) {\n                    science_stats_loessUpdateBandwidthInterval(\n                        xval,\n                        weights,\n                        i,\n                        bandwidthInterval\n                    );\n                }\n\n                const ileft = bandwidthInterval[0],\n                    iright = bandwidthInterval[1];\n\n                // Compute the point of the bandwidth interval that is\n                // farthest from x\n                const edge =\n                    xval[i] - xval[ileft] > xval[iright] - xval[i]\n                        ? ileft\n                        : iright;\n\n                // Compute a least-squares linear fit weighted by\n                // the product of robustness weights and the tricube\n                // weight function.\n                // See http://en.wikipedia.org/wiki/Linear_regression\n                // (section \"Univariate linear case\")\n                // and http://en.wikipedia.org/wiki/Weighted_least_squares\n                // (section \"Weighted least squares\")\n                let sumWeights = 0,\n                    sumX = 0,\n                    sumXSquared = 0,\n                    sumY = 0,\n                    sumXY = 0,\n                    denom = Math.abs(1 / (xval[edge] - x));\n\n                for (let k = ileft; k <= iright; ++k) {\n                    const xk = xval[k],\n                        yk = yval[k],\n                        dist = k < i ? x - xk : xk - x,\n                        w =\n                            science_stats_loessTricube(dist * denom) *\n                            robustnessWeights[k] *\n                            weights[k],\n                        xkw = xk * w;\n                    sumWeights += w;\n                    sumX += xkw;\n                    sumXSquared += xk * xkw;\n                    sumY += yk * w;\n                    sumXY += yk * xkw;\n                }\n\n                const meanX = sumX / sumWeights,\n                    meanY = sumY / sumWeights,\n                    meanXY = sumXY / sumWeights,\n                    meanXSquared = sumXSquared / sumWeights;\n\n                const beta =\n                    Math.sqrt(Math.abs(meanXSquared - meanX * meanX)) < accuracy\n                        ? 0\n                        : (meanXY - meanX * meanY) /\n                          (meanXSquared - meanX * meanX);\n\n                const alpha = meanY - beta * meanX;\n\n                res[i] = beta * x + alpha;\n                residuals[i] = Math.abs(yval[i] - res[i]);\n            }\n\n            // No need to recompute the robustness weights at the last\n            // iteration, they won't be needed anymore\n            if (iter === robustnessIters) {\n                break;\n            }\n\n            // Recompute the robustness weights.\n\n            // Find the median residual.\n            const medianResidual = median(residuals);\n\n            if (Math.abs(medianResidual) < accuracy) {\n                break;\n            }\n\n            let arg, w;\n            i = -1;\n            while (++i < n) {\n                arg = residuals[i] / (6 * medianResidual);\n                robustnessWeights[i] = arg >= 1 ? 0 : (w = 1 - arg * arg) * w;\n            }\n        }\n\n        return res;\n    }\n\n    smooth.bandwidth = function (x: any) {\n        if (!arguments.length) {\n            return x;\n        }\n        bandwidth = x;\n        return smooth;\n    };\n\n    smooth.robustnessIterations = function (x: any) {\n        if (!arguments.length) {\n            return x;\n        }\n        robustnessIters = x;\n        return smooth;\n    };\n\n    smooth.accuracy = function (x: any) {\n        if (!arguments.length) {\n            return x;\n        }\n        accuracy = x;\n        return smooth;\n    };\n\n    return smooth;\n}\n\nfunction science_stats_loessFiniteReal(values: number[]) {\n    let n = values.length,\n        i = -1;\n\n    while (++i < n) {\n        if (!isFinite(values[i])) {\n            return false;\n        }\n    }\n\n    return true;\n}\n\nfunction science_stats_loessStrictlyIncreasing(xval: number[]) {\n    // eslint-disable-next-line prefer-const\n    let n = xval.length,\n        i = 0;\n\n    while (++i < n) {\n        if (xval[i - 1] >= xval[i]) {\n            return false;\n        }\n    }\n\n    return true;\n}\n\n// Compute the tricube weight function.\n// http://en.wikipedia.org/wiki/Local_regression#Weight_function\nfunction science_stats_loessTricube(x: number) {\n    return (x = 1 - x * x * x) * x * x;\n}\n\n// Given an index interval into xval that embraces a certain number of\n// points closest to xval[i-1], update the interval so that it embraces\n// the same number of points closest to xval[i], ignoring zero weights.\nfunction science_stats_loessUpdateBandwidthInterval(\n    xval: number[],\n    weights: number[],\n    i: number,\n    bandwidthInterval: number[]\n) {\n    const left = bandwidthInterval[0],\n        right = bandwidthInterval[1];\n\n    // The right edge should be adjusted if the next point to the right\n    // is closer to xval[i] than the leftmost point of the current interval\n    const nextRight = science_stats_loessNextNonzero(weights, right);\n    if (\n        nextRight < xval.length &&\n        xval[nextRight] - xval[i] < xval[i] - xval[left]\n    ) {\n        const nextLeft = science_stats_loessNextNonzero(weights, left);\n        bandwidthInterval[0] = nextLeft;\n        bandwidthInterval[1] = nextRight;\n    }\n}\n\nfunction science_stats_loessNextNonzero(weights: number[], i: number) {\n    let j = i + 1;\n    while (j < weights.length && weights[j] === 0) {\n        j++;\n    }\n    return j;\n}\n\nfunction median(x: number[]) {\n    return quantiles(x, [0.5])[0];\n}\n\n// Uses R's quantile algorithm type=7.\nfunction quantiles(d: number[], quantiles: number[]) {\n    d = d.slice().sort(ascending);\n    const n1 = d.length - 1;\n    return quantiles.map(function (q) {\n        if (q === 0) {\n            return d[0];\n        } else if (q === 1) {\n            return d[n1];\n        }\n\n        const index = 1 + q * n1,\n            lo = Math.floor(index),\n            h = index - lo,\n            a = d[lo - 1];\n\n        return h === 0 ? a : a + h * (d[lo] - a);\n    });\n}\n\nfunction ascending(a: number, b: number) {\n    return a - b;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport cloneDeep from \"lodash/cloneDeep\";\n\nimport { ITimeseriesWidgetSeriesData } from \"../types\";\nimport { loess } from \"./loess\";\n\nexport function transformLoessSmoothing(\n    data: ITimeseriesWidgetSeriesData[],\n    hasPercentile?: boolean\n): ITimeseriesWidgetSeriesData[] {\n    const transformed = cloneDeep(data);\n\n    const dataValues: { x: any[]; y: any[] } = {\n        x: [],\n        y: [],\n    };\n\n    transformed.forEach((d: ITimeseriesWidgetSeriesData) => {\n        dataValues.x.push(d.x.valueOf());\n        dataValues.y.push(d.y);\n    });\n\n    const smoothedData: number[] = loess().bandwidth(0.1)(\n        dataValues.x,\n        dataValues.y\n    );\n    smoothedData.forEach((value: number, index: number) => {\n        transformed[index].y = value;\n    });\n\n    return transformed;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport * as d3 from \"d3\";\nimport cloneDeep from \"lodash/cloneDeep\";\n\nimport { ITimeseriesWidgetSeriesData } from \"../types\";\nimport { transformLoessSmoothing } from \"./transformer-loess\";\n\nexport function transformChangePoint(\n    data: ITimeseriesWidgetSeriesData[],\n    hasPercentile?: boolean\n): ITimeseriesWidgetSeriesData[] {\n    let transformed = cloneDeep(data);\n    const sectionSize = 20; // to change section size\n    const criticalValue = 1.729; // one-tail 0.05\n\n    transformed = transformLoessSmoothing(transformed, hasPercentile);\n\n    let tScore: number; // The t_score formula enables you to take an individual score and transform it into a standardized form>one which helps you to compare scores.\n    let meanOfFirstSection: number = 0;\n    let standardDeviationOfFirstSection: number;\n    let meanOfSecondSection: number;\n    let standardDeviationOfSecondSection: number;\n    let yValuesOfFirstSection = [];\n    let yValuesOfSecondSection = [];\n    let merging: boolean = true;\n    let startIndex: number = 0;\n    let endIndex: number = sectionSize - 1;\n    let startIndex2: number = sectionSize;\n    let endIndex2: number = startIndex2 + endIndex;\n    while (merging) {\n        merging = false;\n        yValuesOfFirstSection = [];\n        yValuesOfSecondSection = [];\n        for (let i = startIndex; i <= endIndex; i++) {\n            yValuesOfFirstSection.push(data[i].y);\n        }\n        for (let j = startIndex2; j <= endIndex2; j++) {\n            yValuesOfSecondSection.push(data[j].y);\n        }\n        meanOfFirstSection = d3.mean(yValuesOfFirstSection) ?? 0;\n        meanOfSecondSection = d3.mean(yValuesOfSecondSection) ?? 0;\n        standardDeviationOfFirstSection =\n            d3.deviation(yValuesOfFirstSection) ?? 0;\n        if (standardDeviationOfFirstSection < 1.0) {\n            standardDeviationOfFirstSection = 1.0;\n        }\n        standardDeviationOfSecondSection =\n            d3.deviation(yValuesOfSecondSection) ?? 0;\n        if (standardDeviationOfSecondSection < 1.0) {\n            standardDeviationOfSecondSection = 1.0;\n        }\n        tScore = getT_Score(\n            meanOfFirstSection,\n            meanOfSecondSection,\n            standardDeviationOfFirstSection,\n            standardDeviationOfSecondSection,\n            yValuesOfFirstSection.length,\n            yValuesOfSecondSection.length,\n            criticalValue\n        );\n        if (tScore > criticalValue) {\n            for (let k = startIndex; k <= endIndex; k++) {\n                transformed[k].y = meanOfFirstSection;\n            }\n            startIndex = startIndex2;\n        }\n        endIndex = endIndex2;\n        if (endIndex + sectionSize < data.length) {\n            merging = true;\n            startIndex2 = endIndex + 1;\n            endIndex2 = startIndex2 + sectionSize - 1;\n        } else {\n            endIndex = data.length - 1;\n        }\n    }\n    for (let k = startIndex; k <= endIndex; k++) {\n        transformed[k].y = meanOfFirstSection;\n    }\n    return transformed;\n}\n\nfunction getT_Score(\n    meanOfFirstSection1: number,\n    meanOfSecondSection: number,\n    standardDeviationOfFirstSection: number,\n    standardDeviationOfSecondSection: number,\n    sizeOfFirstSection: number,\n    sizeOfSecondSection: number,\n    criticalValue: number\n) {\n    const differenceOfSampleMeans = meanOfFirstSection1 - meanOfSecondSection;\n    const standardDeviationOfBothSections =\n        Math.pow(standardDeviationOfFirstSection, 2) / sizeOfFirstSection +\n        Math.pow(standardDeviationOfSecondSection, 2) / sizeOfSecondSection;\n    const squareRootofResult = Math.sqrt(standardDeviationOfBothSections);\n    let tScore = differenceOfSampleMeans / squareRootofResult;\n    if (tScore > criticalValue) {\n        if (\n            meanOfFirstSection1 <\n                meanOfSecondSection + 2 * standardDeviationOfSecondSection &&\n            meanOfFirstSection1 >\n                meanOfSecondSection - 2 * standardDeviationOfSecondSection &&\n            meanOfSecondSection <\n                meanOfFirstSection1 + 2 * standardDeviationOfFirstSection &&\n            meanOfSecondSection >\n                meanOfFirstSection1 - 2 * standardDeviationOfFirstSection\n        ) {\n            tScore = 0.0;\n        }\n    }\n    return Math.abs(tScore);\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport cloneDeep from \"lodash/cloneDeep\";\nimport moment from \"moment/moment\";\n\nimport { ITimeseriesWidgetSeriesData } from \"../types\";\n\nexport function transformFloatingAverage(\n    data: ITimeseriesWidgetSeriesData[],\n    hasPercentile?: boolean\n): ITimeseriesWidgetSeriesData[] {\n    const transformed = cloneDeep(data);\n\n    function getAverageFromLastHour(\n        data: ITimeseriesWidgetSeriesData[],\n        index: number\n    ) {\n        let sum = 0.0;\n        let count = 0;\n\n        const dateTime = moment(data[index].x);\n        while (\n            index >= 0 &&\n            dateTime.diff(moment(data[index].x), \"minutes\") <= 60\n        ) {\n            count++;\n            sum += data[index].y;\n            index--;\n        }\n        return sum / count;\n    }\n\n    transformed.forEach((value: ITimeseriesWidgetSeriesData, index: number) => {\n        transformed[index].y = getAverageFromLastHour(transformed, index);\n    });\n\n    return transformed;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport cloneDeep from \"lodash/cloneDeep\";\n\nimport { ITimeseriesWidgetSeriesData } from \"../types\";\n\nexport function transformNormalize(\n    data: ITimeseriesWidgetSeriesData[],\n    hasPercentile?: boolean\n): ITimeseriesWidgetSeriesData[] {\n    const transformed = cloneDeep(data);\n\n    const dataValues: { x: any[]; y: any[] } = {\n        x: [],\n        y: [],\n    };\n\n    transformed.forEach((d: ITimeseriesWidgetSeriesData) => {\n        dataValues.x.push(d.x.valueOf());\n        dataValues.y.push(d.y);\n    });\n\n    const normalizedData: number[] = normalize(dataValues.y);\n    normalizedData.forEach((value: number, index: number) => {\n        transformed[index].y = value * 100.0;\n    });\n\n    function normalize(values: number[]) {\n        // find max and min\n        const max = Math.max(...values);\n        const min = Math.min(...values);\n\n        // if max = min --> return every value = 0\n        // else  --> return normalized data values\n        return max === min\n            ? values.map((value: number) => 0)\n            : values.map((value: number) => (value - min) / (max - min));\n    }\n\n    return transformed;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport cloneDeep from \"lodash/cloneDeep\";\n\nimport { ITimeseriesWidgetSeriesData } from \"../types\";\n\nexport function transformLinReg(\n    data: ITimeseriesWidgetSeriesData[],\n    hasPercentile?: boolean\n): ITimeseriesWidgetSeriesData[] {\n    const transformed = cloneDeep(data);\n\n    const dataValues: { x: any[]; y: any[] } = {\n        x: [],\n        y: [],\n    };\n\n    transformed.forEach((d: ITimeseriesWidgetSeriesData) => {\n        dataValues.x.push(d.x.valueOf());\n        dataValues.y.push(d.y);\n    });\n\n    function linearRegression(xValues: number[], yValues: number[]) {\n        let xSum = 0,\n            ySum = 0,\n            xySum = 0,\n            xxSum = 0,\n            count = 0,\n            x = 0,\n            y = 0;\n\n        if (xValues.length !== yValues.length) {\n            throw new Error(\n                \"The x and y data arrays need to be the same length\"\n            );\n        }\n\n        if (xValues.length === 0) {\n            throw new Error(\"There's no data to work with\");\n        }\n\n        for (let i = 0; i < xValues.length; i++) {\n            x = xValues[i];\n            y = yValues[i];\n            xSum += x;\n            ySum += y;\n            xxSum += Math.pow(x, 2);\n            xySum += x * y;\n            count++;\n        }\n\n        const m = (count * xySum - xSum * ySum) / (count * xxSum - xSum * xSum);\n        const b = ySum / count - (m * xSum) / count;\n\n        const resultXValues = [];\n        const resultYValues = [];\n\n        for (let i = 0; i < xValues.length; i++) {\n            x = xValues[i];\n            y = x * m + b;\n            resultXValues.push(x);\n            resultYValues.push(y);\n        }\n\n        return resultYValues;\n    }\n\n    const linRegData: number[] = linearRegression(dataValues.x, dataValues.y);\n    linRegData.forEach((value: number, index: number) => {\n        transformed[index].y = value;\n    });\n\n    return transformed;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport * as d3 from \"d3\";\nimport cloneDeep from \"lodash/cloneDeep\";\n\nimport { ITimeseriesWidgetSeriesData } from \"../types\";\nimport { transformNormalize } from \"./transformer-normalize\";\n\nexport function transformStandardize(\n    data: ITimeseriesWidgetSeriesData[],\n    hasPercentile?: boolean\n): ITimeseriesWidgetSeriesData[] {\n    let transformed = cloneDeep(data);\n\n    const dataValues: { x: any[]; y: any[] } = {\n        x: [],\n        y: [],\n    };\n\n    transformed.forEach((d: ITimeseriesWidgetSeriesData) => {\n        dataValues.x.push(d.x.valueOf());\n        dataValues.y.push(d.y);\n    });\n\n    const standardizedData: number[] = standardizeData(dataValues.y);\n    standardizedData.forEach((value: number, index: number) => {\n        transformed[index].y = hasPercentile ? Math.abs(value) : value;\n    });\n    if (hasPercentile) {\n        transformed = transformNormalize(transformed);\n    }\n\n    function standardizeData(data: any[]) {\n        // to standardize array of data --> subtract mean from each value, divide each value by standard devation (except if standard deviation < 1 --> divide by 1)\n        const stddev: number = d3.deviation(data) ?? 1;\n        return data.map(\n            (value: any) =>\n                (value - (d3.mean(data) ?? 0)) / (stddev < 1 ? 1 : stddev)\n        );\n    }\n\n    return transformed;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport cloneDeep from \"lodash/cloneDeep\";\n\nimport { ITimeseriesWidgetSeriesData } from \"../types\";\nimport { transformLoessSmoothing } from \"./transformer-loess\";\nimport { transformStandardize } from \"./transformer-standardize\";\n\nexport function transformLoessStandardize(\n    data: ITimeseriesWidgetSeriesData[],\n    hasPercentile?: boolean\n): ITimeseriesWidgetSeriesData[] {\n    let transformed = cloneDeep(data);\n\n    transformed = transformLoessSmoothing(transformed, hasPercentile);\n    transformed = transformStandardize(transformed, hasPercentile);\n\n    return transformed;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport * as d3 from \"d3\";\nimport cloneDeep from \"lodash/cloneDeep\";\n\nimport { ITimeseriesWidgetSeriesData } from \"../types\";\nimport { transformNormalize } from \"./transformer-normalize\";\n\nexport function transformPercentileStd(\n    data: ITimeseriesWidgetSeriesData[],\n    hasPercentile?: boolean\n): ITimeseriesWidgetSeriesData[] {\n    let transformed = cloneDeep(data);\n\n    const dataValues: { x: any[]; y: any[] } = {\n        x: [],\n        y: [],\n    };\n\n    transformed.forEach((d: ITimeseriesWidgetSeriesData) => {\n        dataValues.x.push(d.x.valueOf());\n        dataValues.y.push(d.y);\n    });\n\n    function percentileStandardizeData(data: number[]) {\n        const median: number = d3.median(data) ?? 0;\n        const medianAbsoluteDeviation: number = getMedianAbsoluteDeviation(\n            data,\n            median\n        );\n        // formula to transform data (percentile deviation)\n        return data.map(\n            (value: number) => (value - median) / medianAbsoluteDeviation\n        );\n    }\n\n    function getMedianAbsoluteDeviation(values: number[], median: number) {\n        const absoluteValueOfMinusMedian: number[] = values.map(\n            (value: number) => Math.abs(value - median)\n        );\n        let medianAbsoluteDeviation: number =\n            d3.median(absoluteValueOfMinusMedian) ?? 0;\n        // median absolute deviation\n        // If the MAD is less than one then just set it to one in order to just show raw difference from the median\n        if (medianAbsoluteDeviation < 1.0) {\n            medianAbsoluteDeviation = 1.0;\n        }\n        return medianAbsoluteDeviation;\n    }\n\n    const percentileStandardizedData: number[] = percentileStandardizeData(\n        dataValues.y\n    );\n    percentileStandardizedData.forEach((value: number, index: number) => {\n        transformed[index].y = hasPercentile ? Math.abs(value) : value;\n    });\n    if (hasPercentile) {\n        transformed = transformNormalize(transformed, hasPercentile);\n    }\n\n    return transformed;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./transformer-difference\";\nexport * from \"./transformer-change-point\";\nexport * from \"./transformer-floating-average\";\nexport * from \"./transformer-loess\";\nexport * from \"./transformer-normalize\";\nexport * from \"./transformer-lin-reg\";\nexport * from \"./transformer-loess-standardize\";\nexport * from \"./transformer-percentile-std\";\nexport * from \"./transformer-standardize\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    Inject,\n    Injectable,\n    OnChanges,\n    OnDestroy,\n    Optional,\n} from \"@angular/core\";\n// eslint-disable-next-line import/no-deprecated\nimport { merge } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IDataSource, IEvent } from \"@nova-ui/bits\";\nimport {\n    ChartAssist,\n    ChartPalette,\n    defaultColorProvider,\n    IAccessors,\n    IChartAssistSeries,\n    IChartEvent,\n    IDataPointsPayload,\n    IInteractionDataPointsEvent,\n    IInteractionValuesPayload,\n    INTERACTION_DATA_POINTS_EVENT,\n    INTERACTION_VALUES_EVENT,\n    InteractionType,\n    IScale,\n    ISetDomainEventPayload,\n    IValueProvider,\n    IXYGridConfig,\n    IXYScales,\n    Renderer,\n    SequentialColorProvider,\n    SET_DOMAIN_EVENT,\n    XYGrid,\n    XYRenderer,\n    XYAccessors,\n} from \"@nova-ui/charts\";\n\nimport { INTERACTION, SET_TIMEFRAME } from \"../../../../services/types\";\nimport {\n    DATA_SOURCE,\n    IHasChangeDetector,\n    PIZZAGNA_EVENT_BUS,\n} from \"../../../../types\";\nimport { LegendPlacement } from \"../../../../widget-types/common/widget/legend\";\nimport {\n    SUMMARY_LEGEND_BCG_COLOR,\n    SUMMARY_LEGEND_COLOR,\n} from \"../../timeseries-helpers\";\nimport { TimeseriesScalesService } from \"../../timeseries-scales.service\";\nimport {\n    transformChangePoint,\n    transformDifference,\n    transformFloatingAverage,\n    transformLinReg,\n    transformLoessSmoothing,\n    transformLoessStandardize,\n    transformNormalize,\n    transformPercentileStd,\n    transformStandardize,\n} from \"../../transformer/public-api\";\nimport {\n    ITimeseriesWidgetSeriesData,\n    TimeseriesChartPreset,\n    TimeseriesChartTypes,\n    TimeseriesInteractionType,\n    TimeseriesTransformer,\n    TimeseriesWidgetZoomPlugin,\n    TimeseriesWidgetProjectType,\n} from \"../../types\";\nimport { TimeseriesChartComponent } from \"../timeseries-chart.component\";\n\ninterface ITransformerDescription {\n    displayName: string;\n    transformer?: (\n        data: ITimeseriesWidgetSeriesData[],\n        hasPercentile?: boolean\n    ) => ITimeseriesWidgetSeriesData[];\n}\n\n@Injectable()\nexport abstract class XYChartComponent\n    extends TimeseriesChartComponent\n    implements OnChanges, OnDestroy, IHasChangeDetector\n{\n    public chartAssist: ChartAssist;\n    public valueAccessorKey: string = \"y\";\n    public collectionId: string = \"\";\n    public zoomPlugins: TimeseriesWidgetZoomPlugin[];\n\n    protected renderer: Renderer<IAccessors>;\n    protected accessors: IAccessors;\n\n    public timeseriesChartTypes = TimeseriesChartTypes;\n    public summarySerie: IChartAssistSeries<IAccessors>;\n    public summaryLegendBcgColor = SUMMARY_LEGEND_BCG_COLOR;\n    public summaryLegendColor = SUMMARY_LEGEND_COLOR;\n\n    public transformers = new Map<\n        TimeseriesTransformer,\n        ITransformerDescription\n    >([\n        [\n            TimeseriesTransformer.None,\n            { displayName: $localize`None`, transformer: undefined },\n        ],\n        [\n            TimeseriesTransformer.ChangePoint,\n            {\n                displayName: $localize`Change Point`,\n                transformer: transformChangePoint,\n            },\n        ],\n        [\n            TimeseriesTransformer.Difference,\n            {\n                displayName: $localize`Difference`,\n                transformer: transformDifference,\n            },\n        ],\n        [\n            TimeseriesTransformer.FloatingAverage,\n            {\n                displayName: $localize`Floating Average`,\n                transformer: transformFloatingAverage,\n            },\n        ],\n        [\n            TimeseriesTransformer.Linear,\n            { displayName: $localize`Linear`, transformer: transformLinReg },\n        ],\n        [\n            TimeseriesTransformer.Normalize,\n            {\n                displayName: $localize`Normalize`,\n                transformer: transformNormalize,\n            },\n        ],\n        [\n            TimeseriesTransformer.PercentileStd,\n            {\n                displayName: $localize`Percentile Standardized`,\n                transformer: transformPercentileStd,\n            },\n        ],\n        [\n            TimeseriesTransformer.Smoothing,\n            {\n                displayName: $localize`Smoothing`,\n                transformer: transformLoessSmoothing,\n            },\n        ],\n        [\n            TimeseriesTransformer.LoessStandardize,\n            {\n                displayName: $localize`Smoothing Standardized`,\n                transformer: transformLoessStandardize,\n            },\n        ],\n        [\n            TimeseriesTransformer.Standardize,\n            {\n                displayName: $localize`Standardize`,\n                transformer: transformStandardize,\n            },\n        ],\n    ]);\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) protected eventBus: EventBus<IEvent>,\n        @Optional() @Inject(DATA_SOURCE) dataSource: IDataSource,\n        public timeseriesScalesService: TimeseriesScalesService,\n        public changeDetector: ChangeDetectorRef\n    ) {\n        super(eventBus, timeseriesScalesService, dataSource);\n    }\n\n    protected abstract createAccessors(\n        colorProvider: IValueProvider<string>\n    ): IAccessors;\n\n    protected abstract createChartAssist(palette: ChartPalette): ChartAssist;\n\n    public mapSeriesSet(\n        data: any[],\n        scales: IXYScales\n    ): IChartAssistSeries<IAccessors>[] {\n        const yScales: IScale<any>[] = [scales.y];\n        if (scales.yRight) {\n            yScales.push(scales.yRight);\n        }\n        const dataMapped: IChartAssistSeries<IAccessors>[] = data.map(\n            (series: any) => {\n                // matches scale units to the metric unit for either left y-axis scale or right y-axis scale\n                let yScale = yScales.find(\n                    (yScale) => yScale.scaleUnits === series.metricUnits\n                );\n                if (!yScale) {\n                    yScale =\n                        yScales.find(\n                            (yScale) => yScale.scaleUnits === \"generic\"\n                        ) ?? scales.y;\n                }\n\n                return {\n                    ...series,\n                    scales: {\n                        x: scales.x,\n                        y: yScale,\n                    },\n                    renderer: this.renderer,\n                    accessors: this.accessors,\n                };\n            }\n        );\n\n        if (this.widgetData.summarySerie) {\n            this.summarySerie = {\n                ...this.widgetData.summarySerie,\n                accessors: new XYAccessors(),\n                renderer: new XYRenderer({\n                    ignoreForDomainCalculation: true,\n                }),\n                scales: {\n                    x: scales.x,\n                    y: scales.y,\n                },\n                showInLegend: false,\n                preprocess: false,\n            };\n            dataMapped.push(this.summarySerie);\n        }\n\n        return dataMapped;\n    }\n\n    /** Checks if legend should be shown. */\n    public hasLegend(): boolean {\n        return (\n            this.configuration.legendPlacement &&\n            this.configuration.legendPlacement !== LegendPlacement.None\n        );\n    }\n\n    /** Checks if legend should be aligned to right. */\n    public legendShouldBeAlignedRight(): boolean {\n        return this.configuration.legendPlacement === LegendPlacement.Right;\n    }\n\n    public onPrimaryDescClick(\n        event: MouseEvent,\n        legendSeries: IChartAssistSeries<IAccessors>\n    ): void {\n        if (!this.seriesInteractive) {\n            return;\n        }\n\n        event.stopPropagation();\n        this.eventBus.getStream(INTERACTION).next({\n            payload: {\n                data: legendSeries,\n                interactionType: TimeseriesInteractionType.Series,\n            },\n        });\n    }\n\n    /** Updates chart data. */\n    protected updateChartData(): void {\n        const grid = this.chartAssist.chart.getGrid() as XYGrid;\n        if (this.scales.y?.id) {\n            grid.leftScaleId = this.scales.y.id;\n        }\n\n        if (\n            (this.scales.yRight && this.widgetData.series.length === 1) ||\n            (this.scales.y &&\n                this.scales.yRight &&\n                this.scales.y.scaleUnits === this.scales.yRight.scaleUnits)\n        ) {\n            // if there is only one series to display, or if the left y-axis and right y-axis have the same units, both y-axises are same\n            this.scales.yRight = this.scales.y;\n            grid.rightScaleId = this.scales.y.id;\n        } else {\n            if (this.scales.yRight?.id) {\n                grid.rightScaleId = this.scales.yRight.id;\n            }\n        }\n\n        const gridConfig = grid.config();\n        // hides botom axis if it's not last chart in the group\n        gridConfig.axis.bottom.visible = !this.configuration?.hasAdjacentChart;\n        gridConfig.borders.bottom.visible =\n            !this.configuration?.hasAdjacentChart;\n\n        this.chartAssist.update(\n            this.mapSeriesSet(this.widgetData.series, this.scales)\n        );\n    }\n\n    /**\n     * Initialize chart\n     */\n    protected buildChart(): void {\n        this.buildChart$.next();\n\n        const colorProvider =\n            this.configuration.chartColors &&\n            this.configuration.chartColors?.length > 0\n                ? new SequentialColorProvider(this.configuration.chartColors)\n                : defaultColorProvider();\n\n        const palette = new ChartPalette(colorProvider);\n        this.accessors = this.createAccessors(palette.standardColors);\n        this.chartAssist = this.createChartAssist(palette);\n\n        const chart = this.chartAssist.chart;\n        const gridConfig = chart.getGrid().config() as IXYGridConfig;\n\n        if (this.configuration.gridConfig?.xAxisTicksCount) {\n            gridConfig.axis.bottom.approximateTicks =\n                this.configuration.gridConfig.xAxisTicksCount;\n        }\n\n        if (\n            gridConfig.dimension.marginLocked &&\n            this.configuration.gridConfig?.sideMarginLocked\n        ) {\n            gridConfig.dimension.marginLocked.left = true;\n            gridConfig.dimension.marginLocked.right = true;\n        }\n\n        if (this.configuration.gridConfig?.sideMargin) {\n            gridConfig.dimension.margin.left =\n                this.configuration.gridConfig.sideMargin;\n            gridConfig.dimension.margin.right =\n                this.configuration.gridConfig.sideMargin;\n        }\n\n        if (this.configuration.enableZoom && this.zoomPlugins.length) {\n            chart.addPlugin(this.zoomPlugins[0]);\n        }\n\n        chart\n            .getEventBus()\n            .getStream(SET_DOMAIN_EVENT)\n            // eslint-disable-next-line import/no-deprecated\n            .pipe(takeUntil(merge(this.destroy$, this.buildChart$)))\n            .subscribe((event) => {\n                const payload = <ISetDomainEventPayload>event.data;\n                const newDomain = payload[Object.keys(payload)[0]];\n                this.eventBus.getStream(SET_TIMEFRAME).next({\n                    payload: {\n                        startDatetime: newDomain[0],\n                        endDatetime: newDomain[1],\n                        selectedPresetId: undefined,\n                    },\n                });\n            });\n\n        this.setupInteraction();\n    }\n\n    /**\n     * Subscribe to chart events and emit\n     */\n    protected setupInteraction(): void {\n        // interaction with chart data points\n        this.chartAssist.chart\n            .getEventBus()\n            .getStream(INTERACTION_DATA_POINTS_EVENT)\n            // eslint-disable-next-line import/no-deprecated\n            .pipe(takeUntil(merge(this.destroy$, this.buildChart$)))\n            .subscribe((values: IChartEvent) => {\n                const payload: IInteractionDataPointsEvent = values.data;\n                if (payload.interactionType === InteractionType.Click) {\n                    this.eventBus.getStream(INTERACTION).next({\n                        payload: {\n                            data: payload.dataPoints as IDataPointsPayload,\n                            interactionType:\n                                TimeseriesInteractionType.DataPoints,\n                        },\n                    });\n                }\n            });\n\n        // interaction with values\n        this.chartAssist.chart\n            .getEventBus()\n            .getStream(INTERACTION_VALUES_EVENT)\n            // eslint-disable-next-line import/no-deprecated\n            .pipe(takeUntil(merge(this.destroy$, this.buildChart$)))\n            .subscribe((values: IChartEvent) => {\n                const payload: IInteractionValuesPayload = values.data;\n                if (payload.interactionType === InteractionType.Click) {\n                    this.eventBus.getStream(INTERACTION).next({\n                        payload: {\n                            data: payload.values,\n                            interactionType: TimeseriesInteractionType.Values,\n                        },\n                    });\n                }\n            });\n    }\n\n    public displayLegendMenu(): boolean {\n        return (\n            this.configuration.preset === TimeseriesChartPreset.Line &&\n            !!this.configuration.allowLegendMenu &&\n            this.configuration.projectType ===\n                TimeseriesWidgetProjectType.PerfstackApp\n        );\n    }\n\n    public displayDeleteButton(): boolean {\n        return (\n            this.configuration.preset !== TimeseriesChartPreset.Line &&\n            !!this.configuration.allowLegendMenu &&\n            this.configuration.projectType ===\n                TimeseriesWidgetProjectType.PerfstackApp\n        );\n    }\n\n    public transformData(metricId: string, trId: TimeseriesTransformer): void {\n        const serie = this.widgetData.series.find((s) => s.id === metricId);\n        if (!serie) {\n            return;\n        }\n        serie.transformer = this.transformers.get(trId)?.transformer;\n\n        if (serie.rawData) {\n            if (serie.transformer === undefined) {\n                // revert transformed data\n                serie.data = serie.rawData;\n                this.updateYAxisDomain();\n            } else {\n                this.transformSeriesData(serie);\n            }\n        }\n        this.updateChartData();\n    }\n\n    public getLegendValue(\n        legendSeries: IChartAssistSeries<IAccessors<any>>,\n        valueAccessorKey: string\n    ): string | number | undefined {\n        const val = this.chartAssist.getHighlightedValue(\n            legendSeries,\n            \"y\",\n            \"tick\",\n            valueAccessorKey\n        );\n\n        if (\n            this.configuration.projectType ===\n                TimeseriesWidgetProjectType.PerfstackApp &&\n            this.configuration.preset === TimeseriesChartPreset.StackedArea &&\n            this.configuration.units === \"percent\"\n        ) {\n            const submetricsCount = this.chartAssist.legendSeriesSet.length;\n            const strVal = `${val ?? 0}`;\n\n            return `${parseFloat(strVal ?? \"0\") * submetricsCount} %`;\n        }\n\n        return val;\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { ChangeDetectorRef, Component, Inject, Optional } from \"@angular/core\";\n\nimport { EventBus, IDataSource, IEvent } from \"@nova-ui/bits\";\nimport {\n    Chart,\n    ChartAssist,\n    ChartPalette,\n    IAccessors,\n    IValueProvider,\n    LineAccessors,\n    LineRenderer,\n    XYGrid,\n    XYGridConfig,\n} from \"@nova-ui/charts\";\n\nimport { DATA_SOURCE, PIZZAGNA_EVENT_BUS } from \"../../../../../types\";\nimport { TimeseriesScalesService } from \"../../../timeseries-scales.service\";\nimport { XYChartComponent } from \"../xy-chart.component\";\n\n@Component({\n    selector: \"nui-line-chart\",\n    templateUrl: \"../xy-chart.component.html\",\n    styleUrls: [\"../xy-chart.component.less\"],\n    standalone: false,\n})\nexport class LineChartComponent extends XYChartComponent {\n    public static lateLoadKey = \"LineChartComponent\";\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        @Optional() @Inject(DATA_SOURCE) dataSource: IDataSource,\n        timeseriesScalesService: TimeseriesScalesService,\n        changeDetector: ChangeDetectorRef\n    ) {\n        super(eventBus, dataSource, timeseriesScalesService, changeDetector);\n\n        this.renderer = new LineRenderer();\n    }\n\n    protected createAccessors(\n        colorProvider: IValueProvider<string>\n    ): IAccessors {\n        return new LineAccessors(colorProvider);\n    }\n\n    protected createChartAssist(palette: ChartPalette): ChartAssist {\n        const gridConfig = new XYGridConfig();\n        gridConfig.axis.left.fit = true;\n        const chart = new Chart(new XYGrid(gridConfig));\n        // @ts-ignore: Avoiding strict mode errors, keeping old flow\n        return new ChartAssist(chart, null, palette);\n    }\n}\n","<div\n    class=\"nui-chart-layout h-100\"\n    [class.layout-fixed]=\"configuration.gridConfig?.fixedLayout\"\n>\n    <div\n        *ngIf=\"!configuration.gridConfig?.hideYAxisLabel\"\n        class=\"axis-label-left nui-text-small\"\n    >\n        <strong>{{ configuration.leftAxisLabel }}</strong>\n    </div>\n    <div class=\"chart\">\n        <nui-chart\n            [nuiChartCollectionId]=\"collectionId\"\n            class=\"w-100\"\n            [chart]=\"chartAssist.chart\"\n        ></nui-chart>\n    </div>\n    <div\n        class=\"d-flex\"\n        *ngIf=\"hasLegend()\"\n        [ngClass]=\"[\n            legendShouldBeAlignedRight() ? 'legend scrollable' : 'legend-bottom'\n        ]\"\n    >\n        <nui-legend\n            class=\"m-auto\"\n            [active]=\"chartAssist.isLegendActive\"\n            [interactive]=\"true\"\n            [orientation]=\"\n                legendShouldBeAlignedRight() ? 'vertical' : 'horizontal'\n            \"\n        >\n            <nui-legend-series\n                *ngIf=\"widgetData.summarySerie && summarySerie\"\n                class=\"summary-serie\"\n                [interactive]=\"false\"\n                (mouseenter)=\"chartAssist.resetVisibleSeries()\"\n            >\n                <nui-rich-legend-tile\n                    [value]=\"\n                        chartAssist.getHighlightedValue(\n                            summarySerie,\n                            'y',\n                            'tick'\n                        )\n                    \"\n                    [backgroundColor]=\"summaryLegendBcgColor\"\n                    [color]=\"summaryLegendColor\"\n                >\n                </nui-rich-legend-tile>\n\n                <div description class=\"description-container\">\n                    <div class=\"description-text nui-text-small\">\n                        <div\n                            class=\"description description-primary\"\n                            [ngClass]=\"{\n                                'nui-text-link-small link': seriesInteractive\n                            }\"\n                            [title]=\"summarySerie.legendDescriptionPrimary\"\n                        >\n                            {{ summarySerie.legendDescriptionPrimary }}\n                        </div>\n\n                        <div\n                            class=\"description description-secondary\"\n                            [title]=\"summarySerie.legendDescriptionSecondary\"\n                        >\n                            {{ summarySerie.legendDescriptionSecondary }}\n                        </div>\n                    </div>\n                </div>\n\n                <button\n                    nui-button\n                    legendMenu\n                    icon=\"remove\"\n                    type=\"button\"\n                    displayStyle=\"action\"\n                    *ngIf=\"displayDeleteButton()\"\n                    (click)=\"removeMetric(summarySerie.id)\"\n                    displayStyle=\"action\"\n                ></button>\n            </nui-legend-series>\n\n            <nui-legend-series\n                class=\"xy-chart__legend-series\"\n                [ngClass]=\"\n                    'xy-chart__legend-series--state-' +\n                    chartAssist.renderStatesIndex[legendSeries.id]?.state\n                \"\n                *ngFor=\"\n                    let legendSeries of chartAssist.legendSeriesSet;\n                    trackBy: chartAssist.seriesTrackByFn\n                \"\n                [isSelected]=\"!chartAssist.isSeriesHidden(legendSeries.id)\"\n                (isSelectedChange)=\"\n                    chartAssist.toggleSeries(legendSeries.id, $event)\n                \"\n                (mouseenter)=\"chartAssist.emphasizeSeries(legendSeries.id)\"\n                (mouseleave)=\"chartAssist.resetVisibleSeries()\"\n                [seriesRenderState]=\"\n                    chartAssist.renderStatesIndex[legendSeries.id]?.state\n                \"\n            >\n                <nui-rich-legend-tile\n                    [value]=\"getLegendValue(legendSeries, valueAccessorKey)\"\n                    [backgroundColor]=\"\n                        chartAssist.palette.standardColors.get(legendSeries.id)\n                    \"\n                    [color]=\"\n                        chartAssist.palette.textColors.get(legendSeries.id)\n                    \"\n                >\n                    <nui-chart-marker\n                        rightEdge\n                        [marker]=\"chartAssist.markers.get(legendSeries.id)\"\n                        [color]=\"\n                            chartAssist.palette.standardColors.get(\n                                legendSeries.id\n                            )\n                        \"\n                    >\n                    </nui-chart-marker>\n                </nui-rich-legend-tile>\n                <div\n                    description\n                    class=\"description-container d-flex nui-text-small justify-content-center\"\n                >\n                    <div class=\"descriptions\">\n                        <div\n                            *ngIf=\"!legendSeries.link\"\n                            class=\"description description-primary\"\n                            [ngClass]=\"{\n                                'nui-text-link-small link': seriesInteractive\n                            }\"\n                            (click)=\"onPrimaryDescClick($event, legendSeries)\"\n                            [title]=\"legendSeries.legendDescriptionPrimary\"\n                        >\n                            {{ legendSeries.legendDescriptionPrimary }}\n                        </div>\n                        <a\n                            class=\"description description-primary nui-text-link-small link\"\n                            (click)=\"$event.stopPropagation()\"\n                            *ngIf=\"legendSeries.link\"\n                            [href]=\"legendSeries.link\"\n                            rel=\"noopener noreferrer\"\n                            [title]=\"legendSeries.legendDescriptionPrimary\"\n                        >\n                            {{ legendSeries.legendDescriptionPrimary }}\n                        </a>\n                        <div\n                            class=\"description description-secondary\"\n                            *ngIf=\"\n                                !legendSeries.secondaryLink &&\n                                !widgetData.summarySerie\n                            \"\n                            [title]=\"legendSeries.legendDescriptionSecondary\"\n                        >\n                            {{ legendSeries.legendDescriptionSecondary }}\n                        </div>\n                        <a\n                            class=\"description description-secondary nui-text-link-small link\"\n                            (click)=\"$event.stopPropagation()\"\n                            *ngIf=\"\n                                legendSeries.secondaryLink &&\n                                !widgetData.summarySerie\n                            \"\n                            [href]=\"legendSeries.secondaryLink\"\n                            rel=\"noopener noreferrer\"\n                            [title]=\"legendSeries.legendDescriptionSecondary\"\n                        >\n                            {{ legendSeries.legendDescriptionSecondary }}\n                        </a>\n                    </div>\n                    <nui-icon\n                        *ngIf=\"legendSeries.realtime\"\n                        icon=\"fast-poll\"\n                        iconColor=\"primary-blue\"\n                    ></nui-icon>\n                    <nui-icon\n                        *ngIf=\"legendSeries.transformer\"\n                        icon=\"performance\"\n                        iconColor=\"primary-blue\"\n                    ></nui-icon>\n                </div>\n                <nui-menu\n                    legendMenu\n                    *ngIf=\"displayLegendMenu()\"\n                    icon=\"menu\"\n                    displayStyle=\"action\"\n                    [appendToBody]=\"true\"\n                >\n                    <nui-menu-group>\n                        <nui-menu-action\n                            i18n\n                            (actionDone)=\"removeMetric(legendSeries.id)\"\n                            >Remove</nui-menu-action\n                        >\n                    </nui-menu-group>\n                    <nui-menu-group header=\"Display Transforms\" i18n-header>\n                        <nui-menu-action\n                            *ngFor=\"let tr of transformers | nuiMapKeyValue\"\n                            [class.selected]=\"\n                                legendSeries.transformer?.name ===\n                                tr.value.transformer?.name\n                            \"\n                            (actionDone)=\"\n                                transformData(legendSeries.id, tr.key)\n                            \"\n                        >\n                            {{ tr.value.displayName }}\n                        </nui-menu-action>\n                    </nui-menu-group>\n                </nui-menu>\n            </nui-legend-series>\n        </nui-legend>\n    </div>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { ChangeDetectorRef, Component, Inject, Optional } from \"@angular/core\";\n\nimport { EventBus, IDataSource, IEvent } from \"@nova-ui/bits\";\nimport {\n    areaGrid,\n    AreaRenderer,\n    Chart,\n    ChartAssist,\n    ChartPalette,\n    IAccessors,\n    IValueProvider,\n    stackedArea,\n    stackedAreaAccessors,\n} from \"@nova-ui/charts\";\n\nimport { DATA_SOURCE, PIZZAGNA_EVENT_BUS } from \"../../../../../types\";\nimport { TimeseriesScalesService } from \"../../../timeseries-scales.service\";\nimport { XYChartComponent } from \"../xy-chart.component\";\n\n@Component({\n    selector: \"nui-stacked-area-chart\",\n    templateUrl: \"../xy-chart.component.html\",\n    styleUrls: [\"../xy-chart.component.less\"],\n    standalone: false,\n})\nexport class StackedAreaChartComponent extends XYChartComponent {\n    public static lateLoadKey = \"StackedAreaChartComponent\";\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        @Optional() @Inject(DATA_SOURCE) dataSource: IDataSource,\n        timeseriesScalesService: TimeseriesScalesService,\n        changeDetector: ChangeDetectorRef\n    ) {\n        super(eventBus, dataSource, timeseriesScalesService, changeDetector);\n\n        this.renderer = new AreaRenderer();\n        this.valueAccessorKey = \"y1\";\n    }\n\n    protected createAccessors(\n        colorProvider: IValueProvider<string>\n    ): IAccessors {\n        return stackedAreaAccessors(colorProvider);\n    }\n\n    protected createChartAssist(palette: ChartPalette): ChartAssist {\n        const grid = areaGrid();\n        const gridConfig = grid.config();\n        gridConfig.axis.left.fit = true;\n        const chart = new Chart(grid);\n\n        if (\n            this.configuration.gridConfig?.hideYAxisTicksLabels &&\n            this.configuration.units === \"percent\"\n        ) {\n            gridConfig.axis.left.visible = false;\n            gridConfig.axis.right.visible = false;\n        }\n\n        return new ChartAssist(chart, stackedArea, palette);\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { ChangeDetectorRef, Component, Inject, Optional } from \"@angular/core\";\n\nimport { EventBus, IDataSource, IEvent } from \"@nova-ui/bits\";\nimport {\n    barAccessors,\n    barGrid,\n    BarHighlightStrategy,\n    BarHighlightStrategyOutline,\n    BarRenderer,\n    Chart,\n    ChartAssist,\n    ChartPalette,\n    IAccessors,\n    IChartAssistSeries,\n    InteractionLabelPlugin,\n    InteractionLinePlugin,\n    IValueProvider,\n    IXYScales,\n    stack,\n    TimeIntervalScale,\n} from \"@nova-ui/charts\";\n\nimport { DATA_SOURCE, PIZZAGNA_EVENT_BUS } from \"../../../../../types\";\nimport { TimeseriesScalesService } from \"../../../timeseries-scales.service\";\nimport { TimeseriesWidgetProjectType } from \"../../../types\";\nimport { XYChartComponent } from \"../xy-chart.component\";\n\n@Component({\n    selector: \"nui-stacked-bar-chart\",\n    templateUrl: \"../xy-chart.component.html\",\n    styleUrls: [\"../xy-chart.component.less\"],\n    standalone: false,\n})\nexport class StackedBarChartComponent extends XYChartComponent {\n    public static lateLoadKey = \"StackedBarChartComponent\";\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        @Optional() @Inject(DATA_SOURCE) dataSource: IDataSource,\n        timeseriesScalesService: TimeseriesScalesService,\n        changeDetector: ChangeDetectorRef\n    ) {\n        super(eventBus, dataSource, timeseriesScalesService, changeDetector);\n\n        this.valueAccessorKey = \"value\";\n    }\n\n    public mapSeriesSet(\n        data: any[],\n        scales: IXYScales\n    ): IChartAssistSeries<IAccessors>[] {\n        if (scales.x instanceof TimeIntervalScale) {\n            // @ts-ignore\n            this.accessors.data.thickness = undefined; // allow the renderer to calculate thickness\n        } else {\n            // @ts-ignore\n            this.accessors.data.thickness = () => 5; // arbitrary constant value\n        }\n\n        return super.mapSeriesSet(data, scales);\n    }\n\n    protected createAccessors(\n        colorProvider: IValueProvider<string>\n    ): IAccessors {\n        const accessors = barAccessors({ horizontal: false }, colorProvider);\n        accessors.data.category = (d) => d.x;\n        accessors.data.value = (d) => d.y;\n\n        return accessors;\n    }\n\n    protected createChartAssist(palette: ChartPalette): ChartAssist {\n        // disable pointer events on bars to ensure the zoom drag target is the mouse interactive area rather than the bars\n        this.renderer = new BarRenderer({\n            highlightStrategy:\n                this.configuration?.projectType ===\n                TimeseriesWidgetProjectType.PerfstackApp\n                    ? new BarHighlightStrategyOutline(\"x\")\n                    : new BarHighlightStrategy(\"x\"),\n            pointerEvents: false,\n        });\n\n        const chart = new Chart(barGrid());\n        chart.addPlugin(new InteractionLinePlugin());\n        chart.addPlugin(new InteractionLabelPlugin());\n        return new ChartAssist(chart, stack, palette);\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { ChangeDetectorRef, Component, Inject, Optional } from \"@angular/core\";\n\nimport { EventBus, IDataSource, IEvent } from \"@nova-ui/bits\";\nimport {\n    areaGrid,\n    AreaRenderer,\n    Chart,\n    ChartAssist,\n    ChartPalette,\n    IAccessors,\n    IValueProvider,\n    stackedAreaAccessors,\n    stackedPercentageArea,\n} from \"@nova-ui/charts\";\n\nimport { DATA_SOURCE, PIZZAGNA_EVENT_BUS } from \"../../../../../types\";\nimport { TimeseriesScalesService } from \"../../../timeseries-scales.service\";\nimport { XYChartComponent } from \"../xy-chart.component\";\n\n@Component({\n    selector: \"nui-stacked-percentage-area-chart\",\n    templateUrl: \"../xy-chart.component.html\",\n    styleUrls: [\"../xy-chart.component.less\"],\n    standalone: false,\n})\nexport class StackedPercentageAreaChartComponent extends XYChartComponent {\n    public static lateLoadKey = \"StackedPercentageAreaChartComponent\";\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) eventBus: EventBus<IEvent>,\n        @Optional() @Inject(DATA_SOURCE) dataSource: IDataSource,\n        timeseriesScalesService: TimeseriesScalesService,\n        changeDetector: ChangeDetectorRef\n    ) {\n        super(eventBus, dataSource, timeseriesScalesService, changeDetector);\n\n        this.renderer = new AreaRenderer();\n        this.valueAccessorKey = \"y1\";\n    }\n\n    protected createAccessors(\n        colorProvider: IValueProvider<string>\n    ): IAccessors {\n        return stackedAreaAccessors(colorProvider);\n    }\n\n    protected createChartAssist(palette: ChartPalette): ChartAssist {\n        const grid = areaGrid();\n        grid.config().axis.left.fit = true;\n        const chart = new Chart(grid);\n        return new ChartAssist(chart, stackedPercentageArea, palette);\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    Component,\n    ElementRef,\n    Inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    SimpleChanges,\n} from \"@angular/core\";\nimport moment from \"moment/moment\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IEvent, IEventDefinition } from \"@nova-ui/bits\";\nimport {\n    TimeseriesZoomPlugin,\n    TimeseriesZoomPluginsSyncService,\n    ITimeseriesZoomPluginInspectionFrame,\n} from \"@nova-ui/charts\";\n\nimport { PIZZAGNA_EVENT_BUS } from \"../../../types\";\n\nexport const TIMESERIES_INSPECTION_MENU_ZOOM_IN: IEventDefinition<\n    IEvent<ITimeseriesZoomPluginInspectionFrame>\n> = {\n    id: \"TIMESERIES_INSPECTION_MENU_ZOOM_IN\",\n};\n\nexport const TIMESERIES_INSPECTION_MENU_ZOOM_OUT: IEventDefinition<\n    IEvent<ITimeseriesZoomPluginInspectionFrame>\n> = {\n    id: \"TIMESERIES_INSPECTION_MENU_ZOOM_OUT\",\n};\n\nexport const TIMESERIES_INSPECTION_MENU_EXPLORE: IEventDefinition<\n    IEvent<ITimeseriesZoomPluginExploreData>\n> = {\n    id: \"TIMESERIES_INSPECTION_MENU_EXPLORE\",\n};\n\nexport const TIMESERIES_INSPECTION_MENU_CLOSE: IEventDefinition<IEvent<void>> =\n    {\n        id: \"TIMESERIES_INSPECTION_MENU_CLOSE\",\n    };\n\nexport const TIMESERIES_INSPECTION_MENU_SYNCHRONIZE: IEventDefinition<\n    IEvent<void>\n> = {\n    id: \"TIMESERIES_INSPECTION_MENU_SYNCHRONIZE\",\n};\n\nexport const TIMESERIES_INSPECTION_MENU_CLEAR: IEventDefinition<IEvent<void>> =\n    {\n        id: \"TIMESERIES_INSPECTION_MENU_CLEAR\",\n    };\n\nexport interface ITimeseriesZoomPluginExploreData {\n    ids: string;\n    startDate: moment.Moment;\n    endDate: moment.Moment;\n    openSidePanel: boolean;\n    exploringEnabled: boolean;\n}\n\n@Component({\n    selector: \"nui-timeseries-inspection-menu\",\n    templateUrl: \"./timeseries-inspection-menu.component.html\",\n    styleUrls: [\"./timeseries-inspection-menu.component.less\"],\n    standalone: false,\n})\nexport class TimeseriesInspectionMenuComponent\n    implements OnInit, OnChanges, OnDestroy\n{\n    @Input() plugin: TimeseriesZoomPlugin;\n    @Input() exploringEnabled = false;\n    @Input() metricIds?: string;\n    @Input() collectionId?: string;\n    @Input() allowed?: boolean = false;\n\n    private offset = 38;\n    private destroy$ = new Subject<void>();\n\n    constructor(\n        public element: ElementRef,\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>,\n        private syncService: TimeseriesZoomPluginsSyncService\n    ) {}\n    public ngOnInit(): void {\n        this.plugin.zoomCreated$.subscribe(() => this.explore(false));\n\n        this.eventBus\n            .getStream(TIMESERIES_INSPECTION_MENU_SYNCHRONIZE)\n            .subscribe(() => {\n                const { startDate, endDate } = this.plugin.getInspectionFrame();\n                if (startDate && endDate) {\n                    this.syncService.syncPositionInsideCollection(\n                        this.collectionId ?? \"\",\n                        startDate,\n                        endDate\n                    );\n                }\n            });\n\n        this.eventBus\n            .getStream(TIMESERIES_INSPECTION_MENU_CLEAR)\n            .subscribe(() => this.clearZoom());\n\n        this.plugin?.openPopover$\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((x: number) => {\n                // moves element to the correct position\n                this.element.nativeElement.style.left = this.offset + x + \"px\";\n            });\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.allowed?.currentValue) {\n            this.plugin.showPopover();\n        } else {\n            this.plugin.closePopover();\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    public clearZoom(): void {\n        this.syncService.clearZoomInsideCollection(this.collectionId ?? \"\");\n        this.eventBus.next(TIMESERIES_INSPECTION_MENU_CLOSE, {});\n    }\n\n    public isZoomInAllowed(): boolean {\n        const { startDate, endDate } = this.plugin.getInspectionFrame();\n\n        if (!startDate || !endDate) {\n            return true;\n        }\n\n        // doesn't allow zoom for timeframe smaller than 10 minutes\n        return endDate.diff(startDate, \"minutes\") > 10;\n    }\n\n    public zoomIn(): void {\n        const inspectionTimeframe = this.plugin.getInspectionFrame();\n        this.eventBus.next(TIMESERIES_INSPECTION_MENU_ZOOM_IN, {\n            payload: inspectionTimeframe,\n        });\n        this.syncService.clearZoomInsideCollection(this.collectionId ?? \"\");\n    }\n\n    public zoomOut(): void {\n        const inspectionTimeframe = this.plugin.getInspectionFrame();\n        this.eventBus.next(TIMESERIES_INSPECTION_MENU_ZOOM_OUT, {\n            payload: inspectionTimeframe,\n        });\n        setTimeout(() => {\n            this.plugin.closePopover();\n        });\n    }\n\n    public explore(openSidePanel = false): void {\n        const inspectionTimeframe = this.plugin.getInspectionFrame();\n        this.eventBus.next(TIMESERIES_INSPECTION_MENU_EXPLORE, {\n            payload: {\n                ids: this.metricIds,\n                startDate: inspectionTimeframe.startDate,\n                endDate: inspectionTimeframe.endDate,\n                openSidePanel,\n                exploringEnabled: this.exploringEnabled,\n            },\n        });\n    }\n}\n","<nui-popover\n    class=\"popover\"\n    trigger=\"openPopoverSubject\"\n    placement=\"right\"\n    [unlimited]=\"true\"\n    [template]=\"popoverTemplate\"\n    [container]=\"element.nativeElement\"\n    [openPopover]=\"plugin.openPopover$\"\n    [closePopover]=\"plugin.closePopover$\"\n    [hasPadding]=\"false\"\n    [withGrowAfterOpen]=\"true\"\n>\n</nui-popover>\n\n<ng-template #popoverTemplate>\n    <div class=\"inspection-menu\">\n        <button\n            *ngIf=\"exploringEnabled\"\n            nui-button\n            type=\"button\"\n            icon=\"details\"\n            title=\"Inspect selection in the data explorer\"\n            i18n-title\n            (click)=\"explore(true)\"\n        ></button>\n        <button\n            *ngIf=\"isZoomInAllowed()\"\n            nui-button\n            type=\"button\"\n            icon=\"zoom-in\"\n            title=\"Zoom In\"\n            i18n-title\n            (click)=\"zoomIn()\"\n        ></button>\n        <button\n            nui-button\n            type=\"button\"\n            icon=\"zoom-out\"\n            title=\"Zoom Out\"\n            i18n-title\n            (click)=\"zoomOut()\"\n        ></button>\n        <button\n            nui-button\n            type=\"button\"\n            icon=\"remove\"\n            title=\"Clear selection\"\n            i18n-title\n            (click)=\"clearZoom()\"\n        ></button>\n    </div>\n</ng-template>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\n\nimport { StatusBarChartComponent } from \"./chart-presets/status-bar-chart/status-bar-chart.component\";\nimport { LineChartComponent } from \"./chart-presets/xy-chart/chart-types/line-chart.component\";\nimport { StackedAreaChartComponent } from \"./chart-presets/xy-chart/chart-types/stacked-area-chart.component\";\nimport { StackedBarChartComponent } from \"./chart-presets/xy-chart/chart-types/stacked-bar-chart.component\";\nimport { StackedPercentageAreaChartComponent } from \"./chart-presets/xy-chart/chart-types/stacked-percentage-area-chart.component\";\nimport { IChartPreset, TimeseriesChartPreset } from \"./types\";\n\n@Injectable({\n    providedIn: \"root\",\n})\nexport class TimeseriesChartPresetService {\n    public presets: Record<TimeseriesChartPreset, IChartPreset>;\n\n    constructor() {\n        this.presets = {\n            [TimeseriesChartPreset.Line]: {\n                componentType: LineChartComponent.lateLoadKey,\n            },\n            [TimeseriesChartPreset.StackedArea]: {\n                componentType: StackedAreaChartComponent.lateLoadKey,\n            },\n            [TimeseriesChartPreset.StackedPercentageArea]: {\n                componentType: StackedPercentageAreaChartComponent.lateLoadKey,\n            },\n            [TimeseriesChartPreset.StackedBar]: {\n                componentType: StackedBarChartComponent.lateLoadKey,\n            },\n            [TimeseriesChartPreset.StatusBar]: {\n                componentType: StatusBarChartComponent.lateLoadKey,\n            },\n        };\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    HostBinding,\n    Input,\n    OnInit,\n    OnChanges,\n    SimpleChanges,\n} from \"@angular/core\";\n\nimport {\n    TimeseriesZoomPlugin,\n    TimeseriesZoomPluginsSyncService,\n    ZoomPlugin,\n} from \"@nova-ui/charts\";\n\nimport { TimeseriesChartPresetService } from \"./timeseries-chart-preset.service\";\nimport {\n    IChartPreset,\n    ITimeseriesOutput,\n    ITimeseriesWidgetConfig,\n    TimeseriesChartPreset,\n    TimeseriesChartTypes,\n    TimeseriesWidgetProjectType,\n    TimeseriesWidgetZoomPlugin,\n} from \"./types\";\nimport { IHasChangeDetector } from \"../../types\";\n\n/** @ignore */\n@Component({\n    selector: \"nui-timeseries-widget\",\n    styleUrls: [\"./timeseries-widget.component.less\"],\n    templateUrl: \"./timeseries-widget.component.html\",\n    standalone: false,\n})\nexport class TimeseriesWidgetComponent\n    implements OnInit, OnChanges, IHasChangeDetector\n{\n    public static lateLoadKey = \"TimeseriesWidgetComponent\";\n\n    @Input() public widgetData?: ITimeseriesOutput;\n    @Input() public configuration?: ITimeseriesWidgetConfig;\n    @Input() public collectionId?: string;\n\n    @Input() @HostBinding(\"class\") public elementClass = \"\";\n\n    public chartPreset: IChartPreset;\n\n    public zoomPlugins: TimeseriesWidgetZoomPlugin[] = [];\n    public allowPopover = false;\n    public timeseriesWidgetProjectType = TimeseriesWidgetProjectType;\n\n    constructor(\n        public timeseriesChartPresetService: TimeseriesChartPresetService,\n        public changeDetector: ChangeDetectorRef,\n        public zoomPluginsSyncService: TimeseriesZoomPluginsSyncService\n    ) {}\n\n    public ngOnInit(): void {\n        if (\n            this.configuration?.projectType ===\n            TimeseriesWidgetProjectType.PerfstackApp\n        ) {\n            if (this.configuration.type === TimeseriesChartTypes.alert) {\n                // adds timeseries zoom plugin for each subcharts to make the synchronization working for the alert chart\n                this.widgetData?.series.forEach(() =>\n                    this.zoomPlugins.push(this.getTimeseriesZoomPlugin())\n                );\n\n                // doesn't add zoom plugin for a summary serie when there are no sub charts and only sumary serie will be displayed\n                if (\n                    !(\n                        this.widgetData?.series.length === 1 &&\n                        this.widgetData.series[0].id ===\n                            this.widgetData.summarySerie?.id\n                    )\n                ) {\n                    this.zoomPlugins.push(this.getTimeseriesZoomPlugin());\n                }\n            } else {\n                this.zoomPlugins.push(this.getTimeseriesZoomPlugin());\n            }\n        } else {\n            this.zoomPlugins.push(new ZoomPlugin());\n        }\n    }\n\n    private getTimeseriesZoomPlugin(): TimeseriesZoomPlugin {\n        return new TimeseriesZoomPlugin(\n            { collectionId: this.collectionId },\n            this.zoomPluginsSyncService\n        );\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.configuration) {\n            const configurationCurrent: ITimeseriesWidgetConfig =\n                changes.configuration.currentValue;\n            const configurationPrevious: ITimeseriesWidgetConfig =\n                changes.configuration.previousValue;\n\n            if (\n                configurationCurrent?.preset !== configurationPrevious?.preset\n            ) {\n                this.chartPreset =\n                    this.timeseriesChartPresetService.presets[\n                        this.configuration?.preset ?? TimeseriesChartPreset.Line\n                    ];\n            }\n        }\n    }\n\n    /** Checks if chart should be shown. */\n    public shouldShowChart(): boolean {\n        return (this.widgetData?.series?.length ?? 0) > 0;\n    }\n\n    public toggleLeave(): void {\n        this.allowPopover = false;\n    }\n    public toggleEnter(): void {\n        this.allowPopover = true;\n    }\n\n    public isExploringEnabled(): boolean {\n        return (\n            this.configuration?.type !== TimeseriesChartTypes.line &&\n            this.configuration?.type !== TimeseriesChartTypes.multi &&\n            this.configuration?.type !== TimeseriesChartTypes.status\n        );\n    }\n}\n","<div\n    class=\"h-100 timeseries-widget-content\"\n    *ngIf=\"shouldShowChart()\"\n    (mouseleave)=\"toggleLeave()\"\n    (mouseenter)=\"toggleEnter()\"\n>\n    <ng-container\n        nuiComponentPortal\n        componentId=\"timeseriesWidgetChart\"\n        [componentType]=\"chartPreset.componentType\"\n        [properties]=\"{\n            widgetData: widgetData,\n            configuration: configuration,\n            collectionId: collectionId || configuration?.collectionId,\n            zoomPlugins: zoomPlugins\n        }\"\n        #componentPortal=\"nuiComponentPortal\"\n    >\n        <ng-template\n            [cdkPortalOutlet]=\"componentPortal.portal\"\n            (attached)=\"componentPortal.attached($event)\"\n        >\n        </ng-template>\n    </ng-container>\n    <nui-timeseries-inspection-menu\n        *ngIf=\"\n            configuration?.enableZoom &&\n            configuration?.projectType ===\n                timeseriesWidgetProjectType.PerfstackApp &&\n            zoomPlugins.length\n        \"\n        [allowed]=\"allowPopover\"\n        [plugin]=\"zoomPlugins[0]\"\n        [collectionId]=\"collectionId\"\n        [exploringEnabled]=\"isExploringEnabled()\"\n        [metricIds]=\"configuration?.metricIds\"\n    ></nui-timeseries-inspection-menu>\n</div>\n<div *ngIf=\"!shouldShowChart()\">\n    <nui-image image=\"no-data-to-show\"></nui-image>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    HostBinding,\n    Inject,\n    Input,\n    OnDestroy,\n    OnInit,\n} from \"@angular/core\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IEvent, LoggerService } from \"@nova-ui/bits\";\n\nimport { PizzagnaService } from \"../../../pizzagna/services/pizzagna.service\";\nimport { DASHBOARD_EDIT_MODE } from \"../../../services/types\";\nimport { PizzagnaLayer, PIZZAGNA_EVENT_BUS } from \"../../../types\";\nimport { BaseLayout } from \"../../layouts/base-layout\";\n\n@Component({\n    selector: \"nui-widget-body\",\n    templateUrl: \"./widget-body.component.html\",\n    styleUrls: [\"./widget-body.component.less\"],\n    standalone: false,\n})\nexport class WidgetBodyComponent\n    extends BaseLayout\n    implements OnInit, OnDestroy\n{\n    public static lateLoadKey = \"WidgetBodyComponent\";\n\n    /**\n     * The component's id\n     */\n    @Input() public componentId: string;\n\n    /**\n     * Keeps track of whether the dashboard is in edit mode\n     */\n    @Input() public editMode = false;\n\n    /**\n     * Pizzagna key for the widget body content\n     */\n    @Input() public content: string;\n\n    /**\n     * Optional class for styling\n     */\n    @Input() public elementClass = \"\";\n\n    @HostBinding(\"class\") public classNames: string;\n\n    public readonly defaultClasses = \"d-flex h-100 w-100\";\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>,\n        changeDetector: ChangeDetectorRef,\n        pizzagnaService: PizzagnaService,\n        logger: LoggerService\n    ) {\n        super(changeDetector, pizzagnaService, logger);\n    }\n\n    public ngOnInit(): void {\n        this.classNames = `${this.defaultClasses} ${this.elementClass}`;\n\n        // subscribing to dashboard event to set 'edit mode'\n        this.eventBus\n            .getStream(DASHBOARD_EDIT_MODE)\n            .pipe(takeUntil(this.destroyed$))\n            .subscribe((event) => {\n                this.pizzagnaService.setProperty(\n                    {\n                        componentId: this.componentId,\n                        pizzagnaKey: PizzagnaLayer.Data,\n                        propertyPath: [\"editMode\"],\n                    },\n                    !!event.payload\n                );\n            });\n    }\n\n    public ngOnDestroy(): void {\n        super.ngOnDestroy();\n    }\n\n    public getNodes = (): string[] => [this.content];\n}\n","<nui-preview-overlay *ngIf=\"editMode\"></nui-preview-overlay>\n<ng-container\n    nuiComponentPortal\n    #componentPortal=\"nuiComponentPortal\"\n    [componentId]=\"nodeConfigs[0].id\"\n    [componentType]=\"nodeConfigs[0].componentType\"\n    [providers]=\"nodeConfigs[0].providers\"\n    [properties]=\"nodeConfigs[0].properties\"\n>\n    <ng-template\n        [cdkPortalOutlet]=\"componentPortal.portal\"\n        (attached)=\"componentPortal.attached($event)\"\n    ></ng-template>\n</ng-container>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n/**\n * Node keys for common errors\n */\nexport enum ErrorNodeKey {\n    ErrorUnknown = \"errorUnknown\",\n    ErrorForbidden = \"errorForbidden\",\n    ErrorNotFound = \"errorNotFound\",\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    HostBinding,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n} from \"@angular/core\";\n\nimport { LoggerService } from \"@nova-ui/bits\";\n\nimport { PizzagnaService } from \"../../../pizzagna/services/pizzagna.service\";\nimport { ErrorNodeKey } from \"../../../widget-types/common/widget/types\";\nimport { BaseLayout } from \"../../layouts/base-layout\";\n\n@Component({\n    selector: \"nui-widget-body-content\",\n    templateUrl: \"./widget-body-content.component.html\",\n    standalone: false,\n})\nexport class WidgetBodyContentComponent\n    extends BaseLayout\n    implements OnChanges, OnInit, OnDestroy\n{\n    public static lateLoadKey = \"WidgetBodyContentComponent\";\n\n    /**\n     * The component's id\n     */\n    @Input() public componentId: string;\n\n    /**\n     * The pizzagna node to use for the primary content\n     */\n    @Input() public primaryContent: string;\n\n    /**\n     * When this property is populated, the component displays the associated\n     * fallback content in place of the primary content\n     */\n    @Input() public fallbackKey: string;\n\n    /**\n     * Map of content keys to pizzagna nodes\n     */\n    @Input() public fallbackMap: Record<string, string>;\n\n    /**\n     * Optional class for styling\n     */\n    @Input() public elementClass = \"\";\n\n    @HostBinding(\"class\") public classNames: string;\n\n    public readonly defaultClasses = \"w-100\";\n\n    constructor(\n        changeDetector: ChangeDetectorRef,\n        pizzagnaService: PizzagnaService,\n        logger: LoggerService\n    ) {\n        super(changeDetector, pizzagnaService, logger);\n    }\n\n    public ngOnInit(): void {\n        this.classNames = `${this.defaultClasses} ${this.elementClass}`;\n    }\n\n    public ngOnDestroy(): void {\n        super.ngOnDestroy();\n    }\n\n    public getNodes(): string[] {\n        if (this.fallbackKey) {\n            const fallbackContent =\n                (this.fallbackMap && this.fallbackMap[this.fallbackKey]) ||\n                ErrorNodeKey.ErrorUnknown;\n            return [this.primaryContent, fallbackContent];\n        }\n        return [this.primaryContent];\n    }\n}\n","<div\n    class=\"h-100\"\n    [ngClass]=\"{ 'd-none': fallbackKey, 'd-flex': !fallbackKey }\"\n>\n    <ng-container\n        nuiComponentPortal\n        #componentPortal=\"nuiComponentPortal\"\n        [componentId]=\"nodeConfigs[0].id\"\n        [componentType]=\"nodeConfigs[0].componentType\"\n        [providers]=\"nodeConfigs[0].providers\"\n        [properties]=\"nodeConfigs[0].properties\"\n    >\n        <ng-template\n            [cdkPortalOutlet]=\"componentPortal.portal\"\n            (attached)=\"componentPortal.attached($event)\"\n        ></ng-template>\n    </ng-container>\n</div>\n<div class=\"d-flex h-100\" *ngIf=\"fallbackKey\">\n    <ng-container\n        nuiComponentPortal\n        #componentPortal=\"nuiComponentPortal\"\n        [componentId]=\"nodeConfigs[1].id\"\n        [componentType]=\"nodeConfigs[1].componentType\"\n        [providers]=\"nodeConfigs[1].providers\"\n        [properties]=\"nodeConfigs[1].properties\"\n    >\n        <ng-template\n            [cdkPortalOutlet]=\"componentPortal.portal\"\n            (attached)=\"componentPortal.attached($event)\"\n        ></ng-template>\n    </ng-container>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    animate,\n    state,\n    style,\n    transition,\n    trigger,\n} from \"@angular/animations\";\nimport {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    HostBinding,\n    Inject,\n    Input,\n    OnDestroy,\n    OnInit,\n    Optional,\n    ViewChild,\n} from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IEvent } from \"@nova-ui/bits\";\n\nimport { IHeaderLinkProvider } from \"./types\";\nimport { PizzagnaService } from \"../../../pizzagna/services/pizzagna.service\";\nimport {\n    DASHBOARD_EDIT_MODE,\n    REFRESH,\n    WIDGET_EDIT,\n    WIDGET_REMOVE,\n} from \"../../../services/types\";\nimport { WidgetToDashboardEventProxyService } from \"../../../services/widget-to-dashboard-event-proxy.service\";\nimport {\n    HEADER_LINK_PROVIDER,\n    PIZZAGNA_EVENT_BUS,\n    PizzagnaLayer,\n} from \"../../../types\";\n\n@Component({\n    selector: \"nui-widget-header\",\n    templateUrl: \"./widget-header.component.html\",\n    styleUrls: [\"./widget-header.component.less\"],\n    animations: [\n        trigger(\"expandedState\", [\n            state(\"expanded\", style({ height: \"*\" })),\n            state(\"collapsed\", style({ height: \"11px\" })),\n            transition(\"expanded <=> collapsed\", [\n                animate(\"350ms ease-in-out\"),\n            ]),\n        ]),\n    ],\n    standalone: false,\n})\nexport class WidgetHeaderComponent implements OnInit, OnDestroy, AfterViewInit {\n    static lateLoadKey = \"WidgetHeaderComponent\";\n\n    @Input() public componentId: string;\n    @Input() public editMode = true;\n    /**\n     * Boolean which shows or hides the edit button\n     */\n    @Input() public editable: boolean = true;\n    /**\n     * Boolean which shows or hides the remove widget button\n     */\n    @Input() public removable: boolean = true;\n    /**\n     * Boolean which adds ability to collapse widget header\n     */\n    @Input() public collapsible = false;\n    @Input() public reloadable = true;\n    @Input() public title: string;\n    @Input() public subtitle: string;\n    @Input() public hideMenu: boolean = false;\n    @Input() public url: string;\n    /**\n     * Boolean which tells what state the widget header is in if collapsible\n     */\n    @Input() public collapsed: boolean = false;\n\n    @HostBinding(\"class.nui-widget-header\") get hostClass(): boolean {\n        return true;\n    }\n\n    @ViewChild(\"widgetHeaderCustomElement\")\n    public widgetHeaderCustomElement: ElementRef;\n\n    public withCustomElement: boolean;\n    private onDestroy$: Subject<void> = new Subject<void>();\n\n    public get state(): \"expanded\" | \"collapsed\" {\n        return this.collapsed && this.collapsible ? \"collapsed\" : \"expanded\";\n    }\n\n    public linkTooltip = $localize`Explore this data`;\n\n    constructor(\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>,\n        public pizzagnaService: PizzagnaService,\n        public changeDetector: ChangeDetectorRef,\n        @Optional() private eventProxy: WidgetToDashboardEventProxyService,\n        @Inject(HEADER_LINK_PROVIDER)\n        @Optional()\n        private linkProvider: IHeaderLinkProvider\n    ) {}\n\n    public ngOnInit(): void {\n        if (this.collapsible) {\n            this.pizzagnaService.setProperty(\n                {\n                    componentId: this.componentId,\n                    pizzagnaKey: PizzagnaLayer.Data,\n                    propertyPath: [\"isCollapsed\"],\n                },\n                true\n            );\n        }\n\n        if (this.eventProxy) {\n            this.eventProxy.addUpstream(WIDGET_EDIT);\n            this.eventProxy.addUpstream(WIDGET_REMOVE);\n            this.eventProxy.addDownstream(DASHBOARD_EDIT_MODE);\n        }\n\n        // subscribing to dashboard event to set 'edit mode'\n        this.eventBus\n            .getStream(DASHBOARD_EDIT_MODE)\n            .pipe(takeUntil(this.onDestroy$))\n            .subscribe((event) => {\n                this.pizzagnaService.setProperty(\n                    {\n                        componentId: this.componentId,\n                        pizzagnaKey: PizzagnaLayer.Data,\n                        propertyPath: [\"collapsed\"],\n                    },\n                    !event.payload\n                );\n\n                this.pizzagnaService.setProperty(\n                    {\n                        componentId: this.componentId,\n                        pizzagnaKey: PizzagnaLayer.Data,\n                        propertyPath: [\"editMode\"],\n                    },\n                    !!event.payload\n                );\n            });\n    }\n\n    public ngAfterViewInit(): void {\n        // we can't set values in ngAfterViewInit directly - it causes ExpressionChangedAfterViewChecked error, so setTimeout has to be used\n        setTimeout(() => {\n            this.withCustomElement =\n                this.widgetHeaderCustomElement.nativeElement.childNodes\n                    .length !== 0;\n        });\n    }\n\n    public ngOnDestroy(): void {\n        this.onDestroy$.next();\n        this.onDestroy$.complete();\n    }\n\n    public removeWidget(): void {\n        this.eventBus.getStream(WIDGET_REMOVE).next({});\n    }\n\n    public toggleCollapsed(): void {\n        this.pizzagnaService.setProperty(\n            {\n                componentId: this.componentId,\n                pizzagnaKey: PizzagnaLayer.Data,\n                propertyPath: [\"collapsed\"],\n            },\n            !this.collapsed\n        );\n    }\n\n    public onEditWidget(): void {\n        this.eventBus.getStream(WIDGET_EDIT).next({});\n    }\n\n    public onReloadData(): void {\n        if (!this.reloadable) {\n            throw new Error(\n                \"The widget is not reloadable, so it can't be reloaded manually.\"\n            );\n        }\n        this.eventBus.getStream(REFRESH).next({});\n    }\n\n    public prepareLink($event: MouseEvent): boolean {\n        const target: HTMLElement = $event.target as HTMLElement;\n        if (target && this.linkProvider) {\n            const link = this.linkProvider.getLink(this.url);\n            if (link) {\n                target.setAttribute(\"href\", link);\n            }\n        }\n        return true;\n    }\n}\n","<div class=\"nui-widget__header\">\n    <div\n        class=\"nui-widget__header__container\"\n        [class.nui-widget__header__container--collapsible]=\"collapsible\"\n        [class.nui-widget__header__container--collapsed]=\"\n            collapsible && collapsed\n        \"\n        [class.nui-widget__header__container--expanded]=\"\n            collapsible && !collapsed\n        \"\n        [@expandedState]=\"state\"\n    >\n        <div\n            *ngIf=\"collapsed && collapsible\"\n            class=\"collapse-container\"\n            (click)=\"toggleCollapsed()\"\n        >\n            <span class=\"collapse-container__line\"></span>\n        </div>\n        <div class=\"nui-widget__header__content\">\n            <div\n                *ngIf=\"editMode\"\n                class=\"nui-widget__header__content-drag-icon nui-dashboard__widget--drag-handle\"\n            >\n                <nui-icon icon=\"drag\" iconColor=\"gray\"></nui-icon>\n            </div>\n            <div\n                #widgetHeaderCustomElement\n                class=\"nui-widget__header__content-custom-element\"\n            >\n                <ng-content></ng-content>\n            </div>\n            <div\n                class=\"nui-widget__header__content-title-container nui-dashboard__widget--drag-handle\"\n                [class.nui-widget__header__content-title-with-additional-content]=\"\n                    withCustomElement || editMode\n                \"\n            >\n                <!-- text only header with no url defined -->\n                <div\n                    class=\"nui-text-widget nui-widget__header__content-title\"\n                    [title]=\"title\"\n                    *ngIf=\"!url || editMode\"\n                >\n                    {{ title }}\n                </div>\n\n                <!-- link version of the header -->\n                <div *ngIf=\"url && !editMode\">\n                    <a\n                        [href]=\"url\"\n                        (click)=\"prepareLink($event)\"\n                        (mouseenter)=\"prepareLink($event)\"\n                        (mousedown)=\"\n                            $event.stopPropagation(); $event.preventDefault()\n                        \"\n                        class=\"nui-text-widget nui-widget__header__content-title\"\n                        [nuiTooltip]=\"linkTooltip\"\n                        >{{ title }}</a\n                    >\n                </div>\n\n                <div\n                    *ngIf=\"subtitle\"\n                    class=\"nui-text-hint nui-widget__header__content-help-hint\"\n                    [title]=\"subtitle\"\n                >\n                    {{ subtitle }}\n                </div>\n            </div>\n            <div class=\"nui-widget__header__content-actions\">\n                <a\n                    *ngIf=\"url && !editMode\"\n                    nui-button\n                    displayStyle=\"action\"\n                    [href]=\"url\"\n                    (click)=\"prepareLink($event)\"\n                    (mouseenter)=\"prepareLink($event)\"\n                    icon=\"external-link\"\n                    [nuiTooltip]=\"linkTooltip\"\n                    (mousedown)=\"\n                        $event.stopPropagation(); $event.preventDefault()\n                    \"\n                >\n                </a>\n                <button\n                    *ngIf=\"editable && editMode\"\n                    class=\"nui-widget-header__action-edit\"\n                    nui-button\n                    type=\"button\"\n                    displayStyle=\"action\"\n                    icon=\"edit\"\n                    nuiTooltip=\"Edit widget\"\n                    i18n-nuiTooltip\n                    (click)=\"onEditWidget()\"\n                ></button>\n                <button\n                    *ngIf=\"collapsible && !editMode\"\n                    class=\"nui-widget-header__action-toggle-collapsed\"\n                    nui-button\n                    type=\"button\"\n                    displayStyle=\"action\"\n                    nuiTooltip=\"Collapse header\"\n                    icon=\"double-caret-up\"\n                    (click)=\"toggleCollapsed()\"\n                ></button>\n                <nui-menu\n                    *ngIf=\"!hideMenu && !editMode\"\n                    class=\"nui-widget__header__content-actions__menu\"\n                    icon=\"menu\"\n                    displayStyle=\"action\"\n                    [appendToBody]=\"true\"\n                >\n                    <nui-menu-action\n                        *ngIf=\"reloadable\"\n                        (actionDone)=\"onReloadData()\"\n                    >\n                        <nui-icon icon=\"reload\"></nui-icon>\n                        <span i18n>Reload data</span>\n                    </nui-menu-action>\n                </nui-menu>\n                <!--TODO: After NUI-3431 should be changed to regular menu instead of popup-->\n                <nui-popup\n                    class=\"nui-widget-header__action-remove\"\n                    [appendToBody]=\"true\"\n                    *ngIf=\"removable && editMode\"\n                >\n                    <span nuiTooltip=\"Remove widget\" i18n-nuiTooltip>\n                        <button\n                            nui-button\n                            nuiPopupToggle\n                            type=\"button\"\n                            icon=\"remove\"\n                            iconColor=\"red\"\n                            displayStyle=\"action\"\n                            i18n\n                        ></button>\n                    </span>\n                    <div popupAreaContent class=\"nui-menu\">\n                        <nui-menu-action\n                            type=\"destructive\"\n                            (actionDone)=\"removeWidget()\"\n                            i18n\n                            >Remove Widget</nui-menu-action\n                        >\n                    </div>\n                </nui-popup>\n            </div>\n        </div>\n    </div>\n    <div *ngIf=\"collapsible\" class=\"collapse-spacer\"></div>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    Component,\n    Inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Optional,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { Subject, Subscription } from \"rxjs\";\nimport { debounceTime, takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IDataSource, IEvent } from \"@nova-ui/bits\";\n\nimport { ISearchOnKeyUp, IWidgetSearchConfiguration } from \"./types\";\nimport { REFRESH, WIDGET_SEARCH } from \"../../services/types\";\nimport { DATA_SOURCE, PIZZAGNA_EVENT_BUS } from \"../../types\";\n\n@Component({\n    selector: \"nui-widget-search\",\n    templateUrl: \"./widget-search.component.html\",\n    styleUrls: [\"./widget-search.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: { \"[class.default]\": \"enabled\", \"[class.invisible]\": \"!enabled\" },\n    standalone: false,\n})\nexport class WidgetSearchComponent implements OnInit, OnDestroy, OnChanges {\n    static lateLoadKey = \"WidgetSearchComponent\";\n    static defaultSearchDebounce = 500;\n\n    @Input() public configuration: IWidgetSearchConfiguration;\n    @Input() public searchValue: string;\n    public enabled: boolean = false;\n\n    public searchTerm$ = new Subject<string>();\n    public readonly destroy$ = new Subject<void>();\n    private searchTermSubscription: Subscription;\n\n    constructor(\n        @Optional() @Inject(DATA_SOURCE) private dataSource: IDataSource,\n        @Inject(PIZZAGNA_EVENT_BUS) public eventBus: EventBus<IEvent>\n    ) {}\n\n    public ngOnInit(): void {\n        if (this.dataSource.features?.getSupportedFeatures()?.search?.enabled) {\n            this.enabled = true;\n        }\n        this.registerFilters();\n        this.handleSearchTermSubscription(this.configuration?.searchOnKeyUp);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.configuration) {\n            const searchCfg = changes.configuration.currentValue;\n            this.handleSearchTermSubscription(searchCfg.searchOnKeyUp);\n        }\n    }\n\n    public onSearchInputChanged(searchTerm: string): void {\n        if (this.configuration?.searchOnKeyUp?.enabled) {\n            this.searchValue = searchTerm;\n            this.searchTerm$.next(searchTerm);\n        }\n    }\n\n    public onSearch(searchTerm: string): void {\n        this.searchValue = searchTerm;\n        this.searchTerm$.next(searchTerm);\n    }\n\n    public ngOnDestroy(): void {\n        this.eventBus.getStream(WIDGET_SEARCH).next({\n            payload: \"\",\n        });\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    private registerFilters() {\n        this.dataSource?.registerComponent({\n            search: {\n                componentInstance: {\n                    getFilters: () => ({\n                        value: this.searchValue,\n                    }),\n                },\n            },\n        });\n    }\n\n    private handleSearchTermSubscription(\n        searchOnKeyUpCfg: ISearchOnKeyUp | undefined\n    ) {\n        this.searchTermSubscription?.unsubscribe();\n        this.searchTermSubscription = this.searchTerm$\n            .pipe(\n                takeUntil(this.destroy$),\n                debounceTime(\n                    searchOnKeyUpCfg?.debounceTime ||\n                        WidgetSearchComponent.defaultSearchDebounce\n                )\n            )\n            .subscribe((searchTerm) => {\n                this.eventBus.getStream(REFRESH).next({});\n                this.eventBus.getStream(WIDGET_SEARCH).next({\n                    payload: searchTerm,\n                });\n            });\n    }\n}\n","<nui-search\n    class=\"unlimited-width\"\n    *ngIf=\"enabled\"\n    [value]=\"searchValue\"\n    (inputChange)=\"onSearchInputChanged($event)\"\n    (cancel)=\"onSearch($event)\"\n    (search)=\"onSearch($event)\"\n></nui-search>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { PortalModule } from \"@angular/cdk/portal\";\nimport { NgModule } from \"@angular/core\";\n\nimport { NuiDashboardsCommonModule } from \"../common/common.module\";\nimport { PizzagnaComponent } from \"./components/pizzagna/pizzagna.component\";\nimport { ComponentPortalDirective } from \"./directives/component-portal/component-portal.directive\";\n\n@NgModule({\n    imports: [PortalModule, NuiDashboardsCommonModule],\n    declarations: [PizzagnaComponent, ComponentPortalDirective],\n    exports: [PortalModule, PizzagnaComponent, ComponentPortalDirective],\n})\nexport class NuiPizzagnaModule {}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { IWidget } from \"../../components/widget/types\";\nimport { WidgetTypesService } from \"../../services/widget-types.service\";\n\n@Pipe({\n    name: \"nuiPizzagnaRoot\",\n    pure: true,\n    standalone: false,\n})\nexport class PizzagnaRootPipe implements PipeTransform {\n    constructor(private widgetTypesService: WidgetTypesService) {}\n\n    public transform(\n        widget: IWidget | null,\n        key: \"configurator\" | \"widget\" = \"widget\"\n    ): string | null | undefined {\n        if (!widget?.type) {\n            return null;\n        }\n\n        const widgetType = this.widgetTypesService.getWidgetType(\n            widget.type,\n            widget.version\n        );\n\n        return widgetType.paths?.[key]?.root;\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Portal } from \"@angular/cdk/portal\";\nimport {\n    ChangeDetectorRef,\n    Component,\n    ComponentRef,\n    EventEmitter,\n    Input,\n    OnDestroy,\n    OnInit,\n    Output,\n    ViewChild,\n} from \"@angular/core\";\nimport { Subject } from \"rxjs\";\n\nimport { OVERLAY_CONTAINER } from \"@nova-ui/bits\";\n\nimport { IWidget } from \"../../../components/widget/types\";\nimport { PizzagnaComponent } from \"../../../pizzagna/components/pizzagna/pizzagna.component\";\nimport { WidgetTypesService } from \"../../../services/widget-types.service\";\nimport { IPizzagna } from \"../../../types\";\nimport { PreviewService } from \"../../services/preview.service\";\n\n/** @ignore */\n@Component({\n    selector: \"nui-configurator\",\n    templateUrl: \"./configurator.component.html\",\n    styleUrls: [\"./configurator.component.less\"],\n    providers: [\n        PreviewService,\n        {\n            provide: OVERLAY_CONTAINER,\n            useValue: \".nui-dashwiz-step--active .configurator-scrollable\",\n        },\n    ],\n    host: { class: \"nui-configurator\" },\n    standalone: false,\n})\nexport class ConfiguratorComponent implements OnInit, OnDestroy {\n    public static lateLoadKey = \"ConfiguratorComponent\";\n\n    @Input() formPortal: Portal<any>;\n    @Input() previewWidget: IWidget | null;\n\n    // eslint-disable-next-line @angular-eslint/no-output-native\n    @Output() result = new EventEmitter<IWidget | null>();\n    @Output() formPortalAttached = new EventEmitter<ComponentRef<any>>();\n\n    @ViewChild(\"previewPizzagnaComponent\", { static: false })\n    previewPizzagnaComponent: PizzagnaComponent;\n\n    public submitError = new Subject<void>();\n    private readonly destroy$ = new Subject<void>();\n\n    constructor(\n        public widgetTypesService: WidgetTypesService,\n        public changeDetector: ChangeDetectorRef\n    ) {}\n\n    // ----- LIFECYCLE -----\n\n    public ngOnInit(): void {\n        if (!this.previewWidget) {\n            this.previewWidget = {\n                // TODO: Replace null with an string or change the IWidget prop definition\n                // @ts-ignore: Type 'null' is not assignable to type 'string'.\n                id: null,\n                type: \"previewPlaceholder\",\n                pizzagna:\n                    this.widgetTypesService.getWidgetType(\"previewPlaceholder\")\n                        .widget,\n            };\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    // -----\n\n    public getPreview(): PizzagnaComponent {\n        return this.previewPizzagnaComponent;\n    }\n\n    public handleSubmitError(): void {\n        this.submitError.next();\n    }\n\n    public onFormPortalAttached(componentRef: ComponentRef<any>): void {\n        this.formPortalAttached.emit(componentRef);\n    }\n\n    public updateWidget(previewWidget: IWidget | null): void {\n        this.previewWidget = previewWidget;\n        this.changeDetector.markForCheck();\n    }\n\n    public formCancel(): void {\n        this.result.next(null);\n    }\n\n    public formSubmit(): void {\n        this.result.next(this.previewWidget);\n    }\n\n    public onPizzagnaChange(pizzagna: IPizzagna): void {\n        if (this.previewWidget) {\n            this.previewWidget.pizzagna = pizzagna;\n        }\n    }\n}\n","<div class=\"nui-configurator__backdrop\"></div>\n<div class=\"nui-configurator__content\">\n    <nui-panel\n        orientation=\"right\"\n        paneSize=\"30vw\"\n        paneMinSize=\"20vw\"\n        paneMaxSize=\"80vw\"\n        isResizable=\"true\"\n        class=\"h-100\"\n        [headerPadding]=\"false\"\n        [sidePaneBodyPadding]=\"false\"\n    >\n        <div\n            class=\"nui-configurator__preview d-flex align-items-center justify-content-center\"\n        >\n            <div class=\"nui-configurator__preview-area\">\n                <nui-preview-overlay></nui-preview-overlay>\n                <nui-pizzagna\n                    *ngIf=\"previewWidget?.pizzagna\"\n                    #previewPizzagnaComponent\n                    class=\"flex-grow-1 w-100\"\n                    [rootNode]=\"previewWidget | nuiPizzagnaRoot : 'widget'\"\n                    [pizzagna]=\"previewWidget?.pizzagna\"\n                    (pizzagnaChange)=\"onPizzagnaChange($event)\"\n                >\n                </nui-pizzagna>\n            </div>\n        </div>\n        <div nuiPanelEmbeddedBody class=\"nui-configurator__body\">\n            <ng-container\n                [cdkPortalOutlet]=\"formPortal\"\n                (attached)=\"onFormPortalAttached($event)\"\n            ></ng-container>\n        </div>\n    </nui-panel>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Component } from \"@angular/core\";\n\n@Component({\n    selector: \"nui-drop-area\",\n    template: ``,\n    styleUrls: [\"./drop-area.component.less\"],\n    standalone: false,\n})\nexport class DropAreaComponent {}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    HostBinding,\n    Inject,\n    Input,\n    OnChanges,\n    OnInit,\n    SimpleChanges,\n} from \"@angular/core\";\nimport {\n    ControlContainer,\n    FormGroup,\n    FormGroupDirective,\n} from \"@angular/forms\";\n\nimport { EventBus, IEvent, LoggerService } from \"@nova-ui/bits\";\n\nimport { BaseLayout } from \"../../../components/layouts/base-layout\";\nimport { PizzagnaService } from \"../../../pizzagna/services/pizzagna.service\";\nimport { PIZZAGNA_EVENT_BUS } from \"../../../types\";\n\n/**\n * This component registers multiple nested form groups in a parent form\n */\n@Component({\n    selector: \"nui-form-stack\",\n    templateUrl: \"./form-stack.component.html\",\n    viewProviders: [\n        {\n            provide: ControlContainer,\n            useExisting: FormGroupDirective,\n        },\n    ],\n    standalone: false,\n})\nexport class FormStackComponent\n    extends BaseLayout\n    implements OnInit, OnChanges\n{\n    static lateLoadKey = \"FormStackComponent\";\n\n    @Input() nodes: [];\n\n    @HostBinding(\"class\")\n    public elementClass = \"\";\n\n    public form: FormGroup;\n\n    constructor(\n        changeDetector: ChangeDetectorRef,\n        pizzagnaService: PizzagnaService,\n        logger: LoggerService,\n        public formDirective: FormGroupDirective,\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>\n    ) {\n        super(changeDetector, pizzagnaService, logger);\n    }\n\n    public ngOnInit(): void {\n        this.form = this.formDirective.form;\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        super.ngOnChanges(changes);\n    }\n\n    public onEvent(componentId: string, event: IEvent): void {\n        if (event.id === \"formReady\") {\n            this.addFormGroup(componentId, event.payload);\n        }\n    }\n\n    public addFormGroup(name: string, formGroup: FormGroup): void {\n        this.form.addControl(name, formGroup);\n    }\n\n    public getNodes(): string[] {\n        return this.nodes;\n    }\n}\n","<ng-container *ngFor=\"let node of nodeConfigs; trackBy: trackByFn\">\n    <ng-container\n        nuiComponentPortal\n        #componentPortal=\"nuiComponentPortal\"\n        [componentId]=\"node.id\"\n        [componentType]=\"node.componentType\"\n        [providers]=\"node.providers\"\n        [properties]=\"node.properties\"\n        [outputs]=\"['formReady']\"\n        (output)=\"onEvent(node.id, $event)\"\n    >\n        <ng-template\n            [cdkPortalOutlet]=\"componentPortal.portal\"\n            (attached)=\"componentPortal.attached($event)\"\n        ></ng-template>\n    </ng-container>\n</ng-container>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./pizzagna.service\";\nexport * from \"./component-portal.service\";\nexport * from \"./component-registry.service\";\nexport * from \"./dynamic-component-creator.service\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./pizzagna.component\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./component-portal.directive\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./get-pizzagna-property-path\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./services/public-api\";\nexport * from \"./components/pizzagna/public-api\";\nexport * from \"./directives/component-portal/public-api\";\nexport * from \"./functions/public-api\";\nexport * from \"./services/public-api\";\nexport * from \"./pizzagna.module\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    EventEmitter,\n    Injectable,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport {\n    AbstractControl,\n    FormBuilder,\n    FormGroup,\n    Validators,\n} from \"@angular/forms\";\n\nimport { LoggerService } from \"@nova-ui/bits\";\n\nimport { IHasChangeDetector, IHasForm, IProperties } from \"../../../../types\";\n\n@Injectable()\nexport abstract class DonutChartFormatterConfiguratorComponent\n    implements IHasChangeDetector, IHasForm, OnChanges, OnInit\n{\n    @Input() contentFormatterProperties: IProperties;\n    @Input() dsOutput: any;\n\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    public form: FormGroup;\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        protected formBuilder: FormBuilder,\n        public logger: LoggerService\n    ) {}\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        // In case we change the formatter the configurator's form gets destroyed.\n        // We need it recreated if it is selected once again\n        if (!this.form) {\n            this.initForm();\n        }\n        // In case we have already stored some values in the configuration we want to retreive them\n        if (this.contentFormatterProperties) {\n            Object.keys(this.contentFormatterProperties).forEach((p) => {\n                this.form?.get(p)?.setValue(this.contentFormatterProperties[p]);\n            });\n        } else {\n            // In case 'properties' are not set in configuration we assign the value of the very first metric\n            this.form?.get(\"currentMetric\")?.patchValue(this.properMetric);\n        }\n    }\n\n    public ngOnInit(): void {\n        this.initForm();\n    }\n\n    public initForm(): void {\n        this.form = this.formBuilder.group({\n            currentMetric: [this.properMetric, Validators.required],\n        });\n        this.addCustomFormControls(this.form);\n        this.formReady.emit(this.form);\n    }\n\n    get currentMetric(): AbstractControl {\n        return this.form.get(\"currentMetric\") as AbstractControl;\n    }\n\n    /**\n     * Returns the valid metric including cases when current selected metric does not exist eny more.\n     */\n    get properMetric(): string {\n        const currentMetric = this.contentFormatterProperties?.currentMetric;\n        // This verifies whether the current metric still exists in the list of metric received from the datasource\n        const hasMetric = this.dsOutput?.result.find(\n            (m: any) => m.id === currentMetric\n        );\n        // We return current metric if it is still in the list. Otherwise we fallback to the very first item of the\n        // list received from the datasource\n        return hasMetric ? currentMetric : this.dsOutput?.result[0]?.id;\n    }\n\n    /**\n     * Add your custom form controls here\n     *\n     * @param form\n     */\n    protected addCustomFormControls(form: FormGroup): void {}\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { ChangeDetectorRef, Component } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { LoggerService } from \"@nova-ui/bits\";\n\nimport { PizzagnaService } from \"../../../../pizzagna/public-api\";\nimport { DonutChartFormatterConfiguratorComponent } from \"../widget-formatter-configurators/donut-formatter-configurator.component\";\n\n@Component({\n    selector: \"nui-donut-content-configurator\",\n    templateUrl: \"donut-content-percentage-configuration.component.html\",\n    standalone: false,\n})\nexport class DonutContentPercentageConfigurationComponent extends DonutChartFormatterConfiguratorComponent {\n    static lateLoadKey = \"DonutContentPercentageConfigurationComponent\";\n\n    constructor(\n        changeDetector: ChangeDetectorRef,\n        formBuilder: FormBuilder,\n        logger: LoggerService,\n        private pizzagnaService: PizzagnaService\n    ) {\n        super(changeDetector, formBuilder, logger);\n    }\n}\n","<div [formGroup]=\"form\">\n    <div class=\"mt-4\">\n        <nui-form-field\n            caption=\"Metrics\"\n            i18n-caption\n            class=\"mb-3\"\n            [control]=\"currentMetric\"\n        >\n            <nui-select-v2 formControlName=\"currentMetric\">\n                <nui-select-v2-option\n                    *ngFor=\"let itemValue of dsOutput?.result\"\n                    [value]=\"itemValue?.id\"\n                >\n                    {{ itemValue?.name }}\n                </nui-select-v2-option>\n            </nui-select-v2>\n            <nui-validation-message for=\"required\" i18n>\n                This field is required\n            </nui-validation-message>\n        </nui-form-field>\n    </div>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    Input,\n    OnChanges,\n    OnInit,\n    SimpleChanges,\n} from \"@angular/core\";\nimport sumBy from \"lodash/sumBy\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil, tap } from \"rxjs/operators\";\n\nimport {\n    ChartAssist,\n    IAccessors,\n    IChartAssistEvent,\n    IChartAssistSeries,\n} from \"@nova-ui/charts\";\n\nimport { IProperties } from \"../../../../types\";\n\n@Component({\n    template: `<ng-container>\n        <div class=\"nui-text-page\">\n            <div class=\"nui-text-page\">\n                {{ chartContent }}\n            </div>\n        </div>\n    </ng-container>`,\n    standalone: false,\n})\nexport class DonutContentPercentageFormatterComponent\n    implements OnChanges, OnInit\n{\n    static lateLoadKey = \"DonutContentPercentageFormatterComponent\";\n\n    public sum: number;\n    public emphasizedSeriesData: IChartAssistSeries<IAccessors> | undefined;\n    public currentMetricData: number | undefined;\n    public chartContent: string;\n\n    private readonly destroy$ = new Subject<void>();\n\n    constructor(public changeDetector: ChangeDetectorRef) {}\n\n    @Input() data: IChartAssistSeries<IAccessors>[];\n    @Input() chartAssist: ChartAssist;\n    @Input() properties: IProperties;\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.data) {\n            this.sum = sumBy(this.data, (s) => s.data[0]);\n        }\n\n        if (changes.properties) {\n            // If current metric is not in the list of metrics any more we fall back to the very first one from the list we get from the datasource\n            this.currentMetricData =\n                this.data.find(\n                    (item) => item.id === this.properties?.currentMetric\n                )?.data[0] || this.data[0].data[0];\n        }\n\n        this.getProperContentValue();\n    }\n\n    public ngOnInit(): void {\n        this.chartAssist.chartAssistSubject\n            .pipe(\n                tap(\n                    (data: IChartAssistEvent) =>\n                        (this.emphasizedSeriesData = this.data.find(\n                            (item) => item.id === data.payload.seriesId\n                        ))\n                ),\n                tap(() => this.getProperContentValue()),\n                takeUntil(this.destroy$)\n            )\n            .subscribe();\n    }\n\n    public getProperSeriesData(): number {\n        return this.emphasizedSeriesData\n            ? this.emphasizedSeriesData?.data[0]\n            : this.currentMetricData ?? 0;\n    }\n\n    public getProperContentValue(): void {\n        this.chartContent =\n            ((this.getProperSeriesData() / this.sum) * 100).toFixed(2) + \"%\";\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { ChangeDetectorRef, Component, Input, OnChanges } from \"@angular/core\";\nimport sumBy from \"lodash/sumBy\";\n\nimport { UnitConversionService } from \"@nova-ui/bits\";\n\nimport { DEFAULT_UNIT_CONVERSION_THRESHOLD } from \"../../../../common/constants\";\nimport { DashboardUnitConversionPipe } from \"../../../../common/pipes/dashboard-unit-conversion-pipe\";\nimport { IProportionalWidgetConfig } from \"../../../../components/public-api\";\nimport { IFormatterData } from \"../types\";\n\n@Component({\n    selector: \"nui-donut-content-raw-formatter\",\n    template: `<ng-container>\n        <nui-icon\n            *ngIf=\"config?.chartDonutContentIcon\"\n            [icon]=\"config?.chartDonutContentIcon\"\n            iconSize=\"medium\"\n        ></nui-icon>\n        <div class=\"nui-text-page\">\n            <span\n                *ngIf=\"sum < conversionThreshold; else convertedValueDisplay\"\n                >{{ sum | number : \"1.0-3\" }}</span\n            >\n            <ng-template #convertedValueDisplay>{{\n                convertedValue\n            }}</ng-template>\n        </div>\n        <div *ngIf=\"config?.chartDonutContentLabel\" class=\"nui-text-secondary\">\n            {{ config?.chartDonutContentLabel }}\n        </div>\n    </ng-container>`,\n    standalone: false,\n})\nexport class DonutContentRawFormatterComponent implements OnChanges {\n    static lateLoadKey = \"DonutContentRawFormatterComponent\";\n\n    public sum: number;\n    public convertedValue: string;\n    public conversionThreshold = DEFAULT_UNIT_CONVERSION_THRESHOLD;\n\n    private unitConversionPipe: DashboardUnitConversionPipe;\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        unitConversionService: UnitConversionService\n    ) {\n        this.unitConversionPipe = new DashboardUnitConversionPipe(\n            unitConversionService\n        );\n    }\n\n    @Input() data: IFormatterData[];\n    @Input() config: IProportionalWidgetConfig;\n\n    public ngOnChanges(): void {\n        this.sum = sumBy(this.data, (s) => s.data[0]);\n        this.convertedValue = this.unitConversionPipe.transform(this.sum);\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { ChangeDetectorRef, Component, Input, OnChanges } from \"@angular/core\";\nimport sumBy from \"lodash/sumBy\";\n\nimport { IFormatterData } from \"../types\";\n\n@Component({\n    selector: \"nui-dashboards-donut-content-sum-formatter\",\n    template: `<ng-container\n        ><div class=\"nui-text-page\">{{ this.sum }}</div></ng-container\n    >`,\n    standalone: false,\n})\nexport class DonutContentSumFormatterComponent implements OnChanges {\n    static lateLoadKey = \"DonutContentSumFormatterComponent\";\n\n    public sum: number;\n\n    constructor(public changeDetector: ChangeDetectorRef) {}\n\n    @Input() data: IFormatterData[];\n\n    public ngOnChanges(): void {\n        this.sum = sumBy(this.data, (s) => s.data[0]);\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { ChangeDetectorRef, Component, Input, OnChanges } from \"@angular/core\";\n\nimport { IconService } from \"@nova-ui/bits\";\n\nimport { IHasChangeDetector } from \"../../../../types\";\nimport { IFormatterData } from \"../types\";\n\n@Component({\n    selector: \"nui-dashboards-icon-formatter\",\n    template: `\n        <div\n            *ngIf=\"isValid\"\n            class=\"d-flex align-items-center justify-content-center\"\n        >\n            <nui-icon\n                *ngIf=\"iconFound; else iconNotFound\"\n                [icon]=\"data?.value\"\n            ></nui-icon>\n        </div>\n        <ng-template #iconNotFound>\n            <nui-icon\n                title=\"Unknown icon\"\n                i18n-title\n                iconColor=\"disabled-gray\"\n                icon=\"help\"\n            ></nui-icon>\n        </ng-template>\n    `,\n    standalone: false,\n})\nexport class IconFormatterComponent implements OnChanges, IHasChangeDetector {\n    static lateLoadKey = \"IconFormatterComponent\";\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        public iconService: IconService\n    ) {}\n\n    public isValid: boolean = false;\n    public iconFound: boolean = true;\n    @Input() public data?: IFormatterData;\n\n    public ngOnChanges(): void {\n        this.isValid = !!this.data?.value;\n        this.iconFound = !!this.iconService.getIconData(this.data?.value);\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    Input,\n    OnChanges,\n    SimpleChanges,\n} from \"@angular/core\";\n\nimport { IHasChangeDetector } from \"../../../../types\";\nimport { ILinkFormatterData } from \"../types\";\n\n@Component({\n    // selector: \"nui-dashboards-link-formatter\",\n    template: `<div class=\"link-formatter-container\">\n        <a\n            *ngIf=\"isValid\"\n            class=\"nui-text-ellipsis\"\n            [href]=\"data?.link\"\n            [target]=\"targetSelf ? '_self' : '_blank'\"\n        >\n            {{ data?.value }}\n        </a>\n    </div>`,\n    styles: [\n        `\n            .link-formatter-container {\n                display: grid;\n                grid-template-columns: 1fr;\n            }\n        `,\n    ],\n    standalone: false,\n})\nexport class LinkFormatterComponent implements OnChanges, IHasChangeDetector {\n    static lateLoadKey = \"LinkFormatterComponent\";\n\n    @Input() data: ILinkFormatterData;\n    @Input() targetSelf?: boolean;\n\n    public isValid = false;\n\n    constructor(public changeDetector: ChangeDetectorRef) {}\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        this.isValid = Boolean(this.data && this.data.value && this.data.link);\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    HostBinding,\n    Input,\n} from \"@angular/core\";\n\nimport { IFormatterData } from \"../types\";\n\n@Component({\n    selector: \"nui-dashboards-raw-formatter\",\n    template: `<ng-container>{{ data?.value }}</ng-container>`,\n    standalone: false,\n})\nexport class RawFormatterComponent {\n    static lateLoadKey = \"RawFormatterComponent\";\n\n    constructor(public changeDetector: ChangeDetectorRef) {}\n\n    @Input() data: IFormatterData;\n\n    @Input()\n    @HostBinding(\"class\")\n    public elementClass: string;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Component } from \"@angular/core\";\n\nimport { RawFormatterComponent } from \"../raw-formatter/raw-formatter.component\";\n\n@Component({\n    selector: \"nui-dashboards-percentage-formatter\",\n    template: `<ng-container> {{ data?.value }}% </ng-container>`,\n    standalone: false,\n})\nexport class PercentageFormatterComponent extends RawFormatterComponent {\n    static lateLoadKey = \"PercentageFormatterComponent\";\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport interface ISiUnitsPrefix {\n    power: number;\n    prefix: string;\n    label: string;\n}\n\nexport const SI_UNITS_PREFIXES: ISiUnitsPrefix[] = [\n    {\n        power: 1,\n        prefix: \"\",\n        label: \"\",\n    },\n    {\n        power: 3,\n        prefix: \"k\",\n        label: \"kilo\",\n    },\n    {\n        power: 6,\n        prefix: \"M\",\n        label: \"mega\",\n    },\n    {\n        power: 9,\n        prefix: \"G\",\n        label: \"giga\",\n    },\n    {\n        power: 12,\n        prefix: \"T\",\n        label: \"tera\",\n    },\n    {\n        power: 15,\n        prefix: \"P\",\n        label: \"peta\",\n    },\n    {\n        power: 18,\n        prefix: \"E\",\n        label: \"exa\",\n    },\n    {\n        power: 21,\n        prefix: \"Z\",\n        label: \"zetta\",\n    },\n    {\n        power: 24,\n        prefix: \"Y\",\n        label: \"yotta\",\n    },\n];\nexport const SI_UNITS_PREFIXES_NEGATIVE: ISiUnitsPrefix[] = [\n    {\n        power: -24,\n        prefix: \"y\",\n        label: \"yocto\",\n    },\n    {\n        power: -21,\n        prefix: \"z\",\n        label: \"zepto\",\n    },\n    {\n        power: -18,\n        prefix: \"a\",\n        label: \"atto\",\n    },\n    {\n        power: -15,\n        prefix: \"f\",\n        label: \"femto\",\n    },\n    {\n        power: -12,\n        prefix: \"p\",\n        label: \"pico\",\n    },\n    {\n        power: -9,\n        prefix: \"n\",\n        label: \"nano\",\n    },\n    {\n        power: -6,\n        prefix: \"µ\",\n        label: \"micro\",\n    },\n    {\n        power: -3,\n        prefix: \"m\",\n        label: \"milli\",\n    },\n    {\n        power: 1,\n        prefix: \"\",\n        label: \"\",\n    },\n];\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    HostBinding,\n    Input,\n    OnChanges,\n    SimpleChanges,\n} from \"@angular/core\";\nimport toNumber from \"lodash/toNumber\";\nimport toString from \"lodash/toString\";\n\nimport {\n    ISiUnitsPrefix,\n    SI_UNITS_PREFIXES,\n    SI_UNITS_PREFIXES_NEGATIVE,\n} from \"../../../../constants/si-units-prefixes\";\nimport { IFormatterData } from \"../types\";\n\n@Component({\n    selector: \"nui-dashboards-si-units-formatter\",\n    template: `\n        <ng-container>\n            <div class=\"d-flex flex-nowrap\">\n                <span>{{ value }}</span>\n                <span> {{ modifier }}</span>\n            </div>\n        </ng-container>\n    `,\n    standalone: false,\n})\nexport class SiUnitsFormatterComponent implements OnChanges {\n    static lateLoadKey = \"SiUnitsFormatterComponent\";\n    // e.g. setting \"shiftPoint\" to \"1\" makes \"1000k\" to be displayed instead of \"1M\"\n    static SHIFT_POINT_DEFAULT = 0;\n\n    @Input() public data: IFormatterData;\n\n    @Input()\n    @HostBinding(\"class\")\n    public elementClass: string;\n\n    public value: string = \"0\";\n    public modifier: string | undefined;\n\n    constructor(public changeDetector: ChangeDetectorRef) {}\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.data) {\n            const { value } = changes.data.currentValue;\n\n            if (value) {\n                this.processSiUnitsValue(toString(value));\n            }\n        }\n    }\n\n    protected processSiUnitsValue(value: string): void {\n        const prefix = this.getTransformPrefix(toNumber(value));\n\n        this.value = this.getTransformedValue(value, prefix);\n        this.modifier = prefix?.prefix;\n    }\n\n    protected getTransformedValue(\n        value: string,\n        prefix: ISiUnitsPrefix | undefined\n    ): string {\n        if (!prefix) {\n            return value;\n        }\n\n        const transformed =\n            prefix.power !== 1 ? +value * Math.pow(10, -prefix.power) : +value;\n        const rounded = Math.round(transformed * 10) / 10; // round to 1 decimal\n\n        return rounded.toString();\n    }\n\n    protected getTransformPrefix(origin: number): ISiUnitsPrefix | undefined {\n        const value = Math.abs(origin);\n\n        if (Number.isNaN(value)) {\n            return undefined;\n        }\n\n        const shiftPoint =\n            this.data?.shiftPoint ||\n            SiUnitsFormatterComponent.SHIFT_POINT_DEFAULT;\n\n        if (value >= 1) {\n            const rounded = Math.round(value);\n            const roundedStr = rounded.toString();\n            const roundedLength = roundedStr.length;\n\n            // iterate over prefixes from higher to lower\n            const prefix = [...SI_UNITS_PREFIXES]\n                .reverse()\n                .find((pref) => roundedLength >= pref.power + 1 + shiftPoint);\n            return prefix;\n        } else {\n            const modifier = getValueNegativeModifier(value);\n            const prefix = [...SI_UNITS_PREFIXES_NEGATIVE]\n                .reverse()\n                .find(\n                    (pref) => modifier <= Math.abs(pref.power) + 1 + shiftPoint\n                );\n            return prefix;\n        }\n    }\n}\n\nfunction getValueNegativeModifier(\n    value: number,\n    prevModifier: number = 1\n): number {\n    const val = Math.abs(value);\n\n    if (val >= 1) {\n        return 1;\n    }\n\n    const newModifier = prevModifier + 1;\n\n    return val * Math.pow(10, newModifier) > 1\n        ? newModifier\n        : getValueNegativeModifier(val, newModifier);\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { ChangeDetectorRef, Component, Input, OnChanges } from \"@angular/core\";\n\nimport { IHasChangeDetector } from \"../../../../types\";\n\n@Component({\n    selector: \"nui-dashboards-status-icon-formatter\",\n    template: `\n        <ng-container *ngIf=\"isValid\">\n            <div\n                class=\"nui-text-label align-items-center status-icon-formatter\"\n            >\n                <span class=\"nui-text-ellipsis text-right pl-3\">{{\n                    data.data\n                }}</span>\n                <nui-icon\n                    [icon]=\"data.icon\"\n                    class=\"nui-icon nui-icon-line-height mx-2\"\n                ></nui-icon>\n                <div *ngIf=\"data?.link; else noLink\">\n                    <a\n                        class=\"nui-text-link-small nui-text-ellipsis link\"\n                        (click)=\"$event.stopPropagation()\"\n                        [href]=\"data?.link\"\n                        rel=\"noopener noreferrer\"\n                        [title]=\"data.name\"\n                    >\n                        {{ data.name }}\n                    </a>\n                </div>\n                <ng-template #noLink>\n                    <span class=\"nui-text-ellipsis\" [style.font-size.px]=\"11\">{{\n                        data.name\n                    }}</span>\n                </ng-template>\n            </div>\n        </ng-container>\n    `,\n    styles: [\n        `\n            .status-icon-formatter {\n                display: grid;\n                grid-template-columns: 50px auto minmax(114px, 1fr);\n            }\n        `,\n    ],\n    standalone: false,\n})\nexport class StatusWithIconFormatterComponent\n    implements OnChanges, IHasChangeDetector\n{\n    static lateLoadKey = \"StatusWithIconFormatterComponent\";\n\n    constructor(public changeDetector: ChangeDetectorRef) {}\n\n    public isValid: boolean = false;\n    @Input() data: {\n        name: string;\n        icon: string;\n        data: number[];\n        link?: string;\n    };\n\n    public ngOnChanges(): void {\n        this.isValid = !!(\n            this.data &&\n            this.data.icon &&\n            this.data.name &&\n            this.data.data\n        );\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\nimport { BehaviorSubject } from \"rxjs\";\n\n@Injectable()\nexport class ConfiguratorHeadingService {\n    public height$: BehaviorSubject<number> = new BehaviorSubject<number>(0);\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    Component,\n    ElementRef,\n    EventEmitter,\n    Input,\n    OnChanges,\n    Output,\n} from \"@angular/core\";\n\nimport { ConfiguratorHeadingService } from \"../../services/configurator-heading.service\";\n\n@Component({\n    selector: \"nui-configurator-heading\",\n    templateUrl: \"./configurator-heading.component.html\",\n    styleUrls: [\"./configurator-heading.component.less\"],\n    standalone: false,\n})\nexport class ConfiguratorHeadingComponent implements OnChanges {\n    @Input() public configuratorTitle: string;\n    @Input() public disableCloseButton = false;\n\n    // eslint-disable-next-line @angular-eslint/no-output-native\n    @Output() public close = new EventEmitter();\n\n    constructor(\n        public el: ElementRef,\n        private heading: ConfiguratorHeadingService\n    ) {}\n\n    public ngOnChanges(): void {\n        this.heading.height$.next(\n            +getComputedStyle(this.el.nativeElement).height.slice(0, -2)\n        );\n    }\n}\n","<div\n    class=\"configurator-heading d-flex justify-content-between align-items-center p-4\"\n>\n    <span class=\"nui-text-panel nui-text-ellipsis\" [title]=\"configuratorTitle\">\n        {{ configuratorTitle }}\n    </span>\n    <button\n        nui-button\n        type=\"button\"\n        displayStyle=\"action\"\n        icon=\"close\"\n        [disabled]=\"disableCloseButton\"\n        (click)=\"this.close.emit()\"\n    ></button>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Pipe, PipeTransform } from \"@angular/core\";\nimport isArray from \"lodash/isArray\";\nimport isNil from \"lodash/isNil\";\n\n@Pipe({\n    name: \"nuiAddData\",\n    standalone: false,\n})\nexport class AddDataPipe implements PipeTransform {\n    transform(\n        origin: object | Array<any> | undefined,\n        value: any,\n        key?: string\n    ): object | Array<any>   | undefined {\n        if (isNil(origin)) {\n            return;\n        }\n\n        if (isArray(origin)) {\n            if (!value) {\n                return origin;\n            }\n\n            const newArr = [...origin];\n            newArr.push(value);\n\n            return newArr;\n        }\n\n        const computedKey: string =\n            typeof key === \"undefined\" ? \"undefined\" : key;\n        return Object.assign({}, origin, { [computedKey]: value });\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({\n    name: \"nuiWidgetConfiguratorSectionHeader\",\n    standalone: false,\n})\nexport class WidgetConfiguratorSectionHeaderPipe implements PipeTransform {\n    private readonly defaultHeaderPrefix = $localize`Value`;\n\n    transform(\n        headerText: string | undefined,\n        index: number,\n        headerPrefix: string = this.defaultHeaderPrefix\n    ): string {\n        return `${headerPrefix} ${index + 1}${headerText ? \" - \" : \"\"}${\n            headerText || \"\"\n        }`;\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { CdkDragDrop, CdkDragStart } from \"@angular/cdk/drag-drop\";\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnDestroy,\n    OnInit,\n    Output,\n    ViewEncapsulation,\n} from \"@angular/core\";\nimport { FormArray, FormBuilder, FormGroup, Validators } from \"@angular/forms\";\n// eslint-disable-next-line import/no-deprecated\nimport { startWith, takeUntil } from \"rxjs/operators\";\n\nimport { IEvent, LoggerService } from \"@nova-ui/bits\";\n\nimport { BaseLayout } from \"../../../components/layouts/base-layout\";\nimport { PizzagnaService } from \"../../../pizzagna/services/pizzagna.service\";\nimport {\n    IComponentConfiguration,\n    IHasChangeDetector,\n    IHasForm,\n} from \"../../../types\";\nimport { IItemConfiguration } from \"../types\";\n\n/** @ignore */\n@Component({\n    selector: \"nui-items-dynamic\",\n    templateUrl: \"./items-dynamic.component.html\",\n    styleUrls: [\"items-dynamic.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    standalone: false,\n})\nexport class ItemsDynamicComponent\n    extends BaseLayout\n    implements IHasChangeDetector, IHasForm<FormArray>, OnInit, OnDestroy\n{\n    static lateLoadKey = \"ItemsDynamicComponent\";\n\n    @Input() items: IItemConfiguration[] = [];\n    @Input() moveButtons = true;\n    @Input() nodes: string[];\n    @Input() headerPrefix: string;\n    @Output() formReady = new EventEmitter<FormArray>();\n    @Output() itemsChange = new EventEmitter();\n\n    public form: FormArray;\n    public height: number;\n    public headerMap: Map<string, string> = new Map<string, string>();\n\n    constructor(\n        changeDetector: ChangeDetectorRef,\n        pizzagnaService: PizzagnaService,\n        logger: LoggerService,\n        private formBuilder: FormBuilder\n    ) {\n        super(changeDetector, pizzagnaService, logger);\n    }\n\n    public getItemForNode(\n        node: IComponentConfiguration\n    ): IItemConfiguration | undefined {\n        return this.items.find((item) => item.id === node.id);\n    }\n\n    public getNodes(): string[] {\n        return this.nodes;\n    }\n\n    public ngOnInit(): void {\n        this.form = this.formBuilder.array([], Validators.required);\n        this.formReady.emit(this.form);\n    }\n\n    public onEvent(componentId: string, event: IEvent): void {\n        // TODO: refactor\n        const item = this.items.find((i) => i.id === componentId);\n        const index = this.items.findIndex((i) => i.id === componentId);\n\n        if (event.id === \"formReady\" && item) {\n            this.onFormReady(item, event.payload, index);\n        }\n\n        if (event.id === \"formDestroy\") {\n            this.onFormDestroy(event.payload);\n        }\n    }\n\n    public onFormReady(\n        item: IItemConfiguration,\n        form: FormGroup,\n        index: number\n    ): void {\n        const childForm = this.formBuilder.group({\n            id: [item.id],\n            componentType: [item.componentType],\n            properties: form,\n        });\n\n        this.form.setControl(index, childForm);\n\n        setTimeout(() => {\n            const label = form.get(`${item.id}/description`)?.get(\"label\");\n            label?.valueChanges\n                // eslint-disable-next-line import/no-deprecated\n                .pipe(startWith(label.value), takeUntil(this.destroyed$))\n                .subscribe((value: string) => {\n                    this.headerMap.set(item.id, value || \"\");\n                    this.changeDetector.markForCheck();\n                });\n        });\n    }\n\n    public onFormDestroy(form: FormGroup): void {\n        // using setTimeout to allow the change detection cycle to finish before updating the form\n        setTimeout(() => {\n            // remove form\n            let i = 0;\n            for (; i < this.form.length; i++) {\n                if (this.form.at(i).get(\"properties\") === form) {\n                    break;\n                }\n            }\n\n            this.form.removeAt(i);\n            // triggers form change\n            this.form.patchValue(this.form.value, { emitEvent: true });\n        });\n    }\n\n    public trackBy(index: number, item: IItemConfiguration): string {\n        return item.id;\n    }\n\n    public removeItem(\n        item: IItemConfiguration | undefined,\n        index: number\n    ): void {\n        if (!item) {\n            throw new Error(\"Unable to remove undefined item from pizzagna\");\n        }\n\n        // remove item configuration - this will cause the onFormDestroy to be called for related form after component disappears from the view\n        this.itemsChange.emit(this.items.filter((it) => it !== item));\n        this.items.splice(index, 1);\n\n        this.nodes.splice(index, 1);\n        this.pizzagnaService.removeComponents(item.id);\n    }\n\n    public moveItem(index: number, toIndex: number): void {\n        const items = [...this.items];\n        const item = items.splice(index, 1);\n        items.splice(toIndex, 0, ...item);\n\n        const nodes = [...this.nodes];\n        const node = nodes.splice(index, 1);\n        nodes.splice(toIndex, 0, ...node);\n        this.nodes = [...nodes];\n\n        this.moveFormValues(index, toIndex);\n        this.itemsChange.emit(items);\n        // triggers form change - setTimeout because we need to wait first for items to update\n        // console.log(this.form.value);\n        setTimeout(() => {\n            this.form.setValue(this.form.value, { emitEvent: true });\n        });\n    }\n\n    public drop(event: CdkDragDrop<string[]>): void {\n        this.moveItem(event.previousIndex, event.currentIndex);\n    }\n\n    public cdkDragStarted(event: CdkDragStart): void {\n        this.height = event.source.element.nativeElement.offsetHeight;\n    }\n\n    private moveFormValues(index: number, toIndex: number) {\n        const oldValue = this.form.at(index);\n        this.form.removeAt(index);\n        this.form.insert(toIndex, oldValue);\n    }\n\n    public ngOnDestroy(): void {\n        // Ensures that any base class observables are unsubscribed.\n        super.ngOnDestroy();\n    }\n}\n","<div\n    class=\"nui-items-dynamic\"\n    cdkDropList\n    (cdkDropListDropped)=\"drop($event)\"\n    [formGroup]=\"form\"\n>\n    <div\n        cdkDrag\n        class=\"nui-items-dynamic__node-item\"\n        (cdkDragStarted)=\"cdkDragStarted($event)\"\n        *ngFor=\"let node of nodeConfigs; let i = index; trackBy: trackBy\"\n    >\n        <nui-drop-area\n            class=\"nui-items-dynamic__drop-area\"\n            *cdkDragPlaceholder\n            [style.height.px]=\"height\"\n        ></nui-drop-area>\n\n        <ng-template #headerText>\n            <ng-container *ngIf=\"moveButtons\">\n                <div class=\"nui-items-dynamic__drag-handler\" cdkDragHandle>\n                    <nui-icon icon=\"drag\"></nui-icon>\n                </div>\n            </ng-container>\n            <span\n                [title]=\"\n                    headerMap.get(node.id)\n                        | nuiWidgetConfiguratorSectionHeader : i : headerPrefix\n                \"\n                class=\"nui-items-dynamic__header-text\"\n            >\n                {{\n                    headerMap.get(node.id)\n                        | nuiWidgetConfiguratorSectionHeader : i : headerPrefix\n                }}\n            </span>\n        </ng-template>\n\n        <ng-template #headerButtons>\n            <div class=\"d-flex\">\n                <!-- TODO: remove \"kpi\" prefix in v11 - NUI-5833 -->\n                <button\n                    id=\"kpi-widget-remove-btn-{{ i }}\"\n                    nui-button\n                    type=\"button\"\n                    icon=\"delete\"\n                    displayStyle=\"action\"\n                    (click)=\"removeItem(getItemForNode(node), i)\"\n                ></button>\n            </div>\n        </ng-template>\n\n        <ng-container\n            nuiComponentPortal\n            #componentPortal=\"nuiComponentPortal\"\n            [componentId]=\"node.id\"\n            [componentType]=\"node.componentType\"\n            [providers]=\"node.providers\"\n            [properties]=\"\n                node.properties\n                    | nuiAddData : headerText : 'headerTextTemplate'\n                    | nuiAddData : headerButtons : 'headerButtonsTemplate'\n            \"\n            [outputs]=\"['formReady', 'formDestroy']\"\n            (output)=\"onEvent(node.id, $event)\"\n        >\n            <ng-template\n                [cdkPortalOutlet]=\"componentPortal.portal\"\n                (attached)=\"componentPortal.attached($event)\"\n            >\n            </ng-template>\n        </ng-container>\n    </div>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Component } from \"@angular/core\";\n\n@Component({\n    selector: \"nui-preview-placeholder\",\n    templateUrl: \"./preview-placeholder.component.html\",\n    styleUrls: [\"./preview-placeholder.component.less\"],\n    standalone: false,\n})\nexport class PreviewPlaceholderComponent {\n    public static lateLoadKey = \"PreviewPlaceholderComponent\";\n}\n","<div><b i18n>This is a preview of your widget</b>.</div>\n<div i18n>\n    As you make configuration changes, this area will update to match. To get\n    started, select a widget type on the configuration panel.\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    SimpleChanges,\n    TemplateRef,\n} from \"@angular/core\";\n\nimport { IBusyConfig, SpinnerSize } from \"@nova-ui/bits\";\n\nimport { IDashwizStepComponent, IDashwizStepNavigatedEvent } from \"../types\";\n\n/**\n * Component that provides wizard step functionality.\n */\n@Component({\n    selector: \"nui-dashwiz-step\",\n    templateUrl: \"./dashwiz-step.component.html\",\n    styleUrls: [\"./dashwiz-step.component.less\"],\n    standalone: false,\n})\nexport class DashwizStepComponent\n    implements IDashwizStepComponent, OnInit, OnChanges\n{\n    /**\n     * Template for step.\n     */\n    @Input() public stepTemplate?: TemplateRef<any>;\n    /**\n     * Check is form inside step valid.\n     */\n    @Input() public stepControl?: boolean;\n    /**\n     * The title of the step.\n     */\n    @Input() public title: string;\n    /**\n     * Default:'Next'. Text for the Next button.\n     */\n    @Input() public nextText: string;\n    /**\n     * Hide step\n     */\n    @Input() public hidden = false;\n    /**\n     * Disables step\n     */\n    @Input() public disabled?: boolean;\n    /**\n     * The size of the busy spinner\n     */\n    @Input() public spinnerSize: SpinnerSize = SpinnerSize.Large;\n    /**\n     * Evaluated when the step is entered.\n     */\n    @Output() public enter =\n        new EventEmitter<IDashwizStepNavigatedEvent | void>();\n    /**\n     * Evaluated when validity of the step is changed.\n     */\n    @Output() public valid = new EventEmitter<boolean>();\n    /**\n     * Evaluated when the step is exited.\n     */\n    @Output() public exit =\n        new EventEmitter<IDashwizStepNavigatedEvent | void>();\n    /**\n     * Evaluated when trying to go to the next step.\n     */\n    @Output() public next =\n        new EventEmitter<IDashwizStepNavigatedEvent | void>();\n\n    /**\n     *\n     * Options for busy state. Default: no busy state, with clear empty busy component when set to true\n     */\n    public busyConfig: IBusyConfig = {\n        busy: false,\n    };\n\n    public visited = false;\n    public active = false;\n    public complete = false;\n    public icon = \"step\";\n    public iconColor = \"\";\n\n    constructor() {}\n\n    public ngOnInit(): void {\n        this.nextText = this.nextText || $localize`Next`;\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes[\"stepControl\"]) {\n            this.valid.emit(this.stepControl);\n        }\n    }\n\n    /**\n     * Set flags for step entering and emits enter event\n     */\n    public enterStep = (event?: IDashwizStepNavigatedEvent): void => {\n        this.enter.emit(event);\n    };\n\n    /**\n     * Set flags for step exiting and emits exit event\n     */\n    public exitStep = (event?: IDashwizStepNavigatedEvent): void => {\n        this.exit.emit(event);\n    };\n\n    public nextStep = (event?: IDashwizStepNavigatedEvent): void => {\n        this.next.emit(event);\n    };\n\n    public applyEnteringStep = (): void => {\n        this.active = true;\n        this.icon = \"step-active\";\n        this.iconColor = \"black\";\n    };\n\n    public applyExitingStep = (): void => {\n        this.active = false;\n        this.visited = true;\n        this.icon = \"step-complete\";\n        this.iconColor = \"\";\n    };\n}\n","<div\n    class=\"nui-dashwiz-step animated h-100\"\n    [ngClass]=\"{ 'nui-dashwiz-step--active': active }\"\n    nui-busy\n    [busy]=\"busyConfig.busy\"\n>\n    <div\n        cdkScrollable\n        class=\"h-100 overflow-auto configurator-scrollable\"\n    >\n        <ng-container *ngTemplateOutlet=\"stepTemplate\"></ng-container>\n    </div>\n    <nui-spinner\n        [percent]=\"busyConfig.percent\"\n        [allowCancel]=\"busyConfig.allowCancel\"\n        [message]=\"busyConfig.message\"\n        [size]=\"spinnerSize\"\n    >\n    </nui-spinner>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    Output,\n} from \"@angular/core\";\n\nimport { IDashwizButtonsComponent } from \"../types\";\n\n@Component({\n    selector: \"nui-dashwiz-buttons\",\n    template: `\n        <div class=\"d-flex justify-content-end p-4\">\n            <button\n                nui-button\n                class=\"nui-dashwiz-buttons__cancel-button\"\n                type=\"button\"\n                [disabled]=\"busy\"\n                (click)=\"onCancel()\"\n            >\n                <span i18n>Cancel</span>\n            </button>\n            <button\n                *ngIf=\"!isFirstStepActive\"\n                class=\"ml-3 nui-dashwiz-buttons__back-button\"\n                nui-button\n                icon=\"caret-left\"\n                type=\"button\"\n                [disabled]=\"busy\"\n                (click)=\"onBack()\"\n            >\n                <span i18n>Back</span>\n            </button>\n            <button\n                *ngIf=\"!isLastStepActive && canProceed\"\n                class=\"ml-3 nui-dashwiz-buttons__next-button\"\n                nui-button\n                type=\"button\"\n                [displayStyle]=\"canFinish ? 'default' : 'primary'\"\n                [disabled]=\"busy\"\n                (click)=\"onNext()\"\n            >\n                <span>{{ nextText }}</span>\n            </button>\n            <button\n                *ngIf=\"canFinish || isLastStepActive\"\n                class=\"ml-3 nui-dashwiz-buttons__finish-button\"\n                nui-button\n                type=\"button\"\n                displayStyle=\"primary\"\n                [isBusy]=\"busy\"\n                [disabled]=\"busy\"\n                (click)=\"onFinish()\"\n            >\n                <span>{{ finishText }}</span>\n            </button>\n        </div>\n    `,\n    standalone: false,\n})\nexport class DashwizButtonsComponent implements IDashwizButtonsComponent {\n    static lateLoadKey = \"DashwizButtonsComponent\";\n\n    constructor(public changeDetector: ChangeDetectorRef) {}\n\n    @Input() public busy = false;\n    @Input() public canFinish = false;\n    @Input() public canProceed = false;\n    @Input() public isFirstStepActive = false;\n    @Input() public isLastStepActive = false;\n    @Input() public nextText: string;\n    @Input() public finishText: string;\n\n    @Output() public cancel = new EventEmitter<void>();\n    @Output() public next = new EventEmitter<void>();\n    @Output() public back = new EventEmitter<void>();\n    @Output() public finish = new EventEmitter<void>();\n\n    public onCancel(): void {\n        this.cancel.emit();\n    }\n\n    public onNext(): void {\n        this.next.emit();\n    }\n\n    public onBack(): void {\n        this.back.emit();\n    }\n\n    public onFinish(): void {\n        this.finish.emit();\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { ScrollDispatcher } from \"@angular/cdk/overlay\";\nimport {\n    AfterContentInit,\n    AfterViewChecked,\n    ChangeDetectorRef,\n    Component,\n    ComponentFactoryResolver,\n    ContentChildren,\n    DoCheck,\n    ElementRef,\n    EventEmitter,\n    Input,\n    OnDestroy,\n    OnInit,\n    Output,\n    QueryList,\n    ViewChild,\n    ViewChildren,\n    ViewContainerRef,\n} from \"@angular/core\";\nimport find from \"lodash/find\";\nimport findIndex from \"lodash/findIndex\";\nimport isUndefined from \"lodash/isUndefined\";\nimport { BehaviorSubject } from \"rxjs\";\n\nimport { IBusyConfig, IEvent, LoggerService } from \"@nova-ui/bits\";\n\nimport { DashwizStepComponent } from \"../dashwiz-step/dashwiz-step.component\";\nimport {\n    IDashwizButtonsComponent,\n    IDashwizStepComponent,\n    IDashwizStepNavigatedEvent,\n    IDashwizWaitEvent,\n} from \"../types\";\nimport { DashwizButtonsComponent } from \"./dashwiz-buttons.component\";\nimport { DashwizService } from \"./dashwiz.service\";\nimport { IDashwizComponent } from \"./model\";\n\n/**\n * Component that provides wizard functionality.\n */\n@Component({\n    selector: \"nui-dashwiz\",\n    templateUrl: \"./dashwiz.component.html\",\n    styleUrls: [\"./dashwiz.component.less\"],\n    host: { class: \"flex-grow-1 overflow-auto\" },\n    standalone: false,\n})\nexport class DashwizComponent\n    implements OnInit,\n        AfterContentInit,\n        AfterViewChecked,\n        OnDestroy,\n        DoCheck,\n        IDashwizComponent\n{\n    private static placeholderFinishText = \"Action\"; // as a placeholder \"Action\" does not need to be i18n\n\n    @ContentChildren(DashwizStepComponent)\n    steps: QueryList<DashwizStepComponent>;\n    @ViewChildren(\"stepTitle\") stepTitles: QueryList<ElementRef>;\n    @ViewChild(\"container\", { read: ViewContainerRef }) dynamicStep: any;\n\n    /**\n     * Set to true to hide the wizard header including the step breadcrumbs.\n     * (default: false)\n     */\n    @Input() public hideHeader = false;\n    /**\n     * Set to true to show the \"Next\" button at any point during the wizard process.\n     * (default: false)\n     */\n    @Input() public canProceed = false;\n    /**\n     * Set to true to show the \"Finish\" button at any point during the wizard process.\n     * (default: false)\n     */\n    @Input() public canFinish = false;\n    /**\n     * Overrides the default text on the finish step button.\n     * (default: 'Action')\n     */\n    @Input() public finishText = DashwizComponent.placeholderFinishText;\n    /**\n     * Use this to stretch lines between step labels according to largest label width.\n     * (default: false)\n     */\n    @Input() public stretchStepLines: boolean = false;\n    /**\n     * Optional components to use for the buttons for each step\n     */\n    @Input() public buttonComponentTypes: string[];\n    /**\n     * Evaluated when a step is selected.\n     */\n    @Output() public stepNavigated =\n        new EventEmitter<IDashwizStepNavigatedEvent>();\n    /**\n     * Evaluated when the user attempts to cancel the wizard.\n     */\n    @Output() public cancel = new EventEmitter<boolean>();\n    /**\n     * Evaluated when the user completes the wizard.\n     */\n    @Output() public finish = new EventEmitter();\n    /**\n     * Emits when next button is clicked.\n     */\n    @Output() public next = new EventEmitter();\n    /**\n     * Emits when Back button is clicked.\n     */\n    @Output() public back = new EventEmitter();\n    /**\n     * Use this BehaviorSubject to control navigability between steps\n     */\n    @Input() public navigationControl: BehaviorSubject<IDashwizWaitEvent> =\n        new BehaviorSubject<IDashwizWaitEvent>({\n            busyState: { busy: false },\n            allowStepChange: true,\n        });\n\n    public currentStep: DashwizStepComponent;\n    public stepLineWidth: number = 65;\n    public stepIndex: number;\n    public buttonProperties: IDashwizButtonsComponent;\n    public scrolled = false;\n\n    private stepNavigatedEvent: IDashwizStepNavigatedEvent;\n    private previousStepIndex = 0;\n    private futureStep?: DashwizStepComponent;\n\n    private arraySteps: any[];\n\n    constructor(\n        private changeDetector: ChangeDetectorRef,\n        private componentFactoryResolver: ComponentFactoryResolver,\n        private logger: LoggerService,\n        private dashwizService: DashwizService,\n        private scrollDispatcher: ScrollDispatcher\n    ) {\n        if (dashwizService) {\n            dashwizService.component = this;\n        }\n    }\n\n    public ngOnInit(): void {\n        this.scrollDispatcher.scrolled().subscribe((event) => {\n            const element = event?.getElementRef()?.nativeElement;\n\n            if (element?.classList?.contains(\"configurator-scrollable\")) {\n                this.scrolled = !!element?.scrollTop;\n            }\n        });\n\n        this.buttonComponentTypes = this.buttonComponentTypes || [\n            DashwizButtonsComponent.lateLoadKey,\n        ];\n\n        if (this.finishText === DashwizComponent.placeholderFinishText) {\n            this.logger\n                .warn(`DashwizComponent input \"finishText\" is using placeholder text\n\"${DashwizComponent.placeholderFinishText}\". A value should be specified.`);\n        }\n    }\n\n    public ngDoCheck(): void {\n        if (this.currentStep) {\n            this.buttonProperties = {\n                busy: this.currentStep.busyConfig.busy,\n                canProceed: this.canProceed,\n                canFinish: this.canFinish,\n                isLastStepActive: this.steps.last.active,\n                isFirstStepActive: this.steps.first.active,\n                nextText: this.currentStep.nextText,\n                finishText: this.finishText,\n            };\n        }\n    }\n\n    public ngAfterContentInit(): void {\n        const activeTabs = this.steps.filter((item) => item.active);\n        this.arraySteps = this.steps.toArray();\n        if (activeTabs.length === 0) {\n            this.currentStep = this.steps.first;\n            this.selectStep(this.currentStep);\n            this.changeDetector.detectChanges();\n        }\n\n        this.steps.toArray().forEach((step: DashwizStepComponent) => {\n            step.valid.subscribe((event: any) => {\n                if (!isUndefined(event)) {\n                    this.handleStepControl(step);\n                }\n            });\n        });\n\n        this.navigationControl.subscribe(\n            (value: { busyState: IBusyConfig; allowStepChange: any }) => {\n                this.currentStep.busyConfig = value.busyState;\n                if (\n                    value.allowStepChange &&\n                    !isUndefined(this.futureStep) &&\n                    this.currentStep !== this.futureStep\n                ) {\n                    this.enterAnotherStep();\n                    this.futureStep = undefined;\n                }\n            }\n        );\n    }\n\n    public ngAfterViewChecked(): void {\n        if (this.stretchStepLines) {\n            this.stepLineWidth = Math.round(this.getLargestLabelWidth() / 2);\n            this.changeDetector.detectChanges();\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.steps\n            .toArray()\n            .forEach((step: DashwizStepComponent) => step.valid.unsubscribe());\n        this.navigationControl.unsubscribe();\n        this.dashwizService.component = undefined;\n    }\n\n    public addStepDynamic(\n        wizardStep: IDashwizStepComponent,\n        indexToInsert: number\n    ): void {\n        const componentFactory =\n            this.componentFactoryResolver.resolveComponentFactory(\n                DashwizStepComponent\n            );\n        const componentRef = this.dynamicStep.createComponent(componentFactory);\n        const instance: IDashwizStepComponent = componentRef.instance;\n        instance.stepTemplate = wizardStep.stepTemplate;\n        this.arraySteps.splice(indexToInsert, 0, componentRef.instance);\n        this.steps.reset(this.arraySteps);\n        return componentRef.instance;\n    }\n\n    public disableStep(step: DashwizStepComponent): void {\n        const indexOfStep = this.arraySteps.indexOf(step);\n        const toDisable = this.arraySteps[indexOfStep];\n        toDisable.disabled = true;\n        this.changeDetector.detectChanges();\n    }\n\n    public enableStep(step: DashwizStepComponent): void {\n        const indexOfStep = this.arraySteps.indexOf(step);\n        const toDisable = this.arraySteps[indexOfStep];\n        toDisable.disabled = false;\n        this.changeDetector.detectChanges();\n    }\n\n    public hideStep(step: DashwizStepComponent): void {\n        const indexOfStep = this.arraySteps.indexOf(step);\n        const toHide = this.arraySteps[indexOfStep];\n        toHide.hidden = true;\n    }\n\n    public showStep(step: DashwizStepComponent): void {\n        const indexOfStep = this.arraySteps.indexOf(step);\n        const visibleStep = this.arraySteps[indexOfStep];\n        visibleStep.hidden = false;\n    }\n\n    public goToStep(stepIndex: number): void {\n        this.selectStep(this.arraySteps[stepIndex]);\n    }\n\n    public selectStep(step: DashwizStepComponent): void {\n        if (!step.disabled) {\n            this.futureStep = step;\n            this.currentStep.exitStep({\n                currentStepIndex: this.arraySteps.indexOf(this.futureStep),\n                currentStep: this.futureStep,\n                previousStep: this.arraySteps[this.stepIndex],\n                previousStepIndex: this.stepIndex,\n            });\n            if (this.navigationControl.value.allowStepChange) {\n                this.enterAnotherStep();\n            }\n        }\n    }\n\n    public onBack = (): void => {\n        if (!isUndefined(this.stepIndex)) {\n            let previousStep = this.arraySteps[this.stepIndex - 1];\n            if (previousStep.hidden || previousStep.disabled) {\n                previousStep = find(\n                    this.arraySteps.slice(0).reverse(),\n                    (step) => !step.hidden,\n                    findIndex(\n                        this.arraySteps.slice(0).reverse(),\n                        this.arraySteps[this.stepIndex]\n                    ) + 1\n                );\n            }\n            this.selectStep(previousStep);\n            this.back.emit();\n        }\n    };\n\n    public onNext = (): void => {\n        let nextStep = this.arraySteps[this.stepIndex + 1];\n        this.handleStepControl(this.currentStep);\n        this.currentStep.nextStep({\n            currentStepIndex: this.stepIndex,\n            currentStep: this.currentStep,\n            previousStep: this.currentStep,\n            previousStepIndex: this.stepIndex,\n        });\n        if (\n            nextStep.hidden ||\n            (nextStep.disabled && !isUndefined(nextStep.stepControl))\n        ) {\n            // this disabled does not let user to go forward when next is disabled. Needs to be changed after validation\n            nextStep = find(\n                this.arraySteps,\n                (step) => !step.hidden,\n                this.stepIndex + 1\n            );\n        }\n        if (\n            isUndefined(this.currentStep.stepControl) ||\n            this.currentStep.stepControl\n        ) {\n            this.currentStep.complete = true;\n        }\n        if (nextStep.disabled && !nextStep.visited) {\n            this.currentStep.complete = false;\n        }\n        this.selectStep(nextStep);\n        this.next.emit();\n    };\n\n    public onFinish = (): void => {\n        this.finish.emit();\n    };\n\n    public onCancel = (): void => {\n        this.cancel.emit(\n            this.steps.toArray().filter((step) => step.complete).length !== 0\n        );\n    };\n\n    // eslint-disable-next-line @typescript-eslint/member-ordering\n    public buttonPortalActionMap: Record<string, Function> = {\n        cancel: this.onCancel,\n        next: this.onNext,\n        back: this.onBack,\n        finish: this.onFinish,\n    };\n\n    public enterAnotherStep(): void {\n        this.currentStep.applyExitingStep();\n        this.futureStep?.enterStep();\n\n        if (this.futureStep) {\n            this.currentStep = this.futureStep;\n        }\n\n        this.currentStep.applyEnteringStep();\n        this.stepIndex = this.arraySteps.indexOf(this.currentStep);\n        this.stepNavigatedEvent = {\n            currentStepIndex: this.stepIndex,\n            currentStep: this.currentStep,\n            previousStep: this.arraySteps[this.previousStepIndex],\n            previousStepIndex: this.previousStepIndex,\n        };\n        this.stepNavigated.emit(this.stepNavigatedEvent);\n        this.previousStepIndex = this.stepIndex;\n    }\n\n    public onButtonPortalOutput(event: IEvent): void {\n        // @ts-ignore\n        this.buttonPortalActionMap[event.id]?.();\n    }\n\n    private disableFollowingSteps(): void {\n        this.arraySteps.slice(this.stepIndex + 1).map((item) => {\n            item.disabled = true;\n        });\n    }\n\n    private enableFollowingSteps(): void {\n        this.arraySteps.slice(this.stepIndex + 1).map((item) => {\n            item.disabled = false;\n        });\n    }\n\n    private handleStepControl(step: DashwizStepComponent) {\n        if (!isUndefined(step.stepControl)) {\n            if (step.stepControl) {\n                this.enableFollowingSteps();\n            } else {\n                this.disableFollowingSteps();\n            }\n        }\n    }\n\n    private getLargestLabelWidth() {\n        const widths = this.stepTitles.map(\n            (title) => title.nativeElement.offsetWidth\n        );\n\n        return Math.round(Math.max(...widths));\n    }\n}\n","<div class=\"nui-dashwiz d-flex flex-column h-100\">\n    <div\n        class=\"nui-dashwiz__header\"\n        *ngIf=\"!hideHeader\"\n        [class.nui-dashwiz__header--lines-stretched]=\"stretchStepLines\"\n    >\n        <ul class=\"nui-dashwiz__header-steps\" *ngIf=\"steps\">\n            <li\n                *ngFor=\"let step of steps; let first = first; let last = last\"\n                (click)=\"selectStep(step)\"\n                [ngClass]=\"{\n                    'nui-dashwiz__header-step--first': first,\n                    'nui-dashwiz__header-step--last': last,\n                    'nui-dashwiz__header-step--visited': step.visited,\n                    'nui-dashwiz__header-step--disabled':\n                        step.disabled ||\n                        !step.visited ||\n                        currentStep.busyConfig.busy,\n                    'nui-dashwiz__header-step--active': step.active,\n                    'nui-dashwiz__header-step--complete': step.complete\n                }\"\n                class=\"nui-dashwiz__header-step\"\n            >\n                <div\n                    class=\"nui-dashwiz__header-step-container\"\n                    *ngIf=\"!step.hidden\"\n                >\n                    <div class=\"nui-dashwiz__header-step-row\">\n                        <div class=\"nui-dashwiz__header-step-col\">\n                            <div class=\"nui-dashwiz__header-step-content\">\n                                <span class=\"nui-dashwiz__header-step-link\">\n                                    <span\n                                        class=\"nui-dashwiz__header-step-title\"\n                                        #stepTitle\n                                    >\n                                        {{ step.title }}\n                                    </span>\n                                    <div\n                                        class=\"nui-dashwiz__header-step-link-container\"\n                                    >\n                                        <div\n                                            class=\"nui-dashwiz__header-step-col nui-dashwiz__header-step-col-right\"\n                                        >\n                                            <div\n                                                class=\"nui-dashwiz__header-step-line\"\n                                                [ngStyle]=\"{\n                                                    'min-width.px':\n                                                        stepLineWidth\n                                                }\"\n                                            ></div>\n                                        </div>\n                                        <nui-icon\n                                            [icon]=\"step.icon\"\n                                            [iconColor]=\"step.iconColor\"\n                                        ></nui-icon>\n                                        <div\n                                            class=\"nui-dashwiz__header-step-col nui-dashwiz__header-step-col-left\"\n                                        >\n                                            <div\n                                                class=\"nui-dashwiz__header-step-line\"\n                                                [ngStyle]=\"{\n                                                    'min-width.px':\n                                                        stepLineWidth\n                                                }\"\n                                            ></div>\n                                        </div>\n                                    </div>\n                                </span>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </li>\n        </ul>\n    </div>\n\n    <div class=\"flex-grow-1 overflow-auto\">\n        <ng-content></ng-content>\n        <ng-template #container></ng-template>\n    </div>\n\n    <div\n        class=\"nui-dashwiz__footer\"\n        [class.shadow]=\"scrolled\"\n    >\n        <ng-container\n            nuiComponentPortal\n            componentId=\"dashwizButtons\"\n            [componentType]=\"\n                buttonComponentTypes.length === 1\n                    ? buttonComponentTypes[0]\n                    : buttonComponentTypes[stepIndex]\n            \"\n            [properties]=\"buttonProperties\"\n            [outputs]=\"['cancel', 'next', 'back', 'finish']\"\n            (output)=\"onButtonPortalOutput($event)\"\n            #componentPortal=\"nuiComponentPortal\"\n        >\n            <ng-template\n                [cdkPortalOutlet]=\"componentPortal.portal\"\n                (attached)=\"componentPortal.attached($event)\"\n            ></ng-template>\n        </ng-container>\n    </div>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { CdkScrollable, ScrollDispatcher } from \"@angular/cdk/overlay\";\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    Input,\n    OnDestroy,\n    OnInit,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup } from \"@angular/forms\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport { BehaviorSubject, Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { IWidget } from \"../../../components/widget/types\";\nimport { WidgetTypesService } from \"../../../services/widget-types.service\";\nimport {\n    IHasChangeDetector,\n    IPizzagna,\n    IPizzagnaLayer,\n    PizzagnaLayer,\n} from \"../../../types\";\nimport { PreviewService } from \"../../services/preview.service\";\nimport { ConfiguratorComponent } from \"../configurator/configurator.component\";\nimport { IDashwizStepNavigatedEvent, IDashwizWaitEvent } from \"../wizard/types\";\n\n@Component({\n    selector: \"nui-widget-cloner\",\n    templateUrl: \"./widget-cloner.component.html\",\n    styleUrls: [\"./widget-cloner.component.less\"],\n    host: { class: \"d-flex flex-column h-100\" },\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class WidgetClonerComponent\n    implements OnInit, OnDestroy, AfterViewInit, IHasChangeDetector\n{\n    public static lateLoadKey = \"WidgetClonerComponent\";\n\n    @Input() formPizzagna?: IPizzagna;\n    @Input() cloneSelectionComponentType: Function;\n\n    public form: FormGroup;\n    public widgetTemplate: IWidget;\n    public navigationControl: BehaviorSubject<IDashwizWaitEvent> =\n        new BehaviorSubject<IDashwizWaitEvent>({\n            busyState: { busy: false },\n            allowStepChange: true,\n        });\n    public busy = false;\n    public scrolled = false;\n    public isFormDisplayed = false;\n    private readonly destroy$ = new Subject<void>();\n    private resetForm$ = new Subject<void>();\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        public configurator: ConfiguratorComponent,\n        private previewService: PreviewService,\n        private formBuilder: FormBuilder,\n        private widgetTypesService: WidgetTypesService,\n        private scrollDispatcher: ScrollDispatcher\n    ) {\n        this.resetForm();\n    }\n\n    public ngOnInit(): void {\n        this.previewService.previewChanged\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((pizzagna: IPizzagnaLayer) => {\n                this.onPreviewPizzagnaUpdate(pizzagna);\n            });\n\n        this.configurator.submitError\n            .pipe(takeUntil(this.destroy$))\n            .subscribe(() => {\n                this.toggleBusy();\n            });\n    }\n\n    public ngAfterViewInit(): void {\n        // trigger dashwiz to update its button configuration\n        this.changeDetector.markForCheck();\n\n        // Scroll shadows\n        this.scrollDispatcher\n            .scrolled()\n            .subscribe((event: CdkScrollable | void) => {\n                const element = event?.getElementRef()?.nativeElement;\n\n                if (element?.classList?.contains(\"configurator-scrollable\")) {\n                    this.scrolled = !!element?.scrollTop;\n                    this.changeDetector.detectChanges();\n                }\n            });\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n        this.resetForm$.complete();\n    }\n\n    // --------------------------------------------------------------------------------\n\n    public onPreviewPizzagnaUpdate(configLayer: IPizzagnaLayer): void {\n        if (!this.isFormDisplayed) {\n            return;\n        }\n\n        const previewWidget = {\n            ...this.configurator.previewWidget,\n            pizzagna: {\n                ...this.configurator.previewWidget?.pizzagna,\n                [PizzagnaLayer.Configuration]: configLayer,\n            },\n        };\n        // TODO: Make previewWidget to be assignable to IWidget\n        // @ts-ignore: Type '{ pizzagna: { configuration: IPizzagnaLayer; }; }' is missing the following properties from type 'IWidget': id, type\n        this.configurator.updateWidget(previewWidget);\n    }\n\n    public canFinish(): boolean {\n        return (\n            !!this.widgetTemplate?.pizzagna?.configuration &&\n            !this.widgetTemplate?.metadata?.needsConfiguration\n        );\n    }\n\n    public onFinish(): void {\n        if (this.form.invalid) {\n            this.form.markAllAsTouched();\n            // is used to trigger valueChanges to detect changes in forms\n            // as form is invalid and marking as touched doesn't trigger neither statusChanges nor valueChanges\n            // and validation messages and styles are not applied in that cases\n            this.form.patchValue(this.form.value);\n            this.form.updateValueAndValidity({ onlySelf: false });\n            return;\n        }\n\n        this.toggleBusy();\n        this.configurator.formSubmit();\n    }\n\n    public onCancel(): void {\n        this.configurator.formCancel();\n    }\n\n    public onStepNavigated(event: IDashwizStepNavigatedEvent): void {\n        this.isFormDisplayed = event.currentStepIndex === 1;\n\n        if (event.currentStepIndex === 0 && event.previousStepIndex === 1) {\n            this.formPizzagna = undefined;\n            this.resetForm();\n            this.onSelect(this.widgetTemplate);\n        } else if (event.currentStepIndex === 1) {\n            this.formPizzagna = this.widgetTypesService.getWidgetType(\n                this.widgetTemplate.type,\n                this.widgetTemplate.version\n            ).configurator;\n            this.previewService.preview =\n                this.widgetTemplate.pizzagna[PizzagnaLayer.Configuration];\n        }\n    }\n\n    public onSelect(widget: IWidget): void {\n        this.widgetTemplate = widget;\n        const previewWidget = {\n            ...widget,\n            id: this.configurator.previewWidget?.id || null,\n        };\n\n        // clear out the old widget first because we want to recreate the widget from scratch\n        this.configurator.updateWidget(null);\n\n        // the new widget is assigned in a setTimeout to apply the change in the next change detection cycle\n        setTimeout(() => {\n            // @ts-ignore: Type 'null' is not assignable to type 'string' on id property\n            this.configurator.updateWidget(cloneDeep(previewWidget));\n            this.changeDetector.detectChanges();\n        });\n    }\n\n    private toggleBusy() {\n        this.busy = !this.busy;\n        this.navigationControl.next({\n            busyState: { busy: this.busy },\n            allowStepChange: !this.busy,\n        });\n    }\n\n    private resetForm() {\n        this.resetForm$.next();\n        this.form = this.formBuilder.group({});\n        this.form.statusChanges\n            .pipe(takeUntil(this.resetForm$), takeUntil(this.destroy$))\n            .subscribe(() => {\n                this.changeDetector.markForCheck();\n            });\n    }\n}\n","<nui-configurator-heading\n    configuratorTitle=\"Creating Widget\"\n    i18n-configuratorTitle\n    class=\"header\"\n    (close)=\"onCancel()\"\n    [disableCloseButton]=\"busy\"\n    [class.shadow]=\"scrolled\"\n></nui-configurator-heading>\n<nui-dashwiz\n    [hideHeader]=\"true\"\n    [canProceed]=\"!!widgetTemplate\"\n    [canFinish]=\"canFinish()\"\n    finishText=\"Create Widget\"\n    i18n-finishText\n    [navigationControl]=\"navigationControl\"\n    (finish)=\"onFinish()\"\n    (cancel)=\"onCancel()\"\n    (stepNavigated)=\"onStepNavigated($event)\"\n>\n    <nui-dashwiz-step [stepTemplate]=\"step1\" nextText=\"Customize\" i18n-nextText>\n    </nui-dashwiz-step>\n    <nui-dashwiz-step [stepTemplate]=\"step2\"></nui-dashwiz-step>\n</nui-dashwiz>\n\n<ng-template #step1>\n    <div class=\"p-4 h-100\">\n        <ng-container\n            nuiComponentPortal\n            [componentType]=\"cloneSelectionComponentType\"\n            [outputs]=\"['widgetSelected']\"\n            (output)=\"onSelect($event.payload)\"\n            #componentPortal=\"nuiComponentPortal\"\n        >\n            <ng-template\n                [cdkPortalOutlet]=\"componentPortal.portal\"\n                (attached)=\"componentPortal.attached($event)\"\n            ></ng-template>\n        </ng-container>\n    </div>\n</ng-template>\n\n<ng-template #step2>\n    <div [formGroup]=\"form\">\n        <nui-pizzagna\n            #formPizzagnaComponent\n            [(pizzagna)]=\"formPizzagna\"\n        ></nui-pizzagna>\n    </div>\n</ng-template>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\nimport { Subscription } from \"rxjs\";\nimport { take } from \"rxjs/operators\";\n\nimport { WidgetEditorAccordionComponent } from \"../widget-editor-accordion/widget-editor-accordion.component\";\n\ninterface AccordionCoordinatorState {\n    instance: WidgetEditorAccordionComponent;\n    openSubscription: Subscription;\n    destroySubscription: Subscription;\n}\n\n@Injectable()\nexport class WidgetConfiguratorSectionCoordinatorService {\n    private accordions: Array<AccordionCoordinatorState> = [];\n\n    public registerAccordion(accordion: WidgetEditorAccordionComponent): void {\n        this.accordions.push({\n            instance: accordion,\n            openSubscription: accordion.openSubject.subscribe(() => {\n                this.closeAllAccordions();\n                accordion.open = true;\n            }),\n            destroySubscription: accordion.destroySubject\n                .pipe(take(1))\n                .subscribe(() => {\n                    this.removeAccordion(accordion);\n                }),\n        });\n    }\n\n    private closeAllAccordions() {\n        this.accordions.forEach((state) => {\n            state.instance.closeAccordion();\n        });\n    }\n\n    private removeAccordion(instanceToRemove: WidgetEditorAccordionComponent) {\n        const stateToRemoveIndex = this.accordions.findIndex(\n            (state) => state.instance === instanceToRemove\n        );\n        this.accordions[stateToRemoveIndex].openSubscription.unsubscribe();\n        this.accordions.splice(stateToRemoveIndex, 1);\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnDestroy,\n    OnInit,\n    Output,\n    TemplateRef,\n    ViewEncapsulation,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup } from \"@angular/forms\";\n\nimport { IEvent, LoggerService } from \"@nova-ui/bits\";\n\nimport { BaseLayout } from \"../../../components/layouts/base-layout\";\nimport { PizzagnaService } from \"../../../pizzagna/services/pizzagna.service\";\nimport { IHasForm } from \"../../../types\";\n\n@Component({\n    selector: \"nui-widget-configurator-section\",\n    templateUrl: \"./widget-configurator-section.component.html\",\n    styleUrls: [\"./widget-configurator-section.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: { class: \"nui-widget-configurator-section\" },\n    standalone: false,\n})\nexport class WidgetConfiguratorSectionComponent\n    extends BaseLayout\n    implements OnInit, OnDestroy, IHasForm\n{\n    public static lateLoadKey = \"WidgetConfiguratorSectionComponent\";\n\n    @Input() headerTextTemplate: TemplateRef<any>;\n    @Input() headerButtonsTemplate: TemplateRef<any>;\n\n    @Input() nodes: string[] = [];\n    @Input() headerText: string = \"\";\n\n    @Output() formReady = new EventEmitter<FormGroup>();\n    @Output() formDestroy = new EventEmitter<FormGroup>();\n\n    public form: FormGroup;\n\n    constructor(\n        changeDetector: ChangeDetectorRef,\n        pizzagnaService: PizzagnaService,\n        logger: LoggerService,\n        private formBuilder: FormBuilder\n    ) {\n        super(changeDetector, pizzagnaService, logger);\n    }\n\n    public getNodes(): string[] {\n        return this.nodes;\n    }\n\n    public ngOnInit(): void {\n        this.form = this.formBuilder.group({});\n    }\n\n    public onEvent(componentId: string, event: IEvent): void {\n        if (event.id === \"formReady\") {\n            this.addFormGroup(componentId, event.payload);\n        }\n        if (Object.keys(this.form.controls).length === this.getNodes().length) {\n            this.formReady.emit(this.form);\n        }\n    }\n\n    public addFormGroup(name: string, formGroup: FormGroup): void {\n        this.form.addControl(name, formGroup);\n    }\n\n    public ngOnDestroy(): void {\n        this.formDestroy.emit(this.form);\n\n        // Invoke super.ngOnDestroy to ensure that any base class observables are unsubscribed.\n        super.ngOnDestroy();\n    }\n}\n","<div class=\"widget-configurator-section\">\n    <div\n        class=\"widget-configurator-section__header d-flex justify-content-between align-items-center\"\n    >\n        <ng-container *ngTemplateOutlet=\"headerTextTemplate\"></ng-container>\n        <ng-container *ngTemplateOutlet=\"headerButtonsTemplate\"></ng-container>\n\n        <!-- TODO: REMOVE THOSE AFTER ALL WIDGETS ARE USING nui-items-dynamic -->\n        <div\n            headerText\n            *ngIf=\"headerText\"\n            class=\"widget-configurator-section__header-text\"\n            [title]=\"headerText\"\n        >\n            {{ headerText }}\n        </div>\n        <ng-content select=\"[headerText]\"></ng-content>\n        <ng-content select=\"[headerButtons]\"></ng-content>\n    </div>\n    <ng-container *ngFor=\"let node of nodeConfigs; trackBy: trackByFn\">\n        <ng-container\n            nuiComponentPortal\n            #componentPortal=\"nuiComponentPortal\"\n            [componentId]=\"node.id\"\n            [componentType]=\"node.componentType\"\n            [providers]=\"node.providers\"\n            [properties]=\"node.properties\"\n            [outputs]=\"['formReady']\"\n            (output)=\"onEvent(node.id, $event)\"\n        >\n            <ng-template\n                [cdkPortalOutlet]=\"componentPortal.portal\"\n                (attached)=\"componentPortal.attached($event)\"\n            ></ng-template>\n        </ng-container>\n    </ng-container>\n    <ng-content></ng-content>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    Input,\n    OnDestroy,\n    OnInit,\n    ViewChild,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup } from \"@angular/forms\";\nimport get from \"lodash/get\";\nimport { BehaviorSubject, Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { IEvent } from \"@nova-ui/bits\";\n\nimport { PizzagnaComponent } from \"../../../pizzagna/components/pizzagna/pizzagna.component\";\nimport { IPreviewEventPayload, PREVIEW_EVENT } from \"../../../services/types\";\nimport {\n    IHasChangeDetector,\n    IPizzagna,\n    IPizzagnaLayer,\n    PizzagnaLayer,\n} from \"../../../types\";\nimport { PreviewService } from \"../../services/preview.service\";\nimport { ConfiguratorComponent } from \"../configurator/configurator.component\";\nimport { IDashwizWaitEvent } from \"../wizard/types\";\n\n@Component({\n    selector: \"nui-widget-editor\",\n    templateUrl: \"./widget-editor.component.html\",\n    host: { class: \"d-flex flex-column h-100\" },\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class WidgetEditorComponent\n    implements OnInit, OnDestroy, IHasChangeDetector\n{\n    public static lateLoadKey = \"WidgetEditorComponent\";\n    public static readonly TITLE_PATH = \"header.properties.title\";\n\n    @Input() formPizzagna: IPizzagna;\n    @Input() formRoot: string;\n\n    private _formPizzagnaComponent: PizzagnaComponent;\n\n    @ViewChild(\"formPizzagnaComponent\", { static: false })\n    public set formPizzagnaComponent(value: PizzagnaComponent) {\n        value?.eventBus\n            ?.getStream(PREVIEW_EVENT)\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((event: IEvent<IPreviewEventPayload>) => {\n                const payload = event.payload;\n                if (payload && payload.id) {\n                    this.configurator?.previewPizzagnaComponent?.eventBus\n                        ?.getStream(payload.id)\n                        .next(payload.payload);\n                }\n            });\n        this._formPizzagnaComponent = value;\n    }\n\n    public form: FormGroup;\n    public navigationControl: BehaviorSubject<IDashwizWaitEvent> =\n        new BehaviorSubject<IDashwizWaitEvent>({\n            busyState: { busy: false },\n            allowStepChange: true,\n        });\n    public busy = false;\n    public configuratorTitle: string;\n\n    private readonly destroy$ = new Subject<void>();\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        private formBuilder: FormBuilder,\n        private previewService: PreviewService,\n        public configurator: ConfiguratorComponent\n    ) {\n        this.form = this.formBuilder.group({});\n    }\n\n    public ngOnInit(): void {\n        // TODO: Reconsider this\n        // @ts-ignore: We can depend on preview being undefined somewhere\n        this.previewService.preview =\n            this.configurator.previewWidget?.pizzagna[\n                PizzagnaLayer.Configuration\n            ];\n\n        this.previewService.previewChanged\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((pizzagna: IPizzagnaLayer) => {\n                this.onPreviewPizzagnaUpdate(pizzagna);\n                this.changeDetector.detectChanges();\n            });\n\n        this.configurator.submitError\n            .pipe(takeUntil(this.destroy$))\n            .subscribe(() => {\n                this.toggleBusy();\n            });\n        this.changeDetector.detectChanges();\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    // --------------------------------------------------------------------------------\n\n    public onPreviewPizzagnaUpdate(configLayer: IPizzagnaLayer): void {\n        const previewWidget = {\n            ...this.configurator.previewWidget,\n            pizzagna: {\n                ...this.configurator.previewWidget?.pizzagna,\n                [PizzagnaLayer.Configuration]: configLayer,\n            },\n        };\n        // TODO: Make previewWidget to be assignable to IWidget\n        // @ts-ignore: Type '{ pizzagna: { configuration: IPizzagnaLayer; }; }' is missing the following properties from type 'IWidget': id, type\n        this.configurator.updateWidget(previewWidget);\n        const widgetTitle = get(\n            configLayer,\n            WidgetEditorComponent.TITLE_PATH,\n            \"\"\n        );\n        this.configuratorTitle = $localize`Editing ${widgetTitle}`;\n    }\n\n    public onFinish(): void {\n        if (this.form.invalid) {\n            this.form.markAllAsTouched();\n            // is used to trigger valueChanges to detect changes in forms\n            // as form is invalid and marking as touched doesn't trigger neither statusChanges nor valueChanges\n            // and validation messages and styles are not applied in that cases\n            this.form.patchValue(this.form.value);\n            this.form.updateValueAndValidity({\n                onlySelf: false,\n                emitEvent: true,\n            });\n            return;\n        }\n\n        this.toggleBusy();\n        this.configurator.formSubmit();\n    }\n\n    public onCancel(): void {\n        this.configurator.formCancel();\n    }\n\n    private toggleBusy() {\n        this.busy = !this.busy;\n        this.navigationControl.next({\n            busyState: { busy: this.busy },\n            allowStepChange: !this.busy,\n        });\n    }\n}\n","<nui-configurator-heading\n    [configuratorTitle]=\"configuratorTitle\"\n    (close)=\"onCancel()\"\n    [disableCloseButton]=\"busy\"\n></nui-configurator-heading>\n<nui-dashwiz\n    [hideHeader]=\"true\"\n    finishText=\"Save Changes\"\n    i18n-finishText\n    [navigationControl]=\"navigationControl\"\n    (finish)=\"onFinish()\"\n    (cancel)=\"onCancel()\"\n>\n    <nui-dashwiz-step [stepTemplate]=\"step1\"></nui-dashwiz-step>\n</nui-dashwiz>\n\n<ng-template #step1>\n    <div [formGroup]=\"form\">\n        <nui-pizzagna\n            *ngIf=\"formPizzagna\"\n            #formPizzagnaComponent\n            [rootNode]=\"formRoot\"\n            [(pizzagna)]=\"formPizzagna\"\n        >\n        </nui-pizzagna>\n    </div>\n</ng-template>\n","import { Component, Input } from \"@angular/core\";\n\n@Component({\n    selector: \"nui-widget-editor-accordion-header\",\n    templateUrl: \"./widget-editor-accordion-header.component.html\",\n    styleUrls: [],\n    standalone: false,\n})\nexport class WidgetEditorAccordionHeaderComponent {\n    @Input() public headerIcon?: string;\n    @Input() public iconColor?: string;\n    @Input() public subtitle: string = \"\";\n    @Input() public headerTitle: string = \"\";\n}\n","<!-- This component can be used instead of specifying a custom template with accordionHeader attribute -->\n<!-- You can use it the same way (without accordionHeader attribute), it will get automatically assigned to the header of the accordion -->\n<div class=\"d-flex align-items-center px-4 py-2\">\n    <nui-icon\n        class=\"align-self-start pt-2\"\n        *ngIf=\"headerIcon\"\n        [icon]=\"headerIcon\"\n        [iconColor]=\"iconColor\"\n    ></nui-icon>\n    <div class=\"d-flex flex-column ml-4 pt-1\">\n        <span class=\"nui-text-label\" i18n>\n            {{ headerTitle }}\n        </span>\n        <div class=\"nui-text-secondary\" [title]=\"subtitle\">\n            {{ subtitle }}\n        </div>\n    </div>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnDestroy,\n    OnInit,\n    Output,\n    ViewEncapsulation,\n} from \"@angular/core\";\nimport { Subject } from \"rxjs\";\n\nimport { AccordionState } from \"../../../types\";\nimport { WidgetConfiguratorSectionCoordinatorService } from \"../widget-configurator-section/widget-configurator-section-coordinator.service\";\n\n/** @ignore */\n@Component({\n    selector: \"nui-widget-editor-accordion\",\n    templateUrl: \"./widget-editor-accordion.component.html\",\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: [\"./widget-editor-accordion.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class WidgetEditorAccordionComponent implements OnInit, OnDestroy {\n    @Input() public showOpenStateIcon: boolean = true;\n\n    @Input() public state: AccordionState = AccordionState.DEFAULT;\n\n    @Output() public openToggle = new EventEmitter<boolean>();\n\n    public open = false;\n    public openSubject = new Subject<void>();\n    public destroySubject = new Subject<void>();\n\n    constructor(\n        private accordionCoordinator: WidgetConfiguratorSectionCoordinatorService,\n        public cd: ChangeDetectorRef\n    ) {}\n\n    public ngOnInit(): void {\n        this.accordionCoordinator.registerAccordion(this);\n    }\n\n    public openChange(isOpened: boolean): void {\n        this.openToggle.emit(isOpened);\n        if (isOpened) {\n            this.openSubject.next();\n        } else {\n            this.closeAccordion();\n        }\n    }\n\n    public closeAccordion(): void {\n        this.cd.markForCheck();\n        this.open = false;\n    }\n\n    public ngOnDestroy(): void {\n        this.destroySubject.next();\n        this.destroySubject.complete();\n    }\n}\n","<div class=\"nui-widget-editor-accordion\">\n    <nui-expander [open]=\"open\" (openChange)=\"openChange($event)\">\n        <div\n            nuiExpanderHeader\n            class=\"d-flex align-items-start\"\n            [class.error-state]=\"state === 'critical'\"\n            [class.warning-state]=\"state === 'warning'\"\n        >\n            <ng-content\n                select=\"[accordionHeader], nui-widget-editor-accordion-header\"\n            ></ng-content>\n            <nui-icon\n                *ngIf=\"showOpenStateIcon\"\n                class=\"nui-widget-editor-accordion__edit-icon\"\n                [icon]=\"open ? 'triangle-down' : 'triangle-left'\"\n            ></nui-icon>\n        </div>\n        <ng-content></ng-content>\n    </nui-expander>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport zipObject from \"lodash/zipObject\";\n\nimport {\n    CHART_PALETTE_CS3,\n    CHART_PALETTE_CS_S_EXTENDED,\n} from \"@nova-ui/charts\";\n\nexport const CHART_PALETTE_CS3_ALTERNATIVE_NAMES = [\n    $localize`Blue`,\n    $localize`Blue Light`,\n    $localize`Blue Dark`,\n    $localize`Pink`,\n    $localize`Pink Light`,\n    $localize`Pink Dark`,\n    $localize`Sea Green`,\n    $localize`Sea Green Light`,\n    $localize`Sea Green Dark`,\n    $localize`Violet`,\n    $localize`Violet Light`,\n    $localize`Violet Dark`,\n    $localize`Lime Green`,\n    $localize`Lime Green Light`,\n    $localize`Lime Green Dark`,\n    $localize`Orange`,\n    $localize`Orange Light`,\n    $localize`Orange Dark`,\n    $localize`Ultramarine`,\n    $localize`Ultramarine Light`,\n    $localize`Ultramarine Dark`,\n    $localize`Bordeaux`,\n    $localize`Bordeaux Light`,\n    $localize`Bordeaux Dark`,\n    $localize`Ochroid`,\n    $localize`Ochroid Light`,\n    $localize`Ochroid Dark`,\n    $localize`Anthracite`,\n    $localize`Anthracite Light`,\n    $localize`Anthracite Dark`,\n];\n\nexport const CHART_PALETTE_CS_S_EXTENDED_ALTERNATIVE_NAMES = [\n    $localize`Down`,\n    $localize`Down Light`,\n    $localize`Critical`,\n    $localize`Critical Light`,\n    $localize`Warning`,\n    $localize`Warning Light`,\n    $localize`Unknown`,\n    $localize`Unknown Light`,\n    $localize`Ok`,\n    $localize`Ok Light`,\n    $localize`Info`,\n    $localize`Info Light`,\n    $localize`Disabled`,\n    $localize`Not Applicable`,\n];\n\nexport const chartPaletteColorMap: Record<string, string> = zipObject(\n    [...CHART_PALETTE_CS3, ...CHART_PALETTE_CS_S_EXTENDED],\n    [\n        ...CHART_PALETTE_CS3_ALTERNATIVE_NAMES,\n        ...CHART_PALETTE_CS_S_EXTENDED_ALTERNATIVE_NAMES,\n    ]\n);\n\nexport const DEFAULT_KPI_TILE_COLOR = \"var(--nui-color-bg-secondary)\";\nexport const DEFAULT_KPI_BACKGROUND_COLORS = [\n    ...CHART_PALETTE_CS3,\n    ...CHART_PALETTE_CS_S_EXTENDED,\n].map((color) => ({\n    color,\n    label: chartPaletteColorMap[color],\n}));\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { AbstractControl, FormArray, FormGroup } from \"@angular/forms\";\n\n/**\n * Checks whether given form has a field that should be visually marked as invalid.\n * Form is not in an error state if it's untouched even if it's invalid at that moment,\n * a user must first interact with the form before it can be considered as invalid.\n * 'invalid' form property should not be used for the purpose of this function,\n * it can be affected by its children form statuses, which can be considered as valid (untouched).\n *\n * @param parent\n */\nexport function hasControlInErrorState(parent: AbstractControl): boolean {\n    // FormGroup/FormArray/FormControl is not in an error state if it's either valid or untouched\n    if (parent.valid || parent.untouched) {\n        return false;\n    }\n\n    // FormGroup is considred valid if every child form is either valid or untouched\n    if (parent instanceof FormGroup) {\n        for (const key of Object.keys(parent.controls)) {\n            const control = parent.controls[key];\n\n            if (hasControlInErrorState(control)) {\n                return true;\n            }\n        }\n    }\n\n    // FormArray is considred valid if every child form is either valid or untouched\n    if (parent instanceof FormArray) {\n        for (let i = 0; i < parent.length; i++) {\n            const control = parent.at(i);\n\n            if (hasControlInErrorState(control)) {\n                return true;\n            }\n        }\n    }\n\n    // Errors property contains only errors related to the currecnt form and it's not affected by any child forms\n    return (parent.touched || parent.dirty) && !!parent.errors;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Pipe, PipeTransform } from \"@angular/core\";\nimport { AbstractControl, FormGroup } from \"@angular/forms\";\n// eslint-disable-next-line import/no-deprecated\nimport { combineLatest, Observable } from \"rxjs\";\n// eslint-disable-next-line import/no-deprecated\nimport { distinct, map, startWith } from \"rxjs/operators\";\n\nimport { AccordionState } from \"../../types\";\nimport { hasControlInErrorState } from \"../functions/has-control-in-error-state\";\n\n@Pipe({\n    name: \"nuiWidgetEditorAccordionFormState\",\n    pure: false,\n    standalone: false,\n})\nexport class WidgetEditorAccordionFormStatePipe implements PipeTransform {\n    public transform(\n        form: FormGroup | AbstractControl | null\n    ): Observable<AccordionState> {\n        if (!form) {\n            throw new Error(\"Provided form is undefined\");\n        }\n\n        // eslint-disable-next-line import/no-deprecated\n        return combineLatest([form.statusChanges, form.valueChanges]).pipe(\n            // eslint-disable-next-line import/no-deprecated\n            startWith(null),\n            map(() =>\n                hasControlInErrorState(form)\n                    ? AccordionState.CRITICAL\n                    : AccordionState.DEFAULT\n            ),\n            distinct()\n        );\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Pipe, PipeTransform } from \"@angular/core\";\nimport { AbstractControl, FormGroup } from \"@angular/forms\";\n// eslint-disable-next-line import/no-deprecated\nimport { combineLatest, Observable } from \"rxjs\";\n// eslint-disable-next-line import/no-deprecated\nimport { map, startWith } from \"rxjs/operators\";\n\nimport { hasControlInErrorState } from \"../functions/has-control-in-error-state\";\n\n@Pipe({\n    name: \"nuiFormHeaderIconPipe\",\n    pure: false,\n    standalone: false,\n})\nexport class FormHeaderIconPipePipe implements PipeTransform {\n    public static readonly ERROR_ICON_DEFAULT = \"status_critical\";\n\n    transform(\n        form: FormGroup | AbstractControl | null,\n        defaultIcon: string,\n        errorIcon: string = FormHeaderIconPipePipe.ERROR_ICON_DEFAULT\n    ): Observable<string | null> {\n        if (!form) {\n            throw new Error(\"Provided form is undefined\");\n        }\n        // eslint-disable-next-line import/no-deprecated\n        return combineLatest([form.statusChanges, form.valueChanges]).pipe(\n            // eslint-disable-next-line import/no-deprecated\n            startWith(null),\n            map(() => (hasControlInErrorState(form) ? errorIcon : defaultIcon))\n        );\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { CdkDragDrop, CdkDragStart } from \"@angular/cdk/drag-drop\";\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { FormArray, FormBuilder, FormGroup, Validators } from \"@angular/forms\";\nimport isArray from \"lodash/isArray\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil, tap } from \"rxjs/operators\";\n\nimport { IKpiColorRules } from \"../../../../../components/providers/types\";\nimport { DEFAULT_KPI_TILE_COLOR } from \"../../../../../constants/default-palette\";\nimport { KpiColorComparatorsRegistryService } from \"../../../../../services/kpi-color-comparators-registry.service\";\nimport {\n    ComparatorTypes,\n    IComparatorsDict,\n    IHasChangeDetector,\n    IHasForm,\n    IPaletteColor,\n} from \"../../../../../types\";\n\nconst DEFAULT_LABEL = \"Custom Comparator\";\n\n@Component({\n    selector: \"nui-background-color-rules-configuration\",\n    templateUrl: \"./background-color-rules-configuration.component.html\",\n    styleUrls: [\"./background-color-rules-configuration.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class BackgroundColorRulesConfigurationComponent\n    implements IHasChangeDetector, IHasForm, OnChanges, OnInit, OnDestroy\n{\n    public static lateLoadKey = \"BackgroundColorRulesConfigurationComponent\";\n\n    @Input() rules: IKpiColorRules[];\n    @Input() backgroundColors: IPaletteColor[];\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    public form: FormGroup;\n    public formLocal: FormGroup;\n    public availableComparators: IComparatorsDict;\n    public palette: Partial<IPaletteColor[]>;\n    public height: number;\n\n    private readonly destroy$ = new Subject<void>();\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        private formBuilder: FormBuilder,\n        comparatorsRegistry: KpiColorComparatorsRegistryService\n    ) {\n        this.availableComparators = comparatorsRegistry.getComparators();\n    }\n\n    public ngOnInit(): void {\n        this.palette = [\n            { color: DEFAULT_KPI_TILE_COLOR, label: $localize`Default color` },\n        ].concat(this.backgroundColors);\n\n        this.formLocal = this.initDefaultRulesGroup();\n        this.form = this.formBuilder.group({\n            rules: [[]],\n        });\n\n        this.formLocal\n            .get(\"rules\")\n            ?.value.valueChanges.pipe(\n                tap((value: IKpiColorRules[]) =>\n                    this.form.get(\"rules\")?.patchValue([...value])\n                ),\n                takeUntil(this.destroy$)\n            )\n            .subscribe();\n\n        this.formReady.emit(this.form);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.rules) {\n            (this.formLocal?.get(\"rules\")?.value as FormArray).setValue([]);\n\n            if (this.rules && isArray(this.rules)) {\n                this.rules.forEach((rule) => {\n                    (this.formLocal.get(\"rules\")?.value as FormArray).push(\n                        this.formBuilder.group({\n                            comparisonType: [\n                                rule.comparisonType,\n                                [Validators.required],\n                            ],\n                            value: [rule.value, [Validators.required]],\n                            color: [rule.color],\n                        })\n                    );\n                });\n            }\n        }\n    }\n\n    public getColorRulesSubtitle(): string {\n        return (this.formLocal?.get(\"rules\")?.value as FormArray).controls\n            .length === 0\n            ? $localize`No color rules`\n            : $localize`${\n                  (this.formLocal?.get(\"rules\")?.value as FormArray).controls\n                      .length\n              } color rules`;\n    }\n\n    public getLabel(item: ComparatorTypes | string): string {\n        return this.availableComparators[item]?.label || DEFAULT_LABEL;\n    }\n\n    public removeRule(controlIndex: number): void {\n        (this.formLocal?.get(\"rules\")?.value as FormArray).removeAt(\n            controlIndex\n        );\n    }\n\n    public addRule(): void {\n        (this.formLocal?.get(\"rules\")?.value as FormArray).push(\n            this.formBuilder.group({\n                comparisonType: [\">\", [Validators.required]],\n                value: [0, [Validators.required]],\n                color: [DEFAULT_KPI_TILE_COLOR],\n            })\n        );\n    }\n\n    public drop(event: CdkDragDrop<string[]>): void {\n        this.move(event.currentIndex, event.previousIndex);\n    }\n\n    public cdkDragStarted(event: CdkDragStart): void {\n        this.height = event.source.element.nativeElement.offsetHeight;\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    private initDefaultRulesGroup() {\n        return this.formBuilder.group({\n            rules: [this.formBuilder.array([], Validators.required)],\n        });\n    }\n\n    private move(currentIndex: number, previousIndex: number): void {\n        const rules = this.formLocal?.get(\"rules\")?.value as FormArray;\n        const dir = currentIndex > previousIndex ? 1 : -1;\n        if (!rules) {\n            return;\n        }\n\n        const temp = rules.at(previousIndex);\n\n        for (let i = previousIndex; i * dir < currentIndex * dir; i = i + dir) {\n            const current = rules.at(i + dir);\n            rules.setControl(i, current);\n        }\n        rules.setControl(currentIndex, temp);\n    }\n}\n","<nui-widget-editor-accordion\n    [formGroup]=\"formLocal\"\n    [state]=\"formLocal | nuiWidgetEditorAccordionFormState | async\"\n>\n    <nui-widget-editor-accordion-header\n        [headerIcon]=\"formLocal | nuiFormHeaderIconPipe : 'color' | async\"\n        [subtitle]=\"getColorRulesSubtitle()\"\n        headerTitle=\"Background color rules\"\n    />\n    <div class=\"kpi-color-rules-configuration__accordion-content\">\n        <div class=\"mb-4\">\n            <p class=\"mb-3\">\n                We can automatically change the background color when the value\n                meets certain conditions.\n            </p>\n            <div cdkDropList (cdkDropListDropped)=\"drop($event)\">\n                <ng-container\n                    *ngFor=\"\n                        let rule of formLocal.get('rules')?.value.controls;\n                        index as i\n                    \"\n                >\n                    <div\n                        class=\"kpi-color-rule d-flex pt-3\"\n                        [formGroup]=\"rule\"\n                        cdkDrag\n                        (cdkDragStarted)=\"cdkDragStarted($event)\"\n                    >\n                        <div\n                            class=\"kpi-color-rule__control justify-content-center d-flex\"\n                        >\n                            <nui-icon\n                                icon=\"drag\"\n                                class=\"kpi-color-rule__drag align-items-center\"\n                                cdkDragHandle\n                            ></nui-icon>\n                        </div>\n                        <div class=\"d-flex flex-grow-1 flex-wrap\">\n                            <nui-form-field\n                                class=\"mr-3 mb-3 flex-grow-1\"\n                                [control]=\"rule.get('comparisonType')\"\n                            >\n                                <nui-select-v2\n                                    placeholder=\"Select Item\"\n                                    i18n-placeholder\n                                    style=\"min-width: 220px\"\n                                    [formControl]=\"rule.get('comparisonType')\"\n                                >\n                                    <nui-select-v2-option\n                                        *ngFor=\"\n                                            let item of availableComparators\n                                                | keyvalue\n                                        \"\n                                        [value]=\"item.key\"\n                                    >\n                                        {{ getLabel(item.key) }}\n                                    </nui-select-v2-option>\n                                </nui-select-v2>\n                            </nui-form-field>\n\n                            <nui-form-field\n                                class=\"mr-3 mb-3\"\n                                [control]=\"rule.get('value')\"\n                                style=\"max-width: 100px\"\n                            >\n                                <nui-textbox\n                                    formControlName=\"value\"\n                                ></nui-textbox>\n                            </nui-form-field>\n\n                            <nui-form-field\n                                class=\"mr-3 mb-3\"\n                                [control]=\"rule.get('color')\"\n                            >\n                                <nui-color-picker\n                                    formControlName=\"color\"\n                                    [colorPalette]=\"palette\"\n                                ></nui-color-picker>\n                            </nui-form-field>\n                        </div>\n                        <button\n                            nui-button\n                            icon=\"delete\"\n                            displayStyle=\"action\"\n                            type=\"button\"\n                            class=\"kpi-color-rule__control\"\n                            (click)=\"removeRule(i)\"\n                        ></button>\n                        <nui-drop-area\n                            *cdkDragPlaceholder\n                            [style.height.px]=\"height\"\n                        ></nui-drop-area>\n                    </div>\n                </ng-container>\n            </div>\n            <button\n                nui-button\n                icon=\"add\"\n                displayStyle=\"action\"\n                type=\"button\"\n                (click)=\"addRule()\"\n                i18n\n            >\n                Add new rule\n            </button>\n        </div>\n    </div>\n</nui-widget-editor-accordion>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnDestroy,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport isUndefined from \"lodash/isUndefined\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { IDataSource } from \"@nova-ui/bits\";\n\nimport { IDataSourceError } from \"../../../../../components/providers/types\";\n\n@Component({\n    selector: \"nui-data-source-error\",\n    templateUrl: \"./data-source-error.component.html\",\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class DataSourceErrorComponent implements OnDestroy, OnChanges {\n    public static lateLoadKey = \"DataSourceErrorComponent\";\n\n    @Input() public dataSource: IDataSource;\n    @Output() public errorState = new EventEmitter<boolean>();\n\n    public dataSourceError: IDataSourceError | null;\n    public busy: boolean;\n    public onDestroy$: Subject<void> = new Subject<void>();\n    public data: any;\n\n    private dataSourceClear$: Subject<void> = new Subject<void>();\n\n    constructor(public changeDetector: ChangeDetectorRef) {}\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.dataSource) {\n            this.onDataSourceChanged();\n        }\n    }\n\n    public onDataSourceChanged(): void {\n        this.dataSourceClear$.next();\n\n        this.dataSource?.busy\n            ?.pipe(takeUntil(this.dataSourceClear$))\n            .subscribe((isBusy: boolean) => {\n                this.busy = isBusy;\n                this.changeDetector.markForCheck();\n            });\n\n        this.dataSource?.outputsSubject\n            .pipe(takeUntil(this.dataSourceClear$))\n            .subscribe((value) => {\n                this.data = isUndefined(value?.result) ? value : value?.result;\n                this.dataSourceError = value?.error;\n                this.errorState.emit(!!this.dataSourceError);\n                this.changeDetector.markForCheck();\n            });\n    }\n\n    public ngOnDestroy(): void {\n        this.onDestroy$.next();\n        this.onDestroy$.complete();\n        this.dataSourceClear$.next();\n        this.dataSourceClear$.complete();\n    }\n}\n","<div>\n    <nui-message\n        class=\"mt-4 d-block\"\n        *ngIf=\"!dataSource\"\n        type=\"info\"\n        [allowDismiss]=\"false\"\n    >\n        <b i18n>Select a data source</b>\n    </nui-message>\n    <nui-message\n        class=\"mt-4 d-block\"\n        *ngIf=\"dataSourceError\"\n        type=\"critical\"\n        [allowDismiss]=\"false\"\n    >\n        <b i18n>Something went wrong with the data source: </b>\n        {{ dataSourceError.message || dataSourceError.type }}\n    </nui-message>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Inject,\n    Injector,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\nimport { Subject } from \"rxjs\";\nimport { take } from \"rxjs/operators\";\n\nimport { EventBus, IDataSource, IEvent, LoggerService } from \"@nova-ui/bits\";\n\nimport { IDataSourceOutput } from \"../../../../../components/providers/types\";\nimport { ProviderRegistryService } from \"../../../../../services/provider-registry.service\";\nimport {\n    IHasChangeDetector,\n    IHasForm,\n    IProperties,\n    PIZZAGNA_EVENT_BUS,\n} from \"../../../../../types\";\nimport { ConfiguratorHeadingService } from \"../../../../services/configurator-heading.service\";\nimport {\n    DATA_SOURCE_CHANGE,\n    DATA_SOURCE_CREATED,\n    DATA_SOURCE_OUTPUT,\n} from \"../../../../types\";\nimport { DataSourceErrorComponent } from \"../data-source-error/data-source-error.component\";\n\n/**\n * This is a basic implementation of a data source configuration component. In the real world scenario, this component will most likely be replaced by a\n * custom one, but still can be used as a template for developing a custom specific solution.\n */\n@Component({\n    selector: \"nui-data-source-configuration\",\n    templateUrl: \"./data-source-configuration.component.html\",\n    styleUrls: [\"./data-source-configuration.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class DataSourceConfigurationComponent\n    implements IHasChangeDetector, IHasForm, OnInit, OnChanges\n{\n    public static lateLoadKey = \"DataSourceConfigurationComponent\";\n\n    /**\n     * This component shows a dropdown with options for selecting a data source, this input represents these options.\n     */\n    @Input() dataSourceProviders: string[] = [];\n    @Input() errorComponent: string = DataSourceErrorComponent.lateLoadKey;\n\n    @Input() properties: IProperties;\n    @Input() providerId: string;\n\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    public form: FormGroup;\n    public hasDataSourceError: boolean = false;\n    public dataSource: IDataSource;\n\n    // used by the Broadcaster\n    public dsOutput = new Subject<any>();\n    public dataFieldIds = new Subject<any>();\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        public configuratorHeading: ConfiguratorHeadingService,\n        private formBuilder: FormBuilder,\n        private providerRegistryService: ProviderRegistryService,\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>,\n        private injector: Injector,\n        private logger: LoggerService\n    ) {}\n\n    public ngOnInit(): void {\n        this.form = this.formBuilder.group({\n            providerId: [this.providerId || \"\", [Validators.required]],\n            properties: this.formBuilder.group(this.properties || {}),\n        });\n        this.form.setValidators([\n            () => (this.hasDataSourceError ? { dataSourceError: true } : null),\n        ]);\n\n        this.formReady.emit(this.form);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.providerId && !changes.providerId.isFirstChange()) {\n            const previousValue: string = changes.providerId.previousValue;\n            if (previousValue !== this.providerId) {\n                this.form.get(\"providerId\")?.setValue(this.providerId);\n                this.invokeDataSource(this.providerId);\n            }\n        }\n    }\n\n    public onDataSourceChange(providerId: string): void {\n        this.eventBus.next(DATA_SOURCE_CHANGE, {});\n        this.invokeDataSource(providerId);\n    }\n\n    /**\n     * The data source is invoked here to notify the rest of the form about  changes in the data source output.\n     * DATA_SOURCE_OUTPUT event is emitted through the event bus carrying the data source result as the payload.\n     * This might not be necessary in every situation. If the important information is already stored in the\n     * data source properties, this step can be omitted.\n     *\n     * @param providerId\n     */\n    public invokeDataSource(providerId: string): void {\n        if (!providerId) {\n            return;\n        }\n        const provider = this.providerRegistryService.getProvider(providerId);\n        if (provider) {\n            this.dataSource = this.providerRegistryService.getProviderInstance(\n                provider,\n                this.injector\n            );\n            this.eventBus.next(DATA_SOURCE_CREATED, {\n                payload: this.dataSource,\n            });\n            this.dataSource.outputsSubject\n                .pipe(take(1))\n                .subscribe((result: any | IDataSourceOutput<any>) => {\n                    this.eventBus.next(DATA_SOURCE_OUTPUT, { payload: result });\n                    this.dsOutput.next(result);\n                    const dataFieldIdsResult = result?.result || result;\n                    if (dataFieldIdsResult) {\n                        this.dataFieldIds.next(Object.keys(dataFieldIdsResult));\n                    }\n                });\n            // This setTimeout is because the output of the data source might come faster than the data-source-error-component is initiated\n            setTimeout(() => {\n                this.dataSource.applyFilters();\n            });\n        } else {\n            this.logger.warn(\"No provider found for id:\", providerId);\n        }\n    }\n\n    public onErrorState(isError: boolean): void {\n        this.hasDataSourceError = isError;\n        this.form.markAsTouched({ onlySelf: true });\n        this.form.updateValueAndValidity({ emitEvent: false });\n        this.changeDetector.detectChanges();\n    }\n}\n","<nui-widget-editor-accordion\n    [formGroup]=\"form\"\n    [state]=\"form | nuiWidgetEditorAccordionFormState | async\"\n>\n    <nui-widget-editor-accordion-header\n        [headerIcon]=\"form | nuiFormHeaderIconPipe : 'database' | async\"\n        [subtitle]=\"form.get('providerId')?.value\"\n        headerTitle=\"Data Source\"\n    />\n    <div class=\"datasource-configuration__accordion-content\">\n        <nui-form-field\n            caption=\"Select Data Source\"\n            i18n-caption\n            [control]=\"form.get('providerId')\"\n        >\n            <nui-select-v2\n                placeholder=\"Data Sources\"\n                i18n-placeholder\n                [title]=\"form.get('providerId')?.value\"\n                formControlName=\"providerId\"\n                [popupViewportMargin]=\"configuratorHeading.height$ | async\"\n                (valueSelected)=\"onDataSourceChange($event)\"\n                class=\"datasource-configuration__accordion-content__datasource-input\"\n            >\n                <nui-select-v2-option\n                    *ngFor=\"let dataSourceProvider of dataSourceProviders\"\n                    [title]=\"dataSourceProvider\"\n                    [value]=\"dataSourceProvider\"\n                >\n                    {{ dataSourceProvider }}\n                </nui-select-v2-option>\n            </nui-select-v2>\n        </nui-form-field>\n        <ng-container\n            nuiComponentPortal\n            [componentId]=\"errorComponent\"\n            [componentType]=\"errorComponent\"\n            [outputs]=\"['errorState']\"\n            [properties]=\"{ dataSource: dataSource }\"\n            (output)=\"onErrorState($event.payload)\"\n            #componentPortal=\"nuiComponentPortal\"\n        >\n            <ng-template\n                [cdkPortalOutlet]=\"componentPortal.portal\"\n                (attached)=\"componentPortal.attached($event)\"\n            >\n            </ng-template>\n        </ng-container>\n    </div>\n</nui-widget-editor-accordion>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Inject,\n    Injector,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\nimport isEqual from \"lodash/isEqual\";\nimport { Subject } from \"rxjs/internal/Subject\";\nimport { take } from \"rxjs/operators\";\n\nimport { EventBus, IDataSource, IEvent, LoggerService } from \"@nova-ui/bits\";\n\nimport { ProviderRegistryService } from \"../../../../../services/provider-registry.service\";\nimport {\n    IConfigurable,\n    IHasChangeDetector,\n    IHasForm,\n    IProperties,\n    IProviderConfiguration,\n    IProviderConfigurationForDisplay,\n    PIZZAGNA_EVENT_BUS,\n} from \"../../../../../types\";\nimport { ConfiguratorHeadingService } from \"../../../../services/configurator-heading.service\";\nimport {\n    DATA_SOURCE_CHANGE,\n    DATA_SOURCE_CREATED,\n    DATA_SOURCE_OUTPUT,\n} from \"../../../../types\";\nimport { DataSourceErrorComponent } from \"../data-source-error/data-source-error.component\";\n\n/**\n * This is a basic implementation of a data source configuration component. In the real world scenario, this component will most likely be replaced by a\n * custom one, but still can be used as a template for developing a custom specific solution.\n */\n@Component({\n    selector: \"nui-data-source-configuration\",\n    templateUrl: \"./data-source-configuration-v2.component.html\",\n    styleUrls: [\"./data-source-configuration-v2.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class DataSourceConfigurationV2Component\n    implements IHasChangeDetector, IHasForm, OnInit, OnChanges, AfterViewInit\n{\n    public static lateLoadKey = \"DataSourceConfigurationV2Component\";\n\n    /**\n     * This component shows a dropdown with options for selecting a data source, this input represents these options.\n     */\n    @Input() dataSourceProviders: IProviderConfigurationForDisplay[] = [];\n\n    @Input() properties: IProperties;\n    @Input() providerId: string;\n    @Input() errorComponent: string = DataSourceErrorComponent.lateLoadKey;\n\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    public form: FormGroup;\n    public hasDataSourceError: boolean = false;\n    public dataSource: IDataSource;\n\n    // used by the Broadcaster\n    public dataFieldIds = new Subject<any>();\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        public configuratorHeading: ConfiguratorHeadingService,\n        protected formBuilder: FormBuilder,\n        protected providerRegistryService: ProviderRegistryService,\n        @Inject(PIZZAGNA_EVENT_BUS) protected eventBus: EventBus<IEvent>,\n        protected injector: Injector,\n        protected logger: LoggerService\n    ) {}\n\n    public ngOnInit(): void {\n        this.form = this.formBuilder.group({\n            // Widget properties, form inputs and form values need to be in sync to work with generic converter\n            // which is why we have providerId and properties as a form group even if we don't explicitly use it in the file.\n            providerId: [this.providerId || \"\", [Validators.required]],\n            properties: [this.properties || {}],\n            dataSource: [null, [Validators.required]],\n        });\n        this.form.setValidators([\n            () => (this.hasDataSourceError ? { dataSourceError: true } : null),\n        ]);\n\n        this.form\n            .get(\"dataSource\")\n            ?.valueChanges.subscribe((selectedDataSource) => {\n                this.form\n                    .get(\"providerId\")\n                    ?.setValue(selectedDataSource?.providerId);\n                if (selectedDataSource?.properties) {\n                    this.form\n                        .get(\"properties\")\n                        ?.setValue(selectedDataSource?.properties);\n                }\n            });\n\n        this.formReady.emit(this.form);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (\n            (changes.providerId && !changes.providerId.isFirstChange()) ||\n            (changes.properties && !changes.properties.isFirstChange())\n        ) {\n            const previousProvider: string = changes.providerId?.previousValue;\n            const previousProperties: IProperties =\n                changes.properties?.previousValue;\n            if (\n                previousProvider !== this.providerId ||\n                previousProperties !== this.properties\n            ) {\n                const dataSource = this.dataSourceProviders.find(\n                    (provider) =>\n                        provider.providerId === this.providerId &&\n                        isEqual(\n                            provider.properties ?? {},\n                            this.properties ?? {}\n                        )\n                );\n                if (!dataSource) {\n                    this.form?.get(\"providerId\")?.setValue(this.providerId);\n                    this.form?.get(\"properties\")?.setValue(this.properties);\n                    this.invokeDataSource({\n                        properties: this.properties,\n                        providerId: this.providerId,\n                    });\n                } else {\n                    this.form?.get(\"dataSource\")?.setValue(dataSource);\n                    this.invokeDataSource(dataSource);\n                }\n            }\n        }\n        if (\n            changes.dataSourceProviders &&\n            !changes.dataSourceProviders.isFirstChange() &&\n            this.dataSourceProviders.length === 1\n        ) {\n            const dataSource = this.dataSourceProviders[0];\n            this.form.get(\"dataSource\")?.setValue(dataSource);\n            this.invokeDataSource(dataSource);\n        }\n    }\n\n    public ngAfterViewInit(): void {\n        if (this.dataSourceProviders && this.dataSourceProviders.length === 1) {\n            const dataSource = this.dataSourceProviders[0];\n            this.form.get(\"dataSource\")?.setValue(dataSource);\n            this.invokeDataSource(dataSource);\n        }\n    }\n\n    public onDataSourceSelected(\n        selectedDataSource: IProviderConfigurationForDisplay\n    ): void {\n        this.eventBus.next(DATA_SOURCE_CHANGE, {});\n        this.invokeDataSource(selectedDataSource);\n    }\n\n    /**\n     * The data source is invoked here to notify the rest of the form about  changes in the data source output.\n     * DATA_SOURCE_OUTPUT event is emitted through the event bus carrying the data source result as the payload.\n     * This might not be necessary in every situation. If the important information is already stored in the\n     * data source properties, this step can be omitted.\n     *\n     * @param data\n     */\n    public invokeDataSource(data: IProviderConfiguration): void {\n        if (!data.providerId) {\n            return;\n        }\n        const provider = this.providerRegistryService.getProvider(\n            data.providerId\n        );\n        if (provider) {\n            this.dataSource = this.providerRegistryService.getProviderInstance(\n                provider,\n                this.injector\n            );\n\n            this.eventBus.next(DATA_SOURCE_CREATED, {\n                payload: this.dataSource,\n            });\n\n            this.dataSource.outputsSubject\n                .pipe(take(1))\n                .subscribe((result: any) => {\n                    this.eventBus.next(DATA_SOURCE_OUTPUT, { payload: result });\n                    this.dataFieldIds.next(\n                        Object.keys(result.result || result)\n                    );\n                });\n\n            const configurableDataSource = this\n                .dataSource as unknown as IConfigurable;\n            if (configurableDataSource?.updateConfiguration) {\n                configurableDataSource.updateConfiguration(\n                    data.properties ?? {}\n                );\n            }\n            // This setTimeout is because the output of the data source might come faster than the data-source-error-component is initiated\n            setTimeout(() => {\n                this.dataSource.applyFilters();\n            });\n        } else {\n            this.logger.warn(\"No provider found for id:\", data.providerId);\n        }\n    }\n\n    public onErrorState(isError: boolean): void {\n        this.hasDataSourceError = isError;\n        this.form.markAsTouched({ onlySelf: true });\n        this.form.updateValueAndValidity({ emitEvent: false });\n        this.changeDetector.detectChanges();\n    }\n}\n","<nui-widget-editor-accordion\n    [formGroup]=\"form\"\n    [state]=\"form | nuiWidgetEditorAccordionFormState | async\"\n>\n    <nui-widget-editor-accordion-header\n        [headerIcon]=\"form | nuiFormHeaderIconPipe : 'database' | async\"\n        [subtitle]=\"form.get('dataSource')?.value?.label\"\n        headerTitle=\"Data Source\"\n    />\n    <div class=\"datasource-configuration__accordion-content\">\n        <nui-form-field [control]=\"form.get('dataSource')\">\n            <nui-select-v2\n                placeholder=\"Select data source\"\n                i18n-placeholder\n                [title]=\"form.get('dataSource')?.value?.label\"\n                [popupViewportMargin]=\"configuratorHeading.height$ | async\"\n                formControlName=\"dataSource\"\n                (valueSelected)=\"onDataSourceSelected($event)\"\n                class=\"datasource-configuration__accordion-content__datasource-input\"\n            >\n                <nui-select-v2-option\n                    *ngFor=\"let dataSourceProvider of dataSourceProviders\"\n                    [title]=\"dataSourceProvider?.label\"\n                    [value]=\"dataSourceProvider\"\n                >\n                    {{ dataSourceProvider.label }}\n                </nui-select-v2-option>\n            </nui-select-v2>\n        </nui-form-field>\n        <ng-container\n            nuiComponentPortal\n            [componentId]=\"errorComponent\"\n            [componentType]=\"errorComponent\"\n            [outputs]=\"['errorState']\"\n            [properties]=\"{ dataSource: dataSource }\"\n            (output)=\"onErrorState($event.payload)\"\n            #componentPortal=\"nuiComponentPortal\"\n        >\n            <ng-template\n                [cdkPortalOutlet]=\"componentPortal.portal\"\n                (attached)=\"componentPortal.attached($event)\"\n            >\n            </ng-template>\n        </ng-container>\n    </div>\n</nui-widget-editor-accordion>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    OnDestroy,\n} from \"@angular/core\";\n\nimport { DataSourceErrorComponent } from \"../data-source-error.component\";\n\n@Component({\n    selector: \"nui-table-data-source-error\",\n    templateUrl: \"./table-data-source-error.component.html\",\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class TableDataSourceErrorComponent\n    extends DataSourceErrorComponent\n    implements OnDestroy\n{\n    public static lateLoadKey = \"TableDataSourceErrorComponent\";\n\n    constructor(public changeDetector: ChangeDetectorRef) {\n        super(changeDetector);\n    }\n\n    public ngOnDestroy(): void {\n        super.ngOnDestroy();\n    }\n}\n","<div>\n    <nui-message\n        *ngIf=\"\n            dataSource && !data?.dataFields.length && !dataSourceError && !busy\n        \"\n        class=\"mt-4 d-block\"\n        type=\"info\"\n        [allowDismiss]=\"false\"\n    >\n        <b i18n>Data source needs to be configured</b>\n    </nui-message>\n    <nui-message\n        class=\"mt-4 d-block\"\n        *ngIf=\"!dataSource\"\n        type=\"info\"\n        [allowDismiss]=\"false\"\n    >\n        <b i18n>Select a data source</b>\n    </nui-message>\n    <nui-message\n        class=\"mt-4 d-block\"\n        *ngIf=\"dataSourceError\"\n        type=\"critical\"\n        [allowDismiss]=\"false\"\n    >\n        <b i18n>Something went wrong with the data source: </b>\n        {{ dataSourceError.message || dataSourceError.type }}\n    </nui-message>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { AbstractControl, FormBuilder, FormGroup } from \"@angular/forms\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport {\n    EmbeddedContentMode,\n    IInfoMessage,\n} from \"../../../../../components/types\";\nimport { IHasChangeDetector, IHasForm } from \"../../../../../types\";\n\n@Component({\n    selector: \"nui-embedded-content-configuration\",\n    templateUrl: \"./embedded-content-configuration.component.html\",\n    styleUrls: [\"./embedded-content-configuration.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class EmbeddedContentConfigurationComponent\n    implements OnInit, OnChanges, IHasChangeDetector, IHasForm, OnDestroy\n{\n    public static lateLoadKey = \"EmbeddedContentConfigurationComponent\";\n\n    @Input() mode = EmbeddedContentMode.URL;\n    @Input() messageComponent: IInfoMessage;\n    @Input() customEmbeddedContent: string;\n\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    private readonly destroy$ = new Subject<void>();\n\n    public form: FormGroup = this.formBuilder.group({\n        mode: [this.mode],\n        urlCustomContent: [\"\"],\n        htmlCustomContent: [\"\"],\n        customEmbeddedContent: [\"\"],\n    });\n\n    public modes = [\n        {\n            value: EmbeddedContentMode.URL,\n            displayValue: $localize`Show the contents of a specific URL`,\n        },\n        {\n            value: EmbeddedContentMode.HTML,\n            displayValue: $localize`Show the exact HTML I supply below`,\n        },\n    ];\n\n    get urlCustomContent(): AbstractControl | null {\n        return this.form.get(\"urlCustomContent\");\n    }\n\n    get htmlCustomContent(): AbstractControl | null {\n        return this.form.get(\"htmlCustomContent\");\n    }\n\n    get modeValue(): AbstractControl | null {\n        return this.form.get(\"mode\");\n    }\n\n    get customEmbeddedContentValue(): AbstractControl | null {\n        return this.form.get(\"customEmbeddedContent\");\n    }\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        private formBuilder: FormBuilder\n    ) {}\n\n    public ngOnInit(): void {\n        this.initializeForm();\n        this.formReady.emit(this.form);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.customEmbeddedContent) {\n            if (this.mode === EmbeddedContentMode.URL) {\n                this.urlCustomContent?.setValue(this.customEmbeddedContent);\n            } else if (this.mode === EmbeddedContentMode.HTML) {\n                this.htmlCustomContent?.setValue(this.customEmbeddedContent);\n            }\n        }\n\n        if (changes.mode) {\n            this.modeValue?.setValue(changes.mode.currentValue);\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    private initializeForm() {\n        this.modeValue?.valueChanges\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((value) => {\n                if (value === EmbeddedContentMode.URL) {\n                    this.customEmbeddedContentValue?.setValue(\n                        this.form.get(\"urlCustomContent\")?.value\n                    );\n                    this.htmlCustomContent?.disable();\n                    this.urlCustomContent?.enable();\n                } else if (value === EmbeddedContentMode.HTML) {\n                    this.customEmbeddedContentValue?.setValue(\n                        this.form.get(\"htmlCustomContent\")?.value\n                    );\n                    this.urlCustomContent?.disable();\n                    this.htmlCustomContent?.enable();\n                }\n            });\n\n        this.urlCustomContent?.valueChanges\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((value) => {\n                this.customEmbeddedContentValue?.setValue(value);\n            });\n\n        this.htmlCustomContent?.valueChanges\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((value) => {\n                this.customEmbeddedContentValue?.setValue(value);\n            });\n    }\n}\n","<nui-widget-editor-accordion\n    [formGroup]=\"form\"\n    [state]=\"form | nuiWidgetEditorAccordionFormState | async\"\n>\n    <div accordionHeader class=\"d-flex align-items-center pl-4 py-2\">\n        <nui-icon\n            class=\"align-self-start pt-2\"\n            [icon]=\"form | nuiFormHeaderIconPipe : 'tag' | async\"\n        ></nui-icon>\n        <div class=\"d-flex flex-column ml-4 pt1\">\n            <span class=\"nui-text-label\" i18n>Embedded Content</span>\n            <div class=\"nui-text-secondary\">\n                Show the specific HTML I supply\n            </div>\n        </div>\n    </div>\n    <div class=\"embedded-configurator-section__accordion-content\">\n        <ng-container\n            nuiComponentPortal\n            #componentPortal=\"nuiComponentPortal\"\n            [componentType]=\"messageComponent.componentType\"\n            [properties]=\"messageComponent.properties\"\n        >\n            <ng-template\n                [cdkPortalOutlet]=\"componentPortal.portal\"\n                (attached)=\"componentPortal.attached($event)\"\n            ></ng-template>\n        </ng-container>\n        <nui-form-field\n            [control]=\"form.get('mode')\"\n            caption=\"What do you want to show in the widget?\"\n            i18n-caption\n        >\n            <nui-radio-group\n                formControlName=\"mode\"\n                [(value)]=\"mode\"\n                name=\"mode\"\n                required\n            >\n                <nui-radio [value]=\"modes[0].value\">\n                    {{ modes[0].displayValue }}\n                </nui-radio>\n                <nui-form-field [control]=\"form.get('urlCustomContent')\">\n                    <nui-textbox formControlName=\"urlCustomContent\">\n                    </nui-textbox>\n                </nui-form-field>\n                <nui-radio [value]=\"modes[1].value\">\n                    {{ modes[1].displayValue }}\n                </nui-radio>\n                <nui-form-field [control]=\"form.get('htmlCustomContent')\">\n                    <nui-textbox\n                        class=\"textarea-scrollable\"\n                        formControlName=\"htmlCustomContent\"\n                        rows=\"7\"\n                    >\n                    </nui-textbox>\n                </nui-form-field>\n            </nui-radio-group>\n        </nui-form-field>\n    </div>\n</nui-widget-editor-accordion>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    Input,\n} from \"@angular/core\";\n\nimport { ILinkDefinition } from \"../../../../../components/types\";\nimport { IHasChangeDetector } from \"../../../../../types\";\n\n@Component({\n    selector: \"nui-info-message-configuration\",\n    templateUrl: \"./info-message-configuration.component.html\",\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class InfoMessageConfigurationComponent implements IHasChangeDetector {\n    public static lateLoadKey = \"InfoMessageConfigurationComponent\";\n\n    @Input() emphasizeText: string;\n    @Input() generalText: string;\n    @Input() link: ILinkDefinition;\n    @Input() allowDismiss: boolean;\n\n    constructor(public changeDetector: ChangeDetectorRef) {}\n}\n","<nui-message type=\"info\" [allowDismiss]=\"allowDismiss\" i18n>\n    <b> {{ emphasizeText }} </b> {{ generalText }}\n    <a *ngIf=\"link\" [href]=\"link.href\" [target]=\"link.target\">{{\n        link.text\n    }}</a>\n</nui-message>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\n// eslint-disable-next-line import/no-deprecated\nimport { combineLatest, Observable } from \"rxjs\";\n// eslint-disable-next-line import/no-deprecated\nimport { map, startWith } from \"rxjs/operators\";\n\nimport {\n    chartPaletteColorMap,\n    DEFAULT_KPI_TILE_COLOR,\n} from \"../../../../../constants/default-palette\";\nimport {\n    IHasChangeDetector,\n    IHasForm,\n    IPaletteColor,\n} from \"../../../../../types\";\n\n@Component({\n    selector: \"nui-kpi-description-configuration\",\n    templateUrl: \"./kpi-description-configuration.component.html\",\n    styleUrls: [\"./kpi-description-configuration.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class KpiDescriptionConfigurationComponent\n    implements OnInit, OnChanges, IHasChangeDetector, IHasForm\n{\n    public static lateLoadKey = \"KpiDescriptionConfigurationComponent\";\n    public defaultColor = {\n        label: $localize`Default color`,\n        color: DEFAULT_KPI_TILE_COLOR,\n    };\n\n    @Input() componentId: string;\n    @Input() configurableUnits: boolean;\n\n    @Input() label: string = \"\";\n    @Input() backgroundColor: string = this.defaultColor.color;\n    @Input() units: string = \"\";\n    @Input() backgroundColors: IPaletteColor[];\n\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    public form: FormGroup;\n    public subtitle$: Observable<string>;\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        private formBuilder: FormBuilder\n    ) {}\n\n    public ngOnInit(): void {\n        this.backgroundColors = [...this.backgroundColors];\n        this.backgroundColors.unshift(this.defaultColor);\n\n        this.form = this.formBuilder.group({\n            label: [this.label, [Validators.required]],\n            backgroundColor: [this.backgroundColor, [Validators.required]],\n        });\n\n        if (this.configurableUnits) {\n            this.form.addControl(\"units\", this.formBuilder.control(this.units));\n        }\n\n        const label = this.form.get(\"label\");\n        // eslint-disable-next-line import/no-deprecated\n        const labelValue = label?.valueChanges.pipe(startWith(label.value));\n\n        const backgroundColor = this.form.get(\"backgroundColor\");\n        const backgroundColorValue = backgroundColor?.valueChanges.pipe(\n            // eslint-disable-next-line import/no-deprecated\n            startWith(backgroundColor?.value)\n        );\n        // eslint-disable-next-line import/no-deprecated\n        this.subtitle$ = combineLatest([\n            labelValue?.pipe(map((t) => t || $localize`no label`)),\n            backgroundColorValue?.pipe(\n                map((t) => chartPaletteColorMap[t] || $localize`Default Color`)\n            ),\n        ]).pipe(map((labels) => labels.join(\", \")));\n\n        this.formReady.emit(this.form);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.label) {\n            this.form?.patchValue({ label: changes.label.currentValue });\n        }\n        if (changes.backgroundColor) {\n            this.form?.patchValue({\n                backgroundColor: changes.backgroundColor.currentValue,\n            });\n        }\n        if (changes.units) {\n            this.form?.patchValue({ units: changes.units.currentValue });\n        }\n    }\n}\n","<nui-widget-editor-accordion\n    [formGroup]=\"form\"\n    [state]=\"form | nuiWidgetEditorAccordionFormState | async\"\n>\n    <div accordionHeader class=\"d-flex align-items-center px-4 py-2\">\n        <nui-icon\n            class=\"align-self-start pt-2\"\n            [icon]=\"form | nuiFormHeaderIconPipe : 'widget_list' | async\"\n        ></nui-icon>\n        <div class=\"d-flex flex-column ml-4 pt-1\">\n            <span class=\"nui-text-label\" i18n>Description</span>\n            <div class=\"nui-text-secondary\" [title]=\"subtitle$ | async\">\n                {{ subtitle$ | async }}\n            </div>\n        </div>\n    </div>\n    <div class=\"kpi-description-configuration__accordion-content\">\n        <div class=\"mb-4\">\n            <nui-form-field\n                caption=\"Label\"\n                i18n-caption\n                [control]=\"form.get('label')\"\n                class=\"form-group\"\n            >\n                <nui-textbox\n                    formControlName=\"label\"\n                    placeholder=\"Set label\"\n                    i18n-placeholder\n                ></nui-textbox>\n            </nui-form-field>\n        </div>\n\n        <nui-form-field\n            caption=\"Background Color\"\n            i18n-caption\n            [control]=\"form.get('backgroundColor')\"\n            class=\"form-group\"\n        >\n            <nui-color-picker\n                class=\"kpi-description-configuration__accordion-content__color-picker\"\n                formControlName=\"backgroundColor\"\n                [colorPalette]=\"backgroundColors\"\n            >\n            </nui-color-picker>\n        </nui-form-field>\n\n        <div class=\"mt-4\" *ngIf=\"configurableUnits\">\n            <nui-form-field\n                caption=\"Units\"\n                i18n-caption\n                [control]=\"form.get('units')\"\n                class=\"form-group\"\n            >\n                <nui-textbox\n                    formControlName=\"units\"\n                    placeholder=\"Units\"\n                    i18n-placeholder\n                ></nui-textbox>\n            </nui-form-field>\n        </div>\n    </div>\n</nui-widget-editor-accordion>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport enum TimeUnit {\n    Second = \"second\",\n    Minute = \"minute\",\n    Hour = \"hour\",\n}\n\nexport const TIME_UNITS_TO_MS = {\n    [TimeUnit.Second]: 1000,\n    [TimeUnit.Minute]: 60000,\n    [TimeUnit.Hour]: 3600000,\n};\n\nexport const TIME_UNITS_LONG = {\n    [TimeUnit.Hour]: $localize`:hours unit (long):hours`,\n    [TimeUnit.Minute]: $localize`:minutes unit (long):minutes`,\n    [TimeUnit.Second]: $localize`:seconds unit (long):seconds`,\n};\n\nexport const TIME_UNITS_SHORT = {\n    [TimeUnit.Hour]: $localize`:hours unit (short):h`,\n    [TimeUnit.Minute]: $localize`:minutes unit (short):min`,\n    [TimeUnit.Second]: $localize`:seconds unit (short):sec`,\n};\n\nexport function getTimeUnitsRatio(\n    fromUnit: TimeUnit,\n    toUnit: TimeUnit\n): number {\n    return TIME_UNITS_TO_MS[fromUnit] / TIME_UNITS_TO_MS[toUnit];\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    forwardRef,\n    Input,\n    OnDestroy,\n    OnInit,\n} from \"@angular/core\";\nimport {\n    ControlValueAccessor,\n    FormBuilder,\n    FormControl,\n    FormGroup,\n    NG_VALIDATORS,\n    NG_VALUE_ACCESSOR,\n    ValidationErrors,\n    Validators,\n} from \"@angular/forms\";\nimport { noop, Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { getTimeUnitsRatio, TimeUnit, TIME_UNITS_LONG } from \"./time-units\";\nimport { NumberValidationParams } from \"./types\";\n\n/**\n * As per Wolfi, this is a candidate for reworking into a general time interval selector implemented as a Web Component\n */\n@Component({\n    selector: \"nui-refresh-rate-configurator\",\n    templateUrl: \"./refresh-rate-configurator.component.html\",\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => RefreshRateConfiguratorComponent),\n            multi: true,\n        },\n        {\n            provide: NG_VALIDATORS,\n            useExisting: forwardRef(() => RefreshRateConfiguratorComponent),\n            multi: true,\n        },\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class RefreshRateConfiguratorComponent\n    implements ControlValueAccessor, OnInit, OnDestroy\n{\n    @Input() minSeconds: number;\n    @Input() maxSeconds: number;\n\n    possibleUnits = [TimeUnit.Second, TimeUnit.Minute, TimeUnit.Hour];\n\n    unitItems: any[] = [];\n    displayedUnitItems: any[] = [];\n\n    form: FormGroup;\n    numberControl: FormControl;\n    unitControl: FormControl;\n    currentUnit: TimeUnit | null = null;\n\n    valueChangeFix = noop; // TODO this can be removed after NUI-3442 is fixed\n\n    private onChange: (value: number | null) => void;\n    private destroy$ = new Subject<void>();\n\n    constructor(private fb: FormBuilder, private cd: ChangeDetectorRef) {}\n\n    public ngOnInit(): void {\n        this.generateUnitItems();\n        this.filterUnitItems();\n        this.createForm();\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    getNumberMin(): number | undefined {\n        if (!this.unitControl.value || this.minSeconds == null) {\n            return undefined;\n        }\n\n        const ratio = getTimeUnitsRatio(\n            TimeUnit.Second,\n            this.unitControl.value.id\n        );\n        return Math.ceil(this.minSeconds * ratio);\n    }\n\n    getNumberMax(): number | undefined {\n        if (!this.unitControl.value || this.maxSeconds == null) {\n            return undefined;\n        }\n\n        const ratio = getTimeUnitsRatio(\n            TimeUnit.Second,\n            this.unitControl.value.id\n        );\n        return Math.floor(this.maxSeconds * ratio);\n    }\n\n    writeValue(seconds: number): void {\n        if (\n            isFinite(seconds) &&\n            this.isRangeValid() &&\n            this.unitControl.value\n        ) {\n            const ratio = getTimeUnitsRatio(\n                TimeUnit.Second,\n                this.unitControl.value.id\n            );\n            const num = seconds * ratio;\n\n            this.numberControl.setValue(num);\n        } else {\n            this.numberControl.setValue(null);\n        }\n        this.cd.markForCheck();\n    }\n\n    registerOnChange(fn: any): void {\n        this.onChange = fn;\n    }\n\n    registerOnTouched(fn: any): void {}\n\n    setDisabledState(isDisabled: boolean): void {\n        if (isDisabled) {\n            this.numberControl.disable({ emitEvent: false });\n            this.unitControl.disable({ emitEvent: false });\n        } else {\n            this.numberControl.enable({ emitEvent: false });\n            this.unitControl.enable({ emitEvent: false });\n        }\n        this.cd.markForCheck();\n    }\n\n    resetUnits(): void {\n        this.unitControl.setValue(this.displayedUnitItems[0]);\n    }\n\n    private generateUnitItems() {\n        this.possibleUnits.forEach((item, index) => {\n            this.unitItems[index] = {\n                id: item,\n                label: TIME_UNITS_LONG[item],\n            };\n        });\n    }\n\n    private filterUnitItems() {\n        this.displayedUnitItems = this.unitItems.filter((item) => {\n            let tooLarge = false;\n\n            if (this.maxSeconds != null) {\n                const ratio = getTimeUnitsRatio(TimeUnit.Second, item.id);\n                tooLarge = Math.floor(this.maxSeconds * ratio) <= 0;\n            }\n\n            return !tooLarge;\n        });\n    }\n\n    private createForm() {\n        this.form = this.fb.group({\n            number: [1, [Validators.required]],\n            unit: this.displayedUnitItems[0],\n        });\n\n        this.numberControl = this.form.get(\"number\") as FormControl;\n        this.unitControl = this.form.get(\"unit\") as FormControl;\n        if (this.unitControl.value) {\n            this.currentUnit = this.unitControl.value.id;\n        }\n\n        this.form.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.updateError();\n            this.emitValueChange();\n        });\n    }\n\n    private updateError() {\n        if (this.isNumberValid()) {\n            this.numberControl.setErrors(null);\n        } else {\n            this.numberControl.setErrors({ invalidNumber: true });\n        }\n    }\n\n    private emitValueChange() {\n        const num = this.numberControl.value;\n        const unit = this.unitControl.value;\n        if (num == null || unit == null) {\n            if (this.onChange) {\n                this.onChange(null);\n            }\n            return;\n        }\n\n        const ratio = getTimeUnitsRatio(unit.id, TimeUnit.Second);\n        const seconds = num * ratio;\n\n        if (this.onChange) {\n            this.onChange(seconds);\n        }\n    }\n\n    private isRangeValid(): boolean {\n        return this.minSeconds <= this.maxSeconds || this.maxSeconds == null;\n    }\n\n    public isNumberValid(): boolean {\n        const num = this.numberControl.value;\n        const unit = this.unitControl.value;\n\n        if (num < this.minSeconds) {\n            return false;\n        }\n        if (num % 1 !== 0) {\n            return false;\n        }\n        const ratio = getTimeUnitsRatio(unit.id, TimeUnit.Second);\n        const seconds = num * ratio;\n        if (seconds > this.maxSeconds) {\n            return false;\n        }\n\n        return this.isRangeValid();\n    }\n\n    public getNumberValidationMessage(): string {\n        const validationParams: NumberValidationParams = {\n            min: this.getNumberMin(),\n            max: this.getNumberMax(),\n            whole: true,\n        };\n        return this.getLocalizedNumberValidationMessage(validationParams);\n    }\n\n    public getLocalizedNumberValidationMessage(\n        params: NumberValidationParams\n    ): string {\n        const { min, max, whole } = params;\n        const numberTypeText = whole\n            ? $localize`a whole number`\n            : $localize`a number`;\n\n        if (min != null && max != null) {\n            if (min === max) {\n                return $localize`Must be ${numberTypeText} equal to ${min}`;\n            }\n            return $localize`Must be ${numberTypeText} between ${min} and ${max}`;\n        }\n        if (min == null && max != null) {\n            return $localize`Must be ${numberTypeText} not larger than ${max}`;\n        }\n        if (min != null && max == null) {\n            return $localize`Must be ${numberTypeText} not smaller than ${min}`;\n        }\n        return $localize`Must be ${numberTypeText}`;\n    }\n\n    public validate(): ValidationErrors | null {\n        // TODO: Check this, when number FormControl is undefined casting\n        //  it to null to avoid changing the signature\n        return this.form.get(\"number\")?.errors || null;\n    }\n}\n","<form [formGroup]=\"form\" class=\"d-flex flex-column\">\n    <div class=\"d-flex flex-row\">\n        <nui-textbox-number\n            formControlName=\"number\"\n            customBoxWidth=\"90px\"\n            [minValue]=\"minSeconds\"\n            [maxValue]=\"maxSeconds\"\n            (valueChange)=\"valueChangeFix()\"\n        ></nui-textbox-number>\n\n        <nui-select-v2 formControlName=\"unit\" class=\"ml-3\">\n            <nui-select-v2-option\n                *ngFor=\"let item of displayedUnitItems\"\n                [value]=\"item\"\n            >\n                {{ item.label }}\n            </nui-select-v2-option>\n        </nui-select-v2>\n    </div>\n    <nui-form-field [control]=\"form.get('number')\">\n        <nui-validation-message for=\"invalidNumber\">\n            {{ getNumberValidationMessage() }}\n        </nui-validation-message>\n    </nui-form-field>\n</form>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n    ViewChild,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\n// eslint-disable-next-line import/no-deprecated\nimport { combineLatest, Subject } from \"rxjs\";\nimport { filter, takeUntil, tap } from \"rxjs/operators\";\n\nimport { LoggerService } from \"@nova-ui/bits\";\n\nimport { RefreshRateConfiguratorComponent } from \"./refresh-rate-configurator/refresh-rate-configurator.component\";\nimport {\n    TimeUnit,\n    TIME_UNITS_SHORT,\n} from \"./refresh-rate-configurator/time-units\";\nimport { RefresherSettingsService } from \"../../../../../components/providers/refresher-settings.service\";\nimport { IHasChangeDetector, IHasForm } from \"../../../../../types\";\n\n@Component({\n    selector: \"nui-refresher-configuration\",\n    templateUrl: \"./refresher-configuration.component.html\",\n    styleUrls: [\"./refresher-configuration.component.less\"],\n    standalone: false,\n})\nexport class RefresherConfigurationComponent\n    implements OnInit, OnChanges, OnDestroy, IHasChangeDetector, IHasForm\n{\n    public static lateLoadKey = \"RefresherConfigurationComponent\";\n\n    @Input() enabled: boolean;\n    @Input() interval: number;\n    @Input() minSeconds: number = 1;\n    @Input() maxSeconds: number = 86400;\n    @Input() overrideDefaultSettingsCaption = $localize`Custom refresh rate`;\n    @Input() overrideDefaultSettings = true;\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    public form: FormGroup;\n\n    private destroyed$ = new Subject<void>();\n    @ViewChild(RefreshRateConfiguratorComponent)\n    private refreshRateComp: RefreshRateConfiguratorComponent;\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        private formBuilder: FormBuilder,\n        private logger: LoggerService,\n        public refresherSettings: RefresherSettingsService,\n        private cd: ChangeDetectorRef\n    ) {}\n\n    public ngOnInit(): void {\n        this.form = this.formBuilder.group({\n            enabled: [true, [Validators.required]],\n            overrideDefaultSettings: [\n                this.overrideDefaultSettings,\n                [Validators.required],\n            ],\n            interval: [this.interval ?? 0, [Validators.required]],\n        });\n\n        this.form.statusChanges\n            .pipe(takeUntil(this.destroyed$))\n            .subscribe(() => {\n                this.form.markAllAsTouched();\n                this.cd.detectChanges();\n            });\n\n        // eslint-disable-next-line import/no-deprecated\n        combineLatest([\n            this.form.controls[\"enabled\"].valueChanges,\n            this.form.controls[\"overrideDefaultSettings\"].valueChanges,\n        ])\n            .pipe(\n                filter((values) => values.some((v) => !v)),\n                tap(this.resetInterval),\n                takeUntil(this.destroyed$)\n            )\n            .subscribe();\n\n        this.formReady.emit(this.form);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.enabled) {\n            this.form?.get(\"enabled\")?.patchValue(this.enabled);\n        }\n        if (changes.interval) {\n            this.form?.get(\"interval\")?.patchValue(this.interval);\n        }\n        if (changes.overrideDefaultSettings) {\n            this.form\n                ?.get(\"overrideDefaultSettings\")\n                ?.patchValue(this.overrideDefaultSettings);\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.destroyed$.next();\n        this.destroyed$.complete();\n    }\n\n    public getHeaderSubtitle(): string {\n        let result = \"\";\n        if (this.form.get(\"enabled\")?.value) {\n            result += $localize`Enabled`;\n            result += \", \";\n            if (this.form.get(\"overrideDefaultSettings\")?.value) {\n                result += this.getDurationLabel(\n                    this.form.get(\"interval\")?.value\n                );\n            } else {\n                result +=\n                    $localize`Use default value` +\n                    \" (\" +\n                    this.getDurationLabel(\n                        this.refresherSettings.refreshRateSeconds\n                    ) +\n                    \")\";\n            }\n        } else {\n            result += $localize`Disabled`;\n        }\n\n        return result;\n    }\n\n    // TODO: make reusable\n    public getDurationLabel(seconds: number): string {\n        let totalSeconds = seconds;\n        let result: string = \"\";\n        const hours = Math.floor(totalSeconds / 3600);\n\n        totalSeconds %= 3600;\n        const minutes = Math.floor(totalSeconds / 60);\n\n        const calculatedSeconds = totalSeconds % 60;\n\n        if (hours > 0) {\n            result += hours + \" \" + TIME_UNITS_SHORT[TimeUnit.Hour] + \" \";\n        }\n\n        if (minutes > 0) {\n            result += minutes + \" \" + TIME_UNITS_SHORT[TimeUnit.Minute] + \" \";\n        }\n\n        if (calculatedSeconds > 0) {\n            result +=\n                calculatedSeconds +\n                \" \" +\n                TIME_UNITS_SHORT[TimeUnit.Second] +\n                \" \";\n        }\n\n        result = result.trim();\n\n        if (result === \"\") {\n            return \"0 \" + TIME_UNITS_SHORT[TimeUnit.Second];\n        }\n\n        return result;\n    }\n\n    private resetInterval = () => {\n        this.refreshRateComp.resetUnits();\n        this.form.get(\"interval\")?.setValue(this.interval || this.minSeconds);\n    };\n}\n","<nui-widget-editor-accordion\n    [formGroup]=\"form\"\n    [state]=\"form | nuiWidgetEditorAccordionFormState | async\"\n>\n    <div accordionHeader class=\"d-flex align-items-center px-4 py-2\">\n        <nui-icon\n            class=\"align-self-start pt-2\"\n            iconColor=\"gray\"\n            [icon]=\"form | nuiFormHeaderIconPipe : 'reset' | async\"\n        ></nui-icon>\n        <div class=\"d-flex flex-column ml-4 pt-1\">\n            <span class=\"nui-text-label\" i18n>Refresh</span>\n            <div class=\"nui-text-secondary\" [title]=\"getHeaderSubtitle()\">\n                {{ getHeaderSubtitle() }}\n            </div>\n        </div>\n    </div>\n    <div\n        class=\"d-flex flex-column nui-refresher-configuration__accordion-content\"\n    >\n        <div>\n            <nui-form-field [control]=\"form.get('enabled')\">\n                <nui-switch formControlName=\"enabled\" i18n\n                    >Refresh widget periodically</nui-switch\n                >\n            </nui-form-field>\n        </div>\n        <div [class.hidden]=\"!form.get('enabled')?.value\">\n            <div class=\"mt-4\">\n                <nui-form-field [control]=\"form.get('overrideDefaultSettings')\">\n                    <nui-switch formControlName=\"overrideDefaultSettings\"\n                        >{{ overrideDefaultSettingsCaption }}\n                        <div\n                            class=\"nui-help-hint\"\n                            *ngIf=\"!form.get('overrideDefaultSettings')?.value\"\n                            i18n\n                        >\n                            By default, the widget will refresh every\n                            {{\n                                getDurationLabel(\n                                    refresherSettings.refreshRateSeconds\n                                )\n                            }}.\n                        </div>\n                    </nui-switch>\n                </nui-form-field>\n            </div>\n            <div\n                [class.hidden]=\"!form.get('overrideDefaultSettings')?.value\"\n                class=\"mt-4\"\n            >\n                <nui-form-field [control]=\"form.get('interval')\">\n                    <nui-refresh-rate-configurator\n                        [minSeconds]=\"minSeconds\"\n                        [maxSeconds]=\"maxSeconds\"\n                        formControlName=\"interval\"\n                    ></nui-refresh-rate-configurator>\n                </nui-form-field>\n            </div>\n        </div>\n    </div>\n</nui-widget-editor-accordion>\n","// © 2023 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\nimport { Observable } from \"rxjs\";\n\nimport { IHasChangeDetector, IHasForm } from \"../../../../../types\";\n\n@Component({\n    selector: \"nui-risk-score-tile-description-configuration\",\n    templateUrl: \"./risk-score-tile-description-configuration.component.html\",\n    styleUrls: [\"./risk-score-tile-description-configuration.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class RiskScoreTileDescriptionConfigurationComponent\n    implements OnInit, OnChanges, IHasChangeDetector, IHasForm\n{\n    public static lateLoadKey =\n        \"RiskScoreTileDescriptionConfigurationComponent\";\n\n    public readonly MAX_DESCRIPTION_LENGTH = 150;\n\n    @Input() componentId: string;\n\n    @Input() label: string = \"\";\n    @Input() minValue: number = 0;\n    @Input() maxValue: number = 100;\n    @Input() description: string = \"\";\n    @Input() useStaticLabel: boolean = false;\n    @Input() staticLabel: string = \"\";\n\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    public form: FormGroup;\n    public subtitle$: Observable<string>;\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        private formBuilder: FormBuilder\n    ) {}\n\n    public ngOnInit(): void {\n        this.form = this.formBuilder.group({\n            label: [this.label, [Validators.required]],\n            minValue: [this.minValue, [Validators.required]],\n            maxValue: [this.maxValue, [Validators.required]],\n            description: [\n                this.description,\n                [Validators.maxLength(this.MAX_DESCRIPTION_LENGTH)],\n            ],\n            useStaticLabel: [this.useStaticLabel, [Validators.required]],\n            staticLabel: [this.staticLabel],\n        });\n\n        this.formReady.emit(this.form);\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes.label) {\n            this.form?.patchValue({ label: changes.label.currentValue });\n        }\n\n        if (changes.minValue) {\n            this.form?.patchValue({ minValue: changes.minValue.currentValue });\n        }\n\n        if (changes.maxValue) {\n            this.form?.patchValue({ maxValue: changes.maxValue.currentValue });\n        }\n\n        if (changes.description) {\n            this.form?.patchValue({\n                description: changes.description.currentValue,\n            });\n        }\n\n        if (changes.useStaticLabel) {\n            this.form?.patchValue({\n                useStaticLabel: changes.useStaticLabel.currentValue,\n            });\n        }\n\n        if (changes.staticLabel) {\n            this.form?.patchValue({\n                staticLabel: changes.staticLabel.currentValue,\n            });\n        }\n    }\n}\n","<nui-widget-editor-accordion\n    [formGroup]=\"form\"\n    [state]=\"form | nuiWidgetEditorAccordionFormState | async\"\n>\n    <div accordionHeader class=\"d-flex align-items-center px-4 py-2\">\n        <nui-icon\n            class=\"align-self-start pt-2\"\n            [icon]=\"form | nuiFormHeaderIconPipe : 'widget_list' | async\"\n        ></nui-icon>\n        <div class=\"d-flex flex-column ml-4 pt-1\">\n            <span class=\"nui-text-label\" i18n>Description</span>\n            <div class=\"nui-text-secondary\" [title]=\"subtitle$ | async\">\n                {{ subtitle$ | async }}\n            </div>\n        </div>\n    </div>\n    <div class=\"risk-score-tile-description-configuration__accordion-content\">\n        <div class=\"mb-4\">\n            <nui-form-field\n                caption=\"Label\"\n                i18n-caption\n                [control]=\"form.get('label')\"\n                class=\"form-group\"\n            >\n                <nui-textbox\n                    formControlName=\"label\"\n                    placeholder=\"Set label\"\n                    i18n-placeholder\n                ></nui-textbox>\n            </nui-form-field>\n        </div>\n\n        <div class=\"mt-4\">\n            <nui-form-field\n                caption=\"Min Value\"\n                i18n-caption\n                [control]=\"form.get('minValue')\"\n                class=\"form-group\"\n            >\n                <nui-textbox-number\n                    formControlName=\"minValue\"\n                    placeholder=\"Min Value\"\n                    i18n-placeholder\n                ></nui-textbox-number>\n            </nui-form-field>\n        </div>\n\n        <div class=\"mt-4\">\n            <nui-form-field\n                caption=\"Max Value\"\n                i18n-caption\n                [control]=\"form.get('maxValue')\"\n                class=\"form-group\"\n            >\n                <nui-textbox-number\n                    formControlName=\"maxValue\"\n                    placeholder=\"Max Value\"\n                    i18n-placeholder\n                ></nui-textbox-number>\n            </nui-form-field>\n        </div>\n\n        <div class=\"mt-4\">\n            <nui-form-field\n                [control]=\"form.get('useStaticLabel')\"\n                class=\"form-group\"\n            >\n                <nui-switch formControlName=\"useStaticLabel\" i18n\n                    >Use Float Label</nui-switch\n                >\n            </nui-form-field>\n        </div>\n\n        <div class=\"mt-4\" [class.hidden]=\"!form.get('useStaticLabel')?.value\">\n            <nui-form-field\n                caption=\"Float Label\"\n                i18n-caption\n                [control]=\"form.get('staticLabel')\"\n                class=\"form-group\"\n            >\n                <nui-textbox\n                    formControlName=\"staticLabel\"\n                    placeholder=\"Set float label\"\n                    i18n-placeholder\n                ></nui-textbox>\n            </nui-form-field>\n        </div>\n\n        <div class=\"mt-4\">\n            <nui-form-field\n                caption=\"Description\"\n                i18n-caption\n                [control]=\"form.get('description')\"\n                class=\"form-group\"\n            >\n                <nui-textbox\n                    formControlName=\"description\"\n                    placeholder=\"Set description\"\n                    i18n-placeholder\n                ></nui-textbox>\n                <nui-validation-message for=\"maxlength\" i18n>\n                    Description cannot be longer than\n                    {{ MAX_DESCRIPTION_LENGTH }} characters.\n                </nui-validation-message>\n            </nui-form-field>\n        </div>\n    </div>\n</nui-widget-editor-accordion>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { AbstractControl, ValidationErrors, ValidatorFn } from \"@angular/forms\";\nimport _isNil from \"lodash/isNil\";\n\nimport { removeErrors } from \"@nova-ui/bits\";\n\nexport const thresholdsValidator: ValidatorFn = (\n    form: AbstractControl\n): ValidationErrors | null => {\n    const critical = form.get(\"criticalThresholdValue\");\n    const warning = form.get(\"warningThresholdValue\");\n    const reverse = form.get(\"reversedThresholds\");\n    const show = form.get(\"showThresholds\");\n\n    if (!critical) {\n        throw new Error(\"criticalThresholdValue formControl is not defined\");\n    }\n    removeErrors(critical, \"min\", \"max\");\n\n    if (!warning) {\n        throw new Error(\"warningThresholdValue formControl is not defined\");\n    }\n    removeErrors(warning, \"min\", \"max\");\n\n    if (show?.value) {\n        if (_isNil(warning.value)) {\n            return null;\n        }\n        if (reverse?.value) {\n            if (critical.value >= warning.value) {\n                warning.setErrors({ min: true });\n                critical.setErrors({ max: true });\n                return { thresholds: true };\n            }\n        } else {\n            if (critical.value <= warning.value) {\n                warning.setErrors({ max: true });\n                critical.setErrors({ min: true });\n                return { thresholds: true };\n            }\n        }\n    }\n\n    return null;\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\nimport includes from \"lodash/includes\";\nimport _isNil from \"lodash/isNil\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { LoggerService } from \"@nova-ui/bits\";\n\nimport { thresholdsValidator } from \"./thresholds-validator\";\nimport { IHasChangeDetector, IHasForm } from \"../../../../../types\";\n\n@Component({\n    selector: \"nui-thresholds-configuration\",\n    templateUrl: \"./thresholds-configuration.component.html\",\n    styleUrls: [\"./thresholds-configuration.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class ThresholdsConfigurationComponent\n    implements OnInit, OnDestroy, OnChanges, IHasChangeDetector, IHasForm\n{\n    public static lateLoadKey = \"ThresholdsConfigurationComponent\";\n\n    @Input() criticalThresholdValue: number;\n    @Input() warningThresholdValue: number;\n    @Input() showThresholds: boolean;\n    @Input() reversedThresholds: boolean;\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    public thresholdOptions = [\n        {\n            value: false,\n            displayValue: $localize`Never show critical or warning states for this KPI`,\n        },\n        {\n            value: true,\n            displayValue: $localize`Set custom thresholds for this widget`,\n        },\n    ];\n\n    /**\n     * this value is added because of the setTimeout in RadioButtonComponent which will be removed in v10 - NUI-4843.\n     * when setTimeout is removed this hack can be removed as well\n     * @deprecated - remove in scope of NUI-4843\n     * */\n    public radioButtonGroupValue: boolean;\n\n    public form: FormGroup;\n\n    private readonly destroy$ = new Subject<void>();\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        private formBuilder: FormBuilder,\n        private logger: LoggerService,\n        private cd: ChangeDetectorRef\n    ) {}\n\n    public ngOnInit(): void {\n        this.validateRadioButtonsGroupValue();\n        this.form = this.formBuilder.group(\n            {\n                criticalThresholdValue: [\n                    this.criticalThresholdValue || 0,\n                    [Validators.required],\n                ],\n                warningThresholdValue: [this.warningThresholdValue || 0],\n                showThresholds: [\n                    this.showThresholds || false,\n                    [Validators.required],\n                ],\n                reversedThresholds: [this.reversedThresholds || false],\n            },\n            {\n                validators: thresholdsValidator,\n            }\n        );\n\n        this.handleWarningThreshold(this.warningThresholdValue);\n\n        this.form.statusChanges\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((change) => {\n                this.form.markAllAsTouched();\n                this.cd.detectChanges();\n            });\n\n        this.formReady.emit(this.form);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        const formKeys = [\n            \"criticalThresholdValue\",\n            \"warningThresholdValue\",\n            \"showThresholds\",\n            \"reversedThresholds\",\n        ];\n\n        if (changes) {\n            for (const key of Object.keys(changes)) {\n                if (includes(formKeys, key)) {\n                    const value = changes[key].currentValue;\n                    if (value) {\n                        this.form?.patchValue({ [key]: value });\n                    }\n                }\n            }\n\n            if (changes.showThresholds) {\n                setTimeout(() => this.validateRadioButtonsGroupValue());\n            }\n        }\n\n        if (changes.warningThresholdValue) {\n            this.handleWarningThreshold(\n                changes.warningThresholdValue.currentValue\n            );\n        }\n    }\n\n    public getThresholdsSubtitle(showThreshold: boolean): string {\n        return showThreshold\n            ? $localize`Custom thresholds`\n            : $localize`No thresholds`;\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    private validateRadioButtonsGroupValue() {\n        this.radioButtonGroupValue = this.showThresholds;\n    }\n\n    private handleWarningThreshold(value: number | undefined) {\n        const warningThresholdFormControl = this.form?.get(\n            \"warningThresholdValue\"\n        );\n        if (_isNil(value)) {\n            warningThresholdFormControl?.setValue(null);\n        }\n    }\n}\n","<nui-widget-editor-accordion\n    [formGroup]=\"form\"\n    [state]=\"form | nuiWidgetEditorAccordionFormState | async\"\n>\n    <nui-widget-editor-accordion-header\n        [headerIcon]=\"form | nuiFormHeaderIconPipe : 'thresholds' | async\"\n        [subtitle]=\"getThresholdsSubtitle(form.get('showThresholds')?.value)\"\n        headerTitle=\"Thresholds\"\n    />\n    <div class=\"kpi-thresholds-configuration__accordion-content\">\n        <nui-form-field\n            [control]=\"form.get('showThresholds')\"\n            caption=\"How do you want to set warning/critical thresholds?\"\n            i18n-caption\n        >\n            <nui-radio-group\n                formControlName=\"showThresholds\"\n                [value]=\"radioButtonGroupValue\"\n                name=\"showThresholds\"\n                required\n            >\n                <nui-radio\n                    *ngFor=\"let thresholdOption of thresholdOptions\"\n                    [value]=\"thresholdOption.value\"\n                >\n                    {{ thresholdOption.displayValue }}\n                </nui-radio>\n            </nui-radio-group>\n            <nui-validation-message for=\"required\" i18n>\n                This field is required\n            </nui-validation-message>\n        </nui-form-field>\n\n        <div class=\"mt-4\" *ngIf=\"form.get('showThresholds')?.value\">\n            <div class=\"mb-4\">\n                <nui-form-field\n                    caption=\"Warning value\"\n                    i18n-caption\n                    [control]=\"form.get('warningThresholdValue')\"\n                >\n                    <nui-textbox-number\n                        formControlName=\"warningThresholdValue\"\n                        placeholder=\"Never show the warning state\"\n                        i18n-placeholder\n                    ></nui-textbox-number>\n                    <nui-validation-message for=\"required\" i18n>\n                        This field is required\n                    </nui-validation-message>\n                    <nui-validation-message for=\"min\" i18n>\n                        Warning threshold should be greater than critical\n                        threshold\n                    </nui-validation-message>\n                    <nui-validation-message for=\"max\" i18n>\n                        Warning threshold should be lower than critical\n                        threshold\n                    </nui-validation-message>\n                </nui-form-field>\n            </div>\n\n            <div class=\"mb-4\">\n                <nui-form-field\n                    caption=\"Critical value\"\n                    i18n-caption\n                    [control]=\"form.get('criticalThresholdValue')\"\n                >\n                    <nui-textbox-number\n                        formControlName=\"criticalThresholdValue\"\n                        placeholder=\"Set critical value\"\n                        i18n-placeholder\n                    ></nui-textbox-number>\n                    <nui-validation-message for=\"required\" i18n>\n                        This field is required\n                    </nui-validation-message>\n                    <nui-validation-message for=\"min\" i18n>\n                        Critical threshold should be greater than warning\n                        threshold\n                    </nui-validation-message>\n                    <nui-validation-message for=\"max\" i18n>\n                        Critical threshold should be lower than warning\n                        threshold\n                    </nui-validation-message>\n                </nui-form-field>\n            </div>\n\n            <div class=\"mb-4\">\n                <nui-form-field\n                    [control]=\"form.get('reversedThresholds')\"\n                    [showOptionalText]=\"false\"\n                >\n                    <nui-checkbox formControlName=\"reversedThresholds\" required>\n                        <span class=\"nui-text-label\" i18n\n                            >Warning and critical when below threshold\n                            values</span\n                        >\n                    </nui-checkbox>\n                    <nui-validation-message for=\"required\" i18n>\n                        This field is required\n                    </nui-validation-message>\n                </nui-form-field>\n            </div>\n        </div>\n    </div>\n</nui-widget-editor-accordion>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IEvent } from \"@nova-ui/bits\";\n\nimport { TimeseriesChartPreset } from \"../../../../../components/timeseries-widget/types\";\nimport { PREVIEW_EVENT, REFRESH } from \"../../../../../services/types\";\nimport {\n    IHasChangeDetector,\n    IHasForm,\n    PIZZAGNA_EVENT_BUS,\n} from \"../../../../../types\";\nimport { LegendPlacement } from \"../../../../../widget-types/common/widget/legend\";\nimport { ConfiguratorHeadingService } from \"../../../../services/configurator-heading.service\";\n\nexport interface ITimeseriesChartTypeOption {\n    label: string;\n    value: TimeseriesChartPreset;\n}\n\nexport interface ITimeSpanOption {\n    id: string;\n    name: string;\n}\n\n@Component({\n    selector: \"nui-timeseries-metadata-configuration\",\n    templateUrl: \"./timeseries-metadata-configuration.component.html\",\n    styleUrls: [\"./timeseries-metadata-configuration.component.less\"],\n    standalone: false,\n})\nexport class TimeseriesMetadataConfigurationComponent\n    implements IHasChangeDetector, IHasForm, OnInit, OnChanges, OnDestroy\n{\n    static lateLoadKey = \"TimeseriesMetadataConfigurationComponent\";\n\n    @Input() legendPlacements: LegendPlacement[] = [];\n    @Input() timeSpans: ITimeSpanOption[] = [];\n    @Input() startingTimespan: any;\n    @Input() legendPlacement: LegendPlacement;\n    @Input() leftAxisLabel: string;\n    @Input() preset: TimeseriesChartPreset;\n    @Input() availableChartTypes: ITimeseriesChartTypeOption[] = [\n        { label: $localize`Line`, value: TimeseriesChartPreset.Line },\n        {\n            label: $localize`Stacked area`,\n            value: TimeseriesChartPreset.StackedArea,\n        },\n        {\n            label: $localize`Stacked % area`,\n            value: TimeseriesChartPreset.StackedPercentageArea,\n        },\n        { label: $localize`Bar`, value: TimeseriesChartPreset.StackedBar },\n        { label: $localize`Status`, value: TimeseriesChartPreset.StatusBar },\n    ];\n\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    public form: FormGroup;\n\n    private readonly destroy$ = new Subject<void>();\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        public configuratorHeading: ConfiguratorHeadingService,\n        private formBuilder: FormBuilder,\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>\n    ) {\n        this.form = this.formBuilder.group({\n            leftAxisLabel: [\"\"],\n            startingTimespan: [null, Validators.required],\n            legendPlacement: [LegendPlacement.None, [Validators.required]],\n            preset: [TimeseriesChartPreset.Line, [Validators.required]],\n        });\n    }\n\n    public ngOnInit(): void {\n        this.form\n            .get(\"startingTimespan\")\n            ?.valueChanges.pipe(takeUntil(this.destroy$))\n            .subscribe((value) => {\n                // this is to wait until the value of 'startingTimespan' is converted to the preview\n                setTimeout(() => {\n                    this.eventBus.next(PREVIEW_EVENT, {\n                        payload: { id: REFRESH },\n                    });\n                });\n            });\n\n        this.formReady.emit(this.form);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        const startingTimespanControl = this.form.get(\"startingTimespan\");\n\n        if (changes.leftAxisLabel) {\n            this.form\n                .get(\"leftAxisLabel\")\n                ?.setValue(this.leftAxisLabel, { emitEvent: false });\n        }\n\n        if (changes.startingTimespan) {\n            startingTimespanControl?.setValue(this.startingTimespan, {\n                emitEvent: false,\n            });\n        }\n\n        if (changes.legendPlacement) {\n            this.form\n                .get(\"legendPlacement\")\n                ?.setValue(this.legendPlacement, { emitEvent: false });\n        }\n\n        if (changes.preset) {\n            this.form\n                .get(\"preset\")\n                ?.setValue(this.preset, { emitEvent: false });\n        }\n\n        if (changes.timeSpans) {\n            if (!startingTimespanControl?.value && this.timeSpans?.length > 0) {\n                startingTimespanControl?.setValue(this.timeSpans[0]);\n            }\n        }\n    }\n\n    public getSecondaryText(): string {\n        const startingTimespan = this.form.controls[\"startingTimespan\"].value;\n        const forTimeframe =\n            (startingTimespan && startingTimespan.name) ||\n            $localize`No timespan`;\n        const forLegend =\n            this.form.controls[\"legendPlacement\"].value || $localize`No legend`;\n        const forAxisLabel =\n            this.form.controls[\"leftAxisLabel\"].value ||\n            $localize`No y-axis label`;\n        return `${forTimeframe}, ${forLegend}, ${forAxisLabel}`;\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n}\n","<nui-widget-editor-accordion\n    [formGroup]=\"form\"\n    [state]=\"form | nuiWidgetEditorAccordionFormState | async\"\n>\n    <nui-widget-editor-accordion-header\n        [headerIcon]=\"form | nuiFormHeaderIconPipe : 'edit' | async\"\n        [iconColor]=\"form | nuiFormHeaderIconPipe : 'gray' : '' | async\"\n        [subtitle]=\"getSecondaryText()\"\n        headerTitle=\"Timeseries metadata\"\n    />\n    <div class=\"timeseries-metadata-configuration__accordion-content\">\n        <div class=\"mb-4\">\n            <nui-form-field\n                caption=\"Starting timespan\"\n                i18n-caption\n                [control]=\"form.controls['startingTimespan']\"\n            >\n                <nui-select-v2\n                    placeholder=\"Starting Timespan\"\n                    i18n-placeholder\n                    [popupViewportMargin]=\"configuratorHeading.height$ | async\"\n                    formControlName=\"startingTimespan\"\n                >\n                    <nui-select-v2-option\n                        *ngFor=\"let timeSpan of timeSpans\"\n                        [value]=\"timeSpan\"\n                    >\n                        {{ timeSpan.name }}\n                    </nui-select-v2-option>\n                </nui-select-v2>\n                <nui-validation-message for=\"required\" i18n>\n                    This field is required\n                </nui-validation-message>\n            </nui-form-field>\n        </div>\n\n        <div class=\"mb-4\">\n            <nui-form-field\n                caption=\"Chart legend\"\n                i18n-caption\n                [control]=\"form.controls['legendPlacement']\"\n            >\n                <nui-select-v2\n                    placeholder=\"Select Legend Orientation\"\n                    i18n-placeholder\n                    [popupViewportMargin]=\"configuratorHeading.height$ | async\"\n                    formControlName=\"legendPlacement\"\n                >\n                    <nui-select-v2-option\n                        *ngFor=\"let legendPlacement of legendPlacements\"\n                        [value]=\"legendPlacement.id\"\n                    >\n                        {{ legendPlacement.label }}\n                    </nui-select-v2-option>\n                </nui-select-v2>\n                <nui-validation-message for=\"required\" i18n>\n                    This field is required\n                </nui-validation-message>\n            </nui-form-field>\n        </div>\n\n        <div class=\"mb-4\">\n            <nui-form-field\n                caption=\"Chart y-axis label\"\n                i18n-caption\n                [control]=\"form.controls['leftAxisLabel']\"\n            >\n                <nui-textbox\n                    formControlName=\"leftAxisLabel\"\n                    placeholder=\"Set chart y-axis label\"\n                    i18n-placeholder\n                ></nui-textbox>\n\n                <nui-validation-message for=\"required\" i18n>\n                    This field is required\n                </nui-validation-message>\n            </nui-form-field>\n        </div>\n\n        <nui-form-field\n            caption=\"Chart type\"\n            i18n-caption\n            [control]=\"form.controls['preset']\"\n        >\n            <nui-select-v2\n                placeholder=\"Chart type\"\n                i18n-placeholder\n                [popupViewportMargin]=\"configuratorHeading.height$ | async\"\n                formControlName=\"preset\"\n            >\n                <nui-select-v2-option\n                    *ngFor=\"let option of availableChartTypes\"\n                    [value]=\"option.value\"\n                    >{{ option.label }}</nui-select-v2-option\n                >\n            </nui-select-v2>\n\n            <nui-validation-message for=\"required\" i18n>\n                This field is required\n            </nui-validation-message>\n        </nui-form-field>\n    </div>\n</nui-widget-editor-accordion>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\n\nimport { LoggerService } from \"@nova-ui/bits\";\n\nimport { IHasChangeDetector, IHasForm } from \"../../../../../types\";\n\n@Component({\n    selector: \"nui-title-and-description-configuration\",\n    templateUrl: \"./title-and-description-configuration.component.html\",\n    styleUrls: [\"title-and-description-configuration.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class TitleAndDescriptionConfigurationComponent\n    implements IHasChangeDetector, IHasForm, OnInit, OnChanges\n{\n    public static lateLoadKey = \"TitleAndDescriptionConfigurationComponent\";\n\n    @Input() title: string;\n    @Input() url: string;\n    @Input() subtitle: string;\n    @Input() description: string;\n    @Input() collapsible: boolean;\n\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    public form: FormGroup;\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        private formBuilder: FormBuilder,\n        private logger: LoggerService\n    ) {\n        this.form = this.formBuilder.group({\n            title: [\"\", Validators.required],\n            subtitle: [\"\"],\n            url: [\"\"],\n            description: [\"\"],\n            collapsible: [false],\n            collapsed: [true], // setting 'collapsed' to true to demonstrate the collapsed appearance in the preview\n        });\n    }\n\n    public ngOnInit(): void {\n        this.formReady.emit(this.form);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.title) {\n            this.form.get(\"title\")?.setValue(this.title);\n        }\n        if (changes.url) {\n            this.form.get(\"url\")?.setValue(this.url);\n        }\n        if (changes.subtitle) {\n            this.form.get(\"subtitle\")?.setValue(this.subtitle);\n        }\n        if (changes.description) {\n            this.form.get(\"description\")?.setValue(this.description);\n        }\n        if (changes.collapsible) {\n            this.form.get(\"collapsible\")?.setValue(this.collapsible);\n        }\n    }\n\n    public getSecondaryText(): string {\n        const forTitle =\n            this.form.controls[\"title\"].value || $localize`No title`;\n        const forSubtitle =\n            this.form.controls[\"subtitle\"].value || $localize`no subtitle`;\n        return `${forTitle}, ${forSubtitle}`;\n    }\n}\n","<nui-widget-editor-accordion\n    [formGroup]=\"form\"\n    [state]=\"form | nuiWidgetEditorAccordionFormState | async\"\n>\n    <nui-widget-editor-accordion-header\n        [headerIcon]=\"form | nuiFormHeaderIconPipe : 'widget_list' | async\"\n        [subtitle]=\"getSecondaryText()\"\n        headerTitle=\"Title and Description\"\n    />\n    <div class=\"title-and-description-configuration__accordion-content\">\n        <div class=\"mb-4\">\n            <nui-form-field\n                caption=\"Widget title\"\n                i18n-caption\n                [control]=\"form.get('title')\"\n            >\n                <!-- TODO: remove \"kpi\" prefix in v11  - NUI-5833-->\n                <nui-textbox\n                    id=\"kpi-widget-title\"\n                    formControlName=\"title\"\n                    placeholder=\"Set widget title\"\n                    i18n-placeholder\n                ></nui-textbox>\n                <nui-validation-message for=\"required\" i18n>\n                    This field is required\n                </nui-validation-message>\n            </nui-form-field>\n        </div>\n\n        <div class=\"mb-4\">\n            <nui-form-field\n                caption=\"Widget subtitle\"\n                i18n-caption\n                [control]=\"form.get('subtitle')\"\n            >\n                <!-- TODO: remove \"kpi\" prefix in v11 - NUI-5833 -->\n                <nui-textbox\n                    id=\"kpi-widget-subtitle\"\n                    formControlName=\"subtitle\"\n                    placeholder=\"Do not show a subtitle\"\n                    i18n-placeholder\n                ></nui-textbox>\n            </nui-form-field>\n        </div>\n\n        <div class=\"mb-4\">\n            <nui-form-field\n                caption=\"Widget link URL\"\n                i18n-caption\n                [control]=\"form.get('url')\"\n            >\n                <!-- TODO: remove \"kpi\" prefix in v11  - NUI-5833-->\n                <nui-textbox\n                    id=\"kpi-widget-url\"\n                    formControlName=\"url\"\n                    placeholder=\"Do not link to another page\"\n                    i18n-placeholder\n                ></nui-textbox>\n            </nui-form-field>\n        </div>\n\n        <div class=\"mb-4\">\n            <nui-form-field\n                caption=\"Widget description\"\n                i18n-caption\n                [control]=\"form.get('description')\"\n                hint=\"This won't be shown on the widget, but can be helpful for\n                          other users who want to re-use this widget on their own dashboards\"\n                i18n-hint\n            >\n                <nui-textbox\n                    formControlName=\"description\"\n                    placeholder=\"No description\"\n                    i18n-placeholder\n                ></nui-textbox>\n            </nui-form-field>\n        </div>\n        <div>\n            <nui-form-field\n                caption=\"Hide widget header\"\n                [showOptionalText]=\"false\"\n                i18n-caption\n                [control]=\"form.get('collapsible')\"\n            >\n                <nui-checkbox formControlName=\"collapsible\" i18n\n                    >Collapsible</nui-checkbox\n                >\n            </nui-form-field>\n        </div>\n    </div>\n</nui-widget-editor-accordion>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup } from \"@angular/forms\";\n\n@Component({\n    selector: \"nui-entity-formatting-configuration\",\n    templateUrl: \"./entity-formatting-configuration.component.html\",\n    styles: [\n        `\n            .entity-formatting__accordion-content {\n                padding: 15px 15px 15px 46px;\n            }\n        `,\n    ],\n    standalone: false,\n})\nexport class EntityFormattingConfigurationComponent\n    implements OnInit, OnChanges\n{\n    public static lateLoadKey = \"EntityFormattingComponent\";\n\n    @Input() mappingKeys: string[];\n    @Input() dataFieldIds: { [key: string]: string };\n\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    public form: FormGroup = this.formBuilder.group({\n        dataFieldIds: this.formBuilder.group({\n            icon: \"\",\n            status: \"\",\n            detailedUrl: \"\",\n            label: \"\",\n            url: \"\",\n        }),\n    });\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        private formBuilder: FormBuilder\n    ) {}\n\n    public ngOnInit(): void {\n        this.formReady.emit(this.form);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.dataFieldIds) {\n            this.getFieldMappingsControl.setValue(\n                changes.dataFieldIds.currentValue\n            );\n        }\n    }\n\n    public get getFieldMappingsControl(): FormGroup {\n        return this.form.get(\"dataFieldIds\") as FormGroup;\n    }\n}\n","<nui-widget-editor-accordion\n    [formGroup]=\"form\"\n    [state]=\"form | nuiWidgetEditorAccordionFormState | async\"\n>\n    <div accordionHeader class=\"d-flex align-items-center px-4 py-2\">\n        <nui-icon\n            class=\"align-self-start pt-2\"\n            [icon]=\"'tag'\"\n            iconColor=\"gray\"\n        ></nui-icon>\n        <div class=\"d-flex flex-column ml-4 pt-1\">\n            <span class=\"nui-text-label\" i18n>Entity formatting</span>\n            <div class=\"nui-text-secondary\" title=\"Show status icon\">\n                Show status icon\n            </div>\n        </div>\n    </div>\n    <div\n        class=\"entity-formatting__accordion-content\"\n        formGroupName=\"dataFieldIds\"\n    >\n        <div class=\"mb-3\">\n            <label class=\"nui-text-label\" i18n>Icon</label>\n            <div class=\"d-flex flex-grow-1\">\n                <nui-form-field\n                    class=\"d-flex flex-grow-1\"\n                    [control]=\"getFieldMappingsControl.get('icon')\"\n                >\n                    <nui-select-v2\n                        placeholder=\"Select Item\"\n                        i18n-placeholder\n                        formControlName=\"icon\"\n                    >\n                        <nui-select-v2-option\n                            *ngFor=\"let item of mappingKeys\"\n                            [value]=\"item\"\n                        >\n                            {{ item }}\n                        </nui-select-v2-option>\n                    </nui-select-v2>\n                </nui-form-field>\n            </div>\n        </div>\n        <div class=\"mb-3\">\n            <label class=\"nui-text-label\" i18n>Status</label>\n            <div class=\"d-flex flex-grow-1\">\n                <nui-form-field\n                    class=\"d-flex flex-grow-1\"\n                    [control]=\"getFieldMappingsControl.get('status')\"\n                >\n                    <nui-select-v2\n                        placeholder=\"Select Item\"\n                        i18n-placeholder\n                        formControlName=\"status\"\n                    >\n                        <nui-select-v2-option\n                            *ngFor=\"let item of mappingKeys\"\n                            [value]=\"item\"\n                        >\n                            {{ item }}\n                        </nui-select-v2-option>\n                    </nui-select-v2>\n                </nui-form-field>\n            </div>\n        </div>\n        <div class=\"mb-3\">\n            <label class=\"nui-text-label\" i18n>Details URL</label>\n            <div class=\"d-flex flex-grow-1\">\n                <nui-form-field\n                    class=\"d-flex flex-grow-1\"\n                    [control]=\"getFieldMappingsControl.get('detailedUrl')\"\n                >\n                    <nui-select-v2\n                        placeholder=\"Select Item\"\n                        i18n-placeholder\n                        formControlName=\"detailedUrl\"\n                    >\n                        <nui-select-v2-option\n                            *ngFor=\"let item of mappingKeys\"\n                            [value]=\"item\"\n                        >\n                            {{ item }}\n                        </nui-select-v2-option>\n                    </nui-select-v2>\n                </nui-form-field>\n            </div>\n        </div>\n        <div class=\"mb-3\">\n            <label class=\"nui-text-label\" i18n>Label</label>\n            <div class=\"d-flex flex-grow-1\">\n                <nui-form-field\n                    class=\"d-flex flex-grow-1\"\n                    [control]=\"getFieldMappingsControl.get('label')\"\n                >\n                    <nui-select-v2\n                        placeholder=\"Select Item\"\n                        i18n-placeholder\n                        formControlName=\"label\"\n                    >\n                        <nui-select-v2-option\n                            *ngFor=\"let item of mappingKeys\"\n                            [value]=\"item\"\n                        >\n                            {{ item }}\n                        </nui-select-v2-option>\n                    </nui-select-v2>\n                </nui-form-field>\n            </div>\n        </div>\n        <div class=\"mb-3\">\n            <label class=\"nui-text-label\" i18n>Label URL</label>\n            <div class=\"d-flex flex-grow-1\">\n                <nui-form-field\n                    class=\"d-flex flex-grow-1\"\n                    [control]=\"getFieldMappingsControl.get('url')\"\n                >\n                    <nui-select-v2\n                        placeholder=\"Select Item\"\n                        i18n-placeholder\n                        formControlName=\"url\"\n                    >\n                        <nui-select-v2-option\n                            *ngFor=\"let item of mappingKeys\"\n                            [value]=\"item\"\n                        >\n                            {{ item }}\n                        </nui-select-v2-option>\n                    </nui-select-v2>\n                </nui-form-field>\n            </div>\n        </div>\n    </div>\n</nui-widget-editor-accordion>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport {\n    AbstractControl,\n    FormArray,\n    FormBuilder,\n    FormControl,\n    FormGroup,\n    Validators,\n} from \"@angular/forms\";\nimport _difference from \"lodash/difference\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IDataField, IDataSource, IEvent } from \"@nova-ui/bits\";\n\nimport {\n    IHasChangeDetector,\n    IHasForm,\n    PIZZAGNA_EVENT_BUS,\n} from \"../../../../../types\";\nimport { DATA_SOURCE_CREATED } from \"../../../../types\";\n\n@Component({\n    selector: \"nui-grouping-configuration\",\n    templateUrl: \"./grouping-configuration.component.html\",\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    styles: [\n        `\n            .grouping-configuration__accordion-content {\n                padding: 15px 15px 15px 46px;\n            }\n        `,\n    ],\n    standalone: false,\n})\n// Remember to declare this class in the parent module\nexport class GroupingConfigurationComponent\n    implements OnInit, OnChanges, IHasChangeDetector, IHasForm, OnDestroy\n{\n    public static lateLoadKey = \"DrilldownConfiguratorComponent\";\n\n    @Input() groups: string[];\n    @Input() groupBy: string[];\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    public form: FormGroup = this.formBuilder.group({\n        groups: [],\n        groupBy: this.formBuilder.array([]),\n        drillstate: [undefined],\n    });\n\n    public selectData: Array<Array<string>>;\n\n    private readonly destroy$ = new Subject<void>();\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        private formBuilder: FormBuilder,\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>\n    ) {}\n\n    public get getGroupByControl(): FormArray {\n        return this.form.get(\"groupBy\") as FormArray;\n    }\n\n    public get getDrillStateControl(): FormArray {\n        return this.form.get(\"drillstate\") as FormArray;\n    }\n\n    public get getGroupsControl(): FormControl {\n        return this.form.get(\"groups\") as FormControl;\n    }\n\n    public ngOnInit(): void {\n        this.eventBus\n            .getStream(DATA_SOURCE_CREATED)\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((provider: IEvent<IDataSource>) =>\n                this.onDataSourceCreated(provider)\n            );\n\n        this.getGroupByControl.valueChanges\n            .pipe(takeUntil(this.destroy$))\n            .subscribe(() => this.fillGroupsOptions());\n\n        this.fillGroupsOptions();\n\n        this.formReady.emit(this.form);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.groups) {\n            this.getGroupsControl.setValue(changes.groups.currentValue);\n        }\n        if (changes.groupBy && !changes.groupBy.firstChange) {\n            this.getGroupByControl.clear();\n            this.groupBy.forEach((group) =>\n                this.getGroupByControl.push(this.createControl(group))\n            );\n            this.fillGroupsOptions();\n        }\n    }\n\n    public createControl(value?: string): FormControl {\n        return this.formBuilder.control(value || \"\", Validators.required);\n    }\n\n    public addGrouping(): void {\n        const control = this.createControl();\n        this.getGroupByControl.push(control);\n        this.fillGroupsOptions();\n        const lastControlIndex = this.getGroupByControl.controls.length - 1;\n        control.setValue(this.selectData[lastControlIndex][0]);\n    }\n\n    public removeRule(index: number): void {\n        this.getGroupByControl.removeAt(index);\n        this.fillGroupsOptions();\n    }\n\n    public isAddRestricted(): boolean {\n        return this.selectData.some((i) => i.length === 1);\n    }\n\n    public getSubtitle(): string {\n        const subtitle = this.getGroupByControl.controls\n            .map(\n                (control: AbstractControl, index: number) =>\n                    `${index === 0 ? \"By\" : \"then\"} ${control.value}`\n            )\n            .join(\", \");\n\n        return this.getGroupByControl?.value.length === 0\n            ? $localize`No groups`\n            : $localize`${subtitle}`;\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    private onDataSourceCreated(provider: IEvent<IDataSource>) {\n        provider?.payload?.dataFieldsConfig?.dataFields$\n            ?.pipe(takeUntil(this.destroy$))\n            .subscribe((dataFields: IDataField[]) => {\n                if (dataFields) {\n                    const dataFieldIds = dataFields.map(\n                        (field: IDataField) => field.id\n                    );\n                    const dataDiff = _difference(this.groups, dataFieldIds);\n                    if (dataDiff.length || !this.groups?.length) {\n                        this.groups = dataFieldIds;\n                        this.getGroupsControl.setValue(dataFieldIds);\n                        this.getGroupByControl.clear();\n                        this.getDrillStateControl.setValue([]);\n                        this.fillGroupsOptions();\n                    }\n                }\n            });\n    }\n\n    private fillGroupsOptions() {\n        this.selectData = [];\n        const controlValue = this.getGroupByControl.value as string[];\n        this.getGroupByControl.controls.forEach(\n            (value: AbstractControl, index: number) => {\n                this.selectData[index] = [];\n                const diff = _difference(this.groups, controlValue);\n                if (controlValue[index]) {\n                    this.selectData[index].push(controlValue[index]);\n                }\n                this.selectData[index] = [...this.selectData[index], ...diff];\n            }\n        );\n    }\n}\n","<nui-widget-editor-accordion\n    [formGroup]=\"form\"\n    [state]=\"form | nuiWidgetEditorAccordionFormState | async\"\n>\n    <nui-widget-editor-accordion-header\n        [headerIcon]=\"'tag'\"\n        [subtitle]=\"getSubtitle()\"\n        headerTitle=\"Grouping\"\n    />\n    <div\n        class=\"grouping-configuration__accordion-content\"\n        formArrayName=\"groupBy\"\n    >\n        <ng-container\n            *ngFor=\"let group of getGroupByControl.controls; index as i\"\n        >\n            <label *ngIf=\"i !== 0\" class=\"d-flex nui-text-secondary mb-1\" i18n\n                >Then</label\n            >\n            <label *ngIf=\"i === 0\" class=\"d-flex nui-text-panel mb-2\" i18n\n                >Group by</label\n            >\n            <div class=\"d-flex flex-row flex-grow-1 mb-4\">\n                <nui-form-field [control]=\"group\" class=\"d-flex flex-grow-1\">\n                    <nui-select-v2\n                        placeholder=\"Select Item\"\n                        i18n-placeholder\n                        [formControlName]=\"i\"\n                    >\n                        <nui-select-v2-option\n                            *ngFor=\"let item of selectData[i]\"\n                            [value]=\"item\"\n                        >\n                            {{ item }}\n                        </nui-select-v2-option>\n                    </nui-select-v2>\n                </nui-form-field>\n                <div class=\"justify-content-center\">\n                    <button\n                        nui-button\n                        icon=\"delete\"\n                        displayStyle=\"action\"\n                        type=\"button\"\n                        (click)=\"removeRule(i)\"\n                    ></button>\n                </div>\n            </div>\n        </ng-container>\n        <button\n            nui-button\n            icon=\"add\"\n            displayStyle=\"action\"\n            type=\"button\"\n            i18n\n            *ngIf=\"!this.isAddRestricted()\"\n            (click)=\"addGrouping()\"\n        >\n            Add another level\n        </button>\n    </div>\n</nui-widget-editor-accordion>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Inject,\n    Input,\n    OnChanges,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport {\n    AbstractControl,\n    FormArray,\n    FormBuilder,\n    FormGroup,\n} from \"@angular/forms\";\nimport { Observable } from \"rxjs\";\nimport { map } from \"rxjs/operators\";\n\nimport { EventBus, IEvent, uuid } from \"@nova-ui/bits\";\n\nimport { KpiComponent } from \"../../../../../components/kpi-widget/kpi.component\";\nimport { IPizzagnaProperty } from \"../../../../../pizzagna/functions/get-pizzagna-property-path\";\nimport { PizzagnaService } from \"../../../../../pizzagna/services/pizzagna.service\";\nimport {\n    IHasChangeDetector,\n    IHasForm,\n    PizzagnaLayer,\n    PIZZAGNA_EVENT_BUS,\n} from \"../../../../../types\";\nimport { IItemConfiguration } from \"../../../types\";\nimport { IKpiItemConfiguration } from \"../types\";\n\n/**\n * This component and its related form represent a collection of KPI tile configuration components\n */\n@Component({\n    selector: \"nui-kpi-tiles-configuration-component\",\n    templateUrl: \"./kpi-tiles-configuration.component.html\",\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class KpiTilesConfigurationComponent\n    implements IHasChangeDetector, IHasForm, OnChanges\n{\n    static lateLoadKey = \"KpiTilesConfigurationComponent\";\n\n    @Input() componentId: string;\n    @Input() tiles: IKpiItemConfiguration[] = [];\n    @Input() nodes: string[];\n\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    public form: FormGroup;\n    public emptyItems$: Observable<boolean>;\n\n    constructor(\n        public pizzagnaService: PizzagnaService,\n        public changeDetector: ChangeDetectorRef,\n        private formBuilder: FormBuilder,\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>\n    ) {}\n\n    public ngOnChanges(changes: SimpleChanges): void {}\n\n    public onFormReady(form: AbstractControl): void {\n        this.form = this.formBuilder.group({\n            tiles: form as FormArray,\n        });\n\n        this.emptyItems$ = this.form.valueChanges.pipe(\n            map((result) => result.tiles.length === 0)\n        );\n        this.formReady.emit(this.form);\n    }\n\n    public onItemsChange(tiles: IItemConfiguration[]): void {\n        const parentPath = \"tiles\";\n        const componentIds = tiles.map((tile) => tile.id);\n        this.pizzagnaService.createComponentsFromTemplate(\n            parentPath,\n            componentIds\n        );\n\n        const property: IPizzagnaProperty = {\n            componentId: this.componentId,\n            pizzagnaKey: PizzagnaLayer.Data,\n            propertyPath: [\"tiles\"],\n        };\n        this.pizzagnaService.setProperty(property, tiles);\n    }\n\n    public addTile(): void {\n        this.onItemsChange([\n            ...this.tiles,\n            {\n                id: uuid(\"kpi\"),\n                componentType: KpiComponent.lateLoadKey,\n            },\n        ]);\n    }\n}\n","<nui-items-dynamic\n    [items]=\"tiles\"\n    [nodes]=\"nodes\"\n    (itemsChange)=\"onItemsChange($event)\"\n    (formReady)=\"onFormReady($event)\"\n></nui-items-dynamic>\n\n<div class=\"pl-4 pr-4\" *ngIf=\"(emptyItems$ | async) && form.touched\">\n    <nui-message type=\"critical\" [allowDismiss]=\"false\" i18n>\n        <b>At least one value must be added.</b>\n    </nui-message>\n</div>\n\n<button\n    nui-button\n    icon=\"add\"\n    displayStyle=\"action\"\n    id=\"kpi-widget-add-indicator-btn\"\n    type=\"button\"\n    class=\"ml-4 mb-4\"\n    (click)=\"addTile()\"\n    i18n\n>\n    Add new value\n</button>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    SimpleChanges,\n    ViewChild,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup } from \"@angular/forms\";\n\nimport { IDataField, LoggerService, SelectV2Component } from \"@nova-ui/bits\";\n\nimport { IHasChangeDetector } from \"../../../../../../types\";\n\nexport interface IAggregatorConfiguratorProperties {\n    metrics: IDataField[];\n    activeMetricId?: string;\n    [key: string]: any;\n}\n\n@Component({\n    selector: \"nui-aggregator-configurator\",\n    templateUrl: \"./aggregator-configurator.component.html\",\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class AggregatorMetricSelectorConfigurationComponent\n    implements OnInit, OnChanges, IHasChangeDetector\n{\n    static lateLoadKey = \"AggregatorMetricSelectorConfigurationComponent\";\n\n    @Input() public metrics: IDataField[];\n    @Input() public activeMetricId: string;\n\n    @Output() public formReady = new EventEmitter();\n\n    public form: FormGroup = this.formBuilder.group({\n        activeMetricId: [],\n    });\n\n    @ViewChild(\"metricsSelect\")\n    public meticsSelect: SelectV2Component;\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        protected formBuilder: FormBuilder,\n        protected logger: LoggerService\n    ) {}\n\n    public ngOnInit(): void {\n        this.formReady.emit(this.form);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.activeMetricId) {\n            this.form\n                .get(\"activeMetricId\")\n                ?.setValue(changes.activeMetricId.currentValue);\n\n            const currentMetricConfig = this.metrics.find(\n                (m) => m.id === changes.activeMetricId.currentValue\n            );\n            if (!currentMetricConfig) {\n                this.logger.warn(\n                    `AggregatorMetricSelectorConfigurationComponent: No metric found for id: ${changes.activeMetricId.currentValue}`\n                );\n            }\n        }\n    }\n\n    public unsetMetric(): void {\n        this.form.controls[\"activeMetricId\"].reset();\n        this.meticsSelect.hideDropdown();\n    }\n}\n","<div *ngIf=\"form\" [formGroup]=\"form\">\n    <div>\n        <nui-form-field\n            caption=\"Default Metric\"\n            i18n-caption\n            class=\"mb-3\"\n            [control]=\"form.controls['activeMetricId']\"\n        >\n            <nui-select-v2\n                #metricsSelect\n                formControlName=\"activeMetricId\"\n                placeholder=\"Select Value\"\n                i18n-placeholder\n            >\n                <nui-overlay-item\n                    (click)=\"unsetMetric()\"\n                    class=\"nui-combobox-v2__popup-box\"\n                    style=\"cursor: pointer\"\n                    >Unset</nui-overlay-item\n                >\n                <nui-select-v2-option\n                    *ngFor=\"let metric of metrics\"\n                    [displayValueContext]=\"metric.label\"\n                    [value]=\"metric.id\"\n                >\n                    {{ metric.label }}\n                </nui-select-v2-option>\n            </nui-select-v2>\n            <nui-validation-message for=\"required\" i18n>\n                This field is required\n            </nui-validation-message>\n        </nui-form-field>\n    </div>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    Inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup } from \"@angular/forms\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport {\n    EventBus,\n    IDataField,\n    IDataSource,\n    IEvent,\n    LoggerService,\n} from \"@nova-ui/bits\";\n\nimport { IProportionalDataFieldsConfig } from \"../../../../../../components/proportional-widget/types\";\nimport {\n    IHasChangeDetector,\n    PIZZAGNA_EVENT_BUS,\n} from \"../../../../../../types\";\nimport { DATA_SOURCE_CREATED } from \"../../../../../types\";\nimport { AggregatorMetricSelectorConfigurationComponent } from \"../aggregator-configurator/aggregator-configurator.component\";\n\nconst DEFAULT_CHART_SERIES_DATA_FIELD: IDataField = {\n    id: \"data[0]\",\n    label: \"data\",\n    // @ts-ignore\n    dataType: null,\n};\n\n@Component({\n    selector: \"nui-field-mapper-aggregator-configurator\",\n    templateUrl: \"./field-mapper-aggregator-configurator.component.html\",\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class FieldMapperAggregatorConfiguratorComponent\n    extends AggregatorMetricSelectorConfigurationComponent\n    implements OnInit, OnChanges, OnDestroy, IHasChangeDetector\n{\n    static lateLoadKey = \"FieldMapperAggregatorConfiguratorComponent\";\n\n    @Input() chartSeriesDataFieldId: string;\n\n    public chartSeriesDataFields: IDataField[] = [\n        DEFAULT_CHART_SERIES_DATA_FIELD,\n    ];\n    public form: FormGroup = this.formBuilder.group({\n        activeMetricId: [],\n        chartSeriesDataFieldId: [],\n    });\n\n    private readonly destroy$ = new Subject<void>();\n\n    constructor(\n        changeDetector: ChangeDetectorRef,\n        formBuilder: FormBuilder,\n        logger: LoggerService,\n        @Inject(PIZZAGNA_EVENT_BUS) protected eventBus: EventBus<IEvent>\n    ) {\n        super(changeDetector, formBuilder, logger);\n\n        this.eventBus\n            .getStream(DATA_SOURCE_CREATED)\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((event: IEvent<IDataSource>) => {\n                const dataSource = event.payload;\n                if (dataSource) {\n                    (<IProportionalDataFieldsConfig>(\n                        dataSource.dataFieldsConfig\n                    ))?.chartSeriesDataFields$\n                        ?.pipe(takeUntil(this.destroy$))\n                        .subscribe(\n                            (dataFields) =>\n                                (this.chartSeriesDataFields = dataFields)\n                        );\n                }\n            });\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        super.ngOnChanges(changes);\n\n        if (changes.chartSeriesDataFieldId) {\n            this.form\n                .get(\"chartSeriesDataFieldId\")\n                ?.setValue(changes.chartSeriesDataFieldId.currentValue);\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n}\n","<div *ngIf=\"form\" [formGroup]=\"form\">\n    <div class=\"mb-4\">\n        <nui-form-field\n            caption=\"Default Metric\"\n            i18n-caption\n            class=\"mb-4\"\n            [control]=\"form.controls['activeMetricId']\"\n        >\n            <nui-select-v2\n                formControlName=\"activeMetricId\"\n                #metricsSelect\n                placeholder=\"Select Value\"\n                i18n-placeholder\n            >\n                <nui-overlay-item\n                    (click)=\"unsetMetric()\"\n                    class=\"nui-combobox-v2__popup-box\"\n                    style=\"cursor: pointer\"\n                    >Unset</nui-overlay-item\n                >\n                <nui-select-v2-option\n                    *ngFor=\"let metric of metrics\"\n                    [displayValueContext]=\"metric.label\"\n                    [value]=\"metric.id\"\n                >\n                    {{ metric.label }}\n                </nui-select-v2-option>\n            </nui-select-v2>\n            <nui-validation-message for=\"required\" i18n>\n                This field is required\n            </nui-validation-message>\n        </nui-form-field>\n    </div>\n\n    <div class=\"mb-4\">\n        <nui-form-field\n            caption=\"Chart Series Data Field\"\n            i18n-caption\n            class=\"mb-4\"\n            [control]=\"form.controls['chartSeriesDataFieldId']\"\n        >\n            <nui-select-v2\n                formControlName=\"chartSeriesDataFieldId\"\n                placeholder=\"Select Value\"\n                i18n-placeholder\n            >\n                <nui-select-v2-option\n                    *ngFor=\"let chartSeriesDataField of chartSeriesDataFields\"\n                    [displayValueContext]=\"chartSeriesDataField.label\"\n                    [value]=\"chartSeriesDataField.id\"\n                >\n                    {{ chartSeriesDataField.label }}\n                </nui-select-v2-option>\n            </nui-select-v2>\n            <nui-validation-message for=\"required\" i18n>\n                This field is required\n            </nui-validation-message>\n        </nui-form-field>\n    </div>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\n\nimport {\n    IProportionalWidgetChartEditorOptions,\n    ProportionalWidgetChartTypes,\n} from \"../../../../../components/proportional-widget/types\";\nimport { IFormatterDefinition } from \"../../../../../components/types\";\nimport {\n    IHasChangeDetector,\n    IHasForm,\n    IProperties,\n} from \"../../../../../types\";\nimport { LegendPlacement } from \"../../../../../widget-types/common/widget/legend\";\nimport { ConfiguratorHeadingService } from \"../../../../services/configurator-heading.service\";\n\ntype ChartTypeNamesMap = { [key in ProportionalWidgetChartTypes]: string };\nconst proportionalWidgetChartTypesNamesMap: ChartTypeNamesMap = {\n    [ProportionalWidgetChartTypes.DonutChart]: $localize`Donut`,\n    [ProportionalWidgetChartTypes.PieChart]: $localize`Pie`,\n    [ProportionalWidgetChartTypes.VerticalBarChart]: $localize`Vertical Bar`,\n    [ProportionalWidgetChartTypes.HorizontalBarChart]: $localize`Horizontal Bar`,\n};\ninterface IChartOptionViewModel {\n    label: string;\n    value: ProportionalWidgetChartTypes;\n}\n\n@Component({\n    selector: \"nui-proportional-chart-options-editor-component\",\n    templateUrl: \"proportional-chart-options-editor.component.html\",\n    styleUrls: [\"proportional-chart-options-editor.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class ProportionalChartOptionsEditorComponent\n    implements IHasChangeDetector, IHasForm, OnInit, OnChanges\n{\n    static lateLoadKey = \"ProportionalChartOptionsEditorComponent\";\n\n    @Input() chartOptions: IProportionalWidgetChartEditorOptions;\n    @Input() chartType: ProportionalWidgetChartTypes;\n    @Input() legendPlacement = LegendPlacement.None;\n    @Input() legendFormatterComponentType: string;\n    @Input() contentFormatterComponentType: string;\n    @Input() contentFormatterProperties: IProperties | undefined;\n    // filled by the Broadcaster\n    @Input() dsOutput: any;\n\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    public form: FormGroup;\n\n    public chartTypeNamesMap: ChartTypeNamesMap =\n        proportionalWidgetChartTypesNamesMap;\n    public legendFormatters: IFormatterDefinition[] = [];\n    public contentFormatters: IFormatterDefinition[] = [];\n    public formatterHasConfigurationComponent: boolean = false;\n    public currentConfigurationComponent: string = \"\";\n    public currentConfigurationComponentProperties: any;\n    public chartFormatters: any = [];\n    public configurationComponentProperties: any;\n\n    private cachedChartOptionsViewModels: IChartOptionViewModel[] = [];\n    private rawFormatter: IFormatterDefinition = {\n        componentType: \"\",\n        label: $localize`Raw`,\n        dataTypes: {\n            // @ts-ignore: pe 'null' is not as signable to type 'string | string[]'.\n            value: null,\n        },\n    };\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        public configuratorHeading: ConfiguratorHeadingService,\n        private formBuilder: FormBuilder\n    ) {}\n\n    public get chartTypeSelectViewModels(): IChartOptionViewModel[] {\n        // Using simple caching helper to prevent triggering values map on every CD cycle\n        if (\n            !this.cachedChartOptionsViewModels ||\n            this.cachedChartOptionsViewModels.length !==\n                this.chartOptions?.chartTypes?.length\n        ) {\n            this.cachedChartOptionsViewModels = (\n                this.chartOptions?.chartTypes || []\n            ).map((value) => ({ label: this.chartTypeNamesMap[value], value }));\n        }\n        return this.cachedChartOptionsViewModels;\n    }\n\n    public get chartTitle(): string {\n        return this.chartTypeNamesMap[\n            <ProportionalWidgetChartTypes>this.form.controls[\"type\"].value\n        ];\n    }\n\n    public getConfigurationComponent(): string {\n        return (\n            this.getCurrentFormatterDefinition()?.configurationComponent || \"\"\n        );\n    }\n\n    public getConfigurationComponentProperties(): void {\n        this.configurationComponentProperties = {\n            contentFormatterProperties: this.contentFormatterProperties,\n            contentFormatterDefinition: this.getCurrentFormatterDefinition(),\n            dsOutput: this.dsOutput,\n        };\n    }\n\n    public getCurrentFormatterDefinition(): IFormatterDefinition | undefined {\n        const currentFormValue = this.form.get(\n            \"contentFormatter.componentType\"\n        )?.value;\n        return this.contentFormatters.find(\n            (item) => item.componentType === currentFormValue\n        );\n    }\n\n    public ngOnInit(): void {\n        this.form = this.formBuilder.group({\n            type: [this.chartType || \"\", Validators.required],\n            legendPlacement: this.legendPlacement,\n            legendFormatter: this.formBuilder.group({\n                componentType:\n                    this.legendFormatterComponentType ||\n                    this.rawFormatter.componentType,\n            }),\n            contentFormatter: this.formBuilder.group({\n                componentType: this.contentFormatterComponentType,\n                // the 'properties' control is being dynamically added here from the onFormReady() method\n            }),\n        });\n\n        this.legendFormatters = [\n            this.rawFormatter,\n            ...(this.chartOptions.legendFormatters || []),\n        ];\n        this.contentFormatters = [\n            ...(this.chartOptions.contentFormatters || []),\n        ];\n\n        this.formReady.emit(this.form);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.chartType && !changes.chartType.isFirstChange()) {\n            this.form.get(\"type\")?.setValue(changes.chartType.currentValue);\n        }\n\n        if (\n            changes.legendPlacement &&\n            !changes.legendPlacement.isFirstChange()\n        ) {\n            this.form\n                .get(\"legendPlacement\")\n                ?.setValue(changes.legendPlacement.currentValue);\n        }\n\n        if (\n            changes.legendFormatterComponentType &&\n            !changes.legendFormatterComponentType.isFirstChange()\n        ) {\n            (this.form.get(\"legendFormatter\") as FormGroup)\n                .get(\"componentType\")\n                ?.setValue(this.legendFormatterComponentType);\n        }\n\n        if (\n            changes.contentFormatterComponentType &&\n            !changes.contentFormatterComponentType.isFirstChange()\n        ) {\n            (this.form.get(\"contentFormatter\") as FormGroup)\n                .get(\"componentType\")\n                ?.setValue(this.contentFormatterComponentType);\n        }\n\n        if (this.form) {\n            this.getConfigurationComponentProperties();\n        }\n    }\n\n    public onFormReady(payload: FormGroup): void {\n        (this.form.get(\"contentFormatter\") as FormGroup).setControl(\n            \"properties\",\n            payload\n        );\n    }\n}\n","<nui-widget-editor-accordion\n    [formGroup]=\"form\"\n    [state]=\"form | nuiWidgetEditorAccordionFormState | async\"\n>\n    <nui-widget-editor-accordion-header\n        [headerIcon]=\"form | nuiFormHeaderIconPipe : 'widget_pie-chart' | async\"\n        [subtitle]=\"chartTitle\"\n        headerTitle=\"Chart options\"\n    />\n    <div\n        class=\"proportional-widget-chart-options-configuration__accordion-content\"\n    >\n        <div class=\"mb-4\">\n            <nui-form-field\n                caption=\"Chart Type\"\n                i18n-caption\n                [control]=\"form.controls['type']\"\n            >\n                <nui-select-v2\n                    formControlName=\"type\"\n                    [popupViewportMargin]=\"configuratorHeading.height$ | async\"\n                    placeholder=\"Select chart type\"\n                    i18n-placeholder\n                >\n                    <nui-select-v2-option\n                        *ngFor=\"\n                            let chartTypeSelectViewModel of chartTypeSelectViewModels\n                        \"\n                        [value]=\"chartTypeSelectViewModel.value\"\n                    >\n                        {{ chartTypeSelectViewModel.label }}\n                    </nui-select-v2-option>\n                </nui-select-v2>\n                <nui-validation-message for=\"required\" i18n>\n                    This field is required\n                </nui-validation-message>\n            </nui-form-field>\n        </div>\n\n        <!-- Donut chart content formatter -->\n        <div class=\"mb-4\">\n            <ng-container\n                formGroupName=\"contentFormatter\"\n                *ngIf=\"form.get('type')?.value === 'DonutChart'\"\n            >\n                <nui-form-field\n                    caption=\"Content format\"\n                    i18n-caption\n                    class=\"mb-4\"\n                    [showOptionalText]=\"false\"\n                    [control]=\"form.controls['componentType']\"\n                >\n                    <nui-select-v2\n                        formControlName=\"componentType\"\n                        [popupViewportMargin]=\"\n                            configuratorHeading.height$ | async\n                        \"\n                    >\n                        <nui-select-v2-option\n                            *ngFor=\"let contentFormatter of contentFormatters\"\n                            [value]=\"contentFormatter.componentType\"\n                        >\n                            {{ contentFormatter.label }}\n                        </nui-select-v2-option>\n                    </nui-select-v2>\n                    <nui-validation-message for=\"required\" i18n>\n                        This field is required\n                    </nui-validation-message>\n                </nui-form-field>\n\n                <!-- Donut formatter configurator's portal goes here. Make form working in scope of NUI-5014 -->\n                <ng-container\n                    *ngIf=\"!!this.getConfigurationComponent()\"\n                    nuiComponentPortal\n                    [componentId]=\"this.getConfigurationComponent()\"\n                    [componentType]=\"this.getConfigurationComponent()\"\n                    [properties]=\"configurationComponentProperties\"\n                    #componentPortal=\"nuiComponentPortal\"\n                    [outputs]=\"['formReady']\"\n                    (output)=\"onFormReady($event.payload)\"\n                >\n                    <ng-template\n                        [cdkPortalOutlet]=\"componentPortal.portal\"\n                        (attached)=\"componentPortal.attached($event)\"\n                    ></ng-template>\n                </ng-container>\n            </ng-container>\n        </div>\n\n        <div class=\"mb-4\">\n            <nui-form-field\n                caption=\"Legend\"\n                i18n-caption\n                [showOptionalText]=\"false\"\n                [control]=\"form.controls['legendPlacement']\"\n            >\n                <nui-select-v2\n                    formControlName=\"legendPlacement\"\n                    [popupViewportMargin]=\"configuratorHeading.height$ | async\"\n                >\n                    <nui-select-v2-option\n                        *ngFor=\"\n                            let option of chartOptions.legendPlacementOptions\n                        \"\n                        [value]=\"option.id\"\n                    >\n                        {{ option.label }}\n                    </nui-select-v2-option>\n                </nui-select-v2>\n                <nui-validation-message for=\"required\" i18n>\n                    This field is required\n                </nui-validation-message>\n            </nui-form-field>\n        </div>\n        <ng-container formGroupName=\"legendFormatter\">\n            <nui-form-field\n                caption=\"Legend format\"\n                i18n-caption\n                [showOptionalText]=\"false\"\n                [control]=\"form.controls['componentType']\"\n            >\n                <nui-select-v2\n                    formControlName=\"componentType\"\n                    [popupViewportMargin]=\"configuratorHeading.height$ | async\"\n                >\n                    <nui-select-v2-option\n                        *ngFor=\"let legendFormatter of legendFormatters\"\n                        [value]=\"legendFormatter.componentType\"\n                    >\n                        {{ legendFormatter.label }}\n                    </nui-select-v2-option>\n                </nui-select-v2>\n                <nui-validation-message for=\"required\" i18n>\n                    This field is required\n                </nui-validation-message>\n            </nui-form-field>\n        </ng-container>\n    </div>\n</nui-widget-editor-accordion>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport {\n    FormBuilder,\n    FormControl,\n    FormGroup,\n    Validators,\n} from \"@angular/forms\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport {\n    IProportionalWidgetChartTypeConfiguration,\n    ProportionalWidgetChartTypes,\n} from \"../../../../../components/proportional-widget/types\";\nimport {\n    IFormatter,\n    IFormatterDefinition,\n} from \"../../../../../components/types\";\nimport { ProportionalLegendFormattersRegistryService } from \"../../../../../services/table-formatter-registry.service\";\nimport { IHasChangeDetector, IHasForm } from \"../../../../../types\";\nimport { ILegendPlacementOption } from \"../../../../../widget-types/common/widget/legend\";\nimport { ConfiguratorHeadingService } from \"../../../../services/configurator-heading.service\";\n\n@Component({\n    selector: \"nui-proportional-chart-options-editor-v2-component\",\n    templateUrl: \"proportional-chart-options-editor-v2.component.html\",\n    styleUrls: [\"proportional-chart-options-editor-v2.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class ProportionalChartOptionsEditorV2Component\n    implements OnInit, IHasChangeDetector, IHasForm, OnChanges, OnDestroy\n{\n    static lateLoadKey = \"ProportionalChartOptionsEditorV2Component\";\n\n    @Input() type: ProportionalWidgetChartTypes;\n    @Input() legendPlacement: ILegendPlacementOption;\n    @Input() legendFormatter: IFormatter;\n\n    @Input() chartTypes: IProportionalWidgetChartTypeConfiguration[];\n    @Input() legendPlacementOptions: ILegendPlacementOption[];\n    public legendFormatters: IFormatterDefinition[];\n\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    public form: FormGroup = this.formBuilder.group({\n        type: [undefined, Validators.required],\n        legendPlacement: [undefined],\n        legendFormatter: this.formBuilder.group({\n            componentType: [undefined],\n        }),\n    });\n    // used by Broadcaster\n    public chartTypeChanged$ = new Subject<ProportionalWidgetChartTypes>();\n\n    private readonly destroy$ = new Subject<void>();\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        public configuratorHeading: ConfiguratorHeadingService,\n        private formBuilder: FormBuilder,\n        legendFormattersRegistry: ProportionalLegendFormattersRegistryService\n    ) {\n        this.legendFormatters = legendFormattersRegistry.getItems();\n\n        // broadcast chart type\n        this.form.controls[\"type\"].valueChanges\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((v) => this.chartTypeChanged$.next(v));\n    }\n\n    public ngOnInit(): void {\n        this.formReady.emit(this.form);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.type) {\n            this.form.controls[\"type\"].setValue(changes.type.currentValue);\n        }\n\n        if (changes.legendPlacement) {\n            this.form.controls[\"legendPlacement\"].setValue(\n                changes.legendPlacement.currentValue\n            );\n        }\n\n        if (changes.legendFormatter) {\n            this.form\n                .get(\"legendFormatter.componentType\")\n                ?.setValue(changes.legendFormatter.currentValue.componentType);\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n        this.chartTypeChanged$.complete();\n    }\n\n    public get chartTitle(): string | undefined {\n        const currentChartType = this.form.get(\"type\")?.value;\n        const currentChartTypeDefinition = this.chartTypes.find(\n            (chartType) => chartType.id === currentChartType\n        );\n        return currentChartTypeDefinition?.label;\n    }\n\n    public get legendFormatterControl(): FormControl {\n        return this.form.get(\"legendFormatter.componentType\") as FormControl;\n    }\n}\n","<nui-widget-editor-accordion\n    [formGroup]=\"form\"\n    [state]=\"form | nuiWidgetEditorAccordionFormState | async\"\n>\n    <nui-widget-editor-accordion-header\n        [headerIcon]=\"form | nuiFormHeaderIconPipe : 'widget_pie-chart' | async\"\n        [subtitle]=\"chartTitle\"\n        headerTitle=\"Chart Options\"\n    />\n    <div\n        class=\"proportional-widget-chart-options-configuration__accordion-content\"\n    >\n        <!-- chart type -->\n        <div class=\"mb-4\">\n            <nui-form-field\n                caption=\"Chart Type\"\n                i18n-caption\n                [control]=\"form.controls['type']\"\n            >\n                <nui-select-v2\n                    placeholder=\"Select chart type\"\n                    [popupViewportMargin]=\"configuratorHeading.height$ | async\"\n                    formControlName=\"type\"\n                    i18n-placeholder\n                >\n                    <nui-select-v2-option\n                        *ngFor=\"let chartType of chartTypes\"\n                        [displayValueContext]=\"chartType.label\"\n                        [value]=\"chartType.id\"\n                    >\n                        {{ chartType.label }}\n                    </nui-select-v2-option>\n                </nui-select-v2>\n                <nui-validation-message for=\"required\" i18n>\n                    This field is required\n                </nui-validation-message>\n            </nui-form-field>\n        </div>\n\n        <!-- legend placement -->\n        <div class=\"mb-4\">\n            <nui-form-field\n                caption=\"Legend\"\n                i18n-caption\n                [showOptionalText]=\"false\"\n                [control]=\"form.controls['legendPlacement']\"\n            >\n                <nui-select-v2\n                    formControlName=\"legendPlacement\"\n                    [popupViewportMargin]=\"configuratorHeading.height$ | async\"\n                >\n                    <nui-select-v2-option\n                        *ngFor=\"let option of legendPlacementOptions\"\n                        [value]=\"option.id\"\n                    >\n                        {{ option.label }}\n                    </nui-select-v2-option>\n                </nui-select-v2>\n                <nui-validation-message for=\"required\" i18n>\n                    This field is required\n                </nui-validation-message>\n            </nui-form-field>\n        </div>\n\n        <!-- legend formatter -->\n        <div class=\"mb-4\">\n            <ng-container formGroupName=\"legendFormatter\">\n                <nui-form-field\n                    caption=\"Legend format\"\n                    i18n-caption\n                    [showOptionalText]=\"false\"\n                    [control]=\"legendFormatterControl\"\n                >\n                    <nui-select-v2\n                        formControlName=\"componentType\"\n                        [popupViewportMargin]=\"\n                            configuratorHeading.height$ | async\n                        \"\n                    >\n                        <nui-select-v2-option\n                            *ngFor=\"let legendFormatter of legendFormatters\"\n                            [value]=\"legendFormatter.componentType\"\n                        >\n                            {{ legendFormatter.label }}\n                        </nui-select-v2-option>\n                    </nui-select-v2>\n                    <nui-validation-message for=\"required\" i18n>\n                        This field is required\n                    </nui-validation-message>\n                </nui-form-field>\n            </ng-container>\n        </div>\n    </div>\n</nui-widget-editor-accordion>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup } from \"@angular/forms\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IDataField, IDataSource, IEvent } from \"@nova-ui/bits\";\n\nimport { ProportionalWidgetChartTypes } from \"../../../../../components/proportional-widget/types\";\nimport {\n    IFormatter,\n    IFormatterConfigurator,\n    IFormatterDefinition,\n} from \"../../../../../components/types\";\nimport {\n    IProportionalDonutContentAggregator,\n    IProportionalDonutContentAggregatorDefinition,\n} from \"../../../../../functions/proportional-aggregators/types\";\nimport { ProportionalContentAggregatorsRegistryService } from \"../../../../../services/proportional-content-aggregators-registry.service\";\nimport { ProportionalDonutContentFormattersRegistryService } from \"../../../../../services/table-formatter-registry.service\";\nimport { IHasChangeDetector, PIZZAGNA_EVENT_BUS } from \"../../../../../types\";\nimport { DATA_SOURCE_CREATED } from \"../../../../types\";\nimport { IAggregatorConfiguratorProperties } from \"../aggregators-configurators/aggregator-configurator/aggregator-configurator.component\";\n\n@Component({\n    selector: \"nui-donut-content-configuration\",\n    templateUrl: \"./donut-content-configuration.component.html\",\n    styleUrls: [\"./donut-content-configuration.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class DonutContentConfigurationComponent\n    implements OnInit, OnChanges, IHasChangeDetector, OnDestroy\n{\n    static lateLoadKey = \"DonutContentConfigurationComponent\";\n\n    @Input() public chartType: ProportionalWidgetChartTypes;\n    @Input() public formatter: IFormatter;\n    @Input() public aggregator: IProportionalDonutContentAggregator;\n\n    @Output() public formReady = new EventEmitter();\n\n    public shown: boolean = true;\n    public form = this.formBuilder.group({\n        formatter: this.formBuilder.group({\n            componentType: [\"\"],\n            properties: [],\n        }),\n        aggregator: this.formBuilder.group({\n            aggregatorType: [\"\"],\n            properties: [],\n        }),\n    });\n    public formatters: IFormatterDefinition[];\n    public aggregators: IProportionalDonutContentAggregatorDefinition[];\n    public dataFields: IDataField[] = [];\n\n    public currentFormatterDefinition: IFormatterDefinition | undefined;\n    public formatterConfiguratorProps: IFormatterConfigurator;\n\n    public currentAggregatorDefinition:\n        | IProportionalDonutContentAggregatorDefinition\n        | undefined;\n    public aggregatorConfiguratorProps: IAggregatorConfiguratorProperties;\n\n    private readonly destroy$ = new Subject<void>();\n\n    constructor(\n        private formBuilder: FormBuilder,\n        public changeDetector: ChangeDetectorRef,\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>,\n        private contentFormattersRegistry: ProportionalDonutContentFormattersRegistryService,\n        private aggregatorRegistry: ProportionalContentAggregatorsRegistryService\n    ) {}\n\n    public ngOnInit(): void {\n        this.watchFormChanges();\n        this.setFromRegistry();\n\n        this.eventBus\n            .getStream(DATA_SOURCE_CREATED)\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((event: IEvent<IDataSource>) => {\n                const dataSource = event.payload;\n                if (dataSource) {\n                    dataSource.dataFieldsConfig?.dataFields$\n                        .pipe(takeUntil(this.destroy$))\n                        .subscribe((dataFields) => {\n                            this.dataFields = dataFields;\n                            this.updateAggregatorConfiguratorProps();\n                        });\n                }\n            });\n\n        this.formReady.emit(this.form);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.formatter) {\n            this.form.get(\"formatter\")?.patchValue({\n                ...changes.formatter.currentValue,\n            });\n        }\n\n        if (changes.aggregator) {\n            this.form.get(\"aggregator\")?.patchValue({\n                ...changes.aggregator.currentValue,\n            });\n        }\n\n        if (changes.chartType) {\n            const chartType = changes.chartType.currentValue;\n            this.shown = chartType === ProportionalWidgetChartTypes.DonutChart;\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.complete();\n    }\n\n    public onFormReady(formControlName: string, form: FormGroup): void {\n        (<FormGroup>this.form.get(formControlName)).setControl(\n            \"properties\",\n            form\n        );\n    }\n\n    public get subtitleText(): string {\n        return `${this.currentAggregatorDefinition?.label}, ${this.currentFormatterDefinition?.label}`;\n    }\n\n    private setFromRegistry() {\n        this.formatters = this.contentFormattersRegistry.getItems();\n        this.aggregators = this.aggregatorRegistry.getItems();\n\n        let formatterToSet = this.formatters.find(\n            (formatter) =>\n                formatter.componentType === this.formatter?.componentType\n        );\n        if (!formatterToSet) {\n            formatterToSet = this.formatters[0];\n        }\n        this.form\n            .get(\"formatter.componentType\")\n            ?.setValue(formatterToSet.componentType);\n\n        let aggregatorToSet = this.aggregators.find(\n            (aggregator) =>\n                aggregator.aggregatorType === this.aggregator?.aggregatorType\n        );\n        if (!aggregatorToSet) {\n            aggregatorToSet = this.aggregators[0];\n        }\n        this.form\n            .get(\"aggregator.aggregatorType\")\n            ?.setValue(aggregatorToSet.aggregatorType);\n    }\n\n    private watchFormChanges() {\n        this.form\n            .get(\"aggregator.aggregatorType\")\n            ?.valueChanges.pipe(takeUntil(this.destroy$))\n            .subscribe((type: string | null) => {\n                this.currentAggregatorDefinition = this.aggregators.find(\n                    ({ aggregatorType }) => aggregatorType === type\n                ) as IProportionalDonutContentAggregatorDefinition;\n                this.updateAggregatorConfiguratorProps();\n            });\n\n        this.form\n            .get(\"formatter.componentType\")\n            ?.valueChanges.pipe(takeUntil(this.destroy$))\n            .subscribe((type: string | null) => {\n                this.currentFormatterDefinition = this.formatters.find(\n                    ({ componentType }) => componentType === type\n                ) as IFormatterDefinition;\n                this.updateAggregatorConfiguratorProps();\n            });\n    }\n\n    private updateAggregatorConfiguratorProps() {\n        this.aggregatorConfiguratorProps = {\n            ...this.currentAggregatorDefinition?.properties,\n            ...this.aggregator?.properties,\n            metrics: this.dataFields,\n        };\n    }\n}\n","<ng-container *ngIf=\"shown\" [formGroup]=\"form\">\n    <nui-widget-editor-accordion\n        [state]=\"form | nuiWidgetEditorAccordionFormState | async\"\n    >\n        <div accordionHeader class=\"d-flex align-items-center px-4 py-2\">\n            <nui-icon\n                class=\"align-self-start pt-2\"\n                [icon]=\"form | nuiFormHeaderIconPipe : 'customize' | async\"\n            ></nui-icon>\n            <div class=\"d-flex flex-column ml-4 pt-1\">\n                <span class=\"nui-text-label\" i18n\n                    >Donut Content Configuration</span\n                >\n                <div class=\"nui-text-secondary\" [title]=\"subtitleText\">\n                    {{ subtitleText }}\n                </div>\n            </div>\n        </div>\n\n        <div class=\"donut-content-configuration__accordion-content\">\n            <!-- aggregator -->\n            <div class=\"mb-4\" formGroupName=\"aggregator\">\n                <nui-form-field\n                    caption=\"Aggregate\"\n                    i18n-caption\n                    [control]=\"form.get('aggregator.aggregatorType')\"\n                >\n                    <nui-select-v2\n                        placeholder=\"Select Format\"\n                        i18n-placeholder\n                        formControlName=\"aggregatorType\"\n                    >\n                        <nui-select-v2-option\n                            *ngFor=\"let aggregator of aggregators\"\n                            [displayValueContext]=\"aggregator.label\"\n                            [value]=\"aggregator.aggregatorType\"\n                        >\n                            {{ aggregator.label }}\n                        </nui-select-v2-option>\n                    </nui-select-v2>\n                </nui-form-field>\n            </div>\n\n            <!-- formatter -->\n            <div class=\"mb-4\" formGroupName=\"formatter\">\n                <nui-form-field\n                    caption=\"Format\"\n                    i18n-caption\n                    [control]=\"form.get('formatter.componentType')\"\n                >\n                    <nui-select-v2\n                        placeholder=\"Select Format\"\n                        i18n-placeholder\n                        formControlName=\"componentType\"\n                    >\n                        <nui-select-v2-option\n                            *ngFor=\"let formatter of formatters\"\n                            [displayValueContext]=\"formatter.label\"\n                            [value]=\"formatter.componentType\"\n                        >\n                            {{ formatter.label }}\n                        </nui-select-v2-option>\n                    </nui-select-v2>\n                </nui-form-field>\n            </div>\n\n            <!-- aggregator configuration component -->\n            <ng-container\n                *ngIf=\"currentAggregatorDefinition?.configurationComponent\"\n                nuiComponentPortal\n                componentId=\"formatterConfigurator\"\n                [componentType]=\"\n                    currentAggregatorDefinition?.configurationComponent\n                \"\n                [properties]=\"aggregatorConfiguratorProps\"\n                [outputs]=\"['formReady']\"\n                (output)=\"onFormReady('aggregator', $event.payload)\"\n                #componentPortal=\"nuiComponentPortal\"\n            >\n                <ng-template\n                    [cdkPortalOutlet]=\"componentPortal.portal\"\n                    (attached)=\"componentPortal.attached($event)\"\n                ></ng-template>\n            </ng-container>\n\n            <!-- formatter configuration component -->\n            <ng-container\n                *ngIf=\"currentFormatterDefinition?.configurationComponent\"\n                nuiComponentPortal\n                componentId=\"formatterConfigurator\"\n                [componentType]=\"\n                    currentFormatterDefinition?.configurationComponent\n                \"\n                [properties]=\"formatterConfiguratorProps\"\n                [outputs]=\"['formReady']\"\n                (output)=\"onFormReady('formatter', $event.payload)\"\n                #componentPortal=\"nuiComponentPortal\"\n            >\n                <ng-template\n                    [cdkPortalOutlet]=\"componentPortal.portal\"\n                    (attached)=\"componentPortal.attached($event)\"\n                ></ng-template>\n            </ng-container>\n        </div>\n    </nui-widget-editor-accordion>\n</ng-container>\n","// © 2023 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Inject,\n    Input,\n    OnChanges,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport {\n    AbstractControl,\n    FormArray,\n    FormBuilder,\n    FormGroup,\n} from \"@angular/forms\";\nimport { Observable } from \"rxjs\";\nimport { map } from \"rxjs/operators\";\n\nimport { EventBus, IEvent, uuid } from \"@nova-ui/bits\";\n\nimport { RiskScoreTileComponent } from \"../../../../../components/risk-score-tile/risk-score-tile.component\";\nimport { IPizzagnaProperty } from \"../../../../../pizzagna/functions/get-pizzagna-property-path\";\nimport { PizzagnaService } from \"../../../../../pizzagna/services/pizzagna.service\";\nimport {\n    IHasChangeDetector,\n    IHasForm,\n    PizzagnaLayer,\n    PIZZAGNA_EVENT_BUS,\n} from \"../../../../../types\";\nimport { IItemConfiguration } from \"../../../types\";\nimport { IRiskScoreItemConfiguration } from \"../types\";\n\n/**\n * This component and its related form represent a collection of KPI tile configuration components\n */\n@Component({\n    selector: \"nui-risk-score-tiles-configuration-component\",\n    templateUrl: \"./risk-score-tiles-configuration.component.html\",\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class RiskScoreTilesConfigurationComponent\n    implements IHasChangeDetector, IHasForm, OnChanges\n{\n    static lateLoadKey = \"RiskScoreTilesConfigurationComponent\";\n\n    @Input() componentId: string;\n    @Input() tiles: IRiskScoreItemConfiguration[] = [];\n    @Input() nodes: string[];\n\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    public form: FormGroup;\n    public emptyItems$: Observable<boolean>;\n\n    constructor(\n        public pizzagnaService: PizzagnaService,\n        public changeDetector: ChangeDetectorRef,\n        private formBuilder: FormBuilder,\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>\n    ) {}\n\n    ngOnChanges(changes: SimpleChanges): void {}\n\n    public onFormReady(form: AbstractControl): void {\n        this.form = this.formBuilder.group({\n            tiles: form as FormArray,\n        });\n\n        this.emptyItems$ = this.form.valueChanges.pipe(\n            map((result) => result.tiles.length === 0)\n        );\n        this.formReady.emit(this.form);\n    }\n\n    public onItemsChange(tiles: IItemConfiguration[]): void {\n        const parentPath = \"tiles\";\n        const componentIds = tiles.map((tile) => tile.id);\n        this.pizzagnaService.createComponentsFromTemplate(\n            parentPath,\n            componentIds\n        );\n\n        const property: IPizzagnaProperty = {\n            componentId: this.componentId,\n            pizzagnaKey: PizzagnaLayer.Data,\n            propertyPath: [\"tiles\"],\n        };\n        this.pizzagnaService.setProperty(property, tiles);\n    }\n\n    public addTile(): void {\n        this.onItemsChange([\n            ...this.tiles,\n            {\n                id: uuid(\"riskScore\"),\n                componentType: RiskScoreTileComponent.lateLoadKey,\n            },\n        ]);\n    }\n}\n","<nui-items-dynamic\n    [items]=\"tiles\"\n    [nodes]=\"nodes\"\n    (itemsChange)=\"onItemsChange($event)\"\n    (formReady)=\"onFormReady($event)\"\n></nui-items-dynamic>\n\n<div class=\"pl-4 pr-4\" *ngIf=\"(emptyItems$ | async) && form.touched\">\n    <nui-message type=\"critical\" [allowDismiss]=\"false\" i18n>\n        <b>At least one value must be added.</b>\n    </nui-message>\n</div>\n\n<button\n    nui-button\n    icon=\"add\"\n    displayStyle=\"action\"\n    id=\"kpi-widget-add-indicator-btn\"\n    type=\"button\"\n    class=\"ml-4 mb-4\"\n    (click)=\"addTile()\"\n    i18n\n>\n    Add new value\n</button>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\n\nimport { IHasChangeDetector } from \"../../../../../../../types\";\n\n@Component({\n    selector: \"nui-table-column-description-configuration\",\n    templateUrl: \"./description-configuration.component.html\",\n    styleUrls: [\"./description-configuration.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class DescriptionConfigurationComponent\n    implements OnInit, OnDestroy, OnChanges, IHasChangeDetector\n{\n    static lateLoadKey = \"DescriptionConfigurationComponent\";\n\n    @Input() label: string;\n    @Input() isActive: string;\n    @Input() width: number;\n    @Input() isWidthMessageDisplayed: boolean;\n\n    @Output() formReady: EventEmitter<FormGroup> =\n        new EventEmitter<FormGroup>();\n    @Output() formDestroy: EventEmitter<FormGroup> =\n        new EventEmitter<FormGroup>();\n\n    public form: FormGroup;\n\n    constructor(\n        private formBuilder: FormBuilder,\n        public changeDetector: ChangeDetectorRef\n    ) {}\n\n    public ngOnInit(): void {\n        this.form = this.formBuilder.group({\n            label: [this.label || null, [Validators.required]],\n            isActive: this.isActive ?? true,\n            width: this.width || undefined,\n        });\n\n        this.formReady.emit(this.form);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.label) {\n            this.form?.patchValue({ label: changes.label.currentValue });\n        }\n        if (changes.isActive) {\n            this.form?.patchValue({ isActive: changes.isActive.currentValue });\n        }\n        if (changes.width) {\n            this.form?.patchValue({ width: changes.width.currentValue });\n        }\n    }\n\n    public stub(): void {}\n\n    public ngOnDestroy(): void {\n        this.formDestroy.emit(this.form);\n    }\n}\n","<ng-container [formGroup]=\"form\">\n    <nui-widget-editor-accordion\n        [state]=\"form | nuiWidgetEditorAccordionFormState | async\"\n    >\n        <nui-widget-editor-accordion-header\n            [headerIcon]=\"form | nuiFormHeaderIconPipe : 'widget_list' | async\"\n            [subtitle]=\"form.controls['label'].value\"\n            headerTitle=\"Description\"\n        />\n        <div class=\"description-configuration__accordion-content\">\n            <div class=\"mb-4\">\n                <nui-form-field\n                    caption=\"Label\"\n                    i18n-caption\n                    class=\"mb-3\"\n                    [control]=\"form.controls['label']\"\n                >\n                    <nui-textbox formControlName=\"label\"></nui-textbox>\n                    <nui-validation-message for=\"required\" i18n>\n                        This field is required\n                    </nui-validation-message>\n                </nui-form-field>\n            </div>\n\n            <nui-form-field [control]=\"form.controls['isActive']\">\n                <nui-checkbox formControlName=\"isActive\" i18n\n                    >Show this column</nui-checkbox\n                >\n            </nui-form-field>\n\n            <ng-container *ngIf=\"form.get('isActive')?.value\">\n                <ng-container *ngIf=\"!isWidthMessageDisplayed\">\n                    <div class=\"mt-4\">\n                        <nui-form-field\n                            caption=\"Column width (px)\"\n                            i18n-caption\n                            class=\"mb-3\"\n                            [control]=\"form.controls['width']\"\n                        >\n                            <!-- TODO: Remove this valueChange stub after NUI-3442 is finished-->\n                            <nui-textbox-number\n                                class=\"description-configuration__accordion-content__width-input\"\n                                (valueChange)=\"stub()\"\n                                placeholder=\"Auto width\"\n                                i18n-placeholder\n                                formControlName=\"width\"\n                            ></nui-textbox-number>\n                            <nui-validation-message\n                                [show]=\"form.controls['width'].invalid\"\n                                for=\"min\"\n                                i18n\n                            >\n                                Minimum width of the column is 62px\n                            </nui-validation-message>\n                        </nui-form-field>\n                    </div>\n                </ng-container>\n                <nui-message\n                    *ngIf=\"isWidthMessageDisplayed\"\n                    type=\"info\"\n                    [allowDismiss]=\"false\"\n                    i18n\n                >\n                    <b>All columns can not have fixed width.</b>\n                </nui-message>\n            </ng-container>\n        </div>\n    </nui-widget-editor-accordion>\n</ng-container>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    EventEmitter,\n    Injectable,\n    Input,\n    OnChanges,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\n\nimport { IDataField, LoggerService } from \"@nova-ui/bits\";\n\nimport {\n    IFormatter,\n    IFormatterConfigurator,\n    IFormatterDefinition,\n} from \"../../../../../../../../components/types\";\nimport { IHasChangeDetector, IHasForm } from \"../../../../../../../../types\";\nimport { ConfiguratorHeadingService } from \"../../../../../../../services/configurator-heading.service\";\n\n@Injectable()\nexport abstract class FormatterConfiguratorComponent\n    implements IFormatterConfigurator, IHasChangeDetector, IHasForm, OnChanges\n{\n    @Input() formatter: IFormatter;\n    @Input() formatterDefinition: IFormatterDefinition;\n    @Input() dataFields: IDataField[];\n    @Input() formArrayName: string;\n\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    public form: FormGroup;\n    public dropdownItems: Record<string, IDataField[]> = {};\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        public configuratorHeading: ConfiguratorHeadingService,\n        protected formBuilder: FormBuilder,\n        public logger: LoggerService\n    ) {}\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.formatterDefinition) {\n            this.mapDropdownItems();\n            this.initForm();\n        }\n        if (changes.dataFields) {\n            this.mapDropdownItems();\n        }\n        if (changes.formatter) {\n            this.updateForm();\n        }\n    }\n\n    /**\n     * This method pregenerates lists of dropdown items for all required formatter columns mappings based on their type\n     */\n    public mapDropdownItems(): void {\n        if (!this.dataFields) {\n            this.logger.error(\n                \"There are no dataFields defined for formatter:\",\n                this.formatterDefinition\n            );\n            return;\n        }\n\n        this.dropdownItems = Object.keys(\n            this.formatterDefinition.dataTypes\n        ).reduce((result, next) => {\n            const allowedDataTypes = this.formatterDefinition.dataTypes[next];\n\n            result[next] = allowedDataTypes\n                ? this.dataFields.filter((df) =>\n                      // dataTypes could be a string or an array of strings, so we're checking that here\n                      typeof allowedDataTypes === \"string\"\n                          ? df.dataType === allowedDataTypes\n                          : (allowedDataTypes as string[]).includes(df.dataType)\n                  )\n                : // if no data types are defined then just include all the fields\n                  this.dataFields;\n\n            return result;\n        }, {} as Record<string, IDataField[]>);\n    }\n\n    get dataFieldIds(): FormGroup {\n        return this.form.get(\"dataFieldIds\") as FormGroup;\n    }\n\n    public initForm(): void {\n        // initialize the formArray with selected values or null\n        const dataFieldsDefinition = this.formatterDefinition.dataTypes || {};\n        const dataFieldForm = Object.keys(dataFieldsDefinition).reduce(\n            (result, next) => {\n                result[next] = [\n                    this.formatter?.properties?.dataFieldIds?.[next] ?? null,\n                    Validators.required,\n                ];\n                return result;\n            },\n            {} as Record<string, any>\n        );\n\n        this.form = this.formBuilder.group({\n            dataFieldIds: this.formBuilder.group(dataFieldForm),\n        });\n\n        this.addCustomFormControls(this.form);\n\n        this.formReady.emit(this.form);\n    }\n\n    protected updateForm(): void {\n        this.form.patchValue(this.formatter.properties ?? {}, {\n            onlySelf: false,\n            emitEvent: false,\n        });\n    }\n\n    /**\n     * Add your custom form controls here\n     *\n     * @param form\n     */\n    protected addCustomFormControls(form: FormGroup): void {}\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { ChangeDetectorRef, Component } from \"@angular/core\";\nimport { FormBuilder, Validators } from \"@angular/forms\";\n\nimport { LoggerService } from \"@nova-ui/bits\";\n\nimport { IHasChangeDetector } from \"../../../../../../../../../types\";\nimport { ConfiguratorHeadingService } from \"../../../../../../../../services/configurator-heading.service\";\nimport { FormatterConfiguratorComponent } from \"../formatter-configurator.component\";\n\n@Component({\n    selector: \"nui-link-configurator\",\n    templateUrl: \"./link-configurator.component.html\",\n    standalone: false,\n})\nexport class LinkConfiguratorComponent\n    extends FormatterConfiguratorComponent\n    implements IHasChangeDetector\n{\n    public static lateLoadKey = \"LinkConfiguratorComponent\";\n\n    constructor(\n        changeDetector: ChangeDetectorRef,\n        configuratorHeading: ConfiguratorHeadingService,\n        formBuilder: FormBuilder,\n        logger: LoggerService\n    ) {\n        super(changeDetector, configuratorHeading, formBuilder, logger);\n    }\n\n    public initForm(): void {\n        const dataFieldForm: Record<string, any> = {\n            link: [null, Validators.required],\n            value: [null, Validators.required],\n        };\n\n        this.form = this.formBuilder.group({\n            dataFieldIds: this.formBuilder.group(dataFieldForm),\n            targetSelf: [false],\n        });\n\n        this.formReady.emit(this.form);\n    }\n}\n","<div [formGroup]=\"form\">\n    <div formGroupName=\"dataFieldIds\">\n        <div class=\"mb-4\">\n            <nui-form-field\n                caption=\"Label\"\n                i18n-caption=\"\n                    label field caption| the entity field to be selected for the\n                    html label property\n                \"\n                class=\"mb-3\"\n                [control]=\"dataFieldIds.controls['value']\"\n            >\n                <nui-select-v2 formControlName=\"value\">\n                    <nui-select-v2-option\n                        *ngFor=\"let itemValue of dropdownItems.value\"\n                        [value]=\"itemValue.id\"\n                    >\n                        {{ itemValue.label }}\n                    </nui-select-v2-option>\n                </nui-select-v2>\n                <nui-validation-message for=\"required\" i18n>\n                    This field is required\n                </nui-validation-message>\n            </nui-form-field>\n        </div>\n        <div>\n            <nui-form-field\n                caption=\"URL\"\n                i18n-caption=\"\n                    url field caption| the entity field to be selected for the\n                    url html property\n                \"\n                class=\"mb-3\"\n                [control]=\"dataFieldIds.controls['link']\"\n            >\n                <nui-select-v2 formControlName=\"link\">\n                    <nui-select-v2-option\n                        *ngFor=\"let itemLink of dropdownItems.link\"\n                        [value]=\"itemLink.id\"\n                    >\n                        {{ itemLink.label }}\n                    </nui-select-v2-option>\n                </nui-select-v2>\n                <nui-validation-message for=\"required\" i18n>\n                    This field is required\n                </nui-validation-message>\n            </nui-form-field>\n        </div>\n    </div>\n    <div>\n        <nui-form-field\n            caption=\"Open in the same window\"\n            i18n-caption=\"\n                form field caption|switch configuring whether formatted link\n                should open in new window/tab\n            \"\n            class=\"mb-3\"\n            [control]=\"form.controls.targetSelf\"\n        >\n            <nui-switch id=\"nui-switch-target\" formControlName=\"targetSelf\">\n            </nui-switch>\n        </nui-form-field>\n    </div>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { ChangeDetectorRef, Component } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { LoggerService } from \"@nova-ui/bits\";\n\nimport { ConfiguratorHeadingService } from \"../../../../../../../../services/configurator-heading.service\";\nimport { FormatterConfiguratorComponent } from \"../formatter-configurator.component\";\n\n/** @ignore */\n@Component({\n    selector: \"nui-value-selector\",\n    templateUrl: \"./value-selector.component.html\",\n    standalone: false,\n})\nexport class ValueSelectorComponent extends FormatterConfiguratorComponent {\n    static lateLoadKey = \"ValueSelectorComponent\";\n\n    constructor(\n        changeDetector: ChangeDetectorRef,\n        configuratorHeading: ConfiguratorHeadingService,\n        formBuilder: FormBuilder,\n        logger: LoggerService\n    ) {\n        super(changeDetector, configuratorHeading, formBuilder, logger);\n    }\n}\n","<div *ngIf=\"form\" [formGroup]=\"form\">\n    <div formGroupName=\"dataFieldIds\">\n        <nui-form-field\n            caption=\"Value\"\n            i18n-caption\n            class=\"mb-3\"\n            [control]=\"dataFieldIds.controls['value']\"\n        >\n            <nui-select-v2\n                formControlName=\"value\"\n                [popupViewportMargin]=\"configuratorHeading.height$ | async\"\n                placeholder=\"Select Value\"\n                i18n-placeholder\n            >\n                <nui-select-v2-option\n                    *ngFor=\"let itemValue of dropdownItems.value\"\n                    [displayValueContext]=\"itemValue.label\"\n                    [value]=\"itemValue.id\"\n                >\n                    {{ itemValue.label }}\n                </nui-select-v2-option>\n            </nui-select-v2>\n            <nui-validation-message for=\"required\" i18n>\n                This field is required\n            </nui-validation-message>\n        </nui-form-field>\n    </div>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Optional,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport {\n    ControlContainer,\n    FormBuilder,\n    FormGroup,\n    FormGroupDirective,\n    Validators,\n} from \"@angular/forms\";\nimport capitalize from \"lodash/capitalize\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil, tap } from \"rxjs/operators\";\n\nimport { IDataField } from \"@nova-ui/bits\";\n\nimport {\n    IFormatter,\n    IFormatterConfigurator,\n    IFormatterDefinition,\n} from \"../../../../../../../components/types\";\nimport {\n    FormatterRegistryService,\n    TableFormatterRegistryService,\n} from \"../../../../../../../services/table-formatter-registry.service\";\nimport {\n    FORMATTERS_REGISTRY,\n    IHasChangeDetector,\n} from \"../../../../../../../types\";\nimport { ConfiguratorHeadingService } from \"../../../../../../services/configurator-heading.service\";\n\n@Component({\n    selector: \"nui-table-column-presentation-configuration\",\n    templateUrl: \"./presentation-configuration.component.html\",\n    styleUrls: [\"./presentation-configuration.component.less\"],\n    viewProviders: [\n        { provide: ControlContainer, useExisting: FormGroupDirective },\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class PresentationConfigurationComponent\n    implements IHasChangeDetector, OnInit, OnDestroy, OnChanges, AfterViewInit\n{\n    static lateLoadKey = \"PresentationConfigurationComponent\";\n\n    private _providedFormatters: Array<IFormatterDefinition> = [];\n    private _formatters: Array<IFormatterDefinition> = [];\n    @Input() formatter: IFormatter;\n\n    @Input()\n    public set formatters(formatters: Array<IFormatterDefinition>) {\n        // Note: As discussed we will ignore the config formatters if\n        // the user already provided formatters via registry\n        if (!this.tableFormattersRegistryService.isEmpty) {\n            return;\n        }\n        this.handleFormattersUpdate(formatters);\n    }\n\n    public get formatters(): IFormatterDefinition[] {\n        return this._formatters;\n    }\n\n    @Input() public dataFieldIds: string[];\n\n    private _dataFields: Array<IDataField> = [];\n    @Input()\n    public set dataFields(dataFields: Array<IDataField>) {\n        this._dataFields = dataFields;\n        this.updateAvailableFormatters();\n    }\n\n    public get dataFields(): IDataField[] {\n        return this._dataFields;\n    }\n\n    @Output() formReady: EventEmitter<FormGroup> =\n        new EventEmitter<FormGroup>();\n    @Output() formDestroy: EventEmitter<FormGroup> =\n        new EventEmitter<FormGroup>();\n\n    public form: FormGroup;\n    public formatterForm: FormGroup = this.formBuilder.group({});\n\n    public formatterConfigurator: string | null;\n    public formatterConfiguratorProps: IFormatterConfigurator;\n    public readonly formatterFormGroupName = \"formatter\";\n    public subtitleText: string;\n    private onDestroy$: Subject<void> = new Subject<void>();\n\n    constructor(\n        private formBuilder: FormBuilder,\n        public changeDetector: ChangeDetectorRef,\n        public configuratorHeading: ConfiguratorHeadingService,\n        @Optional()\n        @Inject(FORMATTERS_REGISTRY)\n        private formattersRegistryCommon: FormatterRegistryService,\n        // used as a fallback, remove in vNext\n        /**\n         * @deprecated  will be removed in the scope of NUI-5839\n         */\n        private tableFormattersRegistryService: TableFormatterRegistryService\n    ) {\n        this.subscribeToFormattersRegistry();\n    }\n\n    public ngOnInit(): void {\n        this.formatterForm = this.formBuilder.group({\n            componentType: [\n                (this.formatter && this.formatter.componentType) ||\n                    (this._providedFormatters &&\n                        this._providedFormatters.length > 0 &&\n                        this._providedFormatters[0].componentType),\n                [Validators.required],\n            ],\n        });\n        this.form = this.formBuilder.group({\n            [this.formatterFormGroupName]: this.formatterForm,\n        });\n\n        this.formatterForm\n            .get(\"componentType\")\n            ?.valueChanges.pipe(takeUntil(this.onDestroy$))\n            .subscribe(() => this.createFormatterConfigurator());\n\n        this.createFormatterConfigurator();\n        this.formReady.emit(this.form);\n        this.formatterForm.valueChanges\n            .pipe(takeUntil(this.onDestroy$))\n            .subscribe(() => {\n                this.updateSubtitle();\n                this.changeDetector.detectChanges();\n            });\n    }\n\n    public ngAfterViewInit(): void {}\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.dataFieldIds) {\n            const { currentValue, previousValue } = changes.dataFieldIds;\n\n            if (currentValue && currentValue !== previousValue) {\n                const dataFields = currentValue.map(\n                    (df: string) =>\n                        ({\n                            id: df,\n                            label: capitalize(df),\n                        } as IDataField)\n                );\n\n                this.dataFields = dataFields;\n                this.updateSubtitle();\n            }\n        }\n\n        if (changes.formatter) {\n            this.form?.patchValue(\n                {\n                    [this.formatterFormGroupName]:\n                        changes.formatter.currentValue,\n                },\n                { emitEvent: false }\n            );\n            this.updateSubtitle();\n        }\n\n        if (\n            changes.dataFields &&\n            changes.dataFields.previousValue.length === 0 &&\n            this.formatterForm\n        ) {\n            this.updateSubtitle();\n        }\n    }\n\n    public getSelectedFormatterDefinition(): IFormatterDefinition | null {\n        if (this._providedFormatters.length > 0) {\n            const formatterId = this.formatterForm.get(\"componentType\")?.value;\n            return (\n                this._providedFormatters.find(\n                    (formatter) => formatter.componentType === formatterId\n                ) ?? null\n            );\n        }\n        return null;\n    }\n\n    public getSelectedDataField(): IDataField | null {\n        const propertiesControl = this.formatterForm.controls[\"properties\"];\n        if (\n            propertiesControl &&\n            this.dataFields &&\n            this.dataFields.length > 0\n        ) {\n            const dataFieldId =\n                propertiesControl.get(\"dataFieldIds\")?.value.value;\n            return (\n                this.dataFields.find(\n                    (dataField) => dataField.id === dataFieldId\n                ) ?? null\n            );\n        }\n        return null;\n    }\n\n    public onFormReady(form: FormGroup): void {\n        (this.form.get(this.formatterFormGroupName) as FormGroup).setControl(\n            \"properties\",\n            form\n        );\n    }\n\n    private updateSubtitle() {\n        this.subtitleText = `${this.getSelectedFormatterDefinition()?.label}`;\n        if (this.getSelectedDataField()) {\n            this.subtitleText = this.subtitleText.concat(\n                `, ${this.getSelectedDataField()?.label}`\n            );\n        }\n    }\n\n    /**\n     * Creates portal for dynamic configuration of formatter value.\n     * @returns ComponentPortal\n     */\n    private createFormatterConfigurator() {\n        const formatterDefinition = this._providedFormatters.find(\n            (formatter) =>\n                formatter.componentType ===\n                this.formatterForm.get(\"componentType\")?.value\n        );\n\n        // if configurationComponent property is present in formatters configuration, use it to render portal,\n        // otherwise, use default ValueSelectorComponent\n        if (formatterDefinition) {\n            this.formatterConfigurator =\n                formatterDefinition.configurationComponent ??\n                \"ValueSelectorComponent\";\n        } else {\n            this.formatterConfigurator = null;\n        }\n\n        // if the currently selected component doesn't match the original value from the input then we reset the form values\n        if (\n            formatterDefinition?.componentType !==\n                this.formatter?.componentType &&\n            this.formatter?.properties?.dataFieldIds\n        ) {\n            this.formatter.properties.dataFieldIds = { value: null };\n        }\n\n        this.formatterConfiguratorProps = {\n            dataFields: this.dataFields,\n            formatter: this.formatter,\n            // TODO: Ensure that formatterDefinition is not undefined\n            formatterDefinition: formatterDefinition as IFormatterDefinition,\n        };\n    }\n\n    private updateAvailableFormatters() {\n        if (!this._dataFields.length || !this._providedFormatters.length) {\n            return;\n        }\n\n        // allow by default RawFormatter which has null as dataType\n        const sourceDataTypes: Record<string, boolean> = { null: true };\n        this._dataFields.forEach((f) => (sourceDataTypes[f.dataType] = true));\n        this._formatters = this._providedFormatters.filter((f) => {\n            // cast to array in case we have a single value\n            const formatterDataTypes =\n                f.dataTypes.value instanceof Array\n                    ? f.dataTypes.value\n                    : [f.dataTypes.value];\n\n            return formatterDataTypes.some((v) => sourceDataTypes[v]);\n        });\n        if (this.formatterForm) {\n            this.createFormatterConfigurator();\n        }\n    }\n\n    private subscribeToFormattersRegistry(): void {\n        this.handleFormattersUpdate(this.formattersRegistry.getItems());\n\n        this.formattersRegistry.stateChanged$\n            .pipe(\n                tap(this.handleFormattersUpdate.bind(this)),\n                takeUntil(this.onDestroy$)\n            )\n            .subscribe();\n    }\n\n    private handleFormattersUpdate(formatters: IFormatterDefinition[]): void {\n        if (formatters !== this._providedFormatters) {\n            this._providedFormatters = formatters;\n            this.updateAvailableFormatters();\n        }\n    }\n\n    /**\n     * Fallback for table,\n     *\n     * nothing should go wrong, but in case \"FORMATTERS_REGISTRY\" is lost, get table registry\n     */\n    private get formattersRegistry() {\n        return (\n            this.formattersRegistryCommon || this.tableFormattersRegistryService\n        );\n    }\n\n    public ngOnDestroy(): void {\n        this.formDestroy.emit(this.form);\n        this.onDestroy$.next();\n        this.onDestroy$.complete();\n    }\n}\n","<ng-container [formGroup]=\"formatterForm\">\n    <nui-widget-editor-accordion\n        [state]=\"form | nuiWidgetEditorAccordionFormState | async\"\n    >\n        <nui-widget-editor-accordion-header\n            [headerIcon]=\"form | nuiFormHeaderIconPipe : 'customize' | async\"\n            [subtitle]=\"subtitleText\"\n            headerTitle=\"Property and formatting\"\n        />\n        <div class=\"presentation-configuration__accordion-content\">\n            <div class=\"mb-4\">\n                <nui-form-field\n                    caption=\"Format\"\n                    i18n-caption\n                    [control]=\"formatterForm.controls['componentType']\"\n                >\n                    <nui-select-v2\n                        placeholder=\"Select Format\"\n                        i18n-placeholder\n                        [popupViewportMargin]=\"\n                            configuratorHeading.height$ | async\n                        \"\n                        formControlName=\"componentType\"\n                    >\n                        <nui-select-v2-option\n                            *ngFor=\"let formatter of formatters\"\n                            [displayValueContext]=\"formatter.label\"\n                            [value]=\"formatter.componentType\"\n                        >\n                            {{ formatter.label }}\n                        </nui-select-v2-option>\n                    </nui-select-v2>\n                </nui-form-field>\n            </div>\n            <ng-container\n                *ngIf=\"formatterConfigurator\"\n                nuiComponentPortal\n                componentId=\"formatterConfigurator\"\n                [componentType]=\"formatterConfigurator\"\n                [properties]=\"formatterConfiguratorProps\"\n                [outputs]=\"['formReady']\"\n                (output)=\"onFormReady($event.payload)\"\n                #componentPortal=\"nuiComponentPortal\"\n            >\n                <ng-template\n                    [cdkPortalOutlet]=\"componentPortal.portal\"\n                    (attached)=\"componentPortal.attached($event)\"\n                ></ng-template>\n            </ng-container>\n        </div>\n    </nui-widget-editor-accordion>\n</ng-container>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport {\n    AbstractControl,\n    FormArray,\n    FormBuilder,\n    FormGroup,\n} from \"@angular/forms\";\nimport get from \"lodash/get\";\nimport isUndefined from \"lodash/isUndefined\";\nimport values from \"lodash/values\";\nimport { Observable, Subject } from \"rxjs\";\nimport { map } from \"rxjs/operators\";\n\nimport {\n    DialogService,\n    EventBus,\n    IDataField,\n    IDataSource,\n    IEvent,\n    immutableSet,\n    uuid,\n} from \"@nova-ui/bits\";\n\nimport { IDataSourceOutput } from \"../../../../../components/providers/types\";\nimport { ITableWidgetColumnConfig } from \"../../../../../components/table-widget/types\";\nimport { IFormatterDefinition } from \"../../../../../components/types\";\nimport { IPizzagnaProperty } from \"../../../../../pizzagna/functions/get-pizzagna-property-path\";\nimport { PizzagnaService } from \"../../../../../pizzagna/services/pizzagna.service\";\nimport {\n    ISetPropertyPayload,\n    SET_PROPERTY_VALUE,\n} from \"../../../../../services/types\";\nimport {\n    IHasForm,\n    IPizzagna,\n    PizzagnaLayer,\n    PIZZAGNA_EVENT_BUS,\n    WellKnownDataSourceFeatures,\n} from \"../../../../../types\";\nimport { DATA_SOURCE_CREATED, DATA_SOURCE_OUTPUT } from \"../../../../types\";\n\n@Component({\n    selector: \"nui-table-columns-configuration\",\n    templateUrl: \"./table-columns-configuration.component.html\",\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class TableColumnsConfigurationComponent\n    implements OnInit, IHasForm, OnChanges, OnDestroy\n{\n    static lateLoadKey = \"TableColumnsConfigurationComponent\";\n\n    @Input() columns: ITableWidgetColumnConfig[] = [];\n    @Input() formatters: Array<IFormatterDefinition> = [];\n    @Input() componentId: string;\n    @Input() dataFields: Array<IDataField> = [];\n    @Input() nodes: string[];\n\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    public form: FormGroup;\n    public emptyColumns$: Observable<boolean>;\n\n    // the last selected data source will be stored here\n    public dataSource: IDataSource;\n\n    private onDestroy$: Subject<void> = new Subject<void>();\n\n    // hackfix for NUI-5712\n    // Depending on the timing of pizzagna changes, the incoming value for dataFields may be undefined.\n    // This property ensures that we are only acting on valid values for the data fields.\n    private lastValidDataFields: IDataField[] = [];\n\n    constructor(\n        private formBuilder: FormBuilder,\n        private changeDetector: ChangeDetectorRef,\n        private dialogService: DialogService,\n        private pizzagnaService: PizzagnaService,\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>\n    ) {\n        this.eventBus.subscribeUntil(\n            DATA_SOURCE_CREATED,\n            this.onDestroy$,\n            (event: IEvent<IDataSource>) => {\n                if (!event.payload) {\n                    return;\n                }\n\n                this.dataSource = event.payload;\n            }\n        );\n\n        this.eventBus.subscribeUntil(\n            DATA_SOURCE_OUTPUT,\n            this.onDestroy$,\n            (event: IEvent<any | IDataSourceOutput<any>>) => {\n                // Because typing is lenient for the data source output, the event may or may not contain an IDataSourceOutput\n                // with a result property; the payload may actually be the result itself, so both possibilities are accommodated.\n                const { dataFields } = isUndefined(event.payload.result)\n                    ? event.payload\n                    : event.payload.result || {};\n\n                if (dataFields) {\n                    let formPizzagna: IPizzagna = this.pizzagnaService.pizzagna;\n                    formPizzagna = immutableSet(\n                        formPizzagna,\n                        `${PizzagnaLayer.Data}.columns.properties.dataFields`,\n                        dataFields\n                    );\n\n                    const columnsTemplate =\n                        this.pizzagnaService.pizzagna[PizzagnaLayer.Structure]\n                            .columns.properties?.template;\n                    const presentationIndex = columnsTemplate.findIndex(\n                        (val: { id: string }) => val.id === \"presentation\"\n                    );\n                    // eslint-disable-next-line max-len\n                    const presentationPizzagnaPath: string = `${PizzagnaLayer.Structure}.columns.properties.template[${presentationIndex}].properties.dataFields`;\n                    formPizzagna = immutableSet(\n                        formPizzagna,\n                        presentationPizzagnaPath,\n                        dataFields\n                    );\n\n                    const columns = get(\n                        this.pizzagnaService.pizzagna,\n                        `${PizzagnaLayer.Data}.columns.properties.columns`\n                    ) as any;\n                    const columnIds = columns.map(\n                        (c: ITableWidgetColumnConfig) => c.id\n                    );\n                    formPizzagna = columnIds.reduce(\n                        (res: IPizzagna, id: string) =>\n                            immutableSet(\n                                res,\n                                `${PizzagnaLayer.Data}.${id}/presentation.properties.dataFields`,\n                                dataFields\n                            ),\n                        formPizzagna\n                    );\n\n                    this.pizzagnaService.updatePizzagna(formPizzagna);\n\n                    this.eventBus.getStream(SET_PROPERTY_VALUE).next({\n                        payload: {\n                            path: \"\",\n                            value: formPizzagna,\n                        } as ISetPropertyPayload,\n                    });\n                }\n            }\n        );\n    }\n\n    public ngOnInit(): void {}\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.dataFields && changes.dataFields.currentValue) {\n            // hackfix for NUI-5712\n            this.lastValidDataFields = changes.dataFields.currentValue;\n\n            const disableColumnGeneration =\n                this.dataSource?.features?.getFeatureConfig(\n                    WellKnownDataSourceFeatures.DisableTableColumnGeneration\n                )?.enabled;\n\n            const columns = this.mergeColumns(\n                changes.dataFields.currentValue,\n                this.columns\n            );\n            if (columns?.length || disableColumnGeneration) {\n                // if disableColumnGeneration is enabled and there are no columns to be kept,\n                // we have to clear the form by updating the column input via the `onItemsChange` method\n                this.onItemsChange(columns);\n            } else {\n                if (!disableColumnGeneration) {\n                    this.resetColumns(false);\n                }\n            }\n            // column components are not updated properly without this one\n            setTimeout(() => this.changeDetector.markForCheck());\n        }\n\n        if (changes.columns) {\n            const components = this.columns.map((c) => ({\n                id: c.id,\n                children: {\n                    [`${c.id}/description`]: {\n                        ...c,\n                    },\n                    [`${c.id}/presentation`]: {\n                        ...c,\n                    },\n                },\n            }));\n\n            this.pizzagnaService.createComponentsFromTemplateWithProperties(\n                \"columns\",\n                components\n            );\n\n            // wait for column components to be created from template\n            setTimeout(() => {\n                // triggering the form update to update the preview - without this it was not updating the last added column as form field changes through\n                // pizzagna don't generate valueChange events\n                this.form\n                    .get(\"columns\")\n                    ?.setValue([...(this.form.get(\"columns\")?.value ?? [])]);\n            });\n        }\n    }\n\n    public onFormReady(form: AbstractControl): void {\n        this.form = this.formBuilder.group({\n            columns: form as FormArray,\n            // this form field serves as a source of truth for anybody interesting in reading/modifying the columns value\n            // originally the values were mapped from the form directly to the preview without having a place where all the data would be consolidated\n            // together in the form. Converters subscribe to this form field to listen for column changes. The value is transformed in this method down below.\n            columnsOutput: {},\n        });\n        this.emptyColumns$ = this.form.valueChanges.pipe(\n            map((result) => result.columns.length === 0)\n        );\n        this.formReady.emit(this.form);\n\n        // we listen for changes of the `columns` and transform it into ITableWidgetColumnConfig[]\n        this.form.get(\"columns\")?.valueChanges.subscribe((value) => {\n            const newColumns = value.map(\n                (c: any /* form representing one column */) => {\n                    let result: ITableWidgetColumnConfig = {\n                        id: c.id,\n                    } as any;\n                    for (const key of Object.keys(c.properties)) {\n                        result = {\n                            ...result,\n                            ...c.properties[\n                                key\n                            ] /* merge properties from each child form */,\n                        };\n                    }\n                    result.sortable = this.lastValidDataFields?.find(\n                        (df) =>\n                            df.id ===\n                            result.formatter?.properties?.dataFieldIds?.value\n                    )?.sortable;\n                    return result;\n                }\n            );\n\n            this.form.get(\"columnsOutput\")?.setValue(newColumns);\n        });\n    }\n\n    public onItemsChange(columns: ITableWidgetColumnConfig[]): void {\n        const parentPath = \"columns\";\n        const componentIds = columns.map((tile) => tile.id);\n        this.pizzagnaService.createComponentsFromTemplate(\n            parentPath,\n            componentIds\n        );\n\n        const property: IPizzagnaProperty = {\n            componentId: this.componentId,\n            pizzagnaKey: PizzagnaLayer.Data,\n            propertyPath: [\"columns\"],\n        };\n        this.pizzagnaService.setProperty(property, columns);\n    }\n\n    public addColumn(): void {\n        // @ts-ignore: Types of property 'formatter' are incompatible.\n        this.onItemsChange([\n            ...this.columns,\n            {\n                id: uuid(\"column\"),\n                label: \"\",\n                formatter: undefined,\n            },\n        ]);\n    }\n\n    public onResetColumns(): void {\n        this.resetColumns(!!this.columns?.length);\n    }\n\n    public resetColumns(confirmation: boolean): void {\n        const reset = () => {\n            const columns: ITableWidgetColumnConfig[] =\n                this.lastValidDataFields.map((df) => ({\n                    id: uuid(\"column\"),\n                    formatter: {\n                        componentType: \"RawFormatterComponent\",\n                        properties: {\n                            dataFieldIds: {\n                                value: df.id,\n                            },\n                        },\n                    },\n                    isActive: true,\n                    label: df.label,\n                    width: undefined,\n                    sortable: df.sortable,\n                }));\n\n            this.onItemsChange(columns);\n        };\n\n        if (confirmation) {\n            const dialog = this.dialogService.confirm({\n                title: $localize`Are you sure?`,\n                message: $localize`Resetting the columns will revert them to their default configurations. Do you wish to proceed?`,\n                confirmText: $localize`Reset Columns`,\n            });\n\n            dialog.result.then(\n                (result) => {\n                    if (result) {\n                        reset();\n                    }\n                },\n                () => {\n                    // this being here prevents a \"unhandled rejection\" console error from showing up\n                }\n            );\n        } else {\n            reset();\n        }\n    }\n\n    /**\n     * Merges current column definitions with new incoming data fields\n     *\n     * @param currentDatafields\n     * @param columns\n     */\n    private mergeColumns(\n        currentDatafields: IDataField[],\n        columns: ITableWidgetColumnConfig[]\n    ): ITableWidgetColumnConfig[] {\n        const currentDatafieldIds = currentDatafields.map(\n            (datafield) => datafield.id\n        );\n        return columns.filter((column) => {\n            if (!column.formatter?.properties?.dataFieldIds) {\n                return false;\n            }\n            return values(column.formatter?.properties?.dataFieldIds).some(\n                (datafield: string) => currentDatafieldIds.includes(datafield)\n            );\n        });\n    }\n\n    public ngOnDestroy(): void {\n        this.onDestroy$.next();\n        this.onDestroy$.complete();\n    }\n}\n","<nui-items-dynamic\n    [items]=\"columns\"\n    [nodes]=\"nodes\"\n    headerPrefix=\"Column\"\n    i18n-headerPrefix\n    (itemsChange)=\"onItemsChange($event)\"\n    (formReady)=\"onFormReady($event)\"\n></nui-items-dynamic>\n\n<div class=\"pl-4 pr-4\" *ngIf=\"(emptyColumns$ | async) && form.touched\">\n    <nui-message type=\"critical\" [allowDismiss]=\"false\" i18n>\n        <b>At least one column must be added.</b>\n    </nui-message>\n</div>\n\n<button\n    nui-button\n    icon=\"add\"\n    displayStyle=\"action\"\n    id=\"table-widget-add-indicator-btn\"\n    type=\"button\"\n    class=\"ml-4 mb-4\"\n    (click)=\"addColumn()\"\n    i18n\n>\n    Add new column\n</button>\n\n<button\n    nui-button\n    icon=\"reset\"\n    displayStyle=\"action\"\n    id=\"table-widget-reset-indicator-btn\"\n    type=\"button\"\n    class=\"ml-4 mb-4\"\n    (click)=\"onResetColumns()\"\n    i18n\n>\n    Reset columns\n</button>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { AbstractControl } from \"@angular/forms\";\n\n/**\n * This is the only way to be notified of the parent form control being \"touched\"\n * We replace the parent formControl method with our own implementation that also calls the original function\n * @param formControl\n * @param callback Run this callback when the `formControl.markAsTouched` is run\n */\nexport function onMarkAsTouched(\n    formControl: AbstractControl,\n    callback: Function\n): void {\n    const origFunc = formControl.markAsTouched;\n    formControl.markAsTouched = () => {\n        // @ts-ignore\n        // eslint-disable-next-line prefer-rest-params\n        origFunc.apply(formControl, arguments);\n\n        callback();\n    };\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    forwardRef,\n    Input,\n    OnDestroy,\n    OnInit,\n} from \"@angular/core\";\nimport {\n    AbstractControl,\n    ControlValueAccessor,\n    FormBuilder,\n    FormControl,\n    FormGroup,\n    NG_VALIDATORS,\n    NG_VALUE_ACCESSOR,\n    ValidationErrors,\n    Validators,\n} from \"@angular/forms\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { ITableWidgetColumnConfig } from \"../../../../../../../components/table-widget/types\";\nimport { onMarkAsTouched } from \"../../../../../../../functions/on-mark-as-touched\";\nimport { IHasChangeDetector } from \"../../../../../../../types\";\n\n@Component({\n    selector: \"nui-description-configuration-v2\",\n    templateUrl: \"./description-configuration-v2.component.html\",\n    styleUrls: [\"./description-configuration-v2.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => DescriptionConfigurationV2Component),\n            multi: true,\n        },\n        {\n            provide: NG_VALIDATORS,\n            useExisting: forwardRef(() => DescriptionConfigurationV2Component),\n            multi: true,\n        },\n    ],\n    standalone: false,\n})\nexport class DescriptionConfigurationV2Component\n    implements IHasChangeDetector, ControlValueAccessor, OnDestroy, OnInit\n{\n    static lateLoadKey = \"DescriptionConfigurationV2Component\";\n\n    @Input() formControl: AbstractControl;\n    @Input() isWidthMessageDisplayed = false;\n\n    public form: FormGroup;\n    public changeFn: Function;\n\n    private readonly destroy$ = new Subject<void>();\n\n    constructor(\n        private formBuilder: FormBuilder,\n        public changeDetector: ChangeDetectorRef\n    ) {\n        this.form = this.formBuilder.group({\n            label: [\"\", [Validators.required]],\n            isActive: true,\n            width: undefined,\n        });\n\n        this.form.valueChanges\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((value) => {\n                this.changeFn?.(value);\n            });\n    }\n\n    public registerOnChange(fn: any): void {\n        this.changeFn = fn;\n    }\n\n    public registerOnTouched(fn: any): void {}\n\n    public setDisabledState(isDisabled: boolean): void {\n        if (isDisabled) {\n            this.form.disable();\n        } else {\n            this.form.enable();\n        }\n    }\n\n    public validate(c: FormControl): ValidationErrors | null {\n        return this.form.valid ? null : { nestedForm: true };\n    }\n\n    public writeValue(obj: ITableWidgetColumnConfig): void {\n        this.form.patchValue(\n            {\n                label: obj.label,\n                isActive: obj.isActive,\n                width: obj.width,\n            },\n            { emitEvent: false }\n        );\n\n        this.changeDetector.markForCheck();\n    }\n\n    public ngOnInit(): void {\n        onMarkAsTouched(this.formControl, () => {\n            this.form.markAllAsTouched();\n        });\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    public stub(): void {\n        // empty function to hotfix textbox-number behavior (NUI-3442)\n    }\n\n    public isWidthMessageDisplayedForThisColumn(): boolean {\n        const width = this.form.controls[\"width\"].value;\n        return this.isWidthMessageDisplayed && typeof width !== \"number\";\n    }\n}\n","<ng-container [formGroup]=\"form\">\n    <nui-widget-editor-accordion\n        [state]=\"form | nuiWidgetEditorAccordionFormState | async\"\n    >\n        <nui-widget-editor-accordion-header\n            [headerIcon]=\"form | nuiFormHeaderIconPipe : 'widget_list' | async\"\n            [subtitle]=\"form.controls['label'].value\"\n            headerTitle=\"Description\"\n        />\n        <div class=\"description-configuration__accordion-content\">\n            <div class=\"mb-4\">\n                <nui-form-field\n                    caption=\"Label\"\n                    i18n-caption\n                    class=\"mb-3\"\n                    [control]=\"form.controls['label']\"\n                >\n                    <nui-textbox formControlName=\"label\"></nui-textbox>\n                    <nui-validation-message for=\"required\" i18n>\n                        This field is required\n                    </nui-validation-message>\n                </nui-form-field>\n            </div>\n\n            <nui-form-field [control]=\"form.controls['isActive']\">\n                <nui-checkbox formControlName=\"isActive\" i18n\n                    >Show this column</nui-checkbox\n                >\n            </nui-form-field>\n\n            <ng-container *ngIf=\"form.get('isActive')?.value\">\n                <ng-container *ngIf=\"!isWidthMessageDisplayedForThisColumn()\">\n                    <div class=\"mt-4\">\n                        <nui-form-field\n                            caption=\"Column width (px)\"\n                            i18n-caption\n                            class=\"mb-3\"\n                            [control]=\"form.controls['width']\"\n                        >\n                            <!-- TODO: Remove this valueChange stub after NUI-3442 is finished-->\n                            <nui-textbox-number\n                                class=\"description-configuration__accordion-content__width-input\"\n                                (valueChange)=\"stub()\"\n                                placeholder=\"Auto width\"\n                                i18n-placeholder\n                                formControlName=\"width\"\n                            ></nui-textbox-number>\n                            <nui-validation-message\n                                [show]=\"form.controls['width'].invalid\"\n                                for=\"min\"\n                                i18n\n                            >\n                                Minimum width of the column is 62px\n                            </nui-validation-message>\n                        </nui-form-field>\n                    </div>\n                </ng-container>\n                <div\n                    *ngIf=\"isWidthMessageDisplayedForThisColumn()\"\n                    class=\"mt-4\"\n                >\n                    <nui-message type=\"info\" [allowDismiss]=\"false\" i18n>\n                        <b>All columns cannot have fixed width.</b>\n                    </nui-message>\n                </div>\n            </ng-container>\n        </div>\n    </nui-widget-editor-accordion>\n</ng-container>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { IFormatterDefinition } from \"../../components/types\";\nimport { IconFormatterComponent } from \"../../configurator/components/formatters/icon-formatter/icon-formatter.component\";\nimport { LinkFormatterComponent } from \"../../configurator/components/formatters/link-formatter/link-formatter.component\";\nimport { RawFormatterComponent } from \"../../configurator/components/formatters/raw-formatter/raw-formatter.component\";\n\nexport const DEFAULT_TABLE_FORMATTERS: IFormatterDefinition[] = [\n    {\n        componentType: RawFormatterComponent.lateLoadKey,\n        label: $localize`No Formatter`,\n        dataTypes: {\n            // @ts-ignore\n            value: null,\n        },\n    },\n    {\n        componentType: LinkFormatterComponent.lateLoadKey,\n        label: $localize`Link`,\n        configurationComponent: \"LinkConfiguratorComponent\",\n        dataTypes: {\n            value: \"label\",\n            link: \"link\",\n        },\n    },\n    {\n        componentType: IconFormatterComponent.lateLoadKey,\n        label: $localize`Icon`,\n        dataTypes: {\n            value: \"string\",\n        },\n    },\n];\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    DoCheck,\n    forwardRef,\n    Inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Optional,\n    SimpleChanges,\n} from \"@angular/core\";\nimport {\n    AbstractControl,\n    ControlContainer,\n    ControlValueAccessor,\n    FormBuilder,\n    FormControl,\n    FormGroup,\n    FormGroupDirective,\n    NG_VALIDATORS,\n    NG_VALUE_ACCESSOR,\n    ValidationErrors,\n    Validators,\n} from \"@angular/forms\";\nimport isUndefined from \"lodash/isUndefined\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { EventBus, IDataField, IEvent } from \"@nova-ui/bits\";\n\nimport { IDataSourceOutput } from \"../../../../../../../components/providers/types\";\nimport {\n    IFormatter,\n    IFormatterConfigurator,\n    IFormatterDefinition,\n} from \"../../../../../../../components/types\";\nimport { onMarkAsTouched } from \"../../../../../../../functions/on-mark-as-touched\";\nimport {\n    FormatterRegistryService,\n    TableFormatterRegistryService,\n} from \"../../../../../../../services/table-formatter-registry.service\";\nimport {\n    FORMATTERS_REGISTRY,\n    IHasChangeDetector,\n    PIZZAGNA_EVENT_BUS,\n} from \"../../../../../../../types\";\nimport { DEFAULT_TABLE_FORMATTERS } from \"../../../../../../../widget-types/table/default-table-formatters\";\nimport { ConfiguratorHeadingService } from \"../../../../../../services/configurator-heading.service\";\nimport { DATA_SOURCE_OUTPUT } from \"../../../../../../types\";\n\n@Component({\n    selector: \"nui-presentation-configuration-v2\",\n    templateUrl: \"./presentation-configuration-v2.component.html\",\n    styleUrls: [\"./presentation-configuration-v2.component.less\"],\n    viewProviders: [\n        { provide: ControlContainer, useExisting: FormGroupDirective },\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => PresentationConfigurationV2Component),\n            multi: true,\n        },\n        {\n            provide: NG_VALIDATORS,\n            useExisting: forwardRef(() => PresentationConfigurationV2Component),\n            multi: true,\n        },\n    ],\n    standalone: false,\n})\nexport class PresentationConfigurationV2Component\n    implements\n        IHasChangeDetector,\n        OnInit,\n        OnDestroy,\n        OnChanges,\n        DoCheck,\n        ControlValueAccessor\n{\n    static lateLoadKey = \"PresentationConfigurationV2Component\";\n\n    @Input()\n    public set formatters(formatters: Array<IFormatterDefinition>) {\n        // Note: As discussed we will ignore the config formatters if\n        // the user already provided formatters via registry\n        if (!this.tableFormattersRegistryService.isEmpty) {\n            return;\n        }\n        this.handleFormattersUpdate(formatters);\n    }\n\n    public get formatters(): IFormatterDefinition[] {\n        return this._formatters;\n    }\n\n    @Input() public dataFieldIds: string[];\n\n    @Input() formControl: AbstractControl;\n\n    public set dataFields(dataFields: Array<IDataField>) {\n        this._dataFields = dataFields;\n        this.updateAvailableFormatters();\n    }\n\n    public get dataFields(): IDataField[] {\n        return this._dataFields;\n    }\n\n    public get formatter(): IFormatter {\n        return this.form?.value;\n    }\n\n    public form: FormGroup;\n    public propertiesForm: FormGroup;\n\n    public formatterConfigurator: string | null;\n    public formatterConfiguratorProps: IFormatterConfigurator;\n    public subtitleText: string;\n\n    private _dataFields: Array<IDataField> = [];\n    private onDestroy$: Subject<void> = new Subject<void>();\n    private providedFormatters: Array<IFormatterDefinition> = [];\n    private _formatters: Array<IFormatterDefinition> = [];\n    private changeFn: Function;\n    private touchFn: Function;\n    private propertiesFormReady = new Subject<void>();\n    private input: IFormatter;\n\n    constructor(\n        private formBuilder: FormBuilder,\n        public changeDetector: ChangeDetectorRef,\n        public configuratorHeading: ConfiguratorHeadingService,\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>,\n        @Optional()\n        @Inject(FORMATTERS_REGISTRY)\n        private formattersRegistryCommon: FormatterRegistryService,\n        // used as a fallback, remove in vNext\n        /**\n         * @deprecated  will be removed in the scope of NUI-5839\n         */\n        private tableFormattersRegistryService: TableFormatterRegistryService\n    ) {\n        this.subscribeToFormattersRegistry();\n\n        this.form = this.formBuilder.group({\n            componentType: this.formBuilder.control(\n                this.providedFormatters?.[0]?.componentType,\n                Validators.required\n            ),\n            properties: this.formBuilder.control({}, () =>\n                this.propertiesForm?.invalid ? { properties: true } : null\n            ),\n        });\n\n        this.form\n            .get(\"componentType\")\n            ?.valueChanges.pipe(takeUntil(this.onDestroy$))\n            .subscribe(() => this.createFormatterConfigurator());\n\n        this.form.valueChanges\n            .pipe(takeUntil(this.onDestroy$))\n            .subscribe(() => {\n                this.updateSubtitle();\n                this.onValueChange();\n                this.changeDetector.detectChanges();\n            });\n\n        this.eventBus.subscribeUntil(\n            DATA_SOURCE_OUTPUT,\n            this.onDestroy$,\n            (event: IEvent<any | IDataSourceOutput<any>>) => {\n                const { dataFields } = isUndefined(event.payload.result)\n                    ? event.payload\n                    : event.payload.result || {};\n\n                this.dataFields = dataFields;\n            }\n        );\n    }\n\n    public ngOnInit(): void {\n        onMarkAsTouched(this.formControl, () => {\n            this.form.markAllAsTouched();\n            this.propertiesForm.markAllAsTouched();\n        });\n    }\n\n    public ngOnDestroy(): void {\n        this.onDestroy$.next();\n        this.onDestroy$.complete();\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {}\n\n    public registerOnChange(fn: any): void {\n        this.changeFn = fn;\n    }\n\n    public registerOnTouched(fn: any): void {\n        this.touchFn = fn;\n    }\n\n    public setDisabledState(isDisabled: boolean): void {}\n\n    public writeValue(obj: IFormatter): void {\n        this.input = obj;\n\n        this.form.patchValue(obj, { emitEvent: false });\n\n        this.createFormatterConfigurator();\n\n        this.changeDetector.markForCheck();\n    }\n\n    public validate(c: FormControl): ValidationErrors | null {\n        return this.form.valid &&\n            (!this.propertiesForm || this.propertiesForm.valid)\n            ? null\n            : { error: \"error\" };\n    }\n\n    public getSelectedFormatterDefinition(): IFormatterDefinition | null {\n        if (this.providedFormatters.length > 0) {\n            const formatterId = this.form.get(\"componentType\")?.value;\n            return (\n                this.providedFormatters.find(\n                    (formatter) => formatter.componentType === formatterId\n                ) ?? null\n            );\n        }\n        return null;\n    }\n\n    public getSelectedDataField(): IDataField | null {\n        const propertiesControl = this.form.controls[\"properties\"];\n        if (\n            propertiesControl &&\n            this.dataFields &&\n            this.dataFields.length > 0\n        ) {\n            const dataFieldId = propertiesControl.value.dataFieldIds?.value;\n            return (\n                this.dataFields.find(\n                    (dataField) => dataField.id === dataFieldId\n                ) ?? null\n            );\n        }\n        return null;\n    }\n\n    public ngDoCheck(): void {\n        if (!this.form || !this.propertiesForm) {\n            return;\n        }\n\n        const propertiesControl = this.form.controls[\"properties\"];\n        if (this.propertiesForm.touched && propertiesControl.untouched) {\n            propertiesControl.markAsTouched();\n            this.changeDetector.markForCheck();\n        }\n        if (this.propertiesForm.untouched && propertiesControl.touched) {\n            propertiesControl.markAsUntouched();\n            this.changeDetector.markForCheck();\n        }\n    }\n\n    public onFormReady(form: FormGroup): void {\n        this.propertiesFormReady.next();\n\n        this.propertiesForm = form;\n\n        const propertiesControl = this.form.controls[\"properties\"];\n        const updateParentForm = () => {\n            propertiesControl.setValue(this.propertiesForm.value);\n            this.onValueChange();\n        };\n\n        propertiesControl.markAsPristine();\n\n        this.propertiesForm.valueChanges\n            .pipe(takeUntil(this.propertiesFormReady))\n            .subscribe(updateParentForm);\n\n        // initially, populate the formatter form with inputs from the widget\n        this.propertiesForm.patchValue(this.formatter.properties);\n    }\n\n    public onValueChange(): void {\n        this.changeFn?.(this.form.value);\n    }\n\n    private updateSubtitle() {\n        this.subtitleText = `${this.getSelectedFormatterDefinition()?.label}`;\n        if (this.getSelectedDataField()) {\n            this.subtitleText = this.subtitleText.concat(\n                `, ${this.getSelectedDataField()?.label}`\n            );\n        }\n    }\n\n    /**\n     * Creates portal for dynamic configuration of formatter value.\n     * @returns ComponentPortal\n     */\n    private createFormatterConfigurator() {\n        const formatterDefinition = this.providedFormatters.find(\n            (formatter) =>\n                formatter.componentType ===\n                this.form.get(\"componentType\")?.value\n        );\n\n        // if configurationComponent property is present in formatters configuration, use it to render portal,\n        // otherwise, use default ValueSelectorComponent\n        if (formatterDefinition) {\n            this.formatterConfigurator =\n                formatterDefinition.configurationComponent ??\n                \"ValueSelectorComponent\";\n        } else {\n            this.formatterConfigurator = null;\n        }\n\n        // if the currently selected component doesn't match the original value from the input then we reset the form values\n        if (\n            formatterDefinition?.componentType !==\n                this.formatter?.componentType &&\n            this.formatter?.properties?.dataFieldIds\n        ) {\n            this.formatter.properties.dataFieldIds = { value: null };\n        }\n\n        this.formatterConfiguratorProps = {\n            dataFields: this.dataFields,\n            formatter: this.formatter,\n            formatterDefinition: formatterDefinition as IFormatterDefinition,\n        };\n    }\n\n    private updateAvailableFormatters() {\n        if (!this._dataFields?.length || !this.providedFormatters.length) {\n            return;\n        }\n\n        // allow by default RawFormatter which has null as dataType\n        const sourceDataTypes: Record<string, boolean> = { null: true };\n        this._dataFields.forEach((f) => (sourceDataTypes[f.dataType] = true));\n        this._formatters = this.providedFormatters.filter((f) => {\n            // cast to array in case we have a single value\n            const formatterDataTypes =\n                f.dataTypes.value instanceof Array\n                    ? f.dataTypes.value\n                    : [f.dataTypes.value];\n\n            return formatterDataTypes.some((v) => sourceDataTypes[v]);\n        });\n        if (this.form) {\n            this.createFormatterConfigurator();\n        }\n    }\n\n    private subscribeToFormattersRegistry(): void {\n        this.handleFormattersUpdate(this.formattersRegistry.getItems());\n\n        this.formattersRegistry.stateChanged$\n            .pipe(takeUntil(this.onDestroy$))\n            .subscribe((formatters) => {\n                this.handleFormattersUpdate(formatters);\n            });\n    }\n\n    private handleFormattersUpdate(formatters: IFormatterDefinition[]): void {\n        if (formatters !== this.providedFormatters) {\n            this.providedFormatters =\n                formatters?.length > 0 ? formatters : DEFAULT_TABLE_FORMATTERS;\n            this.updateAvailableFormatters();\n        }\n    }\n\n    /**\n     * Fallback for table,\n     *\n     * nothing should go wrong, but in case \"FORMATTERS_REGISTRY\" is lost, get table registry\n     */\n    private get formattersRegistry() {\n        return (\n            this.formattersRegistryCommon || this.tableFormattersRegistryService\n        );\n    }\n}\n","<ng-container [formGroup]=\"form\">\n    <nui-widget-editor-accordion\n        [state]=\"form | nuiWidgetEditorAccordionFormState | async\"\n    >\n        <nui-widget-editor-accordion-header\n            [headerIcon]=\"form | nuiFormHeaderIconPipe : 'customize' | async\"\n            [subtitle]=\"subtitleText\"\n            headerTitle=\"Property and formatting\"\n        />\n        <div class=\"presentation-configuration__accordion-content\">\n            <div class=\"mb-4\">\n                <nui-form-field\n                    caption=\"Format\"\n                    i18n-caption\n                    [control]=\"form.controls['componentType']\"\n                >\n                    <nui-select-v2\n                        placeholder=\"Select Format\"\n                        i18n-placeholder\n                        [popupViewportMargin]=\"\n                            configuratorHeading.height$ | async\n                        \"\n                        formControlName=\"componentType\"\n                    >\n                        <nui-select-v2-option\n                            *ngFor=\"let formatter of formatters\"\n                            [displayValueContext]=\"formatter.label\"\n                            [value]=\"formatter.componentType\"\n                        >\n                            {{ formatter.label }}\n                        </nui-select-v2-option>\n                    </nui-select-v2>\n                </nui-form-field>\n            </div>\n            <ng-container\n                *ngIf=\"formatterConfigurator\"\n                nuiComponentPortal\n                componentId=\"formatterConfigurator\"\n                [componentType]=\"formatterConfigurator\"\n                [properties]=\"formatterConfiguratorProps\"\n                [outputs]=\"['formReady']\"\n                (output)=\"onFormReady($event.payload)\"\n                #componentPortal=\"nuiComponentPortal\"\n            >\n                <ng-template\n                    [cdkPortalOutlet]=\"componentPortal.portal\"\n                    (attached)=\"componentPortal.attached($event)\"\n                ></ng-template>\n            </ng-container>\n        </div>\n    </nui-widget-editor-accordion>\n</ng-container>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    forwardRef,\n    Input,\n    OnDestroy,\n    OnInit,\n} from \"@angular/core\";\nimport {\n    AbstractControl,\n    ControlValueAccessor,\n    FormBuilder,\n    FormControl,\n    FormGroup,\n    NG_VALIDATORS,\n    NG_VALUE_ACCESSOR,\n    ValidationErrors,\n} from \"@angular/forms\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { ITableWidgetColumnConfig } from \"../../../../../../../components/table-widget/types\";\nimport { onMarkAsTouched } from \"../../../../../../../functions/on-mark-as-touched\";\n\n@Component({\n    selector: \"nui-table-column-configuration\",\n    templateUrl: \"./table-column-configuration.component.html\",\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => TableColumnConfigurationComponent),\n            multi: true,\n        },\n        {\n            provide: NG_VALIDATORS,\n            useExisting: forwardRef(() => TableColumnConfigurationComponent),\n            multi: true,\n        },\n    ],\n    standalone: false,\n})\nexport class TableColumnConfigurationComponent\n    implements ControlValueAccessor, OnInit, OnDestroy\n{\n    public static lateLoadKey = \"TableColumnConfigurationComponent\";\n\n    public form: FormGroup;\n    public changeFn: Function;\n\n    private readonly destroy$ = new Subject<void>();\n    private input: ITableWidgetColumnConfig;\n\n    @Input() formControl: AbstractControl;\n    @Input() isWidthMessageDisplayed = false;\n\n    constructor(\n        private formBuilder: FormBuilder,\n        public changeDetector: ChangeDetectorRef\n    ) {\n        this.form = this.formBuilder.group({\n            description: this.formBuilder.control({}),\n            presentation: this.formBuilder.control({}),\n        });\n\n        this.form.valueChanges\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((value) => {\n                const newValue = {\n                    id: this.input?.id,\n                    ...value.description,\n                    formatter: value.presentation,\n                };\n                this.changeFn(newValue);\n            });\n    }\n\n    public ngOnInit(): void {\n        onMarkAsTouched(this.formControl, () => {\n            this.form.markAllAsTouched();\n        });\n    }\n\n    public registerOnChange(fn: any): void {\n        this.changeFn = fn;\n    }\n\n    public registerOnTouched(fn: any): void {}\n\n    public setDisabledState(isDisabled: boolean): void {}\n\n    public validate(c: FormControl): ValidationErrors | null {\n        return this.form.valid ? null : { error: \"error\" };\n    }\n\n    public writeValue(obj: ITableWidgetColumnConfig): void {\n        this.input = obj;\n\n        this.form.setValue(\n            {\n                presentation: obj?.formatter || {},\n                description: obj,\n            },\n            { emitEvent: false }\n        );\n\n        this.changeDetector.markForCheck();\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n}\n","<div [formGroup]=\"form\">\n    <nui-description-configuration-v2\n        [formControl]=\"form.controls['description']\"\n        [isWidthMessageDisplayed]=\"isWidthMessageDisplayed\"\n    >\n    </nui-description-configuration-v2>\n\n    <nui-presentation-configuration-v2\n        [formControl]=\"form.controls['presentation']\"\n    >\n    </nui-presentation-configuration-v2>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { CdkDragDrop, CdkDragStart } from \"@angular/cdk/drag-drop\";\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n    ViewEncapsulation,\n} from \"@angular/core\";\nimport {\n    AbstractControl,\n    FormArray,\n    FormBuilder,\n    FormControl,\n    FormGroup,\n} from \"@angular/forms\";\nimport isUndefined from \"lodash/isUndefined\";\nimport values from \"lodash/values\";\nimport { Observable, Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport {\n    DialogService,\n    EventBus,\n    IDataField,\n    IDataSource,\n    IEvent,\n    uuid,\n} from \"@nova-ui/bits\";\n\nimport {\n    IDataSourceError,\n    IDataSourceOutput,\n} from \"../../../../../components/providers/types\";\nimport { ITableWidgetColumnConfig } from \"../../../../../components/table-widget/types\";\nimport { PizzagnaService } from \"../../../../../pizzagna/services/pizzagna.service\";\nimport { TableFormatterRegistryService } from \"../../../../../services/table-formatter-registry.service\";\nimport {\n    IHasForm,\n    PIZZAGNA_EVENT_BUS,\n    WellKnownDataSourceFeatures,\n} from \"../../../../../types\";\nimport { ConfiguratorDataSourceManagerService } from \"../../../../services/configurator-data-source-manager.service\";\nimport { DATA_SOURCE_CREATED, DATA_SOURCE_OUTPUT } from \"../../../../types\";\n\n@Component({\n    selector: \"nui-table-columns-configuration\",\n    templateUrl: \"./table-columns-configuration-v2.component.html\",\n    styleUrls: [\"./table-columns-configuration-v2.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    standalone: false,\n})\nexport class TableColumnsConfigurationV2Component\n    implements OnInit, IHasForm, OnChanges, OnDestroy\n{\n    static lateLoadKey = \"TableColumnsConfigurationV2Component\";\n\n    @Input() columns: ITableWidgetColumnConfig[] = [];\n    @Input() componentId: string;\n\n    /**\n     * @deprecated backward compatibility measure - deprecated in v11. Removal: NUI-5898\n     *\n     * This property is here because it was present in V1 component and was used to configure formatters\n     */\n    @Input() template: any;\n\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    public form: FormGroup;\n    public emptyColumns$: Observable<boolean>;\n    // this can't be \"dataFields\" because that's an already used name for a property in pizzagna\n    public dataSourceFields: Array<IDataField> = [];\n    public draggedItemHeight: number;\n    public isWidthMessageDisplayed = false;\n    public dataSourceError: IDataSourceError | null;\n\n    public get columnForms(): FormControl[] {\n        return (this.form.controls[\"columns\"] as FormArray)\n            .controls as FormControl[];\n    }\n\n    // the last selected data source will be stored here\n    public dataSource: IDataSource;\n    public columnLabel = $localize`Column`;\n\n    private onDestroy$: Subject<void> = new Subject<void>();\n\n    constructor(\n        private formBuilder: FormBuilder,\n        private changeDetector: ChangeDetectorRef,\n        private dialogService: DialogService,\n        private pizzagnaService: PizzagnaService,\n        public dataSourceManager: ConfiguratorDataSourceManagerService,\n        public tableFormatterRegistry: TableFormatterRegistryService,\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>\n    ) {\n        this.form = this.formBuilder.group({\n            columns: this.formBuilder.array([]),\n        });\n\n        this.form.controls[\"columns\"].valueChanges\n            .pipe(takeUntil(this.onDestroy$))\n            .subscribe((columns: ITableWidgetColumnConfig[]) => {\n                this.isWidthMessageDisplayed =\n                    this.getWidthMessageDisplayed(columns);\n                this.changeDetector.markForCheck();\n            });\n\n        this.eventBus.subscribeUntil(\n            DATA_SOURCE_CREATED,\n            this.onDestroy$,\n            (event: IEvent<IDataSource>) => {\n                if (!event.payload) {\n                    return;\n                }\n\n                this.dataSource = event.payload;\n                this.changeDetector.markForCheck();\n            }\n        );\n\n        this.eventBus.subscribeUntil(\n            DATA_SOURCE_OUTPUT,\n            this.onDestroy$,\n            (event: IEvent<any | IDataSourceOutput<any>>) => {\n                if (event.payload?.error) {\n                    return;\n                }\n                const { dataFields } = isUndefined(event.payload.result)\n                    ? event.payload\n                    : event.payload.result || {};\n                this.dataSourceFields = dataFields ?? [];\n                const disableColumnGeneration =\n                    this.dataSource?.features?.getFeatureConfig(\n                        WellKnownDataSourceFeatures.DisableTableColumnGeneration\n                    )?.enabled;\n\n                const columns = this.mergeColumns(\n                    this.dataSourceFields,\n                    this.getColumns()\n                );\n                if (columns?.length || disableColumnGeneration) {\n                    // if disableColumnGeneration is enabled and there are no columns to be kept,\n                    // we have to clear the form by updating the column input via the `onItemsChange` method\n                    this.updateColumns(columns);\n                } else {\n                    if (!disableColumnGeneration) {\n                        this.resetColumns(false);\n                    }\n                }\n                this.changeDetector.markForCheck();\n            }\n        );\n        dataSourceManager.error$\n            .pipe(takeUntil(this.onDestroy$))\n            .subscribe((err: IDataSourceError | null) => {\n                this.dataSourceError = err;\n                this.changeDetector.markForCheck();\n            });\n    }\n\n    public ngOnInit(): void {\n        this.formReady.emit(this.form);\n\n        if (this.template && !this.tableFormatterRegistry.getItems()?.length) {\n            const formatters = this.template?.[1].properties?.formatters;\n            this.tableFormatterRegistry.addItems(formatters);\n        }\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        // columns from input property are set directly to the form\n        if (changes.columns) {\n            this.updateColumns(this.columns, false);\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.onDestroy$.next();\n        this.onDestroy$.complete();\n    }\n\n    public getColumns(): any[] {\n        return this.form.controls[\"columns\"].value;\n    }\n\n    public updateColumns(\n        columns: ITableWidgetColumnConfig[],\n        emitEvent: boolean = true\n    ): void {\n        const cols = this.form.controls[\"columns\"] as FormArray;\n        cols.controls = columns.map((c) => {\n            const fc = new FormControl(c);\n            fc.setParent(cols);\n\n            // Nova's markAsTouched function gets attached to formControl during init of TableColumnConfigurationComponent,\n            // must be pass to newly created formControl here otherwise gets lost and column validation doesn't get triggered.\n            const colControl = cols.controls.find(\n                (cControl: AbstractControl) => cControl.value.id === c.id\n            );\n            if (colControl) {\n                fc.markAsTouched = colControl.markAsTouched;\n            }\n\n            return fc;\n        });\n        cols.updateValueAndValidity({ emitEvent });\n\n        this.changeDetector.markForCheck();\n    }\n\n    public trackBy(index: number, item: FormControl): string | undefined {\n        return item?.value?.id;\n    }\n\n    public addColumn(): void {\n        (this.form.controls[\"columns\"] as FormArray).push(\n            new FormControl({\n                id: uuid(\"column\"),\n                label: \"\",\n                isActive: true,\n                formatter: {},\n            } as ITableWidgetColumnConfig)\n        );\n    }\n\n    public onResetColumns(): void {\n        this.resetColumns(!!this.getColumns()?.length);\n    }\n\n    public resetColumns(confirmation: boolean): void {\n        const reset = () => {\n            const columns: ITableWidgetColumnConfig[] =\n                this.dataSourceFields?.map((df) => ({\n                    id: uuid(\"column\"),\n                    formatter: {\n                        componentType: \"RawFormatterComponent\",\n                        properties: {\n                            dataFieldIds: {\n                                value: df.id,\n                            },\n                        },\n                    },\n                    isActive: true,\n                    label: df.label,\n                    width: undefined,\n                    sortable: df.sortable,\n                }));\n\n            this.updateColumns(columns);\n        };\n\n        if (confirmation) {\n            const dialog = this.dialogService.confirm({\n                title: $localize`Are you sure?`,\n                message: $localize`Resetting the columns will revert them to their default configurations. Do you wish to proceed?`,\n                confirmText: $localize`Reset Columns`,\n            });\n\n            dialog.result.then(\n                (result) => {\n                    if (result) {\n                        reset();\n                    }\n                },\n                () => {\n                    // this being here prevents a \"unhandled rejection\" console error from showing up\n                }\n            );\n        } else {\n            reset();\n        }\n    }\n\n    /**\n     * Merges current column definitions with new incoming data fields\n     *\n     * @param currentDatafields\n     * @param columns\n     */\n    private mergeColumns(\n        currentDatafields: IDataField[],\n        columns: ITableWidgetColumnConfig[]\n    ): ITableWidgetColumnConfig[] {\n        const currentDatafieldIds = currentDatafields.map(\n            (datafield) => datafield.id\n        );\n        return columns.filter((column) => {\n            if (!column.formatter?.properties?.dataFieldIds) {\n                return false;\n            }\n            return values(column.formatter?.properties?.dataFieldIds).some(\n                (datafield: string) => currentDatafieldIds.includes(datafield)\n            );\n        });\n    }\n\n    /**\n     * This method calculates whether the width message should be displayed\n     *\n     * @param columns\n     * @private\n     */\n    private getWidthMessageDisplayed(columns: ITableWidgetColumnConfig[]) {\n        let count = 0;\n        for (const c of columns) {\n            if (typeof c.width !== \"number\") {\n                count++;\n            }\n            if (count > 1) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    // ------------------------------------------------- items dynamic stuff ------------------------------------------------\n\n    public moveItem(index: number, toIndex: number): void {\n        const columns = this.form.controls[\"columns\"] as FormArray;\n\n        const column = columns.at(index);\n        columns.removeAt(index);\n        columns.insert(toIndex, column);\n\n        this.changeDetector.detectChanges();\n    }\n\n    public removeItem(index: number): void {\n        const columns = this.form.controls[\"columns\"] as FormArray;\n        columns.removeAt(index);\n\n        this.changeDetector.detectChanges();\n    }\n\n    public drop(event: CdkDragDrop<string[]>): void {\n        this.moveItem(event.previousIndex, event.currentIndex);\n    }\n\n    public cdkDragStarted(event: CdkDragStart): void {\n        this.draggedItemHeight =\n            event.source.element.nativeElement.offsetHeight;\n    }\n}\n","<div class=\"nui-table-columns-configuration\">\n    <div\n        *ngIf=\"!dataSourceError && dataSourceFields.length\"\n        cdkDropList\n        (cdkDropListDropped)=\"drop($event)\"\n        [formGroup]=\"form\"\n    >\n        <div formArrayName=\"columns\">\n            <div\n                cdkDrag\n                (cdkDragStarted)=\"cdkDragStarted($event)\"\n                class=\"nui-table-columns-configuration__node-item\"\n                *ngFor=\"\n                    let columnForm of columnForms;\n                    index as i;\n                    trackBy: trackBy\n                \"\n            >\n                <nui-drop-area\n                    class=\"nui-table-columns-configuration__drop-area\"\n                    *cdkDragPlaceholder\n                    [style.height.px]=\"draggedItemHeight\"\n                ></nui-drop-area>\n\n                <ng-template #headerText>\n                    <ng-container>\n                        <div\n                            class=\"nui-table-columns-configuration__drag-handler\"\n                            cdkDragHandle\n                        >\n                            <nui-icon icon=\"drag\"></nui-icon>\n                        </div>\n                    </ng-container>\n                    <span\n                        class=\"nui-table-columns-configuration__header-text\"\n                        [title]=\"\n                            columnForm?.value.label\n                                | nuiWidgetConfiguratorSectionHeader\n                                    : i\n                                    : columnLabel\n                        \"\n                    >\n                        {{\n                            columnForm?.value.label\n                                | nuiWidgetConfiguratorSectionHeader\n                                    : i\n                                    : columnLabel\n                        }}\n                    </span>\n                </ng-template>\n\n                <ng-template #headerButtons>\n                    <div class=\"d-flex\">\n                        <button\n                            id=\"table-widget-remove-column-btn-{{ i }}\"\n                            nui-button\n                            type=\"button\"\n                            icon=\"delete\"\n                            displayStyle=\"action\"\n                            (click)=\"removeItem(i)\"\n                        ></button>\n                    </div>\n                </ng-template>\n\n                <nui-widget-configurator-section\n                    class=\"no-margin\"\n                    [headerTextTemplate]=\"headerText\"\n                    [headerButtonsTemplate]=\"headerButtons\"\n                >\n                    <nui-table-column-configuration\n                        [formControl]=\"columnForm\"\n                        [isWidthMessageDisplayed]=\"isWidthMessageDisplayed\"\n                    ></nui-table-column-configuration>\n                </nui-widget-configurator-section>\n            </div>\n\n            <div\n                class=\"pl-4 pr-4\"\n                *ngIf=\"(emptyColumns$ | async) && form.touched\"\n            >\n                <nui-message type=\"critical\" [allowDismiss]=\"false\">\n                    <b i18n>At least one column must be added.</b>\n                </nui-message>\n            </div>\n\n            <button\n                nui-button\n                icon=\"add\"\n                displayStyle=\"action\"\n                id=\"table-widget-add-indicator-btn\"\n                type=\"button\"\n                class=\"ml-4 mb-4\"\n                (click)=\"addColumn()\"\n                i18n\n            >\n                Add new column\n            </button>\n\n            <button\n                nui-button\n                icon=\"reset\"\n                displayStyle=\"action\"\n                id=\"table-widget-reset-indicator-btn\"\n                type=\"button\"\n                class=\"ml-4 mb-4\"\n                (click)=\"onResetColumns()\"\n                i18n\n            >\n                Reset columns\n            </button>\n        </div>\n    </div>\n</div>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup } from \"@angular/forms\";\nimport get from \"lodash/get\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport {\n    ITableWidgetColumnConfig,\n    ITableWidgetConfig,\n    ITableWidgetSorterConfig,\n} from \"../../../../../components/table-widget/types\";\nimport { IHasChangeDetector, IHasForm } from \"../../../../../types\";\nimport { ConfiguratorHeadingService } from \"../../../../services/configurator-heading.service\";\n\n@Component({\n    selector: \"nui-table-filters-editor-component\",\n    templateUrl: \"table-filters-editor.component.html\",\n    styleUrls: [\"table-filters-editor.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class TableFiltersEditorComponent\n    implements OnInit, OnChanges, OnDestroy, IHasForm, IHasChangeDetector\n{\n    static lateLoadKey = \"TableFiltersEditorComponent\";\n\n    @Input() sorterConfiguration: ITableWidgetSorterConfig;\n    @Input() columns: Array<ITableWidgetColumnConfig> = [];\n\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    public form: FormGroup;\n    public selectedSortByValue: string;\n    public selectedSortOrderValue: string;\n    public sortableColumns: Array<ITableWidgetColumnConfig> = [];\n\n    private onDestroy$ = new Subject<void>();\n\n    constructor(\n        private formBuilder: FormBuilder,\n        public configuratorHeading: ConfiguratorHeadingService,\n        public changeDetector: ChangeDetectorRef\n    ) {}\n\n    public ngOnInit(): void {\n        this.form = this.formBuilder.group({\n            sorterConfiguration: this.formBuilder.group({\n                sortBy: get(this.sorterConfiguration, \"sortBy\", \"\"),\n                descendantSorting: get(\n                    this.sorterConfiguration,\n                    \"descendantSorting\",\n                    false\n                ),\n            }),\n        });\n\n        this.form.valueChanges\n            .pipe(takeUntil(this.onDestroy$))\n            .subscribe((val) => {\n                this.setAccordionSubtitleValues(val);\n            });\n        this.formReady.emit(this.form);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        const sortByFormControl = this.form\n            .get(\"sorterConfiguration\")\n            ?.get(\"sortBy\");\n        const descendantSortingFormControl = this.form\n            .get(\"sorterConfiguration\")\n            ?.get(\"descendantSorting\");\n\n        if (changes.sorterConfiguration) {\n            const sortedColumn = this.sortableColumns.find(\n                (column) => column.id === this.sorterConfiguration?.sortBy\n            );\n            sortByFormControl?.setValue(sortedColumn?.id, { emitEvent: false });\n            descendantSortingFormControl?.setValue(\n                this.sorterConfiguration?.descendantSorting,\n                { emitEvent: false }\n            );\n        }\n        if (changes.columns) {\n            this.sortableColumns = this.columns.filter(\n                (column: ITableWidgetColumnConfig) =>\n                    !!column.formatter && (column.sortable ?? true)\n            );\n            const sortedColumn = this.sortableColumns.find(\n                (column) => column.id === this.sorterConfiguration?.sortBy\n            );\n\n            sortByFormControl?.setValue(sortedColumn?.id, { emitEvent: false });\n            descendantSortingFormControl?.setValue(\n                this.sorterConfiguration?.descendantSorting,\n                { emitEvent: false }\n            );\n\n            if (this.sortableColumns.length === 0) {\n                sortByFormControl?.disable();\n                descendantSortingFormControl?.disable();\n            } else {\n                sortByFormControl?.enable();\n                descendantSortingFormControl?.enable();\n            }\n        }\n\n        this.changeDetector.detectChanges();\n    }\n\n    private setAccordionSubtitleValues(val: ITableWidgetConfig) {\n        if (val.sorterConfiguration) {\n            const sortedColumn = this.columns?.find(\n                (col) => col.id === val.sorterConfiguration.sortBy\n            );\n            if (!sortedColumn) {\n                this.selectedSortByValue = $localize`No sorting`;\n                this.selectedSortOrderValue = \"\";\n                this.form\n                    .get(\"sorterConfiguration\")\n                    ?.patchValue(\n                        { sortBy: \"\", descendantSorting: \"\" },\n                        { emitEvent: false }\n                    );\n                return;\n            }\n            const sortOrder = val.sorterConfiguration.descendantSorting\n                ? $localize`Descending`\n                : $localize`Ascending`;\n            this.selectedSortByValue = sortedColumn.label;\n            this.selectedSortOrderValue = \", \" + sortOrder;\n\n            this.changeDetector.detectChanges();\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.onDestroy$.next();\n        this.onDestroy$.complete();\n    }\n}\n","<nui-widget-editor-accordion [formGroup]=\"form\">\n    <nui-widget-editor-accordion-header\n        headerIcon=\"widget_pie-chart\"\n        [subtitle]=\"selectedSortByValue + selectedSortOrderValue\"\n        headerTitle=\"Sorting\"\n    />\n    <div class=\"table-filters-configuration__accordion-content\">\n        <div formGroupName=\"sorterConfiguration\" class=\"d-flex align-items-end\">\n            <nui-form-field\n                caption=\"Sort by\"\n                i18n-caption\n                [control]=\"form.controls['sortBy']\"\n                class=\"w-50\"\n            >\n                <nui-select-v2\n                    placeholder=\"Select column\"\n                    i18n-placeholder\n                    [popupViewportMargin]=\"configuratorHeading.height$ | async\"\n                    formControlName=\"sortBy\"\n                    class=\"table-filters-configuration__accordion-content__sort-by-input\"\n                >\n                    <nui-select-v2-option\n                        *ngFor=\"let column of sortableColumns\"\n                        [value]=\"column.id\"\n                    >\n                        {{ column.label }}\n                    </nui-select-v2-option>\n                </nui-select-v2>\n            </nui-form-field>\n            <div class=\"ml-2\">\n                <nui-form-field [control]=\"form.controls['descendantSorting']\">\n                    <nui-checkbox formControlName=\"descendantSorting\" i18n>\n                        Descending\n                    </nui-checkbox>\n                </nui-form-field>\n            </div>\n        </div>\n    </div>\n    <div class=\"p-5\" *ngIf=\"!sortableColumns.length\">\n        <nui-message\n            type=\"info\"\n            [allowDismiss]=\"false\"\n            i18n\n        >\n            <b>No columns are sortable.</b>\n        </nui-message>\n    </div>\n</nui-widget-editor-accordion>\n","import { Injectable } from \"@angular/core\";\n\nimport { ScrollType } from \"./../../../../../components/table-widget/types\";\n\n@Injectable()\nexport class ScrollTypeEditorService {\n    public loadStrategies = [\n        {\n            id: ScrollType.virtual,\n            title: $localize`Virtual scroll`,\n        },\n        {\n            id: ScrollType.paginator,\n            title: $localize`Paginator`,\n        },\n        {\n            id: ScrollType.default,\n            title: $localize`Default scroll`,\n        },\n    ];\n\n    public setAccordionSubtitleValues(\n        hasVirtualScroll: boolean,\n        scrollType: ScrollType\n    ): string {\n        const prefix = $localize`Scroll Type: `;\n        const result = hasVirtualScroll\n            ? `${prefix} ${this.getScrollTypeTitle(ScrollType.virtual)}`\n            : `${prefix} ${this.getScrollTypeTitle(scrollType)}`;\n\n        return result;\n    }\n\n    public getScrollTypeTitle(scrollType: ScrollType): string {\n        const result =\n            this.loadStrategies.find((ls) => ls.id === scrollType)?.title ||\n            $localize`Unknown`;\n\n        return result;\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport {\n    AbstractControl,\n    FormBuilder,\n    FormControl,\n    FormGroup,\n    Validators,\n} from \"@angular/forms\";\nimport get from \"lodash/get\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\nimport { ScrollTypeEditorService } from \"./scroll-type-editor.service\";\nimport {\n    ITableWidgetPaginatorConfig,\n    ScrollType,\n} from \"../../../../../components/table-widget/types\";\nimport { IHasChangeDetector, IHasForm } from \"../../../../../types\";\nimport { ConfiguratorHeadingService } from \"../../../../services/configurator-heading.service\";\n\nexport interface IPageSizeSetMenuOption {\n    value: number;\n    checked: boolean;\n}\n@Component({\n    selector: \"nui-scroll-type-editor-component\",\n    templateUrl: \"scroll-type-editor.component.html\",\n    styleUrls: [\"scroll-type-editor.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class TableScrollTypeEditorComponent\n    implements OnInit, OnChanges, OnDestroy, IHasForm, IHasChangeDetector\n{\n    static lateLoadKey = \"TableScrollTypeEditorComponent\";\n\n    @Input() paginatorConfiguration: ITableWidgetPaginatorConfig;\n    @Input() hasVirtualScroll: boolean;\n    @Input() scrollType: ScrollType = ScrollType.virtual;\n\n    @Output() formReady = new EventEmitter<FormGroup>();\n\n    public form: FormGroup;\n    private onDestroy$ = new Subject<void>();\n\n    private pageSizeSetAll = [\n        5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 60, 70, 80, 90, 100,\n    ];\n    public pageSizeSetOptions: IPageSizeSetMenuOption[] = [];\n    public pageSizeOptions: number[] = [];\n    public subtitle = \"\";\n    public isExpanderOpen = false;\n    public displayPageSizeSetErrorMessage = false;\n    public displayPageSizeErrorMessage = false;\n\n    public scrollTypeFormControl?: AbstractControl | null;\n    public pageSizeSetFormControl?: AbstractControl | null;\n    public pageSizeFormControl?: AbstractControl | null;\n\n    constructor(\n        private formBuilder: FormBuilder,\n        public configuratorHeading: ConfiguratorHeadingService,\n        public changeDetector: ChangeDetectorRef,\n        public scrollTypeEditorService: ScrollTypeEditorService\n    ) {\n        this.updatePaginatorSelectOptions(this.pageSizeSetAll, false);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.scrollType) {\n            this.scrollTypeFormControl?.setValue(\n                this.scrollType ?? ScrollType.virtual,\n                {\n                    emitEvent: false,\n                }\n            );\n\n            this.updateSubtitle();\n            this.updateValidators();\n        }\n\n        if (changes.paginatorConfiguration) {\n            this.updatePaginatorSelectOptions(\n                this.paginatorConfiguration.pageSizeSet || [],\n                true\n            );\n            this.updateDefaultPageSizeOptions(\n                this.paginatorConfiguration.pageSizeSet || []\n            );\n\n            this.pageSizeSetFormControl?.setValue(\n                this.paginatorConfiguration.pageSizeSet,\n                {\n                    emitEvent: false,\n                }\n            );\n\n            this.pageSizeFormControl?.setValue(\n                this.paginatorConfiguration.pageSize,\n                {\n                    emitEvent: true,\n                }\n            );\n        }\n\n        this.changeDetector.detectChanges();\n    }\n\n    public ngOnInit(): void {\n        this.form = this.formBuilder.group({\n            paginatorConfiguration: this.formBuilder.group({\n                scrollType: get(this.scrollType, \"\", ScrollType.virtual),\n                pageSize: get(this.paginatorConfiguration, \"pageSize\", 10),\n                pageSizeSet: new FormControl(\n                    get(\n                        this.paginatorConfiguration,\n                        \"pageSizeSet\",\n                        [10, 20, 50]\n                    )\n                ),\n            }),\n        });\n\n        this.scrollTypeFormControl = this.form\n            .get(\"paginatorConfiguration\")\n            ?.get(\"scrollType\");\n\n        this.pageSizeSetFormControl = this.form\n            .get(\"paginatorConfiguration\")\n            ?.get(\"pageSizeSet\");\n\n        this.pageSizeFormControl = this.form\n            .get(\"paginatorConfiguration\")\n            ?.get(\"pageSize\");\n\n        this.form.valueChanges\n            .pipe(takeUntil(this.onDestroy$))\n            .subscribe((val) => {\n                this.displayPageSizeErrorMessage =\n                    !val.paginatorConfiguration.pageSize;\n            });\n\n        this.updateSubtitle();\n\n        this.scrollTypeFormControl?.valueChanges\n            .pipe(takeUntil(this.onDestroy$))\n            .subscribe((val) => {\n                this.updateSubtitle();\n                this.updateValidators();\n            });\n\n        this.formReady.emit(this.form);\n    }\n\n    public onPageSizeSetChange(item: IPageSizeSetMenuOption): void {\n        const option = this.pageSizeSetOptions.find(\n            (n) => n.value === item.value\n        );\n        if (option) {\n            option.checked = !item.checked;\n        }\n\n        this.displayPageSizeSetErrorMessage =\n            this.pageSizeSetOptions.filter((o) => o.checked).length === 0;\n\n        this.emitUpdatedSelectedOptions();\n    }\n\n    public get hasPaginator(): boolean {\n        return this.scrollTypeFormControl?.value === ScrollType.paginator;\n    }\n\n    private updateSubtitle(): void {\n        this.subtitle = this.scrollTypeEditorService.setAccordionSubtitleValues(\n            this.hasVirtualScroll,\n            this.scrollTypeFormControl?.value\n        );\n    }\n\n    private updateValidators() {\n        if (this.hasPaginator) {\n            this.pageSizeFormControl?.addValidators(Validators.required);\n            this.pageSizeSetFormControl?.addValidators(Validators.required);\n        } else {\n            this.pageSizeFormControl?.clearValidators();\n            this.pageSizeSetFormControl?.clearValidators();\n        }\n\n        this.updatePaginatorSelectOptions(\n            this.pageSizeSetFormControl?.value,\n            true\n        );\n        this.updateDefaultPageSizeOptions(this.pageSizeSetFormControl?.value);\n\n        this.pageSizeFormControl?.updateValueAndValidity();\n        this.pageSizeSetFormControl?.updateValueAndValidity();\n    }\n\n    private emitUpdatedSelectedOptions() {\n        const filteredPageSizeSet = this.pageSizeSetOptions\n            .filter((o) => o.checked)\n            .map((o) => o.value);\n\n        this.updateDefaultPageSizeOptions(filteredPageSizeSet);\n        this.pageSizeSetFormControl?.setValue(filteredPageSizeSet, {\n            emitEvent: true,\n        });\n    }\n\n    private updateDefaultPageSizeOptions(options: number[]) {\n        this.pageSizeOptions = options;\n    }\n\n    private updatePaginatorSelectOptions(\n        options: number[],\n        isChecked: boolean\n    ) {\n        this.clearPageSizeSetOptions();\n\n        options.forEach((o) => {\n            const option = this.pageSizeSetOptions.find((po) => po.value === o);\n            if (option) {\n                option.checked = isChecked;\n            } else {\n                this.pageSizeSetOptions.push({\n                    value: o,\n                    checked: isChecked,\n                });\n            }\n        });\n    }\n\n    private clearPageSizeSetOptions() {\n        this.pageSizeSetOptions.forEach((option) => {\n            option.checked = false;\n        });\n    }\n\n    public ngOnDestroy(): void {\n        this.onDestroy$.next();\n        this.onDestroy$.complete();\n    }\n}\n","<nui-widget-editor-accordion\n    [formGroup]=\"form\"\n    [state]=\"form | nuiWidgetEditorAccordionFormState | async\"\n>\n    <nui-widget-editor-accordion-header\n        [subtitle]=\"subtitle\"\n        headerIcon=\"application\"\n        headerTitle=\"Scroll type\"\n    />\n    <div\n        class=\"table-filters-configuration__accordion-content\"\n        formGroupName=\"paginatorConfiguration\"\n    >\n        <div class=\"scroll-type-field d-flex align-items-end\">\n            <nui-form-field\n                [showOptionalText]=\"false\"\n                caption=\"Scroll Type\"\n                i18n-caption\n            >\n                <nui-select-v2\n                    placeholder=\"Select scroll type\"\n                    i18n-placeholder\n                    [popupViewportMargin]=\"configuratorHeading.height$ | async\"\n                    formControlName=\"scrollType\"\n                    class=\"table-filters-configuration__accordion-content__sort-by-input\"\n                >\n                    <nui-select-v2-option\n                        *ngFor=\"\n                            let column of scrollTypeEditorService.loadStrategies\n                        \"\n                        [value]=\"column.id\"\n                    >\n                        {{ column.title }}\n                    </nui-select-v2-option>\n                </nui-select-v2>\n            </nui-form-field>\n        </div>\n        <div *ngIf=\"hasPaginator\">\n            <div class=\"page-size-set-menu\">\n                <nui-form-field\n                    class=\"\"\n                    caption=\"Page size options set\"\n                    i18n-caption\n                    [showOptionalText]=\"false\"\n                >\n                    <nui-menu\n                        title=\"Select size options\"\n                        [appendToBody]=\"true\"\n                        i18n-title\n                    >\n                        <nui-menu-group header=\"Item Types\" i18n-header>\n                            <nui-menu-option\n                                *ngFor=\"let option of pageSizeSetOptions\"\n                                (actionDone)=\"onPageSizeSetChange(option)\"\n                                [checked]=\"option.checked\"\n                                i18n\n                                >{{ option.value }}\n                            </nui-menu-option>\n                        </nui-menu-group>\n                    </nui-menu>\n                    <nui-validation-message\n                        [show]=\"displayPageSizeSetErrorMessage\"\n                        i18n\n                    >\n                        Page size set is required\n                    </nui-validation-message>\n                </nui-form-field>\n            </div>\n            <div\n                *ngIf=\"pageSizeOptions.length > 0\"\n                class=\"d-flex align-items-end\"\n            >\n                <nui-form-field\n                    caption=\"Default page size\"\n                    i18n-caption\n                    [showOptionalText]=\"false\"\n                    [control]=\"form.controls['pageSize']\"\n                >\n                    <nui-select-v2\n                        placeholder=\"Select page size\"\n                        i18n-placeholder\n                        [popupViewportMargin]=\"\n                            configuratorHeading.height$ | async\n                        \"\n                        formControlName=\"pageSize\"\n                        class=\"table-filters-configuration__accordion-content__sort-by-input\"\n                    >\n                        <nui-select-v2-option\n                            *ngFor=\"let option of pageSizeOptions\"\n                            [value]=\"option\"\n                        >\n                            {{ option }}\n                        </nui-select-v2-option>\n                    </nui-select-v2>\n                    <nui-validation-message\n                        [show]=\"displayPageSizeErrorMessage\"\n                        i18n\n                    >\n                        Page size is required\n                    </nui-validation-message>\n                </nui-form-field>\n            </div>\n        </div>\n    </div>\n</nui-widget-editor-accordion>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { AbstractControl, FormGroup } from \"@angular/forms\";\nimport { Observable, Subject } from \"rxjs\";\nimport { map } from \"rxjs/operators\";\n\nimport { EventBus, IEvent, uuid } from \"@nova-ui/bits\";\n\nimport { ITimeseriesWidgetData } from \"../../../../../components/timeseries-widget/types\";\nimport { IPizzagnaProperty } from \"../../../../../pizzagna/functions/get-pizzagna-property-path\";\nimport { PizzagnaService } from \"../../../../../pizzagna/services/pizzagna.service\";\nimport {\n    IHasChangeDetector,\n    IHasForm,\n    PizzagnaLayer,\n    PIZZAGNA_EVENT_BUS,\n} from \"../../../../../types\";\nimport { ITimeseriesItemConfiguration } from \"../types\";\n\n@Component({\n    selector: \"nui-timeseries-series-collection-configuration\",\n    templateUrl: \"timeseries-series-collection-configuration.component.html\",\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class TimeseriesSeriesCollectionConfigurationComponent\n    implements IHasChangeDetector, IHasForm, OnDestroy, OnChanges\n{\n    static lateLoadKey = \"TimeseriesSeriesCollectionConfigurationComponent\";\n\n    @Input() nodes: string[];\n    @Input() componentId: string;\n    @Input() series: ITimeseriesItemConfiguration[] = [];\n    @Input() availableSeries: ITimeseriesWidgetData[];\n    @Input() allSeries: ITimeseriesWidgetData[];\n\n    @Output() formReady = new EventEmitter();\n\n    public form: FormGroup;\n    public emptySeries$: Observable<boolean>;\n\n    private readonly destroy$ = new Subject<void>();\n\n    constructor(\n        public pizzagnaService: PizzagnaService,\n        public changeDetector: ChangeDetectorRef,\n        @Inject(PIZZAGNA_EVENT_BUS) private eventBus: EventBus<IEvent>\n    ) {}\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.allSeries && !changes.allSeries.isFirstChange()) {\n            // if we receive 'allSeries' data from the data source after component initialization, we\n            // re-create the series config components to make them aware of this change\n            this.createSeriesConfigComponents(this.series);\n            setTimeout(() => this.changeDetector.markForCheck());\n        }\n    }\n\n    public onFormReady(form: AbstractControl): void {\n        this.form = form as FormGroup;\n        this.formReady.emit(form);\n        this.emptySeries$ = this.form.valueChanges.pipe(\n            map((result) => result.length === 0)\n        );\n    }\n\n    public onItemsChange(series: ITimeseriesItemConfiguration[]): void {\n        this.createSeriesConfigComponents(series);\n\n        const property: IPizzagnaProperty = {\n            componentId: this.componentId,\n            pizzagnaKey: PizzagnaLayer.Data,\n            propertyPath: [\"series\"],\n        };\n        this.pizzagnaService.setProperty(property, series);\n    }\n\n    public isPossibleToAddSeries(): boolean {\n        const total = this.allSeries && this.allSeries.length;\n        const present = this.series && this.series.length;\n\n        return total > present;\n    }\n\n    public addSeries(): void {\n        this.onItemsChange([\n            // @ts-ignore: Types of property 'selectedSeriesId' are incompatible.\n            ...this.series,\n            {\n                id: uuid(\"series\"),\n                // TODO: Provide selectedSeriesId value that corresponds to it's type which is string\n                // @ts-ignore: Types of property 'selectedSeriesId' are incompatible.\n                selectedSeriesId: null,\n            },\n        ]);\n    }\n\n    private createSeriesConfigComponents(\n        series: ITimeseriesItemConfiguration[]\n    ) {\n        const parentPath = \"series\";\n        const componentIds = series.map((tile) => tile.id);\n        this.pizzagnaService.createComponentsFromTemplate(\n            parentPath,\n            componentIds\n        );\n    }\n}\n","<nui-items-dynamic\n    [items]=\"series\"\n    [nodes]=\"nodes\"\n    (itemsChange)=\"onItemsChange($event)\"\n    [moveButtons]=\"false\"\n    (formReady)=\"onFormReady($event)\"\n></nui-items-dynamic>\n\n<div class=\"pl-4 pr-4\" *ngIf=\"(emptySeries$ | async) && form.touched\">\n    <nui-message type=\"critical\" [allowDismiss]=\"false\" i18n>\n        <b>At least one series must be added.</b>\n    </nui-message>\n</div>\n\n<button\n    nui-button\n    *ngIf=\"isPossibleToAddSeries()\"\n    icon=\"add\"\n    displayStyle=\"action\"\n    type=\"button\"\n    class=\"ml-4 mb-4\"\n    (click)=\"addSeries()\"\n    i18n\n>\n    Add new series\n</button>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\n\nimport { IHasChangeDetector, IHasForm } from \"../../../../../types\";\n\n@Component({\n    selector: \"nui-table-column-description-configuration\",\n    templateUrl: \"./timeseries-tile-description-configuration.component.html\",\n    styleUrls: [\"./timeseries-tile-description-configuration.component.less\"],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class TimeseriesTileDescriptionConfigurationComponent\n    implements OnInit, OnDestroy, OnChanges, IHasChangeDetector, IHasForm\n{\n    static lateLoadKey = \"TimeseriesTileDescriptionConfigurationComponent\";\n\n    @Input() label: string;\n\n    @Output() formReady: EventEmitter<FormGroup> =\n        new EventEmitter<FormGroup>();\n    @Output() formDestroy: EventEmitter<FormGroup> =\n        new EventEmitter<FormGroup>();\n\n    public form: FormGroup;\n\n    constructor(\n        private formBuilder: FormBuilder,\n        public changeDetector: ChangeDetectorRef\n    ) {}\n\n    public ngOnInit(): void {\n        this.form = this.formBuilder.group({\n            label: [this.label, Validators.required],\n        });\n\n        this.formReady.emit(this.form);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.label) {\n            const value = changes.label.currentValue;\n            if (value) {\n                this.form.patchValue({ label: value });\n            }\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.formDestroy.emit(this.form);\n    }\n}\n","<ng-container [formGroup]=\"form\">\n    <nui-widget-editor-accordion\n        [state]=\"form.get('label') | nuiWidgetEditorAccordionFormState | async\"\n    >\n        <nui-widget-editor-accordion-header\n            [headerIcon]=\"\n                form.get('label') | nuiFormHeaderIconPipe : 'edit' | async\n            \"\n            [iconColor]=\"\n                form.get('label') | nuiFormHeaderIconPipe : 'gray' : '' | async\n            \"\n            [subtitle]=\"form.get('label')?.value\"\n            headerTitle=\"Description\"\n        />\n        <div\n            class=\"timeseries-tile-description-configuration__accordion-content\"\n        >\n            <nui-form-field\n                caption=\"Label\"\n                i18n-caption\n                [control]=\"form.get('label')\"\n            >\n                <nui-textbox\n                    formControlName=\"label\"\n                    placeholder=\"Set label\"\n                    i18n-placeholder\n                ></nui-textbox>\n                <nui-validation-message for=\"required\" i18n>\n                    This field is required\n                </nui-validation-message>\n            </nui-form-field>\n        </div>\n    </nui-widget-editor-accordion>\n</ng-container>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\nimport { Subject } from \"rxjs\";\n\nimport { ITimeseriesWidgetData } from \"../../../../../components/timeseries-widget/types\";\nimport { PizzagnaService } from \"../../../../../pizzagna/services/pizzagna.service\";\nimport {\n    IHasChangeDetector,\n    IHasForm,\n    PizzagnaLayer,\n} from \"../../../../../types\";\nimport { ConfiguratorHeadingService } from \"../../../../services/configurator-heading.service\";\n\n@Component({\n    selector: \"nui-timeseries-tile-indicator-data-configuration\",\n    templateUrl: \"./timeseries-tile-indicator-data-configuration.component.html\",\n    styleUrls: [\n        \"./timeseries-tile-indicator-data-configuration.component.less\",\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class TimeseriesTileIndicatorDataConfigurationComponent\n    implements IHasChangeDetector, IHasForm, OnInit, OnDestroy, OnChanges\n{\n    static lateLoadKey = \"TimeseriesTileIndicatorDataConfigurationComponent\";\n\n    @Input() componentId: string;\n    @Input() selectedSeriesId: string;\n    @Input() allSeries: ITimeseriesWidgetData[];\n    @Input() availableSeries: ITimeseriesWidgetData[];\n\n    @Output() formReady: EventEmitter<FormGroup> =\n        new EventEmitter<FormGroup>();\n    @Output() formDestroy: EventEmitter<FormGroup> =\n        new EventEmitter<FormGroup>();\n\n    public set selectedSeries(value: ITimeseriesWidgetData | undefined) {\n        this._selectedSeries = value;\n        if (value) {\n            this.form.patchValue({ id: value.id });\n        }\n    }\n\n    public get selectedSeries(): ITimeseriesWidgetData | undefined {\n        return this._selectedSeries;\n    }\n\n    public form: FormGroup;\n\n    private readonly destroy$ = new Subject<void>();\n    private _selectedSeries?: ITimeseriesWidgetData;\n\n    constructor(\n        public changeDetector: ChangeDetectorRef,\n        public configuratorHeading: ConfiguratorHeadingService,\n        private formBuilder: FormBuilder,\n        private pizzagnaService: PizzagnaService\n    ) {}\n\n    public ngOnInit(): void {\n        this.form = this.formBuilder.group({\n            id: [this.selectedSeriesId || null, [Validators.required]],\n        });\n\n        this.formReady.emit(this.form);\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.allSeries) {\n            this.selectedSeries = this.allSeries.find(\n                (s) => this.selectedSeriesId === s.id\n            );\n        }\n\n        if (changes.selectedSeriesId) {\n            if (!this.allSeries) {\n                return;\n            }\n            this.selectedSeries = this.allSeries.find(\n                (s) => this.selectedSeriesId === s.id\n            );\n        }\n    }\n\n    public onSelect(selectedSeries: ITimeseriesWidgetData): void {\n        this.selectedSeriesId = selectedSeries.id;\n        this.selectedSeries = selectedSeries;\n        this.form.patchValue({ id: selectedSeries.id });\n        setTimeout(() => {\n            this.pizzagnaService.setProperty(\n                `${PizzagnaLayer.Data}.${this.componentId}.properties.selectedSeriesId`,\n                selectedSeries.id\n            );\n            this.changeDetector.markForCheck();\n        });\n    }\n\n    public ngOnDestroy(): void {\n        this.formDestroy.emit(this.form);\n\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n}\n","<ng-container [formGroup]=\"form\">\n    <nui-widget-editor-accordion\n        [state]=\"form.get('id') | nuiWidgetEditorAccordionFormState | async\"\n    >\n        <nui-widget-editor-accordion-header\n            [headerIcon]=\"\n                form.get('id') | nuiFormHeaderIconPipe : 'database' | async\n            \"\n            [subtitle]=\"selectedSeries?.description\"\n            headerTitle=\"Indicator data\"\n        />\n        <div class=\"timeseries-tile-data-configuration__accordion-content\">\n            <nui-form-field\n                caption=\"Series data\"\n                i18n-caption\n                [control]=\"form.get('id')\"\n            >\n                <nui-select-v2\n                    placeholder=\"Series data\"\n                    i18n-placeholder\n                    [value]=\"selectedSeries\"\n                    [popupViewportMargin]=\"configuratorHeading.height$ | async\"\n                    (valueSelected)=\"onSelect($event)\"\n                >\n                    <nui-select-v2-option\n                        *ngFor=\"\n                            let series of availableSeries\n                                | nuiAddData : selectedSeries\n                        \"\n                        [value]=\"series\"\n                    >\n                        {{ series.description }}\n                    </nui-select-v2-option>\n                </nui-select-v2>\n                <nui-validation-message for=\"required\" i18n>\n                    This field is required\n                </nui-validation-message>\n            </nui-form-field>\n        </div>\n    </nui-widget-editor-accordion>\n</ng-container>\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport {\n    ApplicationRef,\n    ComponentFactoryResolver,\n    ComponentRef,\n    EmbeddedViewRef,\n    Injectable,\n    Injector,\n    Optional,\n    Renderer2,\n    RendererFactory2,\n} from \"@angular/core\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport isFunction from \"lodash/isFunction\";\nimport { EMPTY, Observable, of, Subject } from \"rxjs\";\nimport { catchError, filter, switchMap, takeUntil } from \"rxjs/operators\";\n\nimport { LoggerService, uuid } from \"@nova-ui/bits\";\n\nimport { IConfigurator, IConfiguratorSource } from \"./types\";\nimport { DashboardComponent } from \"../../components/dashboard/dashboard.component\";\nimport { IWidget } from \"../../components/widget/types\";\nimport { WidgetUpdateOperation } from \"../../configurator/services/types\";\nimport { WidgetTypesService } from \"../../services/widget-types.service\";\nimport { ConfiguratorComponent } from \"../components/configurator/configurator.component\";\n\n@Injectable()\nexport class ConfiguratorService {\n    private renderer: Renderer2;\n    private componentRef: ComponentRef<ConfiguratorComponent>;\n    private close$: Subject<void> = new Subject<void>();\n\n    constructor(\n        private componentFactoryResolver: ComponentFactoryResolver,\n        private widgetTypesService: WidgetTypesService,\n        private injector: Injector,\n        private appRef: ApplicationRef,\n        private logger: LoggerService,\n        rendererFactory: RendererFactory2,\n        @Optional() private router: Router\n    ) {\n        this.renderer = rendererFactory.createRenderer(null, null);\n    }\n\n    public open(configurator: IConfigurator): Observable<void> {\n        const source: IConfiguratorSource = {\n            dashboardComponent: configurator.dashboardComponent,\n            previewPizzagnaComponent: configurator.previewPizzagnaComponent,\n            widget: cloneDeep(configurator.widget),\n        };\n\n        this.componentRef = this.appendComponentToBody();\n        const component: ConfiguratorComponent = this.componentRef.instance;\n\n        // TODO: Handle the case when portalBundle is undefined\n        // @ts-ignore\n        component.formPortal = configurator.portalBundle.portal;\n        // TODO: Handle the case when widget is undefined\n        // @ts-ignore\n        component.previewWidget = cloneDeep(configurator.widget);\n        if (configurator.portalBundle?.attached) {\n            component.formPortalAttached\n                .pipe(takeUntil(this.close$))\n                .subscribe((e) => {\n                    if (configurator?.portalBundle?.attached) {\n                        configurator?.portalBundle?.attached(e);\n                    }\n                });\n        }\n\n        component.changeDetector.detectChanges();\n\n        return (\n            component.result\n                .asObservable()\n                // TODO: Handle the case when trySubmit is undefined\n                // @ts-ignore\n                .pipe(this.handleSubmit(source, configurator.trySubmit))\n        );\n    }\n\n    public close(): void {\n        if (!this.renderer) {\n            return;\n        }\n\n        this.close$.next();\n        this.renderer.removeChild(\n            document.body,\n            (this.componentRef.hostView as EmbeddedViewRef<any>)\n                .rootNodes[0] as HTMLElement\n        );\n        this.appRef.detachView(this.componentRef.hostView);\n        this.componentRef.destroy();\n\n        this.renderer.removeStyle(document.body, \"overflow\");\n    }\n\n    public handleSubmit =\n        (confSource: IConfiguratorSource, trySubmit: WidgetUpdateOperation) =>\n        (source: Observable<IWidget>): Observable<void> =>\n            source.pipe(\n                this.trySubmit(trySubmit, confSource),\n                this.updateDashboard(confSource.dashboardComponent)\n            );\n\n    private trySubmit =\n        (trySubmit: WidgetUpdateOperation, confSource: IConfigurator) =>\n        (source: Observable<IWidget>) =>\n            source.pipe(\n                // eslint-disable-next-line import/no-deprecated\n                switchMap((widget: IWidget) => {\n                    if (widget && isFunction(trySubmit)) {\n                        return trySubmit(widget, confSource).pipe(\n                            catchError((err: any) => {\n                                this.logger.error(err);\n                                this.componentRef.instance.handleSubmitError();\n                                return EMPTY;\n                            })\n                        );\n                    } else {\n                        return of(widget);\n                    }\n                })\n            );\n\n    private updateDashboard =\n        (dashboardComponent: DashboardComponent) =>\n        (source: Observable<IWidget>) =>\n            new Observable<void>((observer) =>\n                source.subscribe((widget: IWidget) => {\n                    if (widget) {\n                        widget.id = widget.id || uuid();\n\n                        let widgetToSet: IWidget;\n                        const dashboardWidget =\n                            dashboardComponent.dashboard.widgets[widget.id];\n                        if (dashboardWidget) {\n                            widgetToSet = {\n                                ...widget,\n                                pizzagna: {\n                                    ...this.widgetTypesService.getWidgetType(\n                                        widget.type,\n                                        widget.version\n                                    ).widget,\n                                    configuration:\n                                        widget.pizzagna.configuration,\n                                },\n                            };\n                        } else {\n                            widgetToSet = widget;\n                        }\n\n                        // first we remove the widget so that we can recreate it from scratch\n                        dashboardComponent.removeWidget(\n                            widgetToSet.id,\n                            false /* this is set to preserve the widget location */\n                        );\n\n                        // then we wait for the removal to take effect and we create the widget again\n                        setTimeout(() => {\n                            dashboardComponent.updateWidget(widgetToSet);\n                        });\n                    }\n\n                    this.close();\n                    observer.next();\n                })\n            );\n\n    private appendComponentToBody(): ComponentRef<ConfiguratorComponent> {\n        const factory = this.componentFactoryResolver.resolveComponentFactory(\n            ConfiguratorComponent\n        );\n        const componentRef: ComponentRef<ConfiguratorComponent> =\n            factory.create(this.injector);\n\n        this.appRef.attachView(componentRef.hostView);\n        this.renderer.appendChild(\n            document.body,\n            (componentRef.hostView as EmbeddedViewRef<any>)\n                .rootNodes[0] as HTMLElement\n        );\n        this.renderer.setStyle(document.body, \"overflow\", \"hidden\");\n        if (this.router) {\n            this.router.events\n                .pipe(\n                    filter((event) => event instanceof NavigationEnd),\n                    takeUntil(this.close$)\n                )\n                .subscribe(() => this.close());\n        }\n        return componentRef;\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\n\nimport { SequentialColorProvider, TextColorProvider } from \"@nova-ui/charts\";\n\n@Injectable()\nexport class KpiWidgetColorService {\n    /**\n     *\n     * @param color Background color\n     * @return Calculated text color based on background color\n     */\n    public static getTextColor(color: string): string {\n        const colorProvider = new TextColorProvider(\n            new SequentialColorProvider([color]),\n            {\n                light: \"white\",\n                dark: \"black\",\n            }\n        );\n        return colorProvider.get(color);\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { ComponentRef, Injectable } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\n\nimport { ConfiguratorService } from \"./configurator.service\";\nimport { IComponentPortalBundle, IWidgetSelector } from \"./types\";\nimport { ComponentPortalService } from \"../../pizzagna/services/component-portal.service\";\nimport { WidgetClonerComponent } from \"../components/widget-cloner/widget-cloner.component\";\n\n@Injectable()\nexport class WidgetClonerService {\n\n    private ref: ComponentRef<WidgetClonerComponent>;\n\n    constructor(\n        private configuratorService: ConfiguratorService,\n        private componentPortalService: ComponentPortalService\n    ) {}\n\n    public open(cloner: IWidgetSelector): Observable<void> {\n        if (!cloner.portalBundle) {\n            const formPortal: IComponentPortalBundle<WidgetClonerComponent> = {\n                portal: this.componentPortalService.createComponentPortal(\n                    WidgetClonerComponent,\n                    null\n                ),\n                attached: (\n                    componentRef: ComponentRef<WidgetClonerComponent>\n                ) => {\n                    componentRef.instance.cloneSelectionComponentType =\n                        cloner.widgetSelectionComponentType;\n                    componentRef.instance.changeDetector?.detectChanges();\n                    setTimeout(() => {\n                        this.ref = componentRef;\n                    });\n                },\n            };\n\n            cloner.portalBundle = formPortal;\n        }\n\n        cloner.previewPizzagnaComponent = () => this.ref.instance.configurator.getPreview();\n\n\n        return this.configuratorService.open(cloner);\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { ComponentRef, Injectable } from \"@angular/core\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport { Observable } from \"rxjs\";\n\nimport { ConfiguratorService } from \"./configurator.service\";\nimport { IComponentPortalBundle, IWidgetEditor } from \"./types\";\nimport { IWidget } from \"../../components/widget/types\";\nimport { ComponentPortalService } from \"../../pizzagna/services/component-portal.service\";\nimport { PizzagnaLayer } from \"../../types\";\nimport { WidgetEditorComponent } from \"../components/widget-editor/widget-editor.component\";\n\n@Injectable()\nexport class WidgetEditorService {\n    private ref: ComponentRef<WidgetEditorComponent>;\n\n    constructor(\n        private configuratorService: ConfiguratorService,\n        private componentPortalService: ComponentPortalService\n    ) {}\n\n    public open(widgetEditor: IWidgetEditor): Observable<void> {\n        if (!widgetEditor.portalBundle) {\n            const formPortal: IComponentPortalBundle<WidgetEditorComponent> = {\n                portal: this.componentPortalService.createComponentPortal(\n                    WidgetEditorComponent,\n                    null\n                ),\n                attached: (componentRef) => {\n                    const editorComponent = componentRef.instance;\n                    editorComponent.formPizzagna = widgetEditor.formPizzagna;\n                    editorComponent.formRoot = widgetEditor.paths?.root;\n                    editorComponent.changeDetector.markForCheck();\n                    setTimeout(() => {\n                        this.ref = componentRef;\n                    });\n                },\n            };\n\n            widgetEditor.portalBundle = formPortal;\n        }\n\n        // TODO: Handle the case when widget is undefined\n        // @ts-ignore\n        const widgetClone: IWidget = cloneDeep(widgetEditor.widget);\n        // wipe the data layer of the preview\n        delete widgetClone.pizzagna[PizzagnaLayer.Data];\n        widgetEditor.widget = widgetClone;\n        widgetEditor.previewPizzagnaComponent = () =>\n            this.ref.instance.configurator.getPreview();\n        return this.configuratorService.open(widgetEditor);\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { ComponentPortal } from \"@angular/cdk/portal\";\nimport { ComponentRef } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\n\nimport { DashboardComponent } from \"../../components/dashboard/dashboard.component\";\nimport { IWidget } from \"../../components/widget/types\";\nimport { PizzagnaComponent } from \"../../pizzagna/components/pizzagna/pizzagna.component\";\nimport { IPizzagna } from \"../../types\";\n\nexport interface IComponentPortalBundle<T> {\n    portal: ComponentPortal<T>;\n    attached?: (componentRef: ComponentRef<T>) => void;\n}\n\nexport interface IConfiguratorSource {\n    dashboardComponent: DashboardComponent;\n    widget?: IWidget;\n    previewPizzagnaComponent?: () => PizzagnaComponent;\n}\n\nexport interface IConfigurator<T = any> extends IConfiguratorSource {\n    trySubmit?: WidgetUpdateOperation;\n    portalBundle?: IComponentPortalBundle<T>;\n}\n\nexport interface IWidgetSelector<T = any> extends IConfigurator<T> {\n    widgetSelectionComponentType: Function;\n}\n\nexport interface IWidgetEditor<T = any> extends IConfigurator<T> {\n    formPizzagna: IPizzagna;\n    paths: Record<string, string>;\n}\n\nexport type WidgetUpdateOperation = (\n    widget: IWidget,\n    source: IConfiguratorSource\n) => Observable<IWidget>;\nexport type WidgetRemovalOperation = (\n    widgetId: string,\n    source: IConfiguratorSource\n) => Observable<string>;\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./kpi/kpi-tiles-converter.service\";\nexport * from \"./timeseries/timeseries-series-converter.service\";\nexport * from \"./shared/title-and-description-converter/title-and-description-converter.service\";\nexport * from \"./types\";\nexport * from \"./proportional/proportional-widget-chart-options-converter.service\";\nexport * from \"./base-converter\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./kpi-widget-color.service\";\nexport * from \"./configurator.service\";\nexport * from \"./timeframe-serialization.service\";\nexport * from \"./widget-cloner.service\";\nexport * from \"./widget-editor.service\";\nexport * from \"./types\";\nexport * from \"./converters/public-api\";\nexport * from \"./preview.service\";\nexport * from \"./configurator-heading.service\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n/* eslint-disable max-len */\nimport { DragDropModule } from \"@angular/cdk/drag-drop\";\nimport { PortalModule } from \"@angular/cdk/portal\";\nimport { ScrollingModule } from \"@angular/cdk/scrolling\";\nimport { NgModule } from \"@angular/core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { GridsterModule } from \"angular-gridster2\";\n\nimport {\n    NuiBusyModule,\n    NuiButtonModule,\n    NuiCheckboxModule,\n    NuiColorPickerModule,\n    NuiDialogModule,\n    NuiDividerModule,\n    NuiExpanderModule,\n    NuiFormFieldModule,\n    NuiIconModule,\n    NuiImageModule,\n    NuiMenuModule,\n    NuiMessageModule,\n    NuiOverlayAdditionsModule,\n    NuiPanelModule,\n    NuiPopupModule,\n    NuiRadioModule,\n    NuiRepeatModule,\n    NuiSearchModule,\n    NuiSelectV2Module,\n    NuiSorterModule,\n    NuiSpinnerModule,\n    NuiSwitchModule,\n    NuiTextboxModule,\n    NuiValidationMessageModule,\n    NuiWizardModule,\n} from \"@nova-ui/bits\";\n\nimport { NuiDashboardsCommonModule } from \"../common/common.module\";\nimport { TimeseriesChartPresetService } from \"../components/timeseries-widget/timeseries-chart-preset.service\";\nimport { TimeseriesScalesService } from \"../components/timeseries-widget/timeseries-scales.service\";\nimport { NuiPizzagnaModule } from \"../pizzagna/pizzagna.module\";\nimport {\n    ComponentRegistryService,\n    IComponentWithLateLoadKey,\n} from \"../pizzagna/services/component-registry.service\";\nimport { ConfiguratorComponent } from \"./components/configurator/configurator.component\";\nimport { DropAreaComponent } from \"./components/drop-area/drop-area.component\";\nimport { FormStackComponent } from \"./components/form-stack/form-stack.component\";\nimport { DonutContentPercentageConfigurationComponent } from \"./components/formatters/donut-content-percentage-formatter/donut-content-percentage-configuration.component\";\nimport { DonutContentPercentageFormatterComponent } from \"./components/formatters/donut-content-percentage-formatter/donut-content-percentage-formatter.component\";\nimport { DonutContentRawFormatterComponent } from \"./components/formatters/donut-content-raw-formatter/donut-content-raw-formatter.component\";\nimport { DonutContentSumFormatterComponent } from \"./components/formatters/donut-content-sum-formatter/donut-content-sum-formatter.component\";\nimport { IconFormatterComponent } from \"./components/formatters/icon-formatter/icon-formatter.component\";\nimport { LinkFormatterComponent } from \"./components/formatters/link-formatter/link-formatter.component\";\nimport { PercentageFormatterComponent } from \"./components/formatters/percentage-formatter/percentage-formatter.component\";\nimport { RawFormatterComponent } from \"./components/formatters/raw-formatter/raw-formatter.component\";\nimport { SiUnitsFormatterComponent } from \"./components/formatters/si-units-formatter/si-units-formatter.component\";\nimport { StatusWithIconFormatterComponent } from \"./components/formatters/status-with-icon-formatter/status-with-icon-formatter.component\";\nimport { ConfiguratorHeadingComponent } from \"./components/heading/configurator-heading.component\";\nimport { ItemsDynamicComponent } from \"./components/items-dynamic/items-dynamic.component\";\nimport { PreviewPlaceholderComponent } from \"./components/preview-placeholder/preview-placeholder.component\";\nimport { WidgetClonerComponent } from \"./components/widget-cloner/widget-cloner.component\";\nimport { WidgetConfiguratorSectionCoordinatorService } from \"./components/widget-configurator-section/widget-configurator-section-coordinator.service\";\nimport { WidgetConfiguratorSectionComponent } from \"./components/widget-configurator-section/widget-configurator-section.component\";\nimport { WidgetEditorComponent } from \"./components/widget-editor/widget-editor.component\";\nimport { WidgetEditorAccordionHeaderComponent } from \"./components/widget-editor-accordion/widget-editor-accordion-header/widget-editor-accordion-header.component\";\nimport { WidgetEditorAccordionComponent } from \"./components/widget-editor-accordion/widget-editor-accordion.component\";\nimport { BackgroundColorRulesConfigurationComponent } from \"./components/widgets/configurator-items/background-color-rules-configuration/background-color-rules-configuration.component\";\nimport { DataSourceConfigurationComponent } from \"./components/widgets/configurator-items/data-source-configuration/data-source-configuration.component\";\nimport { DataSourceConfigurationV2Component } from \"./components/widgets/configurator-items/data-source-configuration-v2/data-source-configuration-v2.component\";\nimport { DataSourceErrorComponent } from \"./components/widgets/configurator-items/data-source-error/data-source-error.component\";\nimport { TableDataSourceErrorComponent } from \"./components/widgets/configurator-items/data-source-error/table/table-data-source-error.component\";\nimport { EmbeddedContentConfigurationComponent } from \"./components/widgets/configurator-items/embedded-content-configuration/embedded-content-configuration.component\";\nimport { InfoMessageConfigurationComponent } from \"./components/widgets/configurator-items/info-message-configuration/info-message-configuration.component\";\nimport { KpiDescriptionConfigurationComponent } from \"./components/widgets/configurator-items/kpi-description-configuration/kpi-description-configuration.component\";\nimport { RefreshRateConfiguratorComponent } from \"./components/widgets/configurator-items/refresher-configuration/refresh-rate-configurator/refresh-rate-configurator.component\";\nimport { RefresherConfigurationComponent } from \"./components/widgets/configurator-items/refresher-configuration/refresher-configuration.component\";\nimport { RiskScoreTileDescriptionConfigurationComponent } from \"./components/widgets/configurator-items/risk-score-tile-description-configuration/risk-score-tile-description-configuration.component\";\nimport { ThresholdsConfigurationComponent } from \"./components/widgets/configurator-items/thresholds-configuration/thresholds-configuration.component\";\nimport { TimeseriesMetadataConfigurationComponent } from \"./components/widgets/configurator-items/timeseries-metadata-configuration/timeseries-metadata-configuration.component\";\nimport { TitleAndDescriptionConfigurationComponent } from \"./components/widgets/configurator-items/title-and-description-configuration/title-and-description-configuration.component\";\nimport { EntityFormattingConfigurationComponent } from \"./components/widgets/drilldown/entity-formatting-configuration/entity-formatting-configuration.component\";\nimport { GroupingConfigurationComponent } from \"./components/widgets/drilldown/grouping-configuration/grouping-configuration.component\";\nimport { KpiTilesConfigurationComponent } from \"./components/widgets/kpi/kpi-tiles-configuration/kpi-tiles-configuration.component\";\nimport { AggregatorMetricSelectorConfigurationComponent } from \"./components/widgets/proportional/aggregators-configurators/aggregator-configurator/aggregator-configurator.component\";\nimport { FieldMapperAggregatorConfiguratorComponent } from \"./components/widgets/proportional/aggregators-configurators/field-mapper-aggregator-configurator/field-mapper-aggregator-configurator.component\";\nimport { ProportionalChartOptionsEditorComponent } from \"./components/widgets/proportional/chart-options-editor/proportional-chart-options-editor.component\";\nimport { ProportionalChartOptionsEditorV2Component } from \"./components/widgets/proportional/chart-options-editor-v2/proportional-chart-options-editor-v2.component\";\nimport { DonutContentConfigurationComponent } from \"./components/widgets/proportional/donut-content-configuration/donut-content-configuration.component\";\nimport { RiskScoreTilesConfigurationComponent } from \"./components/widgets/risk-score/risk-score-tiles-configuration/risk-score-tiles-configuration.component\";\nimport { DescriptionConfigurationComponent } from \"./components/widgets/table/columns-editor/column-configuration/description-configuration/description-configuration.component\";\nimport { LinkConfiguratorComponent } from \"./components/widgets/table/columns-editor/column-configuration/presentation-configuration/portals/link-configurator/link-configurator.component\";\nimport { ValueSelectorComponent } from \"./components/widgets/table/columns-editor/column-configuration/presentation-configuration/portals/value-selector/value-selector.component\";\nimport { PresentationConfigurationComponent } from \"./components/widgets/table/columns-editor/column-configuration/presentation-configuration/presentation-configuration.component\";\nimport { TableColumnsConfigurationComponent } from \"./components/widgets/table/columns-editor/table-columns-configuration.component\";\nimport { DescriptionConfigurationV2Component } from \"./components/widgets/table/columns-editor-v2/column-configuration/description-configuration/description-configuration-v2.component\";\nimport { PresentationConfigurationV2Component } from \"./components/widgets/table/columns-editor-v2/column-configuration/presentation-configuration/presentation-configuration-v2.component\";\nimport { TableColumnConfigurationComponent } from \"./components/widgets/table/columns-editor-v2/column-configuration/table-column-configuration/table-column-configuration.component\";\nimport { TableColumnsConfigurationV2Component } from \"./components/widgets/table/columns-editor-v2/table-columns-configuration-v2.component\";\nimport { TableFiltersEditorComponent } from \"./components/widgets/table/filters-editor/table-filters-editor.component\";\nimport { TableScrollTypeEditorComponent } from \"./components/widgets/table/scrollType-editor/scroll-type-editor.component\";\nimport { ScrollTypeEditorService } from \"./components/widgets/table/scrollType-editor/scroll-type-editor.service\";\nimport { TimeseriesSeriesCollectionConfigurationComponent } from \"./components/widgets/timeseries/timeseries-series-collection-configuration/timeseries-series-collection-configuration.component\";\nimport { TimeseriesTileDescriptionConfigurationComponent } from \"./components/widgets/timeseries/timeseries-tile-description-configuration/timeseries-tile-description-configuration.component\";\nimport { TimeseriesTileIndicatorDataConfigurationComponent } from \"./components/widgets/timeseries/timeseries-tile-indicator-data-configuration/timeseries-tile-indicator-data-configuration.component\";\nimport { DashwizButtonsComponent } from \"./components/wizard/dashwiz/dashwiz-buttons.component\";\nimport { DashwizComponent } from \"./components/wizard/dashwiz/dashwiz.component\";\nimport { DashwizStepComponent } from \"./components/wizard/dashwiz-step/dashwiz-step.component\";\nimport { AddDataPipe } from \"./pipe/add-data.pipe\";\nimport { PizzagnaRootPipe } from \"./pipe/pizzagna-root.pipe\";\nimport { WidgetConfiguratorSectionHeaderPipe } from \"./pipe/widget-configurator-section-header.pipe\";\nimport { WidgetEditorAccordionFormStatePipe } from \"./pipe/widget-editor-accordion-form-state.pipe\";\nimport { FormHeaderIconPipePipe } from \"./pipe/widget-editor-accordion-header-icon.pipe\";\nimport { ConfiguratorService } from \"./services/configurator.service\";\nimport { KpiWidgetColorService } from \"./services/kpi-widget-color.service\";\nimport { ConfiguratorHeadingService } from \"./services/public-api\";\nimport { WidgetClonerService } from \"./services/widget-cloner.service\";\nimport { WidgetEditorService } from \"./services/widget-editor.service\";\n/* eslint-enable max-len */\n\nconst entryComponents: IComponentWithLateLoadKey[] = [\n    ConfiguratorComponent,\n    FormStackComponent,\n    DashwizButtonsComponent,\n    DataSourceConfigurationComponent,\n    DataSourceConfigurationV2Component,\n    DataSourceErrorComponent,\n    KpiTilesConfigurationComponent,\n    RiskScoreTilesConfigurationComponent,\n    EmbeddedContentConfigurationComponent,\n    InfoMessageConfigurationComponent,\n    ProportionalChartOptionsEditorComponent,\n    ProportionalChartOptionsEditorV2Component,\n    TableFiltersEditorComponent,\n    TableScrollTypeEditorComponent,\n    TimeseriesMetadataConfigurationComponent,\n    TimeseriesSeriesCollectionConfigurationComponent,\n    TableColumnsConfigurationComponent,\n    TableColumnsConfigurationV2Component,\n    TableColumnConfigurationComponent,\n    TableDataSourceErrorComponent,\n    DonutContentPercentageFormatterComponent,\n    DonutContentPercentageConfigurationComponent,\n    DonutContentSumFormatterComponent,\n    DonutContentRawFormatterComponent,\n    IconFormatterComponent,\n    SiUnitsFormatterComponent,\n    LinkConfiguratorComponent,\n    ValueSelectorComponent,\n    LinkFormatterComponent,\n    PreviewPlaceholderComponent,\n    StatusWithIconFormatterComponent,\n    RawFormatterComponent,\n    PercentageFormatterComponent,\n    KpiDescriptionConfigurationComponent,\n    RiskScoreTileDescriptionConfigurationComponent,\n    ThresholdsConfigurationComponent,\n    TitleAndDescriptionConfigurationComponent,\n    WidgetConfiguratorSectionComponent,\n    WidgetEditorComponent,\n    WidgetClonerComponent,\n    DescriptionConfigurationComponent,\n    DescriptionConfigurationV2Component,\n    PresentationConfigurationComponent,\n    PresentationConfigurationV2Component,\n    TimeseriesTileDescriptionConfigurationComponent,\n    TimeseriesTileIndicatorDataConfigurationComponent,\n    RefresherConfigurationComponent,\n    BackgroundColorRulesConfigurationComponent,\n    GroupingConfigurationComponent,\n    EntityFormattingConfigurationComponent,\n    DonutContentConfigurationComponent,\n    AggregatorMetricSelectorConfigurationComponent,\n    FieldMapperAggregatorConfiguratorComponent,\n];\n\nconst exportedDeclarations = [\n    ...entryComponents,\n    DashwizComponent,\n    DashwizStepComponent,\n    WidgetEditorAccordionComponent,\n    WidgetEditorAccordionHeaderComponent,\n    ItemsDynamicComponent,\n    ConfiguratorHeadingComponent,\n    RefreshRateConfiguratorComponent,\n    AddDataPipe,\n    PizzagnaRootPipe,\n    WidgetEditorAccordionFormStatePipe,\n    WidgetConfiguratorSectionHeaderPipe,\n    FormHeaderIconPipePipe,\n    DropAreaComponent,\n];\n\n@NgModule({\n    imports: [\n        ScrollingModule,\n        NuiDashboardsCommonModule,\n        ReactiveFormsModule,\n        GridsterModule,\n        DragDropModule,\n        PortalModule,\n        NuiBusyModule,\n        NuiPizzagnaModule,\n        NuiIconModule,\n        NuiMenuModule,\n        NuiPopupModule,\n        NuiDialogModule,\n        NuiSpinnerModule,\n        NuiTextboxModule,\n        NuiFormFieldModule,\n        NuiButtonModule,\n        NuiOverlayAdditionsModule,\n        NuiSelectV2Module,\n        NuiRadioModule,\n        NuiCheckboxModule,\n        NuiValidationMessageModule,\n        NuiExpanderModule,\n        NuiPanelModule,\n        NuiDividerModule,\n        NuiSwitchModule,\n        NuiMessageModule,\n        NuiWizardModule,\n        NuiSorterModule,\n        NuiSearchModule,\n        NuiRepeatModule,\n        NuiImageModule,\n        NuiColorPickerModule,\n    ],\n    declarations: [...exportedDeclarations],\n    providers: [\n        ConfiguratorService,\n        ConfiguratorHeadingService,\n        WidgetConfiguratorSectionCoordinatorService,\n        WidgetEditorService,\n        WidgetClonerService,\n        KpiWidgetColorService,\n        TimeseriesChartPresetService,\n        TimeseriesScalesService,\n        ScrollTypeEditorService,\n    ],\n    exports: exportedDeclarations,\n})\nexport class NuiDashboardConfiguratorModule {\n    constructor(componentRegistry: ComponentRegistryService) {\n        for (const ec of entryComponents.filter(\n            (c: IComponentWithLateLoadKey) => c.lateLoadKey\n        )) {\n            componentRegistry.registerByLateLoadKey(ec);\n        }\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Injectable } from \"@angular/core\";\nimport isFunction from \"lodash/isFunction\";\nimport { EMPTY, Observable, of } from \"rxjs\";\nimport { catchError } from \"rxjs/operators\";\n\nimport { LoggerService } from \"@nova-ui/bits\";\n\nimport { DashboardComponent } from \"../components/dashboard/dashboard.component\";\nimport { IConfiguratorSource } from \"../configurator/services/types\";\nimport { WidgetRemovalOperation } from \"../configurator/services/types\";\n\n@Injectable({ providedIn: \"root\" })\nexport class WidgetRemovalService {\n    constructor(private logger: LoggerService) {}\n\n    public handleRemove(\n        dashboardComponent: DashboardComponent,\n        widgetId: string,\n        configuratorSource: IConfiguratorSource,\n        tryRemove?: WidgetRemovalOperation\n    ): Observable<void> {\n        // TODO: Handle the case when tryRemove is undefined\n        // @ts-ignore\n        return this.tryRemove(tryRemove, widgetId, configuratorSource).pipe(\n            this.updateDashboard(dashboardComponent)\n        );\n    }\n\n    private tryRemove(\n        tryRemove: WidgetRemovalOperation,\n        widgetId: string,\n        configuratorSource: IConfiguratorSource\n    ) {\n        if (isFunction(tryRemove)) {\n            return tryRemove(widgetId, configuratorSource).pipe(\n                catchError((err: any) => {\n                    this.logger.error(err);\n                    return EMPTY;\n                })\n            );\n        } else {\n            return of(widgetId);\n        }\n    }\n\n    private updateDashboard =\n        (dashboardComponent: DashboardComponent) =>\n        (source: Observable<string>) =>\n            new Observable<void>((observer) =>\n                source.subscribe((widgetId: string) => {\n                    if (widgetId) {\n                        dashboardComponent.removeWidget(widgetId);\n                    }\n                    observer.next();\n                })\n            );\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { Directive, Host, Input, OnDestroy, OnInit, Self } from \"@angular/core\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport { Subject } from \"rxjs\";\n// eslint-disable-next-line import/no-deprecated\nimport { switchMap, takeUntil } from \"rxjs/operators\";\n\nimport { DashboardComponent } from \"../../components/dashboard/dashboard.component\";\nimport { IDashboardPersistenceHandler } from \"../../components/dashboard/types\";\nimport {\n    IConfiguratorSource,\n    IWidgetEditor,\n} from \"../../configurator/services/types\";\nimport { WidgetEditorService } from \"../../configurator/services/widget-editor.service\";\nimport { WIDGET_EDIT, WIDGET_REMOVE } from \"../../services/types\";\nimport { WidgetRemovalService } from \"../../services/widget-removal.service\";\nimport { WidgetTypesService } from \"../../services/widget-types.service\";\n\n@Directive({\n    selector: \"[nuiWidgetEditor]\",\n    standalone: false,\n})\nexport class WidgetEditorDirective implements OnInit, OnDestroy {\n    @Input(\"nuiWidgetEditor\")\n    dashboardPersistenceHandler: IDashboardPersistenceHandler;\n\n    private readonly destroy$ = new Subject<void>();\n\n    constructor(\n        @Host() @Self() private dashboardComponent: DashboardComponent,\n        private widgetEditorService: WidgetEditorService,\n        private widgetRemovalService: WidgetRemovalService,\n        private widgetTypesService: WidgetTypesService\n    ) {}\n\n    public ngOnInit(): void {\n        this.dashboardComponent.eventBus\n            .getStream(WIDGET_EDIT)\n            .pipe(\n                // eslint-disable-next-line import/no-deprecated\n                switchMap((event) => {\n                    const widget =\n                        this.dashboardComponent.dashboard.widgets[\n                            event.widgetId\n                        ];\n                    const widgetType = this.widgetTypesService.getWidgetType(\n                        widget.type,\n                        widget.version\n                    );\n                    // TODO: Ensure that widgetType is defined;\n                    const widgetEditor: IWidgetEditor = {\n                        dashboardComponent: this.dashboardComponent,\n                        // @ts-ignore: Configurator is possibly undefined and is not assignable to IPizzagna type\n                        formPizzagna: widgetType.configurator,\n                        // @ts-ignore: Type 'undefined' is not assignable to type 'Record<string, string>'.\n                        paths: widgetType.paths.configurator,\n                        widget,\n                        trySubmit:\n                            this.dashboardPersistenceHandler &&\n                            this.dashboardPersistenceHandler.trySubmit,\n                    };\n\n                    return this.widgetEditorService.open(widgetEditor);\n                }),\n                takeUntil(this.destroy$)\n            )\n            .subscribe();\n\n        this.dashboardComponent.eventBus\n            .getStream(WIDGET_REMOVE)\n            .pipe(\n                // eslint-disable-next-line import/no-deprecated\n                switchMap((event) => {\n                    if (!event.widgetId) {\n                        throw new Error(`event has to have widgetId`);\n                    }\n                    const widgetId = event.widgetId;\n                    const tryRemove =\n                        this.dashboardPersistenceHandler &&\n                        this.dashboardPersistenceHandler.tryRemove;\n\n                    const configuratorSource: IConfiguratorSource = {\n                        dashboardComponent: this.dashboardComponent,\n                        widget: cloneDeep(\n                            this.dashboardComponent.dashboard.widgets[widgetId]\n                        ),\n                    };\n                    return this.widgetRemovalService.handleRemove(\n                        this.dashboardComponent,\n                        widgetId,\n                        configuratorSource,\n                        tryRemove\n                    );\n                }),\n                takeUntil(this.destroy$)\n            )\n            .subscribe();\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n/* eslint-disable max-len */\nimport { FormStackComponent } from \"../../configurator/components/form-stack/form-stack.component\";\nimport { WidgetConfiguratorSectionComponent } from \"../../configurator/components/widget-configurator-section/widget-configurator-section.component\";\nimport { DataSourceConfigurationComponent } from \"../../configurator/components/widgets/configurator-items/data-source-configuration/data-source-configuration.component\";\nimport { TitleAndDescriptionConfigurationComponent } from \"../../configurator/components/widgets/configurator-items/title-and-description-configuration/title-and-description-configuration.component\";\nimport { EntityFormattingConfigurationComponent } from \"../../configurator/components/widgets/drilldown/entity-formatting-configuration/entity-formatting-configuration.component\";\nimport { GroupingConfigurationComponent } from \"../../configurator/components/widgets/drilldown/grouping-configuration/grouping-configuration.component\";\nimport { IConverterFormPartsProperties } from \"../../configurator/services/converters/types\";\nimport {\n    DEFAULT_PIZZAGNA_ROOT,\n    NOVA_GENERIC_CONVERTER,\n    NOVA_TITLE_AND_DESCRIPTION_CONVERTER,\n} from \"../../services/types\";\nimport {\n    IProviderConfiguration,\n    PizzagnaLayer,\n    WellKnownProviders,\n} from \"../../types\";\n/* eslint-enable max-len */\n\nexport const drilldownConfigurator = {\n    [PizzagnaLayer.Structure]: {\n        [DEFAULT_PIZZAGNA_ROOT]: {\n            id: DEFAULT_PIZZAGNA_ROOT,\n            // base layout of the configurator - all form components referenced herein will be stacked in a column\n            componentType: FormStackComponent.lateLoadKey,\n            properties: {\n                elementClass: \"flex-grow-1 overflow-auto nui-scroll-shadows\",\n                // references to other components laid out in this form\n                nodes: [\"presentation\", \"dataAndCalculations\"],\n            },\n        },\n        // /presentation\n        presentation: {\n            id: \"presentation\",\n            componentType: WidgetConfiguratorSectionComponent.lateLoadKey,\n            properties: {\n                headerText: $localize`Presentation`,\n                nodes: [\"titleAndDescription\"],\n            },\n        },\n        // /presentation/titleAndDescription\n        titleAndDescription: {\n            id: \"titleAndDescription\",\n            componentType:\n                TitleAndDescriptionConfigurationComponent.lateLoadKey,\n            providers: {\n                converter: {\n                    providerId: NOVA_TITLE_AND_DESCRIPTION_CONVERTER,\n                },\n            },\n        },\n        // /dataAndCalculations\n        dataAndCalculations: {\n            id: \"dataAndCalculations\",\n            componentType: WidgetConfiguratorSectionComponent.lateLoadKey,\n            properties: {\n                headerText: $localize`Data and calculations`,\n                nodes: [\"dataSource\", \"grouping\", \"entityFormatting\"],\n            },\n        },\n        dataSource: {\n            id: \"dataSource\",\n            componentType: DataSourceConfigurationComponent.lateLoadKey,\n            properties: {\n                // for the DataSourceConfigurationComponent, this defines the list of data sources to pick from\n                dataSourceProviders: [] as string[],\n            },\n            providers: {\n                // converter transforms the data source metadata between the widget and the form\n                [WellKnownProviders.Converter]: {\n                    providerId: NOVA_GENERIC_CONVERTER,\n                    properties: {\n                        formParts: [\n                            {\n                                // this component updates 'providerId' of 'dataSource'\n                                previewPath: \"/.providers.dataSource\",\n                                keys: [\"providerId\"],\n                            },\n                        ] as IConverterFormPartsProperties[],\n                    },\n                } as IProviderConfiguration,\n            },\n        },\n        // /dataAndCalculations/grouping\n        grouping: {\n            id: \"grouping\",\n            componentType: GroupingConfigurationComponent.lateLoadKey,\n            properties: {\n                // all available groups\n                groups: [],\n                // grouping for the list widget\n                groupBy: [],\n            },\n            providers: {\n                [WellKnownProviders.Converter]: {\n                    providerId: NOVA_GENERIC_CONVERTER,\n                    properties: {\n                        formParts: [\n                            {\n                                previewPath: `listWidget.providers.${WellKnownProviders.Adapter}.properties`,\n                                keys: [\"groupBy\", \"drillstate\", \"groups\"],\n                            },\n                        ] as IConverterFormPartsProperties[],\n                    },\n                } as IProviderConfiguration,\n            },\n        },\n        // /dataAndCalculations/entityFormatting\n        entityFormatting: {\n            id: \"entityFormatting\",\n            componentType: EntityFormattingConfigurationComponent.lateLoadKey,\n            properties: {\n                // TODO: Should be taken dynamically from DataSource. See NUI-5583\n                mappingKeys: [\"icon_status\", \"capital\", \"name\", \"icon\", \"url\"],\n                dataFieldIds: {\n                    icon: \"icon\",\n                    status: \"icon_status\",\n                    detailedUrl: \"capital\",\n                    label: \"name\",\n                    url: \"url\",\n                },\n            },\n            providers: {\n                [WellKnownProviders.Converter]: {\n                    providerId: NOVA_GENERIC_CONVERTER,\n                    properties: {\n                        formParts: [\n                            {\n                                previewPath: `listWidget.providers.${WellKnownProviders.Adapter}.properties.componentsConfig.leaf.properties`,\n                                keys: [\"dataFieldIds\"],\n                            },\n                        ] as IConverterFormPartsProperties[],\n                    },\n                } as IProviderConfiguration,\n            },\n        },\n    },\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { ErrorNodeKey } from \"./types\";\nimport { WidgetErrorComponent } from \"../../../common/components/widget-error/widget-error.component\";\nimport { LoadingComponent } from \"../../../components/loading/loading.component\";\nimport { IWidgetErrorDisplayProperties } from \"../../../components/widget/types\";\nimport { WidgetBodyComponent } from \"../../../components/widget/widget-body/widget-body.component\";\nimport { WidgetBodyContentComponent } from \"../../../components/widget/widget-body-content/widget-body-content.component\";\nimport { WidgetHeaderComponent } from \"../../../components/widget/widget-header/widget-header.component\";\nimport {\n    NOVA_LOADING_ADAPTER,\n    NOVA_STATUS_CONTENT_FALLBACK_ADAPTER,\n} from \"../../../services/types\";\nimport {\n    HttpStatusCode,\n    IComponentConfiguration,\n    IProviderConfiguration,\n    WellKnownProviders,\n} from \"../../../types\";\n\n/**\n * Component definition for the widget header node\n */\nexport const WIDGET_HEADER: IComponentConfiguration = {\n    id: \"header\",\n    componentType: WidgetHeaderComponent.lateLoadKey,\n    properties: {\n        editMode: false,\n    },\n};\n\n/**\n * Component definition for the loading node\n */\nexport const WIDGET_LOADING: IComponentConfiguration = {\n    id: \"loading\",\n    componentType: LoadingComponent.lateLoadKey,\n    providers: {\n        [WellKnownProviders.LoadingAdapter]: {\n            providerId: NOVA_LOADING_ADAPTER,\n        },\n    },\n};\n\n/**\n * Component configuration definition for the basic widget body node\n */\nexport const WIDGET_BODY: IComponentConfiguration = {\n    id: \"body\",\n    componentType: WidgetBodyComponent.lateLoadKey,\n    properties: {\n        // this value references the 'bodyContent' component in this structure\n        content: \"bodyContent\",\n    },\n};\n\n/**\n * A map of error codes to widget error node keys\n * --\n * An error code doesn't have to be an HTTP status code; it may be any string that matches an expected\n * data source error type. Additionally, the node keys may be any string as long as they correspond to an\n * error configuration node defined in the widget structure.\n */\nexport const ERROR_FALLBACK_MAP: Record<string, ErrorNodeKey> = {\n    [HttpStatusCode.Unknown]: ErrorNodeKey.ErrorUnknown,\n    [HttpStatusCode.Forbidden]: ErrorNodeKey.ErrorForbidden,\n    [HttpStatusCode.NotFound]: ErrorNodeKey.ErrorNotFound,\n};\n\n/**\n * An index of common error configurations\n */\nexport const ERROR_NODES: Record<string, IComponentConfiguration> = {\n    [ErrorNodeKey.ErrorUnknown]: {\n        id: ErrorNodeKey.ErrorUnknown,\n        componentType: WidgetErrorComponent.lateLoadKey,\n        properties: {\n            image: \"no-data-to-show\",\n            title: $localize`Whoops, something went wrong`,\n            description: $localize`There was an unexpected error.`,\n        } as IWidgetErrorDisplayProperties,\n    },\n    [ErrorNodeKey.ErrorForbidden]: {\n        id: ErrorNodeKey.ErrorForbidden,\n        componentType: WidgetErrorComponent.lateLoadKey,\n        properties: {\n            image: \"no-data-to-show\",\n            title: $localize`403 - Forbidden`,\n            description: $localize`The requested action was forbidden.`,\n        } as IWidgetErrorDisplayProperties,\n    },\n    [ErrorNodeKey.ErrorNotFound]: {\n        id: ErrorNodeKey.ErrorNotFound,\n        componentType: WidgetErrorComponent.lateLoadKey,\n        properties: {\n            image: \"no-data-to-show\",\n            title: $localize`404 - Not Found`,\n            description: $localize`The requested resource could not be found.`,\n        } as IWidgetErrorDisplayProperties,\n    },\n};\n\n/**\n * Retrieves an index of the basic widget body content nodes including fallback nodes\n *\n * @param mainContentNodeKey The key corresponding to the main body content node\n * @param fallbackAdapterId The id for the adapter responsible for activating fallback content in case of an error\n * @param fallbackMap A map of node keys to fallback content definitions\n * @param fallbackNodes An index of fallback content definitions\n *\n * @returns An index of component configurations\n */\nexport function widgetBodyContentNodes(\n    mainContentNodeKey: string,\n    fallbackAdapterId = NOVA_STATUS_CONTENT_FALLBACK_ADAPTER,\n    fallbackMap: Record<string, string> = ERROR_FALLBACK_MAP,\n    fallbackNodes: Record<string, IComponentConfiguration> = ERROR_NODES\n): Record<string, IComponentConfiguration> {\n    return {\n        bodyContent: {\n            id: \"bodyContent\",\n            componentType: WidgetBodyContentComponent.lateLoadKey,\n            properties: {\n                primaryContent: mainContentNodeKey,\n                fallbackMap,\n            },\n            providers: {\n                [WellKnownProviders.ContentFallbackAdapter]: {\n                    providerId: fallbackAdapterId,\n                } as IProviderConfiguration,\n            },\n        },\n        ...fallbackNodes,\n    };\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { IRefresherProperties } from \"../../../components/providers/refresher\";\nimport {\n    NOVA_DASHBOARD_EVENT_PROXY,\n    NOVA_DATASOURCE_INTERVAL_REFRESHER,\n} from \"../../../services/types\";\nimport { IProviderConfiguration } from \"../../../types\";\n\n/**\n * A provider configuration for the dashboard event proxy\n */\nexport const EVENT_PROXY: IProviderConfiguration = {\n    providerId: NOVA_DASHBOARD_EVENT_PROXY,\n} as IProviderConfiguration;\n\n/**\n * Retrieves a provider configuration for the interval refresher\n *\n * @param enabled Specify whether the adapter should be active by default\n * @param interval Specify the interval (in seconds) at which the refresher should invoke the data source adapter\n *\n * @returns A provider configuration for the refresher\n */\nexport function refresher(\n    enabled = false,\n    interval = 0\n): IProviderConfiguration {\n    return {\n        providerId: NOVA_DATASOURCE_INTERVAL_REFRESHER,\n        properties: {\n            enabled,\n            interval,\n        } as IRefresherProperties,\n    } as IProviderConfiguration;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { StackComponent } from \"../../components/layouts/stack/stack.component\";\nimport { ListNavigationBarComponent } from \"../../components/list-widget/list-elements/list-navigation-bar/list-navigation-bar.component\";\nimport { ListWidgetComponent } from \"../../components/list-widget/list-widget.component\";\nimport { WidgetSearchComponent } from \"../../components/widget-search/widget-search.component\";\nimport { DEFAULT_PIZZAGNA_ROOT } from \"../../services/types\";\nimport { IPizzagna, PizzagnaLayer, WellKnownProviders } from \"../../types\";\nimport {\n    widgetBodyContentNodes,\n    WIDGET_BODY,\n    WIDGET_HEADER,\n    WIDGET_LOADING,\n} from \"../common/widget/components\";\nimport { EVENT_PROXY } from \"../common/widget/providers\";\n\nexport const drilldownWidget: IPizzagna = {\n    [PizzagnaLayer.Structure]: {\n        [DEFAULT_PIZZAGNA_ROOT]: {\n            id: DEFAULT_PIZZAGNA_ROOT,\n            // base layout of the widget - all components referenced herein will be stacked in a column\n            componentType: StackComponent.lateLoadKey,\n            properties: {\n                // these values reference other components in this structure\n                nodes: [\"header\", \"loading\", \"search\", \"body\"],\n            },\n            providers: {\n                // event proxy manages the transmission of events between widget and dashboard\n                [WellKnownProviders.EventProxy]: EVENT_PROXY,\n            },\n        },\n        // widget header\n        header: WIDGET_HEADER,\n        // this is the loading bar below the header\n        loading: WIDGET_LOADING,\n        // widget body\n        body: {\n            ...WIDGET_BODY,\n            properties: {\n                ...WIDGET_BODY.properties,\n                elementClass: \"overflow-auto\",\n            },\n        },\n        // retrieving the definitions for the body content nodes. the argument corresponds to the main content node key\n        ...widgetBodyContentNodes(\"listWidget\"),\n        search: {\n            id: \"search\",\n            componentType: WidgetSearchComponent.lateLoadKey,\n        },\n        ...widgetBodyContentNodes(\"mainContent\"),\n        mainContent: {\n            id: \"mainContent\",\n            componentType: StackComponent.lateLoadKey,\n            properties: {\n                // these values reference other components in this configuration\n                nodes: [\"navigationBar\", \"listWidget\"],\n            },\n        },\n        navigationBar: {\n            id: \"navigationBar\",\n            componentType: ListNavigationBarComponent.lateLoadKey,\n        },\n        listWidget: {\n            id: \"listWidget\",\n            componentType: ListWidgetComponent.lateLoadKey,\n            providers: {},\n            properties: {\n                elementClass: \"w-100 p-3\",\n            },\n        },\n    },\n    [PizzagnaLayer.Configuration]: {\n        [DEFAULT_PIZZAGNA_ROOT]: {\n            id: DEFAULT_PIZZAGNA_ROOT,\n        },\n        // default header configuration\n        header: {\n            properties: {\n                title: $localize`Empty Custom Widget`,\n            },\n        },\n    },\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { drilldownConfigurator } from \"./drilldown-configurator\";\nimport { drilldownWidget } from \"./drilldown-widget\";\nimport { IWidgetTypeDefinition } from \"../../components/widget/types\";\nimport { DEFAULT_PIZZAGNA_ROOT } from \"../../services/types\";\nimport { WellKnownPathKey } from \"../../types\";\n\n/***********************************************************************************************************\n * Drilldown widget definition starts here\n ***********************************************************************************************************/\nexport const drilldown: IWidgetTypeDefinition = {\n    /***************************************************************************************************\n     *  Paths to important settings in this type definition\n     ***************************************************************************************************/\n    paths: {\n        widget: {\n            [WellKnownPathKey.Root]: DEFAULT_PIZZAGNA_ROOT,\n        },\n        configurator: {\n            [WellKnownPathKey.Root]: DEFAULT_PIZZAGNA_ROOT,\n            // for the default data source configuration component, this changes the list of data sources to pick from\n            [WellKnownPathKey.DataSourceProviders]:\n                \"dataSource.properties.dataSourceProviders\",\n        },\n    },\n    /***************************************************************************************************\n     *  Widget section describes the structural part of the KPI widget\n     ***************************************************************************************************/\n    widget: drilldownWidget,\n    /***************************************************************************************************\n     *  Configurator section describes the form that is used to configure the widget\n     ***************************************************************************************************/\n    configurator: drilldownConfigurator,\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n/* eslint-disable max-len */\nimport {\n    IInfoMessage,\n    IInfoMessageProperties,\n    ILinkDefinition,\n} from \"../../components/types\";\nimport { FormStackComponent } from \"../../configurator/components/form-stack/form-stack.component\";\nimport { WidgetConfiguratorSectionComponent } from \"../../configurator/components/widget-configurator-section/widget-configurator-section.component\";\nimport { EmbeddedContentConfigurationComponent } from \"../../configurator/components/widgets/configurator-items/embedded-content-configuration/embedded-content-configuration.component\";\nimport { InfoMessageConfigurationComponent } from \"../../configurator/components/widgets/configurator-items/info-message-configuration/info-message-configuration.component\";\nimport { TitleAndDescriptionConfigurationComponent } from \"../../configurator/components/widgets/configurator-items/title-and-description-configuration/title-and-description-configuration.component\";\nimport { IConverterFormPartsProperties } from \"../../configurator/services/converters/types\";\nimport {\n    DEFAULT_PIZZAGNA_ROOT,\n    NOVA_GENERIC_CONVERTER,\n    NOVA_TITLE_AND_DESCRIPTION_CONVERTER,\n} from \"../../services/types\";\nimport {\n    IProviderConfiguration,\n    PizzagnaLayer,\n    WellKnownProviders,\n} from \"../../types\";\n/* eslint-enable max-len */\n\nexport const embeddedContentConfigurator = {\n    [PizzagnaLayer.Structure]: {\n        [DEFAULT_PIZZAGNA_ROOT]: {\n            id: DEFAULT_PIZZAGNA_ROOT,\n            // base layout of the configurator - all form components referenced herein will be stacked in a column\n            componentType: FormStackComponent.lateLoadKey,\n            properties: {\n                elementClass: \"flex-grow-1 overflow-auto nui-scroll-shadows\",\n                // references to other components laid out in this form\n                nodes: [\"presentation\", \"customConfig\"],\n            },\n        },\n        // /presentation\n        presentation: {\n            id: \"presentation\",\n            componentType: WidgetConfiguratorSectionComponent.lateLoadKey,\n            properties: {\n                headerText: $localize`Presentation`,\n                nodes: [\"titleAndDescription\"],\n            },\n        },\n        // /presentation/titleAndDescription\n        titleAndDescription: {\n            id: \"titleAndDescription\",\n            componentType:\n                TitleAndDescriptionConfigurationComponent.lateLoadKey,\n            providers: {\n                converter: {\n                    providerId: NOVA_TITLE_AND_DESCRIPTION_CONVERTER,\n                } as IProviderConfiguration,\n            },\n        },\n        // /customConfig\n        customConfig: {\n            id: \"customConfig\",\n            componentType: WidgetConfiguratorSectionComponent.lateLoadKey,\n            properties: {\n                headerText: $localize`Custom Widget Configuration`,\n                nodes: [\"embeddedContentSelection\"],\n            },\n        },\n        // /customConfig/embeddedContentSelection\n        embeddedContentSelection: {\n            id: \"embeddedContentSelection\",\n            componentType: EmbeddedContentConfigurationComponent.lateLoadKey,\n            properties: {\n                messageComponent: {\n                    componentType:\n                        InfoMessageConfigurationComponent.lateLoadKey,\n                    properties: {\n                        emphasizeText: \"Some content may not work as expected.\",\n                        generalText: `Web pages embedded in a widget may not be able to open popup windows or may experience formatting problems.\n                                    If you supply your own HTML, dangerous content like scripts will be removed.`,\n                        link: {\n                            href: \"https://www.solarwinds.com/\",\n                            target: \"_blank\",\n                            text: \"Learn more about best practices for the HTML widget\",\n                        } as ILinkDefinition,\n                        allowDismiss: true,\n                    } as IInfoMessageProperties,\n                } as IInfoMessage,\n            },\n            providers: {\n                // converter transforms the data between the widget and the form\n                [WellKnownProviders.Converter]: {\n                    providerId: NOVA_GENERIC_CONVERTER,\n                    properties: {\n                        formParts: [\n                            {\n                                previewPath: \"mainContent.properties\",\n                                keys: [\n                                    \"customEmbeddedContent\",\n                                    \"mode\",\n                                    \"messageComponent\",\n                                    \"sanitized\",\n                                ],\n                            },\n                        ] as IConverterFormPartsProperties[],\n                    },\n                } as IProviderConfiguration,\n            },\n        },\n    },\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { EmbeddedContentComponent } from \"../../components/embedded-content/embedded-content.component\";\nimport { StackComponent } from \"../../components/layouts/stack/stack.component\";\nimport { DEFAULT_PIZZAGNA_ROOT } from \"../../services/types\";\nimport { PizzagnaLayer, WellKnownProviders } from \"../../types\";\nimport {\n    widgetBodyContentNodes,\n    WIDGET_BODY,\n    WIDGET_HEADER,\n    WIDGET_LOADING,\n} from \"../common/widget/components\";\nimport { EVENT_PROXY, refresher } from \"../common/widget/providers\";\n\nexport const embeddedContentWidget = {\n    [PizzagnaLayer.Structure]: {\n        [DEFAULT_PIZZAGNA_ROOT]: {\n            id: DEFAULT_PIZZAGNA_ROOT,\n            // base layout of the widget - all components referenced herein will be stacked in a column\n            componentType: StackComponent.lateLoadKey,\n            providers: {\n                // When enabled, this provider emits the REFRESH event on the pizzagna event bus every X seconds\n                [WellKnownProviders.Refresher]: refresher(),\n                // event proxy manages the transmission of events between widget and dashboard\n                [WellKnownProviders.EventProxy]: EVENT_PROXY,\n            },\n            properties: {\n                nodes: [\"header\", \"loading\", \"body\"],\n            },\n        },\n        // widget header\n        header: WIDGET_HEADER,\n        // this is the loading bar below the header\n        loading: WIDGET_LOADING,\n        // widget body\n        body: WIDGET_BODY,\n\n        /**\n         * Retrieving definitions for the body content nodes\n         * ---\n         * The first argument corresponds to the main content node key.\n         * The second argument is the id of the adapter responsible for activating fallback content in case of an error.\n         */\n        ...widgetBodyContentNodes(\"mainContent\"),\n\n        // the main content node specifying a component that manages layout of the KPI tiles in a CSS grid\n        mainContent: {\n            id: \"mainContent\",\n            componentType: EmbeddedContentComponent.lateLoadKey,\n            properties: {\n                elementClass: \"d-flex w-100 justify-content-center\",\n            },\n        },\n    },\n    [PizzagnaLayer.Configuration]: {\n        // default header configuration\n        header: {\n            properties: {\n                title: $localize`Empty Embedded Content Widget`,\n            },\n        },\n    },\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { embeddedContentConfigurator } from \"./embedded-content-configurator\";\nimport { embeddedContentWidget } from \"./embedded-content-widget\";\nimport { IWidgetTypeDefinition } from \"../../components/widget/types\";\nimport { DEFAULT_PIZZAGNA_ROOT } from \"../../services/types\";\nimport { WellKnownPathKey } from \"../../types\";\n\n/***********************************************************************************************************\n * EmbeddedContent widget definition starts here\n ***********************************************************************************************************/\nexport const embeddedContent: IWidgetTypeDefinition = {\n    /***************************************************************************************************\n     *  Paths to important settings in this type definition\n     ***************************************************************************************************/\n    paths: {\n        widget: {\n            [WellKnownPathKey.Root]: DEFAULT_PIZZAGNA_ROOT,\n        },\n        configurator: {\n            [WellKnownPathKey.Root]: DEFAULT_PIZZAGNA_ROOT,\n        },\n    },\n    /***************************************************************************************************\n     *  Widget section describes the structural part of the widget\n     ***************************************************************************************************/\n    widget: embeddedContentWidget,\n    /***************************************************************************************************\n     *  Configurator section describes the form that is used to configure the widget\n     ***************************************************************************************************/\n    configurator: embeddedContentConfigurator,\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n// eslint-disable-next-line max-len\nimport { RefresherConfigurationComponent } from \"../../../configurator/components/widgets/configurator-items/refresher-configuration/refresher-configuration.component\";\nimport {\n    DEFAULT_PIZZAGNA_ROOT,\n    NOVA_GENERIC_CONVERTER,\n} from \"../../../services/types\";\nimport { IComponentConfiguration, WellKnownProviders } from \"../../../types\";\n\n/**\n * Component configuration for the refresher configurator node\n */\nexport const REFRESHER_CONFIGURATOR: IComponentConfiguration = {\n    id: \"refresher\",\n    componentType: RefresherConfigurationComponent.lateLoadKey,\n    providers: {\n        [WellKnownProviders.Converter]: {\n            providerId: NOVA_GENERIC_CONVERTER,\n            properties: {\n                formParts: [\n                    {\n                        previewPath: `${DEFAULT_PIZZAGNA_ROOT}.providers.refresher.properties`,\n                        keys: [\n                            \"enabled\",\n                            \"interval\",\n                            \"overrideDefaultSettings\",\n                        ],\n                    },\n                ],\n            },\n        },\n    },\n    properties: {\n        overrideDefaultSettings: false,\n    },\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n/* eslint-disable max-len */\nimport { IBroadcasterConfig } from \"../../components/providers/types\";\nimport { IFormatterDefinition } from \"../../components/types\";\nimport { FormStackComponent } from \"../../configurator/components/form-stack/form-stack.component\";\nimport { IconFormatterComponent } from \"../../configurator/components/formatters/icon-formatter/icon-formatter.component\";\nimport { RawFormatterComponent } from \"../../configurator/components/formatters/raw-formatter/raw-formatter.component\";\nimport { SiUnitsFormatterComponent } from \"../../configurator/components/formatters/si-units-formatter/si-units-formatter.component\";\nimport { WidgetConfiguratorSectionComponent } from \"../../configurator/components/widget-configurator-section/widget-configurator-section.component\";\nimport { BackgroundColorRulesConfigurationComponent } from \"../../configurator/components/widgets/configurator-items/background-color-rules-configuration/background-color-rules-configuration.component\";\nimport { DataSourceConfigurationComponent } from \"../../configurator/components/widgets/configurator-items/data-source-configuration/data-source-configuration.component\";\nimport { DataSourceErrorComponent } from \"../../configurator/components/widgets/configurator-items/data-source-error/data-source-error.component\";\nimport { KpiDescriptionConfigurationComponent } from \"../../configurator/components/widgets/configurator-items/kpi-description-configuration/kpi-description-configuration.component\";\nimport { ThresholdsConfigurationComponent } from \"../../configurator/components/widgets/configurator-items/thresholds-configuration/thresholds-configuration.component\";\nimport { TitleAndDescriptionConfigurationComponent } from \"../../configurator/components/widgets/configurator-items/title-and-description-configuration/title-and-description-configuration.component\";\nimport { KpiTilesConfigurationComponent } from \"../../configurator/components/widgets/kpi/kpi-tiles-configuration/kpi-tiles-configuration.component\";\nimport { PresentationConfigurationComponent } from \"../../configurator/components/widgets/table/columns-editor/column-configuration/presentation-configuration/presentation-configuration.component\";\nimport { DEFAULT_KPI_BACKGROUND_COLORS } from \"../../constants/default-palette\";\nimport {\n    DEFAULT_PIZZAGNA_ROOT,\n    NOVA_KPI_FORMATTERS_REGISTRY,\n    NOVA_KPI_SECTION_CONVERTER,\n    NOVA_KPI_TILES_CONVERTER,\n    NOVA_PIZZAGNA_BROADCASTER,\n    NOVA_TITLE_AND_DESCRIPTION_CONVERTER,\n} from \"../../services/types\";\nimport {\n    IProviderConfiguration,\n    PizzagnaLayer,\n    WellKnownProviders,\n} from \"../../types\";\nimport { REFRESHER_CONFIGURATOR } from \"../common/configurator/components\";\n\n/* eslint-enable max-len */\n\nexport const DEFAULT_KPI_FORMATTERS: IFormatterDefinition[] = [\n    {\n        componentType: RawFormatterComponent.lateLoadKey,\n        label: $localize`Raw Formatter`,\n        dataTypes: {\n            // @ts-ignore\n            value: null,\n        },\n    },\n    {\n        componentType: SiUnitsFormatterComponent.lateLoadKey,\n        label: $localize`Si Units Formatter`,\n        dataTypes: {\n            // @ts-ignore\n            value: null,\n        },\n    },\n    {\n        componentType: IconFormatterComponent.lateLoadKey,\n        label: $localize`Icon`,\n        dataTypes: {\n            // @ts-ignore\n            value: null,\n        },\n    },\n];\n\nexport const kpiConfigurator = {\n    [PizzagnaLayer.Structure]: {\n        [DEFAULT_PIZZAGNA_ROOT]: {\n            id: DEFAULT_PIZZAGNA_ROOT,\n            // base layout of the configurator - all form components referenced herein will be stacked in a column\n            componentType: FormStackComponent.lateLoadKey,\n            properties: {\n                elementClass: \"flex-grow-1 overflow-auto nui-scroll-shadows\",\n                // references to other components laid out in this form\n                nodes: [\"presentation\", \"tiles\"],\n            },\n            providers: {\n                [WellKnownProviders.FormattersRegistry]: {\n                    providerId: NOVA_KPI_FORMATTERS_REGISTRY,\n                },\n            },\n        },\n        // /presentation\n        presentation: {\n            id: \"presentation\",\n            componentType: WidgetConfiguratorSectionComponent.lateLoadKey,\n            properties: {\n                headerText: $localize`Presentation`,\n                nodes: [\"titleAndDescription\", \"refresher\"],\n            },\n        },\n        // /presentation/titleAndDescription\n        titleAndDescription: {\n            id: \"titleAndDescription\",\n            componentType:\n                TitleAndDescriptionConfigurationComponent.lateLoadKey,\n            providers: {\n                converter: {\n                    providerId: NOVA_TITLE_AND_DESCRIPTION_CONVERTER,\n                },\n            },\n        },\n        refresher: REFRESHER_CONFIGURATOR,\n        // /tiles\n        tiles: {\n            id: \"tiles\",\n            componentType: KpiTilesConfigurationComponent.lateLoadKey,\n            properties: {\n                // these components serve as a template for every KPI tile created\n                template: [\n                    {\n                        // KPI tile description (label, color, etc.) configuration section\n                        id: \"description\",\n                        componentType:\n                            KpiDescriptionConfigurationComponent.lateLoadKey,\n                        properties: {\n                            configurableUnits: true,\n                            backgroundColors: [\n                                ...DEFAULT_KPI_BACKGROUND_COLORS,\n                            ],\n                        },\n                        providers: {\n                            // converter transforms the data between the widget and the form\n                            [WellKnownProviders.Converter]: {\n                                providerId: NOVA_KPI_SECTION_CONVERTER,\n                                properties: {\n                                    formParts: [\n                                        {\n                                            previewPath:\n                                                \"properties.widgetData\",\n                                            keys: [\n                                                \"label\",\n                                                \"backgroundColor\",\n                                                \"units\",\n                                            ],\n                                        },\n                                    ],\n                                },\n                            } as IProviderConfiguration,\n                        },\n                    },\n                    {\n                        // data source configuration section\n                        id: \"dataSource\",\n                        componentType:\n                            DataSourceConfigurationComponent.lateLoadKey,\n                        properties: {\n                            // for the DataSourceConfigurationComponent, this defines the list of data sources to pick from\n                            dataSourceProviders: [] as string[],\n                            errorComponent:\n                                DataSourceErrorComponent.lateLoadKey,\n                        },\n                        providers: {\n                            // converter transforms the data source metadata between the widget and the form\n                            [WellKnownProviders.Converter]: {\n                                providerId: NOVA_KPI_SECTION_CONVERTER,\n                                properties: {\n                                    formParts: [\n                                        {\n                                            // this component updates 'providerId' of 'dataSource'\n                                            previewPath: \"providers.dataSource\",\n                                            // TODO: Remove 'properties' key in v10 - NUI-5831\n                                            keys: [\"providerId\", \"properties\"],\n                                        },\n                                        {\n                                            // this component updates 'properties' of 'dataSource' via an adapter\n                                            previewPath:\n                                                \"providers.adapter.properties.dataSource\",\n                                            keys: [\"properties\"],\n                                        },\n                                    ],\n                                },\n                            } as IProviderConfiguration,\n                            [WellKnownProviders.Broadcaster]: {\n                                providerId: NOVA_PIZZAGNA_BROADCASTER,\n                                properties: {\n                                    configs: [\n                                        {\n                                            trackOn: \"component\",\n                                            key: \"dataFieldIds\",\n                                            paths: [\n                                                \"data.{parentComponentId}/formatting.properties.dataFieldIds\",\n                                            ],\n                                        },\n                                    ] as IBroadcasterConfig[],\n                                },\n                            },\n                        },\n                    },\n                    {\n                        // thresholds configuration section\n                        id: \"thresholds\",\n                        componentType:\n                            ThresholdsConfigurationComponent.lateLoadKey,\n                        providers: {\n                            // converter transforms the data between the widget and the form\n                            [WellKnownProviders.Converter]: {\n                                providerId: NOVA_KPI_SECTION_CONVERTER,\n                                properties: {\n                                    formParts: [\n                                        {\n                                            // this component updates `thresholds` properties of `adapter`\n                                            previewPath:\n                                                \"providers.adapter.properties.thresholds\",\n                                            keys: [\n                                                \"criticalThresholdValue\",\n                                                \"warningThresholdValue\",\n                                                \"showThresholds\",\n                                                \"reversedThresholds\",\n                                            ],\n                                        },\n                                    ],\n                                },\n                            } as IProviderConfiguration,\n                        },\n                    },\n                    {\n                        id: \"backgroundColorRules\",\n                        componentType:\n                            BackgroundColorRulesConfigurationComponent.lateLoadKey,\n                        properties: {\n                            backgroundColors: [\n                                ...DEFAULT_KPI_BACKGROUND_COLORS,\n                            ],\n                        },\n                        providers: {\n                            [WellKnownProviders.Converter]: {\n                                providerId: NOVA_KPI_SECTION_CONVERTER,\n                                properties: {\n                                    formParts: [\n                                        {\n                                            previewPath:\n                                                \"providers.kpiColorPrioritizer.properties\",\n                                            keys: [\"rules\"],\n                                        },\n                                    ],\n                                },\n                            } as IProviderConfiguration,\n                        },\n                    },\n                    {\n                        id: \"formatting\",\n                        componentType:\n                            PresentationConfigurationComponent.lateLoadKey,\n                        providers: {\n                            [WellKnownProviders.Converter]: {\n                                providerId: NOVA_KPI_SECTION_CONVERTER,\n                                properties: {\n                                    formParts: [\n                                        {\n                                            previewPath:\n                                                \"properties.configuration.formatters.Value\",\n                                            keys: [\"formatter\"],\n                                        },\n                                    ],\n                                },\n                            } as IProviderConfiguration,\n                        },\n                        properties: {\n                            // Note: Now you should define your formatters in the KpiFormatterRegistry which can contain more formatter options\n                            // formatters: DEFAULT_KPI_FORMATTERS,\n\n                            // Set default formatter to the configuration section as RawFormatterComponent.\n                            // In case Kpi doesn't use the formatters yet, it will be overridden with default formatter value on first save\n                            formatter: {\n                                componentType:\n                                    RawFormatterComponent.lateLoadKey,\n                                properties: {\n                                    dataFieldIds: {\n                                        value: \"value\",\n                                    },\n                                },\n                            },\n                        },\n                    },\n                ],\n            },\n            providers: {\n                // converter transforms the data between the widget and the form\n                [WellKnownProviders.Converter]: {\n                    providerId: NOVA_KPI_TILES_CONVERTER,\n                } as IProviderConfiguration,\n            },\n        },\n    },\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { KpiComponent } from \"../../components/kpi-widget/kpi.component\";\nimport { StackComponent } from \"../../components/layouts/stack/stack.component\";\nimport { TilesComponent } from \"../../components/layouts/tiles/tiles.component\";\nimport {\n    DEFAULT_PIZZAGNA_ROOT,\n    NOVA_KPI_COLOR_PRIORITIZER,\n    NOVA_KPI_DATASOURCE_ADAPTER,\n    NOVA_KPI_STATUS_CONTENT_FALLBACK_ADAPTER,\n} from \"../../services/types\";\nimport {\n    IProviderConfiguration,\n    PizzagnaLayer,\n    WellKnownProviders,\n} from \"../../types\";\nimport {\n    widgetBodyContentNodes,\n    WIDGET_BODY,\n    WIDGET_HEADER,\n    WIDGET_LOADING,\n} from \"../common/widget/components\";\nimport { EVENT_PROXY, refresher } from \"../common/widget/providers\";\n\nexport const kpiWidget = {\n    [PizzagnaLayer.Structure]: {\n        [DEFAULT_PIZZAGNA_ROOT]: {\n            id: DEFAULT_PIZZAGNA_ROOT,\n            // base layout of the widget - all components referenced herein will be stacked in a column\n            componentType: StackComponent.lateLoadKey,\n            providers: {\n                // When enabled, this provider emits the REFRESH event on the pizzagna event bus every X seconds\n                [WellKnownProviders.Refresher]: refresher(),\n                // event proxy manages the transmission of events between widget and dashboard\n                [WellKnownProviders.EventProxy]: EVENT_PROXY,\n            },\n            properties: {\n                nodes: [\"header\", \"loading\", \"body\"],\n            },\n        },\n        // widget header\n        header: WIDGET_HEADER,\n        // this is the loading bar below the header\n        loading: WIDGET_LOADING,\n        // widget body\n        body: {\n            ...WIDGET_BODY,\n            properties: {\n                ...WIDGET_BODY.properties,\n                elementClass: \"overflow-hidden\",\n            },\n        },\n\n        /**\n         * Retrieving definitions for the body content nodes\n         * ---\n         * The first argument corresponds to the main content node key.\n         * The second argument is the id of the adapter responsible for activating fallback content in case of an error.\n         */\n        ...widgetBodyContentNodes(\n            \"tiles\",\n            NOVA_KPI_STATUS_CONTENT_FALLBACK_ADAPTER\n        ),\n\n        // the main content node specifying a component that manages layout of the KPI tiles in a CSS grid\n        tiles: {\n            id: \"tiles\",\n            componentType: TilesComponent.lateLoadKey,\n            properties: {\n                elementClass: \"flex-grow-1 pt-2 px-3 pb-3 w-100\",\n                template: {\n                    componentType: KpiComponent.lateLoadKey,\n                    providers: {\n                        [WellKnownProviders.KpiColorPrioritizer]: {\n                            providerId: NOVA_KPI_COLOR_PRIORITIZER,\n                            properties: {},\n                        } as IProviderConfiguration,\n                        [WellKnownProviders.Adapter]: {\n                            providerId: NOVA_KPI_DATASOURCE_ADAPTER,\n                            properties: {\n                                propertyPath: \"widgetData\",\n                            },\n                        } as IProviderConfiguration,\n                    },\n                    properties: {\n                        elementClass: \"flex-grow-1\",\n                    },\n                },\n            },\n        },\n    },\n    [PizzagnaLayer.Configuration]: {\n        [DEFAULT_PIZZAGNA_ROOT]: {\n            id: DEFAULT_PIZZAGNA_ROOT,\n            providers: {\n                // default refresher configuration\n                [WellKnownProviders.Refresher]: refresher(false, 60),\n            },\n        },\n        // default header configuration\n        header: {\n            properties: {\n                title: $localize`Empty KPI Widget`,\n            },\n        },\n    },\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { kpiConfigurator } from \"./kpi-configurator\";\nimport { kpiWidget } from \"./kpi-widget\";\nimport { IWidgetTypeDefinition } from \"../../components/widget/types\";\nimport { DEFAULT_PIZZAGNA_ROOT } from \"../../services/types\";\nimport { WellKnownPathKey } from \"../../types\";\n\nconst tileDescriptionConfiguratorTemplatePath = `tiles.properties.template[0]`;\nconst dataSourceConfiguratorTemplatePath = `tiles.properties.template[1]`;\nconst backgroundColorRulesConfiguratorTemplatePath = `tiles.properties.template[3]`;\n\n/***********************************************************************************************************\n * KPI widget definition starts here\n ***********************************************************************************************************/\nexport const kpi: IWidgetTypeDefinition = {\n    /***************************************************************************************************\n     *  Paths to important settings in this type definition\n     ***************************************************************************************************/\n    paths: {\n        widget: {\n            [WellKnownPathKey.Root]: DEFAULT_PIZZAGNA_ROOT,\n        },\n        configurator: {\n            [WellKnownPathKey.Root]: DEFAULT_PIZZAGNA_ROOT,\n            // this points at the component type you need to change if you want to change the component for data source configuration\n            [WellKnownPathKey.DataSourceConfigComponentType]: `${dataSourceConfiguratorTemplatePath}.componentType`,\n            // this points at the component type you need to change if you want to change the component for tile description configuration\n            [WellKnownPathKey.TileDescriptionConfigComponentType]: `${tileDescriptionConfiguratorTemplatePath}.componentType`,\n            // for the default data source configuration component, this changes the list of data sources to pick from\n            [WellKnownPathKey.DataSourceProviders]: `${dataSourceConfiguratorTemplatePath}.properties.dataSourceProviders`,\n            // this points to the Tile's description background color picker\n            [WellKnownPathKey.TileDescriptionBackgroundColors]: `${tileDescriptionConfiguratorTemplatePath}.properties.backgroundColors`,\n            // this points to the Background Color Rules background color picker\n            [WellKnownPathKey.TileBackgroundColorRulesBackgroundColors]: `${backgroundColorRulesConfiguratorTemplatePath}.properties.backgroundColors`,\n        },\n    },\n    /***************************************************************************************************\n     *  Widget section describes the structural part of the KPI widget\n     ***************************************************************************************************/\n    widget: kpiWidget,\n    /***************************************************************************************************\n     *  Configurator section describes the form that is used to configure the widget\n     ***************************************************************************************************/\n    configurator: kpiConfigurator,\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { StackComponent } from \"../components/layouts/stack/stack.component\";\nimport { IWidgetTypeDefinition } from \"../components/widget/types\";\nimport { PreviewPlaceholderComponent } from \"../configurator/components/preview-placeholder/preview-placeholder.component\";\nimport { DEFAULT_PIZZAGNA_ROOT } from \"../services/types\";\nimport { PizzagnaLayer, WellKnownPathKey } from \"../types\";\nimport { WIDGET_BODY, WIDGET_HEADER } from \"./common/widget/components\";\n\nexport const previewPlaceholder: IWidgetTypeDefinition = {\n    paths: {\n        widget: {\n            [WellKnownPathKey.Root]: DEFAULT_PIZZAGNA_ROOT,\n        },\n        configurator: {\n            [WellKnownPathKey.Root]: DEFAULT_PIZZAGNA_ROOT,\n        },\n    },\n    widget: {\n        [PizzagnaLayer.Structure]: {\n            [DEFAULT_PIZZAGNA_ROOT]: {\n                id: DEFAULT_PIZZAGNA_ROOT,\n                componentType: StackComponent.lateLoadKey,\n                properties: {\n                    nodes: [\"header\", \"body\"],\n                },\n            },\n            header: WIDGET_HEADER,\n            body: WIDGET_BODY,\n            bodyContent: {\n                id: \"bodyContent\",\n                componentType: PreviewPlaceholderComponent.lateLoadKey,\n            },\n        },\n        [PizzagnaLayer.Configuration]: {\n            header: {\n                properties: {\n                    title: $localize`New Widget`,\n                },\n            },\n        },\n    },\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport get from \"lodash/get\";\n\nimport {\n    IProportionalAggregatorFn,\n    IProportionalAggregatorOrigin,\n    IProportionalDonutContentAggregatorProperties,\n} from \"./types\";\n\nexport interface IFieldMapperAggregatorProperties\n    extends IProportionalDonutContentAggregatorProperties {\n    chartSeriesDataFieldId?: string;\n}\n\nexport const fieldMapper: IProportionalAggregatorFn = (\n    origin: IProportionalAggregatorOrigin,\n    properties?: IFieldMapperAggregatorProperties\n): any => {\n    const chartSeriesDataFieldId =\n        properties?.chartSeriesDataFieldId || \"data[0]\";\n\n    let metric: any = origin[0];\n    if (properties?.activeMetricId) {\n        metric = origin.find(\n            (entry) => entry.id === properties?.activeMetricId\n        );\n\n        if (!metric) {\n            console.warn(\n                `No metric with id: ${properties?.activeMetricId} found. Taking first available.`\n            );\n        }\n    }\n\n    return get(metric, chartSeriesDataFieldId);\n};\n\nfieldMapper.aggregatorType = \"fieldMapper\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport sum from \"lodash/sum\";\n\nimport {\n    IProportionalAggregatorFn,\n    IProportionalAggregatorOrigin,\n    IProportionalDonutContentAggregatorProperties,\n} from \"./types\";\n\nexport interface IPercentageAggregatorProperties\n    extends IProportionalDonutContentAggregatorProperties {\n    /** if \"true\" it'll be 58 not 0.58 */\n    base100?: boolean;\n}\n\n/**\n * Aggregator for the Proportional Widget with Donut chart type.\n *\n * Receives all the metrics from the donut and gets the active metric percentage.\n */\nexport const percentageAggregator: IProportionalAggregatorFn = (\n    origin: IProportionalAggregatorOrigin,\n    properties?: IPercentageAggregatorProperties\n): string => {\n    const data = origin.map((v) => v.data[0]);\n    const { activeMetricId, base100 } = properties || {};\n\n    const summed = sum(data);\n\n    let metric = data[0];\n    if (activeMetricId) {\n        metric = origin.find((entry) => entry.id === activeMetricId)?.data[0];\n\n        if (!metric) {\n            console.warn(\n                `No metric with id: ${activeMetricId} found. Taking first available.`\n            );\n        }\n    }\n\n    const percentage = metric / summed;\n\n    let finalValue = base100 ? percentage * 100 : percentage;\n    // round to 2 digits on fractional part\n    finalValue = Math.round(finalValue * 100) / 100;\n\n    return finalValue.toString();\n};\n\npercentageAggregator.aggregatorType = \"percentageAggregator\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport sum from \"lodash/sum\";\n\nimport {\n    IProportionalAggregatorFn,\n    IProportionalAggregatorOrigin,\n    IProportionalDonutContentAggregatorProperties,\n} from \"./types\";\n\n/**\n * Receives all the metrics from the donut and gets their sum.\n */\nexport const sumAggregator: IProportionalAggregatorFn = (\n    origin: IProportionalAggregatorOrigin,\n    properties?: IProportionalDonutContentAggregatorProperties\n): string => {\n    const { activeMetricId } = properties || {};\n\n    if (activeMetricId) {\n        const activeMetric = origin.find(\n            (entry) => entry.id === activeMetricId\n        );\n        if (activeMetric) {\n            return activeMetric.data[0];\n        }\n    }\n\n    return sum(origin.map((entry) => entry.data[0])).toString();\n};\n\nsumAggregator.aggregatorType = \"sumAggregator\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n/* eslint-disable max-len */\nimport { IBroadcasterConfig } from \"../../components/providers/types\";\nimport { IFormatterDefinition } from \"../../components/types\";\nimport { FormStackComponent } from \"../../configurator/components/form-stack/form-stack.component\";\nimport { DonutContentPercentageFormatterComponent } from \"../../configurator/components/formatters/donut-content-percentage-formatter/donut-content-percentage-formatter.component\";\nimport { DonutContentRawFormatterComponent } from \"../../configurator/components/formatters/donut-content-raw-formatter/donut-content-raw-formatter.component\";\nimport { DonutContentSumFormatterComponent } from \"../../configurator/components/formatters/donut-content-sum-formatter/donut-content-sum-formatter.component\";\nimport { LinkFormatterComponent } from \"../../configurator/components/formatters/link-formatter/link-formatter.component\";\nimport { PercentageFormatterComponent } from \"../../configurator/components/formatters/percentage-formatter/percentage-formatter.component\";\nimport { RawFormatterComponent } from \"../../configurator/components/formatters/raw-formatter/raw-formatter.component\";\nimport { SiUnitsFormatterComponent } from \"../../configurator/components/formatters/si-units-formatter/si-units-formatter.component\";\nimport { StatusWithIconFormatterComponent } from \"../../configurator/components/formatters/status-with-icon-formatter/status-with-icon-formatter.component\";\nimport { WidgetConfiguratorSectionComponent } from \"../../configurator/components/widget-configurator-section/widget-configurator-section.component\";\nimport { DataSourceConfigurationComponent } from \"../../configurator/components/widgets/configurator-items/data-source-configuration/data-source-configuration.component\";\nimport { DataSourceErrorComponent } from \"../../configurator/components/widgets/configurator-items/data-source-error/data-source-error.component\";\nimport { TitleAndDescriptionConfigurationComponent } from \"../../configurator/components/widgets/configurator-items/title-and-description-configuration/title-and-description-configuration.component\";\nimport { AggregatorMetricSelectorConfigurationComponent } from \"../../configurator/components/widgets/proportional/aggregators-configurators/aggregator-configurator/aggregator-configurator.component\";\nimport { FieldMapperAggregatorConfiguratorComponent } from \"../../configurator/components/widgets/proportional/aggregators-configurators/field-mapper-aggregator-configurator/field-mapper-aggregator-configurator.component\";\nimport { ProportionalChartOptionsEditorComponent } from \"../../configurator/components/widgets/proportional/chart-options-editor/proportional-chart-options-editor.component\";\nimport { fieldMapper } from \"../../functions/proportional-aggregators/field-mapper\";\nimport {\n    IPercentageAggregatorProperties,\n    percentageAggregator,\n} from \"../../functions/proportional-aggregators/percentage-aggregator\";\nimport { sumAggregator } from \"../../functions/proportional-aggregators/sum-aggregator\";\nimport { IProportionalDonutContentAggregatorDefinition } from \"../../functions/proportional-aggregators/types\";\nimport {\n    DEFAULT_PIZZAGNA_ROOT,\n    NOVA_GENERIC_CONVERTER,\n    NOVA_PIZZAGNA_BROADCASTER,\n    NOVA_PROPORTIONAL_CONTENT_FORMATTERS_REGISTRY,\n    NOVA_PROPORTIONAL_WIDGET_CHART_OPTIONS_CONVERTER,\n    NOVA_TITLE_AND_DESCRIPTION_CONVERTER,\n} from \"../../services/types\";\nimport { PizzagnaLayer, WellKnownProviders } from \"../../types\";\nimport { LegendPlacement } from \"../../widget-types/common/widget/legend\";\nimport { REFRESHER_CONFIGURATOR } from \"../common/configurator/components\";\n/* eslint-enable max-len */\n\nexport const DEFAULT_LEGEND_FORMATTERS: IFormatterDefinition[] = [\n    {\n        componentType: \"\",\n        label: $localize`Raw Formatter`,\n        dataTypes: {\n            // @ts-ignore\n            value: null,\n        },\n    },\n    {\n        componentType: StatusWithIconFormatterComponent.lateLoadKey,\n        label: $localize`Status With Icon`,\n        dataTypes: {\n            // @ts-ignore\n            value: null,\n        },\n    },\n    {\n        componentType: LinkFormatterComponent.lateLoadKey,\n        label: $localize`Link`,\n        dataTypes: {\n            // @ts-ignore\n            value: null,\n        },\n    },\n];\nexport const DEFAULT_PROPORTIONAL_CONTENT_FORMATTERS: IFormatterDefinition[] = [\n    {\n        componentType: RawFormatterComponent.lateLoadKey,\n        label: $localize`Raw Formatter`,\n        dataTypes: {\n            // @ts-ignore\n            value: null,\n        },\n        properties: {\n            elementClass: \"nui-text-page\",\n        },\n    },\n    {\n        componentType: SiUnitsFormatterComponent.lateLoadKey,\n        label: $localize`Si Units Formatter`,\n        dataTypes: {\n            // @ts-ignore\n            value: null,\n        },\n        properties: {\n            elementClass: \"nui-text-page\",\n        },\n    },\n    {\n        componentType: PercentageFormatterComponent.lateLoadKey,\n        label: $localize`Percentage Formatter`,\n        dataTypes: {\n            // @ts-ignore\n            value: null,\n        },\n        properties: {\n            elementClass: \"nui-text-page\",\n        },\n    },\n];\n\nexport const DEFAULT_PROPORTIONAL_CONTENT_AGGREGATORS: IProportionalDonutContentAggregatorDefinition[] =\n    [\n        {\n            aggregatorType: sumAggregator.aggregatorType,\n            label: \"Sum Aggregator\",\n            fn: sumAggregator,\n            configurationComponent:\n                AggregatorMetricSelectorConfigurationComponent.lateLoadKey,\n        },\n        {\n            aggregatorType: percentageAggregator.aggregatorType,\n            label: \"Percentage Aggregator\",\n            fn: percentageAggregator,\n            properties: {\n                base100: true,\n            } as IPercentageAggregatorProperties,\n            configurationComponent:\n                AggregatorMetricSelectorConfigurationComponent.lateLoadKey,\n        },\n        {\n            aggregatorType: fieldMapper.aggregatorType,\n            label: \"Field Mapper Aggregator\",\n            fn: fieldMapper,\n            configurationComponent:\n                FieldMapperAggregatorConfiguratorComponent.lateLoadKey,\n        },\n    ];\n\nexport const proportionalConfigurator = {\n    [PizzagnaLayer.Structure]: {\n        [DEFAULT_PIZZAGNA_ROOT]: {\n            id: DEFAULT_PIZZAGNA_ROOT,\n            // base layout of the configurator - all form components referenced herein will be stacked in a column\n            componentType: FormStackComponent.lateLoadKey,\n            properties: {\n                elementClass: \"flex-grow-1 overflow-auto nui-scroll-shadows\",\n                // references to other components laid out in this form\n                nodes: [\"presentation\", \"dataAndCalculations\"],\n            },\n            providers: {\n                [WellKnownProviders.FormattersRegistry]: {\n                    providerId: NOVA_PROPORTIONAL_CONTENT_FORMATTERS_REGISTRY,\n                },\n            },\n        },\n        // /presentation\n        presentation: {\n            id: \"presentation\",\n            componentType: WidgetConfiguratorSectionComponent.lateLoadKey,\n            properties: {\n                headerText: \"Presentation\",\n                nodes: [\"titleAndDescription\", \"chartOptionsEditor\"],\n            },\n        },\n        // /presentation/titleAndDescription\n        titleAndDescription: {\n            id: \"titleAndDescription\",\n            componentType:\n                TitleAndDescriptionConfigurationComponent.lateLoadKey,\n            providers: {\n                [WellKnownProviders.Converter]: {\n                    providerId: NOVA_TITLE_AND_DESCRIPTION_CONVERTER,\n                },\n            },\n        },\n        // /presentation/chartOptionsEditor\n        chartOptionsEditor: {\n            id: \"chartOptionsEditor\",\n            componentType: ProportionalChartOptionsEditorComponent.lateLoadKey,\n            properties: {\n                chartOptions: {\n                    chartTypes: [\n                        \"PieChart\",\n                        \"DonutChart\",\n                        \"VerticalBarChart\",\n                        \"HorizontalBarChart\",\n                    ],\n                    legendPlacementOptions: [\n                        {\n                            id: LegendPlacement.None,\n                            label: $localize`None`,\n                        },\n                        {\n                            id: LegendPlacement.Right,\n                            label: $localize`Right`,\n                        },\n                        {\n                            id: LegendPlacement.Bottom,\n                            label: $localize`Bottom`,\n                        },\n                    ],\n                    contentFormatters: [\n                        {\n                            componentType:\n                                DonutContentRawFormatterComponent.lateLoadKey,\n                            label: $localize`Raw`,\n                        },\n                        {\n                            componentType:\n                                DonutContentSumFormatterComponent.lateLoadKey,\n                            label: $localize`Sum`,\n                        },\n                        {\n                            componentType:\n                                DonutContentPercentageFormatterComponent.lateLoadKey,\n                            label: $localize`Percentage`,\n                            configurationComponent:\n                                \"DonutContentPercentageConfigurationComponent\",\n                        },\n                    ] as IFormatterDefinition[],\n                    legendFormatters: [\n                        {\n                            componentType:\n                                StatusWithIconFormatterComponent.lateLoadKey,\n                            label: $localize`Status With Icon`,\n                        },\n                        {\n                            componentType: LinkFormatterComponent.lateLoadKey,\n                            label: $localize`Link`,\n                        },\n                    ] as IFormatterDefinition[],\n                },\n            },\n            providers: {\n                // converter transforms the chart options data between the widget and the form\n                [WellKnownProviders.Converter]: {\n                    providerId:\n                        NOVA_PROPORTIONAL_WIDGET_CHART_OPTIONS_CONVERTER,\n                },\n            },\n        },\n        refresher: REFRESHER_CONFIGURATOR,\n        // /dataAndCalculations\n        dataAndCalculations: {\n            id: \"dataAndCalculations\",\n            componentType: WidgetConfiguratorSectionComponent.lateLoadKey,\n            properties: {\n                headerText: $localize`Data and Calculations`,\n                nodes: [\"dataSource\"],\n            },\n        },\n        // /dataAndCalculations/dataSource\n        dataSource: {\n            id: \"dataSource\",\n            componentType: DataSourceConfigurationComponent.lateLoadKey,\n            properties: {\n                // for the DataSourceConfigurationComponent, this defines the list of data sources to pick from\n                dataSourceProviders: [] as string[],\n                errorComponent: DataSourceErrorComponent.lateLoadKey,\n            },\n            providers: {\n                // converter transforms the data source metadata between the widget and the form\n                [WellKnownProviders.Converter]: {\n                    providerId: NOVA_GENERIC_CONVERTER,\n                    properties: {\n                        formParts: [\n                            {\n                                // this component updates the 'providerId' of the 'dataSource'\n                                previewPath: \"chart.providers.dataSource\",\n                                // TODO: Remove 'properties' key in v10 - NUI-5831\n                                keys: [\"providerId\", \"properties\"],\n                            },\n                            {\n                                // this component updates the 'properties' of the 'dataSource' via an adapter\n                                previewPath:\n                                    \"chart.providers.adapter.properties.dataSource\",\n                                keys: [\"properties\"],\n                            },\n                        ],\n                    },\n                },\n                [WellKnownProviders.Broadcaster]: {\n                    providerId: NOVA_PIZZAGNA_BROADCASTER,\n                    properties: {\n                        configs: [\n                            {\n                                trackOn: \"component\",\n                                key: \"dsOutput\",\n                                paths: [\n                                    \"data.chartOptionsEditor.properties.dsOutput\",\n                                ],\n                            },\n                        ] as IBroadcasterConfig[],\n                    },\n                },\n            },\n        },\n    },\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { StackComponent } from \"../../components/layouts/stack/stack.component\";\nimport { ProportionalWidgetComponent } from \"../../components/proportional-widget/proportional-widget.component\";\nimport {\n    DEFAULT_PIZZAGNA_ROOT,\n    NOVA_DATASOURCE_ADAPTER,\n} from \"../../services/types\";\nimport { PizzagnaLayer, WellKnownProviders } from \"../../types\";\nimport {\n    widgetBodyContentNodes,\n    WIDGET_BODY,\n    WIDGET_HEADER,\n    WIDGET_LOADING,\n} from \"../common/widget/components\";\nimport { EVENT_PROXY, refresher } from \"../common/widget/providers\";\n\nexport const proportionalWidget = {\n    [PizzagnaLayer.Structure]: {\n        [DEFAULT_PIZZAGNA_ROOT]: {\n            id: DEFAULT_PIZZAGNA_ROOT,\n            // base layout of the widget - all components referenced herein will be stacked in a column\n            componentType: StackComponent.lateLoadKey,\n            properties: {\n                // these values reference other components in this structure\n                nodes: [\"header\", \"loading\", \"body\"],\n            },\n            providers: {\n                // When enabled, this provider emits the REFRESH event on the pizzagna event bus every X seconds\n                [WellKnownProviders.Refresher]: refresher(),\n                // event proxy manages the transmission of events between widget and dashboard\n                [WellKnownProviders.EventProxy]: EVENT_PROXY,\n            },\n        },\n        // widget header\n        header: WIDGET_HEADER,\n        // this is the loading bar below the header\n        loading: WIDGET_LOADING,\n        // widget body\n        body: {\n            ...WIDGET_BODY,\n            properties: {\n                ...WIDGET_BODY.properties,\n                elementClass: \"overflow-auto\",\n            },\n        },\n\n        // retrieving the definitions for the body content nodes. the argument corresponds to the main content node key\n        ...widgetBodyContentNodes(\"chart\"),\n\n        // a component that manages layout and behavior of the proportional chart\n        chart: {\n            id: \"chart\",\n            componentType: ProportionalWidgetComponent.lateLoadKey,\n            providers: {\n                [WellKnownProviders.Adapter]: {\n                    providerId: NOVA_DATASOURCE_ADAPTER,\n                    properties: {\n                        componentId: \"chart\",\n                        propertyPath: \"widgetData\",\n                    },\n                },\n            },\n            properties: {\n                elementClass:\n                    \"d-flex flex-grow-1 justify-content-center overflow-auto\",\n            },\n        },\n    },\n    [PizzagnaLayer.Configuration]: {\n        [DEFAULT_PIZZAGNA_ROOT]: {\n            id: DEFAULT_PIZZAGNA_ROOT,\n            providers: {\n                // default refresher configuration\n                [WellKnownProviders.Refresher]: refresher(false, 60),\n            },\n        },\n        // default header configuration\n        header: {\n            properties: {\n                title: $localize`Empty Proportional Widget`,\n            },\n        },\n    },\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { proportionalConfigurator } from \"./proportional-configurator\";\nimport { proportionalWidget } from \"./proportional-widget\";\nimport { IWidgetTypeDefinition } from \"../../components/widget/types\";\nimport { DEFAULT_PIZZAGNA_ROOT } from \"../../services/types\";\nimport { WellKnownPathKey } from \"../../types\";\n\n/***********************************************************************************************************\n * Proportional widget definition starts here\n ***********************************************************************************************************/\nexport const proportional: IWidgetTypeDefinition = {\n    /***************************************************************************************************\n     *  Paths to important settings in this type definition\n     ***************************************************************************************************/\n    paths: {\n        widget: {\n            [WellKnownPathKey.Root]: DEFAULT_PIZZAGNA_ROOT,\n        },\n        configurator: {\n            [WellKnownPathKey.Root]: DEFAULT_PIZZAGNA_ROOT,\n            // this points at the component type you need to change if you want to change the component for data source configuration\n            [WellKnownPathKey.DataSourceConfigComponentType]:\n                \"dataSource.componentType\",\n            // for the default data source configuration component, this changes the list of data sources to pick from\n            [WellKnownPathKey.DataSourceProviders]:\n                \"dataSource.properties.dataSourceProviders\",\n            // this is where donut content chart formatters are defined\n            [WellKnownPathKey.Formatters]:\n                \"chartOptionsEditor.properties.chartOptions.contentFormatters\",\n        },\n    },\n    /***************************************************************************************************\n     *  Widget section describes the structural part of the proportional widget\n     ***************************************************************************************************/\n    widget: proportionalWidget,\n    /***************************************************************************************************\n     *  Configuration section describes the form that is used to configure the widget\n     ***************************************************************************************************/\n    configurator: proportionalConfigurator,\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n/* eslint-disable max-len */\nimport { IBroadcasterConfig } from \"../../components/providers/types\";\nimport { IFormatterDefinition } from \"../../components/types\";\nimport { FormStackComponent } from \"../../configurator/components/form-stack/form-stack.component\";\nimport { RawFormatterComponent } from \"../../configurator/components/formatters/raw-formatter/raw-formatter.component\";\nimport { WidgetConfiguratorSectionComponent } from \"../../configurator/components/widget-configurator-section/widget-configurator-section.component\";\nimport { DataSourceConfigurationComponent } from \"../../configurator/components/widgets/configurator-items/data-source-configuration/data-source-configuration.component\";\nimport { DataSourceErrorComponent } from \"../../configurator/components/widgets/configurator-items/data-source-error/data-source-error.component\";\nimport { RiskScoreTileDescriptionConfigurationComponent } from \"../../configurator/components/widgets/configurator-items/risk-score-tile-description-configuration/risk-score-tile-description-configuration.component\";\nimport { TitleAndDescriptionConfigurationComponent } from \"../../configurator/components/widgets/configurator-items/title-and-description-configuration/title-and-description-configuration.component\";\nimport { RiskScoreTilesConfigurationComponent } from \"../../configurator/components/widgets/risk-score/risk-score-tiles-configuration/risk-score-tiles-configuration.component\";\nimport { PresentationConfigurationComponent } from \"../../configurator/components/widgets/table/columns-editor/column-configuration/presentation-configuration/presentation-configuration.component\";\nimport {\n    DEFAULT_PIZZAGNA_ROOT,\n    NOVA_RISK_SCORE_FORMATTERS_REGISTRY,\n    NOVA_KPI_SECTION_CONVERTER,\n    NOVA_KPI_TILES_CONVERTER,\n    NOVA_PIZZAGNA_BROADCASTER,\n    NOVA_TITLE_AND_DESCRIPTION_CONVERTER,\n} from \"../../services/types\";\nimport {\n    IProviderConfiguration,\n    PizzagnaLayer,\n    WellKnownProviders,\n} from \"../../types\";\nimport { REFRESHER_CONFIGURATOR } from \"../common/configurator/components\";\n\n/* eslint-enable max-len */\n\nexport const DEFAULT_RISK_SCORE_FORMATTERS: IFormatterDefinition[] = [\n    {\n        componentType: RawFormatterComponent.lateLoadKey,\n        label: $localize`Raw Formatter`,\n        dataTypes: {\n            // @ts-ignore\n            value: null,\n        },\n    },\n];\n\nexport const riskScoreConfigurator = {\n    [PizzagnaLayer.Structure]: {\n        [DEFAULT_PIZZAGNA_ROOT]: {\n            id: DEFAULT_PIZZAGNA_ROOT,\n            // base layout of the configurator - all form components referenced herein will be stacked in a column\n            componentType: FormStackComponent.lateLoadKey,\n            properties: {\n                elementClass: \"flex-grow-1 overflow-auto nui-scroll-shadows\",\n                // references to other components laid out in this form\n                nodes: [\"presentation\", \"tiles\"],\n            },\n            providers: {\n                [WellKnownProviders.FormattersRegistry]: {\n                    providerId: NOVA_RISK_SCORE_FORMATTERS_REGISTRY,\n                },\n            },\n        },\n        // /presentation\n        presentation: {\n            id: \"presentation\",\n            componentType: WidgetConfiguratorSectionComponent.lateLoadKey,\n            properties: {\n                headerText: $localize`Presentation`,\n                nodes: [\"titleAndDescription\", \"refresher\"],\n            },\n        },\n        // /presentation/titleAndDescription\n        titleAndDescription: {\n            id: \"titleAndDescription\",\n            componentType:\n                TitleAndDescriptionConfigurationComponent.lateLoadKey,\n            providers: {\n                converter: {\n                    providerId: NOVA_TITLE_AND_DESCRIPTION_CONVERTER,\n                },\n            },\n        },\n        refresher: REFRESHER_CONFIGURATOR,\n        // /tiles\n        tiles: {\n            id: \"tiles\",\n            componentType: RiskScoreTilesConfigurationComponent.lateLoadKey,\n            properties: {\n                // these components serve as a template for every KPI tile created\n                template: [\n                    {\n                        // Risk Score tile description (label) configuration section\n                        id: \"description\",\n                        componentType:\n                            RiskScoreTileDescriptionConfigurationComponent.lateLoadKey,\n                        properties: {},\n                        providers: {\n                            // converter transforms the data between the widget and the form\n                            [WellKnownProviders.Converter]: {\n                                providerId: NOVA_KPI_SECTION_CONVERTER,\n                                properties: {\n                                    formParts: [\n                                        {\n                                            previewPath:\n                                                \"properties.widgetData\",\n                                            keys: [\n                                                \"label\",\n                                                \"minValue\",\n                                                \"maxValue\",\n                                                \"description\",\n                                                \"useStaticLabel\",\n                                                \"staticLabel\",\n                                            ],\n                                        },\n                                    ],\n                                },\n                            } as IProviderConfiguration,\n                        },\n                    },\n                    {\n                        // data source configuration section\n                        id: \"dataSource\",\n                        componentType:\n                            DataSourceConfigurationComponent.lateLoadKey,\n                        properties: {\n                            // for the DataSourceConfigurationComponent, this defines the list of data sources to pick from\n                            dataSourceProviders: [] as string[],\n                            errorComponent:\n                                DataSourceErrorComponent.lateLoadKey,\n                        },\n                        providers: {\n                            // converter transforms the data source metadata between the widget and the form\n                            [WellKnownProviders.Converter]: {\n                                providerId: NOVA_KPI_SECTION_CONVERTER,\n                                properties: {\n                                    formParts: [\n                                        {\n                                            // this component updates 'providerId' of 'dataSource'\n                                            previewPath: \"providers.dataSource\",\n                                            // TODO: Remove 'properties' key in v10 - NUI-5831\n                                            keys: [\"providerId\", \"properties\"],\n                                        },\n                                        {\n                                            // this component updates 'properties' of 'dataSource' via an adapter\n                                            previewPath:\n                                                \"providers.adapter.properties.dataSource\",\n                                            keys: [\"properties\"],\n                                        },\n                                    ],\n                                },\n                            } as IProviderConfiguration,\n                            [WellKnownProviders.Broadcaster]: {\n                                providerId: NOVA_PIZZAGNA_BROADCASTER,\n                                properties: {\n                                    configs: [\n                                        {\n                                            trackOn: \"component\",\n                                            key: \"dataFieldIds\",\n                                            paths: [\n                                                \"data.{parentComponentId}/formatting.properties.dataFieldIds\",\n                                            ],\n                                        },\n                                    ] as IBroadcasterConfig[],\n                                },\n                            },\n                        },\n                    },\n                    {\n                        id: \"formatting\",\n                        componentType:\n                            PresentationConfigurationComponent.lateLoadKey,\n                        providers: {\n                            [WellKnownProviders.Converter]: {\n                                providerId: NOVA_KPI_SECTION_CONVERTER,\n                                properties: {\n                                    formParts: [\n                                        {\n                                            previewPath:\n                                                \"properties.configuration.formatters.Value\",\n                                            keys: [\"formatter\"],\n                                        },\n                                    ],\n                                },\n                            } as IProviderConfiguration,\n                        },\n                        properties: {\n                            // Note: Now you should define your formatters in the KpiFormatterRegistry which can contain more formatter options\n                            // formatters: DEFAULT_RISK_SCORE_FORMATTERS,\n\n                            // Set default formatter to the configuration section as RawFormatterComponent.\n                            // In case Risk Scrore doesn't use the formatters yet, it will be overridden with default formatter value on first save\n                            formatter: {\n                                componentType:\n                                    RawFormatterComponent.lateLoadKey,\n                                properties: {\n                                    dataFieldIds: {\n                                        value: \"value\",\n                                    },\n                                },\n                            },\n                        },\n                    },\n                ],\n            },\n            providers: {\n                // converter transforms the data between the widget and the form\n                [WellKnownProviders.Converter]: {\n                    providerId: NOVA_KPI_TILES_CONVERTER,\n                } as IProviderConfiguration,\n            },\n        },\n    },\n};\n","// © 2023 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\nimport { StackComponent } from \"../../components/layouts/stack/stack.component\";\nimport { TilesComponent } from \"../../components/layouts/tiles/tiles.component\";\nimport { RiskScoreTileComponent } from \"../../components/risk-score-tile/risk-score-tile.component\";\nimport {\n    DEFAULT_PIZZAGNA_ROOT,\n    NOVA_KPI_DATASOURCE_ADAPTER,\n    NOVA_KPI_STATUS_CONTENT_FALLBACK_ADAPTER,\n} from \"../../services/types\";\nimport {\n    IProviderConfiguration,\n    PizzagnaLayer,\n    WellKnownProviders,\n} from \"../../types\";\nimport {\n    widgetBodyContentNodes,\n    WIDGET_BODY,\n    WIDGET_HEADER,\n    WIDGET_LOADING,\n} from \"../common/widget/components\";\nimport { EVENT_PROXY, refresher } from \"../common/widget/providers\";\n\nexport const riskScoreWidget = {\n    [PizzagnaLayer.Structure]: {\n        [DEFAULT_PIZZAGNA_ROOT]: {\n            id: DEFAULT_PIZZAGNA_ROOT,\n            // base layout of the widget - all components referenced herein will be stacked in a column\n            componentType: StackComponent.lateLoadKey,\n            providers: {\n                // When enabled, this provider emits the REFRESH event on the pizzagna event bus every X seconds\n                [WellKnownProviders.Refresher]: refresher(),\n                // event proxy manages the transmission of events between widget and dashboard\n                [WellKnownProviders.EventProxy]: EVENT_PROXY,\n            },\n            properties: {\n                nodes: [\"header\", \"loading\", \"body\"],\n            },\n        },\n        // widget header\n        header: WIDGET_HEADER,\n        // this is the loading bar below the header\n        loading: WIDGET_LOADING,\n        // widget body\n        body: {\n            ...WIDGET_BODY,\n            properties: {\n                ...WIDGET_BODY.properties,\n                elementClass: \"overflow-hidden\",\n            },\n        },\n\n        /**\n         * Retrieving definitions for the body content nodes\n         * ---\n         * The first argument corresponds to the main content node key.\n         * The second argument is the id of the adapter responsible for activating fallback content in case of an error.\n         */\n        ...widgetBodyContentNodes(\n            \"tiles\",\n            NOVA_KPI_STATUS_CONTENT_FALLBACK_ADAPTER\n        ),\n\n        // the main content node specifying a component that manages layout of the KPI tiles in a CSS grid\n        tiles: {\n            id: \"tiles\",\n            componentType: TilesComponent.lateLoadKey,\n            properties: {\n                elementClass: \"flex-grow-1 pt-2 px-3 pb-3 w-100\",\n                template: {\n                    componentType: RiskScoreTileComponent.lateLoadKey,\n                    providers: {\n                        [WellKnownProviders.Adapter]: {\n                            providerId: NOVA_KPI_DATASOURCE_ADAPTER,\n                            properties: {\n                                propertyPath: \"widgetData\",\n                            },\n                        } as IProviderConfiguration,\n                    },\n                    properties: {\n                        elementClass: \"flex-grow-1\",\n                    },\n                },\n            },\n        },\n    },\n    [PizzagnaLayer.Configuration]: {\n        [DEFAULT_PIZZAGNA_ROOT]: {\n            id: DEFAULT_PIZZAGNA_ROOT,\n            providers: {\n                // default refresher configuration\n                [WellKnownProviders.Refresher]: refresher(false, 60),\n            },\n        },\n        // default header configuration\n        header: {\n            properties: {\n                title: $localize`Empty Risk Score Widget`,\n            },\n        },\n    },\n};\n","// © 2023 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { riskScoreConfigurator } from \"./risk-score-configurator\";\nimport { riskScoreWidget } from \"./risk-score-widget\";\nimport { IWidgetTypeDefinition } from \"../../components/widget/types\";\nimport { DEFAULT_PIZZAGNA_ROOT } from \"../../services/types\";\nimport { WellKnownPathKey } from \"../../types\";\n\nconst tileDescriptionConfiguratorTemplatePath = `tiles.properties.template[0]`;\nconst dataSourceConfiguratorTemplatePath = `tiles.properties.template[1]`;\n\n/***********************************************************************************************************\n * KPI widget definition starts here\n ***********************************************************************************************************/\nexport const riskScore: IWidgetTypeDefinition = {\n    /***************************************************************************************************\n     *  Paths to important settings in this type definition\n     ***************************************************************************************************/\n    paths: {\n        widget: {\n            [WellKnownPathKey.Root]: DEFAULT_PIZZAGNA_ROOT,\n        },\n        configurator: {\n            [WellKnownPathKey.Root]: DEFAULT_PIZZAGNA_ROOT,\n            // this points at the component type you need to change if you want to change the component for data source configuration\n            [WellKnownPathKey.DataSourceConfigComponentType]: `${dataSourceConfiguratorTemplatePath}.componentType`,\n            // this points at the component type you need to change if you want to change the component for tile description configuration\n            [WellKnownPathKey.TileDescriptionConfigComponentType]: `${tileDescriptionConfiguratorTemplatePath}.componentType`,\n            // for the default data source configuration component, this changes the list of data sources to pick from\n            [WellKnownPathKey.DataSourceProviders]: `${dataSourceConfiguratorTemplatePath}.properties.dataSourceProviders`,\n        },\n    },\n    /***************************************************************************************************\n     *  Widget section describes the structural part of the KPI widget\n     ***************************************************************************************************/\n    widget: riskScoreWidget,\n    /***************************************************************************************************\n     *  Configurator section describes the form that is used to configure the widget\n     ***************************************************************************************************/\n    configurator: riskScoreConfigurator,\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n/* eslint-disable max-len */\nimport { DEFAULT_TABLE_FORMATTERS } from \"./default-table-formatters\";\nimport { FormStackComponent } from \"../../configurator/components/form-stack/form-stack.component\";\nimport { WidgetConfiguratorSectionComponent } from \"../../configurator/components/widget-configurator-section/widget-configurator-section.component\";\nimport { DataSourceConfigurationComponent } from \"../../configurator/components/widgets/configurator-items/data-source-configuration/data-source-configuration.component\";\nimport { TableDataSourceErrorComponent } from \"../../configurator/components/widgets/configurator-items/data-source-error/table/table-data-source-error.component\";\nimport { TitleAndDescriptionConfigurationComponent } from \"../../configurator/components/widgets/configurator-items/title-and-description-configuration/title-and-description-configuration.component\";\nimport { TableColumnsConfigurationV2Component } from \"../../configurator/components/widgets/table/columns-editor-v2/table-columns-configuration-v2.component\";\nimport { TableFiltersEditorComponent } from \"../../configurator/components/widgets/table/filters-editor/table-filters-editor.component\";\nimport { TableScrollTypeEditorComponent } from \"../../configurator/components/widgets/table/scrollType-editor/scroll-type-editor.component\";\nimport {\n    DEFAULT_PIZZAGNA_ROOT,\n    NOVA_CONFIGURATOR_DATA_SOURCE_MANAGER,\n    NOVA_GENERIC_CONVERTER,\n    NOVA_TABLE_COLUMNS_CONVERTER,\n    NOVA_TABLE_FILTERS_CONVERTER,\n    NOVA_TABLE_FORMATTERS_REGISTRY,\n    NOVA_TABLE_SCROLL_TYPE_CONVERTER,\n    NOVA_TITLE_AND_DESCRIPTION_CONVERTER,\n} from \"../../services/types\";\nimport { IPizzagna, PizzagnaLayer, WellKnownProviders } from \"../../types\";\nimport { REFRESHER_CONFIGURATOR } from \"../common/configurator/components\";\n\n/* eslint-enable max-len */\n\nexport const tableConfigurator: IPizzagna = {\n    [PizzagnaLayer.Structure]: {\n        [DEFAULT_PIZZAGNA_ROOT]: {\n            // base layout of the configurator - all form components referenced herein will be stacked in a column\n            id: DEFAULT_PIZZAGNA_ROOT,\n            componentType: FormStackComponent.lateLoadKey,\n            properties: {\n                elementClass: \"flex-grow-1 overflow-auto nui-scroll-shadows\",\n                // references to other components laid out in this form\n                nodes: [\"presentation\", \"dataAndCalculations\", \"columns\"],\n            },\n            providers: {\n                [WellKnownProviders.FormattersRegistry]: {\n                    providerId: NOVA_TABLE_FORMATTERS_REGISTRY,\n                },\n                [WellKnownProviders.DataSourceManager]: {\n                    providerId: NOVA_CONFIGURATOR_DATA_SOURCE_MANAGER,\n                },\n            },\n        },\n        // /presentation\n        presentation: {\n            id: \"presentation\",\n            componentType: WidgetConfiguratorSectionComponent.lateLoadKey,\n            properties: {\n                headerText: $localize`Presentation`,\n                // references to other components laid out in this form\n                nodes: [\"titleAndDescription\", \"filters\", \"scrollType\"],\n            },\n        },\n        // /presentation/titleAndDescription\n        titleAndDescription: {\n            id: \"titleAndDescription\",\n            componentType:\n                TitleAndDescriptionConfigurationComponent.lateLoadKey,\n            providers: {\n                [WellKnownProviders.Converter]: {\n                    providerId: NOVA_TITLE_AND_DESCRIPTION_CONVERTER,\n                },\n            },\n        },\n        // /presentation/filters - !WARNING! configuration of built-in sorting, naming is obsolete\n        filters: {\n            id: \"filters\",\n            componentType: TableFiltersEditorComponent.lateLoadKey,\n            providers: {\n                [WellKnownProviders.Converter]: {\n                    providerId: NOVA_TABLE_FILTERS_CONVERTER,\n                },\n            },\n        },\n        // /presentation/scrollType - configuration of built-in pagination\n        scrollType: {\n            id: \"scrollType\",\n            componentType: TableScrollTypeEditorComponent.lateLoadKey,\n            providers: {\n                [WellKnownProviders.Converter]: {\n                    providerId: NOVA_TABLE_SCROLL_TYPE_CONVERTER,\n                },\n            },\n        },\n        refresher: REFRESHER_CONFIGURATOR,\n        // /dataAndCalculations\n        dataAndCalculations: {\n            id: \"dataAndCalculations\",\n            componentType: WidgetConfiguratorSectionComponent.lateLoadKey,\n            properties: {\n                headerText: $localize`Data and Calculations`,\n                nodes: [\"dataSource\"],\n            },\n        },\n        // /dataAndCalculations/dataSource\n        dataSource: {\n            id: \"dataSource\",\n            componentType: DataSourceConfigurationComponent.lateLoadKey,\n            properties: {\n                dataSourceProviders: [],\n                errorComponent: TableDataSourceErrorComponent.lateLoadKey,\n            },\n            providers: {\n                [WellKnownProviders.Converter]: {\n                    providerId: NOVA_GENERIC_CONVERTER,\n                    properties: {\n                        formParts: [\n                            {\n                                previewPath: \"table.providers.dataSource\",\n                                // TODO: Remove 'properties' key in v10 - NUI-5831\n                                keys: [\"providerId\", \"properties\"],\n                            },\n                            {\n                                previewPath:\n                                    \"table.providers.adapter.properties.dataSource\",\n                                keys: [\"properties\"],\n                            },\n                        ],\n                    },\n                },\n            },\n        },\n        // A very important part of this configuration form is the 'columns' section. It manages the configuration of columns and formatters that are used\n        // to display data in this table. Every column has multiple properties associated with it like: label, width, formatter and how to map incoming data\n        // into the formatter.\n        columns: {\n            id: \"columns\",\n            componentType: TableColumnsConfigurationV2Component.lateLoadKey,\n            properties: {\n                // Deprecated (see TableColumnsConfigurationV2Component.template)\n                template: [\n                    {},\n                    {\n                        properties: {\n                            formatters: DEFAULT_TABLE_FORMATTERS,\n                        },\n                    },\n                ],\n            },\n            providers: {\n                [WellKnownProviders.Converter]: {\n                    // this specialized converter does all the work with building the complex forms for every column of the table and mapping the data back\n                    // to the widget configuration that builds the table component from the individual column configurations\n                    providerId: NOVA_TABLE_COLUMNS_CONVERTER,\n                },\n            },\n        },\n    },\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { StackComponent } from \"../../components/layouts/stack/stack.component\";\nimport { TableWidgetComponent } from \"../../components/table-widget/table-widget.component\";\nimport { ITableWidgetConfig } from \"../../components/table-widget/types\";\nimport {\n    DEFAULT_PIZZAGNA_ROOT,\n    NOVA_DASHBOARD_EVENT_PROXY,\n    NOVA_TABLE_DATASOURCE_ADAPTER,\n    NOVA_VIRTUAL_VIEWPORT_MANAGER,\n    WIDGET_RESIZE,\n} from \"../../services/types\";\nimport { IPizzagna, PizzagnaLayer, WellKnownProviders } from \"../../types\";\nimport {\n    widgetBodyContentNodes,\n    WIDGET_BODY,\n    WIDGET_HEADER,\n    WIDGET_LOADING,\n} from \"../common/widget/components\";\nimport { refresher } from \"../common/widget/providers\";\n\nexport const tableWidget: IPizzagna = {\n    [PizzagnaLayer.Structure]: {\n        [DEFAULT_PIZZAGNA_ROOT]: {\n            id: DEFAULT_PIZZAGNA_ROOT,\n            // base layout of the widget - all components referenced herein will be stacked in a column\n            componentType: StackComponent.lateLoadKey,\n            providers: {\n                // When enabled, this provider emits the REFRESH event on the pizzagna event bus every X seconds\n                [WellKnownProviders.Refresher]: refresher(),\n                [WellKnownProviders.EventProxy]: {\n                    // event proxy manages the transmission of events between widget and dashboard\n                    providerId: NOVA_DASHBOARD_EVENT_PROXY,\n                    properties: {\n                        // WIDGET_RESIZE event is used to adjust the virtual scroll viewport size\n                        downstreams: [WIDGET_RESIZE.id],\n                    },\n                },\n            },\n            properties: {\n                nodes: [\"header\", \"loading\", \"body\"],\n            },\n        },\n        // widget header\n        header: WIDGET_HEADER,\n        // this is the loading bar below the header\n        loading: WIDGET_LOADING,\n        // widget body\n        body: {\n            ...WIDGET_BODY,\n            properties: {\n                ...WIDGET_BODY.properties,\n                elementClass: \"overflow-auto\",\n            },\n        },\n\n        // retrieving the definitions for the body content nodes. the argument corresponds to the main content node key\n        ...widgetBodyContentNodes(\"table\"),\n\n        // this is the main component showing a table with data\n        table: {\n            id: \"table\",\n            componentType: TableWidgetComponent.lateLoadKey,\n            providers: {\n                // adapter invokes the data source and assigns the output to this component\n                [WellKnownProviders.Adapter]: {\n                    providerId: NOVA_TABLE_DATASOURCE_ADAPTER,\n                    properties: {\n                        componentId: \"table\",\n                        dataPath: \"widgetData\",\n                        // data-fields are necessary to map incoming data to configured columns\n                        dataFieldsPath: \"dataFields\",\n                        totalItemsPath: \"totalItems\",\n                    },\n                },\n                virtualViewportManager: {\n                    providerId: NOVA_VIRTUAL_VIEWPORT_MANAGER,\n                },\n            },\n            properties: {\n                elementClass: \"flex-grow-1 mx-3 mb-3 mt-2\",\n                delayedMousePresenceDetectionEnabled: true,\n                configuration: {\n                    columns: [],\n                    // The delay in milliseconds after table mouseenter before scrolling is activated\n                    scrollActivationDelayMs: 500,\n                    // Whether to display or not table header tooltips\n                    headerTooltipsEnabled: true, // default\n                } as unknown as ITableWidgetConfig,\n            },\n        },\n    },\n    [PizzagnaLayer.Configuration]: {\n        [DEFAULT_PIZZAGNA_ROOT]: {\n            id: DEFAULT_PIZZAGNA_ROOT,\n            providers: {\n                // default refresher configuration\n                [WellKnownProviders.Refresher]: refresher(false, 60),\n            },\n        },\n        // default header configuration\n        header: {\n            properties: {\n                title: $localize`Empty Table Widget`,\n            },\n        },\n    },\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { tableConfigurator } from \"./table-configurator\";\nimport { tableWidget } from \"./table-widget\";\nimport { IWidgetTypeDefinition } from \"../../components/widget/types\";\nimport { DEFAULT_PIZZAGNA_ROOT } from \"../../services/types\";\nimport { WellKnownPathKey } from \"../../types\";\n\nexport const table: IWidgetTypeDefinition = {\n    paths: {\n        widget: {\n            [WellKnownPathKey.Root]: DEFAULT_PIZZAGNA_ROOT,\n        },\n        configurator: {\n            [WellKnownPathKey.Root]: DEFAULT_PIZZAGNA_ROOT,\n            [WellKnownPathKey.DataSourceConfigComponentType]:\n                \"dataSource.componentType\",\n            [WellKnownPathKey.DataSourceProviders]:\n                \"dataSource.properties.dataSourceProviders\",\n            [WellKnownPathKey.Formatters]:\n                \"columns.properties.template[1].properties.formatters\",\n        },\n    },\n    widget: tableWidget,\n    configurator: tableConfigurator,\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n/* eslint-disable max-len */\nimport { FormStackComponent } from \"../../configurator/components/form-stack/form-stack.component\";\nimport { WidgetConfiguratorSectionComponent } from \"../../configurator/components/widget-configurator-section/widget-configurator-section.component\";\nimport { DataSourceConfigurationComponent } from \"../../configurator/components/widgets/configurator-items/data-source-configuration/data-source-configuration.component\";\nimport { DataSourceErrorComponent } from \"../../configurator/components/widgets/configurator-items/data-source-error/data-source-error.component\";\nimport { TimeseriesMetadataConfigurationComponent } from \"../../configurator/components/widgets/configurator-items/timeseries-metadata-configuration/timeseries-metadata-configuration.component\";\nimport { TitleAndDescriptionConfigurationComponent } from \"../../configurator/components/widgets/configurator-items/title-and-description-configuration/title-and-description-configuration.component\";\nimport { TimeseriesSeriesCollectionConfigurationComponent } from \"../../configurator/components/widgets/timeseries/timeseries-series-collection-configuration/timeseries-series-collection-configuration.component\";\nimport { TimeseriesTileDescriptionConfigurationComponent } from \"../../configurator/components/widgets/timeseries/timeseries-tile-description-configuration/timeseries-tile-description-configuration.component\";\nimport { TimeseriesTileIndicatorDataConfigurationComponent } from \"../../configurator/components/widgets/timeseries/timeseries-tile-indicator-data-configuration/timeseries-tile-indicator-data-configuration.component\";\nimport { IConverterFormPartsProperties } from \"../../configurator/services/converters/types\";\nimport {\n    DEFAULT_PIZZAGNA_ROOT,\n    NOVA_GENERIC_ARRAY_CONVERTER,\n    NOVA_GENERIC_CONVERTER,\n    NOVA_TIMESERIES_METADATA_CONVERTER,\n    NOVA_TIMESERIES_SERIES_CONVERTER,\n    NOVA_TIMESERIES_TILE_INDICATOR_DATA_CONVERTER,\n    NOVA_TITLE_AND_DESCRIPTION_CONVERTER,\n} from \"../../services/types\";\nimport {\n    IPizzagna,\n    IProviderConfiguration,\n    PizzagnaLayer,\n    WellKnownProviders,\n} from \"../../types\";\nimport { LegendPlacement } from \"../../widget-types/common/widget/legend\";\nimport { REFRESHER_CONFIGURATOR } from \"../common/configurator/components\";\n/* eslint-enable max-len */\n\nexport const timeseriesConfigurator: IPizzagna = {\n    [PizzagnaLayer.Structure]: {\n        [DEFAULT_PIZZAGNA_ROOT]: {\n            id: DEFAULT_PIZZAGNA_ROOT,\n            // base layout of the configurator - all form components referenced herein will be stacked in a column\n            componentType: FormStackComponent.lateLoadKey,\n            properties: {\n                elementClass: \"flex-grow-1 overflow-auto nui-scroll-shadows\",\n                // references to other components laid out in this form\n                nodes: [\"presentation\", \"dataAndCalculations\", \"series\"],\n            },\n        },\n        // /presentation\n        presentation: {\n            id: \"presentation\",\n            componentType: WidgetConfiguratorSectionComponent.lateLoadKey,\n            properties: {\n                headerText: $localize`Presentation`,\n                nodes: [\"titleAndDescription\", \"timeseriesMetadata\"],\n            },\n        },\n        // /presentation/titleAndDescription\n        titleAndDescription: {\n            id: \"titleAndDescription\",\n            componentType:\n                TitleAndDescriptionConfigurationComponent.lateLoadKey,\n            providers: {\n                [WellKnownProviders.Converter]: {\n                    providerId: NOVA_TITLE_AND_DESCRIPTION_CONVERTER,\n                } as IProviderConfiguration,\n            },\n        },\n        // /presentation/timeseriesMetadata\n        timeseriesMetadata: {\n            id: \"timeseriesMetadata\",\n            componentType: TimeseriesMetadataConfigurationComponent.lateLoadKey,\n            properties: {\n                legendPlacements: [\n                    {\n                        id: LegendPlacement.None,\n                        label: $localize`None`,\n                    },\n                    {\n                        id: LegendPlacement.Right,\n                        label: $localize`Right`,\n                    },\n                    {\n                        id: LegendPlacement.Bottom,\n                        label: $localize`Bottom`,\n                    },\n                ],\n            },\n            providers: {\n                // converter transforms the timeseries metadata configuration between the widget and the form\n                [WellKnownProviders.Converter]: {\n                    providerId: NOVA_TIMESERIES_METADATA_CONVERTER,\n                } as IProviderConfiguration,\n            },\n        },\n        refresher: REFRESHER_CONFIGURATOR,\n        // /dataAndCalculations\n        dataAndCalculations: {\n            id: \"dataAndCalculations\",\n            componentType: WidgetConfiguratorSectionComponent.lateLoadKey,\n            properties: {\n                headerText: $localize`Data and Calculations`,\n                nodes: [\"dataSource\"],\n            },\n        },\n        // /dataAndCalculations/dataSource\n        dataSource: {\n            id: \"dataSource\",\n            componentType: DataSourceConfigurationComponent.lateLoadKey,\n            properties: {\n                // for the DataSourceConfigurationComponent, this defines the list of data sources to pick from\n                dataSourceProviders: [] as string[],\n                errorComponent: DataSourceErrorComponent.lateLoadKey,\n            },\n            providers: {\n                // converter transforms the data source metadata between the widget and the form\n                [WellKnownProviders.Converter]: {\n                    providerId: NOVA_GENERIC_CONVERTER,\n                    properties: {\n                        formParts: [\n                            {\n                                // this component updates 'providerId' of 'dataSource'\n                                previewPath: \"/.providers.dataSource\",\n                                // TODO: Remove 'properties' key in v10 - NUI-5831\n                                keys: [\"providerId\", \"properties\"],\n                            },\n                            {\n                                // this component updates 'properties' of 'dataSource' via an adapter\n                                previewPath:\n                                    \"chart.providers.adapter.properties.dataSource\",\n                                keys: [\"properties\"],\n                            },\n                        ] as IConverterFormPartsProperties[],\n                    },\n                } as IProviderConfiguration,\n            },\n        },\n        // /series\n        series: {\n            id: \"series\",\n            componentType:\n                TimeseriesSeriesCollectionConfigurationComponent.lateLoadKey,\n            providers: {\n                // converter transforms the data between the widget and the form\n                [WellKnownProviders.Converter]: {\n                    providerId: NOVA_TIMESERIES_SERIES_CONVERTER,\n                } as IProviderConfiguration,\n            },\n            properties: {\n                // these components serve as a template for every configured timeseries\n                template: [\n                    {\n                        // series description (label) configuration section\n                        id: \"description\",\n                        componentType:\n                            TimeseriesTileDescriptionConfigurationComponent.lateLoadKey,\n                        providers: {\n                            // converter transforms the data between the widget and the form\n                            [WellKnownProviders.Converter]: {\n                                providerId: NOVA_GENERIC_ARRAY_CONVERTER,\n                                properties: {\n                                    formParts: [\n                                        {\n                                            // this component updates 'label' of 'series' via an adapter\n                                            previewPath:\n                                                \"chart.providers.adapter.properties.series\",\n                                            keys: [\"label\"],\n                                        },\n                                    ] as IConverterFormPartsProperties[],\n                                },\n                            } as IProviderConfiguration,\n                        },\n                    },\n                    {\n                        // indicator data configuration section\n                        id: \"indicatorData\",\n                        componentType:\n                            TimeseriesTileIndicatorDataConfigurationComponent.lateLoadKey,\n                        providers: {\n                            // converter transforms the data such as the selected series between the widget and the form\n                            [WellKnownProviders.Converter]: {\n                                providerId:\n                                    NOVA_TIMESERIES_TILE_INDICATOR_DATA_CONVERTER,\n                            } as IProviderConfiguration,\n                        },\n                    },\n                ],\n            },\n        },\n    },\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { StackComponent } from \"../../components/layouts/stack/stack.component\";\nimport { TimeframeSelectionComponent } from \"../../components/time-frame-selection/timeframe-selection.component\";\nimport { TimeseriesWidgetComponent } from \"../../components/timeseries-widget/timeseries-widget.component\";\nimport {\n    ITimeseriesScaleConfig,\n    ITimeseriesWidgetConfig,\n    TimeseriesChartPreset,\n    TimeseriesScaleType,\n} from \"../../components/timeseries-widget/types\";\nimport { ITimeseriesItemConfiguration } from \"../../configurator/components/widgets/timeseries/types\";\nimport {\n    DEFAULT_PIZZAGNA_ROOT,\n    NOVA_TIMESERIES_DATASOURCE_ADAPTER,\n} from \"../../services/types\";\nimport {\n    IProviderConfiguration,\n    PizzagnaLayer,\n    WellKnownProviders,\n} from \"../../types\";\nimport {\n    widgetBodyContentNodes,\n    WIDGET_BODY,\n    WIDGET_HEADER,\n    WIDGET_LOADING,\n} from \"../common/widget/components\";\nimport { EVENT_PROXY, refresher } from \"../common/widget/providers\";\n\nexport const timeseriesWidget = {\n    [PizzagnaLayer.Structure]: {\n        [DEFAULT_PIZZAGNA_ROOT]: {\n            id: DEFAULT_PIZZAGNA_ROOT,\n            // base layout of the widget - all components referenced herein will be stacked in a column\n            componentType: StackComponent.lateLoadKey,\n            providers: {\n                // When enabled, this provider emits the REFRESH event on the pizzagna event bus every X seconds\n                [WellKnownProviders.Refresher]: refresher(),\n                // event proxy manages the transmission of events between widget and dashboard\n                [WellKnownProviders.EventProxy]: EVENT_PROXY,\n            },\n            properties: {\n                // these values reference other components in this structure\n                nodes: [\"header\", \"loading\", \"body\"],\n            },\n        },\n        // widget header\n        header: WIDGET_HEADER,\n        // this is the loading bar below the header\n        loading: WIDGET_LOADING,\n        // widget body\n        body: {\n            ...WIDGET_BODY,\n            properties: {\n                ...WIDGET_BODY.properties,\n                elementClass: \"overflow-auto\",\n            },\n        },\n\n        // retrieving the definitions for the body content nodes. the argument corresponds to the main content node key\n        ...widgetBodyContentNodes(\"mainContent\"),\n\n        mainContent: {\n            id: \"mainContent\",\n            componentType: StackComponent.lateLoadKey,\n            properties: {\n                // these values reference other components in this configuration\n                nodes: [\"timeframeSelection\", \"chart\"],\n            },\n        },\n        // component that filters the widget's timeseries data by timeframe\n        timeframeSelection: {\n            id: \"timeframeSelection\",\n            componentType: TimeframeSelectionComponent.lateLoadKey,\n        },\n        // component that displays the widget's timeseries data as a line chart\n        chart: {\n            id: \"chart\",\n            componentType: TimeseriesWidgetComponent.lateLoadKey,\n            properties: {\n                elementClass:\n                    \"d-flex flex-column justify-content-center h-100 overflow-auto\",\n                configuration: {\n                    preset: TimeseriesChartPreset.Line,\n                    // this scales configuration defines default scale types for the chart\n                    scales: {\n                        y: {\n                            // linear numeric scale for the y axis\n                            type: TimeseriesScaleType.Linear,\n                        } as ITimeseriesScaleConfig,\n                        x: {\n                            // continuous time scale for the x axis\n                            type: TimeseriesScaleType.Time,\n                        } as ITimeseriesScaleConfig,\n                    },\n                } as ITimeseriesWidgetConfig,\n            },\n            providers: {\n                // provider for mapping the timeseries data source output to the format required by the widget\n                [WellKnownProviders.Adapter]: {\n                    providerId: NOVA_TIMESERIES_DATASOURCE_ADAPTER,\n                    properties: {\n                        componentId: \"chart\",\n                        propertyPath: \"widgetData\",\n                        series: [] as ITimeseriesItemConfiguration[],\n                    },\n                } as IProviderConfiguration,\n            },\n        },\n    },\n    [PizzagnaLayer.Configuration]: {\n        [DEFAULT_PIZZAGNA_ROOT]: {\n            id: DEFAULT_PIZZAGNA_ROOT,\n            providers: {\n                // default refresher configuration\n                [WellKnownProviders.Refresher]: refresher(false, 60),\n            },\n        },\n        // default header configuration\n        header: {\n            properties: {\n                title: $localize`Empty Timeseries Widget`,\n            },\n        },\n    },\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { timeseriesConfigurator } from \"./timeseries-configurator\";\nimport { timeseriesWidget } from \"./timeseries-widget\";\nimport { IWidgetTypeDefinition } from \"../../components/widget/types\";\nimport { DEFAULT_PIZZAGNA_ROOT } from \"../../services/types\";\nimport { WellKnownPathKey } from \"../../types\";\n\n/***********************************************************************************************************\n * Timeseries widget definition starts here\n ***********************************************************************************************************/\nexport const timeseries: IWidgetTypeDefinition = {\n    /***************************************************************************************************\n     *  Paths to important settings in this type definition\n     ***************************************************************************************************/\n    paths: {\n        widget: {\n            [WellKnownPathKey.Root]: DEFAULT_PIZZAGNA_ROOT,\n        },\n        configurator: {\n            [WellKnownPathKey.Root]: DEFAULT_PIZZAGNA_ROOT,\n            // this points at the component type you need to change if you want to change the component for data source configuration\n            [WellKnownPathKey.DataSourceConfigComponentType]:\n                \"dataSource.componentType\",\n            // for the default data source configuration component, this changes the list of data sources to pick from\n            [WellKnownPathKey.DataSourceProviders]:\n                \"dataSource.properties.dataSourceProviders\",\n        },\n    },\n    /***************************************************************************************************\n     *  Widget section describes the structural part of the Timeseries widget\n     ***************************************************************************************************/\n    widget: timeseriesWidget,\n    /***************************************************************************************************\n     *  Configurator section describes the form that is used to configure the widget\n     ***************************************************************************************************/\n    configurator: timeseriesConfigurator,\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { ScrollingModule } from \"@angular/cdk/scrolling\";\nimport { DecimalPipe } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\n// This is not technically used here, but it does pull in the type for $localize\n// noinspection ES6UnusedImports\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { LocalizeFn } from \"@angular/localize/init\";\nimport { GridsterModule } from \"angular-gridster2\";\n\nimport {\n    NuiBusyModule,\n    NuiButtonModule,\n    NuiCommonModule,\n    NuiIconModule,\n    NuiImageModule,\n    NuiMenuModule,\n    NuiPaginatorModule,\n    NuiPopoverModule,\n    NuiPopupModule,\n    NuiProgressModule,\n    NuiRepeatModule,\n    NuiRiskScoreModule,\n    NuiSearchModule,\n    NuiSelectModule,\n    NuiSpinnerModule,\n    NuiTableModule,\n    NuiTimeFrameBarModule,\n    NuiTimeFramePickerModule,\n    NuiTooltipModule,\n    NuiMessageModule,\n} from \"@nova-ui/bits\";\nimport { NuiChartsModule } from \"@nova-ui/charts\";\n\nimport { NuiDashboardsCommonModule } from \"./common/common.module\";\nimport { WidgetErrorComponent } from \"./common/components/widget-error/widget-error.component\";\nimport { DashboardComponent } from \"./components/dashboard/dashboard.component\";\nimport { EmbeddedContentComponent } from \"./components/embedded-content/embedded-content.component\";\nimport { KpiComponent } from \"./components/kpi-widget/kpi.component\";\nimport { StackComponent } from \"./components/layouts/stack/stack.component\";\nimport { TilesComponent } from \"./components/layouts/tiles/tiles.component\";\nimport { ListGroupItemComponent } from \"./components/list-widget/list-elements/list-group-item/list-group-item.component\";\nimport { ListLeafItemComponent } from \"./components/list-widget/list-elements/list-leaf-item/list-leaf-item.component\";\nimport { ListNavigationBarComponent } from \"./components/list-widget/list-elements/list-navigation-bar/list-navigation-bar.component\";\nimport { ListWidgetComponent } from \"./components/list-widget/list-widget.component\";\nimport { LoadingComponent } from \"./components/loading/loading.component\";\nimport { ProportionalDonutContentComponent } from \"./components/proportional-widget/proportional-donut-content/proportional-donut-content.component\";\nimport { ProportionalWidgetComponent } from \"./components/proportional-widget/proportional-widget.component\";\nimport { RefresherSettingsService } from \"./components/providers/refresher-settings.service\";\nimport { RiskScoreTileComponent } from \"./components/risk-score-tile/risk-score-tile.component\";\nimport { DelayedMousePresenceDetectionDirective } from \"./components/table-widget/delayed-mouse-presence-detection.directive\";\nimport { TableWidgetComponent } from \"./components/table-widget/table-widget.component\";\nimport { TemplateLoadErrorComponent } from \"./components/template-load-error/template-load-error.component\";\nimport { TimeframeSelectionComponent } from \"./components/time-frame-selection/timeframe-selection.component\";\nimport { StatusBarChartComponent } from \"./components/timeseries-widget/chart-presets/status-bar-chart/status-bar-chart.component\";\nimport { LineChartComponent } from \"./components/timeseries-widget/chart-presets/xy-chart/chart-types/line-chart.component\";\nimport { StackedAreaChartComponent } from \"./components/timeseries-widget/chart-presets/xy-chart/chart-types/stacked-area-chart.component\";\nimport { StackedBarChartComponent } from \"./components/timeseries-widget/chart-presets/xy-chart/chart-types/stacked-bar-chart.component\";\nimport { StackedPercentageAreaChartComponent } from \"./components/timeseries-widget/chart-presets/xy-chart/chart-types/stacked-percentage-area-chart.component\";\nimport { TimeseriesInspectionMenuComponent } from \"./components/timeseries-widget/timeseries-inspection-menu/timeseries-inspection-menu.component\";\nimport { TimeseriesWidgetComponent } from \"./components/timeseries-widget/timeseries-widget.component\";\nimport { WidgetBodyComponent } from \"./components/widget/widget-body/widget-body.component\";\nimport { WidgetBodyContentComponent } from \"./components/widget/widget-body-content/widget-body-content.component\";\nimport { WidgetHeaderComponent } from \"./components/widget/widget-header/widget-header.component\";\nimport { WidgetComponent } from \"./components/widget/widget.component\";\nimport { WidgetSearchComponent } from \"./components/widget-search/widget-search.component\";\nimport { NuiDashboardConfiguratorModule } from \"./configurator/configurator.module\";\nimport { DATA_SOURCE_OUTPUT } from \"./configurator/types\";\nimport { GridsterItemWidgetIdDirective } from \"./directives/gridster-item-widget-id/gridster-item-widget-id.directive\";\nimport { WidgetEditorDirective } from \"./directives/widget-editor/widget-editor.directive\";\nimport { NuiPizzagnaModule } from \"./pizzagna/pizzagna.module\";\nimport { ComponentPortalService } from \"./pizzagna/services/component-portal.service\";\nimport {\n    ComponentRegistryService,\n    IComponentWithLateLoadKey,\n} from \"./pizzagna/services/component-registry.service\";\nimport { EventRegistryService } from \"./services/event-registry.service\";\nimport {\n    KpiFormattersRegistryService,\n    RiskScoreFormattersRegistryService,\n} from \"./services/table-formatter-registry.service\";\nimport {\n    DASHBOARD_EDIT_MODE,\n    DATA_SOURCE_BUSY,\n    PREVIEW_EVENT,\n    REFRESH,\n    SET_PROPERTY_VALUE,\n    SET_TIMEFRAME,\n    WIDGET_CREATE,\n    WIDGET_EDIT,\n    WIDGET_POSITION_CHANGE,\n    WIDGET_READY,\n    WIDGET_REMOVE,\n    WIDGET_RESIZE,\n} from \"./services/types\";\nimport { WidgetTypesService } from \"./services/widget-types.service\";\nimport { drilldown } from \"./widget-types/drilldown/drilldown\";\nimport { embeddedContent } from \"./widget-types/embedded-content/embedded-content\";\nimport { kpi } from \"./widget-types/kpi/kpi\";\nimport { DEFAULT_KPI_FORMATTERS } from \"./widget-types/kpi/kpi-configurator\";\nimport { previewPlaceholder } from \"./widget-types/preview-placeholder\";\nimport { proportional } from \"./widget-types/proportional/proportional\";\nimport { riskScore } from \"./widget-types/risk-score/risk-score\";\nimport { DEFAULT_RISK_SCORE_FORMATTERS } from \"./widget-types/risk-score/risk-score-configurator\";\nimport { table } from \"./widget-types/table/table\";\nimport { timeseries } from \"./widget-types/timeseries/timeseries\";\n\nconst dashboardComponents = [\n    DashboardComponent,\n    EmbeddedContentComponent,\n    GridsterItemWidgetIdDirective,\n    KpiComponent,\n    RiskScoreTileComponent,\n    LineChartComponent,\n    LoadingComponent,\n    ProportionalWidgetComponent,\n    StackComponent,\n    StackedAreaChartComponent,\n    StackedBarChartComponent,\n    StackedPercentageAreaChartComponent,\n    StatusBarChartComponent,\n    TableWidgetComponent,\n    DelayedMousePresenceDetectionDirective,\n    TemplateLoadErrorComponent,\n    TilesComponent,\n    TimeframeSelectionComponent,\n    TimeseriesWidgetComponent,\n    WidgetBodyComponent,\n    WidgetBodyContentComponent,\n    WidgetComponent,\n    WidgetEditorDirective,\n    WidgetHeaderComponent,\n    ListWidgetComponent,\n    ListLeafItemComponent,\n    ListGroupItemComponent,\n    ListNavigationBarComponent,\n    WidgetSearchComponent,\n    ProportionalDonutContentComponent,\n    TimeseriesInspectionMenuComponent,\n];\n\nconst entryComponents: IComponentWithLateLoadKey[] = [\n    EmbeddedContentComponent,\n    KpiComponent,\n    RiskScoreTileComponent,\n    LineChartComponent,\n    LoadingComponent,\n    ProportionalWidgetComponent,\n    StackComponent,\n    StackedAreaChartComponent,\n    StackedBarChartComponent,\n    StackedPercentageAreaChartComponent,\n    StatusBarChartComponent,\n    TableWidgetComponent,\n    TemplateLoadErrorComponent,\n    TilesComponent,\n    TimeframeSelectionComponent,\n    TimeseriesWidgetComponent,\n    WidgetBodyComponent,\n    WidgetBodyContentComponent,\n    WidgetHeaderComponent,\n    WidgetErrorComponent,\n    ListWidgetComponent,\n    ListLeafItemComponent,\n    ListGroupItemComponent,\n    ListNavigationBarComponent,\n    WidgetSearchComponent,\n    ProportionalDonutContentComponent,\n];\n\n@NgModule({\n    imports: [\n        NuiDashboardsCommonModule,\n        GridsterModule,\n        NuiBusyModule,\n        NuiButtonModule,\n        NuiChartsModule,\n        NuiDashboardConfiguratorModule,\n        NuiIconModule,\n        NuiImageModule,\n        NuiMenuModule,\n        NuiPizzagnaModule,\n        NuiPopupModule,\n        NuiProgressModule,\n        NuiTableModule,\n        NuiTimeFrameBarModule,\n        ScrollingModule,\n        NuiTimeFramePickerModule,\n        ReactiveFormsModule,\n        NuiSpinnerModule,\n        NuiTooltipModule,\n        NuiSearchModule,\n        NuiCommonModule,\n        NuiRepeatModule,\n        NuiRiskScoreModule,\n        NuiSelectModule,\n        NuiPopoverModule,\n        NuiPaginatorModule,\n        NuiMessageModule,\n    ],\n    declarations: dashboardComponents,\n    providers: [\n        ComponentPortalService,\n        WidgetTypesService,\n        DecimalPipe,\n        RefresherSettingsService,\n    ],\n    exports: dashboardComponents,\n})\nexport class NuiDashboardsModule {\n    constructor(\n        widgetTypesService: WidgetTypesService,\n        componentRegistry: ComponentRegistryService,\n        eventRegistry: EventRegistryService,\n        kpiFormattersRegistry: KpiFormattersRegistryService,\n        riskScoreFormattersRegistry: RiskScoreFormattersRegistryService\n    ) {\n        widgetTypesService.registerWidgetType(\"kpi\", 1, kpi);\n        widgetTypesService.registerWidgetType(\"risk-score\", 1, riskScore);\n        widgetTypesService.registerWidgetType(\"table\", 1, table);\n        widgetTypesService.registerWidgetType(\"proportional\", 1, proportional);\n        widgetTypesService.registerWidgetType(\"timeseries\", 1, timeseries);\n        widgetTypesService.registerWidgetType(\n            \"previewPlaceholder\",\n            1,\n            previewPlaceholder\n        );\n        widgetTypesService.registerWidgetType(\n            \"embedded-content\",\n            1,\n            embeddedContent\n        );\n        widgetTypesService.registerWidgetType(\"drilldown\", 1, drilldown);\n\n        for (const ec of entryComponents.filter(\n            (c: IComponentWithLateLoadKey) => c.lateLoadKey\n        )) {\n            componentRegistry.registerByLateLoadKey(ec);\n        }\n\n        eventRegistry.registerEvent(REFRESH);\n        eventRegistry.registerEvent(WIDGET_REMOVE);\n        eventRegistry.registerEvent(WIDGET_READY);\n        eventRegistry.registerEvent(WIDGET_EDIT);\n        eventRegistry.registerEvent(WIDGET_CREATE);\n        eventRegistry.registerEvent(WIDGET_RESIZE);\n        eventRegistry.registerEvent(WIDGET_POSITION_CHANGE);\n        eventRegistry.registerEvent(SET_PROPERTY_VALUE);\n        eventRegistry.registerEvent(SET_TIMEFRAME);\n        eventRegistry.registerEvent(PREVIEW_EVENT);\n        eventRegistry.registerEvent(DASHBOARD_EDIT_MODE);\n        eventRegistry.registerEvent(DATA_SOURCE_OUTPUT);\n        eventRegistry.registerEvent(DATA_SOURCE_BUSY);\n\n        kpiFormattersRegistry.addItems(DEFAULT_KPI_FORMATTERS);\n        riskScoreFormattersRegistry.addItems(DEFAULT_RISK_SCORE_FORMATTERS);\n    }\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./add-data.pipe\";\nexport * from \"./pizzagna-root.pipe\";\nexport * from \"./widget-configurator-section-header.pipe\";\nexport * from \"./widget-editor-accordion-form-state.pipe\";\nexport * from \"./widget-editor-accordion-header-icon.pipe\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./has-control-in-error-state\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./kpi-tiles-configuration.component\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./kpi-tiles-configuration/public-api\";\nexport * from \"./types\";\n","// © 2023 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./risk-score-tiles-configuration.component\";\n","// © 2023 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { IRiskScoreData } from \"../../../../components/risk-score-tile/types\";\nimport { IProviderConfiguration } from \"../../../../types\";\nimport { IItemConfiguration } from \"../../types\";\n\nexport interface IRiskScoreItemConfiguration extends IItemConfiguration {\n    widgetData: IRiskScoreData;\n    dataSource: IProviderConfiguration;\n}\n","// © 2023 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./risk-score-tiles-configuration/public-api\";\nexport * from \"./types\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./filters-editor/table-filters-editor.component\";\nexport * from \"./scrollType-editor/scroll-type-editor.component\";\nexport * from \"./columns-editor/table-columns-configuration.component\";\nexport * from \"./columns-editor/column-configuration/presentation-configuration/portals/formatter-configurator.component\";\nexport * from \"./columns-editor/column-configuration/presentation-configuration/portals/link-configurator/link-configurator.component\";\nexport * from \"./columns-editor/column-configuration/presentation-configuration/portals/value-selector/value-selector.component\";\nexport * from \"./columns-editor/column-configuration/presentation-configuration/presentation-configuration.component\";\nexport * from \"./columns-editor/column-configuration/description-configuration/description-configuration.component\";\nexport * from \"./columns-editor-v2/column-configuration/description-configuration/description-configuration-v2.component\";\nexport * from \"./columns-editor-v2/column-configuration/presentation-configuration/presentation-configuration-v2.component\";\nexport * from \"./columns-editor-v2/column-configuration/table-column-configuration/table-column-configuration.component\";\nexport * from \"./columns-editor-v2/table-columns-configuration-v2.component\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { IItemConfiguration } from \"../../types\";\n\nexport interface ITimeseriesItemConfiguration extends IItemConfiguration {\n    selectedSeriesId: string;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"../configurator-items/timeseries-metadata-configuration/timeseries-metadata-configuration.component\";\nexport * from \"./timeseries-series-collection-configuration/timeseries-series-collection-configuration.component\";\nexport * from \"./timeseries-tile-description-configuration/timeseries-tile-description-configuration.component\";\nexport * from \"./timeseries-tile-indicator-data-configuration/timeseries-tile-indicator-data-configuration.component\";\nexport * from \"./types\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./chart-options-editor/proportional-chart-options-editor.component\";\nexport * from \"./chart-options-editor-v2/proportional-chart-options-editor-v2.component\";\nexport * from \"./donut-content-configuration/donut-content-configuration.component\";\nexport * from \"./aggregators-configurators/aggregator-configurator/aggregator-configurator.component\";\nexport * from \"./aggregators-configurators/field-mapper-aggregator-configurator/field-mapper-aggregator-configurator.component\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./refresher-configuration.component\";\nexport * from \"./refresh-rate-configurator/refresh-rate-configurator.component\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./data-source-error.component\";\nexport * from \"./table/table-data-source-error.component\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./data-source-configuration/data-source-configuration.component\";\nexport * from \"./data-source-configuration-v2/data-source-configuration-v2.component\";\nexport * from \"./kpi-description-configuration/kpi-description-configuration.component\";\nexport * from \"./risk-score-tile-description-configuration/risk-score-tile-description-configuration.component\";\nexport * from \"./thresholds-configuration/thresholds-configuration.component\";\nexport * from \"./title-and-description-configuration/title-and-description-configuration.component\";\nexport * from \"./refresher-configuration/public-api\";\nexport * from \"./embedded-content-configuration/embedded-content-configuration.component\";\nexport * from \"./info-message-configuration/info-message-configuration.component\";\nexport * from \"./background-color-rules-configuration/background-color-rules-configuration.component\";\nexport * from \"./data-source-error/public-api\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport { EntityFormattingConfigurationComponent } from \"./entity-formatting-configuration/entity-formatting-configuration.component\";\nexport { GroupingConfigurationComponent } from \"./grouping-configuration/grouping-configuration.component\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./kpi/public-api\";\nexport * from \"./risk-score/public-api\";\nexport * from \"./table/public-api\";\nexport * from \"./timeseries/public-api\";\nexport * from \"./proportional/public-api\";\nexport * from \"./configurator-items/public-api\";\nexport * from \"./drilldown/public-api\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { ElementRef, EventEmitter, QueryList } from \"@angular/core\";\nimport { BehaviorSubject } from \"rxjs\";\n\nimport { IEvent } from \"@nova-ui/bits\";\n\nimport { DashwizStepComponent } from \"../dashwiz-step/dashwiz-step.component\";\nimport {\n    IDashwizButtonsComponent,\n    IDashwizStepComponent,\n    IDashwizStepNavigatedEvent,\n    IDashwizWaitEvent,\n} from \"../types\";\n\nexport interface IDashwizComponent {\n    steps: QueryList<DashwizStepComponent>;\n    stepTitles: QueryList<ElementRef>;\n    dynamicStep: any;\n    /**\n     * Set to true to hide the wizard header including the step breadcrumbs.\n     * (default: false)\n     */\n    hideHeader: boolean;\n    /**\n     * Set to true to show the \"Next\" button at any point during the wizard process.\n     * (default: false)\n     */\n    canProceed: boolean;\n    /**\n     * Set to true to show the \"Finish\" button at any point during the wizard process.\n     * (default: false)\n     */\n    canFinish: boolean;\n    /**\n     * Overrides the default text on the finish step button.\n     * (default: 'Action')\n     */\n    finishText: string;\n    /**\n     * Use this to stretch lines between step labels according to largest label width.\n     * (default: false)\n     */\n    stretchStepLines: boolean;\n    /**\n     * Optional components to use for the buttons for each step\n     */\n    buttonComponentTypes: string[];\n    /**\n     * Evaluated when a step is selected.\n     */\n    stepNavigated: EventEmitter<IDashwizStepNavigatedEvent>;\n    /**\n     * Evaluated when the user attempts to cancel the wizard.\n     */\n    cancel: EventEmitter<boolean>;\n    /**\n     * Evaluated when the user completes the wizard.\n     */\n    finish: EventEmitter<any>;\n    /**\n     * Emits when next button is clicked.\n     */\n    next: EventEmitter<any>;\n    /**\n     * Emits when Back button is clicked.\n     */\n    back: EventEmitter<any>;\n    /**\n     * Use this BehaviorSubject to control navigability between steps\n     */\n    navigationControl: BehaviorSubject<IDashwizWaitEvent>;\n    currentStep: DashwizStepComponent;\n    stepLineWidth: number;\n    stepIndex: number;\n    buttonProperties: IDashwizButtonsComponent;\n    buttonPortalActionMap: Record<string, Function>;\n    addStepDynamic(\n        wizardStep: IDashwizStepComponent,\n        indexToInsert: number\n    ): any;\n    disableStep(step: DashwizStepComponent): void;\n    enableStep(step: DashwizStepComponent): void;\n    hideStep(step: DashwizStepComponent): void;\n    showStep(step: DashwizStepComponent): void;\n    goToStep(stepIndex: number): void;\n    selectStep(step: DashwizStepComponent): void;\n    onBack(): void;\n    onNext(): void;\n    onFinish(): void;\n    onCancel(): void;\n    enterAnotherStep(): void;\n    onButtonPortalOutput(event: IEvent): void;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./dashwiz.component\";\nexport * from \"./dashwiz-buttons.component\";\nexport * from \"./model\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./dashwiz-step.component\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { EventEmitter, TemplateRef } from \"@angular/core\";\n\nimport { IBusyConfig } from \"@nova-ui/bits\";\n\nexport interface IDashwizStepNavigatedEvent {\n    /** Index of the current step. */\n    currentStepIndex: number;\n\n    /** Index of the previous step. */\n    previousStepIndex?: number;\n\n    /** The current step instance. */\n    currentStep: any;\n\n    /** The previous step instance. */\n    previousStep?: any;\n}\n\nexport interface IDashwizWaitEvent {\n    busyState: IBusyConfig;\n    allowStepChange: boolean;\n}\n\nexport interface IDashwizStepComponent {\n    stepTemplate?: TemplateRef<any>;\n    stepControl?: boolean;\n    nextText?: string;\n    disabled?: boolean;\n    hidden?: boolean;\n    enter?: EventEmitter<IDashwizStepNavigatedEvent | void>;\n    exit?: EventEmitter<IDashwizStepNavigatedEvent | void>;\n    next?: EventEmitter<IDashwizStepNavigatedEvent | void>;\n    valid?: EventEmitter<boolean>;\n}\n\nexport interface IDashwizButtonsComponent {\n    // Inputs\n    busy?: boolean;\n    canProceed?: boolean;\n    canFinish?: boolean;\n    isFirstStepActive?: boolean;\n    isLastStepActive?: boolean;\n    nextText?: string;\n    finishText?: string;\n\n    // Outputs\n    cancel?: EventEmitter<void>;\n    next?: EventEmitter<void>;\n    back?: EventEmitter<void>;\n    finish?: EventEmitter<void>;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./dashwiz/public-api\";\nexport * from \"./dashwiz-step/public-api\";\nexport * from \"./types\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { EventEmitter } from \"@angular/core\";\nimport { BehaviorSubject } from \"rxjs\";\n\nimport { IWidget } from \"../../components/widget/types\";\n\nexport interface IWidgetTemplateSelector {\n    widgetSelected: EventEmitter<IWidget>;\n}\n\nexport interface IItemConfiguration {\n    id: string;\n    componentType?: string;\n    headerSubject?: BehaviorSubject<string>;\n    [key: string]: any;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./configurator/configurator.component\";\nexport * from \"./widgets/public-api\";\nexport * from \"./wizard/public-api\";\nexport * from \"./types\";\nexport * from \"./form-stack/form-stack.component\";\nexport * from \"./formatters/link-formatter/link-formatter.component\";\nexport * from \"./formatters/status-with-icon-formatter/status-with-icon-formatter.component\";\nexport * from \"./formatters/raw-formatter/raw-formatter.component\";\nexport * from \"./formatters/percentage-formatter/percentage-formatter.component\";\nexport * from \"./formatters/donut-content-percentage-formatter/donut-content-percentage-formatter.component\";\nexport * from \"./formatters/donut-content-percentage-formatter/donut-content-percentage-configuration.component\";\nexport * from \"./formatters/donut-content-sum-formatter/donut-content-sum-formatter.component\";\nexport * from \"./formatters/donut-content-raw-formatter/donut-content-raw-formatter.component\";\nexport * from \"./formatters/widget-formatter-configurators/donut-formatter-configurator.component\";\nexport * from \"./formatters/icon-formatter/icon-formatter.component\";\nexport * from \"./formatters/si-units-formatter/si-units-formatter.component\";\nexport * from \"./heading/configurator-heading.component\";\nexport * from \"./items-dynamic/items-dynamic.component\";\nexport * from \"./preview-placeholder/preview-placeholder.component\";\nexport * from \"./widget-cloner/widget-cloner.component\";\nexport * from \"./widget-configurator-section/widget-configurator-section.component\";\nexport * from \"./widget-editor/widget-editor.component\";\nexport * from \"./widget-editor-accordion/widget-editor-accordion.component\";\nexport * from \"./widget-editor-accordion/widget-editor-accordion-header/widget-editor-accordion-header.component\";\nexport * from \"./drop-area/drop-area.component\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./types\";\nexport * from \"./pipe/public-api\";\nexport * from \"./functions/public-api\";\nexport * from \"./services/public-api\";\nexport * from \"./components/public-api\";\nexport * from \"./configurator.module\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { GridsterItem } from \"angular-gridster2\";\n\nimport {\n    WidgetUpdateOperation,\n    WidgetRemovalOperation,\n} from \"../../configurator/services/types\";\nimport { IWidgets } from \"../widget/types\";\n\nexport interface IDashboard {\n    widgets: IWidgets;\n    positions: Record<string, GridsterItem>;\n}\n\nexport interface IDashboardBelowFoldLazyLoadingConfig {\n    enabled: boolean;\n    configuration?: {\n        // reloads widgets if they were already loaded but then disappeared from the view\n        reloadWidgetsOnScroll: boolean;\n    };\n}\n\nexport interface IDashboardPersistenceHandler {\n    trySubmit?: WidgetUpdateOperation;\n    tryRemove?: WidgetRemovalOperation;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./dashboard.component\";\nexport * from \"./types\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n/**\n * The interface for a dynamic link provider for widget header.\n */\nexport interface IHeaderLinkProvider {\n    /**\n     * Generates a link url based on a user configured URL\n     *\n     * @param template a user configured URL\n     */\n    getLink(template: string): string;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { IPizzagna } from \"../../types\";\n\nexport interface IWidgets {\n    [key: string]: IWidget;\n}\n\nexport interface IWidget {\n    id: string;\n    type: string;\n    version?: number;\n    pizzagna: IPizzagna;\n    metadata?: IWidgetMetadata;\n    uniqueKey?: string;\n}\n\nexport interface IWidgetMetadata extends Record<string, any> {\n    /**\n     * Set this to true to communicate to the widget cloner that the widget requires\n     * further configuration before it can be placed on the dashboard.\n     */\n    needsConfiguration?: boolean;\n}\n\nexport interface IWidgetTypeDefinition {\n    configurator?: IPizzagna;\n    widget: IPizzagna;\n    /**\n     * Paths to various important values in pizzagnas - this should be coupled with respective pizzagnas in v10 - NUI-5829\n     */\n    paths?: {\n        widget?: Record<string, string>;\n        configurator?: Record<string, string>;\n    };\n}\n\n/**\n * The properties for widget error display\n */\nexport interface IWidgetErrorDisplayProperties {\n    image: string;\n    title: string;\n    description: string;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./widget.component\";\nexport * from \"./widget-header/widget-header.component\";\nexport * from \"./widget-body/widget-body.component\";\nexport * from \"./widget-body-content/widget-body-content.component\";\nexport * from \"./widget-header/types\";\nexport * from \"./types\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./stack/stack.component\";\nexport * from \"./tiles/tiles.component\";\nexport * from \"./base-layout\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./template-load-error.component\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./types\";\nexport * from \"./proportional-widget.component\";\nexport * from \"./proportional-donut-content/proportional-donut-content.component\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { IFormatter } from \"../types\";\n\nexport enum KpiFormatterTypes {\n    // ROOT ?\n    Value = \"Value\",\n}\n\nexport interface IKpiData {\n    id?: string;\n    value?: any;\n    units?: string;\n    label?: string;\n    backgroundColor?: string;\n    textColor?: string;\n    fontSize?: string;\n    numberFormat?: string;\n    link?: string;\n    margin?: number;\n    [key: string]: any;\n}\n\nexport interface IKpiConfiguration {\n    interactive?: boolean;\n    formatters?: IKpiFormattersConfiguration;\n}\n\nexport type IKpiFormattersConfiguration = Partial<\n        Record<\n            KpiFormatterTypes | string,\n            {\n                formatter: IFormatter;\n            }\n        >\n    >;\nexport type IKpiFormatterProperties = Partial<Record<KpiFormatterTypes | string, any>>;\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./kpi.component\";\nexport * from \"./types\";\n","// © 2023 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { IFormatter } from \"../types\";\n\nexport enum RiskScoreFormatterTypes {\n    // ROOT ?\n    Value = \"Value\",\n}\n\nexport interface IRiskScoreData {\n    id?: string;\n    value?: number;\n    minValue?: number;\n    maxValue?: number;\n    label?: string;\n    description?: string;\n    backgroundColor?: string;\n    textColor?: string;\n    fontSize?: string;\n    numberFormat?: string;\n    link?: string;\n    [key: string]: any;\n}\n\nexport interface IRiskScoreConfiguration {\n    interactive?: boolean;\n    formatters?: IRiskScoreFormattersConfiguration;\n}\n\nexport type IRiskScoreFormattersConfiguration = Partial<\n        Record<\n            RiskScoreFormatterTypes | string,\n            {\n                formatter: IFormatter;\n            }\n        >\n    >;\nexport type IRiskScoreFormatterProperties = Partial<Record<RiskScoreFormatterTypes | string, any>>;\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./risk-score-tile.component\";\nexport * from \"./types\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport moment from \"moment/moment\";\n\nimport { ITimeframe } from \"@nova-ui/bits\";\n\nimport { ITimeseriesWidgetData } from \"../../types\";\n\n/**\n * Use this function to apply endpoints on status data returned by a data source so that when the status\n * chart is zoomed (filtered), each status visualization is ensured to have valid start and end values\n *\n * @param timeframeFilter The timeframe used for filtering the data\n * @param filteredSeriesData The series data after the filter is applied\n * @param originalSeriesData The superset of series data with no filter applied\n *\n * @returns The filtered data including start and end data points applied to each series\n */\nexport function applyStatusEndpoints(\n    timeframeFilter: ITimeframe,\n    filteredSeriesData: ITimeseriesWidgetData[],\n    originalSeriesData: ITimeseriesWidgetData[]\n): ITimeseriesWidgetData[] {\n    const filteredDataWithEndpoints = filteredSeriesData;\n    originalSeriesData.forEach((series: ITimeseriesWidgetData, i: number) => {\n        if (series.data.length === 0) {\n            return;\n        }\n\n        let startIndex = -1;\n        let endIndex = -1;\n\n        const filteredData = filteredSeriesData[i].data;\n        if (filteredData.length > 0) {\n            // if we have filtered data, get the start and end indexes from the original unfiltered data\n            startIndex = series.data.findIndex((datum) =>\n                moment(datum.x).isSame(filteredData[0].x)\n            );\n            endIndex = series.data.findIndex((datum) =>\n                moment(datum.x).isSame(filteredData[filteredData.length - 1].x)\n            );\n        } else {\n            // if the filter doesn't overlap any data points, use the indexes of the first data points\n            // in the original data that come after the start and before end filter date times respectively\n            startIndex = series.data.findIndex((datum) =>\n                moment(datum.x).isAfter(timeframeFilter.startDatetime)\n            );\n            endIndex =\n                series.data.findIndex((datum) =>\n                    moment(datum.x).isAfter(timeframeFilter.endDatetime)\n                ) - 1;\n        }\n\n        const filterStartMoment = moment(timeframeFilter.startDatetime);\n        if (\n            (filteredData.length === 0 ||\n                !filterStartMoment.isSame(filteredData[0].x)) &&\n            filterStartMoment.isBetween(\n                series.data[0].x,\n                series.data[series.data.length - 1].x\n            )\n        ) {\n            filteredDataWithEndpoints[i].data.unshift({\n                ...series.data[startIndex - 1],\n                x: timeframeFilter.startDatetime.toDate(),\n            });\n        }\n\n        const filterEndMoment = moment(timeframeFilter.endDatetime);\n        if (\n            (filteredData.length === 0 ||\n                !filterEndMoment.isSame(\n                    filteredData[filteredData.length - 1].x\n                )) &&\n            filterEndMoment.isBetween(\n                series.data[0].x,\n                series.data[series.data.length - 1].x\n            )\n        ) {\n            filteredDataWithEndpoints[i].data.push({\n                ...series.data[endIndex],\n                x: timeframeFilter.endDatetime.toDate(),\n            });\n        }\n    });\n\n    return filteredDataWithEndpoints;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./xy-chart/xy-chart.component\";\nexport * from \"./xy-chart/chart-types/line-chart.component\";\nexport * from \"./xy-chart/chart-types/stacked-area-chart.component\";\nexport * from \"./xy-chart/chart-types/stacked-bar-chart.component\";\nexport * from \"./xy-chart/chart-types/stacked-percentage-area-chart.component\";\nexport * from \"./status-bar-chart/status-bar-chart.component\";\nexport * from \"./status-bar-chart/apply-status-endpoints\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./types\";\nexport * from \"./timeseries-widget.component\";\nexport * from \"./timeseries-chart-preset.service\";\nexport * from \"./chart-presets/public-api\";\nexport * from \"./transformer/public-api\";\nexport * from \"./timeseries-inspection-menu/timeseries-inspection-menu.component\";\nexport * from \"./timeseries-helpers\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./types\";\nexport * from \"./table-widget.component\";\nexport * from \"./delayed-mouse-presence-detection.directive\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./refresher\";\nexport * from \"./refresher-settings.service\";\nexport * from \"./data-source-adapter\";\nexport * from \"./timeseries-data-source-adapter\";\nexport * from \"./table-data-source-adapter\";\nexport * from \"./interaction/interaction-handler\";\nexport * from \"./interaction/url-interaction-handler\";\nexport * from \"./types\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./timeframe-selection.component\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./loading.component\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { IProperties } from \"../../types\";\nimport { IFormatter } from \"../types\";\n\nexport interface IListWidgetConfiguration extends IFormatter {\n    properties: Record<string, any>;\n    itemProperties?: IProperties;\n}\n\nexport interface INavigationBarButtons {\n    back?: {\n        disabled?: boolean;\n    };\n    home?: {\n        disabled?: boolean;\n    };\n}\n\nexport interface INavigationBarConfig {\n    buttons?: INavigationBarButtons;\n    label?: string;\n    isRoot?: boolean;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./types\";\nexport * from \"./list-widget.component\";\nexport * from \"./list-elements/list-leaf-item/list-leaf-item.component\";\nexport * from \"./list-elements/list-group-item/list-group-item.component\";\nexport * from \"./list-elements/list-navigation-bar/list-navigation-bar.component\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport interface ISearchOnKeyUp {\n    enabled: boolean;\n    debounceTime?: number;\n}\n\nexport interface IWidgetSearchConfiguration {\n    searchOnKeyUp?: ISearchOnKeyUp;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./dashboard/public-api\";\nexport * from \"./widget/public-api\";\nexport * from \"./layouts/public-api\";\nexport * from \"./template-load-error/public-api\";\nexport * from \"./proportional-widget/public-api\";\nexport * from \"./kpi-widget/public-api\";\nexport * from \"./risk-score-tile/public-api\";\nexport * from \"./timeseries-widget/public-api\";\nexport * from \"./table-widget/public-api\";\nexport * from \"./providers/public-api\";\nexport * from \"./types\";\nexport * from \"./time-frame-selection/public-api\";\nexport * from \"./loading/public-api\";\nexport * from \"./embedded-content/embedded-content.component\";\nexport * from \"./list-widget/public-api\";\nexport * from \"./widget-search/widget-search.component\";\nexport * from \"./widget-search/types\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./widget-editor.directive\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./widget-editor/public-api\";\nexport * from \"./gridster-item-widget-id/gridster-item-widget-id.directive\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport { IChartSeries } from \"@nova-ui/charts\";\n\nexport interface IProportionalDonutContentAggregatorProperties {\n    /** Metric Id, case sensitive. */\n    activeMetricId?: string;\n    [key: string]: any;\n}\n\nexport interface IProportionalDonutContentAggregator {\n    aggregatorType: string;\n    properties?: IProportionalDonutContentAggregatorProperties;\n}\n\ninterface IAggregatorChartData extends Pick<IChartSeries<any>, \"id\" | \"data\"> {\n    // there's a possibility to pass any value from the dataSource to the aggregator\n    [key: string]: any;\n}\nexport type IProportionalAggregatorOrigin = Array<IAggregatorChartData>;\n\nexport type IProportionalAggregatorFn = ((\n    origin: IProportionalAggregatorOrigin,\n    properties?: IProportionalDonutContentAggregatorProperties\n) => string) & {\n    aggregatorType: string;\n};\n\nexport interface IProportionalDonutContentAggregatorDefinition {\n    aggregatorType: string;\n    label: string;\n    fn: IProportionalAggregatorFn;\n    properties?: IProportionalDonutContentAggregatorProperties;\n    configurationComponent?: string;\n}\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./percentage-aggregator\";\nexport * from \"./sum-aggregator\";\nexport * from \"./types\";\nexport * from \"./field-mapper\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./proportional-aggregators/public-api\";\nexport * from \"./merge-changes\";\nexport * from \"./map-data-to-formatter-properties\";\nexport * from \"./timeseries-datetime-formatter\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./components\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./components\";\nexport * from \"./providers\";\nexport * from \"./types\";\nexport * from \"./legend\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./configurator/public-api\";\nexport * from \"./widget/public-api\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n/* eslint-disable max-len */\nimport { IBroadcasterConfig } from \"../../components/providers/types\";\nimport { WidgetConfiguratorSectionComponent } from \"../../configurator/components/widget-configurator-section/widget-configurator-section.component\";\nimport { ProportionalChartOptionsEditorV2Component } from \"../../configurator/components/widgets/proportional/chart-options-editor-v2/proportional-chart-options-editor-v2.component\";\nimport { DonutContentConfigurationComponent } from \"../../configurator/components/widgets/proportional/donut-content-configuration/donut-content-configuration.component\";\nimport {\n    NOVA_GENERIC_CONVERTER,\n    NOVA_PIZZAGNA_BROADCASTER,\n} from \"../../services/types\";\nimport { WellKnownProviders } from \"../../types\";\nimport { LegendPlacement } from \"../../widget-types/common/widget/legend\";\n\nexport const DONUT_CONTENT_CONFIGURATION_SLICE = {\n    presentation: {\n        id: \"presentation\",\n        componentType: WidgetConfiguratorSectionComponent.lateLoadKey,\n        properties: {\n            headerText: \"Presentation\",\n            nodes: [\n                \"titleAndDescription\",\n                \"chartOptionsEditor\",\n                \"donutContentConfiguration\",\n            ],\n        },\n    },\n    chartOptionsEditor: {\n        id: \"chartOptionsEditor\",\n        componentType: ProportionalChartOptionsEditorV2Component.lateLoadKey,\n        properties: {\n            chartTypes: [\n                {\n                    id: \"PieChart\",\n                    label: $localize`Pie`,\n                },\n                {\n                    id: \"DonutChart\",\n                    label: $localize`Donut`,\n                },\n                {\n                    id: \"VerticalBarChart\",\n                    label: $localize`Vertical Bar`,\n                },\n                {\n                    id: \"HorizontalBarChart\",\n                    label: $localize`Horizontal Bar`,\n                },\n            ],\n            legendPlacementOptions: [\n                {\n                    id: LegendPlacement.None,\n                    label: $localize`None`,\n                },\n                {\n                    id: LegendPlacement.Right,\n                    label: $localize`Right`,\n                },\n                {\n                    id: LegendPlacement.Bottom,\n                    label: $localize`Bottom`,\n                },\n            ],\n        },\n        providers: {\n            // converter transforms the chart options data between the widget and the form\n            [WellKnownProviders.Converter]: {\n                providerId: NOVA_GENERIC_CONVERTER,\n                properties: {\n                    formParts: [\n                        {\n                            previewPath:\n                                \"chart.properties.configuration.chartOptions\",\n                            keys: [\n                                \"type\",\n                                \"legendPlacement\",\n                                \"legendFormatter\",\n                            ],\n                        },\n                        // {\n                        //     previewPath: \"chart.properties.configuration\",\n                        //     keys: [\"legendFormatter\"],\n                        // },\n                    ],\n                },\n            },\n            [WellKnownProviders.Broadcaster]: {\n                providerId: NOVA_PIZZAGNA_BROADCASTER,\n                properties: {\n                    configs: [\n                        {\n                            trackOn: \"component\",\n                            key: \"chartTypeChanged$\",\n                            paths: [\n                                \"data.donutContentConfiguration.properties.chartType\",\n                            ],\n                        },\n                    ] as IBroadcasterConfig[],\n                },\n            },\n        },\n    },\n    // /presentation/donutContentConfiguration\n    donutContentConfiguration: {\n        id: \"donutContentConfiguration\",\n        componentType: DonutContentConfigurationComponent.lateLoadKey,\n        providers: {\n            // converter transforms the chart options data between the widget and the form\n            [WellKnownProviders.Converter]: {\n                providerId: NOVA_GENERIC_CONVERTER,\n                properties: {\n                    formParts: [\n                        {\n                            previewPath:\n                                \"chart.properties.configuration.chartOptions.donutContentConfig\",\n                            keys: [\"formatter\", \"aggregator\"],\n                        },\n                    ],\n                },\n            },\n        },\n    },\n};\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./common/public-api\";\nexport { DEFAULT_KPI_FORMATTERS } from \"./kpi/kpi-configurator\";\nexport {\n    DEFAULT_PROPORTIONAL_CONTENT_FORMATTERS,\n    DEFAULT_PROPORTIONAL_CONTENT_AGGREGATORS,\n    DEFAULT_LEGEND_FORMATTERS,\n} from \"./proportional/proportional-configurator\";\nexport * from \"./proportional/donut-content-configurator-slice\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./default-palette\";\n","// © 2022 SolarWinds Worldwide, LLC. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to\n//  deal in the Software without restriction, including without limitation the\n//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n//  sell copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nexport * from \"./lib/common/public-api\";\nexport * from \"./lib/dashboards.module\";\nexport * from \"./lib/types\";\nexport * from \"./lib/services/public-api\";\nexport * from \"./lib/configurator/public-api\";\nexport * from \"./lib/pizzagna/public-api\";\nexport * from \"./lib/components/public-api\";\nexport * from \"./lib/directives/public-api\";\nexport * from \"./lib/functions/public-api\";\nexport * from \"./lib/widget-types/public-api\";\nexport * from \"./lib/constants/public-api\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.DynamicComponentCreator","i1.PizzagnaService","i2.UrlInteractionService","i2.KpiColorComparatorsRegistryService","i1.RefresherSettingsService","i1.DashwizService","i1.PreviewService","i2.PizzagnaService","difference","i3","i1.WidgetConfigurationService","i2.EventRegistryService","i3.PizzagnaService","i1.ComponentRegistryService","i2.ComponentPortalService","i3.ProviderRegistryService","i5.ComponentPortalDirective","i2.WidgetTypesService","i3.PizzagnaComponent","_defaultsDeep","i2","i3.GridsterItemWidgetIdDirective","i4.LoadingComponent","i5.WidgetComponent","i4.ComponentPortalDirective","i4","i1.ProportionalContentAggregatorsRegistryService","i2.ProportionalDonutContentFormattersRegistryService","i6.ComponentPortalDirective","i6.ProportionalDonutContentComponent","i7.DashboardUnitConversionPipe","isNil","i4.SearchFeatureAddonService","i5.PaginatorFeatureAddonService","i6.VirtualScrollFeatureAddonService","i7.TableFormatterRegistryService","i8","i9","i10.ComponentPortalDirective","i12.DelayedMousePresenceDetectionDirective","i3.TimeframeSerializationService","i2.TimeseriesScalesService","i1.TimeseriesScalesService","i1.TimeseriesChartPresetService","i7.TimeseriesInspectionMenuComponent","i4.PreviewOverlayComponent","i2.WidgetToDashboardEventProxyService","i1.WidgetTypesService","i3.PreviewOverlayComponent","i5.PizzagnaComponent","i6","i7.PizzagnaRootPipe","i1.ConfiguratorHeadingService","i5","i7.ComponentPortalDirective","i8.DropAreaComponent","i9.AddDataPipe","i10.WidgetConfiguratorSectionHeaderPipe","i2.DashwizService","i1.ConfiguratorComponent","i2.PreviewService","i4.WidgetTypesService","i7.PizzagnaComponent","i8.ComponentPortalDirective","i9.DashwizComponent","i10.DashwizStepComponent","i11.ConfiguratorHeadingComponent","i3.ConfiguratorComponent","i6.DashwizComponent","i7.DashwizStepComponent","i8.ConfiguratorHeadingComponent","i1.WidgetConfiguratorSectionCoordinatorService","i6.WidgetEditorAccordionComponent","i7.WidgetEditorAccordionHeaderComponent","i9.WidgetEditorAccordionFormStatePipe","i10.FormHeaderIconPipePipe","i8.WidgetEditorAccordionComponent","i9.WidgetEditorAccordionHeaderComponent","i10.WidgetEditorAccordionFormStatePipe","i11.FormHeaderIconPipePipe","Subject","i3.ComponentPortalDirective","i5.WidgetEditorAccordionComponent","i7.WidgetEditorAccordionFormStatePipe","i8.FormHeaderIconPipePipe","i4.WidgetEditorAccordionComponent","i5.WidgetEditorAccordionFormStatePipe","i6.FormHeaderIconPipePipe","i3.RefresherSettingsService","i6.RefreshRateConfiguratorComponent","i3.WidgetEditorAccordionComponent","i5.WidgetEditorAccordionHeaderComponent","i6.WidgetEditorAccordionFormStatePipe","i7.FormHeaderIconPipePipe","i6.WidgetEditorAccordionHeaderComponent","i4.WidgetEditorAccordionHeaderComponent","i5.ItemsDynamicComponent","i7.WidgetEditorAccordionComponent","i8.WidgetEditorAccordionHeaderComponent","i3.ProportionalLegendFormattersRegistryService","i8.WidgetEditorAccordionFormStatePipe","i9.FormHeaderIconPipePipe","i3.ProportionalContentAggregatorsRegistryService","i7","i3.TableFormatterRegistryService","i2.ConfiguratorHeadingService","i2.DescriptionConfigurationV2Component","i3.PresentationConfigurationV2Component","i8.TableColumnConfigurationComponent","i9.WidgetConfiguratorSectionComponent","i10.DropAreaComponent","i11.WidgetConfiguratorSectionHeaderPipe","i3.ScrollTypeEditorService","i4.ItemsDynamicComponent","i8.AddDataPipe","i1.ConfiguratorService","entryComponents","i1.DashboardComponent","i2.WidgetEditorService","i3.WidgetRemovalService","tileDescriptionConfiguratorTemplatePath","dataSourceConfiguratorTemplatePath","i2.ComponentRegistryService","i3.EventRegistryService","i4.KpiFormattersRegistryService","i4.RiskScoreFormattersRegistryService"],"mappings":"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OAAO,EAAE,gBAAgB;AACzB,4BAAA,WAAW,EAAE,kBAAkB;AAClC,yBAAA;AACJ,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,QAAA,EAAA,qnBAAA,EAAA;;0BAoBZ,MAAM;2BAAC,kBAAkB;yCAZrB,KAAK,EAAA,CAAA;sBAAb;gBAGM,YAAY,EAAA,CAAA;sBADlB,WAAW;uBAAC,OAAO;;;AEhExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MAwBsB,wCAAwC,CAAA;AAU1D,IAAA,WAAA,CACW,cAAiC,EAC9B,WAAwB,EAC3B,MAAqB,EAAA;QAFrB,IAAc,CAAA,cAAA,GAAd,cAAc;QACX,IAAW,CAAA,WAAA,GAAX,WAAW;QACd,IAAM,CAAA,MAAA,GAAN,MAAM;AAPP,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAa;;AAU5C,IAAA,WAAW,CAAC,OAAsB,EAAA;;;AAGrC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACZ,IAAI,CAAC,QAAQ,EAAE;;;AAGnB,QAAA,IAAI,IAAI,CAAC,0BAA0B,EAAE;AACjC,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CA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,kBAAkB;wBAClB,WAAW;wBACX,wBAAwB;AAC3B,qBAAA;AACD,oBAAA,OAAO,EAAE,mBAAmB;AAC/B,iBAAA;;;ACpOD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IAIY;AAAZ,CAAA,UAAY,iBAAiB,EAAA;;AAEzB,IAAA,iBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACnB,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,GAG5B,EAAA,CAAA,CAAA;;ACzBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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;AACpC;;ACzGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAca,MAAA,iCAAiC,GAAG;AAC7C,IAAA,YAAY,EAAE;AACV,QAAA,EAAE,EAAE,cAAc;QAClB,aAAa,EAAE,kCAAkC,CAAC,WAAW;AAC7D,QAAA,UAAU,EAAE;AACR,YAAA,UAAU,EAAE,cAAc;AAC1B,YAAA,KAAK,EAAE;gBACH,qBAAqB;gBACrB,oBAAoB;gBACpB,2BAA2B;AAC9B,aAAA;AACJ,SAAA;AACJ,KAAA;AACD,IAAA,kBAAkB,EAAE;AAChB,QAAA,EAAE,EAAE,oBAAoB;QACxB,aAAa,EAAE,yCAAyC,CAAC,WAAW;AACpE,QAAA,UAAU,EAAE;AACR,YAAA,UAAU,EAAE;AACR,gBAAA;AACI,oBAAA,EAAE,EAAE,UAAU;oBACd,KAAK,EAAE,SAAS,CAAA,CAAK,GAAA,CAAA;AACxB,iBAAA;AACD,gBAAA;AACI,oBAAA,EAAE,EAAE,YAAY;oBAChB,KAAK,EAAE,SAAS,CAAA,CAAO,KAAA,CAAA;AAC1B,iBAAA;AACD,gBAAA;AACI,oBAAA,EAAE,EAAE,kBAAkB;oBACtB,KAAK,EAAE,SAAS,CAAA,CAAc,YAAA,CAAA;AACjC,iBAAA;AACD,gBAAA;AACI,oBAAA,EAAE,EAAE,oBAAoB;oBACxB,KAAK,EAAE,SAAS,CAAA,CAAgB,cAAA,CAAA;AACnC,iBAAA;AACJ,aAAA;AACD,YAAA,sBAAsB,EAAE;AACpB,gBAAA;oBACI,EAAE,EAAE,eAAe,CAAC,IAAI;oBACxB,KAAK,EAAE,SAAS,CAAA,CAAM,IAAA,CAAA;AACzB,iBAAA;AACD,gBAAA;oBACI,EAAE,EAAE,eAAe,CAAC,KAAK;oBACzB,KAAK,EAAE,SAAS,CAAA,CAAO,KAAA,CAAA;AAC1B,iBAAA;AACD,gBAAA;oBACI,EAAE,EAAE,eAAe,CAAC,MAAM;oBAC1B,KAAK,EAAE,SAAS,CAAA,CAAQ,MAAA,CAAA;AAC3B,iBAAA;AACJ,aAAA;AACJ,SAAA;AACD,QAAA,SAAS,EAAE;;AAEP,YAAA,CAAC,kBAAkB,CAAC,SAAS,GAAG;AAC5B,gBAAA,UAAU,EAAE,sBAAsB;AAClC,gBAAA,UAAU,EAAE;AACR,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,WAAW,EACP,6CAA6C;AACjD,4BAAA,IAAI,EAAE;gCACF,MAAM;gCACN,iBAAiB;gCACjB,iBAAiB;AACpB,6BAAA;AACJ,yBAAA;;;;;AAKJ,qBAAA;AACJ,iBAAA;AACJ,aAAA;AACD,YAAA,CAAC,kBAAkB,CAAC,WAAW,GAAG;AAC9B,gBAAA,UAAU,EAAE,yBAAyB;AACrC,gBAAA,UAAU,EAAE;AACR,oBAAA,OAAO,EAAE;AACL,wBAAA;AACI,4BAAA,OAAO,EAAE,WAAW;AACpB,4BAAA,GAAG,EAAE,mBAAmB;AACxB,4BAAA,KAAK,EAAE;gCACH,qDAAqD;AACxD,6BAAA;AACJ,yBAAA;AACoB,qBAAA;AAC5B,iBAAA;AACJ,aAAA;AACJ,SAAA;AACJ,KAAA;;AAED,IAAA,yBAAyB,EAAE;AACvB,QAAA,EAAE,EAAE,2BAA2B;QAC/B,aAAa,EAAE,kCAAkC,CAAC,WAAW;AAC7D,QAAA,SAAS,EAAE;;AAEP,YAAA,CAAC,kBAAkB,CAAC,SAAS,GAAG;AAC5B,gBAAA,UAAU,EAAE,sBAAsB;AAClC,gBAAA,UAAU,EAAE;AACR,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,WAAW,EACP,gEAAgE;AACpE,4BAAA,IAAI,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC;AACpC,yBAAA;AACJ,qBAAA;AACJ,iBAAA;AACJ,aAAA;AACJ,SAAA;AACJ,KAAA;;;AC3IL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;;AAEG;;;;"}