@hestia-earth/ui-components 0.32.18 → 0.32.19
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.
- package/fesm2022/hestia-earth-ui-components.mjs +37 -40
- package/fesm2022/hestia-earth-ui-components.mjs.map +1 -1
- package/input-range.sass +6 -4
- package/node/node-logs-models/node-logs-models.component.d.ts +5 -5
- package/package.json +1 -1
- package/svg-icons/icons/aggregation-20px.svg +9 -0
- package/svg-icons/icons/aggregation-24px.svg +12 -0
- package/svg-icons/icons/aggregation-40px.svg +9 -0
- package/svg-icons/icons/aggregation-48px.svg +9 -0
- package/svg-icons/icons/api-20px.svg +13 -0
- package/svg-icons/icons/api-24px.svg +13 -0
- package/svg-icons/icons/api-40px.svg +13 -0
- package/svg-icons/icons/api-48px.svg +12 -8
- package/svg-icons/icons/breakdown-20px.svg +14 -0
- package/svg-icons/icons/breakdown-24px.svg +14 -0
- package/svg-icons/icons/breakdown-40px.svg +14 -0
- package/svg-icons/icons/breakdown-48px.svg +14 -0
- package/svg-icons/icons/calculation-toolkit-20px.svg +19 -0
- package/svg-icons/icons/calculation-toolkit-24px.svg +19 -0
- package/svg-icons/icons/calculation-toolkit-40px.svg +19 -0
- package/svg-icons/icons/calculation-toolkit-48px.svg +18 -32
- package/svg-icons/icons/calculator-20px.svg +38 -2
- package/svg-icons/icons/calculator-24px.svg +39 -0
- package/svg-icons/icons/calculator-40px.svg +39 -0
- package/svg-icons/icons/calculator-48px.svg +39 -0
- package/svg-icons/icons/cycle-20px.svg +8 -8
- package/svg-icons/icons/cycle-24px.svg +9 -9
- package/svg-icons/icons/external-link-16px.svg +5 -0
- package/svg-icons/icons/external-link-20px.svg +1 -1
- package/svg-icons/icons/refresh-20px.svg +2 -9
- package/svg-icons/icons/refresh-24px.svg +2 -9
- package/svg-icons/icons/refresh-40px.svg +2 -9
- package/svg-icons/icons/refresh-48px.svg +2 -9
- package/svg-icons/icons/tag-filled-20px.svg +5 -5
- package/svg-icons/icons/tag-filled-24px.svg +2 -2
- package/svg-icons/icons/tag-filled-40px.svg +2 -2
- package/svg-icons/icons/tag-filled-48px.svg +2 -2
- package/svg-icons/icons/target-20px.svg +6 -0
- package/svg-icons/icons/target-24px.svg +18 -0
- package/svg-icons/icons/target-40px.svg +18 -0
- package/svg-icons/icons/target-48px.svg +18 -0
- package/svg-icons/icons.d.ts +1 -1
- package/svg-icons/icons.json +88 -0
- package/svg-icons/icons/aggregations-48px.svg +0 -11
|
@@ -6673,6 +6673,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImpor
|
|
|
6673
6673
|
args: [{ selector: 'he-node-logs-models-logs-status', imports: [PluralizePipe], template: "<div class=\"is-mb-2\">\n <span>Status:</span>\n <span class=\"is-pl-1\">{{ modelStatus() }}</span>\n</div>\n\n@if (modelStatus() === LogStatus.notRequired && modelLogs().is_not_relevant === 'True') {\n <ul class=\"is-pl-3 is-list-style-disc\">\n @if (modelLogs().logs?.siteType_allowed === 'False') {\n <li>\n The\n <code class=\"is-mx-1\">site.siteType</code>\n is not relevant.\n </li>\n }\n @if (modelLogs().logs?.product_id_allowed === 'False') {\n <li>\n None of the\n <code class=\"is-mx-1\">Product</code>\n <code class=\"is-mr-1\">term.@id</code>\n is relevant.\n </li>\n }\n @if (modelLogs().logs?.product_termType_allowed === 'False') {\n <li>\n None of the\n <code class=\"is-mx-1\">Product</code>\n <code class=\"is-mr-1\">term.termType</code>\n is relevant.\n </li>\n }\n @if (modelLogs().logs?.input_id_allowed === 'False') {\n <li>\n None of the\n <code class=\"is-mx-1\">Input</code>\n <code class=\"is-mr-1\">term.@id</code>\n is relevant.\n </li>\n }\n @if (modelLogs().logs?.input_termType_allowed === 'False') {\n <li>\n None of the\n <code class=\"is-mx-1\">Input</code>\n <code class=\"is-mr-1\">term.termType</code>\n is relevant.\n </li>\n }\n </ul>\n}\n\n@if (modelLogs() && modelStatus() !== LogStatus.notRequired && modelStatus() !== LogStatus.skipHierarchy) {\n @let config = model().config;\n\n <ul class=\"is-pl-3 is-list-style-disc\">\n @if (modelLogs().shouldRunOrchestrator === false) {\n <li class=\"is-no-run-orchestrator\">\n @if (!modelLogs().runRequired) {\n @if (modelLogs().logs?.node_type_allowed === 'False') {\n <span class=\"is-run-node-type-not-allowed\">\n This model should not run for {{ nodeType() | pluralize: 0 }}\n </span>\n }\n }\n @if (config) {\n <p class=\"is-run-strategy-{{ config.runStrategy }}\">\n @switch (config.runStrategy) {\n @case ('always') {\n <span></span>\n }\n @case ('add_key_if_missing') {\n <span>We only gap-fill this key if not present</span>\n }\n @case ('add_blank_node_if_missing') {\n <span>We only gap-fill this Blank Node if not present.</span>\n }\n }\n </p>\n <p class=\"is-mt-1\">\n @if (config.runArgs?.runNonMeasured && hasMethodTier(data().original, EmissionMethodTier.measured)) {\n <span class=\"is-run-with-measured\">\n The\n <code class=\"is-mx-1\">{{ config.value }}</code>\n was reported as measured.\n </span>\n }\n </p>\n } @else if (modelLogs().logs?.is_empty === 'False') {\n <span class=\"is-run-not-empty\">\n The {{ data().type || 'blank node' }} with Term\n <code class=\"is-mx-1\">{{ data().termId }}</code>\n is already present or already added by another model.\n </span>\n }\n </li>\n } @else {\n <li class=\"is-run-orchestrator\">\n @if (modelLogs().shouldRun) {\n <p>All the requirements were met to run the model.</p>\n } @else {\n <p>Some of the requirements were not met to run the model.</p>\n <p>You can click on the model name on the left to view the debugging logs.</p>\n }\n @if (modelLogs().logs?.error) {\n <p>The model failed to run for the following reason:</p>\n <p>\n <code>{{ modelLogs().logs.error }}</code>\n </p>\n }\n </li>\n }\n @if (modelLogs().replaceLowerTier !== undefined) {\n <li>\n <span>\n The recalculated\n <b>methodTier</b>\n was\n </span>\n @if (modelLogs().replaceLowerTier) {\n <span class=\"is-pl-1 is-underlined\">higher than or equal to</span>\n } @else {\n <span class=\"is-pl-1 is-underlined\">lower than</span>\n }\n <span class=\"is-pl-1\">\n the original\n <b>methodTier</b>\n .\n </span>\n </li>\n }\n @if (modelLogs().replaceLowerTier) {\n <li class=\"is-merge-replaceLowerTier\">\n <span>The recalculated</span>\n <b class=\"is-pl-1\">{{ config?.mergeArgs?.replaceThreshold?.[0] || 'value' }}</b>\n <span class=\"is-pl-1\">was</span>\n <span class=\"is-pl-1\">\n @if (config?.mergeArgs) {\n @if (modelLogs().replaceThreshold) {\n <span class=\"is-underlined\">more than or equal to</span>\n } @else {\n <span class=\"is-underlined\">less than</span>\n }\n <b class=\"is-pl-1\">{{ config.mergeArgs.replaceThreshold[1] * 100 }}%</b>\n } @else {\n @if (modelLogs().replaceThreshold) {\n <span class=\"is-underlined\">sufficiently</span>\n } @else {\n <span class=\"is-underlined\">not sufficiently</span>\n }\n }\n </span>\n <span class=\"is-pl-1\">different from the original</span>\n <b class=\"is-pl-1\">{{ config?.mergeArgs?.replaceThreshold?.[0] || 'value' }}.</b>\n </li>\n }\n </ul>\n}\n" }]
|
|
6674
6674
|
}] });
|
|
6675
6675
|
|
|
6676
|
+
const groupTerms = (terms) => terms.reduce((prev, curr) => ({ ...prev, [curr['@id']]: curr }), {});
|
|
6676
6677
|
const logIcon = {
|
|
6677
6678
|
[LogStatus.success]: 'checkmark',
|
|
6678
6679
|
[LogStatus.error]: 'xmark',
|
|
@@ -6770,6 +6771,7 @@ class NodeLogsModelsComponent {
|
|
|
6770
6771
|
this.filterTermTypesLabel = input('');
|
|
6771
6772
|
this.logsKey = input('');
|
|
6772
6773
|
this.noDataMessage = input('');
|
|
6774
|
+
this.isEmpty = isEmpty;
|
|
6773
6775
|
this.schemaBaseUrl = schemaBaseUrl();
|
|
6774
6776
|
this.isExternal = isExternal();
|
|
6775
6777
|
this.CycleFunctionalUnit = CycleFunctionalUnit;
|
|
@@ -6801,28 +6803,7 @@ class NodeLogsModelsComponent {
|
|
|
6801
6803
|
this.config = computed(() => this.configResource.value());
|
|
6802
6804
|
this.groupedLogs = computed(() => (this.allLogs() ? groupLogsByModel(this.allLogs()) : {}));
|
|
6803
6805
|
this.logs = computed(() => (this.logsKey() ? this.groupedLogs()?.[this.logsKey()] : this.groupedLogs()) || {});
|
|
6804
|
-
this.allBlankNodesResource = rxResource({
|
|
6805
|
-
request: () => ({
|
|
6806
|
-
isBlankNodes: this.isBlankNodes(),
|
|
6807
|
-
terms: this.allTerms(),
|
|
6808
|
-
nodeKey: this.nodeKey(),
|
|
6809
|
-
node: this.node(),
|
|
6810
|
-
logs: this.logs(),
|
|
6811
|
-
config: this.config(),
|
|
6812
|
-
originalValues: this.originalValues(),
|
|
6813
|
-
recalculatedValues: this.recalculatedValues()
|
|
6814
|
-
}),
|
|
6815
|
-
loader: ({ request: { isBlankNodes, terms, nodeKey, node, logs, config, originalValues, recalculatedValues } }) => (isBlankNodes
|
|
6816
|
-
? of(terms).pipe(distinctUntilChanged((prev, curr) => listTermId(prev) !== listTermId(curr)), mergeAll(), map(groupLogsByTerm(node, logs, config, originalValues, recalculatedValues, nodeKey)), filter(shouldShowBlankNode), toArray(), mergeMap(values => this.fetchTermIds(values).pipe(map(() => values))))
|
|
6817
|
-
: from(computeKeys(originalValues, recalculatedValues)).pipe(map(groupdLogsByKey(node, nodeKey, logs, originalValues, recalculatedValues)), toArray()))
|
|
6818
|
-
});
|
|
6819
|
-
this.allBlankNodes = computed(() => this.allBlankNodesResource.value() ?? []);
|
|
6820
|
-
this.blankNodes = computed(() => this.allBlankNodes().filter(log => !('term' in log) ||
|
|
6821
|
-
filterBlankNode(log, this.term(), this.filterTermTypes(), this.onlyRequired())));
|
|
6822
6806
|
this.isBlankNodes = computed(() => Array.isArray(this.originalValues()) || Array.isArray(this.recalculatedValues()));
|
|
6823
|
-
this.methodModelsCount = computed(() => this.allBlankNodes()?.length && 'term' in this.allBlankNodes()[0]
|
|
6824
|
-
? modelCount(this.allBlankNodes())
|
|
6825
|
-
: 1);
|
|
6826
6807
|
this.extraTermsFromLogsResource = rxResource({
|
|
6827
6808
|
request: () => ({
|
|
6828
6809
|
config: this.config(),
|
|
@@ -6861,12 +6842,41 @@ class NodeLogsModelsComponent {
|
|
|
6861
6842
|
...(this.extraTermsByTermTypesResource.value() ?? [])
|
|
6862
6843
|
]);
|
|
6863
6844
|
this.allTerms = computed(() => computeTerms(this.originalValues(), this.recalculatedValues(), this.terms(), this.filterTermTypes(), this.extraTerms()));
|
|
6845
|
+
this.allBlankNodes = computed(() => this.loading()
|
|
6846
|
+
? []
|
|
6847
|
+
: this.isBlankNodes()
|
|
6848
|
+
? this.allTerms()
|
|
6849
|
+
.map(groupLogsByTerm(this.node(), this.logs(), this.config(), this.originalValues(), this.recalculatedValues(), this.nodeKey()))
|
|
6850
|
+
.filter(shouldShowBlankNode)
|
|
6851
|
+
: computeKeys(this.originalValues(), this.recalculatedValues()).map(groupdLogsByKey(this.node(), this.nodeKey(), this.logs(), this.originalValues(), this.recalculatedValues())));
|
|
6852
|
+
this.blankNodes = computed(() => this.allBlankNodes().filter(log => !('term' in log) ||
|
|
6853
|
+
filterBlankNode(log, this.term(), this.filterTermTypes(), this.onlyRequired())));
|
|
6854
|
+
this.methodModelsCount = computed(() => this.allBlankNodes()?.length && 'term' in this.allBlankNodes()[0]
|
|
6855
|
+
? modelCount(this.allBlankNodes())
|
|
6856
|
+
: 1);
|
|
6864
6857
|
this.methodsById = toSignal(this.searchTerms({
|
|
6865
6858
|
bool: {
|
|
6866
6859
|
must: [matchType(NodeType.Term), matchTermType(TermTermType.model)]
|
|
6867
6860
|
}
|
|
6868
|
-
}).pipe(
|
|
6869
|
-
this.
|
|
6861
|
+
}).pipe(map(groupTerms)));
|
|
6862
|
+
this.termsByIdResource = rxResource({
|
|
6863
|
+
request: () => ({
|
|
6864
|
+
ids: unique(this.allBlankNodes()
|
|
6865
|
+
.flatMap(v => v['subValues'])
|
|
6866
|
+
.flatMap(v => [v, ...(v.subValues ?? [])])
|
|
6867
|
+
.map(({ id }) => id))
|
|
6868
|
+
}),
|
|
6869
|
+
loader: ({ request: { ids } }) => ids.length
|
|
6870
|
+
? this.searchTerms({
|
|
6871
|
+
bool: {
|
|
6872
|
+
must: [matchType(NodeType.Term)],
|
|
6873
|
+
should: ids.map(id => matchExactQuery('@id', id)),
|
|
6874
|
+
minimum_should_match: 1
|
|
6875
|
+
}
|
|
6876
|
+
}).pipe(map(groupTerms))
|
|
6877
|
+
: of({})
|
|
6878
|
+
});
|
|
6879
|
+
this.termsById = computed(() => this.termsByIdResource.value() ?? {});
|
|
6870
6880
|
// filter list of results by a single Term
|
|
6871
6881
|
this.term = signal('');
|
|
6872
6882
|
this.enableFilterByTerm = computed(() => this.allTerms()?.length > 0);
|
|
@@ -6877,34 +6887,21 @@ class NodeLogsModelsComponent {
|
|
|
6877
6887
|
this.logsResource.isLoading(),
|
|
6878
6888
|
!this.configResource.hasValue(),
|
|
6879
6889
|
this.configResource.isLoading(),
|
|
6880
|
-
!this.allBlankNodesResource.hasValue(),
|
|
6881
|
-
this.allBlankNodesResource.isLoading(),
|
|
6882
6890
|
!this.extraTermsFromLogsResource.hasValue(),
|
|
6883
6891
|
this.extraTermsFromLogsResource.isLoading(),
|
|
6884
6892
|
!this.extraTermsByTermTypesResource.hasValue(),
|
|
6885
6893
|
this.extraTermsByTermTypesResource.isLoading()
|
|
6886
6894
|
].some(Boolean));
|
|
6887
6895
|
}
|
|
6888
|
-
fetchTermIds(values) {
|
|
6889
|
-
return of(values).pipe(mergeMap(v => v.flatMap(vv => vv.subValues)), map(v => v.id), distinct(), filter(v => !!v), toArray(), mergeMap((ids) => ids.length
|
|
6890
|
-
? this.searchTerms({
|
|
6891
|
-
bool: {
|
|
6892
|
-
must: [matchType(NodeType.Term)],
|
|
6893
|
-
should: ids.map(id => matchExactQuery('@id', id)),
|
|
6894
|
-
minimum_should_match: 1
|
|
6895
|
-
}
|
|
6896
|
-
})
|
|
6897
|
-
: of([])), reduce((prev, curr) => ({ ...prev, [curr['@id']]: curr }), {}), tap(values => this.termsById.set(values)));
|
|
6898
|
-
}
|
|
6899
6896
|
suggestByTerm(term) {
|
|
6900
6897
|
return this.allTerms()
|
|
6901
6898
|
.map(({ name }) => name)
|
|
6902
6899
|
.filter(v => termSearch(v).includes(termSearch(term)));
|
|
6903
6900
|
}
|
|
6904
|
-
searchTerms(query) {
|
|
6901
|
+
searchTerms(query, ...extraFields) {
|
|
6905
6902
|
return this.searchService
|
|
6906
6903
|
.search$({
|
|
6907
|
-
fields: ['@type', '@id', 'name', 'units', 'termType'],
|
|
6904
|
+
fields: ['@type', '@id', 'name', 'units', 'termType', ...extraFields],
|
|
6908
6905
|
limit: 10000,
|
|
6909
6906
|
query
|
|
6910
6907
|
})
|
|
@@ -6928,7 +6925,7 @@ class NodeLogsModelsComponent {
|
|
|
6928
6925
|
});
|
|
6929
6926
|
}
|
|
6930
6927
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeLogsModelsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6931
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeLogsModelsComponent, isStandalone: true, selector: "he-node-logs-models", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, nodeKey: { classPropertyName: "nodeKey", publicName: "nodeKey", isSignal: true, isRequired: true, transformFunction: null }, originalValues: { classPropertyName: "originalValues", publicName: "originalValues", isSignal: true, isRequired: false, transformFunction: null }, recalculatedValues: { classPropertyName: "recalculatedValues", publicName: "recalculatedValues", isSignal: true, isRequired: false, transformFunction: null }, terms: { classPropertyName: "terms", publicName: "terms", isSignal: true, isRequired: false, transformFunction: null }, filterTermTypes: { classPropertyName: "filterTermTypes", publicName: "filterTermTypes", isSignal: true, isRequired: false, transformFunction: null }, filterTermTypesLabel: { classPropertyName: "filterTermTypesLabel", publicName: "filterTermTypesLabel", isSignal: true, isRequired: false, transformFunction: null }, logsKey: { classPropertyName: "logsKey", publicName: "logsKey", isSignal: true, isRequired: false, transformFunction: null }, noDataMessage: { classPropertyName: "noDataMessage", publicName: "noDataMessage", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"is-px-3 is-pb-3\">\n @if (!isExternal && logsUrl()) {\n <div class=\"has-text-right is-mb-2\">\n <a class=\"is-size-7\" [href]=\"logsUrl()\" target=\"_blank\">\n <span>Open Full Logs</span>\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n </a>\n </div>\n }\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n <tr>\n <th class=\"width-auto has-border-right\">\n @if (enableFilterByTerm()) {\n <div class=\"field\">\n <div class=\"control is-expanded has-icons-right\">\n <input\n class=\"input search-input is-small\"\n [ngModel]=\"term()\"\n name=\"term\"\n placeholder=\"Select entry by name\"\n [ngbTypeahead]=\"suggestTerm\"\n [focusFirst]=\"true\"\n (focus)=\"typeaheadFocus($event)\"\n (selectItem)=\"term.set($event.item)\"\n container=\"body\"\n popupClass=\"is-small\" />\n <a class=\"icon is-small is-right\" [class.is-hidden]=\"!term()\" (click)=\"term.set('')\">\n <he-svg-icon name=\"xmark\" />\n </a>\n </div>\n </div>\n }\n </th>\n @if (isBlankNodes()) {\n <th>\n <span class=\"is-pr-1\">Units</span>\n @if (functionalUnit()) {\n <span>(per </span>\n <span>{{ functionalUnit() }}</span>\n <span>)</span>\n }\n </th>\n }\n <th>Original</th>\n <th>Recalculated</th>\n @if (isBlankNodes()) {\n <th>Difference</th>\n }\n @for (c of methodModelsCount() | times; track i; let i = $index) {\n <th>({{ i + 1 }})</th>\n }\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"has-text-centered\" colspan=\"6\">\n <div class=\"has-text-center py-3\">\n <he-svg-icon name=\"loading\" animation=\"spin\" size=\"40\" />\n </div>\n </td>\n </tr>\n } @else if (blankNodes().length === 0) {\n <tr>\n <td class=\"has-text-centered\" colspan=\"6\">\n <span>{{ noDataMessage() || 'No original data was provided and no gap filling occurred.' }}</span>\n </td>\n </tr>\n }\n @for (blankNode of blankNodes(); track trackByBlankNode($index, blankNode)) {\n <tr [class.has-sub-rows]=\"blankNode.canOpen\" [class.is-open]=\"blankNode.isOpen\">\n <td\n class=\"width-auto has-border-right is-nowrap\"\n [attr.title]=\"$any(blankNode).term?.name || $any(blankNode).key\">\n @if (blankNode.canOpen) {\n <a class=\"is-inline-block is-align-top pr-2 open-node\" (click)=\"blankNode.isOpen = !blankNode.isOpen\">\n <he-svg-icon [name]=\"blankNode.isOpen ? 'chevron-down' : 'chevron-right'\" />\n </a>\n }\n @if ($any(blankNode).term) {\n <he-node-link class=\"is-inline-block is-pre-wrap\" [node]=\"$any(blankNode).term\">\n <span [innerHtml]=\"$any(blankNode).term.name | compound: $any(blankNode).term.termType\"></span>\n </he-node-link>\n }\n @if ($any(blankNode).key) {\n @if (nodeKey() === 'completeness') {\n <a [href]=\"schemaBaseUrl + '/Completeness#' + $any(blankNode).key\" target=\"_blank\">\n <span>{{ $any(blankNode).key | keyToLabel }}</span>\n </a>\n }\n } @else {\n <span>{{ $any(blankNode).key }}</span>\n }\n </td>\n @if (isBlankNodes()) {\n <td>\n @if ($any(blankNode).term) {\n <span\n class=\"is-nowrap\"\n [innerHtml]=\"$any(blankNode).term.units | compound: $any(blankNode).term.termType\"></span>\n }\n </td>\n }\n <td>\n <ng-template #originalValueContent>\n <span>{{ $any(blankNode).originalValue | precision: 3 | default: '-' }}</span>\n </ng-template>\n\n @if (blankNode.allParallel) {\n @for (model of $any(blankNode).configModels[0]; track model.methodId) {\n <div>\n {{ $any(blankNode).originalValueByMethodId[model.methodId] | precision: 3 | default: '-' }}\n </div>\n }\n } @else {\n <span\n [class.trigger-popover]=\"!!$any(blankNode).original?.[0]?.methodModel\"\n [ngbPopover]=\"blankNodeOriginalValueDetails\"\n autoClose=\"outside\"\n popoverClass=\"is-narrow\"\n placement=\"bottom left right auto\"\n container=\"body\"\n [disablePopover]=\"!$any(blankNode).original?.[0]?.methodModel\"\n [popoverContext]=\"{ blankNode }\">\n <span pointer>\n {{ $any(blankNode).originalValue | precision: 3 | default: '-' }}\n </span>\n </span>\n }\n </td>\n <td>\n @if (!blankNode.isOriginal || blankNode.isRecalculated) {\n @if (blankNode.allParallel) {\n @for (model of $any(blankNode).configModels[0]; track model.methodId) {\n <div>\n {{ $any(blankNode).recalculatedValueByMethodId[model.methodId] | precision: 3 | default: '-' }}\n </div>\n }\n } @else {\n <span>{{ blankNode.recalculatedValue | precision: 3 | default: '-' }}</span>\n }\n } @else {\n not recalculated\n }\n </td>\n @if (isBlankNodes()) {\n <td class=\"is-nowrap\">\n @if (blankNode.allParallel) {\n @for (model of $any(blankNode).configModels[0]; track model.methodId) {\n <div>\n @if (\n $any(blankNode).originalValueByMethodId[model.methodId] !== null &&\n $any(blankNode).recalculatedValueByMethodId[model.methodId] !== null\n ) {\n <he-blank-node-value-delta\n [value]=\"$any(blankNode).recalculatedValueByMethodId[model.methodId]\"\n [originalValue]=\"$any(blankNode).originalValueByMethodId[model.methodId]\"\n [useCustomFunctions]=\"false\" />\n } @else {\n -\n }\n </div>\n }\n } @else {\n @if ($any(blankNode).original.length && blankNode.isRecalculated) {\n <he-blank-node-value-delta\n [value]=\"blankNode.recalculatedValue\"\n [originalValue]=\"$any(blankNode).originalValue\"\n [useCustomFunctions]=\"false\" />\n } @else {\n -\n }\n }\n </td>\n }\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: { data: blankNode }\" />\n </tr>\n @for (subValue of $any(blankNode).keys; track trackBySubValue(subValue)) {\n <tr\n [class.is-hidden]=\"!blankNode.isOpen\"\n [class.has-sub-rows]=\"$any(blankNode).subValues?.length\"\n [class.is-sub-row]=\"blankNode.canOpen\">\n <td class=\"width-auto has-border-right is-nowrap\">\n <span class=\"is-inline-block is-align-top pl-3 pr-1 field-node\">Field:</span>\n @if (blankNode.type) {\n <a\n class=\"is-inline-block is-pre-wrap\"\n [href]=\"schemaBaseUrl + '/' + blankNode.type + '#' + subValue.key\"\n target=\"_blank\"\n [title]=\"subValue.key\">\n <span>{{ subValue.key }}</span>\n </a>\n }\n @if (!blankNode.type) {\n <span class=\"is-inline-block is-align-top\">{{ subValue.key }}</span>\n }\n </td>\n @if (isBlankNodes()) {\n <td></td>\n }\n <td>\n @if (subValue.originalValue !== null) {\n <span>\n {{ subValue.originalValue | precision: 3 | default: '-' }}\n </span>\n } @else {\n -\n }\n </td>\n <td>\n @if (subValue.isRecalculated || subValue.key === 'impactAssessment') {\n <span>\n {{ subValue.recalculatedValue | precision: 3 | default: '-' }}\n </span>\n } @else {\n not recalculated\n }\n </td>\n @if (isBlankNodes()) {\n <td>-</td>\n }\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: { data: subValue }\" />\n </tr>\n }\n @for (subValue of $any(blankNode).subValues; track trackBySubValue(subValue)) {\n @let term = subValue.term || termById(subValue.id);\n <tr [class.is-hidden]=\"!blankNode.isOpen\" [class.is-sub-row]=\"blankNode.canOpen\">\n <td class=\"width-auto has-border-right\">\n <span class=\"is-inline-block is-align-top pl-3\">{{ subValue.key | keyToLabel }}</span>\n @if (subValue.id) {\n <span class=\"is-inline-block\" class=\"is-inline-block is-align-top pr-1\">:</span>\n @switch (subValue.key) {\n @case ('backgroundData') {\n <span class=\"is-inline-block\">{{ term?.name }}</span>\n }\n @default {\n <he-node-link class=\"is-block pl-4\" [node]=\"term\" [attr.title]=\"term?.name\">\n <span [innerHtml]=\"term?.name | compound\"></span>\n </he-node-link>\n }\n }\n }\n </td>\n @if (isBlankNodes()) {\n <td>\n @if (subValue.showUnits && $any(blankNode).term) {\n <span\n class=\"is-nowrap\"\n [innerHtml]=\"$any(blankNode).term.units | compound: $any(blankNode).term.termType\"></span>\n }\n </td>\n }\n <td>\n @if (subValue.originalValue !== null) {\n <span>\n {{ subValue.originalValue | precision: 3 | default: '-' }}\n </span>\n } @else {\n -\n }\n </td>\n <td>\n @if (subValue.isRecalculated) {\n <span>\n {{ subValue.recalculatedValue | precision: 3 | default: '-' }}\n </span>\n } @else {\n not recalculated\n }\n </td>\n @if (isBlankNodes()) {\n <td>-</td>\n }\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: { data: subValue }\" />\n </tr>\n }\n }\n </tbody>\n </table>\n </he-data-table>\n <div class=\"is-size-7 is-italic\">\n <div class=\"columns is-variable is-1 my-0\">\n <div class=\"column is-narrow\">\n <p>\n <a class=\"is-inline-block pr-2\" (click)=\"showLegend.set(!showLegend())\">\n <he-svg-icon [name]=\"showLegend() ? 'chevron-down' : 'chevron-right'\" />\n </a>\n <span class=\"is-inline-block\">Legend:</span>\n </p>\n @if (showLegend()) {\n <ul class=\"content pl-2\">\n @for (status of LogStatus | keyvalue; track status.value) {\n @if (logIcon[status.value]) {\n <li class=\"has-text-{{ logColor[status.value] }}\">\n <he-svg-icon [name]=\"logIcon[status.value]\" />\n <span class=\"pl-1\">{{ status.value }}</span>\n </li>\n }\n }\n </ul>\n }\n </div>\n @if (filteredType()) {\n <div class=\"column has-text-right\">\n <label class=\"is-inline-block checkbox\">\n <input\n type=\"checkbox\"\n class=\"selector\"\n [ngModel]=\"onlyRequired\"\n (change)=\"onlyRequired.set($event.target.checked)\"\n [disabled]=\"!!term()\" />\n <span class=\"ml-2\">\n Show only {{ filteredType() }} terms included in the default HESTIA system boundary\n </span>\n </label>\n </div>\n }\n </div>\n </div>\n</div>\n\n<ng-template #blankNodeOriginalValueDetails let-blankNode=\"blankNode\">\n <span class=\"is-pr-1\">The original value was reported using:</span>\n <he-node-link\n class=\"is-inline-block\"\n linkClass=\"is-dark\"\n [node]=\"$any(blankNode).original[0].methodModel\"\n [showExternalLink]=\"true\">\n <span>{{ $any(blankNode).original[0].methodModel.name }}</span>\n </he-node-link>\n</ng-template>\n\n<ng-template #blankNodeModels let-data=\"data\">\n <ng-template #notInSystemBoundary>\n <td [attr.colspan]=\"methodModelsCount()\">\n <span>Not in HESTIA system boundary</span>\n </td>\n </ng-template>\n\n @if (isSystemBoundary(data)) {\n @for (configModel of methodModelsCount() | times; track configModelIndex; let configModelIndex = $index) {\n <td class=\"blank-node-index-{{ configModelIndex }}\">\n @if (getModelsAt(data, configModelIndex); as models) {\n @if ($any(models) | isArray) {\n <div>\n @for (model of $any(models); track model.methodId) {\n <p>\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: { model, data }\" />\n </p>\n }\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: { model: models, data }\" />\n }\n } @else {\n -\n }\n </td>\n }\n } @else {\n -\n }\n</ng-template>\n\n<ng-template #blankNodeModel let-model=\"model\" let-data=\"data\">\n <span\n class=\"is-nowrap\"\n [class.trigger-popover]=\"model.showLogs\"\n [ngbPopover]=\"logDetails\"\n autoClose=\"outside\"\n popoverClass=\"is-narrow\"\n triggers=\"manual\"\n #p=\"ngbPopover\"\n placement=\"bottom left right auto\"\n container=\"body\"\n (click)=\"p.isOpen() ? p.close() : model.showLogs ? p.open({ logs: model.logs }) : null\">\n <span>\n <span class=\"is-capitalized\">{{ methodName(model) }}</span>\n @if (model.logs?.methodTier || model.model?.methodTier) {\n <span> [{{ model.logs?.methodTier || model.model?.methodTier }}]</span>\n }\n </span>\n\n <span\n class=\"pl-1 has-text-{{ logColor[model.status] }} trigger-popover\"\n [ngbPopover]=\"logStatusDetails\"\n autoClose=\"outside\"\n popoverClass=\"is-narrow\"\n triggers=\"manual\"\n #p1=\"ngbPopover\"\n placement=\"bottom left right auto\"\n container=\"body\"\n (click)=\"$event.stopPropagation(); p1.isOpen() ? p1.close() : p1.open({ model, data })\">\n <he-svg-icon [name]=\"logIcon[model.status]\" />\n </span>\n\n @if (model.model) {\n <span class=\"pl-1\">\n (\n <ng-container *ngTemplateOutlet=\"docsLink; context: { $implicit: model.model }\" />\n )\n </span>\n }\n </span>\n</ng-template>\n\n<ng-template #logDetails let-logs=\"logs\">\n <he-node-logs-models-logs [logs]=\"logs\" />\n</ng-template>\n\n<ng-template #logStatusDetails let-model=\"model\" let-data=\"data\">\n <he-node-logs-models-logs-status [nodeType]=\"nodeType()\" [model]=\"model\" [data]=\"\" />\n</ng-template>\n\n<ng-template #docsLink let-model>\n <a [href]=\"model.apiDocsPath || model.docPath || model.path\" target=\"_blank\" (click)=\"$event.stopPropagation()\">\n <span>Docs</span>\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n </a>\n</ng-template>\n", styles: [":host{display:block}::ng-deep .table{background-color:transparent}::ng-deep .table td he-node-link{width:190px}@media screen and (max-width: 767px){::ng-deep .table td he-node-link{width:150px}}::ng-deep .table td .open-node+he-node-link{width:170px}@media screen and (max-width: 767px){::ng-deep .table td .open-node+he-node-link{width:130px}}::ng-deep .table td.has-border-right{box-shadow:1px 0 #6c8093}::ng-deep .table .has-sub-rows.is-open>td:first-child:before,::ng-deep .table .is-sub-row>td:first-child:before{display:block;position:absolute;content:\" \";background-color:#6c809333;height:100%;width:1px;top:0;left:12px}::ng-deep .table .has-sub-rows.is-open>td:first-child:before{top:25px}::ng-deep .table .popover-body .table-container{max-height:260px;overflow-y:auto}\n"], dependencies: [{ kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "component", type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "container", "editable", "focusFirst", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate", "selectOnExact", "showHint", "placement", "popperOptions", "popupClass"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "dataState", "showExternalLink", "linkClass"] }, { kind: "component", type: BlankNodeValueDeltaComponent, selector: "he-blank-node-value-delta", inputs: ["value", "originalValue", "displayType", "useCustomFunctions"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "ngbPopover", "popoverTitle", "placement", "popperOptions", "triggers", "positionTarget", "container", "disablePopover", "popoverClass", "popoverContext", "openDelay", "closeDelay"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { kind: "pipe", type: CompoundPipe, name: "compound" }, { kind: "pipe", type: DefaultPipe, name: "default" }, { kind: "pipe", type: KeyToLabelPipe, name: "keyToLabel" }, { kind: "pipe", type: PrecisionPipe, name: "precision" }, { kind: "pipe", type: TimesPipe, name: "times" }, { kind: "pipe", type: IsArrayPipe, name: "isArray" }, { kind: "component", type: NodeLogsModelsLogsComponent, selector: "he-node-logs-models-logs", inputs: ["logs"] }, { kind: "component", type: NodeLogsModelsLogsStatusComponent, selector: "he-node-logs-models-logs-status", inputs: ["nodeType", "model", "data"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6928
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeLogsModelsComponent, isStandalone: true, selector: "he-node-logs-models", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, nodeKey: { classPropertyName: "nodeKey", publicName: "nodeKey", isSignal: true, isRequired: true, transformFunction: null }, originalValues: { classPropertyName: "originalValues", publicName: "originalValues", isSignal: true, isRequired: false, transformFunction: null }, recalculatedValues: { classPropertyName: "recalculatedValues", publicName: "recalculatedValues", isSignal: true, isRequired: false, transformFunction: null }, terms: { classPropertyName: "terms", publicName: "terms", isSignal: true, isRequired: false, transformFunction: null }, filterTermTypes: { classPropertyName: "filterTermTypes", publicName: "filterTermTypes", isSignal: true, isRequired: false, transformFunction: null }, filterTermTypesLabel: { classPropertyName: "filterTermTypesLabel", publicName: "filterTermTypesLabel", isSignal: true, isRequired: false, transformFunction: null }, logsKey: { classPropertyName: "logsKey", publicName: "logsKey", isSignal: true, isRequired: false, transformFunction: null }, noDataMessage: { classPropertyName: "noDataMessage", publicName: "noDataMessage", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"is-px-3 is-pb-3\">\n @if (!isExternal && logsUrl()) {\n <div class=\"has-text-right is-mb-2\">\n <a class=\"is-size-7\" [href]=\"logsUrl()\" target=\"_blank\">\n <span>Open Full Logs</span>\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n </a>\n </div>\n }\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n <tr>\n <th class=\"width-auto has-border-right\">\n @if (enableFilterByTerm()) {\n <div class=\"field\">\n <div class=\"control is-expanded has-icons-right\">\n <input\n class=\"input search-input is-small\"\n [ngModel]=\"term()\"\n name=\"term\"\n placeholder=\"Select entry by name\"\n [ngbTypeahead]=\"suggestTerm\"\n [focusFirst]=\"true\"\n (focus)=\"typeaheadFocus($event)\"\n (selectItem)=\"term.set($event.item)\"\n container=\"body\"\n popupClass=\"is-small\" />\n <a class=\"icon is-small is-right\" [class.is-hidden]=\"!term()\" (click)=\"term.set('')\">\n <he-svg-icon name=\"xmark\" />\n </a>\n </div>\n </div>\n }\n </th>\n @if (isBlankNodes()) {\n <th>\n <span class=\"is-pr-1\">Units</span>\n @if (functionalUnit()) {\n <span>(per </span>\n <span>{{ functionalUnit() }}</span>\n <span>)</span>\n }\n </th>\n }\n <th>Original</th>\n <th>Recalculated</th>\n @if (isBlankNodes()) {\n <th>Difference</th>\n }\n @for (c of methodModelsCount() | times; track i; let i = $index) {\n <th>({{ i + 1 }})</th>\n }\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"has-text-centered\" colspan=\"6\">\n <div class=\"has-text-center py-3\">\n <he-svg-icon name=\"loading\" animation=\"spin\" size=\"40\" />\n </div>\n </td>\n </tr>\n } @else if (blankNodes().length === 0) {\n <tr>\n <td class=\"has-text-centered\" colspan=\"6\">\n <span>{{ noDataMessage() || 'No original data was provided and no gap filling occurred.' }}</span>\n </td>\n </tr>\n }\n @for (blankNode of blankNodes(); track trackByBlankNode($index, blankNode)) {\n <tr [class.has-sub-rows]=\"blankNode.canOpen\" [class.is-open]=\"blankNode.isOpen\">\n <td\n class=\"width-auto has-border-right is-nowrap\"\n [attr.title]=\"$any(blankNode).term?.name || $any(blankNode).key\">\n @if (blankNode.canOpen) {\n <a class=\"is-inline-block is-align-top pr-2 open-node\" (click)=\"blankNode.isOpen = !blankNode.isOpen\">\n <he-svg-icon [name]=\"blankNode.isOpen ? 'chevron-down' : 'chevron-right'\" />\n </a>\n }\n @if ($any(blankNode).term) {\n <he-node-link class=\"is-inline-block is-pre-wrap\" [node]=\"$any(blankNode).term\">\n <span [innerHtml]=\"$any(blankNode).term.name | compound: $any(blankNode).term.termType\"></span>\n </he-node-link>\n }\n @if ($any(blankNode).key) {\n @if (nodeKey() === 'completeness') {\n <a [href]=\"schemaBaseUrl + '/Completeness#' + $any(blankNode).key\" target=\"_blank\">\n <span>{{ $any(blankNode).key | keyToLabel }}</span>\n </a>\n }\n } @else {\n <span>{{ $any(blankNode).key }}</span>\n }\n </td>\n @if (isBlankNodes()) {\n <td>\n @if ($any(blankNode).term) {\n <span\n class=\"is-nowrap\"\n [innerHtml]=\"$any(blankNode).term.units | compound: $any(blankNode).term.termType\"></span>\n }\n </td>\n }\n <td>\n <ng-template #originalValueContent>\n <span>{{ $any(blankNode).originalValue | precision: 3 | default: '-' }}</span>\n </ng-template>\n\n @if (blankNode.allParallel) {\n @for (model of $any(blankNode).configModels[0]; track model.methodId) {\n <div>\n {{ $any(blankNode).originalValueByMethodId[model.methodId] | precision: 3 | default: '-' }}\n </div>\n }\n } @else {\n <span\n [class.trigger-popover]=\"!!$any(blankNode).original?.[0]?.methodModel\"\n [ngbPopover]=\"blankNodeOriginalValueDetails\"\n autoClose=\"outside\"\n popoverClass=\"is-narrow\"\n placement=\"bottom left right auto\"\n container=\"body\"\n [disablePopover]=\"!$any(blankNode).original?.[0]?.methodModel\"\n [popoverContext]=\"{ blankNode }\">\n <span pointer>\n {{ $any(blankNode).originalValue | precision: 3 | default: '-' }}\n </span>\n </span>\n }\n </td>\n <td>\n @if (!blankNode.isOriginal || blankNode.isRecalculated) {\n @if (blankNode.allParallel) {\n @for (model of $any(blankNode).configModels[0]; track model.methodId) {\n <div>\n {{ $any(blankNode).recalculatedValueByMethodId[model.methodId] | precision: 3 | default: '-' }}\n </div>\n }\n } @else {\n <span>{{ blankNode.recalculatedValue | precision: 3 | default: '-' }}</span>\n }\n } @else {\n not recalculated\n }\n </td>\n @if (isBlankNodes()) {\n <td class=\"is-nowrap\">\n @if (blankNode.allParallel) {\n @for (model of $any(blankNode).configModels[0]; track model.methodId) {\n <div>\n @if (\n $any(blankNode).originalValueByMethodId[model.methodId] !== null &&\n $any(blankNode).recalculatedValueByMethodId[model.methodId] !== null\n ) {\n <he-blank-node-value-delta\n [value]=\"$any(blankNode).recalculatedValueByMethodId[model.methodId]\"\n [originalValue]=\"$any(blankNode).originalValueByMethodId[model.methodId]\"\n [useCustomFunctions]=\"false\" />\n } @else {\n -\n }\n </div>\n }\n } @else {\n @if ($any(blankNode).original.length && blankNode.isRecalculated) {\n <he-blank-node-value-delta\n [value]=\"blankNode.recalculatedValue\"\n [originalValue]=\"$any(blankNode).originalValue\"\n [useCustomFunctions]=\"false\" />\n } @else {\n -\n }\n }\n </td>\n }\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: { data: blankNode }\" />\n </tr>\n @for (subValue of $any(blankNode).keys; track trackBySubValue(subValue)) {\n <tr\n [class.is-hidden]=\"!blankNode.isOpen\"\n [class.has-sub-rows]=\"$any(blankNode).subValues?.length\"\n [class.is-sub-row]=\"blankNode.canOpen\">\n <td class=\"width-auto has-border-right is-nowrap\">\n <span class=\"is-inline-block is-align-top pl-3 pr-1 field-node\">Field:</span>\n @if (blankNode.type) {\n <a\n class=\"is-inline-block is-pre-wrap\"\n [href]=\"schemaBaseUrl + '/' + blankNode.type + '#' + subValue.key\"\n target=\"_blank\"\n [title]=\"subValue.key\">\n <span>{{ subValue.key }}</span>\n </a>\n }\n @if (!blankNode.type) {\n <span class=\"is-inline-block is-align-top\">{{ subValue.key }}</span>\n }\n </td>\n @if (isBlankNodes()) {\n <td></td>\n }\n <td>\n @if (subValue.originalValue !== null) {\n <span>\n {{ subValue.originalValue | precision: 3 | default: '-' }}\n </span>\n } @else {\n -\n }\n </td>\n <td>\n @if (subValue.isRecalculated || subValue.key === 'impactAssessment') {\n <span>\n {{ subValue.recalculatedValue | precision: 3 | default: '-' }}\n </span>\n } @else {\n not recalculated\n }\n </td>\n @if (isBlankNodes()) {\n <td>-</td>\n }\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: { data: subValue }\" />\n </tr>\n }\n @for (subValue of $any(blankNode).subValues; track trackBySubValue(subValue)) {\n @let term = subValue.term || termById(subValue.id);\n <tr [class.is-hidden]=\"!blankNode.isOpen\" [class.is-sub-row]=\"blankNode.canOpen\">\n <td class=\"width-auto has-border-right\">\n <span class=\"is-inline-block is-align-top pl-3\">{{ subValue.key | keyToLabel }}</span>\n @if (subValue.id) {\n <span class=\"is-inline-block\" class=\"is-inline-block is-align-top pr-1\">:</span>\n @switch (subValue.key) {\n @case ('backgroundData') {\n <span class=\"is-inline-block\">{{ term?.name }}</span>\n }\n @default {\n <he-node-link class=\"is-block pl-4\" [node]=\"term\" [attr.title]=\"term?.name\">\n <span [innerHtml]=\"term?.name | compound\"></span>\n </he-node-link>\n }\n }\n }\n </td>\n @if (isBlankNodes()) {\n <td>\n @if (subValue.showUnits && $any(blankNode).term) {\n <span\n class=\"is-nowrap\"\n [innerHtml]=\"$any(blankNode).term.units | compound: $any(blankNode).term.termType\"></span>\n }\n </td>\n }\n <td>\n @if (subValue.originalValue !== null) {\n <span>\n {{ subValue.originalValue | precision: 3 | default: '-' }}\n </span>\n } @else {\n -\n }\n </td>\n <td>\n @if (subValue.isRecalculated) {\n <span>\n {{ subValue.recalculatedValue | precision: 3 | default: '-' }}\n </span>\n } @else {\n not recalculated\n }\n </td>\n @if (isBlankNodes()) {\n <td>-</td>\n }\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: { data: subValue }\" />\n </tr>\n }\n }\n </tbody>\n </table>\n </he-data-table>\n <div class=\"is-size-7 is-italic\">\n <div class=\"columns is-variable is-1 my-0\">\n <div class=\"column is-narrow\">\n <p>\n <a class=\"is-inline-block pr-2\" (click)=\"showLegend.set(!showLegend())\">\n <he-svg-icon [name]=\"showLegend() ? 'chevron-down' : 'chevron-right'\" />\n </a>\n <span class=\"is-inline-block\">Legend:</span>\n </p>\n @if (showLegend()) {\n <ul class=\"content pl-2\">\n @for (status of LogStatus | keyvalue; track status.value) {\n @if (logIcon[status.value]) {\n <li class=\"has-text-{{ logColor[status.value] }}\">\n <he-svg-icon [name]=\"logIcon[status.value]\" />\n <span class=\"pl-1\">{{ status.value }}</span>\n </li>\n }\n }\n </ul>\n }\n </div>\n @if (filteredType()) {\n <div class=\"column has-text-right\">\n <label class=\"is-inline-block checkbox\">\n <input\n type=\"checkbox\"\n class=\"selector\"\n [ngModel]=\"onlyRequired\"\n (change)=\"onlyRequired.set($event.target.checked)\"\n [disabled]=\"!!term()\" />\n <span class=\"ml-2\">\n Show only {{ filteredType() }} terms included in the default HESTIA system boundary\n </span>\n </label>\n </div>\n }\n </div>\n </div>\n</div>\n\n<ng-template #blankNodeOriginalValueDetails let-blankNode=\"blankNode\">\n <span class=\"is-pr-1\">The original value was reported using:</span>\n <he-node-link\n class=\"is-inline-block\"\n linkClass=\"is-dark\"\n [node]=\"$any(blankNode).original[0].methodModel\"\n [showExternalLink]=\"true\">\n <span>{{ $any(blankNode).original[0].methodModel.name }}</span>\n </he-node-link>\n</ng-template>\n\n<ng-template #blankNodeModels let-data=\"data\">\n <ng-template #notInSystemBoundary>\n <td [attr.colspan]=\"methodModelsCount()\">\n <span>Not in HESTIA system boundary</span>\n </td>\n </ng-template>\n\n @if (isSystemBoundary(data)) {\n @for (configModel of methodModelsCount() | times; track configModelIndex; let configModelIndex = $index) {\n <td class=\"blank-node-index-{{ configModelIndex }}\">\n @if (getModelsAt(data, configModelIndex); as models) {\n @if ($any(models) | isArray) {\n <div>\n @for (model of $any(models); track model.methodId) {\n <p>\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: { model, data }\" />\n </p>\n }\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: { model: models, data }\" />\n }\n } @else {\n -\n }\n </td>\n }\n } @else {\n -\n }\n</ng-template>\n\n<ng-template #blankNodeModel let-model=\"model\" let-data=\"data\">\n <span\n class=\"is-nowrap\"\n [class.trigger-popover]=\"model.showLogs\"\n [ngbPopover]=\"logDetails\"\n autoClose=\"outside\"\n popoverClass=\"is-narrow\"\n triggers=\"manual\"\n #p=\"ngbPopover\"\n placement=\"bottom left right auto\"\n container=\"body\"\n (click)=\"p.isOpen() ? p.close() : model.showLogs ? p.open({ logs: model.logs }) : null\">\n <span>\n <span class=\"is-capitalized\">{{ methodName(model) }}</span>\n @if (model.logs?.methodTier || model.model?.methodTier) {\n <span> [{{ model.logs?.methodTier || model.model?.methodTier }}]</span>\n }\n </span>\n\n <span\n class=\"pl-1 has-text-{{ logColor[model.status] }} trigger-popover\"\n [ngbPopover]=\"logStatusDetails\"\n autoClose=\"outside\"\n popoverClass=\"is-narrow\"\n triggers=\"manual\"\n #p1=\"ngbPopover\"\n placement=\"bottom left right auto\"\n container=\"body\"\n (click)=\"$event.stopPropagation(); p1.isOpen() ? p1.close() : p1.open({ model, data })\">\n <he-svg-icon [name]=\"logIcon[model.status]\" />\n </span>\n\n @if (model.model) {\n <span class=\"pl-1\">\n (\n <ng-container *ngTemplateOutlet=\"docsLink; context: { $implicit: model.model }\" />\n )\n </span>\n }\n </span>\n</ng-template>\n\n<ng-template #logDetails let-logs=\"logs\">\n <he-node-logs-models-logs [logs]=\"logs\" />\n</ng-template>\n\n<ng-template #logStatusDetails let-model=\"model\" let-data=\"data\">\n <he-node-logs-models-logs-status [nodeType]=\"nodeType()\" [model]=\"model\" [data]=\"\" />\n</ng-template>\n\n<ng-template #docsLink let-model>\n <a [href]=\"model.apiDocsPath || model.docPath || model.path\" target=\"_blank\" (click)=\"$event.stopPropagation()\">\n <span>Docs</span>\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n </a>\n</ng-template>\n", styles: [":host{display:block}::ng-deep .table{background-color:transparent}::ng-deep .table td he-node-link{width:190px}@media screen and (max-width: 767px){::ng-deep .table td he-node-link{width:150px}}::ng-deep .table td .open-node+he-node-link{width:170px}@media screen and (max-width: 767px){::ng-deep .table td .open-node+he-node-link{width:130px}}::ng-deep .table td.has-border-right{box-shadow:1px 0 #6c8093}::ng-deep .table .has-sub-rows.is-open>td:first-child:before,::ng-deep .table .is-sub-row>td:first-child:before{display:block;position:absolute;content:\" \";background-color:#6c809333;height:100%;width:1px;top:0;left:12px}::ng-deep .table .has-sub-rows.is-open>td:first-child:before{top:25px}::ng-deep .table .popover-body .table-container{max-height:260px;overflow-y:auto}\n"], dependencies: [{ kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "component", type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "dataState", "showExternalLink", "linkClass"] }, { kind: "component", type: BlankNodeValueDeltaComponent, selector: "he-blank-node-value-delta", inputs: ["value", "originalValue", "displayType", "useCustomFunctions"] }, { kind: "directive", type: NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "container", "editable", "focusFirst", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate", "selectOnExact", "showHint", "placement", "popperOptions", "popupClass"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "ngbPopover", "popoverTitle", "placement", "popperOptions", "triggers", "positionTarget", "container", "disablePopover", "popoverClass", "popoverContext", "openDelay", "closeDelay"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { kind: "pipe", type: CompoundPipe, name: "compound" }, { kind: "pipe", type: DefaultPipe, name: "default" }, { kind: "pipe", type: KeyToLabelPipe, name: "keyToLabel" }, { kind: "pipe", type: PrecisionPipe, name: "precision" }, { kind: "pipe", type: TimesPipe, name: "times" }, { kind: "pipe", type: IsArrayPipe, name: "isArray" }, { kind: "component", type: NodeLogsModelsLogsComponent, selector: "he-node-logs-models-logs", inputs: ["logs"] }, { kind: "component", type: NodeLogsModelsLogsStatusComponent, selector: "he-node-logs-models-logs-status", inputs: ["nodeType", "model", "data"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6932
6929
|
}
|
|
6933
6930
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeLogsModelsComponent, decorators: [{
|
|
6934
6931
|
type: Component$1,
|
|
@@ -6936,9 +6933,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImpor
|
|
|
6936
6933
|
KeyValuePipe,
|
|
6937
6934
|
DataTableComponent,
|
|
6938
6935
|
FormsModule,
|
|
6939
|
-
NgbTypeahead,
|
|
6940
6936
|
NodeLinkComponent,
|
|
6941
6937
|
BlankNodeValueDeltaComponent,
|
|
6938
|
+
NgbTypeahead,
|
|
6942
6939
|
NgTemplateOutlet,
|
|
6943
6940
|
NgbPopover,
|
|
6944
6941
|
CompoundPipe,
|