@hestia-earth/ui-components 0.32.33 → 0.32.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,24 @@
1
+ import { Signal } from '@angular/core';
2
+ import { ChartConfiguration, ChartData } from 'chart.js';
3
+ import * as i0 from "@angular/core";
4
+ export interface HistogramChartDataItem {
5
+ label: string;
6
+ values: number[];
7
+ color?: string;
8
+ backgroundColor?: string;
9
+ borderColor?: string;
10
+ }
11
+ export declare class DistributionChartComponent {
12
+ protected readonly distribution: import("@angular/core").InputSignal<number[]>;
13
+ protected readonly value: import("@angular/core").InputSignal<number>;
14
+ protected readonly label: import("@angular/core").InputSignal<string>;
15
+ protected readonly nbBins: import("@angular/core").InputSignal<number>;
16
+ protected readonly config: import("@angular/core").InputSignal<Partial<ChartConfiguration>>;
17
+ private readonly groupedData;
18
+ private readonly singlePoint;
19
+ private readonly defaultConfig;
20
+ protected readonly dataConfig: Signal<ChartData>;
21
+ protected readonly configuration: Signal<Partial<ChartConfiguration>>;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<DistributionChartComponent, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<DistributionChartComponent, "he-distribution-chart", never, { "distribution": { "alias": "distribution"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "nbBins": { "alias": "nbBins"; "required": false; "isSignal": true; }; "config": { "alias": "config"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
24
+ }
@@ -646,7 +646,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImpor
646
646
  type: Input
647
647
  }] } });
648
648
 
649
- const defaultSettings$2 = Object.freeze({
649
+ const defaultSettings$3 = Object.freeze({
650
650
  options: {
651
651
  responsive: true,
652
652
  maintainAspectRatio: false,
@@ -660,7 +660,7 @@ class ChartComponent {
660
660
  this.data = input({});
661
661
  this.config = input({});
662
662
  this.configuration = computed(() => ({
663
- ...merge({}, defaultSettings$2, this.config()),
663
+ ...merge({}, defaultSettings$3, this.config()),
664
664
  data: this.data()
665
665
  }));
666
666
  }
@@ -672,7 +672,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImpor
672
672
  args: [{ selector: 'he-chart', changeDetection: ChangeDetectionStrategy.OnPush, imports: [ChartConfigurationDirective], template: "<div class=\"is-relative h-100 | chart-container\" #container>\n <canvas [chartConfiguration]=\"configuration()\" [chartContainer]=\"container\"></canvas>\n</div>\n", styles: [":host{display:block;height:100%;overflow:visible}.chart-container{min-height:50px}\n"] }]
673
673
  }] });
674
674
 
675
- const defaultSettings$1 = Object.freeze({
675
+ const defaultSettings$2 = Object.freeze({
676
676
  type: 'horizontalBar',
677
677
  options: {
678
678
  events: [],
@@ -753,7 +753,7 @@ class BarChartComponent {
753
753
  datasets: this.defaultDatasets(),
754
754
  labels: this.data().map(({ label }) => label)
755
755
  }));
756
- this.configuration = computed(() => merge({}, defaultSettings$1, this.defaultConfig(), this.config()));
756
+ this.configuration = computed(() => merge({}, defaultSettings$2, this.defaultConfig(), this.config()));
757
757
  }
758
758
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: BarChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
759
759
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.1.4", type: BarChartComponent, isStandalone: true, selector: "he-bar-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, datasets: { classPropertyName: "datasets", publicName: "datasets", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<he-chart [data]=\"dataConfig()\" [config]=\"configuration()\" />\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: ChartComponent, selector: "he-chart", inputs: ["data", "config"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -763,7 +763,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImpor
763
763
  args: [{ selector: 'he-bar-chart', changeDetection: ChangeDetectionStrategy.OnPush, imports: [ChartComponent], template: "<he-chart [data]=\"dataConfig()\" [config]=\"configuration()\" />\n", styles: [":host{display:block}\n"] }]
764
764
  }] });
765
765
 
766
- const defaultSettings = {
766
+ const defaultSettings$1 = {
767
767
  type: 'line',
768
768
  options: {
769
769
  scales: {
@@ -785,7 +785,7 @@ class LineChartComponent {
785
785
  this.dataConfig = computed(() => ({
786
786
  datasets: this.datasets()
787
787
  }));
788
- this.configuration = computed(() => merge({}, defaultSettings, this.config()));
788
+ this.configuration = computed(() => merge({}, defaultSettings$1, this.config()));
789
789
  }
790
790
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: LineChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
791
791
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.1.4", type: LineChartComponent, isStandalone: true, selector: "he-line-chart", inputs: { datasets: { classPropertyName: "datasets", publicName: "datasets", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<he-chart [data]=\"dataConfig()\" [config]=\"configuration()\" />\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: ChartComponent, selector: "he-chart", inputs: ["data", "config"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -7288,6 +7288,193 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImpor
7288
7288
  args: [{ selector: 'he-cycles-functional-unit-measure', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<span class=\"is-nowrap has-text-ellipsis\" [attr.title]=\"functionalUnit()\">\n @switch (functionalUnit()) {\n @case (CycleFunctionalUnit['1 ha']) {\n 1 hectare\n }\n @default {\n relative\n }\n }\n</span>\n", styles: [":host{display:inline-block}\n"] }]
7289
7289
  }] });
7290
7290
 
7291
+ const colors = {
7292
+ darkBlue: 'rgba(25, 57, 87, 1)',
7293
+ lightBlue: 'rgba(132, 160, 220, 1)'
7294
+ };
7295
+ const opaqueColor = (color, opacity = 0.5) => color.replace(', 1)', `, ${opacity})`);
7296
+ const defaultSettings = Object.freeze({
7297
+ type: 'line',
7298
+ options: {
7299
+ events: [],
7300
+ responsive: true,
7301
+ tooltips: {
7302
+ enabled: false
7303
+ },
7304
+ legend: {
7305
+ display: false,
7306
+ align: 'center'
7307
+ },
7308
+ scales: {
7309
+ yAxes: [
7310
+ {
7311
+ display: true,
7312
+ position: 'left',
7313
+ gridLines: {
7314
+ display: true
7315
+ },
7316
+ ticks: {
7317
+ beginAtZero: true,
7318
+ crossAlign: 'center'
7319
+ }
7320
+ }
7321
+ ]
7322
+ }
7323
+ }
7324
+ });
7325
+ const joinXLabel = ' to ';
7326
+ const createDynamicHistogramData = (values, numberOfBins) => {
7327
+ if (values.length === 0) {
7328
+ return { labels: [], frequencies: [] };
7329
+ }
7330
+ // Find the minimum and maximum values in the dataset
7331
+ const min = Math.min(...values);
7332
+ const max = Math.max(...values);
7333
+ // Calculate the size of each bin
7334
+ const binSize = (max - min) / numberOfBins;
7335
+ // Create an array to hold the bin frequencies, initialized to zero
7336
+ const frequencies = new Array(numberOfBins).fill(0);
7337
+ // Create labels for the chart based on the bin ranges
7338
+ const labels = [];
7339
+ for (let i = 0; i < numberOfBins; i++) {
7340
+ const binStart = min + i * binSize;
7341
+ const binEnd = binStart + binSize;
7342
+ labels.push([binStart, binEnd].join(joinXLabel));
7343
+ // Count data points for the current bin
7344
+ values.forEach(point => {
7345
+ if (point >= binStart && point < binEnd) {
7346
+ frequencies[i]++;
7347
+ }
7348
+ });
7349
+ }
7350
+ // Ensure the maximum value is included in the last bin
7351
+ frequencies[numberOfBins - 1] += values.filter(p => p === max).length;
7352
+ return { labels, frequencies };
7353
+ };
7354
+ const createSinglePointDataset = (labels, pointValue) => {
7355
+ // Create an array with the same length as the labels, filled with nulls.
7356
+ const pointData = new Array(labels.length).fill(null);
7357
+ // Find the index of the bin that contains the pointValue.
7358
+ // We parse the bin range from the label string (e.g., '900-1000').
7359
+ const binIndex = labels.findIndex(label => {
7360
+ // Split the label to get the bin's min and max values
7361
+ const [minStr, maxStr] = label.split(joinXLabel);
7362
+ const binMin = parseFloat(minStr);
7363
+ const binMax = parseFloat(maxStr);
7364
+ return pointValue >= binMin && pointValue < binMax;
7365
+ });
7366
+ // If a valid bin is found, place the point value in the array.
7367
+ if (binIndex !== -1) {
7368
+ // We'll set the single point's Y-value to its own value here,
7369
+ // but you could also set it to a frequency or a custom value.
7370
+ pointData[binIndex] = 1;
7371
+ }
7372
+ return pointData;
7373
+ };
7374
+ class DistributionChartComponent {
7375
+ constructor() {
7376
+ this.distribution = input();
7377
+ this.value = input();
7378
+ this.label = input('Distribution');
7379
+ this.nbBins = input(10);
7380
+ this.config = input({});
7381
+ this.groupedData = computed(() => createDynamicHistogramData(this.distribution() ?? [], this.nbBins()));
7382
+ this.singlePoint = computed(() => createSinglePointDataset(this.groupedData()?.labels, this.value()));
7383
+ this.defaultConfig = computed(() => ({
7384
+ options: {
7385
+ scales: {
7386
+ xAxes: [
7387
+ {
7388
+ display: true,
7389
+ gridLines: {
7390
+ offsetGridLines: true
7391
+ },
7392
+ ticks: {
7393
+ min: 0,
7394
+ userCallback: (label) => label
7395
+ .split(joinXLabel)
7396
+ .map(parseFloat)
7397
+ .map(v => toPrecision(v, 2))
7398
+ .map(v => v.toExponential())
7399
+ .join('-')
7400
+ },
7401
+ scaleLabel: {
7402
+ display: true,
7403
+ labelString: this.label()
7404
+ }
7405
+ }
7406
+ ],
7407
+ yAxes: [
7408
+ {
7409
+ ticks: {
7410
+ fontColor: '#4A4A4A',
7411
+ fontFamily: 'Lato',
7412
+ fontSize: 10,
7413
+ fontStyle: '400'
7414
+ },
7415
+ scaleLabel: {
7416
+ display: true,
7417
+ labelString: 'Frequency of values'
7418
+ }
7419
+ }
7420
+ ]
7421
+ }
7422
+ }
7423
+ }));
7424
+ this.dataConfig = computed(() => ({
7425
+ datasets: [
7426
+ this.distribution()
7427
+ ? [
7428
+ {
7429
+ label: 'Distribution',
7430
+ data: this.groupedData().frequencies,
7431
+ backgroundColor: opaqueColor(colors.lightBlue),
7432
+ borderColor: colors.lightBlue,
7433
+ borderWidth: 1,
7434
+ fill: true,
7435
+ pointRadius: 0,
7436
+ type: 'bar'
7437
+ },
7438
+ {
7439
+ label: 'Distribution',
7440
+ data: this.groupedData().frequencies,
7441
+ backgroundColor: opaqueColor(colors.darkBlue),
7442
+ borderColor: colors.darkBlue,
7443
+ borderWidth: 1,
7444
+ fill: false,
7445
+ pointRadius: 0,
7446
+ type: 'line'
7447
+ }
7448
+ ]
7449
+ : null,
7450
+ this.singlePoint()?.length
7451
+ ? {
7452
+ label: 'Value',
7453
+ data: this.singlePoint(),
7454
+ fill: false,
7455
+ borderColor: colors.darkBlue,
7456
+ backgroundColor: colors.darkBlue,
7457
+ pointRadius: 4,
7458
+ showLine: false,
7459
+ type: 'line',
7460
+ tension: 0
7461
+ }
7462
+ : null
7463
+ ]
7464
+ .filter(Boolean)
7465
+ .flat(),
7466
+ labels: this.groupedData().labels
7467
+ }));
7468
+ this.configuration = computed(() => merge({}, defaultSettings, this.defaultConfig(), this.config()));
7469
+ }
7470
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: DistributionChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7471
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.1.4", type: DistributionChartComponent, isStandalone: true, selector: "he-distribution-chart", inputs: { distribution: { classPropertyName: "distribution", publicName: "distribution", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, nbBins: { classPropertyName: "nbBins", publicName: "nbBins", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<he-chart [data]=\"dataConfig()\" [config]=\"configuration()\" />\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: ChartComponent, selector: "he-chart", inputs: ["data", "config"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7472
+ }
7473
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: DistributionChartComponent, decorators: [{
7474
+ type: Component$1,
7475
+ args: [{ selector: 'he-distribution-chart', changeDetection: ChangeDetectionStrategy.OnPush, imports: [ChartComponent], template: "<he-chart [data]=\"dataConfig()\" [config]=\"configuration()\" />\n", styles: [":host{display:block}\n"] }]
7476
+ }] });
7477
+
7291
7478
  // TODO: compute from the list of unique properties
7292
7479
  const additionalKeys = [
7293
7480
  'key',
@@ -7298,7 +7485,6 @@ const additionalKeys = [
7298
7485
  'emissionDuration',
7299
7486
  'observations',
7300
7487
  'statsDefinition',
7301
- 'term',
7302
7488
  'source',
7303
7489
  'variety',
7304
7490
  'reliability',
@@ -7344,7 +7530,7 @@ class NodeValueDetailsComponent {
7344
7530
  this.schemaService = inject(HeSchemaService);
7345
7531
  this.localStorage = inject(LocalStorageService);
7346
7532
  this.schemaBaseUrl = schemaBaseUrl();
7347
- this.keys = ['value', ...grouppedValueKeys];
7533
+ this.keys = ['term', 'value', ...grouppedValueKeys];
7348
7534
  this.additionalKeys = additionalKeys;
7349
7535
  this.schemas = toSignal(this.schemaService.schemas$.pipe(startWith(loadSchemas())));
7350
7536
  this.schemaKeys = computed(() => Object.entries(this.schemas()?.[this.type()]?.properties ?? {})
@@ -7366,6 +7552,10 @@ class NodeValueDetailsComponent {
7366
7552
  this.type = computed(() => this.node()?.['@type']);
7367
7553
  this.type$ = toObservable(this.type);
7368
7554
  this.showInline = computed(() => this.nodes()?.length === 1);
7555
+ this.showDistribution = signal(undefined);
7556
+ this.chartDistribution = computed(() => this.showDistribution()?.distribution.flat());
7557
+ this.chartValue = computed(() => Array.isArray(this.showDistribution()?.value) ? this.showDistribution()?.value?.[0] : this.showDistribution()?.value);
7558
+ this.chartLabel = computed(() => `${this.node()?.term.name} in ${this.node()?.term.units}`);
7369
7559
  combineLatest([this.type$, this.schemaKeys$])
7370
7560
  .pipe(filter(([type, schemaKeys]) => !!type && !!schemaKeys?.length))
7371
7561
  .subscribe(([type]) => {
@@ -7412,11 +7602,20 @@ class NodeValueDetailsComponent {
7412
7602
  this.updateKeys(selectedKeys);
7413
7603
  }
7414
7604
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeValueDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7415
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeValueDetailsComponent, isStandalone: true, selector: "he-node-value-details", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, nodeType: { classPropertyName: "nodeType", publicName: "nodeType", isSignal: true, isRequired: true, transformFunction: null }, dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: true, transformFunction: null }, dataKey: { classPropertyName: "dataKey", publicName: "dataKey", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (showInline()) {\n @for (key of keys; track key) {\n <he-link-key-value\n [node]=\"node()\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n [key]=\"key\" />\n }\n @for (key of additionalKeys; track key) {\n <he-link-key-value\n [node]=\"node()\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n [key]=\"key\" />\n }\n} @else {\n <he-link-key-value\n [node]=\"node()\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n key=\"term\" />\n\n <div class=\"columns is-p-0 is-my-0 is-overflow-visible\">\n <div class=\"column is-p-0 is-my-0\"></div>\n <div class=\"column is-p-0 is-my-0 is-narrow is-overflow-visible\">\n <div ngbDropdown class=\"is-overflow-visible\" autoClose=\"outside\" placement=\"bottom-end\">\n <button\n ngbDropdownToggle\n class=\"button is-small is-ghost has-text-white\"\n type=\"button\"\n aria-controls=\"config-menu\">\n <span>Customise fields</span>\n <span class=\"icon is-small\">\n <he-svg-icon name=\"settings\" aria-hidden=\"true\" />\n </span>\n </button>\n\n <div ngbDropdownMenu id=\"config-menu\">\n <div\n class=\"dropdown-content is-overflow-y-auto\"\n (click)=\"$event.stopPropagation()\"\n cdkDropList\n (cdkDropListDropped)=\"dropTableKey($event)\">\n @for (key of tableKeys(); track key.key; let keyIndex = $index) {\n <div class=\"dropdown-item cdk-drag-item\" cdkDrag>\n <div class=\"field is-relative\">\n <input\n type=\"checkbox\"\n class=\"selector\"\n [id]=\"key.key\"\n [name]=\"key.key\"\n [checked]=\"key.selected\"\n (change)=\"onTableKeyChange(key, keyIndex, $event.target.checked)\" />\n <label class=\"is-pl-2\" [for]=\"key.key\">{{ key.key }}</label>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"table-container is-mt-2\">\n <table class=\"table is-dark is-narrow is-striped\">\n <thead>\n @for (key of visibleTableKeys(); track key) {\n <th>\n <a class=\"is-dark\" [href]=\"schemaBaseUrl + '/' + type() + '#' + key.split('.')[0]\" target=\"_blank\">\n <b>{{ key.includes('.') ? key.split('.')[1] : key }}</b>\n </a>\n </th>\n }\n </thead>\n <tbody>\n @for (node of nodes(); track node) {\n <tr>\n @for (key of visibleTableKeys(); track key) {\n <td>\n <he-link-key-value\n [node]=\"node\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n [key]=\"key\"\n [defaultValue]=\"defaultValue(key)\" />\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n}\n", styles: ["table{background-color:transparent}table::ng-deep he-link-key-value>a:first-child,table::ng-deep he-link-key-value>a:first-child+span{display:none}.dropdown-content{max-height:300px}.cdk-drag-preview{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;list-style:none}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-item{cursor:move}\n"], dependencies: [{ kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "component", type: LinkKeyValueComponent, selector: "he-link-key-value", inputs: ["node", "nodeType", "dataState", "dataKey", "key", "defaultValue"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation", "svgClass"] }, { kind: "ngmodule", type: NgbTooltipModule }, { kind: "ngmodule", type: NgbDropdownModule }, { kind: "directive", type: i1$1.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i1$1.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i1$1.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7605
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeValueDetailsComponent, isStandalone: true, selector: "he-node-value-details", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, nodeType: { classPropertyName: "nodeType", publicName: "nodeType", isSignal: true, isRequired: true, transformFunction: null }, dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: true, transformFunction: null }, dataKey: { classPropertyName: "dataKey", publicName: "dataKey", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (showInline()) {\n @for (key of keys; track key) {\n <he-link-key-value\n [node]=\"node()\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n [key]=\"key\" />\n }\n @for (key of additionalKeys; track key) {\n <he-link-key-value\n [node]=\"node()\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n [key]=\"key\" />\n }\n\n @if (node().distribution?.length) {\n <a class=\"is-dark\" [href]=\"schemaBaseUrl + '/' + node['@type'] + '#distribution'\" target=\"_blank\">\n <b>distribution</b>\n </a>\n <span class=\"pr-2\">:</span>\n <ng-container *ngTemplateOutlet=\"distributionContent; context: { node: node() }\" />\n }\n} @else {\n <he-link-key-value\n [node]=\"node()\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n key=\"term\" />\n\n <div class=\"columns is-p-0 is-my-0 is-overflow-visible\">\n <div class=\"column is-p-0 is-my-0\"></div>\n <div class=\"column is-p-0 is-my-0 is-narrow is-overflow-visible\">\n <div ngbDropdown class=\"is-overflow-visible\" autoClose=\"outside\" placement=\"bottom-end\">\n <button\n ngbDropdownToggle\n class=\"button is-small is-ghost has-text-white\"\n type=\"button\"\n aria-controls=\"config-menu\">\n <span>Customise fields</span>\n <span class=\"icon is-small\">\n <he-svg-icon name=\"settings\" aria-hidden=\"true\" />\n </span>\n </button>\n\n <div ngbDropdownMenu id=\"config-menu\">\n <div\n class=\"dropdown-content is-overflow-y-auto\"\n (click)=\"$event.stopPropagation()\"\n cdkDropList\n (cdkDropListDropped)=\"dropTableKey($event)\">\n @for (key of tableKeys(); track key.key; let keyIndex = $index) {\n <div class=\"dropdown-item cdk-drag-item\" cdkDrag>\n <div class=\"field is-relative\">\n <input\n type=\"checkbox\"\n class=\"selector\"\n [id]=\"key.key\"\n [name]=\"key.key\"\n [checked]=\"key.selected\"\n (change)=\"onTableKeyChange(key, keyIndex, $event.target.checked)\" />\n <label class=\"is-pl-2\" [for]=\"key.key\">{{ key.key }}</label>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"table-container is-mt-2\">\n <table class=\"table is-dark is-narrow is-striped\">\n <thead>\n @for (key of visibleTableKeys(); track key) {\n <th>\n <a class=\"is-dark\" [href]=\"schemaBaseUrl + '/' + type() + '#' + key.split('.')[0]\" target=\"_blank\">\n <b>{{ key.includes('.') ? key.split('.')[1] : key }}</b>\n </a>\n </th>\n }\n </thead>\n <tbody>\n @for (node of nodes(); track node) {\n <tr>\n @for (key of visibleTableKeys(); track key) {\n <td>\n @if (key === 'distribution') {\n <ng-container *ngTemplateOutlet=\"distributionContent; context: { node }\" />\n } @else {\n <he-link-key-value\n [node]=\"node\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n [key]=\"key\"\n [defaultValue]=\"defaultValue(key)\" />\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n}\n\n<ng-template #distributionContent let-node=\"node\">\n @if (node.distribution?.length) {\n @if (showDistribution() === node) {\n <a class=\"has-text-white\" (click)=\"showDistribution.set(undefined)\">Hide</a>\n } @else {\n <a class=\"has-text-white\" (click)=\"showDistribution.set(node)\">Show</a>\n }\n } @else {\n <span>N/A</span>\n }\n</ng-template>\n\n@if (chartDistribution()) {\n <div class=\"has-background-white is-mt-2 is-p-2 is-rounded | chart-container\">\n <he-distribution-chart\n [distribution]=\"chartDistribution()\"\n [value]=\"chartValue()\"\n [label]=\"chartLabel()\"\n [nbBins]=\"10\" />\n </div>\n}\n", styles: ["table{background-color:transparent}table::ng-deep he-link-key-value>a:first-child,table::ng-deep he-link-key-value>a:first-child+span{display:none}.dropdown-content{max-height:300px}.cdk-drag-preview{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;list-style:none}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-item{cursor:move}.chart-container{border-radius:3px}.chart-container he-distribution-chart{height:250px;min-width:400px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "component", type: LinkKeyValueComponent, selector: "he-link-key-value", inputs: ["node", "nodeType", "dataState", "dataKey", "key", "defaultValue"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation", "svgClass"] }, { kind: "ngmodule", type: NgbTooltipModule }, { kind: "ngmodule", type: NgbDropdownModule }, { kind: "directive", type: i1$1.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i1$1.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i1$1.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "component", type: DistributionChartComponent, selector: "he-distribution-chart", inputs: ["distribution", "value", "label", "nbBins", "config"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7416
7606
  }
7417
7607
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeValueDetailsComponent, decorators: [{
7418
7608
  type: Component$1,
7419
- args: [{ selector: 'he-node-value-details', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CdkDrag, CdkDropList, LinkKeyValueComponent, HESvgIconComponent, NgbTooltipModule, NgbDropdownModule], template: "@if (showInline()) {\n @for (key of keys; track key) {\n <he-link-key-value\n [node]=\"node()\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n [key]=\"key\" />\n }\n @for (key of additionalKeys; track key) {\n <he-link-key-value\n [node]=\"node()\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n [key]=\"key\" />\n }\n} @else {\n <he-link-key-value\n [node]=\"node()\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n key=\"term\" />\n\n <div class=\"columns is-p-0 is-my-0 is-overflow-visible\">\n <div class=\"column is-p-0 is-my-0\"></div>\n <div class=\"column is-p-0 is-my-0 is-narrow is-overflow-visible\">\n <div ngbDropdown class=\"is-overflow-visible\" autoClose=\"outside\" placement=\"bottom-end\">\n <button\n ngbDropdownToggle\n class=\"button is-small is-ghost has-text-white\"\n type=\"button\"\n aria-controls=\"config-menu\">\n <span>Customise fields</span>\n <span class=\"icon is-small\">\n <he-svg-icon name=\"settings\" aria-hidden=\"true\" />\n </span>\n </button>\n\n <div ngbDropdownMenu id=\"config-menu\">\n <div\n class=\"dropdown-content is-overflow-y-auto\"\n (click)=\"$event.stopPropagation()\"\n cdkDropList\n (cdkDropListDropped)=\"dropTableKey($event)\">\n @for (key of tableKeys(); track key.key; let keyIndex = $index) {\n <div class=\"dropdown-item cdk-drag-item\" cdkDrag>\n <div class=\"field is-relative\">\n <input\n type=\"checkbox\"\n class=\"selector\"\n [id]=\"key.key\"\n [name]=\"key.key\"\n [checked]=\"key.selected\"\n (change)=\"onTableKeyChange(key, keyIndex, $event.target.checked)\" />\n <label class=\"is-pl-2\" [for]=\"key.key\">{{ key.key }}</label>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"table-container is-mt-2\">\n <table class=\"table is-dark is-narrow is-striped\">\n <thead>\n @for (key of visibleTableKeys(); track key) {\n <th>\n <a class=\"is-dark\" [href]=\"schemaBaseUrl + '/' + type() + '#' + key.split('.')[0]\" target=\"_blank\">\n <b>{{ key.includes('.') ? key.split('.')[1] : key }}</b>\n </a>\n </th>\n }\n </thead>\n <tbody>\n @for (node of nodes(); track node) {\n <tr>\n @for (key of visibleTableKeys(); track key) {\n <td>\n <he-link-key-value\n [node]=\"node\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n [key]=\"key\"\n [defaultValue]=\"defaultValue(key)\" />\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n}\n", styles: ["table{background-color:transparent}table::ng-deep he-link-key-value>a:first-child,table::ng-deep he-link-key-value>a:first-child+span{display:none}.dropdown-content{max-height:300px}.cdk-drag-preview{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;list-style:none}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-item{cursor:move}\n"] }]
7609
+ args: [{ selector: 'he-node-value-details', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
7610
+ NgTemplateOutlet,
7611
+ CdkDrag,
7612
+ CdkDropList,
7613
+ LinkKeyValueComponent,
7614
+ HESvgIconComponent,
7615
+ NgbTooltipModule,
7616
+ NgbDropdownModule,
7617
+ DistributionChartComponent
7618
+ ], template: "@if (showInline()) {\n @for (key of keys; track key) {\n <he-link-key-value\n [node]=\"node()\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n [key]=\"key\" />\n }\n @for (key of additionalKeys; track key) {\n <he-link-key-value\n [node]=\"node()\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n [key]=\"key\" />\n }\n\n @if (node().distribution?.length) {\n <a class=\"is-dark\" [href]=\"schemaBaseUrl + '/' + node['@type'] + '#distribution'\" target=\"_blank\">\n <b>distribution</b>\n </a>\n <span class=\"pr-2\">:</span>\n <ng-container *ngTemplateOutlet=\"distributionContent; context: { node: node() }\" />\n }\n} @else {\n <he-link-key-value\n [node]=\"node()\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n key=\"term\" />\n\n <div class=\"columns is-p-0 is-my-0 is-overflow-visible\">\n <div class=\"column is-p-0 is-my-0\"></div>\n <div class=\"column is-p-0 is-my-0 is-narrow is-overflow-visible\">\n <div ngbDropdown class=\"is-overflow-visible\" autoClose=\"outside\" placement=\"bottom-end\">\n <button\n ngbDropdownToggle\n class=\"button is-small is-ghost has-text-white\"\n type=\"button\"\n aria-controls=\"config-menu\">\n <span>Customise fields</span>\n <span class=\"icon is-small\">\n <he-svg-icon name=\"settings\" aria-hidden=\"true\" />\n </span>\n </button>\n\n <div ngbDropdownMenu id=\"config-menu\">\n <div\n class=\"dropdown-content is-overflow-y-auto\"\n (click)=\"$event.stopPropagation()\"\n cdkDropList\n (cdkDropListDropped)=\"dropTableKey($event)\">\n @for (key of tableKeys(); track key.key; let keyIndex = $index) {\n <div class=\"dropdown-item cdk-drag-item\" cdkDrag>\n <div class=\"field is-relative\">\n <input\n type=\"checkbox\"\n class=\"selector\"\n [id]=\"key.key\"\n [name]=\"key.key\"\n [checked]=\"key.selected\"\n (change)=\"onTableKeyChange(key, keyIndex, $event.target.checked)\" />\n <label class=\"is-pl-2\" [for]=\"key.key\">{{ key.key }}</label>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"table-container is-mt-2\">\n <table class=\"table is-dark is-narrow is-striped\">\n <thead>\n @for (key of visibleTableKeys(); track key) {\n <th>\n <a class=\"is-dark\" [href]=\"schemaBaseUrl + '/' + type() + '#' + key.split('.')[0]\" target=\"_blank\">\n <b>{{ key.includes('.') ? key.split('.')[1] : key }}</b>\n </a>\n </th>\n }\n </thead>\n <tbody>\n @for (node of nodes(); track node) {\n <tr>\n @for (key of visibleTableKeys(); track key) {\n <td>\n @if (key === 'distribution') {\n <ng-container *ngTemplateOutlet=\"distributionContent; context: { node }\" />\n } @else {\n <he-link-key-value\n [node]=\"node\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n [key]=\"key\"\n [defaultValue]=\"defaultValue(key)\" />\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n}\n\n<ng-template #distributionContent let-node=\"node\">\n @if (node.distribution?.length) {\n @if (showDistribution() === node) {\n <a class=\"has-text-white\" (click)=\"showDistribution.set(undefined)\">Hide</a>\n } @else {\n <a class=\"has-text-white\" (click)=\"showDistribution.set(node)\">Show</a>\n }\n } @else {\n <span>N/A</span>\n }\n</ng-template>\n\n@if (chartDistribution()) {\n <div class=\"has-background-white is-mt-2 is-p-2 is-rounded | chart-container\">\n <he-distribution-chart\n [distribution]=\"chartDistribution()\"\n [value]=\"chartValue()\"\n [label]=\"chartLabel()\"\n [nbBins]=\"10\" />\n </div>\n}\n", styles: ["table{background-color:transparent}table::ng-deep he-link-key-value>a:first-child,table::ng-deep he-link-key-value>a:first-child+span{display:none}.dropdown-content{max-height:300px}.cdk-drag-preview{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;list-style:none}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-item{cursor:move}.chart-container{border-radius:3px}.chart-container he-distribution-chart{height:250px;min-width:400px}\n"] }]
7420
7619
  }], ctorParameters: () => [] });
7421
7620
 
7422
7621
  class CyclesNodesTimelineComponent {
@@ -9221,6 +9420,7 @@ const customErrorMessage = {
9221
9420
  Use Transformations if needed to represent additional processing steps rather than new Cycles.`
9222
9421
  : `The primary Product must not also be an Input into the cycle.`,
9223
9422
  'must have a primary processing operation': () => `For processing cycles, a primary Operation must be specified, it should reflect the main process in the Cycle.`,
9423
+ 'primaryPercent not allowed on this siteType': ({ params }) => `The ${schemaLink('Practice#primaryPercent', 'primaryPercent')} can only be used on ${schemaLink('Site#siteType', 'siteType')} ${params?.expected?.map(code).join(' or ')}.`,
9224
9424
  'at least one landCover practice must match an equivalent product': ({ params }) => `You have specified ${params?.current.map(code).join(', ')} as ${code(TermTermType.landCover)} practice, but none of the recorded products match. Please add the practices for ${params?.expected
9225
9425
  .map(code)
9226
9426
  .join(', ')}, or remove all ${code(TermTermType.landCover)} practices.`,
@@ -12293,7 +12493,7 @@ class SelectComponent extends ControlValueAccessor {
12293
12493
  provide: SELECT_TOKEN,
12294
12494
  useExisting: forwardRef(() => SelectComponent)
12295
12495
  }
12296
- ], queries: [{ propertyName: "nodes", predicate: NODE_ELEMENT_TOKEN, descendants: true }, { propertyName: "options", predicate: SELECT_OPTION_TOKEN, descendants: true }], viewQueries: [{ propertyName: "searchInputEl", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #origin=\"cdkOverlayOrigin\" cdkOverlayOrigin>\n <ng-container\n *ngTemplateOutlet=\"\n selectTemplate ?? defaultSelectTemplate;\n context: {\n $implicit: this,\n value,\n displayValue,\n labelState,\n icon,\n placeholder,\n searchPlaceholder,\n width,\n valueTemplate\n }\n \" />\n</div>\n\n<ng-template\n (backdropClick)=\"close()\"\n (detach)=\"close()\"\n [cdkConnectedOverlayOffsetX]=\"overlayOptions?.offsetX ?? -2\"\n [cdkConnectedOverlayOffsetY]=\"overlayOptions?.offsetY ?? 4\"\n [cdkConnectedOverlayOpen]=\"isOpen\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayBackdropClass]=\"['cdk-overlay-transparent-backdrop', 'pointer-none']\"\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop>\n <div [style.width]=\"width\" class=\"select-panel\" (clickOutside)=\"close()\">\n <ng-content />\n </div>\n</ng-template>\n\n<ng-template #defaultSelectTemplate>\n <div class=\"is-flex is-justify-content-flex-start is-flex-direction-column | select-host\">\n <div class=\"control is-flex is-justify-content-space-between is-align-items-center\">\n <ng-container [ngSwitch]=\"labelState\">\n <input\n #input\n (input)=\"onHandleInput($event)\"\n *ngSwitchCase=\"'search'\"\n [placeholder]=\"searchPlaceholder\"\n class=\"select-search | is-transparent\" />\n\n <ng-container *ngSwitchCase=\"'value'\">\n <ng-container *ngTemplateOutlet=\"valueTemplate ?? defaultValueTemplate; context: { $implicit: value }\" />\n </ng-container>\n </ng-container>\n\n <span class=\"drop-down-icon ml-2\">\n <he-svg-icon [name]=\"icon\" />\n </span>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultValueTemplate>\n <span [ngClass]=\"{ empty: !value }\" class=\"has-text-secondary | selected-value\">\n {{ displayValue || placeholder }}\n </span>\n</ng-template>\n", styles: ["::ng-deep:root{--select-border-radius: 6px;--select-min-width: 250px;--select-shadow: rgba(0, 0, 0, .1) 0px 4px 6px -1px, rgba(0, 0, 0, .06) 0px 2px 4px -1px}.select-host{padding:5px 10px;box-sizing:border-box;min-width:var(--select-min-width);border-radius:var(--select-border-radius);border:1px solid #f5f5f5;background:#fff;box-shadow:var(--select-shadow)}.select-host:hover{cursor:pointer;background-color:var(--color-background, #eceff1)}.select-host.select-panel-open{position:relative;z-index:1001;border-radius:var(--select-border-radius) var(--select-border-radius) 0 0;box-shadow:none}::ng-deep .is-disabled .select-host{pointer-events:none;-webkit-user-select:none;user-select:none;background:#f5f5f580;border-color:#dbdbdb;box-shadow:none;color:#dbdbdb}.select-search{border:none;outline:none;background:transparent}.select-panel{box-sizing:border-box;border-radius:0 0 var(--select-border-radius, 6px) var(--select-border-radius, 6px);border:1px solid #f5f5f5;background-color:#fff;transform-origin:top;max-height:350px;overflow:auto;box-shadow:var(--select-shadow)}\n"], dependencies: [{ kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: ClickOutsideDirective, selector: "[clickOutside]", inputs: ["clickOutsideListenAfter"], outputs: ["clickOutside"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation", "svgClass"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12496
+ ], queries: [{ propertyName: "nodes", predicate: NODE_ELEMENT_TOKEN, descendants: true }, { propertyName: "options", predicate: SELECT_OPTION_TOKEN, descendants: true }], viewQueries: [{ propertyName: "searchInputEl", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #origin=\"cdkOverlayOrigin\" cdkOverlayOrigin>\n <ng-container\n *ngTemplateOutlet=\"\n selectTemplate ?? defaultSelectTemplate;\n context: {\n $implicit: this,\n value,\n displayValue,\n labelState,\n icon,\n placeholder,\n searchPlaceholder,\n width,\n valueTemplate\n }\n \" />\n</div>\n\n<ng-template\n (backdropClick)=\"close()\"\n (detach)=\"close()\"\n [cdkConnectedOverlayOffsetX]=\"overlayOptions?.offsetX ?? -2\"\n [cdkConnectedOverlayOffsetY]=\"overlayOptions?.offsetY ?? 4\"\n [cdkConnectedOverlayOpen]=\"isOpen\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayBackdropClass]=\"['cdk-overlay-transparent-backdrop', 'pointer-none']\"\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop>\n <div [style.width]=\"width\" class=\"select-panel\" (clickOutside)=\"close()\">\n <ng-content />\n </div>\n</ng-template>\n\n<ng-template #defaultSelectTemplate>\n <div class=\"is-flex is-justify-content-flex-start is-flex-direction-column | select-host\">\n <div class=\"control is-flex is-justify-content-space-between is-align-items-center\">\n <ng-container [ngSwitch]=\"labelState\">\n <input\n #input\n (input)=\"onHandleInput($event)\"\n *ngSwitchCase=\"'search'\"\n [placeholder]=\"searchPlaceholder\"\n class=\"select-search | is-transparent\" />\n\n <ng-container *ngSwitchCase=\"'value'\">\n <ng-container *ngTemplateOutlet=\"valueTemplate ?? defaultValueTemplate; context: { $implicit: value }\" />\n </ng-container>\n </ng-container>\n\n <span class=\"drop-down-icon ml-2\">\n <he-svg-icon [name]=\"icon\" />\n </span>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultValueTemplate>\n <span [ngClass]=\"{ empty: !value }\" class=\"has-text-secondary | selected-value\">\n {{ displayValue || placeholder }}\n </span>\n</ng-template>\n", styles: ["::ng-deep:root{--select-border-radius: 6px;--select-min-width: 250px;--select-shadow: rgba(0, 0, 0, .1) 0px 4px 6px -1px, rgba(0, 0, 0, .06) 0px 2px 4px -1px}.select-host{padding:5px 10px;box-sizing:border-box;min-width:var(--select-min-width);border-radius:var(--select-border-radius);border:1px solid #f5f5f5;background:#fff;box-shadow:var(--select-shadow)}.select-host:hover{cursor:pointer;background-color:var(--color-background, #eceff1)}.select-host.select-panel-open{position:relative;z-index:1001;border-radius:var(--select-border-radius) var(--select-border-radius) 0 0;box-shadow:none}::ng-deep .is-disabled .select-host{pointer-events:none;-webkit-user-select:none;user-select:none;background:#f5f5f580;border-color:#dbdbdb;box-shadow:none;color:#dbdbdb}.select-search{border:none;outline:none;background:transparent}.select-panel{box-sizing:border-box;border-radius:0 0 var(--select-border-radius, 6px) var(--select-border-radius, 6px);border:1px solid #f5f5f5;background-color:#fff;transform-origin:top;max-height:350px;overflow:auto;box-shadow:var(--select-shadow)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: ClickOutsideDirective, selector: "[clickOutside]", inputs: ["clickOutsideListenAfter"], outputs: ["clickOutside"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation", "svgClass"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12297
12497
  }
12298
12498
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: SelectComponent, decorators: [{
12299
12499
  type: Component$1,
@@ -12308,8 +12508,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImpor
12308
12508
  useExisting: forwardRef(() => SelectComponent)
12309
12509
  }
12310
12510
  ], changeDetection: ChangeDetectionStrategy.OnPush, imports: [
12311
- CdkOverlayOrigin,
12312
12511
  NgTemplateOutlet,
12512
+ CdkOverlayOrigin,
12313
12513
  CdkConnectedOverlay,
12314
12514
  ClickOutsideDirective,
12315
12515
  NgSwitch,
@@ -13019,6 +13219,9 @@ class FilterAccordionComponent extends ControlValueAccessor {
13019
13219
  const countFn = this.getOptionCountFn();
13020
13220
  return countFn ? countFn(value) : 1;
13021
13221
  }
13222
+ isItemEffectivelyDisabled(item, parentDisabled = false) {
13223
+ return this.disabled() || item.disabled || parentDisabled;
13224
+ }
13022
13225
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: FilterAccordionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
13023
13226
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: FilterAccordionComponent, isStandalone: true, selector: "he-filter-accordion", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: false, transformFunction: null }, showClearAll: { classPropertyName: "showClearAll", publicName: "showClearAll", isSignal: true, isRequired: false, transformFunction: null }, getOptionCountFn: { classPropertyName: "getOptionCountFn", publicName: "getOptionCountFn", isSignal: true, isRequired: false, transformFunction: null }, preserveOptionsOnSelection: { classPropertyName: "preserveOptionsOnSelection", publicName: "preserveOptionsOnSelection", isSignal: true, isRequired: false, transformFunction: null }, maintainPanelStates: { classPropertyName: "maintainPanelStates", publicName: "maintainPanelStates", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectionChanged: "selectionChanged" }, providers: [
13024
13227
  {
@@ -13027,7 +13230,7 @@ class FilterAccordionComponent extends ControlValueAccessor {
13027
13230
  multi: true
13028
13231
  },
13029
13232
  FilterStore
13030
- ], usesInheritance: true, ngImport: i0, template: "<div>\n <div\n class=\"is-flex is-justify-content-space-between gap-13 is-align-items-flex-start is-flex-direction-column has-border-bottom\">\n <div class=\"is-flex is-align-items-center\">\n <h3 class=\"title is-size-6 has-text-secondary mr-2 mb-0\">{{ title() }}</h3>\n @if (tooltip()) {\n <he-svg-icon\n name=\"info-circle\"\n class=\"has-text-grey\"\n [ngbTooltip]=\"tooltip()\"\n placement=\"top\"\n triggers=\"hover\"\n container=\"body\"></he-svg-icon>\n }\n </div>\n @if (showClearAll()) {\n <span class=\"is-clickable is-size-7 has-text-weight-normal is-italic clear-button\" (click)=\"clearAll()\">\n Clear all\n </span>\n }\n </div>\n\n <div>\n @for (item of filterStore.filteredData(); track item.trackId || item.label) {\n @if (item.type === 'group') {\n @if (panelStates[item.label]) {\n @let groupState = panelStates[item.label];\n <div class=\"has-border-bottom\" [class.is-active]=\"groupState.expanded\">\n <div\n class=\"is-flex is-align-items-center is-clickable has-background-hover accordion-row\"\n (click)=\"groupState.expanded = !groupState.expanded\">\n <label class=\"checkbox mr-3\" (click)=\"$event.stopPropagation()\">\n <input\n type=\"checkbox\"\n [checked]=\"isGroupFullySelected(item)\"\n [indeterminate]=\"isGroupPartiallySelected(item)\"\n (change)=\"toggleGroup(item)\"\n [disabled]=\"disabled()\" />\n </label>\n\n <span class=\"is-flex-grow-1 has-text-weight-medium has-text-grey-dark is-size-7\">\n {{ removeCountFromLabel(item.label) }}\n </span>\n\n <he-svg-icon\n class=\"has-text-grey transition-transform\"\n [name]=\"groupState.expanded ? 'chevron-up' : 'chevron-down'\"></he-svg-icon>\n </div>\n\n <div\n class=\"filter-accordion__panel-content\"\n [class.filter-accordion__panel-content--expanded]=\"groupState.expanded\">\n @if (groupState.expanded && getDirectOptionsCount(item) > 5) {\n <div class=\"field is-mb-0 pb-2 has-border-bottom\">\n <div class=\"control is-expanded has-icons-right\">\n <input\n type=\"text\"\n class=\"input is-secondary is-small search-input\"\n placeholder=\"Search {{ removeCountFromLabel(item.label) }}\"\n [value]=\"groupState.searchTerm || ''\"\n (input)=\"groupState.searchTerm = $any($event.target).value\" />\n <a\n class=\"icon is-small is-right\"\n [class.is-hidden]=\"!groupState.searchTerm\"\n (click)=\"groupState.searchTerm = ''\">\n <he-svg-icon name=\"xmark\" />\n </a>\n <a class=\"icon is-small is-right\" [class.is-hidden]=\"groupState.searchTerm\">\n <he-svg-icon name=\"search\" />\n </a>\n </div>\n </div>\n }\n\n <div>\n @for (\n child of getFilteredDirectChildren(item, groupState.searchTerm);\n track child.trackId || child.label;\n let childLast = $last\n ) {\n @if (child.type === 'group') {\n <!-- Nested group -->\n @if (panelStates[child.label]) {\n @let childState = panelStates[child.label];\n <div class=\"pl-5\" [class.has-border-bottom]=\"!childLast\">\n <div [class.is-active]=\"childState.expanded\">\n <div\n class=\"is-flex is-align-items-center is-clickable has-background-hover accordion-row\"\n (click)=\"childState.expanded = !childState.expanded\">\n <label class=\"checkbox mr-3\" (click)=\"$event.stopPropagation()\">\n <input\n type=\"checkbox\"\n [checked]=\"isGroupFullySelected(child)\"\n [indeterminate]=\"isGroupPartiallySelected(child)\"\n (change)=\"toggleGroup(child)\"\n [disabled]=\"disabled()\" />\n </label>\n\n <span class=\"is-flex-grow-1 has-text-weight-medium has-text-grey-dark is-size-7\">\n {{ removeCountFromLabel(child.label) }}\n </span>\n\n <he-svg-icon\n class=\"has-text-grey transition-transform\"\n [class.is-rotated-180]=\"childState.expanded\"\n [name]=\"childState.expanded ? 'chevron-up' : 'chevron-down'\"></he-svg-icon>\n </div>\n\n <div\n class=\"filter-accordion__panel-content\"\n [class.filter-accordion__panel-content--expanded]=\"childState.expanded\">\n @if (childState.expanded && optionsFromGroup(child).length >= 5) {\n <div class=\"field is-mb-0 pb-2 has-border-bottom\">\n <div class=\"control is-expanded has-icons-right\">\n <input\n type=\"text\"\n class=\"input is-secondary is-small search-input\"\n placeholder=\"Search {{ removeCountFromLabel(child.label) }}\"\n [value]=\"childState.searchTerm || ''\"\n (input)=\"childState.searchTerm = $any($event.target).value\" />\n <a\n class=\"icon is-small is-right\"\n [class.is-hidden]=\"!childState.searchTerm\"\n (click)=\"childState.searchTerm = ''\">\n <he-svg-icon name=\"xmark\" />\n </a>\n <a class=\"icon is-small is-right\" [class.is-hidden]=\"childState.searchTerm\">\n <he-svg-icon name=\"search\" />\n </a>\n </div>\n </div>\n }\n <div>\n @for (\n nestedOption of getFilteredOptions(\n child,\n childState.searchTerm || groupState.searchTerm\n );\n track nestedOption.trackId || nestedOption.label;\n let nestedLast = $last\n ) {\n <div class=\"pl-5 accordion-row\" [class.has-border-bottom]=\"!nestedLast\">\n <label\n class=\"checkbox is-flex is-align-items-center is-fullwidth is-size-7 has-text-grey-dark\">\n <input\n type=\"checkbox\"\n [checked]=\"isOptionSelected(nestedOption.value)\"\n (change)=\"toggleOption(nestedOption.value)\"\n [disabled]=\"disabled()\"\n class=\"mr-3\" />\n\n <span class=\"is-flex-grow-1\">\n {{ removeCountFromLabel(nestedOption.label) }}\n </span>\n\n <span class=\"has-text-grey is-size-7 ml-2\">\n ({{ getOptionCount(nestedOption.value) }})\n </span>\n </label>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n }\n } @else {\n <!-- Direct option -->\n <div class=\"pl-5 accordion-row\" [class.has-border-bottom]=\"!childLast\">\n <label class=\"checkbox is-flex is-align-items-center is-fullwidth is-size-7 has-text-grey-dark\">\n <input\n type=\"checkbox\"\n [checked]=\"isOptionSelected(child.value)\"\n (change)=\"toggleOption(child.value)\"\n [disabled]=\"disabled()\"\n class=\"mr-3\" />\n\n <span class=\"is-flex-grow-1\">\n {{ removeCountFromLabel(child.label) }}\n </span>\n\n <span class=\"has-text-grey is-size-7 ml-2\">({{ getOptionCount(child.value) }})</span>\n </label>\n </div>\n }\n }\n\n @if (getFilteredDirectChildren(item, groupState.searchTerm).length === 0 && groupState.searchTerm) {\n <div class=\"px-6 py-4 has-text-grey is-size-7 has-text-centered is-italic\">\n No results found for \"{{ groupState.searchTerm }}\"\n </div>\n }\n </div>\n </div>\n </div>\n }\n }\n\n @if (item.type === 'option') {\n <div class=\"is-flex is-justify-content-space-between has-border-bottom accordion-row\">\n <label class=\"checkbox is-flex is-align-items-center is-fullwidth is-full is-size-7 has-text-grey-dark\">\n <input\n type=\"checkbox\"\n [checked]=\"isOptionSelected(item.value)\"\n (change)=\"toggleOption(item.value)\"\n [disabled]=\"disabled()\"\n class=\"mr-3\" />\n\n <span class=\"is-flex-grow-1\">\n {{ removeCountFromLabel(item.label) }}\n </span>\n </label>\n <span class=\"has-text-grey is-size-7 ml-2\">({{ getOptionCount(item.value) }})</span>\n </div>\n }\n }\n </div>\n</div>\n", styles: [".gap-13{gap:13px}.clear-button{color:#4c7194}.accordion-row{padding:4px 0}.filter-accordion__panel-content{max-height:0;overflow:hidden;transition:max-height .3s ease-out}.filter-accordion__panel-content--expanded{max-height:500px;overflow-y:auto}.has-background-hover-light:hover{background-color:#fafafa}.has-border-bottom{border-bottom:1px solid #dbe3ea}.transition-transform{transition:transform .2s}@media screen and (max-width: 768px){.filter-accordion__panel-content--expanded{max-height:400px}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation", "svgClass"] }, { kind: "directive", type: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13233
+ ], usesInheritance: true, ngImport: i0, template: "<div>\n <div\n class=\"is-flex is-justify-content-space-between gap-13 is-align-items-flex-start is-flex-direction-column has-border-bottom\">\n <div class=\"is-flex is-align-items-center\">\n <h3 class=\"title is-size-6 has-text-secondary mr-2 mb-0\">{{ title() }}</h3>\n @if (tooltip()) {\n <he-svg-icon\n name=\"info-circle\"\n class=\"has-text-grey\"\n [ngbTooltip]=\"tooltip()\"\n placement=\"top\"\n triggers=\"hover\"\n container=\"body\"></he-svg-icon>\n }\n </div>\n @if (showClearAll()) {\n <span class=\"is-clickable is-size-7 has-text-weight-normal is-italic clear-button\" (click)=\"clearAll()\">\n Clear all\n </span>\n }\n </div>\n\n <div>\n @for (item of filterStore.filteredData(); track item.trackId || item.label) {\n @if (item.type === 'group') {\n @if (panelStates[item.label]) {\n @let groupState = panelStates[item.label];\n <div class=\"has-border-bottom\" [class.is-active]=\"groupState.expanded\">\n <div\n class=\"is-flex is-align-items-center is-clickable has-background-hover accordion-row\"\n (click)=\"groupState.expanded = !groupState.expanded\">\n <label class=\"checkbox mr-3\" (click)=\"$event.stopPropagation()\">\n <input\n type=\"checkbox\"\n [checked]=\"isGroupFullySelected(item)\"\n [indeterminate]=\"isGroupPartiallySelected(item)\"\n (change)=\"toggleGroup(item)\"\n [disabled]=\"isItemEffectivelyDisabled(item)\" />\n </label>\n\n <span class=\"is-flex-grow-1 has-text-weight-medium has-text-grey-dark is-size-7\">\n {{ removeCountFromLabel(item.label) }}\n </span>\n\n <he-svg-icon\n class=\"has-text-grey transition-transform\"\n [name]=\"groupState.expanded ? 'chevron-up' : 'chevron-down'\"></he-svg-icon>\n </div>\n\n <div\n class=\"filter-accordion__panel-content\"\n [class.filter-accordion__panel-content--expanded]=\"groupState.expanded\">\n @if (groupState.expanded && getDirectOptionsCount(item) > 5) {\n <div class=\"field is-mb-0 pb-2 has-border-bottom\">\n <div class=\"control is-expanded has-icons-right\">\n <input\n type=\"text\"\n class=\"input is-secondary is-small search-input\"\n placeholder=\"Search {{ removeCountFromLabel(item.label) }}\"\n [value]=\"groupState.searchTerm || ''\"\n [disabled]=\"isItemEffectivelyDisabled(item)\"\n (input)=\"groupState.searchTerm = $any($event.target).value\" />\n <a\n class=\"icon is-small is-right\"\n [class.is-hidden]=\"!groupState.searchTerm\"\n (click)=\"groupState.searchTerm = ''\">\n <he-svg-icon name=\"xmark\" />\n </a>\n <a class=\"icon is-small is-right\" [class.is-hidden]=\"groupState.searchTerm\">\n <he-svg-icon name=\"search\" />\n </a>\n </div>\n </div>\n }\n\n <div>\n @for (\n child of getFilteredDirectChildren(item, groupState.searchTerm);\n track child.trackId || child.label;\n let childLast = $last\n ) {\n @if (child.type === 'group') {\n <!-- Nested group -->\n @if (panelStates[child.label]) {\n @let childState = panelStates[child.label];\n <div class=\"pl-5\" [class.has-border-bottom]=\"!childLast\">\n <div [class.is-active]=\"childState.expanded\">\n <div\n class=\"is-flex is-align-items-center is-clickable has-background-hover accordion-row\"\n (click)=\"childState.expanded = !childState.expanded\">\n <label class=\"checkbox mr-3\" (click)=\"$event.stopPropagation()\">\n <input\n type=\"checkbox\"\n [checked]=\"isGroupFullySelected(child)\"\n [indeterminate]=\"isGroupPartiallySelected(child)\"\n (change)=\"toggleGroup(child)\"\n [disabled]=\"isItemEffectivelyDisabled(child, isItemEffectivelyDisabled(item))\" />\n </label>\n\n <span class=\"is-flex-grow-1 has-text-weight-medium has-text-grey-dark is-size-7\">\n {{ removeCountFromLabel(child.label) }}\n </span>\n\n <he-svg-icon\n class=\"has-text-grey transition-transform\"\n [class.is-rotated-180]=\"childState.expanded\"\n [name]=\"childState.expanded ? 'chevron-up' : 'chevron-down'\"></he-svg-icon>\n </div>\n\n <div\n class=\"filter-accordion__panel-content\"\n [class.filter-accordion__panel-content--expanded]=\"childState.expanded\">\n @if (childState.expanded && optionsFromGroup(child).length >= 5) {\n <div class=\"field is-mb-0 pb-2 has-border-bottom\">\n <div class=\"control is-expanded has-icons-right\">\n <input\n type=\"text\"\n class=\"input is-secondary is-small search-input\"\n placeholder=\"Search {{ removeCountFromLabel(child.label) }}\"\n [value]=\"childState.searchTerm || ''\"\n [disabled]=\"isItemEffectivelyDisabled(child, isItemEffectivelyDisabled(item))\"\n (input)=\"childState.searchTerm = $any($event.target).value\" />\n <a\n class=\"icon is-small is-right\"\n [class.is-hidden]=\"!childState.searchTerm\"\n (click)=\"childState.searchTerm = ''\">\n <he-svg-icon name=\"xmark\" />\n </a>\n <a class=\"icon is-small is-right\" [class.is-hidden]=\"childState.searchTerm\">\n <he-svg-icon name=\"search\" />\n </a>\n </div>\n </div>\n }\n <div>\n @for (\n nestedOption of getFilteredOptions(\n child,\n childState.searchTerm || groupState.searchTerm\n );\n track nestedOption.trackId || nestedOption.label;\n let nestedLast = $last\n ) {\n <div class=\"pl-5 accordion-row\" [class.has-border-bottom]=\"!nestedLast\">\n <label\n class=\"checkbox is-flex is-align-items-center is-fullwidth is-size-7 has-text-grey-dark\">\n <input\n type=\"checkbox\"\n [checked]=\"isOptionSelected(nestedOption.value)\"\n (change)=\"toggleOption(nestedOption.value)\"\n [disabled]=\"isItemEffectivelyDisabled(nestedOption, isItemEffectivelyDisabled(child, isItemEffectivelyDisabled(item)))\"\n class=\"mr-3\" />\n\n <span class=\"is-flex-grow-1\">\n {{ removeCountFromLabel(nestedOption.label) }}\n </span>\n\n <span class=\"has-text-grey is-size-7 ml-2\">\n ({{ getOptionCount(nestedOption.value) }})\n </span>\n </label>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n }\n } @else {\n <!-- Direct option -->\n <div class=\"pl-5 accordion-row\" [class.has-border-bottom]=\"!childLast\">\n <label class=\"checkbox is-flex is-align-items-center is-fullwidth is-size-7 has-text-grey-dark\">\n <input\n type=\"checkbox\"\n [checked]=\"isOptionSelected(child.value)\"\n (change)=\"toggleOption(child.value)\"\n [disabled]=\"isItemEffectivelyDisabled(child, isItemEffectivelyDisabled(item))\"\n class=\"mr-3\" />\n\n <span class=\"is-flex-grow-1\">\n {{ removeCountFromLabel(child.label) }}\n </span>\n\n <span class=\"has-text-grey is-size-7 ml-2\">({{ getOptionCount(child.value) }})</span>\n </label>\n </div>\n }\n }\n\n @if (getFilteredDirectChildren(item, groupState.searchTerm).length === 0 && groupState.searchTerm) {\n <div class=\"px-6 py-4 has-text-grey is-size-7 has-text-centered is-italic\">\n No results found for \"{{ groupState.searchTerm }}\"\n </div>\n }\n </div>\n </div>\n </div>\n }\n }\n\n @if (item.type === 'option') {\n <div class=\"is-flex is-justify-content-space-between has-border-bottom accordion-row\">\n <label class=\"checkbox is-flex is-align-items-center is-fullwidth is-full is-size-7 has-text-grey-dark\">\n <input\n type=\"checkbox\"\n [checked]=\"isOptionSelected(item.value)\"\n (change)=\"toggleOption(item.value)\"\n [disabled]=\"isItemEffectivelyDisabled(item)\"\n class=\"mr-3\" />\n\n <span class=\"is-flex-grow-1\">\n {{ removeCountFromLabel(item.label) }}\n </span>\n </label>\n <span class=\"has-text-grey is-size-7 ml-2\">({{ getOptionCount(item.value) }})</span>\n </div>\n }\n }\n </div>\n</div>\n", styles: [".gap-13{gap:13px}.clear-button{color:#4c7194}.accordion-row{padding:4px 0}.filter-accordion__panel-content{max-height:0;overflow:hidden;transition:max-height .3s ease-out}.filter-accordion__panel-content--expanded{max-height:500px;overflow-y:auto}.has-background-hover-light:hover{background-color:#fafafa}.has-border-bottom{border-bottom:1px solid #dbe3ea}.transition-transform{transition:transform .2s}@media screen and (max-width: 768px){.filter-accordion__panel-content--expanded{max-height:400px}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation", "svgClass"] }, { kind: "directive", type: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13031
13234
  }
13032
13235
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: FilterAccordionComponent, decorators: [{
13033
13236
  type: Component$1,
@@ -13038,7 +13241,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImpor
13038
13241
  multi: true
13039
13242
  },
13040
13243
  FilterStore
13041
- ], imports: [FormsModule, ReactiveFormsModule, HESvgIconComponent, NgbTooltip], template: "<div>\n <div\n class=\"is-flex is-justify-content-space-between gap-13 is-align-items-flex-start is-flex-direction-column has-border-bottom\">\n <div class=\"is-flex is-align-items-center\">\n <h3 class=\"title is-size-6 has-text-secondary mr-2 mb-0\">{{ title() }}</h3>\n @if (tooltip()) {\n <he-svg-icon\n name=\"info-circle\"\n class=\"has-text-grey\"\n [ngbTooltip]=\"tooltip()\"\n placement=\"top\"\n triggers=\"hover\"\n container=\"body\"></he-svg-icon>\n }\n </div>\n @if (showClearAll()) {\n <span class=\"is-clickable is-size-7 has-text-weight-normal is-italic clear-button\" (click)=\"clearAll()\">\n Clear all\n </span>\n }\n </div>\n\n <div>\n @for (item of filterStore.filteredData(); track item.trackId || item.label) {\n @if (item.type === 'group') {\n @if (panelStates[item.label]) {\n @let groupState = panelStates[item.label];\n <div class=\"has-border-bottom\" [class.is-active]=\"groupState.expanded\">\n <div\n class=\"is-flex is-align-items-center is-clickable has-background-hover accordion-row\"\n (click)=\"groupState.expanded = !groupState.expanded\">\n <label class=\"checkbox mr-3\" (click)=\"$event.stopPropagation()\">\n <input\n type=\"checkbox\"\n [checked]=\"isGroupFullySelected(item)\"\n [indeterminate]=\"isGroupPartiallySelected(item)\"\n (change)=\"toggleGroup(item)\"\n [disabled]=\"disabled()\" />\n </label>\n\n <span class=\"is-flex-grow-1 has-text-weight-medium has-text-grey-dark is-size-7\">\n {{ removeCountFromLabel(item.label) }}\n </span>\n\n <he-svg-icon\n class=\"has-text-grey transition-transform\"\n [name]=\"groupState.expanded ? 'chevron-up' : 'chevron-down'\"></he-svg-icon>\n </div>\n\n <div\n class=\"filter-accordion__panel-content\"\n [class.filter-accordion__panel-content--expanded]=\"groupState.expanded\">\n @if (groupState.expanded && getDirectOptionsCount(item) > 5) {\n <div class=\"field is-mb-0 pb-2 has-border-bottom\">\n <div class=\"control is-expanded has-icons-right\">\n <input\n type=\"text\"\n class=\"input is-secondary is-small search-input\"\n placeholder=\"Search {{ removeCountFromLabel(item.label) }}\"\n [value]=\"groupState.searchTerm || ''\"\n (input)=\"groupState.searchTerm = $any($event.target).value\" />\n <a\n class=\"icon is-small is-right\"\n [class.is-hidden]=\"!groupState.searchTerm\"\n (click)=\"groupState.searchTerm = ''\">\n <he-svg-icon name=\"xmark\" />\n </a>\n <a class=\"icon is-small is-right\" [class.is-hidden]=\"groupState.searchTerm\">\n <he-svg-icon name=\"search\" />\n </a>\n </div>\n </div>\n }\n\n <div>\n @for (\n child of getFilteredDirectChildren(item, groupState.searchTerm);\n track child.trackId || child.label;\n let childLast = $last\n ) {\n @if (child.type === 'group') {\n <!-- Nested group -->\n @if (panelStates[child.label]) {\n @let childState = panelStates[child.label];\n <div class=\"pl-5\" [class.has-border-bottom]=\"!childLast\">\n <div [class.is-active]=\"childState.expanded\">\n <div\n class=\"is-flex is-align-items-center is-clickable has-background-hover accordion-row\"\n (click)=\"childState.expanded = !childState.expanded\">\n <label class=\"checkbox mr-3\" (click)=\"$event.stopPropagation()\">\n <input\n type=\"checkbox\"\n [checked]=\"isGroupFullySelected(child)\"\n [indeterminate]=\"isGroupPartiallySelected(child)\"\n (change)=\"toggleGroup(child)\"\n [disabled]=\"disabled()\" />\n </label>\n\n <span class=\"is-flex-grow-1 has-text-weight-medium has-text-grey-dark is-size-7\">\n {{ removeCountFromLabel(child.label) }}\n </span>\n\n <he-svg-icon\n class=\"has-text-grey transition-transform\"\n [class.is-rotated-180]=\"childState.expanded\"\n [name]=\"childState.expanded ? 'chevron-up' : 'chevron-down'\"></he-svg-icon>\n </div>\n\n <div\n class=\"filter-accordion__panel-content\"\n [class.filter-accordion__panel-content--expanded]=\"childState.expanded\">\n @if (childState.expanded && optionsFromGroup(child).length >= 5) {\n <div class=\"field is-mb-0 pb-2 has-border-bottom\">\n <div class=\"control is-expanded has-icons-right\">\n <input\n type=\"text\"\n class=\"input is-secondary is-small search-input\"\n placeholder=\"Search {{ removeCountFromLabel(child.label) }}\"\n [value]=\"childState.searchTerm || ''\"\n (input)=\"childState.searchTerm = $any($event.target).value\" />\n <a\n class=\"icon is-small is-right\"\n [class.is-hidden]=\"!childState.searchTerm\"\n (click)=\"childState.searchTerm = ''\">\n <he-svg-icon name=\"xmark\" />\n </a>\n <a class=\"icon is-small is-right\" [class.is-hidden]=\"childState.searchTerm\">\n <he-svg-icon name=\"search\" />\n </a>\n </div>\n </div>\n }\n <div>\n @for (\n nestedOption of getFilteredOptions(\n child,\n childState.searchTerm || groupState.searchTerm\n );\n track nestedOption.trackId || nestedOption.label;\n let nestedLast = $last\n ) {\n <div class=\"pl-5 accordion-row\" [class.has-border-bottom]=\"!nestedLast\">\n <label\n class=\"checkbox is-flex is-align-items-center is-fullwidth is-size-7 has-text-grey-dark\">\n <input\n type=\"checkbox\"\n [checked]=\"isOptionSelected(nestedOption.value)\"\n (change)=\"toggleOption(nestedOption.value)\"\n [disabled]=\"disabled()\"\n class=\"mr-3\" />\n\n <span class=\"is-flex-grow-1\">\n {{ removeCountFromLabel(nestedOption.label) }}\n </span>\n\n <span class=\"has-text-grey is-size-7 ml-2\">\n ({{ getOptionCount(nestedOption.value) }})\n </span>\n </label>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n }\n } @else {\n <!-- Direct option -->\n <div class=\"pl-5 accordion-row\" [class.has-border-bottom]=\"!childLast\">\n <label class=\"checkbox is-flex is-align-items-center is-fullwidth is-size-7 has-text-grey-dark\">\n <input\n type=\"checkbox\"\n [checked]=\"isOptionSelected(child.value)\"\n (change)=\"toggleOption(child.value)\"\n [disabled]=\"disabled()\"\n class=\"mr-3\" />\n\n <span class=\"is-flex-grow-1\">\n {{ removeCountFromLabel(child.label) }}\n </span>\n\n <span class=\"has-text-grey is-size-7 ml-2\">({{ getOptionCount(child.value) }})</span>\n </label>\n </div>\n }\n }\n\n @if (getFilteredDirectChildren(item, groupState.searchTerm).length === 0 && groupState.searchTerm) {\n <div class=\"px-6 py-4 has-text-grey is-size-7 has-text-centered is-italic\">\n No results found for \"{{ groupState.searchTerm }}\"\n </div>\n }\n </div>\n </div>\n </div>\n }\n }\n\n @if (item.type === 'option') {\n <div class=\"is-flex is-justify-content-space-between has-border-bottom accordion-row\">\n <label class=\"checkbox is-flex is-align-items-center is-fullwidth is-full is-size-7 has-text-grey-dark\">\n <input\n type=\"checkbox\"\n [checked]=\"isOptionSelected(item.value)\"\n (change)=\"toggleOption(item.value)\"\n [disabled]=\"disabled()\"\n class=\"mr-3\" />\n\n <span class=\"is-flex-grow-1\">\n {{ removeCountFromLabel(item.label) }}\n </span>\n </label>\n <span class=\"has-text-grey is-size-7 ml-2\">({{ getOptionCount(item.value) }})</span>\n </div>\n }\n }\n </div>\n</div>\n", styles: [".gap-13{gap:13px}.clear-button{color:#4c7194}.accordion-row{padding:4px 0}.filter-accordion__panel-content{max-height:0;overflow:hidden;transition:max-height .3s ease-out}.filter-accordion__panel-content--expanded{max-height:500px;overflow-y:auto}.has-background-hover-light:hover{background-color:#fafafa}.has-border-bottom{border-bottom:1px solid #dbe3ea}.transition-transform{transition:transform .2s}@media screen and (max-width: 768px){.filter-accordion__panel-content--expanded{max-height:400px}}\n"] }]
13244
+ ], imports: [FormsModule, ReactiveFormsModule, HESvgIconComponent, NgbTooltip], template: "<div>\n <div\n class=\"is-flex is-justify-content-space-between gap-13 is-align-items-flex-start is-flex-direction-column has-border-bottom\">\n <div class=\"is-flex is-align-items-center\">\n <h3 class=\"title is-size-6 has-text-secondary mr-2 mb-0\">{{ title() }}</h3>\n @if (tooltip()) {\n <he-svg-icon\n name=\"info-circle\"\n class=\"has-text-grey\"\n [ngbTooltip]=\"tooltip()\"\n placement=\"top\"\n triggers=\"hover\"\n container=\"body\"></he-svg-icon>\n }\n </div>\n @if (showClearAll()) {\n <span class=\"is-clickable is-size-7 has-text-weight-normal is-italic clear-button\" (click)=\"clearAll()\">\n Clear all\n </span>\n }\n </div>\n\n <div>\n @for (item of filterStore.filteredData(); track item.trackId || item.label) {\n @if (item.type === 'group') {\n @if (panelStates[item.label]) {\n @let groupState = panelStates[item.label];\n <div class=\"has-border-bottom\" [class.is-active]=\"groupState.expanded\">\n <div\n class=\"is-flex is-align-items-center is-clickable has-background-hover accordion-row\"\n (click)=\"groupState.expanded = !groupState.expanded\">\n <label class=\"checkbox mr-3\" (click)=\"$event.stopPropagation()\">\n <input\n type=\"checkbox\"\n [checked]=\"isGroupFullySelected(item)\"\n [indeterminate]=\"isGroupPartiallySelected(item)\"\n (change)=\"toggleGroup(item)\"\n [disabled]=\"isItemEffectivelyDisabled(item)\" />\n </label>\n\n <span class=\"is-flex-grow-1 has-text-weight-medium has-text-grey-dark is-size-7\">\n {{ removeCountFromLabel(item.label) }}\n </span>\n\n <he-svg-icon\n class=\"has-text-grey transition-transform\"\n [name]=\"groupState.expanded ? 'chevron-up' : 'chevron-down'\"></he-svg-icon>\n </div>\n\n <div\n class=\"filter-accordion__panel-content\"\n [class.filter-accordion__panel-content--expanded]=\"groupState.expanded\">\n @if (groupState.expanded && getDirectOptionsCount(item) > 5) {\n <div class=\"field is-mb-0 pb-2 has-border-bottom\">\n <div class=\"control is-expanded has-icons-right\">\n <input\n type=\"text\"\n class=\"input is-secondary is-small search-input\"\n placeholder=\"Search {{ removeCountFromLabel(item.label) }}\"\n [value]=\"groupState.searchTerm || ''\"\n [disabled]=\"isItemEffectivelyDisabled(item)\"\n (input)=\"groupState.searchTerm = $any($event.target).value\" />\n <a\n class=\"icon is-small is-right\"\n [class.is-hidden]=\"!groupState.searchTerm\"\n (click)=\"groupState.searchTerm = ''\">\n <he-svg-icon name=\"xmark\" />\n </a>\n <a class=\"icon is-small is-right\" [class.is-hidden]=\"groupState.searchTerm\">\n <he-svg-icon name=\"search\" />\n </a>\n </div>\n </div>\n }\n\n <div>\n @for (\n child of getFilteredDirectChildren(item, groupState.searchTerm);\n track child.trackId || child.label;\n let childLast = $last\n ) {\n @if (child.type === 'group') {\n <!-- Nested group -->\n @if (panelStates[child.label]) {\n @let childState = panelStates[child.label];\n <div class=\"pl-5\" [class.has-border-bottom]=\"!childLast\">\n <div [class.is-active]=\"childState.expanded\">\n <div\n class=\"is-flex is-align-items-center is-clickable has-background-hover accordion-row\"\n (click)=\"childState.expanded = !childState.expanded\">\n <label class=\"checkbox mr-3\" (click)=\"$event.stopPropagation()\">\n <input\n type=\"checkbox\"\n [checked]=\"isGroupFullySelected(child)\"\n [indeterminate]=\"isGroupPartiallySelected(child)\"\n (change)=\"toggleGroup(child)\"\n [disabled]=\"isItemEffectivelyDisabled(child, isItemEffectivelyDisabled(item))\" />\n </label>\n\n <span class=\"is-flex-grow-1 has-text-weight-medium has-text-grey-dark is-size-7\">\n {{ removeCountFromLabel(child.label) }}\n </span>\n\n <he-svg-icon\n class=\"has-text-grey transition-transform\"\n [class.is-rotated-180]=\"childState.expanded\"\n [name]=\"childState.expanded ? 'chevron-up' : 'chevron-down'\"></he-svg-icon>\n </div>\n\n <div\n class=\"filter-accordion__panel-content\"\n [class.filter-accordion__panel-content--expanded]=\"childState.expanded\">\n @if (childState.expanded && optionsFromGroup(child).length >= 5) {\n <div class=\"field is-mb-0 pb-2 has-border-bottom\">\n <div class=\"control is-expanded has-icons-right\">\n <input\n type=\"text\"\n class=\"input is-secondary is-small search-input\"\n placeholder=\"Search {{ removeCountFromLabel(child.label) }}\"\n [value]=\"childState.searchTerm || ''\"\n [disabled]=\"isItemEffectivelyDisabled(child, isItemEffectivelyDisabled(item))\"\n (input)=\"childState.searchTerm = $any($event.target).value\" />\n <a\n class=\"icon is-small is-right\"\n [class.is-hidden]=\"!childState.searchTerm\"\n (click)=\"childState.searchTerm = ''\">\n <he-svg-icon name=\"xmark\" />\n </a>\n <a class=\"icon is-small is-right\" [class.is-hidden]=\"childState.searchTerm\">\n <he-svg-icon name=\"search\" />\n </a>\n </div>\n </div>\n }\n <div>\n @for (\n nestedOption of getFilteredOptions(\n child,\n childState.searchTerm || groupState.searchTerm\n );\n track nestedOption.trackId || nestedOption.label;\n let nestedLast = $last\n ) {\n <div class=\"pl-5 accordion-row\" [class.has-border-bottom]=\"!nestedLast\">\n <label\n class=\"checkbox is-flex is-align-items-center is-fullwidth is-size-7 has-text-grey-dark\">\n <input\n type=\"checkbox\"\n [checked]=\"isOptionSelected(nestedOption.value)\"\n (change)=\"toggleOption(nestedOption.value)\"\n [disabled]=\"isItemEffectivelyDisabled(nestedOption, isItemEffectivelyDisabled(child, isItemEffectivelyDisabled(item)))\"\n class=\"mr-3\" />\n\n <span class=\"is-flex-grow-1\">\n {{ removeCountFromLabel(nestedOption.label) }}\n </span>\n\n <span class=\"has-text-grey is-size-7 ml-2\">\n ({{ getOptionCount(nestedOption.value) }})\n </span>\n </label>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n }\n } @else {\n <!-- Direct option -->\n <div class=\"pl-5 accordion-row\" [class.has-border-bottom]=\"!childLast\">\n <label class=\"checkbox is-flex is-align-items-center is-fullwidth is-size-7 has-text-grey-dark\">\n <input\n type=\"checkbox\"\n [checked]=\"isOptionSelected(child.value)\"\n (change)=\"toggleOption(child.value)\"\n [disabled]=\"isItemEffectivelyDisabled(child, isItemEffectivelyDisabled(item))\"\n class=\"mr-3\" />\n\n <span class=\"is-flex-grow-1\">\n {{ removeCountFromLabel(child.label) }}\n </span>\n\n <span class=\"has-text-grey is-size-7 ml-2\">({{ getOptionCount(child.value) }})</span>\n </label>\n </div>\n }\n }\n\n @if (getFilteredDirectChildren(item, groupState.searchTerm).length === 0 && groupState.searchTerm) {\n <div class=\"px-6 py-4 has-text-grey is-size-7 has-text-centered is-italic\">\n No results found for \"{{ groupState.searchTerm }}\"\n </div>\n }\n </div>\n </div>\n </div>\n }\n }\n\n @if (item.type === 'option') {\n <div class=\"is-flex is-justify-content-space-between has-border-bottom accordion-row\">\n <label class=\"checkbox is-flex is-align-items-center is-fullwidth is-full is-size-7 has-text-grey-dark\">\n <input\n type=\"checkbox\"\n [checked]=\"isOptionSelected(item.value)\"\n (change)=\"toggleOption(item.value)\"\n [disabled]=\"isItemEffectivelyDisabled(item)\"\n class=\"mr-3\" />\n\n <span class=\"is-flex-grow-1\">\n {{ removeCountFromLabel(item.label) }}\n </span>\n </label>\n <span class=\"has-text-grey is-size-7 ml-2\">({{ getOptionCount(item.value) }})</span>\n </div>\n }\n }\n </div>\n</div>\n", styles: [".gap-13{gap:13px}.clear-button{color:#4c7194}.accordion-row{padding:4px 0}.filter-accordion__panel-content{max-height:0;overflow:hidden;transition:max-height .3s ease-out}.filter-accordion__panel-content--expanded{max-height:500px;overflow-y:auto}.has-background-hover-light:hover{background-color:#fafafa}.has-border-bottom{border-bottom:1px solid #dbe3ea}.transition-transform{transition:transform .2s}@media screen and (max-width: 768px){.filter-accordion__panel-content--expanded{max-height:400px}}\n"] }]
13042
13245
  }], ctorParameters: () => [] });
13043
13246
 
13044
13247
  const sortedPoints = (values) => Object.entries(values)