@hestia-earth/ui-components 0.34.2 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/hestia-earth-ui-components.mjs +74 -82
- package/fesm2022/hestia-earth-ui-components.mjs.map +1 -1
- package/package.json +1 -3
- package/svg-icons/icons-sprite.svg +1 -0
- package/svg-icons/index.d.ts +1 -1
- package/svg-icons/svg-icon.component.d.ts +3 -3
- package/svg-icons/svg-sprite-loader.d.ts +1 -0
- package/svg-icons/icons/aggregation-20px.svg +0 -9
- package/svg-icons/icons/aggregation-24px.svg +0 -12
- package/svg-icons/icons/aggregation-40px.svg +0 -9
- package/svg-icons/icons/aggregation-48px.svg +0 -9
- package/svg-icons/icons/api-20px.svg +0 -13
- package/svg-icons/icons/api-24px.svg +0 -13
- package/svg-icons/icons/api-40px.svg +0 -13
- package/svg-icons/icons/api-48px.svg +0 -13
- package/svg-icons/icons/api-circle-48px.svg +0 -9
- package/svg-icons/icons/archive-20px.svg +0 -8
- package/svg-icons/icons/archive-24px.svg +0 -14
- package/svg-icons/icons/archive-40px.svg +0 -8
- package/svg-icons/icons/archive-48px.svg +0 -8
- package/svg-icons/icons/arrow-down-20px.svg +0 -3
- package/svg-icons/icons/arrow-down-24px.svg +0 -3
- package/svg-icons/icons/arrow-down-40px.svg +0 -3
- package/svg-icons/icons/arrow-down-48px.svg +0 -3
- package/svg-icons/icons/arrow-down-right-16px.svg +0 -3
- package/svg-icons/icons/arrow-down-right-20px.svg +0 -3
- package/svg-icons/icons/arrow-down-right-24px.svg +0 -3
- package/svg-icons/icons/arrow-down-right-40px.svg +0 -3
- package/svg-icons/icons/arrow-down-right-48px.svg +0 -3
- package/svg-icons/icons/arrow-left-20px.svg +0 -3
- package/svg-icons/icons/arrow-left-24px.svg +0 -3
- package/svg-icons/icons/arrow-left-40px.svg +0 -3
- package/svg-icons/icons/arrow-left-48px.svg +0 -3
- package/svg-icons/icons/arrow-right-20px.svg +0 -3
- package/svg-icons/icons/arrow-right-24px.svg +0 -3
- package/svg-icons/icons/arrow-right-40px.svg +0 -3
- package/svg-icons/icons/arrow-right-48px.svg +0 -3
- package/svg-icons/icons/arrow-up-20px.svg +0 -3
- package/svg-icons/icons/arrow-up-24px.svg +0 -3
- package/svg-icons/icons/arrow-up-40px.svg +0 -3
- package/svg-icons/icons/arrow-up-48px.svg +0 -3
- package/svg-icons/icons/autogenerate-16px.svg +0 -3
- package/svg-icons/icons/autogenerate-20px.svg +0 -3
- package/svg-icons/icons/autogenerate-24px.svg +0 -3
- package/svg-icons/icons/autogenerate-40px.svg +0 -3
- package/svg-icons/icons/autogenerate-48px.svg +0 -3
- package/svg-icons/icons/autogenerate-circle-16px.svg +0 -4
- package/svg-icons/icons/autogenerate-circle-20px.svg +0 -4
- package/svg-icons/icons/autogenerate-circle-24px.svg +0 -4
- package/svg-icons/icons/autogenerate-circle-40px.svg +0 -4
- package/svg-icons/icons/autogenerate-circle-48px.svg +0 -4
- package/svg-icons/icons/aws-20px.svg +0 -7
- package/svg-icons/icons/aws-24px.svg +0 -7
- package/svg-icons/icons/aws-40px.svg +0 -7
- package/svg-icons/icons/aws-48px.svg +0 -7
- package/svg-icons/icons/ban-16px.svg +0 -4
- package/svg-icons/icons/ban-20px.svg +0 -4
- package/svg-icons/icons/ban-24px.svg +0 -4
- package/svg-icons/icons/ban-40px.svg +0 -4
- package/svg-icons/icons/ban-48px.svg +0 -4
- package/svg-icons/icons/bell-20px.svg +0 -4
- package/svg-icons/icons/bell-24px.svg +0 -4
- package/svg-icons/icons/bell-40px.svg +0 -4
- package/svg-icons/icons/bell-48px.svg +0 -4
- package/svg-icons/icons/bell-with-badge-20px.svg +0 -5
- package/svg-icons/icons/bell-with-badge-24px.svg +0 -5
- package/svg-icons/icons/bell-with-badge-40px.svg +0 -5
- package/svg-icons/icons/bell-with-badge-48px.svg +0 -5
- package/svg-icons/icons/blank-circle-24px.svg +0 -33
- package/svg-icons/icons/blank-circle-32px.svg +0 -3
- package/svg-icons/icons/book-20px.svg +0 -11
- package/svg-icons/icons/book-24px.svg +0 -7
- package/svg-icons/icons/book-40px.svg +0 -7
- package/svg-icons/icons/book-48px.svg +0 -7
- package/svg-icons/icons/breakdown-20px.svg +0 -14
- package/svg-icons/icons/breakdown-24px.svg +0 -14
- package/svg-icons/icons/breakdown-40px.svg +0 -14
- package/svg-icons/icons/breakdown-48px.svg +0 -14
- package/svg-icons/icons/bug-20px.svg +0 -11
- package/svg-icons/icons/bug-24px.svg +0 -11
- package/svg-icons/icons/bug-40px.svg +0 -11
- package/svg-icons/icons/bug-48px.svg +0 -11
- package/svg-icons/icons/buoy-20px.svg +0 -9
- package/svg-icons/icons/buoy-24px.svg +0 -9
- package/svg-icons/icons/buoy-40px.svg +0 -9
- package/svg-icons/icons/buoy-48px.svg +0 -9
- package/svg-icons/icons/calculation-toolkit-20px.svg +0 -19
- package/svg-icons/icons/calculation-toolkit-24px.svg +0 -19
- package/svg-icons/icons/calculation-toolkit-40px.svg +0 -19
- package/svg-icons/icons/calculation-toolkit-48px.svg +0 -19
- package/svg-icons/icons/calculator-20px.svg +0 -39
- package/svg-icons/icons/calculator-24px.svg +0 -39
- package/svg-icons/icons/calculator-40px.svg +0 -39
- package/svg-icons/icons/calculator-48px.svg +0 -39
- package/svg-icons/icons/caret-down-16px.svg +0 -3
- package/svg-icons/icons/caret-down-20px.svg +0 -3
- package/svg-icons/icons/caret-down-24px.svg +0 -3
- package/svg-icons/icons/caret-down-40px.svg +0 -3
- package/svg-icons/icons/caret-down-48px.svg +0 -3
- package/svg-icons/icons/caret-left-16px.svg +0 -3
- package/svg-icons/icons/caret-left-20px.svg +0 -3
- package/svg-icons/icons/caret-left-24px.svg +0 -3
- package/svg-icons/icons/caret-left-40px.svg +0 -3
- package/svg-icons/icons/caret-left-48px.svg +0 -3
- package/svg-icons/icons/caret-right-16px.svg +0 -3
- package/svg-icons/icons/caret-right-20px.svg +0 -3
- package/svg-icons/icons/caret-right-24px.svg +0 -3
- package/svg-icons/icons/caret-right-40px.svg +0 -3
- package/svg-icons/icons/caret-right-48px.svg +0 -3
- package/svg-icons/icons/caret-up-16px.svg +0 -3
- package/svg-icons/icons/caret-up-20px.svg +0 -3
- package/svg-icons/icons/caret-up-24px.svg +0 -3
- package/svg-icons/icons/caret-up-40px.svg +0 -3
- package/svg-icons/icons/caret-up-48px.svg +0 -3
- package/svg-icons/icons/certificate-20px.svg +0 -6
- package/svg-icons/icons/certificate-24px.svg +0 -6
- package/svg-icons/icons/certificate-40px.svg +0 -6
- package/svg-icons/icons/certificate-48px.svg +0 -6
- package/svg-icons/icons/chart-20px.svg +0 -12
- package/svg-icons/icons/chart-24px.svg +0 -12
- package/svg-icons/icons/chart-40px.svg +0 -12
- package/svg-icons/icons/chart-48px.svg +0 -12
- package/svg-icons/icons/checkmark-20px.svg +0 -4
- package/svg-icons/icons/checkmark-24px.svg +0 -4
- package/svg-icons/icons/checkmark-40px.svg +0 -4
- package/svg-icons/icons/checkmark-48px.svg +0 -4
- package/svg-icons/icons/checkmark-circle-20px.svg +0 -5
- package/svg-icons/icons/checkmark-circle-24px.svg +0 -5
- package/svg-icons/icons/checkmark-circle-40px.svg +0 -5
- package/svg-icons/icons/checkmark-circle-48px.svg +0 -5
- package/svg-icons/icons/checkmark-circle-filled-20px.svg +0 -5
- package/svg-icons/icons/checkmark-circle-filled-24px.svg +0 -5
- package/svg-icons/icons/checkmark-circle-filled-40px.svg +0 -5
- package/svg-icons/icons/checkmark-circle-filled-48px.svg +0 -5
- package/svg-icons/icons/checkmark-circle-filled-with-shadow-20px.svg +0 -20
- package/svg-icons/icons/checkmark-circle-filled-with-shadow-24px.svg +0 -20
- package/svg-icons/icons/checkmark-circle-filled-with-shadow-40px.svg +0 -20
- package/svg-icons/icons/checkmark-circle-filled-with-shadow-48px.svg +0 -20
- package/svg-icons/icons/chevron-double-left-20px.svg +0 -4
- package/svg-icons/icons/chevron-double-left-24px.svg +0 -4
- package/svg-icons/icons/chevron-double-left-40px.svg +0 -4
- package/svg-icons/icons/chevron-double-left-48px.svg +0 -4
- package/svg-icons/icons/chevron-double-right-20px.svg +0 -4
- package/svg-icons/icons/chevron-double-right-24px.svg +0 -4
- package/svg-icons/icons/chevron-double-right-40px.svg +0 -4
- package/svg-icons/icons/chevron-double-right-48px.svg +0 -4
- package/svg-icons/icons/chevron-down-20px.svg +0 -3
- package/svg-icons/icons/chevron-down-24px.svg +0 -3
- package/svg-icons/icons/chevron-down-40px.svg +0 -3
- package/svg-icons/icons/chevron-down-48px.svg +0 -3
- package/svg-icons/icons/chevron-left-20px.svg +0 -3
- package/svg-icons/icons/chevron-left-24px.svg +0 -3
- package/svg-icons/icons/chevron-left-40px.svg +0 -3
- package/svg-icons/icons/chevron-left-48px.svg +0 -3
- package/svg-icons/icons/chevron-right-20px.svg +0 -3
- package/svg-icons/icons/chevron-right-24px.svg +0 -3
- package/svg-icons/icons/chevron-right-40px.svg +0 -3
- package/svg-icons/icons/chevron-right-48px.svg +0 -3
- package/svg-icons/icons/chevron-up-20px.svg +0 -3
- package/svg-icons/icons/chevron-up-24px.svg +0 -3
- package/svg-icons/icons/chevron-up-40px.svg +0 -3
- package/svg-icons/icons/chevron-up-48px.svg +0 -3
- package/svg-icons/icons/circle-20px.svg +0 -3
- package/svg-icons/icons/circle-24px.svg +0 -3
- package/svg-icons/icons/circle-40px.svg +0 -3
- package/svg-icons/icons/circle-48px.svg +0 -3
- package/svg-icons/icons/citation-20px.svg +0 -3
- package/svg-icons/icons/citation-24px.svg +0 -3
- package/svg-icons/icons/citation-40px.svg +0 -3
- package/svg-icons/icons/citation-48px.svg +0 -3
- package/svg-icons/icons/citation-square-20px.svg +0 -4
- package/svg-icons/icons/citation-square-24px.svg +0 -4
- package/svg-icons/icons/citation-square-40px.svg +0 -4
- package/svg-icons/icons/citation-square-48px.svg +0 -4
- package/svg-icons/icons/clock-20px.svg +0 -5
- package/svg-icons/icons/clock-24px.svg +0 -5
- package/svg-icons/icons/clock-40px.svg +0 -5
- package/svg-icons/icons/clock-48px.svg +0 -5
- package/svg-icons/icons/cloud-20px.svg +0 -5
- package/svg-icons/icons/cloud-24px.svg +0 -5
- package/svg-icons/icons/cloud-40px.svg +0 -5
- package/svg-icons/icons/cloud-48px.svg +0 -5
- package/svg-icons/icons/collapse-20px.svg +0 -10
- package/svg-icons/icons/collapse-24px.svg +0 -10
- package/svg-icons/icons/collapse-40px.svg +0 -10
- package/svg-icons/icons/collapse-48px.svg +0 -10
- package/svg-icons/icons/collapse-panel-20px.svg +0 -6
- package/svg-icons/icons/collapse-panel-24px.svg +0 -6
- package/svg-icons/icons/collapse-panel-40px.svg +0 -6
- package/svg-icons/icons/collapse-panel-48px.svg +0 -6
- package/svg-icons/icons/commit-20px.svg +0 -5
- package/svg-icons/icons/commit-24px.svg +0 -5
- package/svg-icons/icons/commit-40px.svg +0 -5
- package/svg-icons/icons/commit-48px.svg +0 -5
- package/svg-icons/icons/community-20px.svg +0 -8
- package/svg-icons/icons/community-24px.svg +0 -8
- package/svg-icons/icons/community-40px.svg +0 -8
- package/svg-icons/icons/community-48px.svg +0 -8
- package/svg-icons/icons/community-edition-48px.svg +0 -20
- package/svg-icons/icons/compare-20px.svg +0 -14
- package/svg-icons/icons/compare-24px.svg +0 -14
- package/svg-icons/icons/compare-40px.svg +0 -14
- package/svg-icons/icons/compare-48px.svg +0 -14
- package/svg-icons/icons/copy-20px.svg +0 -4
- package/svg-icons/icons/copy-24px.svg +0 -4
- package/svg-icons/icons/copy-40px.svg +0 -4
- package/svg-icons/icons/copy-48px.svg +0 -4
- package/svg-icons/icons/corner-drag-16px.svg +0 -5
- package/svg-icons/icons/corner-drag-20px.svg +0 -5
- package/svg-icons/icons/corner-drag-24px.svg +0 -5
- package/svg-icons/icons/corner-drag-40px.svg +0 -5
- package/svg-icons/icons/corner-drag-48px.svg +0 -5
- package/svg-icons/icons/csv-file-20px.svg +0 -14
- package/svg-icons/icons/csv-file-24px.svg +0 -14
- package/svg-icons/icons/csv-file-40px.svg +0 -14
- package/svg-icons/icons/csv-file-48px.svg +0 -14
- package/svg-icons/icons/cycle-20px.svg +0 -10
- package/svg-icons/icons/cycle-24px.svg +0 -10
- package/svg-icons/icons/cycle-40px.svg +0 -10
- package/svg-icons/icons/cycle-48px.svg +0 -10
- package/svg-icons/icons/dashboard-20px.svg +0 -18
- package/svg-icons/icons/dashboard-24px.svg +0 -18
- package/svg-icons/icons/dashboard-40px.svg +0 -18
- package/svg-icons/icons/dashboard-48px.svg +0 -18
- package/svg-icons/icons/data-format-48px.svg +0 -27
- package/svg-icons/icons/database-wheat-48px.svg +0 -57
- package/svg-icons/icons/dot-circle-20px.svg +0 -4
- package/svg-icons/icons/dot-circle-24px.svg +0 -4
- package/svg-icons/icons/dot-circle-40px.svg +0 -4
- package/svg-icons/icons/dot-circle-48px.svg +0 -4
- package/svg-icons/icons/dot-filled-16px.svg +0 -3
- package/svg-icons/icons/dot-filled-20px.svg +0 -3
- package/svg-icons/icons/dot-filled-24px.svg +0 -3
- package/svg-icons/icons/dot-filled-40px.svg +0 -3
- package/svg-icons/icons/dot-filled-48px.svg +0 -3
- package/svg-icons/icons/download-20px.svg +0 -5
- package/svg-icons/icons/download-24px.svg +0 -5
- package/svg-icons/icons/download-40px.svg +0 -5
- package/svg-icons/icons/download-48px.svg +0 -5
- package/svg-icons/icons/drag-20px.svg +0 -8
- package/svg-icons/icons/drag-24px.svg +0 -8
- package/svg-icons/icons/drag-40px.svg +0 -8
- package/svg-icons/icons/drag-48px.svg +0 -8
- package/svg-icons/icons/edit-20px.svg +0 -7
- package/svg-icons/icons/edit-24px.svg +0 -7
- package/svg-icons/icons/edit-40px.svg +0 -7
- package/svg-icons/icons/edit-48px.svg +0 -7
- package/svg-icons/icons/edit-withfield-20px.svg +0 -8
- package/svg-icons/icons/edit-withfield-24px.svg +0 -8
- package/svg-icons/icons/edit-withfield-40px.svg +0 -8
- package/svg-icons/icons/edit-withfield-48px.svg +0 -8
- package/svg-icons/icons/embed-20px.svg +0 -5
- package/svg-icons/icons/embed-24px.svg +0 -5
- package/svg-icons/icons/embed-40px.svg +0 -5
- package/svg-icons/icons/embed-48px.svg +0 -5
- package/svg-icons/icons/exclamation-20px.svg +0 -4
- package/svg-icons/icons/exclamation-24px.svg +0 -4
- package/svg-icons/icons/exclamation-40px.svg +0 -4
- package/svg-icons/icons/exclamation-48px.svg +0 -4
- package/svg-icons/icons/exclamation-triangle-20px.svg +0 -12
- package/svg-icons/icons/exclamation-triangle-24px.svg +0 -12
- package/svg-icons/icons/exclamation-triangle-40px.svg +0 -5
- package/svg-icons/icons/exclamation-triangle-48px.svg +0 -5
- package/svg-icons/icons/exclamation-triangle-filled-20px.svg +0 -12
- package/svg-icons/icons/exclamation-triangle-filled-24px.svg +0 -12
- package/svg-icons/icons/exclamation-triangle-filled-40px.svg +0 -12
- package/svg-icons/icons/exclamation-triangle-filled-48px.svg +0 -12
- package/svg-icons/icons/export-20px.svg +0 -10
- package/svg-icons/icons/export-24px.svg +0 -10
- package/svg-icons/icons/export-40px.svg +0 -10
- package/svg-icons/icons/export-48px.svg +0 -10
- package/svg-icons/icons/external-link-16px.svg +0 -5
- package/svg-icons/icons/external-link-20px.svg +0 -5
- package/svg-icons/icons/external-link-24px.svg +0 -5
- package/svg-icons/icons/external-link-40px.svg +0 -5
- package/svg-icons/icons/external-link-48px.svg +0 -5
- package/svg-icons/icons/feedback-20px.svg +0 -10
- package/svg-icons/icons/feedback-24px.svg +0 -10
- package/svg-icons/icons/feedback-40px.svg +0 -10
- package/svg-icons/icons/feedback-48px.svg +0 -10
- package/svg-icons/icons/fence-20px.svg +0 -9
- package/svg-icons/icons/fence-24px.svg +0 -9
- package/svg-icons/icons/fence-40px.svg +0 -9
- package/svg-icons/icons/fence-48px.svg +0 -31
- package/svg-icons/icons/film-20px.svg +0 -3
- package/svg-icons/icons/film-24px.svg +0 -3
- package/svg-icons/icons/film-40px.svg +0 -3
- package/svg-icons/icons/film-48px.svg +0 -3
- package/svg-icons/icons/filter-funnel-16px.svg +0 -3
- package/svg-icons/icons/filter-funnel-20px.svg +0 -3
- package/svg-icons/icons/filter-funnel-24px.svg +0 -3
- package/svg-icons/icons/filter-funnel-40px.svg +0 -3
- package/svg-icons/icons/filter-funnel-48px.svg +0 -3
- package/svg-icons/icons/filter-slider-20px.svg +0 -8
- package/svg-icons/icons/filter-slider-24px.svg +0 -8
- package/svg-icons/icons/filter-slider-40px.svg +0 -8
- package/svg-icons/icons/filter-slider-48px.svg +0 -8
- package/svg-icons/icons/flash-20px.svg +0 -3
- package/svg-icons/icons/flash-24px.svg +0 -3
- package/svg-icons/icons/flash-40px.svg +0 -3
- package/svg-icons/icons/flash-48px.svg +0 -3
- package/svg-icons/icons/folder-20px.svg +0 -3
- package/svg-icons/icons/folder-24px.svg +0 -3
- package/svg-icons/icons/folder-40px.svg +0 -3
- package/svg-icons/icons/folder-48px.svg +0 -3
- package/svg-icons/icons/folder-open-20px.svg +0 -4
- package/svg-icons/icons/folder-open-24px.svg +0 -4
- package/svg-icons/icons/folder-open-40px.svg +0 -4
- package/svg-icons/icons/folder-open-48px.svg +0 -4
- package/svg-icons/icons/foodprocessor-20px.svg +0 -10
- package/svg-icons/icons/foodprocessor-24px.svg +0 -10
- package/svg-icons/icons/foodprocessor-40px.svg +0 -10
- package/svg-icons/icons/foodprocessor-48px.svg +0 -10
- package/svg-icons/icons/globe-continents-20px.svg +0 -7
- package/svg-icons/icons/globe-continents-24px.svg +0 -7
- package/svg-icons/icons/globe-continents-40px.svg +0 -7
- package/svg-icons/icons/globe-continents-48px.svg +0 -7
- package/svg-icons/icons/globe-lines-20px.svg +0 -7
- package/svg-icons/icons/globe-lines-24px.svg +0 -7
- package/svg-icons/icons/globe-lines-40px.svg +0 -7
- package/svg-icons/icons/globe-lines-48px.svg +0 -7
- package/svg-icons/icons/glossary-20px.svg +0 -7
- package/svg-icons/icons/glossary-24px.svg +0 -7
- package/svg-icons/icons/glossary-40px.svg +0 -7
- package/svg-icons/icons/glossary-48px.svg +0 -7
- package/svg-icons/icons/greenhouse-20px.svg +0 -10
- package/svg-icons/icons/greenhouse-24px.svg +0 -10
- package/svg-icons/icons/greenhouse-40px.svg +0 -10
- package/svg-icons/icons/greenhouse-48px.svg +0 -10
- package/svg-icons/icons/guide-20px.svg +0 -13
- package/svg-icons/icons/guide-24px.svg +0 -13
- package/svg-icons/icons/guide-40px.svg +0 -9
- package/svg-icons/icons/guide-48px.svg +0 -9
- package/svg-icons/icons/guide-overlay-20px.svg +0 -15
- package/svg-icons/icons/guide-overlay-24px.svg +0 -15
- package/svg-icons/icons/guide-overlay-40px.svg +0 -11
- package/svg-icons/icons/guide-overlay-48px.svg +0 -11
- package/svg-icons/icons/help-16px.svg +0 -4
- package/svg-icons/icons/help-20px.svg +0 -4
- package/svg-icons/icons/help-24px.svg +0 -4
- package/svg-icons/icons/help-40px.svg +0 -4
- package/svg-icons/icons/help-48px.svg +0 -4
- package/svg-icons/icons/help-circle-16px.svg +0 -5
- package/svg-icons/icons/help-circle-20px.svg +0 -5
- package/svg-icons/icons/help-circle-24px.svg +0 -5
- package/svg-icons/icons/help-circle-40px.svg +0 -5
- package/svg-icons/icons/help-circle-48px.svg +0 -5
- package/svg-icons/icons/history-20px.svg +0 -14
- package/svg-icons/icons/history-24px.svg +0 -7
- package/svg-icons/icons/history-40px.svg +0 -6
- package/svg-icons/icons/history-48px.svg +0 -6
- package/svg-icons/icons/home-20px.svg +0 -7
- package/svg-icons/icons/home-24px.svg +0 -7
- package/svg-icons/icons/home-40px.svg +0 -7
- package/svg-icons/icons/home-48px.svg +0 -7
- package/svg-icons/icons/husk-20px.svg +0 -10
- package/svg-icons/icons/husk-24px.svg +0 -10
- package/svg-icons/icons/husk-40px.svg +0 -10
- package/svg-icons/icons/husk-48px.svg +0 -10
- package/svg-icons/icons/image-20px.svg +0 -8
- package/svg-icons/icons/image-24px.svg +0 -8
- package/svg-icons/icons/image-40px.svg +0 -8
- package/svg-icons/icons/image-48px.svg +0 -8
- package/svg-icons/icons/incognito-20px.svg +0 -8
- package/svg-icons/icons/incognito-24px.svg +0 -8
- package/svg-icons/icons/incognito-40px.svg +0 -8
- package/svg-icons/icons/incognito-48px.svg +0 -8
- package/svg-icons/icons/indexed-20px.svg +0 -32
- package/svg-icons/icons/indexed-24px.svg +0 -32
- package/svg-icons/icons/indexed-40px.svg +0 -32
- package/svg-icons/icons/indexed-48px.svg +0 -32
- package/svg-icons/icons/info-16px.svg +0 -4
- package/svg-icons/icons/info-20px.svg +0 -4
- package/svg-icons/icons/info-24px.svg +0 -3
- package/svg-icons/icons/info-40px.svg +0 -3
- package/svg-icons/icons/info-48px.svg +0 -3
- package/svg-icons/icons/info-circle-16px.svg +0 -5
- package/svg-icons/icons/info-circle-20px.svg +0 -5
- package/svg-icons/icons/info-circle-24px.svg +0 -4
- package/svg-icons/icons/info-circle-40px.svg +0 -4
- package/svg-icons/icons/info-circle-48px.svg +0 -4
- package/svg-icons/icons/lake-20px.svg +0 -7
- package/svg-icons/icons/lake-24px.svg +0 -7
- package/svg-icons/icons/lake-40px.svg +0 -7
- package/svg-icons/icons/lake-48px.svg +0 -7
- package/svg-icons/icons/link-20px.svg +0 -4
- package/svg-icons/icons/link-24px.svg +0 -4
- package/svg-icons/icons/link-40px.svg +0 -4
- package/svg-icons/icons/link-48px.svg +0 -4
- package/svg-icons/icons/list-indented-20px.svg +0 -8
- package/svg-icons/icons/list-indented-24px.svg +0 -8
- package/svg-icons/icons/list-indented-40px.svg +0 -8
- package/svg-icons/icons/list-indented-48px.svg +0 -8
- package/svg-icons/icons/livestock-20px.svg +0 -5
- package/svg-icons/icons/livestock-24px.svg +0 -5
- package/svg-icons/icons/livestock-40px.svg +0 -5
- package/svg-icons/icons/livestock-48px.svg +0 -5
- package/svg-icons/icons/loading-20px.svg +0 -10
- package/svg-icons/icons/loading-24px.svg +0 -10
- package/svg-icons/icons/loading-40px.svg +0 -10
- package/svg-icons/icons/loading-48px.svg +0 -10
- package/svg-icons/icons/loading-bar-20px.svg +0 -8
- package/svg-icons/icons/loading-bar-24px.svg +0 -8
- package/svg-icons/icons/loading-bar-40px.svg +0 -10
- package/svg-icons/icons/loading-bar-48px.svg +0 -10
- package/svg-icons/icons/loading-circle-filled-20px.svg +0 -11
- package/svg-icons/icons/loading-circle-filled-24px.svg +0 -11
- package/svg-icons/icons/loading-circle-filled-40px.svg +0 -11
- package/svg-icons/icons/loading-circle-filled-48px.svg +0 -11
- package/svg-icons/icons/loading-circle-filled-withshadow-20px.svg +0 -25
- package/svg-icons/icons/loading-circle-filled-withshadow-24px.svg +0 -25
- package/svg-icons/icons/loading-circle-filled-withshadow-40px.svg +0 -25
- package/svg-icons/icons/loading-filled-withshadow-48px.svg +0 -25
- package/svg-icons/icons/log-20px.svg +0 -15
- package/svg-icons/icons/log-24px.svg +0 -15
- package/svg-icons/icons/log-40px.svg +0 -12
- package/svg-icons/icons/log-48px.svg +0 -12
- package/svg-icons/icons/mail-20px.svg +0 -7
- package/svg-icons/icons/mail-24px.svg +0 -7
- package/svg-icons/icons/mail-40px.svg +0 -7
- package/svg-icons/icons/mail-48px.svg +0 -7
- package/svg-icons/icons/map-20px.svg +0 -5
- package/svg-icons/icons/map-24px.svg +0 -5
- package/svg-icons/icons/map-40px.svg +0 -5
- package/svg-icons/icons/map-48px.svg +0 -5
- package/svg-icons/icons/menu-20px.svg +0 -5
- package/svg-icons/icons/menu-24px.svg +0 -5
- package/svg-icons/icons/menu-40px.svg +0 -5
- package/svg-icons/icons/menu-48px.svg +0 -5
- package/svg-icons/icons/messages-20px.svg +0 -9
- package/svg-icons/icons/messages-24px.svg +0 -9
- package/svg-icons/icons/messages-40px.svg +0 -9
- package/svg-icons/icons/messages-48px.svg +0 -9
- package/svg-icons/icons/messages-with-badge-20px.svg +0 -10
- package/svg-icons/icons/messages-with-badge-24px.svg +0 -10
- package/svg-icons/icons/messages-with-badge-40px.svg +0 -10
- package/svg-icons/icons/messages-with-badge-48px.svg +0 -10
- package/svg-icons/icons/metrics-20px.svg +0 -16
- package/svg-icons/icons/metrics-24px.svg +0 -16
- package/svg-icons/icons/metrics-40px.svg +0 -16
- package/svg-icons/icons/metrics-48px.svg +0 -16
- package/svg-icons/icons/migration-20px.svg +0 -7
- package/svg-icons/icons/migration-24px.svg +0 -7
- package/svg-icons/icons/migration-40px.svg +0 -7
- package/svg-icons/icons/migration-48px.svg +0 -7
- package/svg-icons/icons/minus-20px.svg +0 -3
- package/svg-icons/icons/minus-24px.svg +0 -3
- package/svg-icons/icons/minus-40px.svg +0 -3
- package/svg-icons/icons/minus-48px.svg +0 -3
- package/svg-icons/icons/model-docs-20px.svg +0 -9
- package/svg-icons/icons/model-docs-24px.svg +0 -10
- package/svg-icons/icons/model-docs-40px.svg +0 -9
- package/svg-icons/icons/model-docs-48px.svg +0 -9
- package/svg-icons/icons/news-20px.svg +0 -7
- package/svg-icons/icons/news-24px.svg +0 -7
- package/svg-icons/icons/news-40px.svg +0 -7
- package/svg-icons/icons/news-48px.svg +0 -7
- package/svg-icons/icons/node-20px.svg +0 -8
- package/svg-icons/icons/node-24px.svg +0 -8
- package/svg-icons/icons/node-40px.svg +0 -8
- package/svg-icons/icons/node-48px.svg +0 -8
- package/svg-icons/icons/notepad-20px.svg +0 -14
- package/svg-icons/icons/notepad-24px.svg +0 -14
- package/svg-icons/icons/notepad-40px.svg +0 -11
- package/svg-icons/icons/notepad-48px.svg +0 -11
- package/svg-icons/icons/ocean-20px.svg +0 -4
- package/svg-icons/icons/ocean-24px.svg +0 -4
- package/svg-icons/icons/ocean-40px.svg +0 -4
- package/svg-icons/icons/ocean-48px.svg +0 -4
- package/svg-icons/icons/organisation-20px.svg +0 -10
- package/svg-icons/icons/organisation-24px.svg +0 -10
- package/svg-icons/icons/organisation-40px.svg +0 -10
- package/svg-icons/icons/organisation-48px.svg +0 -10
- package/svg-icons/icons/overflow-menu-20px.svg +0 -5
- package/svg-icons/icons/overflow-menu-24px.svg +0 -5
- package/svg-icons/icons/overflow-menu-40px.svg +0 -5
- package/svg-icons/icons/overflow-menu-48px.svg +0 -5
- package/svg-icons/icons/pin-20px.svg +0 -6
- package/svg-icons/icons/pin-24px.svg +0 -6
- package/svg-icons/icons/pin-40px.svg +0 -6
- package/svg-icons/icons/pin-48px.svg +0 -6
- package/svg-icons/icons/plus-20px.svg +0 -4
- package/svg-icons/icons/plus-24px.svg +0 -4
- package/svg-icons/icons/plus-40px.svg +0 -4
- package/svg-icons/icons/plus-48px.svg +0 -4
- package/svg-icons/icons/pond-20px.svg +0 -31
- package/svg-icons/icons/pond-24px.svg +0 -31
- package/svg-icons/icons/pond-40px.svg +0 -31
- package/svg-icons/icons/private-eye-20px.svg +0 -5
- package/svg-icons/icons/private-eye-24px.svg +0 -5
- package/svg-icons/icons/private-eye-40px.svg +0 -5
- package/svg-icons/icons/private-eye-48px.svg +0 -5
- package/svg-icons/icons/private-eye-crossed-20px.svg +0 -4
- package/svg-icons/icons/private-eye-crossed-24px.svg +0 -4
- package/svg-icons/icons/private-eye-crossed-40px.svg +0 -4
- package/svg-icons/icons/private-eye-crossed-48px.svg +0 -4
- package/svg-icons/icons/private-lock-20px.svg +0 -15
- package/svg-icons/icons/private-lock-24px.svg +0 -15
- package/svg-icons/icons/private-lock-40px.svg +0 -15
- package/svg-icons/icons/private-lock-48px.svg +0 -15
- package/svg-icons/icons/profile-checkmark-20px.svg +0 -6
- package/svg-icons/icons/profile-checkmark-24px.svg +0 -6
- package/svg-icons/icons/profile-checkmark-40px.svg +0 -6
- package/svg-icons/icons/profile-checkmark-48px.svg +0 -6
- package/svg-icons/icons/profile-circle-20px.svg +0 -3
- package/svg-icons/icons/profile-circle-24px.svg +0 -3
- package/svg-icons/icons/profile-circle-40px.svg +0 -3
- package/svg-icons/icons/profile-circle-48px.svg +0 -3
- package/svg-icons/icons/progress-20px.svg +0 -5
- package/svg-icons/icons/progress-24px.svg +0 -5
- package/svg-icons/icons/progress-40px.svg +0 -5
- package/svg-icons/icons/progress-48px.svg +0 -5
- package/svg-icons/icons/python-48px.svg +0 -4
- package/svg-icons/icons/refresh-20px.svg +0 -4
- package/svg-icons/icons/refresh-24px.svg +0 -4
- package/svg-icons/icons/refresh-40px.svg +0 -4
- package/svg-icons/icons/refresh-48px.svg +0 -4
- package/svg-icons/icons/rename-20px.svg +0 -10
- package/svg-icons/icons/rename-24px.svg +0 -10
- package/svg-icons/icons/rename-40px.svg +0 -10
- package/svg-icons/icons/rename-48px.svg +0 -10
- package/svg-icons/icons/retailer-20px.svg +0 -24
- package/svg-icons/icons/retailer-24px.svg +0 -24
- package/svg-icons/icons/retailer-40px.svg +0 -24
- package/svg-icons/icons/retailer-48px.svg +0 -31
- package/svg-icons/icons/review-20px.svg +0 -15
- package/svg-icons/icons/review-24px.svg +0 -15
- package/svg-icons/icons/review-40px.svg +0 -12
- package/svg-icons/icons/review-48px.svg +0 -12
- package/svg-icons/icons/river-20px.svg +0 -5
- package/svg-icons/icons/river-24px.svg +0 -5
- package/svg-icons/icons/river-40px.svg +0 -5
- package/svg-icons/icons/river-48px.svg +0 -5
- package/svg-icons/icons/save-20px.svg +0 -5
- package/svg-icons/icons/save-24px.svg +0 -5
- package/svg-icons/icons/save-40px.svg +0 -5
- package/svg-icons/icons/save-48px.svg +0 -5
- package/svg-icons/icons/schema-20px.svg +0 -9
- package/svg-icons/icons/schema-24px.svg +0 -21
- package/svg-icons/icons/schema-40px.svg +0 -9
- package/svg-icons/icons/schema-48px.svg +0 -9
- package/svg-icons/icons/search-20px.svg +0 -3
- package/svg-icons/icons/search-24px.svg +0 -3
- package/svg-icons/icons/search-40px.svg +0 -3
- package/svg-icons/icons/search-48px.svg +0 -3
- package/svg-icons/icons/search-with-plus-20px.svg +0 -5
- package/svg-icons/icons/search-with-plus-24px.svg +0 -5
- package/svg-icons/icons/search-with-plus-40px.svg +0 -5
- package/svg-icons/icons/search-with-plus-48px.svg +0 -5
- package/svg-icons/icons/settings-20px.svg +0 -11
- package/svg-icons/icons/settings-24px.svg +0 -11
- package/svg-icons/icons/settings-40px.svg +0 -11
- package/svg-icons/icons/settings-48px.svg +0 -4
- package/svg-icons/icons/share-20px.svg +0 -5
- package/svg-icons/icons/share-24px.svg +0 -5
- package/svg-icons/icons/share-40px.svg +0 -5
- package/svg-icons/icons/share-48px.svg +0 -5
- package/svg-icons/icons/share-socials-20px.svg +0 -7
- package/svg-icons/icons/share-socials-24px.svg +0 -7
- package/svg-icons/icons/share-socials-40px.svg +0 -7
- package/svg-icons/icons/share-socials-48px.svg +0 -7
- package/svg-icons/icons/shrub-20px.svg +0 -19
- package/svg-icons/icons/shrub-24px.svg +0 -19
- package/svg-icons/icons/shrub-40px.svg +0 -19
- package/svg-icons/icons/shrub-48px.svg +0 -19
- package/svg-icons/icons/sign-out-20px.svg +0 -5
- package/svg-icons/icons/sign-out-24px.svg +0 -5
- package/svg-icons/icons/sign-out-40px.svg +0 -5
- package/svg-icons/icons/sign-out-48px.svg +0 -5
- package/svg-icons/icons/socials-gitlab-20px.svg +0 -3
- package/svg-icons/icons/socials-gitlab-24px.svg +0 -3
- package/svg-icons/icons/socials-gitlab-40px.svg +0 -4
- package/svg-icons/icons/socials-gitlab-48px.svg +0 -4
- package/svg-icons/icons/socials-google-20px.svg +0 -3
- package/svg-icons/icons/socials-google-24px.svg +0 -3
- package/svg-icons/icons/socials-google-40px.svg +0 -3
- package/svg-icons/icons/socials-google-48px.svg +0 -3
- package/svg-icons/icons/socials-linkedin-20px.svg +0 -3
- package/svg-icons/icons/socials-linkedin-24px.svg +0 -3
- package/svg-icons/icons/socials-linkedin-40px.svg +0 -3
- package/svg-icons/icons/socials-linkedin-48px.svg +0 -3
- package/svg-icons/icons/socials-linkedin-circle-20px.svg +0 -3
- package/svg-icons/icons/socials-linkedin-circle-24px.svg +0 -3
- package/svg-icons/icons/socials-linkedin-circle-40px.svg +0 -3
- package/svg-icons/icons/socials-linkedin-circle-48px.svg +0 -3
- package/svg-icons/icons/socials-orcid-20px.svg +0 -11
- package/svg-icons/icons/socials-orcid-24px.svg +0 -11
- package/svg-icons/icons/socials-orcid-40px.svg +0 -5
- package/svg-icons/icons/socials-orcid-48px.svg +0 -5
- package/svg-icons/icons/socials-orcid-circle-20px.svg +0 -12
- package/svg-icons/icons/socials-orcid-circle-24px.svg +0 -12
- package/svg-icons/icons/socials-orcid-circle-40px.svg +0 -6
- package/svg-icons/icons/socials-orcid-circle-48px.svg +0 -6
- package/svg-icons/icons/sort-ascending-20px.svg +0 -11
- package/svg-icons/icons/sort-ascending-24px.svg +0 -11
- package/svg-icons/icons/sort-ascending-40px.svg +0 -11
- package/svg-icons/icons/sort-ascending-48px.svg +0 -11
- package/svg-icons/icons/sort-caret-down-filled-16px.svg +0 -3
- package/svg-icons/icons/sort-caret-down-filled-20px.svg +0 -3
- package/svg-icons/icons/sort-caret-down-filled-24px.svg +0 -3
- package/svg-icons/icons/sort-caret-down-filled-40px.svg +0 -3
- package/svg-icons/icons/sort-caret-down-filled-48px.svg +0 -3
- package/svg-icons/icons/sort-caret-stacked-filled-stacked-16px.svg +0 -4
- package/svg-icons/icons/sort-caret-stacked-filled-stacked-20px.svg +0 -4
- package/svg-icons/icons/sort-caret-stacked-filled-stacked-24px.svg +0 -4
- package/svg-icons/icons/sort-caret-stacked-filled-stacked-40px.svg +0 -4
- package/svg-icons/icons/sort-caret-stacked-filled-stacked-48px.svg +0 -4
- package/svg-icons/icons/sort-caret-up-filled-16px.svg +0 -3
- package/svg-icons/icons/sort-caret-up-filled-20px.svg +0 -3
- package/svg-icons/icons/sort-caret-up-filled-24px.svg +0 -3
- package/svg-icons/icons/sort-caret-up-filled-40px.svg +0 -3
- package/svg-icons/icons/sort-caret-up-filled-48px.svg +0 -3
- package/svg-icons/icons/source-20px.svg +0 -10
- package/svg-icons/icons/source-24px.svg +0 -10
- package/svg-icons/icons/source-40px.svg +0 -10
- package/svg-icons/icons/source-48px.svg +0 -10
- package/svg-icons/icons/star-20px.svg +0 -3
- package/svg-icons/icons/star-24px.svg +0 -3
- package/svg-icons/icons/star-40px.svg +0 -3
- package/svg-icons/icons/star-48px.svg +0 -3
- package/svg-icons/icons/table-20px.svg +0 -6
- package/svg-icons/icons/table-24px.svg +0 -6
- package/svg-icons/icons/table-40px.svg +0 -6
- package/svg-icons/icons/table-48px.svg +0 -6
- package/svg-icons/icons/tag-filled-20px.svg +0 -7
- package/svg-icons/icons/tag-filled-24px.svg +0 -7
- package/svg-icons/icons/tag-filled-40px.svg +0 -7
- package/svg-icons/icons/tag-filled-48px.svg +0 -7
- package/svg-icons/icons/target-20px.svg +0 -6
- package/svg-icons/icons/target-24px.svg +0 -6
- package/svg-icons/icons/target-40px.svg +0 -6
- package/svg-icons/icons/target-48px.svg +0 -6
- package/svg-icons/icons/term-20px.svg +0 -9
- package/svg-icons/icons/term-24px.svg +0 -9
- package/svg-icons/icons/term-40px.svg +0 -9
- package/svg-icons/icons/term-48px.svg +0 -9
- package/svg-icons/icons/textform-list-20px.svg +0 -3
- package/svg-icons/icons/textform-list-24px.svg +0 -3
- package/svg-icons/icons/textform-list-40px.svg +0 -3
- package/svg-icons/icons/textform-list-48px.svg +0 -3
- package/svg-icons/icons/tool-20px.svg +0 -11
- package/svg-icons/icons/tool-24px.svg +0 -11
- package/svg-icons/icons/tool-40px.svg +0 -11
- package/svg-icons/icons/tool-48px.svg +0 -11
- package/svg-icons/icons/trash-20px.svg +0 -11
- package/svg-icons/icons/trash-24px.svg +0 -11
- package/svg-icons/icons/trash-40px.svg +0 -11
- package/svg-icons/icons/trash-48px.svg +0 -8
- package/svg-icons/icons/tree-20px.svg +0 -6
- package/svg-icons/icons/tree-24px.svg +0 -6
- package/svg-icons/icons/tree-40px.svg +0 -6
- package/svg-icons/icons/tree-48px.svg +0 -6
- package/svg-icons/icons/turn-phone-24px.svg +0 -27
- package/svg-icons/icons/unit-20px.svg +0 -6
- package/svg-icons/icons/unit-24px.svg +0 -6
- package/svg-icons/icons/unit-40px.svg +0 -6
- package/svg-icons/icons/unit-48px.svg +0 -6
- package/svg-icons/icons/upload-20px.svg +0 -5
- package/svg-icons/icons/upload-24px.svg +0 -5
- package/svg-icons/icons/upload-40px.svg +0 -5
- package/svg-icons/icons/upload-48px.svg +0 -5
- package/svg-icons/icons/video-20px.svg +0 -4
- package/svg-icons/icons/video-24px.svg +0 -4
- package/svg-icons/icons/video-40px.svg +0 -4
- package/svg-icons/icons/video-48px.svg +0 -4
- package/svg-icons/icons/xmark-16px.svg +0 -4
- package/svg-icons/icons/xmark-20px.svg +0 -4
- package/svg-icons/icons/xmark-24px.svg +0 -4
- package/svg-icons/icons/xmark-40px.svg +0 -4
- package/svg-icons/icons/xmark-48px.svg +0 -4
- package/svg-icons/icons/xmark-circle-20px.svg +0 -5
- package/svg-icons/icons/xmark-circle-24px.svg +0 -5
- package/svg-icons/icons/xmark-circle-40px.svg +0 -5
- package/svg-icons/icons/xmark-circle-48px.svg +0 -5
- package/svg-icons/icons/xmark-circle-filled-20px.svg +0 -5
- package/svg-icons/icons/xmark-circle-filled-24px.svg +0 -5
- package/svg-icons/icons/xmark-circle-filled-40px.svg +0 -5
- package/svg-icons/icons/xmark-circle-filled-48px.svg +0 -5
- package/svg-icons/icons/xmark-circle-filled-with-shadow-20px.svg +0 -19
- package/svg-icons/icons/xmark-circle-filled-with-shadow-24px.svg +0 -19
- package/svg-icons/icons/xmark-circle-filled-with-shadow-40px.svg +0 -19
- package/svg-icons/icons/xmark-circle-filled-with-shadow-48px.svg +0 -19
- package/svg-icons/icons/zip-20px.svg +0 -16
- package/svg-icons/icons/zip-24px.svg +0 -16
- package/svg-icons/icons/zip-40px.svg +0 -16
- package/svg-icons/icons/zip-48px.svg +0 -16
- package/svg-icons/icons.json +0 -2721
- package/svg-icons/svg-icons.module.d.ts +0 -9
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, InjectionToken, inject, input, computed, HostBinding, Component as Component$1, model, output, signal, effect, ChangeDetectionStrategy, NgZone, ElementRef, Input, Directive, Pipe, viewChild, HostListener, ViewEncapsulation, EventEmitter as EventEmitter$1, Output, ContentChild, DestroyRef,
|
|
2
|
+
import { Injectable, InjectionToken, inject, input, computed, HostBinding, Component as Component$1, model, output, signal, effect, ChangeDetectionStrategy, NgZone, ElementRef, Input, Directive, Pipe, viewChild, HostListener, ViewEncapsulation, EventEmitter as EventEmitter$1, Output, ContentChild, DestroyRef, ViewChild, viewChildren, forwardRef } from '@angular/core';
|
|
3
3
|
import { toSignal, toObservable, outputFromObservable, takeUntilDestroyed, rxResource } from '@angular/core/rxjs-interop';
|
|
4
4
|
import * as i1 from '@angular/forms';
|
|
5
5
|
import { UntypedFormBuilder, Validators, FormsModule, ReactiveFormsModule, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
6
|
-
import { NgTemplateOutlet, NgClass, DecimalPipe, KeyValuePipe, DatePipe,
|
|
6
|
+
import { NgTemplateOutlet, NgClass, DecimalPipe, KeyValuePipe, DatePipe, DOCUMENT, NgStyle, UpperCasePipe, JsonPipe, AsyncPipe } from '@angular/common';
|
|
7
7
|
import * as i1$2 from '@ng-bootstrap/ng-bootstrap';
|
|
8
8
|
import { NgbActiveModal, NgbHighlight, NgbTooltip, NgbDropdown, NgbDropdownMenu, NgbDropdownToggle, NgbDropdownItem, NgbTypeahead, NgbPopover, NgbModal, NgbTooltipModule, NgbDropdownModule, NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap';
|
|
9
9
|
import { catchError, map, debounceTime, distinctUntilChanged, tap, switchMap, mergeMap, shareReplay, delay, take, first, filter, startWith, skip, throttleTime, skipUntil, toArray, reduce, mergeAll, distinct, groupBy } from 'rxjs/operators';
|
|
@@ -11,8 +11,6 @@ import { of, zip, ReplaySubject, timer, combineLatest, pipe, fromEvent, EMPTY, a
|
|
|
11
11
|
import { HttpClient } from '@angular/common/http';
|
|
12
12
|
import get from 'lodash.get';
|
|
13
13
|
import { SCHEMA_VERSION, SchemaType, NodeType, TermTermType, productTermTermType, nestedSearchableKeys, SiteSiteType, EmissionMethodTier, isExpandable, sortKeysByType, isTypeNode, BlankNodesKey, impactAssessmentTermTermType, measurementTermTermType, emissionTermTermType, inputTermTermType, CycleFunctionalUnit, NonBlankNodesKey, jsonldPath, isTypeValid, isTypeBlankNode, typeToSchemaType, managementTermTermType } from '@hestia-earth/schema';
|
|
14
|
-
import * as i1$3 from 'angular-svg-icon';
|
|
15
|
-
import { SvgIconComponent, AngularSvgIconModule } from 'angular-svg-icon';
|
|
16
14
|
import merge from 'lodash.merge';
|
|
17
15
|
import Chart, { Chart as Chart$1 } from 'chart.js';
|
|
18
16
|
import { toPrecision, toComma, isUndefined, isNumber, getPercentileValue, isEmpty, unique, monthsBefore, keyToLabel, isEqual as isEqual$2, sum, toDashCase, diffInDays } from '@hestia-earth/utils';
|
|
@@ -47,8 +45,6 @@ import * as i1$1 from 'angular-resizable-element';
|
|
|
47
45
|
import { ResizableModule } from 'angular-resizable-element';
|
|
48
46
|
import ChartDataLabels from 'chartjs-plugin-datalabels';
|
|
49
47
|
import * as semver from 'semver';
|
|
50
|
-
import * as i2 from 'angular-svg-icon-preloader';
|
|
51
|
-
import { AngularSvgIconPreloaderModule } from 'angular-svg-icon-preloader';
|
|
52
48
|
import { parse } from 'papaparse';
|
|
53
49
|
import omit from 'lodash.omit';
|
|
54
50
|
import { validationsByMessage } from '@hestia-earth/data-validation';
|
|
@@ -482,8 +478,8 @@ class HESvgIconComponent {
|
|
|
482
478
|
this.name = input.required();
|
|
483
479
|
this.size = input(defaultSvgIconSize);
|
|
484
480
|
this.animation = input();
|
|
485
|
-
this.svgClass = input();
|
|
486
481
|
this.iconName = computed(() => [this.name(), this.size()].filter(Boolean).join('-'));
|
|
482
|
+
this.iconPath = computed(() => `#${this.iconName()}px`);
|
|
487
483
|
}
|
|
488
484
|
get _width() {
|
|
489
485
|
return `${this.size()}px`;
|
|
@@ -492,13 +488,13 @@ class HESvgIconComponent {
|
|
|
492
488
|
return `${this.size()}px`;
|
|
493
489
|
}
|
|
494
490
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: HESvgIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
495
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.1.4", type: HESvgIconComponent, isStandalone: true, selector: "he-svg-icon", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, animation: { classPropertyName: "animation", publicName: "animation", isSignal: true, isRequired: false, transformFunction: null }
|
|
491
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.1.4", type: HESvgIconComponent, isStandalone: true, selector: "he-svg-icon", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, animation: { classPropertyName: "animation", publicName: "animation", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.icon-size": "size()", "style.width": "this._width", "style.height": "this._height" } }, ngImport: i0, template: "<svg [attr.animation]=\"animation()\">\n <use [attr.href]=\"iconPath()\"></use>\n</svg>\n", styles: ["@keyframes spinner{to{transform:rotate(360deg)}}:host{display:inline-block;color:inherit;vertical-align:text-top}svg{color:inherit;width:inherit;height:inherit}svg[animation=spin]>svg{animation:spinner 2s linear infinite}\n"] }); }
|
|
496
492
|
}
|
|
497
493
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: HESvgIconComponent, decorators: [{
|
|
498
494
|
type: Component$1,
|
|
499
|
-
args: [{ selector: 'he-svg-icon', imports: [
|
|
495
|
+
args: [{ selector: 'he-svg-icon', imports: [], host: {
|
|
500
496
|
'[attr.icon-size]': 'size()'
|
|
501
|
-
}, template: "<svg
|
|
497
|
+
}, template: "<svg [attr.animation]=\"animation()\">\n <use [attr.href]=\"iconPath()\"></use>\n</svg>\n", styles: ["@keyframes spinner{to{transform:rotate(360deg)}}:host{display:inline-block;color:inherit;vertical-align:text-top}svg{color:inherit;width:inherit;height:inherit}svg[animation=spin]>svg{animation:spinner 2s linear infinite}\n"] }]
|
|
502
498
|
}], propDecorators: { _width: [{
|
|
503
499
|
type: HostBinding,
|
|
504
500
|
args: ['style.width']
|
|
@@ -576,7 +572,7 @@ class BibliographiesSearchConfirmComponent {
|
|
|
576
572
|
this.activeModal?.close(value);
|
|
577
573
|
}
|
|
578
574
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: BibliographiesSearchConfirmComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
579
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: BibliographiesSearchConfirmComponent, isStandalone: true, selector: "he-bibliographies-search-confirm", inputs: { search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null }, searchSources: { classPropertyName: "searchSources", publicName: "searchSources", isSignal: true, isRequired: false, transformFunction: null }, searchBibliographies: { classPropertyName: "searchBibliographies", publicName: "searchBibliographies", isSignal: true, isRequired: false, transformFunction: null }, searchBy: { classPropertyName: "searchBy", publicName: "searchBy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { search: "searchChange", searchSources: "searchSourcesChange", searchBibliographies: "searchBibliographiesChange", searchBy: "searchByChange", closed: "closed" }, ngImport: i0, template: "<div class=\"modal is-large is-active\">\n <div class=\"modal-background\"></div>\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">Search Bibliographies</p>\n <button class=\"delete is-medium\" aria-label=\"close\" type=\"button\" (click)=\"cancel()\"></button>\n </header>\n <section class=\"modal-card-body\">\n <form [formGroup]=\"formGroup\" novalidate>\n <div class=\"field has-addons\">\n <div class=\"control is-expanded has-icons-right\">\n <input\n class=\"input search-input\"\n [attr.placeholder]=\"'Search bibliography by ' + searchBy()\"\n formControlName=\"search\"\n name=\"bibliography\"\n autocomplete=\"off\"\n (focus)=\"searchFocus($event)\" />\n <a class=\"icon is-small is-right\" [class.is-hidden]=\"loading()\" (click)=\"resetSearch()\">\n <he-svg-icon name=\"xmark\" />\n </a>\n\n <span class=\"icon is-right has-text-grey-dark\" [class.is-hidden]=\"!loading()\">\n <he-svg-icon name=\"loading\" animation=\"spin\" size=\"20\" />\n </span>\n </div>\n </div>\n </form>\n\n <div class=\"is-mt-2\">\n <span [class.is-hidden]=\"loading() || !searchControl?.value || hasResults()\">\n No bibliographies found matching query.\n </span>\n\n <ul>\n @for (result of results(); track result) {\n <li>\n <a\n class=\"is-block p-1 search-result\"\n (click)=\"selectedResult.set(result)\"\n [class.is-active]=\"selectedResult() === result\">\n <ngb-highlight [result]=\"result.bibliography?.title ?? result.title\" [term]=\"searchControl?.value\" />\n <span class=\"px-1\">-</span>\n <span class=\"px-1\">\n <i>{{ result.name }}</i>\n </span>\n @if (result.bibliography?.documentDOI || result.documentDOI) {\n <span class=\"px-1\">\n -\n <b>documentDOI:</b>\n </span>\n }\n <ngb-highlight\n [result]=\"result.bibliography?.documentDOI ?? result.documentDOI\"\n [term]=\"searchControl?.value\" />\n @if (result.bibliography?.scopus || result.scopus) {\n <span class=\"px-1\">\n -\n <b>scopus:</b>\n </span>\n }\n <ngb-highlight [result]=\"result.bibliography?.scopus ?? result.scopus\" [term]=\"searchControl?.value\" />\n <span>\n <ng-container\n *ngTemplateOutlet=\"\n mendeleyLink;\n context: { $implicit: result.bibliography?.mendeleyID ?? result.mendeleyID }\n \" />\n </span>\n </a>\n </li>\n }\n </ul>\n </div>\n </section>\n <footer class=\"modal-card-foot\">\n <button class=\"button is-primary\" (click)=\"confirm()\" [disabled]=\"!selectedResult()\">\n <span>Confirm</span>\n </button>\n <button class=\"button is-ghost\" (click)=\"cancel()\">\n <span>Close</span>\n </button>\n </footer>\n </div>\n</div>\n\n<ng-template #mendeleyLink let-id>\n @if (id) {\n <a [href]=\"'https://www.mendeley.com/catalogue/' + id\" target=\"_blank\" (click)=\"$event.stopPropagation()\">\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n </a>\n }\n</ng-template>\n", styles: ["ngb-highlight,span{vertical-align:middle;white-space:normal;width:auto}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: NgbHighlight, selector: "ngb-highlight", inputs: ["highlightClass", "result", "term", "accentSensitive"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
575
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: BibliographiesSearchConfirmComponent, isStandalone: true, selector: "he-bibliographies-search-confirm", inputs: { search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null }, searchSources: { classPropertyName: "searchSources", publicName: "searchSources", isSignal: true, isRequired: false, transformFunction: null }, searchBibliographies: { classPropertyName: "searchBibliographies", publicName: "searchBibliographies", isSignal: true, isRequired: false, transformFunction: null }, searchBy: { classPropertyName: "searchBy", publicName: "searchBy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { search: "searchChange", searchSources: "searchSourcesChange", searchBibliographies: "searchBibliographiesChange", searchBy: "searchByChange", closed: "closed" }, ngImport: i0, template: "<div class=\"modal is-large is-active\">\n <div class=\"modal-background\"></div>\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">Search Bibliographies</p>\n <button class=\"delete is-medium\" aria-label=\"close\" type=\"button\" (click)=\"cancel()\"></button>\n </header>\n <section class=\"modal-card-body\">\n <form [formGroup]=\"formGroup\" novalidate>\n <div class=\"field has-addons\">\n <div class=\"control is-expanded has-icons-right\">\n <input\n class=\"input search-input\"\n [attr.placeholder]=\"'Search bibliography by ' + searchBy()\"\n formControlName=\"search\"\n name=\"bibliography\"\n autocomplete=\"off\"\n (focus)=\"searchFocus($event)\" />\n <a class=\"icon is-small is-right\" [class.is-hidden]=\"loading()\" (click)=\"resetSearch()\">\n <he-svg-icon name=\"xmark\" />\n </a>\n\n <span class=\"icon is-right has-text-grey-dark\" [class.is-hidden]=\"!loading()\">\n <he-svg-icon name=\"loading\" animation=\"spin\" size=\"20\" />\n </span>\n </div>\n </div>\n </form>\n\n <div class=\"is-mt-2\">\n <span [class.is-hidden]=\"loading() || !searchControl?.value || hasResults()\">\n No bibliographies found matching query.\n </span>\n\n <ul>\n @for (result of results(); track result) {\n <li>\n <a\n class=\"is-block p-1 search-result\"\n (click)=\"selectedResult.set(result)\"\n [class.is-active]=\"selectedResult() === result\">\n <ngb-highlight [result]=\"result.bibliography?.title ?? result.title\" [term]=\"searchControl?.value\" />\n <span class=\"px-1\">-</span>\n <span class=\"px-1\">\n <i>{{ result.name }}</i>\n </span>\n @if (result.bibliography?.documentDOI || result.documentDOI) {\n <span class=\"px-1\">\n -\n <b>documentDOI:</b>\n </span>\n }\n <ngb-highlight\n [result]=\"result.bibliography?.documentDOI ?? result.documentDOI\"\n [term]=\"searchControl?.value\" />\n @if (result.bibliography?.scopus || result.scopus) {\n <span class=\"px-1\">\n -\n <b>scopus:</b>\n </span>\n }\n <ngb-highlight [result]=\"result.bibliography?.scopus ?? result.scopus\" [term]=\"searchControl?.value\" />\n <span>\n <ng-container\n *ngTemplateOutlet=\"\n mendeleyLink;\n context: { $implicit: result.bibliography?.mendeleyID ?? result.mendeleyID }\n \" />\n </span>\n </a>\n </li>\n }\n </ul>\n </div>\n </section>\n <footer class=\"modal-card-foot\">\n <button class=\"button is-primary\" (click)=\"confirm()\" [disabled]=\"!selectedResult()\">\n <span>Confirm</span>\n </button>\n <button class=\"button is-ghost\" (click)=\"cancel()\">\n <span>Close</span>\n </button>\n </footer>\n </div>\n</div>\n\n<ng-template #mendeleyLink let-id>\n @if (id) {\n <a [href]=\"'https://www.mendeley.com/catalogue/' + id\" target=\"_blank\" (click)=\"$event.stopPropagation()\">\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n </a>\n }\n</ng-template>\n", styles: ["ngb-highlight,span{vertical-align:middle;white-space:normal;width:auto}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: NgbHighlight, selector: "ngb-highlight", inputs: ["highlightClass", "result", "term", "accentSensitive"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
580
576
|
}
|
|
581
577
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: BibliographiesSearchConfirmComponent, decorators: [{
|
|
582
578
|
type: Component$1,
|
|
@@ -2236,7 +2232,7 @@ class BlankNodeStateComponent {
|
|
|
2236
2232
|
this.modelUrl = computed(() => guideModelUrl(this.model()));
|
|
2237
2233
|
}
|
|
2238
2234
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: BlankNodeStateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2239
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: BlankNodeStateComponent, isStandalone: true, selector: "he-blank-node-state", inputs: { dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null }, nodeType: { classPropertyName: "nodeType", publicName: "nodeType", isSignal: true, isRequired: false, transformFunction: null }, dataKey: { classPropertyName: "dataKey", publicName: "dataKey", isSignal: true, isRequired: false, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: false, transformFunction: null }, node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, linkClass: { classPropertyName: "linkClass", publicName: "linkClass", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (show()) {\n @for (star of stars(); track star) {\n <span>*</span>\n }\n @if (stars().length === 0 || currentState() === NodeKeyState.unchanged) {\n <span>\u2020</span>\n }\n @if (showLink() && modelUrl()) {\n <a\n class=\"is-inline-block is-ml-2\"\n [ngClass]=\"linkClass()\"\n [href]=\"modelUrl()\"\n target=\"_blank\"\n (click)=\"$event.stopPropagation()\">\n <span>Docs</span>\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n </a>\n }\n}\n", styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
2235
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: BlankNodeStateComponent, isStandalone: true, selector: "he-blank-node-state", inputs: { dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null }, nodeType: { classPropertyName: "nodeType", publicName: "nodeType", isSignal: true, isRequired: false, transformFunction: null }, dataKey: { classPropertyName: "dataKey", publicName: "dataKey", isSignal: true, isRequired: false, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: false, transformFunction: null }, node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, linkClass: { classPropertyName: "linkClass", publicName: "linkClass", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (show()) {\n @for (star of stars(); track star) {\n <span>*</span>\n }\n @if (stars().length === 0 || currentState() === NodeKeyState.unchanged) {\n <span>\u2020</span>\n }\n @if (showLink() && modelUrl()) {\n <a\n class=\"is-inline-block is-ml-2\"\n [ngClass]=\"linkClass()\"\n [href]=\"modelUrl()\"\n target=\"_blank\"\n (click)=\"$event.stopPropagation()\">\n <span>Docs</span>\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n </a>\n }\n}\n", styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2240
2236
|
}
|
|
2241
2237
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: BlankNodeStateComponent, decorators: [{
|
|
2242
2238
|
type: Component$1,
|
|
@@ -2330,7 +2326,7 @@ class ClipboardComponent {
|
|
|
2330
2326
|
}
|
|
2331
2327
|
}
|
|
2332
2328
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ClipboardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2333
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.1.4", type: ClipboardComponent, isStandalone: true, selector: "he-clipboard", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, hideText: { classPropertyName: "hideText", publicName: "hideText", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, clipboardClass: { classPropertyName: "clipboardClass", publicName: "clipboardClass", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "window:copy": "onCopy($event)" } }, viewQueries: [{ propertyName: "valueNode", first: true, predicate: ["valueNode"], descendants: true, isSignal: true }, { propertyName: "tooltip", first: true, predicate: ["t"], descendants: true, isSignal: true }], ngImport: i0, template: "<span #valueNode [class.is-hidden]=\"hideText()\">{{ value() }}</span>\n\n<span\n [class]=\"clipboardClass()\"\n pointer\n (click)=\"!disabled() && onClick($event)\"\n ngbTooltip=\"Copied!\"\n triggers=\"manual\"\n placement=\"bottom\"\n container=\"body\"\n #t=\"ngbTooltip\">\n <he-svg-icon [name]=\"icon()\" [size]=\"size()\" />\n</span>\n", styles: [".is-small he-svg-icon{height:16px!important;width:auto!important}\n"], dependencies: [{ 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"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
2329
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.1.4", type: ClipboardComponent, isStandalone: true, selector: "he-clipboard", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, hideText: { classPropertyName: "hideText", publicName: "hideText", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, clipboardClass: { classPropertyName: "clipboardClass", publicName: "clipboardClass", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "window:copy": "onCopy($event)" } }, viewQueries: [{ propertyName: "valueNode", first: true, predicate: ["valueNode"], descendants: true, isSignal: true }, { propertyName: "tooltip", first: true, predicate: ["t"], descendants: true, isSignal: true }], ngImport: i0, template: "<span #valueNode [class.is-hidden]=\"hideText()\">{{ value() }}</span>\n\n<span\n [class]=\"clipboardClass()\"\n pointer\n (click)=\"!disabled() && onClick($event)\"\n ngbTooltip=\"Copied!\"\n triggers=\"manual\"\n placement=\"bottom\"\n container=\"body\"\n #t=\"ngbTooltip\">\n <he-svg-icon [name]=\"icon()\" [size]=\"size()\" />\n</span>\n", styles: [".is-small he-svg-icon{height:16px!important;width:auto!important}\n"], dependencies: [{ 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"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }] }); }
|
|
2334
2330
|
}
|
|
2335
2331
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ClipboardComponent, decorators: [{
|
|
2336
2332
|
type: Component$1,
|
|
@@ -2346,7 +2342,7 @@ class CollapsibleBoxComponent {
|
|
|
2346
2342
|
this.open = model(true);
|
|
2347
2343
|
}
|
|
2348
2344
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: CollapsibleBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2349
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: CollapsibleBoxComponent, isStandalone: true, selector: "he-collapsible-box", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange" }, host: { properties: { "class": "this.hostClass" } }, ngImport: i0, template: "<div class=\"is-flex is-flex-direction-column is-gap-24\">\n <div>\n <div class=\"columns is-mobile is-vcentered has-text-secondary is-my-0\">\n <div class=\"column is-py-0\">\n <h2 class=\"has-text-weight-bold\">\n <ng-content select=\"[box-title]\" />\n </h2>\n </div>\n <div class=\"column is-py-0 is-narrow\" (click)=\"open.set(!open())\" pointer>\n <he-svg-icon [name]=\"open() ? 'chevron-up' : 'chevron-down'\" />\n </div>\n </div>\n\n <hr class=\"section-divider w-100 is-mt-2 is-mb-0\" />\n </div>\n\n @if (open()) {\n <ng-content select=\"[box-content]\" />\n }\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
2345
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: CollapsibleBoxComponent, isStandalone: true, selector: "he-collapsible-box", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange" }, host: { properties: { "class": "this.hostClass" } }, ngImport: i0, template: "<div class=\"is-flex is-flex-direction-column is-gap-24\">\n <div>\n <div class=\"columns is-mobile is-vcentered has-text-secondary is-my-0\">\n <div class=\"column is-py-0\">\n <h2 class=\"has-text-weight-bold\">\n <ng-content select=\"[box-title]\" />\n </h2>\n </div>\n <div class=\"column is-py-0 is-narrow\" (click)=\"open.set(!open())\" pointer>\n <he-svg-icon [name]=\"open() ? 'chevron-up' : 'chevron-down'\" />\n </div>\n </div>\n\n <hr class=\"section-divider w-100 is-mt-2 is-mb-0\" />\n </div>\n\n @if (open()) {\n <ng-content select=\"[box-content]\" />\n }\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }] }); }
|
|
2350
2346
|
}
|
|
2351
2347
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: CollapsibleBoxComponent, decorators: [{
|
|
2352
2348
|
type: Component$1,
|
|
@@ -2600,7 +2596,7 @@ class NavigationMenuComponent {
|
|
|
2600
2596
|
setTimeout(() => this.closed.emit(), 200);
|
|
2601
2597
|
}
|
|
2602
2598
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NavigationMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2603
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NavigationMenuComponent, isStandalone: true, selector: "he-navigation-menu", inputs: { links: { classPropertyName: "links", publicName: "links", isSignal: true, isRequired: false, transformFunction: null }, sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null }, collapsible: { classPropertyName: "collapsible", publicName: "collapsible", isSignal: true, isRequired: false, transformFunction: null }, routerLinkMatchOptions: { classPropertyName: "routerLinkMatchOptions", publicName: "routerLinkMatchOptions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, host: { classAttribute: "no-print navigation-menu" }, ngImport: i0, template: "<aside\n class=\"is-flex is-flex-direction-column is-gap-12 is-overflow-hidden is-py-desktop-3 | menu\"\n [class.sticky]=\"sticky()\">\n <ng-content select=\"[header]\" />\n\n <div class=\"is-flex is-flex-direction-column is-gap-4\">\n @for (link of links(); track trackByLink(link)) {\n <ng-container *ngTemplateOutlet=\"linkItem; context: { link, parentLinks: [], level: 1 }\" />\n }\n </div>\n</aside>\n\n<ng-template #linkExpandIcon let-link>\n @if (isCollapsible(link)) {\n <he-svg-icon\n [name]=\"link.expanded ? 'chevron-down' : 'chevron-right'\"\n class=\"is-inline-block is-clickable\"\n size=\"20\"\n (click)=\"toggleLink($event, link)\" />\n }\n</ng-template>\n\n<ng-template #linkContent let-link=\"link\" let-level=\"level\">\n @if (level === 1) {\n @if (link.icon) {\n <he-svg-icon [name]=\"link.icon\" size=\"20\" class=\"is-inline-block has-text-secondary\" />\n } @else if (hasPrimaryIcons()) {\n <span class=\"primary-missing-icon\"> </span>\n }\n }\n <span class=\"is-flex is-flex-grow-1 is-align-self-center\" [innerHTML]=\"link.title\"></span>\n <ng-container *ngTemplateOutlet=\"linkExpandIcon; context: { $implicit: link }\" />\n</ng-template>\n\n<ng-template #linkItemChildren let-link=\"link\" let-parentLinks=\"parentLinks\" let-level=\"level\">\n @let childParents = concatLinks(link, parentLinks);\n @if (isCollapsible(link)) {\n <div\n class=\"is-flex is-flex-direction-column is-align-items-stretch | he-menu-child-items\"\n [class.is-hidden]=\"!link.expanded\">\n @for (childLink of link.links; track trackByLink(childLink)) {\n <ng-container\n *ngTemplateOutlet=\"linkItem; context: { link: childLink, parentLinks: childParents, level: level + 1 }\" />\n }\n </div>\n }\n</ng-template>\n\n<ng-template #linkItem let-link=\"link\" let-parentLinks=\"parentLinks\" let-level=\"level\">\n <div\n class=\"is-flex is-align-items-center | he-menu-item\"\n [attr.data-menu-level]=\"level\"\n (click)=\"toggleLink($event, link)\">\n <a\n class=\"is-flex is-flex-grow-1 is-align-self-stretch is-align-items-center is-gap-8 has-text-secondary | he-menu-label\"\n [class.he-menu-item-selectable]=\"!!link?.url\"\n (click)=\"link.url ? close() : null\"\n [routerLink]=\"link.url\"\n [queryParams]=\"link.queryParams\"\n [fragment]=\"link.fragment\"\n routerLinkActive=\"link-active\"\n [routerLinkActiveOptions]=\"linkActiveOptions(link, level)\"\n (isActiveChange)=\"$event && linksActiveChange(link, parentLinks)\">\n <ng-container *ngTemplateOutlet=\"linkContent; context: { link, level }\" />\n </a>\n </div>\n <ng-container *ngTemplateOutlet=\"linkItemChildren; context: { link, parentLinks, level }\" />\n</ng-template>\n", styles: [".navigation-menu{width:100%;display:block}.navigation-menu .menu{font-size:.875rem;line-height:16px;color:#193957;font-weight:400;width:100%!important;max-width:100%!important}@media screen and (min-width:1024px){.navigation-menu .menu{width:14rem!important;min-width:14rem!important;max-width:14rem!important;border-style:solid;border-color:#ffc000;border-width:1px 0}}.navigation-menu .menu.fixed-top{transform:translate3d(0,6.75rem,0)}.navigation-menu .menu.sticky{position:sticky;top:6.75rem}.navigation-menu a{text-decoration:none!important}.navigation-menu a:focus,.navigation-menu a:active{outline:0!important}.navigation-menu .cursor-default{cursor:default!important}.navigation-menu .primary-missing-icon{height:20px;width:20px;min-width:20px}.navigation-menu .he-menu-item{padding:1px 0}.navigation-menu .he-menu-item .he-menu-label{height:28px;border-radius:3px;padding:4px}.navigation-menu .he-menu-item[data-menu-level=\"1\"] span{font-weight:700}.navigation-menu .he-menu-item[data-menu-level=\"1\"]+.he-menu-child-items{padding-left:14px}.navigation-menu .he-menu-item[data-menu-level=\"2\"]{padding-left:14px;border-left:1px solid #ffc000}.navigation-menu .he-menu-item[data-menu-level=\"2\"]+.he-menu-child-items{padding-left:28px}.navigation-menu .he-menu-item-selectable:not(.link-active):hover{background-color:#fefaef}.navigation-menu .he-menu-child-items{padding-left:14px}.navigation-menu .link-active{background-color:#ffe8a3;color:#193957!important}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
2599
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NavigationMenuComponent, isStandalone: true, selector: "he-navigation-menu", inputs: { links: { classPropertyName: "links", publicName: "links", isSignal: true, isRequired: false, transformFunction: null }, sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null }, collapsible: { classPropertyName: "collapsible", publicName: "collapsible", isSignal: true, isRequired: false, transformFunction: null }, routerLinkMatchOptions: { classPropertyName: "routerLinkMatchOptions", publicName: "routerLinkMatchOptions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, host: { classAttribute: "no-print navigation-menu" }, ngImport: i0, template: "<aside\n class=\"is-flex is-flex-direction-column is-gap-12 is-overflow-hidden is-py-desktop-3 | menu\"\n [class.sticky]=\"sticky()\">\n <ng-content select=\"[header]\" />\n\n <div class=\"is-flex is-flex-direction-column is-gap-4\">\n @for (link of links(); track trackByLink(link)) {\n <ng-container *ngTemplateOutlet=\"linkItem; context: { link, parentLinks: [], level: 1 }\" />\n }\n </div>\n</aside>\n\n<ng-template #linkExpandIcon let-link>\n @if (isCollapsible(link)) {\n <he-svg-icon\n [name]=\"link.expanded ? 'chevron-down' : 'chevron-right'\"\n class=\"is-inline-block is-clickable\"\n size=\"20\"\n (click)=\"toggleLink($event, link)\" />\n }\n</ng-template>\n\n<ng-template #linkContent let-link=\"link\" let-level=\"level\">\n @if (level === 1) {\n @if (link.icon) {\n <he-svg-icon [name]=\"link.icon\" size=\"20\" class=\"is-inline-block has-text-secondary\" />\n } @else if (hasPrimaryIcons()) {\n <span class=\"primary-missing-icon\"> </span>\n }\n }\n <span class=\"is-flex is-flex-grow-1 is-align-self-center\" [innerHTML]=\"link.title\"></span>\n <ng-container *ngTemplateOutlet=\"linkExpandIcon; context: { $implicit: link }\" />\n</ng-template>\n\n<ng-template #linkItemChildren let-link=\"link\" let-parentLinks=\"parentLinks\" let-level=\"level\">\n @let childParents = concatLinks(link, parentLinks);\n @if (isCollapsible(link)) {\n <div\n class=\"is-flex is-flex-direction-column is-align-items-stretch | he-menu-child-items\"\n [class.is-hidden]=\"!link.expanded\">\n @for (childLink of link.links; track trackByLink(childLink)) {\n <ng-container\n *ngTemplateOutlet=\"linkItem; context: { link: childLink, parentLinks: childParents, level: level + 1 }\" />\n }\n </div>\n }\n</ng-template>\n\n<ng-template #linkItem let-link=\"link\" let-parentLinks=\"parentLinks\" let-level=\"level\">\n <div\n class=\"is-flex is-align-items-center | he-menu-item\"\n [attr.data-menu-level]=\"level\"\n (click)=\"toggleLink($event, link)\">\n <a\n class=\"is-flex is-flex-grow-1 is-align-self-stretch is-align-items-center is-gap-8 has-text-secondary | he-menu-label\"\n [class.he-menu-item-selectable]=\"!!link?.url\"\n (click)=\"link.url ? close() : null\"\n [routerLink]=\"link.url\"\n [queryParams]=\"link.queryParams\"\n [fragment]=\"link.fragment\"\n routerLinkActive=\"link-active\"\n [routerLinkActiveOptions]=\"linkActiveOptions(link, level)\"\n (isActiveChange)=\"$event && linksActiveChange(link, parentLinks)\">\n <ng-container *ngTemplateOutlet=\"linkContent; context: { link, level }\" />\n </a>\n </div>\n <ng-container *ngTemplateOutlet=\"linkItemChildren; context: { link, parentLinks, level }\" />\n</ng-template>\n", styles: [".navigation-menu{width:100%;display:block}.navigation-menu .menu{font-size:.875rem;line-height:16px;color:#193957;font-weight:400;width:100%!important;max-width:100%!important}@media screen and (min-width:1024px){.navigation-menu .menu{width:14rem!important;min-width:14rem!important;max-width:14rem!important;border-style:solid;border-color:#ffc000;border-width:1px 0}}.navigation-menu .menu.fixed-top{transform:translate3d(0,6.75rem,0)}.navigation-menu .menu.sticky{position:sticky;top:6.75rem}.navigation-menu a{text-decoration:none!important}.navigation-menu a:focus,.navigation-menu a:active{outline:0!important}.navigation-menu .cursor-default{cursor:default!important}.navigation-menu .primary-missing-icon{height:20px;width:20px;min-width:20px}.navigation-menu .he-menu-item{padding:1px 0}.navigation-menu .he-menu-item .he-menu-label{height:28px;border-radius:3px;padding:4px}.navigation-menu .he-menu-item[data-menu-level=\"1\"] span{font-weight:700}.navigation-menu .he-menu-item[data-menu-level=\"1\"]+.he-menu-child-items{padding-left:14px}.navigation-menu .he-menu-item[data-menu-level=\"2\"]{padding-left:14px;border-left:1px solid #ffc000}.navigation-menu .he-menu-item[data-menu-level=\"2\"]+.he-menu-child-items{padding-left:28px}.navigation-menu .he-menu-item-selectable:not(.link-active):hover{background-color:#fefaef}.navigation-menu .he-menu-child-items{padding-left:14px}.navigation-menu .link-active{background-color:#ffe8a3;color:#193957!important}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
2604
2600
|
}
|
|
2605
2601
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NavigationMenuComponent, decorators: [{
|
|
2606
2602
|
type: Component$1,
|
|
@@ -2821,7 +2817,7 @@ class DrawerContainerComponent {
|
|
|
2821
2817
|
return parseInt(padding, 10) + parseInt(margin, 10);
|
|
2822
2818
|
}
|
|
2823
2819
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: DrawerContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2824
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: DrawerContainerComponent, isStandalone: true, selector: "he-drawer-container", inputs: { compactBreakpoint: { classPropertyName: "compactBreakpoint", publicName: "compactBreakpoint", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, resizable: { classPropertyName: "resizable", publicName: "resizable", isSignal: true, isRequired: false, transformFunction: null }, collapsible: { classPropertyName: "collapsible", publicName: "collapsible", isSignal: true, isRequired: false, transformFunction: null }, contentStyles: { classPropertyName: "contentStyles", publicName: "contentStyles", isSignal: true, isRequired: false, transformFunction: null }, contentPaddingStyles: { classPropertyName: "contentPaddingStyles", publicName: "contentPaddingStyles", isSignal: true, isRequired: false, transformFunction: null }, menuOverlap: { classPropertyName: "menuOverlap", publicName: "menuOverlap", isSignal: true, isRequired: false, transformFunction: null }, links: { classPropertyName: "links", publicName: "links", isSignal: true, isRequired: false, transformFunction: null }, drawerHeaderTemplate: { classPropertyName: "drawerHeaderTemplate", publicName: "drawerHeaderTemplate", isSignal: true, isRequired: false, transformFunction: null }, drawerMenuHeaderTemplate: { classPropertyName: "drawerMenuHeaderTemplate", publicName: "drawerMenuHeaderTemplate", isSignal: true, isRequired: false, transformFunction: null }, drawerContentTemplate: { classPropertyName: "drawerContentTemplate", publicName: "drawerContentTemplate", isSignal: true, isRequired: false, transformFunction: null }, compactMenuLabel: { classPropertyName: "compactMenuLabel", publicName: "compactMenuLabel", isSignal: true, isRequired: false, transformFunction: null }, compactHeaderClass: { classPropertyName: "compactHeaderClass", publicName: "compactHeaderClass", isSignal: true, isRequired: false, transformFunction: null }, minMenuDistance: { classPropertyName: "minMenuDistance", publicName: "minMenuDistance", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { width: "widthChange", opened: "opened", closed: "closed" }, host: { listeners: { "window:mouseup": "stopResizing()" }, properties: { "class": "hostClass()", "attr.drawer-position": "position()", "attr.drawer-state": "menuState()" } }, providers: [sidenavStore], viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "@if (visible()) {\n @if (isCompact()) {\n <div class=\"compact-header\">\n <div [ngClass]=\"compactHeaderClass()\">\n <div class=\"is-flex is-align-items-flex-start is-justify-content-space-between is-gap-8 w-100\">\n <div class=\"is-flex is-flex-grow-1 is-justify-content-space-between is-gap-8 is-flex-direction-column\">\n @if (drawerHeaderTemplate()) {\n <ng-container [ngTemplateOutlet]=\"drawerHeaderTemplate()\" />\n }\n @if (drawerMenuHeaderTemplate()) {\n <ng-container [ngTemplateOutlet]=\"drawerMenuHeaderTemplate()\" />\n }\n </div>\n\n @if (links()?.length > 0) {\n <div ngbDropdown #optionDd=\"ngbDropdown\" container=\"body\" placement=\"bottom-end\">\n <button\n ngbDropdownToggle\n class=\"compact-header--btn button is-small is-no-shadow\"\n aria-controls=\"drawer-menu\"\n type=\"button\">\n {{ compactMenuLabel() }}\n\n <he-svg-icon\n class=\"compact-header--btn__icon\"\n [name]=\"optionDd.isOpen() ? 'chevron-up' : 'chevron-down'\"\n aria-hidden=\"true\" />\n </button>\n\n <div ngbDropdownMenu id=\"drawer-menu\">\n <div class=\"dropdown-content navigation-menu-dropdown\">\n <he-navigation-menu (closed)=\"optionDd.close()\" [links]=\"links()\" />\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n } @else {\n <aside>\n <div\n class=\"shell__menuContent | h-100\"\n (@sideMenu.done)=\"animationDone($event)\"\n [@sideMenu]=\"expanded() ? 'full' : 'hidden'\">\n <div\n class=\"h-100 is-overflow-y-auto\"\n [class.is-py-4]=\"!drawerContentTemplate()\"\n [class.is-px-2]=\"!drawerContentTemplate()\">\n @if (drawerHeaderTemplate()) {\n <ng-container [ngTemplateOutlet]=\"drawerHeaderTemplate()\" />\n }\n @if (drawerContentTemplate()) {\n <ng-container [ngTemplateOutlet]=\"drawerContentTemplate()\" />\n } @else if (links()?.length > 0) {\n <he-navigation-menu [links]=\"links()\">\n @if (drawerMenuHeaderTemplate()) {\n <ng-container header [ngTemplateOutlet]=\"drawerMenuHeaderTemplate()\" />\n }\n </he-navigation-menu>\n }\n </div>\n @if (collapsible()) {\n <button\n (click)=\"toggleMenu()\"\n (mousedown)=\"startResizing($event)\"\n class=\"is-absolute is-overflow-hidden is-flex is-justify-content-center is-align-items-center | shell__menuContent--toggle\"\n pointer>\n <he-svg-icon [name]=\"resizable() ? 'drag' : toggleIcon()\" size=\"20\" />\n </button>\n }\n </div>\n </aside>\n }\n}\n\n<div [class.is-resizing]=\"isHoldingToggle()\" class=\"shell__content | h-100 w-100 is-flex\">\n <div class=\"shell__content--body | w-100\" [@reduceWidth]=\"reduceAnimation()\">\n <div #contentContainer class=\"w-100 h-100\" [style]=\"contentStyles()\" [className]=\"contentPaddingStyles()\">\n <ng-content select=\"[drawer-content]\" />\n </div>\n </div>\n</div>\n", styles: ["::ng-deep :root{--drawer-toggle-position: -20px;--sidenav-left-width: 256px;--sidenav-right-width: 256px;--content-transition-left-x: 0;--content-transition-right-x: 0}:host-context[drawer-position=left]{--sidenav-side-transform: 1;--sidenav-width: var(--sidenav-left-width);--content-transition-x: var(--content-transition-left-x);--menu-transition-transform: -1}:host-context[drawer-position=right]{--sidenav-side-transform: 0;--sidenav-width: var(--sidenav-right-width);--content-transition-x: var(--content-transition-right-x);--menu-transition-transform: 1}:host-context[drawer-position=right] aside{order:1}:host-context[drawer-position=right] aside .shell__menuContent{right:0;box-shadow:6px 6px 6px #0000000f}:host-context[drawer-position=right] aside .shell__menuContent--toggle{left:var(--drawer-toggle-position);border-radius:9px 0 0 9px}:host{position:relative;max-height:100%;display:flex;justify-content:space-between}:host aside{position:sticky;top:var(--navbar-height);z-index:10;height:calc(100vh - var(--navbar-height))}:host aside .shell__menuContent{position:absolute;top:0;box-shadow:6px 6px 6px #0000000f;background-color:#fff;width:var(--sidenav-width)}:host aside .shell__menuContent--toggle{top:calc(50% - 24px);right:var(--drawer-toggle-position);background:#dbe3ea;border-radius:0 9px 9px 0;border:none;width:20px;height:48px}:host.is-resizable .shell__menuContent--toggle:active{cursor:col-resize}.shell__content--body{container-type:inline-size;transition:none}.shell__content:not(.is-resizing) .shell__content--body{transition:transform .3s ease-in-out,width .3s ease-in-out}.navigation-menu-dropdown{width:300px}@media screen and (max-width:767px){.navigation-menu-dropdown{width:calc(100dvw - 3rem)}}.compact-header{position:sticky;top:calc(var(--navbar-height));z-index:10}@media screen and (max-width:767px){.compact-header{top:0}}.compact-header--btn{display:block;background:#dbe3ea;border-radius:3px;color:#193957;font-weight:700;font-size:1rem;line-height:21px;padding:.25rem .5rem}.compact-header--btn__icon{margin-left:.25rem;font-size:12px}.compact-header--btn .show .compact-header--btn__icon{transform:rotate(180deg)}he-navigation-menu ::ng-deep .menu{width:100%!important;min-width:100%!important;max-width:100%!important}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "component", type: NavigationMenuComponent, selector: "he-navigation-menu", inputs: ["links", "sticky", "collapsible", "routerLinkMatchOptions"], outputs: ["closed"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
2820
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: DrawerContainerComponent, isStandalone: true, selector: "he-drawer-container", inputs: { compactBreakpoint: { classPropertyName: "compactBreakpoint", publicName: "compactBreakpoint", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, resizable: { classPropertyName: "resizable", publicName: "resizable", isSignal: true, isRequired: false, transformFunction: null }, collapsible: { classPropertyName: "collapsible", publicName: "collapsible", isSignal: true, isRequired: false, transformFunction: null }, contentStyles: { classPropertyName: "contentStyles", publicName: "contentStyles", isSignal: true, isRequired: false, transformFunction: null }, contentPaddingStyles: { classPropertyName: "contentPaddingStyles", publicName: "contentPaddingStyles", isSignal: true, isRequired: false, transformFunction: null }, menuOverlap: { classPropertyName: "menuOverlap", publicName: "menuOverlap", isSignal: true, isRequired: false, transformFunction: null }, links: { classPropertyName: "links", publicName: "links", isSignal: true, isRequired: false, transformFunction: null }, drawerHeaderTemplate: { classPropertyName: "drawerHeaderTemplate", publicName: "drawerHeaderTemplate", isSignal: true, isRequired: false, transformFunction: null }, drawerMenuHeaderTemplate: { classPropertyName: "drawerMenuHeaderTemplate", publicName: "drawerMenuHeaderTemplate", isSignal: true, isRequired: false, transformFunction: null }, drawerContentTemplate: { classPropertyName: "drawerContentTemplate", publicName: "drawerContentTemplate", isSignal: true, isRequired: false, transformFunction: null }, compactMenuLabel: { classPropertyName: "compactMenuLabel", publicName: "compactMenuLabel", isSignal: true, isRequired: false, transformFunction: null }, compactHeaderClass: { classPropertyName: "compactHeaderClass", publicName: "compactHeaderClass", isSignal: true, isRequired: false, transformFunction: null }, minMenuDistance: { classPropertyName: "minMenuDistance", publicName: "minMenuDistance", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { width: "widthChange", opened: "opened", closed: "closed" }, host: { listeners: { "window:mouseup": "stopResizing()" }, properties: { "class": "hostClass()", "attr.drawer-position": "position()", "attr.drawer-state": "menuState()" } }, providers: [sidenavStore], viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "@if (visible()) {\n @if (isCompact()) {\n <div class=\"compact-header\">\n <div [ngClass]=\"compactHeaderClass()\">\n <div class=\"is-flex is-align-items-flex-start is-justify-content-space-between is-gap-8 w-100\">\n <div class=\"is-flex is-flex-grow-1 is-justify-content-space-between is-gap-8 is-flex-direction-column\">\n @if (drawerHeaderTemplate()) {\n <ng-container [ngTemplateOutlet]=\"drawerHeaderTemplate()\" />\n }\n @if (drawerMenuHeaderTemplate()) {\n <ng-container [ngTemplateOutlet]=\"drawerMenuHeaderTemplate()\" />\n }\n </div>\n\n @if (links()?.length > 0) {\n <div ngbDropdown #optionDd=\"ngbDropdown\" container=\"body\" placement=\"bottom-end\">\n <button\n ngbDropdownToggle\n class=\"compact-header--btn button is-small is-no-shadow\"\n aria-controls=\"drawer-menu\"\n type=\"button\">\n {{ compactMenuLabel() }}\n\n <he-svg-icon\n class=\"compact-header--btn__icon\"\n [name]=\"optionDd.isOpen() ? 'chevron-up' : 'chevron-down'\"\n aria-hidden=\"true\" />\n </button>\n\n <div ngbDropdownMenu id=\"drawer-menu\">\n <div class=\"dropdown-content navigation-menu-dropdown\">\n <he-navigation-menu (closed)=\"optionDd.close()\" [links]=\"links()\" />\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n } @else {\n <aside>\n <div\n class=\"shell__menuContent | h-100\"\n (@sideMenu.done)=\"animationDone($event)\"\n [@sideMenu]=\"expanded() ? 'full' : 'hidden'\">\n <div\n class=\"h-100 is-overflow-y-auto\"\n [class.is-py-4]=\"!drawerContentTemplate()\"\n [class.is-px-2]=\"!drawerContentTemplate()\">\n @if (drawerHeaderTemplate()) {\n <ng-container [ngTemplateOutlet]=\"drawerHeaderTemplate()\" />\n }\n @if (drawerContentTemplate()) {\n <ng-container [ngTemplateOutlet]=\"drawerContentTemplate()\" />\n } @else if (links()?.length > 0) {\n <he-navigation-menu [links]=\"links()\">\n @if (drawerMenuHeaderTemplate()) {\n <ng-container header [ngTemplateOutlet]=\"drawerMenuHeaderTemplate()\" />\n }\n </he-navigation-menu>\n }\n </div>\n @if (collapsible()) {\n <button\n (click)=\"toggleMenu()\"\n (mousedown)=\"startResizing($event)\"\n class=\"is-absolute is-overflow-hidden is-flex is-justify-content-center is-align-items-center | shell__menuContent--toggle\"\n pointer>\n <he-svg-icon [name]=\"resizable() ? 'drag' : toggleIcon()\" size=\"20\" />\n </button>\n }\n </div>\n </aside>\n }\n}\n\n<div [class.is-resizing]=\"isHoldingToggle()\" class=\"shell__content | h-100 w-100 is-flex\">\n <div class=\"shell__content--body | w-100\" [@reduceWidth]=\"reduceAnimation()\">\n <div #contentContainer class=\"w-100 h-100\" [style]=\"contentStyles()\" [className]=\"contentPaddingStyles()\">\n <ng-content select=\"[drawer-content]\" />\n </div>\n </div>\n</div>\n", styles: ["::ng-deep :root{--drawer-toggle-position: -20px;--sidenav-left-width: 256px;--sidenav-right-width: 256px;--content-transition-left-x: 0;--content-transition-right-x: 0}:host-context[drawer-position=left]{--sidenav-side-transform: 1;--sidenav-width: var(--sidenav-left-width);--content-transition-x: var(--content-transition-left-x);--menu-transition-transform: -1}:host-context[drawer-position=right]{--sidenav-side-transform: 0;--sidenav-width: var(--sidenav-right-width);--content-transition-x: var(--content-transition-right-x);--menu-transition-transform: 1}:host-context[drawer-position=right] aside{order:1}:host-context[drawer-position=right] aside .shell__menuContent{right:0;box-shadow:6px 6px 6px #0000000f}:host-context[drawer-position=right] aside .shell__menuContent--toggle{left:var(--drawer-toggle-position);border-radius:9px 0 0 9px}:host{position:relative;max-height:100%;display:flex;justify-content:space-between}:host aside{position:sticky;top:var(--navbar-height);z-index:10;height:calc(100vh - var(--navbar-height))}:host aside .shell__menuContent{position:absolute;top:0;box-shadow:6px 6px 6px #0000000f;background-color:#fff;width:var(--sidenav-width)}:host aside .shell__menuContent--toggle{top:calc(50% - 24px);right:var(--drawer-toggle-position);background:#dbe3ea;border-radius:0 9px 9px 0;border:none;width:20px;height:48px}:host.is-resizable .shell__menuContent--toggle:active{cursor:col-resize}.shell__content--body{container-type:inline-size;transition:none}.shell__content:not(.is-resizing) .shell__content--body{transition:transform .3s ease-in-out,width .3s ease-in-out}.navigation-menu-dropdown{width:300px}@media screen and (max-width:767px){.navigation-menu-dropdown{width:calc(100dvw - 3rem)}}.compact-header{position:sticky;top:calc(var(--navbar-height));z-index:10}@media screen and (max-width:767px){.compact-header{top:0}}.compact-header--btn{display:block;background:#dbe3ea;border-radius:3px;color:#193957;font-weight:700;font-size:1rem;line-height:21px;padding:.25rem .5rem}.compact-header--btn__icon{margin-left:.25rem;font-size:12px}.compact-header--btn .show .compact-header--btn__icon{transform:rotate(180deg)}he-navigation-menu ::ng-deep .menu{width:100%!important;min-width:100%!important;max-width:100%!important}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "component", type: NavigationMenuComponent, selector: "he-navigation-menu", inputs: ["links", "sticky", "collapsible", "routerLinkMatchOptions"], outputs: ["closed"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }], animations: ANIMATIONS, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2825
2821
|
}
|
|
2826
2822
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: DrawerContainerComponent, decorators: [{
|
|
2827
2823
|
type: Component$1,
|
|
@@ -3023,7 +3019,7 @@ class MapsDrawingConfirmComponent {
|
|
|
3023
3019
|
this.activeModal?.close(value);
|
|
3024
3020
|
}
|
|
3025
3021
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MapsDrawingConfirmComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3026
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.1.4", type: MapsDrawingConfirmComponent, isStandalone: true, selector: "he-maps-drawing-confirm", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, modes: { classPropertyName: "modes", publicName: "modes", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, viewQueries: [{ propertyName: "map", first: true, predicate: MapsDrawingComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"modal is-large is-active\">\n <div class=\"modal-background\"></div>\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">Draw on Map</p>\n <button class=\"delete is-medium\" aria-label=\"close\" type=\"button\" (click)=\"close()\"></button>\n </header>\n <section class=\"modal-card-body p-0\">\n <he-maps-drawing #map [value]=\"value()\" [modes]=\"modes()\" />\n </section>\n <footer class=\"modal-card-foot\">\n <button class=\"button is-primary\" (click)=\"confirm()\">\n <span>Confirm</span>\n </button>\n <button class=\"button is-ghost\" (click)=\"close()\">\n <span>Close</span>\n </button>\n <button class=\"button is-danger\" (click)=\"map.clear()\">\n <he-svg-icon name=\"xmark\" class=\"mr-2\" />\n <span>Clear</span>\n </button>\n </footer>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: MapsDrawingComponent, selector: "he-maps-drawing", inputs: ["value", "modes", "center", "zoom"], outputs: ["updated"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
3022
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.1.4", type: MapsDrawingConfirmComponent, isStandalone: true, selector: "he-maps-drawing-confirm", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, modes: { classPropertyName: "modes", publicName: "modes", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, viewQueries: [{ propertyName: "map", first: true, predicate: MapsDrawingComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"modal is-large is-active\">\n <div class=\"modal-background\"></div>\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">Draw on Map</p>\n <button class=\"delete is-medium\" aria-label=\"close\" type=\"button\" (click)=\"close()\"></button>\n </header>\n <section class=\"modal-card-body p-0\">\n <he-maps-drawing #map [value]=\"value()\" [modes]=\"modes()\" />\n </section>\n <footer class=\"modal-card-foot\">\n <button class=\"button is-primary\" (click)=\"confirm()\">\n <span>Confirm</span>\n </button>\n <button class=\"button is-ghost\" (click)=\"close()\">\n <span>Close</span>\n </button>\n <button class=\"button is-danger\" (click)=\"map.clear()\">\n <he-svg-icon name=\"xmark\" class=\"mr-2\" />\n <span>Clear</span>\n </button>\n </footer>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: MapsDrawingComponent, selector: "he-maps-drawing", inputs: ["value", "modes", "center", "zoom"], outputs: ["updated"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }] }); }
|
|
3027
3023
|
}
|
|
3028
3024
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MapsDrawingConfirmComponent, decorators: [{
|
|
3029
3025
|
type: Component$1,
|
|
@@ -3092,7 +3088,7 @@ class MobileShellComponent {
|
|
|
3092
3088
|
button.onClick?.();
|
|
3093
3089
|
}
|
|
3094
3090
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MobileShellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3095
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: MobileShellComponent, isStandalone: true, selector: "he-mobile-shell", inputs: { menuButtons: "menuButtons", defaultActiveButtonId: "defaultActiveButtonId" }, outputs: { menuShown: "menuShown" }, queries: [{ propertyName: "iconTemplate", first: true, predicate: ["iconTemplate"], descendants: true }], ngImport: i0, template: "<div class=\"is-overflow-auto | shell-content\">\n <div [class.menu-expanded]=\"expanded()\" class=\"shell__content--body | h-100\">\n <ng-content />\n </div>\n</div>\n\n<aside class=\"shell-footer | is-flex is-justify-content-space-between\">\n @for (button of buttons(); track button.id || button.label) {\n <button\n (click)=\"onMenuButtonClick(button)\"\n class=\"button is-secondary is-flex is-flex-direction-column is-align-items-center | menu-button\"\n [disabled]=\"button.disabled\">\n <ng-container\n *ngTemplateOutlet=\"\n iconTemplate ?? defaultIconTemplate;\n context: { $implicit: button, isActive: button.isActive }\n \" />\n @if (button.isActive && button.label) {\n <span class=\"is-size-8 | menu-button-label\">{{ button.label }}</span>\n }\n </button>\n }\n</aside>\n\n<div [class.expanded]=\"expanded()\" class=\"shell-menu | is-absolute w-100 h-100\">\n <ng-template [ngTemplateOutlet]=\"menuRef()\" />\n</div>\n\n<ng-template #defaultIconTemplate let-button>\n <he-svg-icon [name]=\"button.icon\" />\n</ng-template>\n", styles: [":host{position:relative;display:grid;grid-template-rows:1fr auto;width:100%;height:100%;overflow:hidden;--menu-height: 2.875em}.shell-footer{background:#193957;z-index:10}.shell-menu{bottom:0;left:0;background:#fefaef;transform:translateY(100%);transition:transform .1s ease-out;padding-bottom:var(--menu-height)}.shell-menu.expanded{transform:translateY(0)}.menu-button-label{line-height:normal;letter-spacing:-.01rem}.menu-button{box-shadow:none;height:3.5em;width:2em}.menu-button:hover{background-color:initial}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
3091
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: MobileShellComponent, isStandalone: true, selector: "he-mobile-shell", inputs: { menuButtons: "menuButtons", defaultActiveButtonId: "defaultActiveButtonId" }, outputs: { menuShown: "menuShown" }, queries: [{ propertyName: "iconTemplate", first: true, predicate: ["iconTemplate"], descendants: true }], ngImport: i0, template: "<div class=\"is-overflow-auto | shell-content\">\n <div [class.menu-expanded]=\"expanded()\" class=\"shell__content--body | h-100\">\n <ng-content />\n </div>\n</div>\n\n<aside class=\"shell-footer | is-flex is-justify-content-space-between\">\n @for (button of buttons(); track button.id || button.label) {\n <button\n (click)=\"onMenuButtonClick(button)\"\n class=\"button is-secondary is-flex is-flex-direction-column is-align-items-center | menu-button\"\n [disabled]=\"button.disabled\">\n <ng-container\n *ngTemplateOutlet=\"\n iconTemplate ?? defaultIconTemplate;\n context: { $implicit: button, isActive: button.isActive }\n \" />\n @if (button.isActive && button.label) {\n <span class=\"is-size-8 | menu-button-label\">{{ button.label }}</span>\n }\n </button>\n }\n</aside>\n\n<div [class.expanded]=\"expanded()\" class=\"shell-menu | is-absolute w-100 h-100\">\n <ng-template [ngTemplateOutlet]=\"menuRef()\" />\n</div>\n\n<ng-template #defaultIconTemplate let-button>\n <he-svg-icon [name]=\"button.icon\" />\n</ng-template>\n", styles: [":host{position:relative;display:grid;grid-template-rows:1fr auto;width:100%;height:100%;overflow:hidden;--menu-height: 2.875em}.shell-footer{background:#193957;z-index:10}.shell-menu{bottom:0;left:0;background:#fefaef;transform:translateY(100%);transition:transform .1s ease-out;padding-bottom:var(--menu-height)}.shell-menu.expanded{transform:translateY(0)}.menu-button-label{line-height:normal;letter-spacing:-.01rem}.menu-button{box-shadow:none;height:3.5em;width:2em}.menu-button:hover{background-color:initial}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }] }); }
|
|
3096
3092
|
}
|
|
3097
3093
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MobileShellComponent, decorators: [{
|
|
3098
3094
|
type: Component$1,
|
|
@@ -3164,7 +3160,7 @@ class SchemaVersionLinkComponent {
|
|
|
3164
3160
|
this.url = computed(() => [schemaBaseUrl(this.node().schemaVersion), this.node()['@type']].filter(Boolean).join('/'));
|
|
3165
3161
|
}
|
|
3166
3162
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: SchemaVersionLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3167
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: SchemaVersionLinkComponent, isStandalone: true, selector: "he-schema-version-link", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, showExternalLink: { classPropertyName: "showExternalLink", publicName: "showExternalLink", isSignal: true, isRequired: false, transformFunction: null }, linkClass: { classPropertyName: "linkClass", publicName: "linkClass", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<a [href]=\"url()\" target=\"_blank\" [class]=\"linkClass()\" (click)=\"$event.stopPropagation()\">\n <ng-content />\n @if (showExternalLink()) {\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n }\n</a>\n", styles: ["a{color:inherit}\n"], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
3163
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: SchemaVersionLinkComponent, isStandalone: true, selector: "he-schema-version-link", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, showExternalLink: { classPropertyName: "showExternalLink", publicName: "showExternalLink", isSignal: true, isRequired: false, transformFunction: null }, linkClass: { classPropertyName: "linkClass", publicName: "linkClass", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<a [href]=\"url()\" target=\"_blank\" [class]=\"linkClass()\" (click)=\"$event.stopPropagation()\">\n <ng-content />\n @if (showExternalLink()) {\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n }\n</a>\n", styles: ["a{color:inherit}\n"], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3168
3164
|
}
|
|
3169
3165
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: SchemaVersionLinkComponent, decorators: [{
|
|
3170
3166
|
type: Component$1,
|
|
@@ -3197,7 +3193,7 @@ class SearchExtendComponent {
|
|
|
3197
3193
|
return this.extended() ? this.applySearch() : this.extend();
|
|
3198
3194
|
}
|
|
3199
3195
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: SearchExtendComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3200
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.1.4", type: SearchExtendComponent, isStandalone: true, selector: "he-search-extend", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", searchText: "searchText" }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<form class=\"field has-addons\" novalidate (submit)=\"submit()\">\n <div class=\"control is-expanded has-icons-right\" [class.is-hidden]=\"!extended()\">\n <input\n #searchInput\n type=\"text\"\n class=\"input search-input {{ class() }}\"\n name=\"search\"\n [(ngModel)]=\"value\"\n [disabled]=\"disabled()\"\n [attr.placeholder]=\"placeholder()\" />\n <a class=\"icon is-small is-right\" [class.is-hidden]=\"!value() || disabled()\" (click)=\"clear()\">\n <he-svg-icon name=\"xmark\" size=\"20\" />\n </a>\n </div>\n <div class=\"control\">\n <button class=\"button {{ class() }}\" type=\"submit\">\n <he-svg-icon name=\"search\" size=\"20\" />\n </button>\n </div>\n</form>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
3196
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.1.4", type: SearchExtendComponent, isStandalone: true, selector: "he-search-extend", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", searchText: "searchText" }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<form class=\"field has-addons\" novalidate (submit)=\"submit()\">\n <div class=\"control is-expanded has-icons-right\" [class.is-hidden]=\"!extended()\">\n <input\n #searchInput\n type=\"text\"\n class=\"input search-input {{ class() }}\"\n name=\"search\"\n [(ngModel)]=\"value\"\n [disabled]=\"disabled()\"\n [attr.placeholder]=\"placeholder()\" />\n <a class=\"icon is-small is-right\" [class.is-hidden]=\"!value() || disabled()\" (click)=\"clear()\">\n <he-svg-icon name=\"xmark\" size=\"20\" />\n </a>\n </div>\n <div class=\"control\">\n <button class=\"button {{ class() }}\" type=\"submit\">\n <he-svg-icon name=\"search\" size=\"20\" />\n </button>\n </div>\n</form>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }] }); }
|
|
3201
3197
|
}
|
|
3202
3198
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: SearchExtendComponent, decorators: [{
|
|
3203
3199
|
type: Component$1,
|
|
@@ -3277,7 +3273,7 @@ class ShellComponent {
|
|
|
3277
3273
|
button.onClick?.();
|
|
3278
3274
|
}
|
|
3279
3275
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ShellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3280
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: ShellComponent, isStandalone: true, selector: "he-shell", inputs: { shelfButtons: "shelfButtons", menuOverlap: "menuOverlap", closeMenuOnOutsideClick: "closeMenuOnOutsideClick", defaultActiveButtonId: "defaultActiveButtonId" }, outputs: { menuShown: "menuShown" }, queries: [{ propertyName: "iconTemplate", first: true, predicate: ["iconTemplate"], descendants: true }], ngImport: i0, template: "<div class=\"shell | h-100 is-overflow-hidden\">\n <aside>\n <div class=\"shell__menu | is-relative h-100 is-flex is-flex-direction-column is-justify-content-space-between\">\n <div class=\"shell__menu--section | is-flex is-flex-direction-column\">\n @for (button of topMenuButtons(); track trackByFn($index, button)) {\n <ng-container [ngTemplateOutlet]=\"buttonTemplate\" [ngTemplateOutletContext]=\"{ $implicit: button }\" />\n }\n </div>\n\n <div class=\"shell__menu--section | is-flex is-flex-direction-column\">\n @for (button of bottomMenuButtons(); track trackByFn($index, button)) {\n <ng-container [ngTemplateOutlet]=\"buttonTemplate\" [ngTemplateOutletContext]=\"{ $implicit: button }\" />\n }\n </div>\n </div>\n <div class=\"shell__menuContent | h-100 is-absolute\" [class.expanded]=\"expanded()\">\n <div class=\"h-100\" [class.is-hidden]=\"!expanded()\">\n <ng-template [ngTemplateOutlet]=\"menuRef()\" />\n </div>\n </div>\n </aside>\n\n <div class=\"shell__content | h-100 w-100 is-overflow-hidden is-flex is-justify-content-flex-end\">\n <div\n class=\"shell__content--body | w-100\"\n [class.menu-expanded]=\"!menuOverlap && expanded()\"\n (click)=\"closeMenuOnOutsideClick ? hideMenu() : null\">\n <ng-content />\n </div>\n </div>\n</div>\n\n<ng-template #buttonTemplate let-button>\n <button\n (click)=\"onMenuButtonClick(button)\"\n class=\"menu-button button is-secondary\"\n [ngClass]=\"button.isActive ? button.activeClassName : ''\"\n [class.is-active]=\"button.isActive\">\n <ng-container\n *ngTemplateOutlet=\"\n iconTemplate ?? defaultIconTemplate;\n context: { $implicit: button, isActive: button !== clickedButton }\n \" />\n </button>\n</ng-template>\n\n<ng-template #defaultIconTemplate let-button>\n <he-svg-icon [name]=\"button.icon\" />\n</ng-template>\n", styles: ["::ng-deep :root{--menu-width: 200px;--menu-transition-time: .15s}.shell{display:grid;grid-template-columns:auto 1fr;grid-template-areas:\"menu content\"}.shell>aside{position:relative;grid-area:menu}.shell>aside .shell__menu{background:#193957;padding:1.5em 0;z-index:10;min-width:2.875em}.shell>aside .shell__menuContent{background-color:#fefaef;width:var(--menu-width);top:0;right:1px;transform:translate(0);transition:transform var(--menu-transition-time) ease-out}.shell>aside .shell__menuContent.expanded{transform:translate(100%)}.shell__content{grid-area:content}.shell__content--body{transition:width var(--menu-transition-time) ease-out}.shell__content .menu-expanded{width:calc(100% - var(--menu-width))}.menu-button{border-radius:0;padding:1.25em .6em;box-shadow:none!important;border-width:0}.menu-button.is-active{background-color:#fff;color:#0a0a0a}.menu-button:hover:not(.is-active){background-color:initial}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
3276
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: ShellComponent, isStandalone: true, selector: "he-shell", inputs: { shelfButtons: "shelfButtons", menuOverlap: "menuOverlap", closeMenuOnOutsideClick: "closeMenuOnOutsideClick", defaultActiveButtonId: "defaultActiveButtonId" }, outputs: { menuShown: "menuShown" }, queries: [{ propertyName: "iconTemplate", first: true, predicate: ["iconTemplate"], descendants: true }], ngImport: i0, template: "<div class=\"shell | h-100 is-overflow-hidden\">\n <aside>\n <div class=\"shell__menu | is-relative h-100 is-flex is-flex-direction-column is-justify-content-space-between\">\n <div class=\"shell__menu--section | is-flex is-flex-direction-column\">\n @for (button of topMenuButtons(); track trackByFn($index, button)) {\n <ng-container [ngTemplateOutlet]=\"buttonTemplate\" [ngTemplateOutletContext]=\"{ $implicit: button }\" />\n }\n </div>\n\n <div class=\"shell__menu--section | is-flex is-flex-direction-column\">\n @for (button of bottomMenuButtons(); track trackByFn($index, button)) {\n <ng-container [ngTemplateOutlet]=\"buttonTemplate\" [ngTemplateOutletContext]=\"{ $implicit: button }\" />\n }\n </div>\n </div>\n <div class=\"shell__menuContent | h-100 is-absolute\" [class.expanded]=\"expanded()\">\n <div class=\"h-100\" [class.is-hidden]=\"!expanded()\">\n <ng-template [ngTemplateOutlet]=\"menuRef()\" />\n </div>\n </div>\n </aside>\n\n <div class=\"shell__content | h-100 w-100 is-overflow-hidden is-flex is-justify-content-flex-end\">\n <div\n class=\"shell__content--body | w-100\"\n [class.menu-expanded]=\"!menuOverlap && expanded()\"\n (click)=\"closeMenuOnOutsideClick ? hideMenu() : null\">\n <ng-content />\n </div>\n </div>\n</div>\n\n<ng-template #buttonTemplate let-button>\n <button\n (click)=\"onMenuButtonClick(button)\"\n class=\"menu-button button is-secondary\"\n [ngClass]=\"button.isActive ? button.activeClassName : ''\"\n [class.is-active]=\"button.isActive\">\n <ng-container\n *ngTemplateOutlet=\"\n iconTemplate ?? defaultIconTemplate;\n context: { $implicit: button, isActive: button !== clickedButton }\n \" />\n </button>\n</ng-template>\n\n<ng-template #defaultIconTemplate let-button>\n <he-svg-icon [name]=\"button.icon\" />\n</ng-template>\n", styles: ["::ng-deep :root{--menu-width: 200px;--menu-transition-time: .15s}.shell{display:grid;grid-template-columns:auto 1fr;grid-template-areas:\"menu content\"}.shell>aside{position:relative;grid-area:menu}.shell>aside .shell__menu{background:#193957;padding:1.5em 0;z-index:10;min-width:2.875em}.shell>aside .shell__menuContent{background-color:#fefaef;width:var(--menu-width);top:0;right:1px;transform:translate(0);transition:transform var(--menu-transition-time) ease-out}.shell>aside .shell__menuContent.expanded{transform:translate(100%)}.shell__content{grid-area:content}.shell__content--body{transition:width var(--menu-transition-time) ease-out}.shell__content .menu-expanded{width:calc(100% - var(--menu-width))}.menu-button{border-radius:0;padding:1.25em .6em;box-shadow:none!important;border-width:0}.menu-button.is-active{background-color:#fff;color:#0a0a0a}.menu-button:hover:not(.is-active){background-color:initial}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }] }); }
|
|
3281
3277
|
}
|
|
3282
3278
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ShellComponent, decorators: [{
|
|
3283
3279
|
type: Component$1,
|
|
@@ -5405,7 +5401,7 @@ class SortSelectComponent {
|
|
|
5405
5401
|
});
|
|
5406
5402
|
}
|
|
5407
5403
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: SortSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5408
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: SortSelectComponent, isStandalone: true, selector: "he-sort-select", inputs: { sortOptions: { classPropertyName: "sortOptions", publicName: "sortOptions", isSignal: true, isRequired: true, transformFunction: null }, sortBy: { classPropertyName: "sortBy", publicName: "sortBy", isSignal: true, isRequired: false, transformFunction: null }, sortOrder: { classPropertyName: "sortOrder", publicName: "sortOrder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sortChange: "sortChange", sortBy: "sortByChange", sortOrder: "sortOrderChange" }, ngImport: i0, template: "<div\n (clickOutside)=\"showSortBy.set(false)\"\n [class.is-active]=\"showSortBy()\"\n [ngClass]=\"'is-' + alignment()\"\n class=\"dropdown\">\n <div (click)=\"showSortBy.set(!showSortBy())\" class=\"dropdown-trigger\">\n <button\n [class.is-active]=\"showSortBy()\"\n aria-controls=\"sort-menu\"\n aria-haspopup=\"true\"\n class=\"button is-ghost\"\n container=\"body\"\n [ngbTooltip]=\"showSortBy() ? null : 'Sort options'\"\n [disableTooltip]=\"showSortBy()\"\n placement=\"bottom\">\n <he-svg-icon size=\"24\" name=\"sort-ascending\" aria-hidden=\"true\" />\n </button>\n </div>\n <div class=\"dropdown-menu\" id=\"sort-menu\" role=\"menu\">\n <div (click)=\"showSortBy.set(false)\" class=\"dropdown-content\">\n @for (option of sortOptions(); track option) {\n <a (click)=\"sort(option)\" [class.is-selected]=\"sortBy() === option.id\" class=\"dropdown-item\">\n <he-svg-icon\n [name]=\"sortOrder() === 'asc' ? 'arrow-up' : 'arrow-down'\"\n [class.is-invisible]=\"sortBy() !== option.id\" />\n <span [style.border-color]=\"option.color ?? 'transparent'\" class=\"is-pl-2 is-inline-block is-capitalized\">\n {{ option.label }}\n </span>\n </a>\n }\n </div>\n </div>\n</div>\n", styles: [".dropdown-item>span{border-left:2px solid transparent}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: ClickOutsideDirective, selector: "[clickOutside]", inputs: ["clickOutsideListenAfter"], outputs: ["clickOutside"] }, { 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"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
5404
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: SortSelectComponent, isStandalone: true, selector: "he-sort-select", inputs: { sortOptions: { classPropertyName: "sortOptions", publicName: "sortOptions", isSignal: true, isRequired: true, transformFunction: null }, sortBy: { classPropertyName: "sortBy", publicName: "sortBy", isSignal: true, isRequired: false, transformFunction: null }, sortOrder: { classPropertyName: "sortOrder", publicName: "sortOrder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sortChange: "sortChange", sortBy: "sortByChange", sortOrder: "sortOrderChange" }, ngImport: i0, template: "<div\n (clickOutside)=\"showSortBy.set(false)\"\n [class.is-active]=\"showSortBy()\"\n [ngClass]=\"'is-' + alignment()\"\n class=\"dropdown\">\n <div (click)=\"showSortBy.set(!showSortBy())\" class=\"dropdown-trigger\">\n <button\n [class.is-active]=\"showSortBy()\"\n aria-controls=\"sort-menu\"\n aria-haspopup=\"true\"\n class=\"button is-ghost\"\n container=\"body\"\n [ngbTooltip]=\"showSortBy() ? null : 'Sort options'\"\n [disableTooltip]=\"showSortBy()\"\n placement=\"bottom\">\n <he-svg-icon size=\"24\" name=\"sort-ascending\" aria-hidden=\"true\" />\n </button>\n </div>\n <div class=\"dropdown-menu\" id=\"sort-menu\" role=\"menu\">\n <div (click)=\"showSortBy.set(false)\" class=\"dropdown-content\">\n @for (option of sortOptions(); track option) {\n <a (click)=\"sort(option)\" [class.is-selected]=\"sortBy() === option.id\" class=\"dropdown-item\">\n <he-svg-icon\n [name]=\"sortOrder() === 'asc' ? 'arrow-up' : 'arrow-down'\"\n [class.is-invisible]=\"sortBy() !== option.id\" />\n <span [style.border-color]=\"option.color ?? 'transparent'\" class=\"is-pl-2 is-inline-block is-capitalized\">\n {{ option.label }}\n </span>\n </a>\n }\n </div>\n </div>\n</div>\n", styles: [".dropdown-item>span{border-left:2px solid transparent}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: ClickOutsideDirective, selector: "[clickOutside]", inputs: ["clickOutsideListenAfter"], outputs: ["clickOutside"] }, { 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"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5409
5405
|
}
|
|
5410
5406
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: SortSelectComponent, decorators: [{
|
|
5411
5407
|
type: Component$1,
|
|
@@ -5429,7 +5425,7 @@ class ShelfDialogComponent {
|
|
|
5429
5425
|
this.showContent.set(false);
|
|
5430
5426
|
}
|
|
5431
5427
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ShelfDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5432
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.1.4", type: ShelfDialogComponent, isStandalone: true, selector: "he-shelf-dialog", inputs: { headerTemplate: { classPropertyName: "headerTemplate", publicName: "headerTemplate", isSignal: true, isRequired: false, transformFunction: null }, subheaderTemplate: { classPropertyName: "subheaderTemplate", publicName: "subheaderTemplate", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, bottom: { classPropertyName: "bottom", publicName: "bottom", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, ngImport: i0, template: "<div [style.bottom]=\"bottom()\" class=\"shelf-dialog | is-fixed is-overflow-hidden\">\n <header class=\"shelf-dialog__header | px-4 py-2 is-flex is-rounded has-text-secondary is-align-items-center\">\n <div class=\"is-flex is-flex-direction-column is-gap-8 w-100\">\n <div class=\"is-flex is-justify-content-space-between is-align-items-center\">\n <ng-container [ngTemplateOutlet]=\"headerTemplate() ?? defaultTemplate\" />\n <div>\n <button (click)=\"showContent.set(!showContent())\" class=\"ml-3 has-text-secondary is-clickable | dialog-btn\">\n <he-svg-icon [name]=\"toggleIcon()\" size=\"24\" />\n </button>\n <button (click)=\"closed.emit()\" class=\"ml-3 has-text-secondary is-clickable | dialog-btn\">\n <he-svg-icon name=\"xmark\" size=\"24\" />\n </button>\n </div>\n </div>\n <ng-container [ngTemplateOutlet]=\"subheaderTemplate()\" />\n </div>\n </header>\n <div [class.max-h-0]=\"!showContent()\" class=\"shelf-dialog__content | has-background-white is-overflow-hidden\">\n <div>\n <div class=\"pt-1 px-4 pb-2\">\n <ng-content />\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #defaultTemplate>\n {{ title() }}\n</ng-template>\n", styles: [".shelf-dialog{min-width:360px;right:10%;border-radius:.5em .5em 0 0;box-shadow:0 8px 8px #00000026;z-index:99}.shelf-dialog__header{background:#f5f7f9}.shelf-dialog__content{display:grid;grid-template-rows:1fr;transition:grid-template-rows 125ms}.shelf-dialog__content>*{overflow:hidden}.shelf-dialog .dialog-btn{background:transparent;border:none;width:1.5rem;height:1.5rem}.max-h-0{grid-template-rows:0fr}@media screen and (max-width:767px){.shelf-dialog{width:100dvw;right:0;border-radius:0}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
5428
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.1.4", type: ShelfDialogComponent, isStandalone: true, selector: "he-shelf-dialog", inputs: { headerTemplate: { classPropertyName: "headerTemplate", publicName: "headerTemplate", isSignal: true, isRequired: false, transformFunction: null }, subheaderTemplate: { classPropertyName: "subheaderTemplate", publicName: "subheaderTemplate", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, bottom: { classPropertyName: "bottom", publicName: "bottom", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, ngImport: i0, template: "<div [style.bottom]=\"bottom()\" class=\"shelf-dialog | is-fixed is-overflow-hidden\">\n <header class=\"shelf-dialog__header | px-4 py-2 is-flex is-rounded has-text-secondary is-align-items-center\">\n <div class=\"is-flex is-flex-direction-column is-gap-8 w-100\">\n <div class=\"is-flex is-justify-content-space-between is-align-items-center\">\n <ng-container [ngTemplateOutlet]=\"headerTemplate() ?? defaultTemplate\" />\n <div>\n <button (click)=\"showContent.set(!showContent())\" class=\"ml-3 has-text-secondary is-clickable | dialog-btn\">\n <he-svg-icon [name]=\"toggleIcon()\" size=\"24\" />\n </button>\n <button (click)=\"closed.emit()\" class=\"ml-3 has-text-secondary is-clickable | dialog-btn\">\n <he-svg-icon name=\"xmark\" size=\"24\" />\n </button>\n </div>\n </div>\n <ng-container [ngTemplateOutlet]=\"subheaderTemplate()\" />\n </div>\n </header>\n <div [class.max-h-0]=\"!showContent()\" class=\"shelf-dialog__content | has-background-white is-overflow-hidden\">\n <div>\n <div class=\"pt-1 px-4 pb-2\">\n <ng-content />\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #defaultTemplate>\n {{ title() }}\n</ng-template>\n", styles: [".shelf-dialog{min-width:360px;right:10%;border-radius:.5em .5em 0 0;box-shadow:0 8px 8px #00000026;z-index:99}.shelf-dialog__header{background:#f5f7f9}.shelf-dialog__content{display:grid;grid-template-rows:1fr;transition:grid-template-rows 125ms}.shelf-dialog__content>*{overflow:hidden}.shelf-dialog .dialog-btn{background:transparent;border:none;width:1.5rem;height:1.5rem}.max-h-0{grid-template-rows:0fr}@media screen and (max-width:767px){.shelf-dialog{width:100dvw;right:0;border-radius:0}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5433
5429
|
}
|
|
5434
5430
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ShelfDialogComponent, decorators: [{
|
|
5435
5431
|
type: Component$1,
|
|
@@ -5966,7 +5962,7 @@ class NodeCsvSelectHeadersComponent {
|
|
|
5966
5962
|
this.headers.set(headers);
|
|
5967
5963
|
}
|
|
5968
5964
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeCsvSelectHeadersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5969
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeCsvSelectHeadersComponent, isStandalone: true, selector: "he-node-csv-select-headers", inputs: { csv: { classPropertyName: "csv", publicName: "csv", isSignal: true, isRequired: true, transformFunction: null }, keys: { classPropertyName: "keys", publicName: "keys", isSignal: true, isRequired: false, transformFunction: null }, includeDefaultCSV: { classPropertyName: "includeDefaultCSV", publicName: "includeDefaultCSV", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { headersChanged: "headersChanged" }, ngImport: i0, template: "<p class=\"mb-2\">Please select which columns you would like to include:</p>\n\n<p class=\"my-2 is-size-7\">\n <i>You can drag and drop the headers to sort them as they would appear in the CSV file.</i>\n</p>\n\n<div class=\"columns toggle-all mx-4 pb-1 mb-0\">\n <div class=\"column\">\n <label class=\"checkbox ml-1\">\n <input type=\"checkbox\" class=\"selector\" [ngModel]=\"allSelected()\" (change)=\"selectAll($event.target.checked)\" />\n <span class=\"ml-2\">Toggle All</span>\n </label>\n </div>\n\n <div class=\"column is-narrow\">\n <div ngbDropdown container=\"body\" placement=\"bottom-end\">\n <button ngbDropdownToggle class=\"button is-small\" type=\"button\" id=\"select-menu\">\n <span>Advanced Filters</span>\n <span class=\"icon is-small\">\n <he-svg-icon name=\"filter-funnel\" aria-hidden=\"true\" />\n </span>\n </button>\n <div ngbDropdownMenu aria-labelledby=\"select-menu\">\n <div class=\"dropdown-content\">\n <a ngbDropdownItem>\n <label class=\"checkbox ml-1\">\n <input type=\"checkbox\" class=\"selector\" [(ngModel)]=\"showNonIncluded\" />\n <span class=\"ml-2\">\n Include\n <code>internal</code>\n fields\n </span>\n </label>\n </a>\n <div class=\"dropdown-item\">\n <p>Toggle Term Fields</p>\n </div>\n @for (field of termFields; track field) {\n <div ngbDropdownItem>\n <label class=\"checkbox ml-1\">\n <input\n type=\"checkbox\"\n class=\"selector\"\n [checked]=\"isTermFieldSelect(field)\"\n (change)=\"toggleTermField($event.target.checked, field)\" />\n <span class=\"ml-2\">{{ field }}</span>\n </label>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n</div>\n\n@if (loading()) {\n <div class=\"has-text-center py-3\">\n <he-svg-icon name=\"loading\" animation=\"spin\" size=\"40\" />\n </div>\n} @else {\n <div class=\"is-overflow-y-auto | drag-container\">\n @for (group of groups(); track group.key) {\n <div class=\"card\">\n <header class=\"card-header\">\n <div class=\"card-header-title\">\n <label class=\"checkbox ml-1\">\n <input\n type=\"checkbox\"\n class=\"selector\"\n [indeterminate]=\"group.partialSelected\"\n [ngModel]=\"group.selected\"\n (change)=\"updateGroup($event.target.checked, group)\" />\n <span class=\"ml-2\">{{ group.key }}</span>\n </label>\n </div>\n <span\n class=\"card-header-icon has-text-secondary\"\n aria-label=\"open / close\"\n (click)=\"group.open = !group.open\"\n pointer>\n <span class=\"icon\">\n <he-svg-icon [name]=\"group.open ? 'chevron-down' : 'chevron-right'\" />\n </span>\n </span>\n </header>\n <div class=\"card-content p-3\" [class.is-hidden]=\"!group.open\">\n <ul cdkDropList (cdkDropListDropped)=\"dropHeader($event, group)\">\n @for (header of group.headers; track header.key) {\n @if (header.included || showNonIncluded()) {\n <li cdkDrag>\n <label class=\"checkbox ml-2\">\n <input\n type=\"checkbox\"\n class=\"selector\"\n [ngModel]=\"header.selected\"\n (change)=\"updateHeader($event.target.checked, group, header)\" />\n <span class=\"ml-2\">{{ header.key }}</span>\n </label>\n </li>\n }\n }\n </ul>\n </div>\n </div>\n }\n </div>\n}\n", styles: [".toggle-all{border-bottom:1px solid #4a4a4a}.cdk-drag-preview{border-radius:3px;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)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { 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: NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
5965
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeCsvSelectHeadersComponent, isStandalone: true, selector: "he-node-csv-select-headers", inputs: { csv: { classPropertyName: "csv", publicName: "csv", isSignal: true, isRequired: true, transformFunction: null }, keys: { classPropertyName: "keys", publicName: "keys", isSignal: true, isRequired: false, transformFunction: null }, includeDefaultCSV: { classPropertyName: "includeDefaultCSV", publicName: "includeDefaultCSV", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { headersChanged: "headersChanged" }, ngImport: i0, template: "<p class=\"mb-2\">Please select which columns you would like to include:</p>\n\n<p class=\"my-2 is-size-7\">\n <i>You can drag and drop the headers to sort them as they would appear in the CSV file.</i>\n</p>\n\n<div class=\"columns toggle-all mx-4 pb-1 mb-0\">\n <div class=\"column\">\n <label class=\"checkbox ml-1\">\n <input type=\"checkbox\" class=\"selector\" [ngModel]=\"allSelected()\" (change)=\"selectAll($event.target.checked)\" />\n <span class=\"ml-2\">Toggle All</span>\n </label>\n </div>\n\n <div class=\"column is-narrow\">\n <div ngbDropdown container=\"body\" placement=\"bottom-end\">\n <button ngbDropdownToggle class=\"button is-small\" type=\"button\" id=\"select-menu\">\n <span>Advanced Filters</span>\n <span class=\"icon is-small\">\n <he-svg-icon name=\"filter-funnel\" aria-hidden=\"true\" />\n </span>\n </button>\n <div ngbDropdownMenu aria-labelledby=\"select-menu\">\n <div class=\"dropdown-content\">\n <a ngbDropdownItem>\n <label class=\"checkbox ml-1\">\n <input type=\"checkbox\" class=\"selector\" [(ngModel)]=\"showNonIncluded\" />\n <span class=\"ml-2\">\n Include\n <code>internal</code>\n fields\n </span>\n </label>\n </a>\n <div class=\"dropdown-item\">\n <p>Toggle Term Fields</p>\n </div>\n @for (field of termFields; track field) {\n <div ngbDropdownItem>\n <label class=\"checkbox ml-1\">\n <input\n type=\"checkbox\"\n class=\"selector\"\n [checked]=\"isTermFieldSelect(field)\"\n (change)=\"toggleTermField($event.target.checked, field)\" />\n <span class=\"ml-2\">{{ field }}</span>\n </label>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n</div>\n\n@if (loading()) {\n <div class=\"has-text-center py-3\">\n <he-svg-icon name=\"loading\" animation=\"spin\" size=\"40\" />\n </div>\n} @else {\n <div class=\"is-overflow-y-auto | drag-container\">\n @for (group of groups(); track group.key) {\n <div class=\"card\">\n <header class=\"card-header\">\n <div class=\"card-header-title\">\n <label class=\"checkbox ml-1\">\n <input\n type=\"checkbox\"\n class=\"selector\"\n [indeterminate]=\"group.partialSelected\"\n [ngModel]=\"group.selected\"\n (change)=\"updateGroup($event.target.checked, group)\" />\n <span class=\"ml-2\">{{ group.key }}</span>\n </label>\n </div>\n <span\n class=\"card-header-icon has-text-secondary\"\n aria-label=\"open / close\"\n (click)=\"group.open = !group.open\"\n pointer>\n <span class=\"icon\">\n <he-svg-icon [name]=\"group.open ? 'chevron-down' : 'chevron-right'\" />\n </span>\n </span>\n </header>\n <div class=\"card-content p-3\" [class.is-hidden]=\"!group.open\">\n <ul cdkDropList (cdkDropListDropped)=\"dropHeader($event, group)\">\n @for (header of group.headers; track header.key) {\n @if (header.included || showNonIncluded()) {\n <li cdkDrag>\n <label class=\"checkbox ml-2\">\n <input\n type=\"checkbox\"\n class=\"selector\"\n [ngModel]=\"header.selected\"\n (change)=\"updateHeader($event.target.checked, group, header)\" />\n <span class=\"ml-2\">{{ header.key }}</span>\n </label>\n </li>\n }\n }\n </ul>\n </div>\n </div>\n }\n </div>\n}\n", styles: [".toggle-all{border-bottom:1px solid #4a4a4a}.cdk-drag-preview{border-radius:3px;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)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { 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: NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }, { kind: "directive", type: NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { 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: "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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5970
5966
|
}
|
|
5971
5967
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeCsvSelectHeadersComponent, decorators: [{
|
|
5972
5968
|
type: Component$1,
|
|
@@ -6051,7 +6047,7 @@ class NodeLinkComponent {
|
|
|
6051
6047
|
this.target = computed(() => (this.showExternalLink() || isExternal() ? '_blank' : '_self'));
|
|
6052
6048
|
}
|
|
6053
6049
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6054
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeLinkComponent, isStandalone: true, selector: "he-node-link", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null }, showExternalLink: { classPropertyName: "showExternalLink", publicName: "showExternalLink", isSignal: true, isRequired: false, transformFunction: null }, linkClass: { classPropertyName: "linkClass", publicName: "linkClass", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (showLink()) {\n <a [ngClass]=\"linkClass()\" [href]=\"url()\" [target]=\"target()\" (click)=\"$event.stopPropagation()\">\n <ng-container *ngTemplateOutlet=\"content\" />\n\n @if (showExternalLink()) {\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n }\n </a>\n} @else {\n <span #placeholder><ng-content /></span>\n @if (placeholder.children.length === 0) {\n <span>{{ id() }}</span>\n }\n}\n\n<ng-template #content>\n <span #placeholder><ng-content /></span>\n @if (placeholder.children.length === 0) {\n <span>{{ id() }}</span>\n }\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
6050
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeLinkComponent, isStandalone: true, selector: "he-node-link", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null }, showExternalLink: { classPropertyName: "showExternalLink", publicName: "showExternalLink", isSignal: true, isRequired: false, transformFunction: null }, linkClass: { classPropertyName: "linkClass", publicName: "linkClass", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (showLink()) {\n <a [ngClass]=\"linkClass()\" [href]=\"url()\" [target]=\"target()\" (click)=\"$event.stopPropagation()\">\n <ng-container *ngTemplateOutlet=\"content\" />\n\n @if (showExternalLink()) {\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n }\n </a>\n} @else {\n <span #placeholder><ng-content /></span>\n @if (placeholder.children.length === 0) {\n <span>{{ id() }}</span>\n }\n}\n\n<ng-template #content>\n <span #placeholder><ng-content /></span>\n @if (placeholder.children.length === 0) {\n <span>{{ id() }}</span>\n }\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6055
6051
|
}
|
|
6056
6052
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeLinkComponent, decorators: [{
|
|
6057
6053
|
type: Component$1,
|
|
@@ -6085,7 +6081,7 @@ class NodeCsvExportConfirmComponent {
|
|
|
6085
6081
|
this.activeModal?.close();
|
|
6086
6082
|
}
|
|
6087
6083
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeCsvExportConfirmComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6088
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeCsvExportConfirmComponent, isStandalone: true, selector: "he-node-csv-export-confirm", inputs: { nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: true, isRequired: false, transformFunction: null }, filename: { classPropertyName: "filename", publicName: "filename", isSignal: true, isRequired: false, transformFunction: null }, headerKeys: { classPropertyName: "headerKeys", publicName: "headerKeys", isSignal: true, isRequired: false, transformFunction: null }, extension: { classPropertyName: "extension", publicName: "extension", isSignal: true, isRequired: false, transformFunction: null }, isUpload: { classPropertyName: "isUpload", publicName: "isUpload", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { nodes: "nodesChange", filename: "filenameChange", headerKeys: "headerKeysChange", extension: "extensionChange", isUpload: "isUploadChange", closed: "closed" }, ngImport: i0, template: "<div class=\"modal is-active\">\n <div class=\"modal-background\"></div>\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">Export as CSV</p>\n <button class=\"delete is-medium\" aria-label=\"close\" type=\"button\" (click)=\"close()\"></button>\n </header>\n <section class=\"modal-card-body\">\n @if (isUpload()) {\n <div class=\"notification is-info\" role=\"alert\">\n <span>After Download, you can edit and</span>\n <a class=\"px-1\" routerLink=\"../\">upload the CSV file</a>\n <span>to submit your content on the HESTIA platform, and your draft will remain unchanged.</span>\n <p>\n <span>\n Alternatively, you can import the CSV file right back by clicking on the \"Import from CSV\" button and\n selecting the exported file.\n </span>\n </p>\n </div>\n } @else if (includedNodes().length > 1) {\n <p class=\"mb-2\">\n <b>{{ includedNodes().length }}</b>\n <span class=\"px-1\">Nodes will be included in your download.</span>\n <a (click)=\"showIncludeNodes.set(!showIncludeNodes())\">\n @if (showIncludeNodes()) {\n Hide list\n } @else {\n Show list\n }\n </a>\n </p>\n @if (showIncludeNodes()) {\n <he-data-table maxHeight=\"400\">\n <table class=\"table is-fullwidth is-striped is-mb-0\">\n <thead>\n <tr>\n <th class=\"width-auto has-border-right\">\n <span>Type</span>\n </th>\n <th>\n <span>Name</span>\n </th>\n </tr>\n </thead>\n <tbody>\n @for (node of includedNodes(); track node) {\n <tr>\n <td class=\"width-auto has-border-right\">\n {{ node.node['@type'] }}\n </td>\n <td>\n <he-node-link [node]=\"node.node\" [showExternalLink]=\"true\">\n <span>{{ node.node.name }}</span>\n </he-node-link>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n }\n }\n\n <he-node-csv-select-headers\n [class.is-hidden]=\"isUpload()\"\n [csv]=\"csvData()\"\n [keys]=\"headerKeys()\"\n [includeDefaultCSV]=\"isUpload()\"\n (headersChanged)=\"headers.set($event)\" />\n </section>\n <footer class=\"modal-card-foot\">\n <a\n class=\"button is-primary\"\n target=\"_blank\"\n [attr.disabled]=\"csvContent() ? null : true\"\n [href]=\"csvContent()\"\n [attr.download]=\"csvContent() ? downloadFilename() : null\"\n (click)=\"close()\">\n <he-svg-icon name=\"download\" />\n <span class=\"is-ml-2\">Download CSV</span>\n </a>\n <button class=\"button is-ghost\" (click)=\"close()\">\n <span>Cancel</span>\n </button>\n </footer>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "dataState", "showExternalLink", "linkClass"] }, { kind: "component", type: NodeCsvSelectHeadersComponent, selector: "he-node-csv-select-headers", inputs: ["csv", "keys", "includeDefaultCSV"], outputs: ["headersChanged"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
6084
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeCsvExportConfirmComponent, isStandalone: true, selector: "he-node-csv-export-confirm", inputs: { nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: true, isRequired: false, transformFunction: null }, filename: { classPropertyName: "filename", publicName: "filename", isSignal: true, isRequired: false, transformFunction: null }, headerKeys: { classPropertyName: "headerKeys", publicName: "headerKeys", isSignal: true, isRequired: false, transformFunction: null }, extension: { classPropertyName: "extension", publicName: "extension", isSignal: true, isRequired: false, transformFunction: null }, isUpload: { classPropertyName: "isUpload", publicName: "isUpload", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { nodes: "nodesChange", filename: "filenameChange", headerKeys: "headerKeysChange", extension: "extensionChange", isUpload: "isUploadChange", closed: "closed" }, ngImport: i0, template: "<div class=\"modal is-active\">\n <div class=\"modal-background\"></div>\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">Export as CSV</p>\n <button class=\"delete is-medium\" aria-label=\"close\" type=\"button\" (click)=\"close()\"></button>\n </header>\n <section class=\"modal-card-body\">\n @if (isUpload()) {\n <div class=\"notification is-info\" role=\"alert\">\n <span>After Download, you can edit and</span>\n <a class=\"px-1\" routerLink=\"../\">upload the CSV file</a>\n <span>to submit your content on the HESTIA platform, and your draft will remain unchanged.</span>\n <p>\n <span>\n Alternatively, you can import the CSV file right back by clicking on the \"Import from CSV\" button and\n selecting the exported file.\n </span>\n </p>\n </div>\n } @else if (includedNodes().length > 1) {\n <p class=\"mb-2\">\n <b>{{ includedNodes().length }}</b>\n <span class=\"px-1\">Nodes will be included in your download.</span>\n <a (click)=\"showIncludeNodes.set(!showIncludeNodes())\">\n @if (showIncludeNodes()) {\n Hide list\n } @else {\n Show list\n }\n </a>\n </p>\n @if (showIncludeNodes()) {\n <he-data-table maxHeight=\"400\">\n <table class=\"table is-fullwidth is-striped is-mb-0\">\n <thead>\n <tr>\n <th class=\"width-auto has-border-right\">\n <span>Type</span>\n </th>\n <th>\n <span>Name</span>\n </th>\n </tr>\n </thead>\n <tbody>\n @for (node of includedNodes(); track node) {\n <tr>\n <td class=\"width-auto has-border-right\">\n {{ node.node['@type'] }}\n </td>\n <td>\n <he-node-link [node]=\"node.node\" [showExternalLink]=\"true\">\n <span>{{ node.node.name }}</span>\n </he-node-link>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n }\n }\n\n <he-node-csv-select-headers\n [class.is-hidden]=\"isUpload()\"\n [csv]=\"csvData()\"\n [keys]=\"headerKeys()\"\n [includeDefaultCSV]=\"isUpload()\"\n (headersChanged)=\"headers.set($event)\" />\n </section>\n <footer class=\"modal-card-foot\">\n <a\n class=\"button is-primary\"\n target=\"_blank\"\n [attr.disabled]=\"csvContent() ? null : true\"\n [href]=\"csvContent()\"\n [attr.download]=\"csvContent() ? downloadFilename() : null\"\n (click)=\"close()\">\n <he-svg-icon name=\"download\" />\n <span class=\"is-ml-2\">Download CSV</span>\n </a>\n <button class=\"button is-ghost\" (click)=\"close()\">\n <span>Cancel</span>\n </button>\n </footer>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "dataState", "showExternalLink", "linkClass"] }, { kind: "component", type: NodeCsvSelectHeadersComponent, selector: "he-node-csv-select-headers", inputs: ["csv", "keys", "includeDefaultCSV"], outputs: ["headersChanged"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6089
6085
|
}
|
|
6090
6086
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeCsvExportConfirmComponent, decorators: [{
|
|
6091
6087
|
type: Component$1,
|
|
@@ -6923,7 +6919,7 @@ class NodeLogsModelsLogsComponent {
|
|
|
6923
6919
|
sorting.sortOrder = sortOrder;
|
|
6924
6920
|
}
|
|
6925
6921
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeLogsModelsLogsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6926
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeLogsModelsLogsComponent, isStandalone: true, selector: "he-node-logs-models-logs", inputs: { logs: { classPropertyName: "logs", publicName: "logs", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"table-container\">\n <table class=\"table is-dark is-fullwidth\">\n <tbody>\n @if (requirements()) {\n @for (key of requirementKeys(); track key) {\n <ng-container *ngTemplateOutlet=\"logLine; context: { key, value: requirements()[key] }\" />\n }\n }\n @if (logs()?.logs) {\n @for (key of logs().logs | keyvalue; track key) {\n <ng-container *ngTemplateOutlet=\"logLine; context: key\" />\n }\n }\n </tbody>\n </table>\n</div>\n\n@if (logs()?.missingLookups?.length) {\n <div class=\"it-mt-2\">\n <p>Data missing (might be optional):</p>\n <div class=\"table-container data-table-container\">\n <table class=\"table is-dark is-fullwidth is-striped\">\n <thead>\n <tr>\n <th class=\"has-text-white\">\n <span>Filename</span>\n </th>\n <th class=\"has-text-white\">\n <span>Column Title</span>\n </th>\n <th class=\"has-text-white\">\n <span>Row (term.id)</span>\n </th>\n </tr>\n </thead>\n <tbody class=\"has-text-white\">\n @for (data of logs().missingLookups; track dataIndex; let dataIndex = $index) {\n <tr>\n <td>{{ data.filename }}</td>\n <td>{{ data.column }}</td>\n <td>{{ data.termId }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n}\n\n<ng-template #sortColumn let-column=\"column\" let-sorting=\"sorting\">\n <a class=\"is-p-1 has-text-white\" (click)=\"toggleSort(column, sorting)\">\n @if (sorting.sortBy === column) {\n @if (sorting.sortOrder === 'asc') {\n <he-svg-icon name=\"sort-caret-up-filled\" size=\"16\" />\n } @else {\n <he-svg-icon name=\"sort-caret-down-filled\" size=\"16\" />\n }\n } @else {\n <he-svg-icon name=\"sort-caret-stacked-filled-stacked\" size=\"16\" />\n }\n </a>\n</ng-template>\n\n<ng-template #logLineArray let-value=\"value\" let-sorting=\"sorting\">\n <table class=\"table is-dark is-bordered is-striped\">\n @let headers = listHeaders(value);\n @if (headers.length) {\n <thead>\n <tr>\n @for (header of headers; track header) {\n <th class=\"has-text-white\">\n <div class=\"is-nowrap\">\n {{ header }}\n <ng-container *ngTemplateOutlet=\"sortColumn; context: { column: header, sorting }\" />\n </div>\n </th>\n }\n </tr>\n </thead>\n }\n <tbody>\n @for (v of value | sortBy: sorting.sortBy : sorting.sortOrder; track vIndex; let vIndex = $index) {\n <tr>\n @if (headers.length) {\n @for (header of headers; track header) {\n <td>{{ v[header] }}</td>\n }\n } @else {\n <td>{{ v }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n</ng-template>\n\n<ng-template #logLineValue let-key=\"key\" let-value=\"value\">\n @if (requirementLinkedNode(key, value); as linkedNode) {\n <he-node-link\n class=\"is-inline-block is-align-middle\"\n linkClass=\"is-dark\"\n [node]=\"linkedNode\"\n [showExternalLink]=\"true\" />\n } @else {\n <span class=\"is-inline-block is-align-middle\">{{ value }}</span>\n }\n</ng-template>\n\n<ng-template #logLine let-key=\"key\" let-value=\"value\">\n <tr>\n <td class=\"has-border-right | copy-log\">\n <span class=\"is-inline-block is-align-middle\">\n @if (parseLogCompleteness(key); as completeness) {\n <span>Data completeness for</span>\n <code class=\"is-mx-1\">{{ completeness.key }}</code>\n <span>must be</span>\n <code class=\"is-mx-1\">{{ completeness.value }}</code>\n } @else {\n @switch (key) {\n @default {\n {{ parseKey(key) }}\n }\n @case ('property_id') {\n Property Term @id\n }\n @case ('product_id') {\n Product Term @id\n }\n @case ('crop_product_id') {\n Crop Product Term @id\n }\n @case ('input_id') {\n Input Term @id\n }\n @case ('node_type_allowed') {\n <span>Is the current</span>\n <code class=\"is-mx-1\">Node</code>\n <span>allowed to run this model</span>\n }\n @case ('siteType_allowed') {\n <span>Is the current</span>\n <code class=\"is-mx-1\">siteType</code>\n <span>allowed to run this model</span>\n }\n @case ('product_id_allowed') {\n <span>Are any of the Product</span>\n <code class=\"is-mx-1\">@id</code>\n <span>allowed to run this model</span>\n }\n @case ('site_measurement_id_allowed') {\n <span>Are any of the Measurement</span>\n <code class=\"is-mx-1\">@id</code>\n <span>allowed to run this model</span>\n }\n @case ('product_termType_allowed') {\n <span>Are any of the Product</span>\n <code class=\"is-mx-1\">termType</code>\n <span>allowed to run this model</span>\n }\n @case ('input_id_allowed') {\n <span>Are any of the Input</span>\n <code class=\"is-mx-1\">@id</code>\n <span>allowed to run this model</span>\n }\n @case ('input_termType_allowed') {\n <span>Are any of the Input</span>\n <code class=\"is-mx-1\">termType</code>\n <span>allowed to run this model</span>\n }\n <!-- Deprecated -->\n @case ('primary_product_id_allowed') {\n <span>Is the current primary product</span>\n <code class=\"is-mx-1\">@id</code>\n <span>allowed to run this model</span>\n }\n @case ('primary_product_termType_allowed') {\n <span>Is the current primary product</span>\n <code class=\"is-mx-1\">termType</code>\n <span>allowed to run this model</span>\n }\n @case ('has_pesticides_inputs') {\n <span>Cycle contains</span>\n <code class=\"is-mx-1\">pesticideAI</code>\n <span>Inputs</span>\n }\n @case ('all_pesticideAI_have_lookup_value') {\n <span>All</span>\n <code class=\"is-mx-1\">pesticideAI</code>\n <span>Inputs have a lookup value</span>\n }\n @case ('has_crop_residue_burnt') {\n <code class=\"is-mr-1\">aboveGroundCropResidueBurnt</code>\n <span>is present as Product</span>\n }\n @case ('no_cycle_inputs_feed') {\n <span>\n Cycle has\n <b>no</b>\n Input with\n </span>\n <code>isAnimalFeed=true</code>\n }\n @case ('has_cycle_inputs_feed') {\n <span>\n Cycle has\n <b>some</b>\n Input with\n </span>\n <code>isAnimalFeed=true</code>\n }\n }\n }\n </span>\n <he-clipboard\n class=\"is-inline-block is-align-middle\"\n clipboardClass=\"is-size-7 is-p-1\"\n [value]=\"key\"\n [hideText]=\"true\" />\n </td>\n <td>\n @if (logValueArray(value); as valueArray) {\n <ng-container *ngTemplateOutlet=\"logLineArray; context: { value: valueArray, sorting: {} }\" />\n } @else {\n <ng-container *ngTemplateOutlet=\"logLineValue; context: { key, value }\" />\n }\n </td>\n </tr>\n</ng-template>\n", styles: [".copy-log he-clipboard{visibility:hidden}.copy-log:hover he-clipboard{visibility:visible}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
6922
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeLogsModelsLogsComponent, isStandalone: true, selector: "he-node-logs-models-logs", inputs: { logs: { classPropertyName: "logs", publicName: "logs", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"table-container\">\n <table class=\"table is-dark is-fullwidth\">\n <tbody>\n @if (requirements()) {\n @for (key of requirementKeys(); track key) {\n <ng-container *ngTemplateOutlet=\"logLine; context: { key, value: requirements()[key] }\" />\n }\n }\n @if (logs()?.logs) {\n @for (key of logs().logs | keyvalue; track key) {\n <ng-container *ngTemplateOutlet=\"logLine; context: key\" />\n }\n }\n </tbody>\n </table>\n</div>\n\n@if (logs()?.missingLookups?.length) {\n <div class=\"it-mt-2\">\n <p>Data missing (might be optional):</p>\n <div class=\"table-container data-table-container\">\n <table class=\"table is-dark is-fullwidth is-striped\">\n <thead>\n <tr>\n <th class=\"has-text-white\">\n <span>Filename</span>\n </th>\n <th class=\"has-text-white\">\n <span>Column Title</span>\n </th>\n <th class=\"has-text-white\">\n <span>Row (term.id)</span>\n </th>\n </tr>\n </thead>\n <tbody class=\"has-text-white\">\n @for (data of logs().missingLookups; track dataIndex; let dataIndex = $index) {\n <tr>\n <td>{{ data.filename }}</td>\n <td>{{ data.column }}</td>\n <td>{{ data.termId }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n}\n\n<ng-template #sortColumn let-column=\"column\" let-sorting=\"sorting\">\n <a class=\"is-p-1 has-text-white\" (click)=\"toggleSort(column, sorting)\">\n @if (sorting.sortBy === column) {\n @if (sorting.sortOrder === 'asc') {\n <he-svg-icon name=\"sort-caret-up-filled\" size=\"16\" />\n } @else {\n <he-svg-icon name=\"sort-caret-down-filled\" size=\"16\" />\n }\n } @else {\n <he-svg-icon name=\"sort-caret-stacked-filled-stacked\" size=\"16\" />\n }\n </a>\n</ng-template>\n\n<ng-template #logLineArray let-value=\"value\" let-sorting=\"sorting\">\n <table class=\"table is-dark is-bordered is-striped\">\n @let headers = listHeaders(value);\n @if (headers.length) {\n <thead>\n <tr>\n @for (header of headers; track header) {\n <th class=\"has-text-white\">\n <div class=\"is-nowrap\">\n {{ header }}\n <ng-container *ngTemplateOutlet=\"sortColumn; context: { column: header, sorting }\" />\n </div>\n </th>\n }\n </tr>\n </thead>\n }\n <tbody>\n @for (v of value | sortBy: sorting.sortBy : sorting.sortOrder; track vIndex; let vIndex = $index) {\n <tr>\n @if (headers.length) {\n @for (header of headers; track header) {\n <td>{{ v[header] }}</td>\n }\n } @else {\n <td>{{ v }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n</ng-template>\n\n<ng-template #logLineValue let-key=\"key\" let-value=\"value\">\n @if (requirementLinkedNode(key, value); as linkedNode) {\n <he-node-link\n class=\"is-inline-block is-align-middle\"\n linkClass=\"is-dark\"\n [node]=\"linkedNode\"\n [showExternalLink]=\"true\" />\n } @else {\n <span class=\"is-inline-block is-align-middle\">{{ value }}</span>\n }\n</ng-template>\n\n<ng-template #logLine let-key=\"key\" let-value=\"value\">\n <tr>\n <td class=\"has-border-right | copy-log\">\n <span class=\"is-inline-block is-align-middle\">\n @if (parseLogCompleteness(key); as completeness) {\n <span>Data completeness for</span>\n <code class=\"is-mx-1\">{{ completeness.key }}</code>\n <span>must be</span>\n <code class=\"is-mx-1\">{{ completeness.value }}</code>\n } @else {\n @switch (key) {\n @default {\n {{ parseKey(key) }}\n }\n @case ('property_id') {\n Property Term @id\n }\n @case ('product_id') {\n Product Term @id\n }\n @case ('crop_product_id') {\n Crop Product Term @id\n }\n @case ('input_id') {\n Input Term @id\n }\n @case ('node_type_allowed') {\n <span>Is the current</span>\n <code class=\"is-mx-1\">Node</code>\n <span>allowed to run this model</span>\n }\n @case ('siteType_allowed') {\n <span>Is the current</span>\n <code class=\"is-mx-1\">siteType</code>\n <span>allowed to run this model</span>\n }\n @case ('product_id_allowed') {\n <span>Are any of the Product</span>\n <code class=\"is-mx-1\">@id</code>\n <span>allowed to run this model</span>\n }\n @case ('site_measurement_id_allowed') {\n <span>Are any of the Measurement</span>\n <code class=\"is-mx-1\">@id</code>\n <span>allowed to run this model</span>\n }\n @case ('product_termType_allowed') {\n <span>Are any of the Product</span>\n <code class=\"is-mx-1\">termType</code>\n <span>allowed to run this model</span>\n }\n @case ('input_id_allowed') {\n <span>Are any of the Input</span>\n <code class=\"is-mx-1\">@id</code>\n <span>allowed to run this model</span>\n }\n @case ('input_termType_allowed') {\n <span>Are any of the Input</span>\n <code class=\"is-mx-1\">termType</code>\n <span>allowed to run this model</span>\n }\n <!-- Deprecated -->\n @case ('primary_product_id_allowed') {\n <span>Is the current primary product</span>\n <code class=\"is-mx-1\">@id</code>\n <span>allowed to run this model</span>\n }\n @case ('primary_product_termType_allowed') {\n <span>Is the current primary product</span>\n <code class=\"is-mx-1\">termType</code>\n <span>allowed to run this model</span>\n }\n @case ('has_pesticides_inputs') {\n <span>Cycle contains</span>\n <code class=\"is-mx-1\">pesticideAI</code>\n <span>Inputs</span>\n }\n @case ('all_pesticideAI_have_lookup_value') {\n <span>All</span>\n <code class=\"is-mx-1\">pesticideAI</code>\n <span>Inputs have a lookup value</span>\n }\n @case ('has_crop_residue_burnt') {\n <code class=\"is-mr-1\">aboveGroundCropResidueBurnt</code>\n <span>is present as Product</span>\n }\n @case ('no_cycle_inputs_feed') {\n <span>\n Cycle has\n <b>no</b>\n Input with\n </span>\n <code>isAnimalFeed=true</code>\n }\n @case ('has_cycle_inputs_feed') {\n <span>\n Cycle has\n <b>some</b>\n Input with\n </span>\n <code>isAnimalFeed=true</code>\n }\n }\n }\n </span>\n <he-clipboard\n class=\"is-inline-block is-align-middle\"\n clipboardClass=\"is-size-7 is-p-1\"\n [value]=\"key\"\n [hideText]=\"true\" />\n </td>\n <td>\n @if (logValueArray(value); as valueArray) {\n <ng-container *ngTemplateOutlet=\"logLineArray; context: { value: valueArray, sorting: {} }\" />\n } @else {\n <ng-container *ngTemplateOutlet=\"logLineValue; context: { key, value }\" />\n }\n </td>\n </tr>\n</ng-template>\n", styles: [".copy-log he-clipboard{visibility:hidden}.copy-log:hover he-clipboard{visibility:visible}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "dataState", "showExternalLink", "linkClass"] }, { kind: "component", type: ClipboardComponent, selector: "he-clipboard", inputs: ["icon", "value", "disabled", "hideText", "size", "clipboardClass"] }, { kind: "pipe", type: SortByPipe, name: "sortBy" }] }); }
|
|
6927
6923
|
}
|
|
6928
6924
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeLogsModelsLogsComponent, decorators: [{
|
|
6929
6925
|
type: Component$1,
|
|
@@ -7037,7 +7033,7 @@ class GuideOverlayComponent {
|
|
|
7037
7033
|
this.localStorage.store(storageKey$1, JSON.stringify({ width, height }));
|
|
7038
7034
|
}
|
|
7039
7035
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: GuideOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7040
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.1.4", type: GuideOverlayComponent, isStandalone: true, selector: "he-guide-overlay", inputs: { pageId: { classPropertyName: "pageId", publicName: "pageId", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, positions: { classPropertyName: "positions", publicName: "positions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { width: "widthChange", height: "heightChange" }, host: { properties: { "class.is-none": "this.hidden" } }, ngImport: i0, template: "<a\n class=\"has-text-secondary\"\n (click)=\"$event.stopPropagation(); open.set(!open())\"\n ngbTooltip=\"Click to open the Guide\"\n container=\"body\"\n [disableTooltip]=\"responsiveService.isTouch()\">\n <he-svg-icon name=\"guide-overlay\" size=\"24\" />\n <span class=\"shadow-origin\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\"></span>\n</a>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions()\"\n [cdkConnectedOverlayBackdropClass]=\"['cdk-overlay-transparent-backdrop']\"\n (backdropClick)=\"open.set(false)\">\n <div\n class=\"is-relative has-background-white | guide-overlay-container\"\n [style.width]=\"width() + 'px'\"\n [style.height]=\"height() + 'px'\"\n mwlResizable\n [mouseMoveThrottleMS]=\"100\"\n (resizing)=\"onResize($event)\"\n (resizeEnd)=\"onResizeEnd($event)\">\n <div class=\"is-absolute | resize-handle-left\" mwlResizeHandle [resizeEdges]=\"{ left: true }\"></div>\n <div class=\"is-absolute | resize-handle-bottom\" mwlResizeHandle [resizeEdges]=\"{ bottom: true }\"></div>\n <iframe [src]=\"url()\"></iframe>\n </div>\n</ng-template>\n", styles: ["@media screen and (max-width:767px){.shadow-origin{position:absolute;right:16px}}.resize-handle-bottom{cursor:row-resize;height:5px;width:100%;bottom:0}.resize-handle-left{cursor:col-resize;height:100%;width:5px;left:0}::ng-deep .cdk-overlay-container .guide-overlay-container{max-height:80vh;max-width:80vw;border-radius:6px;border:1px solid rgba(221,225,230,.5);box-shadow:16px 16px 24px #00000014}@media screen and (max-width:767px){::ng-deep .cdk-overlay-container .guide-overlay-container{max-width:calc(100vw - 2 * var(--content-screen-padding-min-size))}}::ng-deep .cdk-overlay-container iframe{display:block;height:100%;width:100%;border:none}\n"], dependencies: [{ 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: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
7036
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.1.4", type: GuideOverlayComponent, isStandalone: true, selector: "he-guide-overlay", inputs: { pageId: { classPropertyName: "pageId", publicName: "pageId", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, positions: { classPropertyName: "positions", publicName: "positions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { width: "widthChange", height: "heightChange" }, host: { properties: { "class.is-none": "this.hidden" } }, ngImport: i0, template: "<a\n class=\"has-text-secondary\"\n (click)=\"$event.stopPropagation(); open.set(!open())\"\n ngbTooltip=\"Click to open the Guide\"\n container=\"body\"\n [disableTooltip]=\"responsiveService.isTouch()\">\n <he-svg-icon name=\"guide-overlay\" size=\"24\" />\n <span class=\"shadow-origin\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\"></span>\n</a>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions()\"\n [cdkConnectedOverlayBackdropClass]=\"['cdk-overlay-transparent-backdrop']\"\n (backdropClick)=\"open.set(false)\">\n <div\n class=\"is-relative has-background-white | guide-overlay-container\"\n [style.width]=\"width() + 'px'\"\n [style.height]=\"height() + 'px'\"\n mwlResizable\n [mouseMoveThrottleMS]=\"100\"\n (resizing)=\"onResize($event)\"\n (resizeEnd)=\"onResizeEnd($event)\">\n <div class=\"is-absolute | resize-handle-left\" mwlResizeHandle [resizeEdges]=\"{ left: true }\"></div>\n <div class=\"is-absolute | resize-handle-bottom\" mwlResizeHandle [resizeEdges]=\"{ bottom: true }\"></div>\n <iframe [src]=\"url()\"></iframe>\n </div>\n</ng-template>\n", styles: ["@media screen and (max-width:767px){.shadow-origin{position:absolute;right:16px}}.resize-handle-bottom{cursor:row-resize;height:5px;width:100%;bottom:0}.resize-handle-left{cursor:col-resize;height:100%;width:5px;left:0}::ng-deep .cdk-overlay-container .guide-overlay-container{max-height:80vh;max-width:80vw;border-radius:6px;border:1px solid rgba(221,225,230,.5);box-shadow:16px 16px 24px #00000014}@media screen and (max-width:767px){::ng-deep .cdk-overlay-container .guide-overlay-container{max-width:calc(100vw - 2 * var(--content-screen-padding-min-size))}}::ng-deep .cdk-overlay-container iframe{display:block;height:100%;width:100%;border:none}\n"], dependencies: [{ 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: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }, { kind: "ngmodule", type: ResizableModule }, { kind: "directive", type: i1$1.ResizableDirective, selector: "[mwlResizable]", inputs: ["validateResize", "enableGhostResize", "resizeSnapGrid", "resizeCursors", "ghostElementPositioning", "allowNegativeResizes", "mouseMoveThrottleMS"], outputs: ["resizeStart", "resizing", "resizeEnd"], exportAs: ["mwlResizable"] }, { kind: "directive", type: i1$1.ResizeHandleDirective, selector: "[mwlResizeHandle]", inputs: ["resizeEdges", "resizableContainer"] }] }); }
|
|
7041
7037
|
}
|
|
7042
7038
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: GuideOverlayComponent, decorators: [{
|
|
7043
7039
|
type: Component$1,
|
|
@@ -7342,7 +7338,7 @@ class NodeLogsModelsComponent {
|
|
|
7342
7338
|
return subValues.every(v => v.configModels.some(vv => vv.status === LogStatus.success));
|
|
7343
7339
|
}
|
|
7344
7340
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeLogsModelsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7345
|
-
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 && !loading() && logsUrl()) {\n <div class=\"is-flex is-align-items-center is-gap-8 is-mb-2\">\n <div class=\"is-flex-grow-1\"></div>\n @if (hasLogs()) {\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 } @else {\n <he-svg-icon class=\"has-text-warning\" name=\"exclamation-triangle\" />\n <span class=\"is-size-7 has-text-warning\">No logs found. Recalculation logs will be incomplete.</span>\n }\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 is-flex is-align-items-flex-start is-gap-4\"\n [attr.title]=\"$any(blankNode).term?.name || $any(blankNode).key\">\n <ng-container *ngTemplateOutlet=\"collapseButton; context: { $implicit: blankNode }\" />\n @if ($any(blankNode).term) {\n <he-node-link class=\"is-inline-block is-pre-wrap is-pr-2\" [node]=\"$any(blankNode).term\">\n <span\n class=\"break-word\"\n [innerHtml]=\"$any(blankNode).term.name | compound: $any(blankNode).term.termType\"></span>\n </he-node-link>\n } @else 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 }\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 if ($any(blankNode).configModels?.length) {\n not recalculated\n } @else {\n -\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 @if (blankNode.isOpen) {\n <tr [class.has-sub-rows]=\"$any(blankNode).subValues?.length\" [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 }\n @for (subValue of $any(blankNode).subValues; track trackBySubValue(subValue)) {\n <ng-container *ngTemplateOutlet=\"subValueRow; context: { blankNode, parent: blankNode, subValue }\" />\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 type=\"checkbox\" class=\"selector\" [(ngModel)]=\"onlyRequired\" [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 #collapseButton let-blankNode>\n @if (blankNode.canOpen) {\n <a class=\"open-node\" (click)=\"toggleBlankNode(blankNode)\">\n <he-svg-icon [name]=\"blankNode.isOpen ? 'chevron-down' : 'chevron-right'\" />\n </a>\n }\n</ng-template>\n\n<ng-template #subValueRow let-blankNode=\"blankNode\" let-parent=\"parent\" let-subValue=\"subValue\" let-rowClass=\"rowClass\">\n @let term = subValue.term || termById(subValue.id);\n @if (parent.isOpen) {\n <tr [class.is-sub-row]=\"parent.canOpen\" [ngClass]=\"rowClass\">\n <td class=\"width-auto has-border-right\">\n <div class=\"is-flex is-align-items-flex-start is-gap-4 h-100\">\n <ng-container *ngTemplateOutlet=\"collapseButton; context: { $implicit: subValue }\" />\n <he-svg-icon class=\"sub-sub-row-icon\" name=\"chevron-double-right\" />\n <div class=\"is-flex is-align-items-flex-start is-flex-wrap-wrap is-gap-4\" [class.is-pl-3]=\"!subValue.canOpen\">\n <span>\n <span>{{ subValue.key | keyToLabel }}</span>\n @if (subValue.id) {\n <span class=\"is-inline-block\">:</span>\n }\n </span>\n @if (subValue.id) {\n @switch (subValue.key) {\n @case ('backgroundData') {\n <span class=\"is-inline-block\">{{ term?.name }}</span>\n }\n @case ('animal') {\n <span class=\"is-inline-block\">{{ subValue.id }}</span>\n }\n @default {\n <he-node-link\n class=\"is-inline-block\"\n linkClass=\"is-inline-block\"\n [node]=\"term\"\n [attr.title]=\"term?.name\">\n <span class=\"break-word\" [innerHtml]=\"term?.name | compound\"></span>\n </he-node-link>\n }\n }\n }\n </div>\n </div>\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 (!isEmpty(subValue.originalValue)) {\n <span>\n {{ subValue.originalValue | precision: 3 | default: '-' }}\n </span>\n } @else {\n -\n }\n </td>\n <td>\n @if (subValue.isRecalculated) {\n @if (subValue.multiGroups) {\n <span\n class=\"trigger-popover\"\n ngbPopover=\"The total value across all inputs\"\n autoClose=\"outside\"\n popoverClass=\"is-narrow is-overflow-visible\"\n placement=\"left bottom auto\"\n container=\"body\">\n <span pointer>\n {{ subValue.recalculatedValue | precision: 3 | default: '-' }}\n </span>\n </span>\n } @else {\n <span>\n {{ subValue.recalculatedValue | precision: 3 | default: '-' }}\n </span>\n }\n } @else if (!isEmpty(subValue.originalValue)) {\n not recalculated\n } @else {\n -\n }\n </td>\n @if (isBlankNodes()) {\n <td>-</td>\n }\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: { data: subValue }\" />\n </tr>\n }\n @if (subValue.subValues) {\n @for (sub of subValue.subValues; track trackBySubValue(sub)) {\n <ng-container\n *ngTemplateOutlet=\"\n subValueRow;\n context: { blankNode, parent: subValue, subValue: sub, rowClass: 'is-sub-sub-row' }\n \" />\n }\n }\n</ng-template>\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 (data.canOpen && !data.isOpen && !data.configModels?.length) {\n <td [attr.colspan]=\"methodModelsCount()\">\n <span>Expand to see logs (</span>\n @let key = subValuesKey(data, 'sub-values');\n @if (hasCompleteSuccess(data)) {\n <span>a model for all {{ key }} succeeded</span>\n <he-svg-icon class=\"is-ml-1\" name=\"checkmark\" class=\"has-text-success\" />\n } @else {\n <span>all models for some {{ key }} failed</span>\n <he-svg-icon class=\"is-ml-1\" name=\"xmark\" class=\"has-text-danger\" />\n }\n <span>)</span>\n </td>\n } @else 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] }}\"\n [class.trigger-popover]=\"hasLogs()\"\n [ngbPopover]=\"logStatusDetails\"\n [disablePopover]=\"!hasLogs()\"\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 <ng-container *ngTemplateOutlet=\"docsLink; context: { $implicit: model.model }\" />\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 @if (guideEnabled && model.guidePath) {\n <he-guide-overlay [pageId]=\"model.guidePath\" [width]=\"500\" />\n } @else {\n <a [href]=\"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 }\n</ng-template>\n", styles: [":host{display:block}::ng-deep .table{background-color:transparent}::ng-deep .table td.has-border-right{box-shadow:1px 0 #4c7194}::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:#4c719433;height:100%;width:1px;top:0;left:14px}::ng-deep .table .has-sub-rows.is-open>td:first-child:before{top:25px}::ng-deep .table .is-sub-row td:first-child{padding-left:12px}::ng-deep .table .is-sub-row .sub-sub-row-icon{display:none}::ng-deep .table .is-sub-row .open-node>he-svg-icon,::ng-deep .table .is-sub-row .sub-sub-row-icon{height:16px!important;width:16px!important}::ng-deep .table .is-sub-sub-row td:first-child{padding-left:24px}::ng-deep .table .is-sub-sub-row .sub-sub-row-icon{display:inline-block}::ng-deep .table .is-sub-sub-row .sub-sub-row-icon+div{padding-left:0!important}::ng-deep .table .popover-body .table-container{max-height:260px;overflow-y:auto}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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"] }, { kind: "component", type: GuideOverlayComponent, selector: "he-guide-overlay", inputs: ["pageId", "width", "height", "positions"], outputs: ["widthChange", "heightChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
7341
|
+
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 && !loading() && logsUrl()) {\n <div class=\"is-flex is-align-items-center is-gap-8 is-mb-2\">\n <div class=\"is-flex-grow-1\"></div>\n @if (hasLogs()) {\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 } @else {\n <he-svg-icon class=\"has-text-warning\" name=\"exclamation-triangle\" />\n <span class=\"is-size-7 has-text-warning\">No logs found. Recalculation logs will be incomplete.</span>\n }\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 is-flex is-align-items-flex-start is-gap-4\"\n [attr.title]=\"$any(blankNode).term?.name || $any(blankNode).key\">\n <ng-container *ngTemplateOutlet=\"collapseButton; context: { $implicit: blankNode }\" />\n @if ($any(blankNode).term) {\n <he-node-link class=\"is-inline-block is-pre-wrap is-pr-2\" [node]=\"$any(blankNode).term\">\n <span\n class=\"break-word\"\n [innerHtml]=\"$any(blankNode).term.name | compound: $any(blankNode).term.termType\"></span>\n </he-node-link>\n } @else 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 }\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 if ($any(blankNode).configModels?.length) {\n not recalculated\n } @else {\n -\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 @if (blankNode.isOpen) {\n <tr [class.has-sub-rows]=\"$any(blankNode).subValues?.length\" [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 }\n @for (subValue of $any(blankNode).subValues; track trackBySubValue(subValue)) {\n <ng-container *ngTemplateOutlet=\"subValueRow; context: { blankNode, parent: blankNode, subValue }\" />\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 type=\"checkbox\" class=\"selector\" [(ngModel)]=\"onlyRequired\" [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 #collapseButton let-blankNode>\n @if (blankNode.canOpen) {\n <a class=\"open-node\" (click)=\"toggleBlankNode(blankNode)\">\n <he-svg-icon [name]=\"blankNode.isOpen ? 'chevron-down' : 'chevron-right'\" />\n </a>\n }\n</ng-template>\n\n<ng-template #subValueRow let-blankNode=\"blankNode\" let-parent=\"parent\" let-subValue=\"subValue\" let-rowClass=\"rowClass\">\n @let term = subValue.term || termById(subValue.id);\n @if (parent.isOpen) {\n <tr [class.is-sub-row]=\"parent.canOpen\" [ngClass]=\"rowClass\">\n <td class=\"width-auto has-border-right\">\n <div class=\"is-flex is-align-items-flex-start is-gap-4 h-100\">\n <ng-container *ngTemplateOutlet=\"collapseButton; context: { $implicit: subValue }\" />\n <he-svg-icon class=\"sub-sub-row-icon\" name=\"chevron-double-right\" />\n <div class=\"is-flex is-align-items-flex-start is-flex-wrap-wrap is-gap-4\" [class.is-pl-3]=\"!subValue.canOpen\">\n <span>\n <span>{{ subValue.key | keyToLabel }}</span>\n @if (subValue.id) {\n <span class=\"is-inline-block\">:</span>\n }\n </span>\n @if (subValue.id) {\n @switch (subValue.key) {\n @case ('backgroundData') {\n <span class=\"is-inline-block\">{{ term?.name }}</span>\n }\n @case ('animal') {\n <span class=\"is-inline-block\">{{ subValue.id }}</span>\n }\n @default {\n <he-node-link\n class=\"is-inline-block\"\n linkClass=\"is-inline-block\"\n [node]=\"term\"\n [attr.title]=\"term?.name\">\n <span class=\"break-word\" [innerHtml]=\"term?.name | compound\"></span>\n </he-node-link>\n }\n }\n }\n </div>\n </div>\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 (!isEmpty(subValue.originalValue)) {\n <span>\n {{ subValue.originalValue | precision: 3 | default: '-' }}\n </span>\n } @else {\n -\n }\n </td>\n <td>\n @if (subValue.isRecalculated) {\n @if (subValue.multiGroups) {\n <span\n class=\"trigger-popover\"\n ngbPopover=\"The total value across all inputs\"\n autoClose=\"outside\"\n popoverClass=\"is-narrow is-overflow-visible\"\n placement=\"left bottom auto\"\n container=\"body\">\n <span pointer>\n {{ subValue.recalculatedValue | precision: 3 | default: '-' }}\n </span>\n </span>\n } @else {\n <span>\n {{ subValue.recalculatedValue | precision: 3 | default: '-' }}\n </span>\n }\n } @else if (!isEmpty(subValue.originalValue)) {\n not recalculated\n } @else {\n -\n }\n </td>\n @if (isBlankNodes()) {\n <td>-</td>\n }\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: { data: subValue }\" />\n </tr>\n }\n @if (subValue.subValues) {\n @for (sub of subValue.subValues; track trackBySubValue(sub)) {\n <ng-container\n *ngTemplateOutlet=\"\n subValueRow;\n context: { blankNode, parent: subValue, subValue: sub, rowClass: 'is-sub-sub-row' }\n \" />\n }\n }\n</ng-template>\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 (data.canOpen && !data.isOpen && !data.configModels?.length) {\n <td [attr.colspan]=\"methodModelsCount()\">\n <span>Expand to see logs (</span>\n @let key = subValuesKey(data, 'sub-values');\n @if (hasCompleteSuccess(data)) {\n <span>a model for all {{ key }} succeeded</span>\n <he-svg-icon class=\"is-ml-1\" name=\"checkmark\" class=\"has-text-success\" />\n } @else {\n <span>all models for some {{ key }} failed</span>\n <he-svg-icon class=\"is-ml-1\" name=\"xmark\" class=\"has-text-danger\" />\n }\n <span>)</span>\n </td>\n } @else 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] }}\"\n [class.trigger-popover]=\"hasLogs()\"\n [ngbPopover]=\"logStatusDetails\"\n [disablePopover]=\"!hasLogs()\"\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 <ng-container *ngTemplateOutlet=\"docsLink; context: { $implicit: model.model }\" />\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 @if (guideEnabled && model.guidePath) {\n <he-guide-overlay [pageId]=\"model.guidePath\" [width]=\"500\" />\n } @else {\n <a [href]=\"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 }\n</ng-template>\n", styles: [":host{display:block}::ng-deep .table{background-color:transparent}::ng-deep .table td.has-border-right{box-shadow:1px 0 #4c7194}::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:#4c719433;height:100%;width:1px;top:0;left:14px}::ng-deep .table .has-sub-rows.is-open>td:first-child:before{top:25px}::ng-deep .table .is-sub-row td:first-child{padding-left:12px}::ng-deep .table .is-sub-row .sub-sub-row-icon{display:none}::ng-deep .table .is-sub-row .open-node>he-svg-icon,::ng-deep .table .is-sub-row .sub-sub-row-icon{height:16px!important;width:16px!important}::ng-deep .table .is-sub-sub-row td:first-child{padding-left:24px}::ng-deep .table .is-sub-sub-row .sub-sub-row-icon{display:inline-block}::ng-deep .table .is-sub-sub-row .sub-sub-row-icon+div{padding-left:0!important}::ng-deep .table .popover-body .table-container{max-height:260px;overflow-y:auto}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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"] }, { kind: "component", type: GuideOverlayComponent, selector: "he-guide-overlay", inputs: ["pageId", "width", "height", "positions"], outputs: ["widthChange", "heightChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
7346
7342
|
}
|
|
7347
7343
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeLogsModelsComponent, decorators: [{
|
|
7348
7344
|
type: Component$1,
|
|
@@ -7441,7 +7437,7 @@ class CyclesCompletenessComponent {
|
|
|
7441
7437
|
component.headerKeys.set(headerKeys);
|
|
7442
7438
|
}
|
|
7443
7439
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: CyclesCompletenessComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7444
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: CyclesCompletenessComponent, isStandalone: true, selector: "he-cycles-completeness", inputs: { dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"columns is-variable is-align-items-center is-2 m-0\">\n <div class=\"column\">\n @if (selectedView() === View.table) {\n <button class=\"button is-small is-ghost\" (click)=\"showDownload()\">\n <he-svg-icon name=\"download\" />\n </button>\n }\n </div>\n @if (views()?.length > 1) {\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n @for (view of views(); track view) {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView() === view\"\n (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <he-svg-icon [name]=\"viewIcon[view]\" aria-hidden=\"true\" />\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n }\n </div>\n </div>\n }\n</div>\n\n@switch (selectedView()) {\n @case (View.table) {\n <div class=\"px-3 pb-3\">\n @if (hasData()) {\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n @for (completeness of completenessKeys(); track completeness) {\n <th [attr.title]=\"completeness\">\n <a [href]=\"schemaBaseUrl + '/Completeness#' + completeness\" target=\"_blank\">\n {{ keyToLabel(completeness) }}\n </a>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (cycle of cycles(); track trackById(i, cycle); let i = $index) {\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycle\">\n <span>{{ i + 1 }}. {{ defaultLabel(cycle) }}</span>\n </he-node-link>\n </td>\n @for (key of completenessKeys(); track key) {\n <td class=\"is-nowrap\">\n <span>{{ getCompleteness(cycle)[key] ? 'Complete' : 'Incomplete' }}</span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"dataState()\"\n [node]=\"getCompleteness(cycle)\"\n [key]=\"key\" />\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n <he-blank-node-state-notice [dataState]=\"dataState()\" />\n } @else {\n <div class=\"panel-block\">\n <span>No completeness data</span>\n </div>\n }\n </div>\n }\n @case (View.logs) {\n @if (cycles().length > 1) {\n <div class=\"field has-addons pt-2 px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Cycle</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n @for (value of cycles(); track value; let i = $index) {\n <option [value]=\"i\">{{ i + 1 }}. {{ defaultLabel(value) }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n @if (selectedNode()) {\n <he-node-logs-models\n [node]=\"selectedNode()\"\n [nodeKey]=\"nodeKey\"\n [logsKey]=\"selectedLogsKey()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\" />\n }\n }\n}\n", styles: [""], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
7440
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: CyclesCompletenessComponent, isStandalone: true, selector: "he-cycles-completeness", inputs: { dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"columns is-variable is-align-items-center is-2 m-0\">\n <div class=\"column\">\n @if (selectedView() === View.table) {\n <button class=\"button is-small is-ghost\" (click)=\"showDownload()\">\n <he-svg-icon name=\"download\" />\n </button>\n }\n </div>\n @if (views()?.length > 1) {\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n @for (view of views(); track view) {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView() === view\"\n (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <he-svg-icon [name]=\"viewIcon[view]\" aria-hidden=\"true\" />\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n }\n </div>\n </div>\n }\n</div>\n\n@switch (selectedView()) {\n @case (View.table) {\n <div class=\"px-3 pb-3\">\n @if (hasData()) {\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n @for (completeness of completenessKeys(); track completeness) {\n <th [attr.title]=\"completeness\">\n <a [href]=\"schemaBaseUrl + '/Completeness#' + completeness\" target=\"_blank\">\n {{ keyToLabel(completeness) }}\n </a>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (cycle of cycles(); track trackById(i, cycle); let i = $index) {\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycle\">\n <span>{{ i + 1 }}. {{ defaultLabel(cycle) }}</span>\n </he-node-link>\n </td>\n @for (key of completenessKeys(); track key) {\n <td class=\"is-nowrap\">\n <span>{{ getCompleteness(cycle)[key] ? 'Complete' : 'Incomplete' }}</span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"dataState()\"\n [node]=\"getCompleteness(cycle)\"\n [key]=\"key\" />\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n <he-blank-node-state-notice [dataState]=\"dataState()\" />\n } @else {\n <div class=\"panel-block\">\n <span>No completeness data</span>\n </div>\n }\n </div>\n }\n @case (View.logs) {\n @if (cycles().length > 1) {\n <div class=\"field has-addons pt-2 px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Cycle</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n @for (value of cycles(); track value; let i = $index) {\n <option [value]=\"i\">{{ i + 1 }}. {{ defaultLabel(value) }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n @if (selectedNode()) {\n <he-node-logs-models\n [node]=\"selectedNode()\"\n [nodeKey]=\"nodeKey\"\n [logsKey]=\"selectedLogsKey()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\" />\n }\n }\n}\n", styles: [""], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }, { kind: "component", type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "dataState", "showExternalLink", "linkClass"] }, { kind: "component", type: BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showDeleted"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "filterTermTypesLabel", "logsKey", "noDataMessage"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
7445
7441
|
}
|
|
7446
7442
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: CyclesCompletenessComponent, decorators: [{
|
|
7447
7443
|
type: Component$1,
|
|
@@ -7673,7 +7669,7 @@ class NodeValueDetailsComponent {
|
|
|
7673
7669
|
this.updateKeys(selectedKeys);
|
|
7674
7670
|
}
|
|
7675
7671
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeValueDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7676
|
-
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 [maxPercentile]=\"0.99\" />\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"
|
|
7672
|
+
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 [maxPercentile]=\"0.99\" />\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"] }, { kind: "ngmodule", type: NgbTooltipModule }, { kind: "ngmodule", type: NgbDropdownModule }, { kind: "directive", type: i1$2.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i1$2.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i1$2.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "component", type: DistributionChartComponent, selector: "he-distribution-chart", inputs: ["distribution", "value", "label", "nbBins", "maxPercentile", "config"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
7677
7673
|
}
|
|
7678
7674
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeValueDetailsComponent, decorators: [{
|
|
7679
7675
|
type: Component$1,
|
|
@@ -7794,7 +7790,7 @@ class TermsUnitsDescriptionComponent {
|
|
|
7794
7790
|
this.content = computed(() => this.term()?.unitsDescription);
|
|
7795
7791
|
}
|
|
7796
7792
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: TermsUnitsDescriptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7797
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: TermsUnitsDescriptionComponent, isStandalone: true, selector: "he-terms-units-description", inputs: { term: { classPropertyName: "term", publicName: "term", isSignal: true, isRequired: true, transformFunction: null }, iconTemplate: { classPropertyName: "iconTemplate", publicName: "iconTemplate", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.is-hidden": "!content()" } }, ngImport: i0, template: "@if (content()) {\n <span class=\"has-text-secondary\" [ngbTooltip]=\"content()\" placement=\"bottom\" container=\"body\">\n <ng-container *ngTemplateOutlet=\"iconTemplate() || defaultIconTemplate\" />\n </span>\n}\n\n<ng-template #defaultIconTemplate>\n <he-svg-icon name=\"help-circle\" />\n</ng-template>\n", styles: [""], dependencies: [{ 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"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
7793
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: TermsUnitsDescriptionComponent, isStandalone: true, selector: "he-terms-units-description", inputs: { term: { classPropertyName: "term", publicName: "term", isSignal: true, isRequired: true, transformFunction: null }, iconTemplate: { classPropertyName: "iconTemplate", publicName: "iconTemplate", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.is-hidden": "!content()" } }, ngImport: i0, template: "@if (content()) {\n <span class=\"has-text-secondary\" [ngbTooltip]=\"content()\" placement=\"bottom\" container=\"body\">\n <ng-container *ngTemplateOutlet=\"iconTemplate() || defaultIconTemplate\" />\n </span>\n}\n\n<ng-template #defaultIconTemplate>\n <he-svg-icon name=\"help-circle\" />\n</ng-template>\n", styles: [""], dependencies: [{ 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"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
7798
7794
|
}
|
|
7799
7795
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: TermsUnitsDescriptionComponent, decorators: [{
|
|
7800
7796
|
type: Component$1,
|
|
@@ -7978,7 +7974,7 @@ class CyclesNodesComponent {
|
|
|
7978
7974
|
component.headerKeys.set(this.headerKeys());
|
|
7979
7975
|
}
|
|
7980
7976
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: CyclesNodesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7981
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: CyclesNodesComponent, isStandalone: true, selector: "he-cycles-nodes", inputs: { dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null }, nodeKeys: { classPropertyName: "nodeKeys", publicName: "nodeKeys", isSignal: true, isRequired: true, transformFunction: null }, nodeKeyGroup: { classPropertyName: "nodeKeyGroup", publicName: "nodeKeyGroup", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (isGroupNode()) {\n <div class=\"tabs is-mb-1 | group-nodes-tabs\">\n <ul>\n @for (value of groupNodeValues(); track value) {\n <li [class.is-active]=\"selectedGroup() === value\">\n <a (click)=\"selectedGroup.set(value)\">\n <span class=\"is-capitalized is-pr-1\">{{ nodeKeyGroup() | pluralize: 1 }}:</span>\n <span>{{ value }}</span>\n </a>\n </li>\n }\n </ul>\n </div>\n}\n\n<div class=\"columns is-variable is-align-items-center is-2 is-m-0\">\n <div class=\"column\">\n @if (hasData() && selectedView() === View.table) {\n <button class=\"button is-small is-ghost\" (click)=\"showDownload()\">\n <he-svg-icon name=\"download\" />\n </button>\n }\n </div>\n @if (selectedView() === View.table) {\n <div class=\"column is-narrow\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter terms by name\"\n (searchText)=\"filterTerm.set($event)\" />\n </div>\n }\n @if (views()?.length > 1) {\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n @for (view of views(); track view) {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView() === view\"\n (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <he-svg-icon [name]=\"viewIcon[view]\" aria-hidden=\"true\" />\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n }\n </div>\n </div>\n }\n</div>\n\n@if (isNodeKeyAllowed()) {\n @switch (selectedView()) {\n @case (View.table) {\n <div class=\"is-px-3 is-pb-3\">\n @if (hasData()) {\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 @if (dataKeys().length > 1) {\n <tr class=\"has-text-weight-bold\">\n <th class=\"width-auto\"></th>\n <th [class.is-hidden]=\"isGroupNode()\"></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @let blankNodes = data()[dataKey];\n @if (isGroupVisible(blankNodes)) {\n <th [attr.colspan]=\"blankNodes.length\" [class.has-border-right]=\"!dataKeyLast\">\n <span>{{ dataKey | keyToLabel }}</span>\n </th>\n }\n }\n </tr>\n }\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\"></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @let blankNodes = data()[dataKey];\n @for (node of blankNodes; track node.value.term.name; let nodeLast = $last) {\n @if (node.value.visible) {\n <th\n [attr.title]=\"node.value.term.name\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <he-node-link [node]=\"node.value.term\">\n <span\n [innerHtml]=\"\n node.value.term.name | ellipsis: 30 | compound: node.value.term.termType\n \"></span>\n </he-node-link>\n </th>\n }\n }\n }\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\">\n <a [href]=\"schemaBaseUrl + '/Cycle#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @let blankNodes = data()[dataKey];\n @for (node of blankNodes; track node.value.term.name; let nodeLast = $last) {\n @if (node.value.visible) {\n <th\n [attr.title]=\"node.value.term.units\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <span [innerHtml]=\"node.value.term.units | compound: node.value.term.termType\"></span>\n <he-terms-units-description class=\"is-inline-block is-ml-2\" [term]=\"node.value.term\" />\n </th>\n }\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (cycle of cycles(); track trackById(cycleIndex, cycle); let cycleIndex = $index) {\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycleNode(cycle)\">\n <span>{{ cycleIndex + 1 }}. {{ defaultLabel(cycle) }}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\">\n <he-cycles-functional-unit-measure [cycle]=\"cycle\" />\n </td>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @let blankNodes = data()[dataKey];\n @for (node of blankNodes; track node.value.term.name; let nodeLast = $last) {\n @if (node.value.visible) {\n @let cycleData = node.value.values[cycle['@id']];\n <td\n class=\"is-nowrap\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n @if (cycleData) {\n <span\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n autoClose=\"outside\"\n popoverClass=\"is-narrow is-overflow-visible\"\n placement=\"left bottom auto\"\n container=\"body\"\n [popoverContext]=\"{ data: cycleData, cycle, key: dataKey }\">\n <span pointer>\n {{ cycleData.propertyValue | precision: 3 | default: '-' }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"dataState()\"\n [node]=\"cycleData.node\"\n key=\"value\" />\n </span>\n } @else {\n <span>-</span>\n }\n </td>\n }\n }\n }\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n <div class=\"is-flex is-align-items-center is-flex-wrap-wrap is-justify-content-space-between\">\n <he-blank-node-state-notice\n [dataState]=\"dataState()\"\n [showDeleted]=\"firstNodeKey() === BlankNodesKey.emissions\" />\n @if (showHideZeroValues()) {\n <div class=\"field is-relative is-mb-0\">\n <input\n type=\"checkbox\"\n class=\"switch is-small is-rounded\"\n [id]=\"componentId() + 'hideZeroValues'\"\n name=\"hideZeroValues\"\n [(ngModel)]=\"hideZeroValues\" />\n <label [for]=\"componentId() + 'hideZeroValues'\">\n <span>\n Hide\n <b>0</b>\n values\n </span>\n </label>\n </div>\n }\n @if (cycles().length > 1) {\n <div class=\"field is-relative is-mb-0\">\n <input\n type=\"checkbox\"\n class=\"switch is-small is-rounded\"\n [id]=\"componentId() + 'hideIdenticalValues'\"\n name=\"hideIdenticalValues\"\n [(ngModel)]=\"hideIdenticalValues\" />\n <label [for]=\"componentId() + 'hideIdenticalValues'\">\n <span>Hide identical values</span>\n </label>\n </div>\n }\n </div>\n } @else {\n <div class=\"is-pt-3 has-text-centered\">\n <span>No data available</span>\n @if (filterTerm()) {\n <span class=\"is-pl-1\">matching your search criteria</span>\n }\n <span>.</span>\n @if (showSwitchToRecalculated()) {\n <span>\n Switch to\n <code>recalculated</code>\n version.\n </span>\n }\n </div>\n }\n </div>\n }\n @case (View.chart) {\n @switch (firstNodeKey()) {\n @case (BlankNodesKey.inputs) {\n <he-cycles-result [cycles]=\"cycles()\" />\n }\n @case (BlankNodesKey.emissions) {\n <he-cycles-emissions-chart [cycles]=\"cycles()\" />\n }\n }\n }\n @case (View.timeline) {\n <ng-container *ngTemplateOutlet=\"selectCycle\" />\n <div class=\"is-px-3 is-pb-3\">\n <he-cycles-nodes-timeline [recalculatedValues]=\"timelineValues()\" [dataState]=\"dataState()\" />\n <he-blank-node-state-notice [dataState]=\"dataState()\" />\n </div>\n }\n @case (View.logs) {\n <ng-container *ngTemplateOutlet=\"selectCycle\" />\n @if (nodeKeys().length > 1) {\n <div class=\"tabs is-mb-2\">\n <ul>\n @for (nodeKey of nodeKeys(); track nodeKey) {\n <li [class.is-active]=\"selectedNodeKey() === nodeKey\">\n <a (click)=\"selectedNodeKey.set(nodeKey)\">{{ nodeKey | keyToLabel }}</a>\n </li>\n }\n </ul>\n </div>\n }\n @if (selectedNode()) {\n <he-node-logs-models\n [node]=\"selectedNode()\"\n [nodeKey]=\"selectedNodeKey()\"\n [logsKey]=\"selectedLogsKey()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [filterTermTypes]=\"filterTermTypes()\" />\n }\n }\n }\n}\n\n<ng-template #details let-node=\"cycle\" let-data=\"data\" let-key=\"key\">\n <p>\n <b>{{ defaultLabel(node) }}</b>\n </p>\n <he-node-value-details\n class=\"is-overflow-visible\"\n [data]=\"data\"\n [dataState]=\"dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"key\" />\n</ng-template>\n\n<ng-template #selectCycle>\n @if (cycles().length > 1) {\n <div class=\"field has-addons is-py-2 is-px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Cycle</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n @for (value of cycles(); track value; let cycleIndex = $index) {\n <option [value]=\"cycleIndex\">{{ cycleIndex + 1 }}. {{ defaultLabel(value) }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n</ng-template>\n", styles: ["he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}\n"], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation", "svgClass"] }, { kind: "component", type: SearchExtendComponent, selector: "he-search-extend", inputs: ["value", "disabled", "placeholder", "class"], outputs: ["valueChange", "searchText"] }, { kind: "component", type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "dataState", "showExternalLink", "linkClass"] }, { kind: "component", type: TermsUnitsDescriptionComponent, selector: "he-terms-units-description", inputs: ["term", "iconTemplate"] }, { kind: "component", type: CyclesFunctionalUnitMeasureComponent, selector: "he-cycles-functional-unit-measure", inputs: ["cycle"] }, { 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: "component", type: BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showDeleted"] }, { kind: "component", type: CyclesResultComponent, selector: "he-cycles-result", inputs: ["cycles"] }, { kind: "component", type: CyclesEmissionsChartComponent, selector: "he-cycles-emissions-chart", inputs: ["cycles"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CyclesNodesTimelineComponent, selector: "he-cycles-nodes-timeline", inputs: ["recalculatedValues", "dataState"] }, { kind: "component", type: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "filterTermTypesLabel", "logsKey", "noDataMessage"] }, { kind: "component", type: NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataState", "dataKey"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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: "pipe", type: CompoundPipe, name: "compound" }, { kind: "pipe", type: DefaultPipe, name: "default" }, { kind: "pipe", type: EllipsisPipe, name: "ellipsis" }, { kind: "pipe", type: KeyToLabelPipe, name: "keyToLabel" }, { kind: "pipe", type: PrecisionPipe, name: "precision" }, { kind: "pipe", type: PluralizePipe, name: "pluralize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
7977
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: CyclesNodesComponent, isStandalone: true, selector: "he-cycles-nodes", inputs: { dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null }, nodeKeys: { classPropertyName: "nodeKeys", publicName: "nodeKeys", isSignal: true, isRequired: true, transformFunction: null }, nodeKeyGroup: { classPropertyName: "nodeKeyGroup", publicName: "nodeKeyGroup", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (isGroupNode()) {\n <div class=\"tabs is-mb-1 | group-nodes-tabs\">\n <ul>\n @for (value of groupNodeValues(); track value) {\n <li [class.is-active]=\"selectedGroup() === value\">\n <a (click)=\"selectedGroup.set(value)\">\n <span class=\"is-capitalized is-pr-1\">{{ nodeKeyGroup() | pluralize: 1 }}:</span>\n <span>{{ value }}</span>\n </a>\n </li>\n }\n </ul>\n </div>\n}\n\n<div class=\"columns is-variable is-align-items-center is-2 is-m-0\">\n <div class=\"column\">\n @if (hasData() && selectedView() === View.table) {\n <button class=\"button is-small is-ghost\" (click)=\"showDownload()\">\n <he-svg-icon name=\"download\" />\n </button>\n }\n </div>\n @if (selectedView() === View.table) {\n <div class=\"column is-narrow\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter terms by name\"\n (searchText)=\"filterTerm.set($event)\" />\n </div>\n }\n @if (views()?.length > 1) {\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n @for (view of views(); track view) {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView() === view\"\n (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <he-svg-icon [name]=\"viewIcon[view]\" aria-hidden=\"true\" />\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n }\n </div>\n </div>\n }\n</div>\n\n@if (isNodeKeyAllowed()) {\n @switch (selectedView()) {\n @case (View.table) {\n <div class=\"is-px-3 is-pb-3\">\n @if (hasData()) {\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 @if (dataKeys().length > 1) {\n <tr class=\"has-text-weight-bold\">\n <th class=\"width-auto\"></th>\n <th [class.is-hidden]=\"isGroupNode()\"></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @let blankNodes = data()[dataKey];\n @if (isGroupVisible(blankNodes)) {\n <th [attr.colspan]=\"blankNodes.length\" [class.has-border-right]=\"!dataKeyLast\">\n <span>{{ dataKey | keyToLabel }}</span>\n </th>\n }\n }\n </tr>\n }\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\"></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @let blankNodes = data()[dataKey];\n @for (node of blankNodes; track node.value.term.name; let nodeLast = $last) {\n @if (node.value.visible) {\n <th\n [attr.title]=\"node.value.term.name\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <he-node-link [node]=\"node.value.term\">\n <span\n [innerHtml]=\"\n node.value.term.name | ellipsis: 30 | compound: node.value.term.termType\n \"></span>\n </he-node-link>\n </th>\n }\n }\n }\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\">\n <a [href]=\"schemaBaseUrl + '/Cycle#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @let blankNodes = data()[dataKey];\n @for (node of blankNodes; track node.value.term.name; let nodeLast = $last) {\n @if (node.value.visible) {\n <th\n [attr.title]=\"node.value.term.units\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <span [innerHtml]=\"node.value.term.units | compound: node.value.term.termType\"></span>\n <he-terms-units-description class=\"is-inline-block is-ml-2\" [term]=\"node.value.term\" />\n </th>\n }\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (cycle of cycles(); track trackById(cycleIndex, cycle); let cycleIndex = $index) {\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycleNode(cycle)\">\n <span>{{ cycleIndex + 1 }}. {{ defaultLabel(cycle) }}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\">\n <he-cycles-functional-unit-measure [cycle]=\"cycle\" />\n </td>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @let blankNodes = data()[dataKey];\n @for (node of blankNodes; track node.value.term.name; let nodeLast = $last) {\n @if (node.value.visible) {\n @let cycleData = node.value.values[cycle['@id']];\n <td\n class=\"is-nowrap\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n @if (cycleData) {\n <span\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n autoClose=\"outside\"\n popoverClass=\"is-narrow is-overflow-visible\"\n placement=\"left bottom auto\"\n container=\"body\"\n [popoverContext]=\"{ data: cycleData, cycle, key: dataKey }\">\n <span pointer>\n {{ cycleData.propertyValue | precision: 3 | default: '-' }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"dataState()\"\n [node]=\"cycleData.node\"\n key=\"value\" />\n </span>\n } @else {\n <span>-</span>\n }\n </td>\n }\n }\n }\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n <div class=\"is-flex is-align-items-center is-flex-wrap-wrap is-justify-content-space-between\">\n <he-blank-node-state-notice\n [dataState]=\"dataState()\"\n [showDeleted]=\"firstNodeKey() === BlankNodesKey.emissions\" />\n @if (showHideZeroValues()) {\n <div class=\"field is-relative is-mb-0\">\n <input\n type=\"checkbox\"\n class=\"switch is-small is-rounded\"\n [id]=\"componentId() + 'hideZeroValues'\"\n name=\"hideZeroValues\"\n [(ngModel)]=\"hideZeroValues\" />\n <label [for]=\"componentId() + 'hideZeroValues'\">\n <span>\n Hide\n <b>0</b>\n values\n </span>\n </label>\n </div>\n }\n @if (cycles().length > 1) {\n <div class=\"field is-relative is-mb-0\">\n <input\n type=\"checkbox\"\n class=\"switch is-small is-rounded\"\n [id]=\"componentId() + 'hideIdenticalValues'\"\n name=\"hideIdenticalValues\"\n [(ngModel)]=\"hideIdenticalValues\" />\n <label [for]=\"componentId() + 'hideIdenticalValues'\">\n <span>Hide identical values</span>\n </label>\n </div>\n }\n </div>\n } @else {\n <div class=\"is-pt-3 has-text-centered\">\n <span>No data available</span>\n @if (filterTerm()) {\n <span class=\"is-pl-1\">matching your search criteria</span>\n }\n <span>.</span>\n @if (showSwitchToRecalculated()) {\n <span>\n Switch to\n <code>recalculated</code>\n version.\n </span>\n }\n </div>\n }\n </div>\n }\n @case (View.chart) {\n @switch (firstNodeKey()) {\n @case (BlankNodesKey.inputs) {\n <he-cycles-result [cycles]=\"cycles()\" />\n }\n @case (BlankNodesKey.emissions) {\n <he-cycles-emissions-chart [cycles]=\"cycles()\" />\n }\n }\n }\n @case (View.timeline) {\n <ng-container *ngTemplateOutlet=\"selectCycle\" />\n <div class=\"is-px-3 is-pb-3\">\n <he-cycles-nodes-timeline [recalculatedValues]=\"timelineValues()\" [dataState]=\"dataState()\" />\n <he-blank-node-state-notice [dataState]=\"dataState()\" />\n </div>\n }\n @case (View.logs) {\n <ng-container *ngTemplateOutlet=\"selectCycle\" />\n @if (nodeKeys().length > 1) {\n <div class=\"tabs is-mb-2\">\n <ul>\n @for (nodeKey of nodeKeys(); track nodeKey) {\n <li [class.is-active]=\"selectedNodeKey() === nodeKey\">\n <a (click)=\"selectedNodeKey.set(nodeKey)\">{{ nodeKey | keyToLabel }}</a>\n </li>\n }\n </ul>\n </div>\n }\n @if (selectedNode()) {\n <he-node-logs-models\n [node]=\"selectedNode()\"\n [nodeKey]=\"selectedNodeKey()\"\n [logsKey]=\"selectedLogsKey()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [filterTermTypes]=\"filterTermTypes()\" />\n }\n }\n }\n}\n\n<ng-template #details let-node=\"cycle\" let-data=\"data\" let-key=\"key\">\n <p>\n <b>{{ defaultLabel(node) }}</b>\n </p>\n <he-node-value-details\n class=\"is-overflow-visible\"\n [data]=\"data\"\n [dataState]=\"dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"key\" />\n</ng-template>\n\n<ng-template #selectCycle>\n @if (cycles().length > 1) {\n <div class=\"field has-addons is-py-2 is-px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Cycle</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n @for (value of cycles(); track value; let cycleIndex = $index) {\n <option [value]=\"cycleIndex\">{{ cycleIndex + 1 }}. {{ defaultLabel(value) }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n</ng-template>\n", styles: ["he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}\n"], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }, { kind: "component", type: SearchExtendComponent, selector: "he-search-extend", inputs: ["value", "disabled", "placeholder", "class"], outputs: ["valueChange", "searchText"] }, { kind: "component", type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "dataState", "showExternalLink", "linkClass"] }, { kind: "component", type: TermsUnitsDescriptionComponent, selector: "he-terms-units-description", inputs: ["term", "iconTemplate"] }, { kind: "component", type: CyclesFunctionalUnitMeasureComponent, selector: "he-cycles-functional-unit-measure", inputs: ["cycle"] }, { 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: "component", type: BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showDeleted"] }, { kind: "component", type: CyclesResultComponent, selector: "he-cycles-result", inputs: ["cycles"] }, { kind: "component", type: CyclesEmissionsChartComponent, selector: "he-cycles-emissions-chart", inputs: ["cycles"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CyclesNodesTimelineComponent, selector: "he-cycles-nodes-timeline", inputs: ["recalculatedValues", "dataState"] }, { kind: "component", type: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "filterTermTypesLabel", "logsKey", "noDataMessage"] }, { kind: "component", type: NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataState", "dataKey"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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: "pipe", type: CompoundPipe, name: "compound" }, { kind: "pipe", type: DefaultPipe, name: "default" }, { kind: "pipe", type: EllipsisPipe, name: "ellipsis" }, { kind: "pipe", type: KeyToLabelPipe, name: "keyToLabel" }, { kind: "pipe", type: PrecisionPipe, name: "precision" }, { kind: "pipe", type: PluralizePipe, name: "pluralize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
7982
7978
|
}
|
|
7983
7979
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: CyclesNodesComponent, decorators: [{
|
|
7984
7980
|
type: Component$1,
|
|
@@ -8024,7 +8020,7 @@ class EngineModelsLinkComponent {
|
|
|
8024
8020
|
this.name = computed(() => this.title() || formatName(keyToLabel(this.modelName() || this.configModel())));
|
|
8025
8021
|
}
|
|
8026
8022
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: EngineModelsLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8027
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: EngineModelsLinkComponent, isStandalone: true, selector: "he-engine-models-link", inputs: { configModel: { classPropertyName: "configModel", publicName: "configModel", isSignal: true, isRequired: true, transformFunction: null }, matchParams: { classPropertyName: "matchParams", publicName: "matchParams", isSignal: true, isRequired: true, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, linkClass: { classPropertyName: "linkClass", publicName: "linkClass", isSignal: true, isRequired: false, transformFunction: null }, showNoModelFound: { classPropertyName: "showNoModelFound", publicName: "showNoModelFound", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (showNoModelFound() || model()) {\n @if (model()) {\n <a\n [ngClass]=\"linkClass()\"\n [href]=\"model().docPath || model().path\"\n target=\"_blank\"\n (click)=\"$event.stopPropagation()\">\n <span>{{ name() }}</span>\n <he-svg-icon class=\"is-ml-2\" name=\"external-link\" />\n </a>\n } @else {\n <span>{{ name() }}</span>\n }\n}\n", styles: [""], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
8023
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: EngineModelsLinkComponent, isStandalone: true, selector: "he-engine-models-link", inputs: { configModel: { classPropertyName: "configModel", publicName: "configModel", isSignal: true, isRequired: true, transformFunction: null }, matchParams: { classPropertyName: "matchParams", publicName: "matchParams", isSignal: true, isRequired: true, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, linkClass: { classPropertyName: "linkClass", publicName: "linkClass", isSignal: true, isRequired: false, transformFunction: null }, showNoModelFound: { classPropertyName: "showNoModelFound", publicName: "showNoModelFound", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (showNoModelFound() || model()) {\n @if (model()) {\n <a\n [ngClass]=\"linkClass()\"\n [href]=\"model().docPath || model().path\"\n target=\"_blank\"\n (click)=\"$event.stopPropagation()\">\n <span>{{ name() }}</span>\n <he-svg-icon class=\"is-ml-2\" name=\"external-link\" />\n </a>\n } @else {\n <span>{{ name() }}</span>\n }\n}\n", styles: [""], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }] }); }
|
|
8028
8024
|
}
|
|
8029
8025
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: EngineModelsLinkComponent, decorators: [{
|
|
8030
8026
|
type: Component$1,
|
|
@@ -8111,28 +8107,24 @@ const nodeVersion = (node) => {
|
|
|
8111
8107
|
|
|
8112
8108
|
// auto-generated content using "node scripts/generate-icons.js"
|
|
8113
8109
|
|
|
8114
|
-
|
|
8115
|
-
|
|
8116
|
-
|
|
8117
|
-
|
|
8118
|
-
|
|
8119
|
-
|
|
8120
|
-
|
|
8121
|
-
|
|
8122
|
-
|
|
8123
|
-
|
|
8124
|
-
|
|
8125
|
-
|
|
8126
|
-
|
|
8127
|
-
|
|
8128
|
-
|
|
8129
|
-
|
|
8130
|
-
|
|
8131
|
-
|
|
8132
|
-
],
|
|
8133
|
-
exports: [AngularSvgIconModule]
|
|
8134
|
-
}]
|
|
8135
|
-
}] });
|
|
8110
|
+
const svgIconPath = '/assets/svg-icons';
|
|
8111
|
+
const svgSpritePath = `${svgIconPath}/icons-sprite.svg`;
|
|
8112
|
+
const loadSvgSprite = () => {
|
|
8113
|
+
const http = inject(HttpClient);
|
|
8114
|
+
const document = inject(DOCUMENT);
|
|
8115
|
+
return http
|
|
8116
|
+
.get(svgSpritePath, { responseType: 'text' })
|
|
8117
|
+
.pipe(tap(svgContent => {
|
|
8118
|
+
const div = document.createElement('div');
|
|
8119
|
+
div.innerHTML = svgContent;
|
|
8120
|
+
const svg = div.querySelector('svg');
|
|
8121
|
+
if (svg) {
|
|
8122
|
+
svg.style.display = 'none';
|
|
8123
|
+
document.body.insertBefore(svg, document.body.firstChild);
|
|
8124
|
+
}
|
|
8125
|
+
}))
|
|
8126
|
+
.toPromise();
|
|
8127
|
+
};
|
|
8136
8128
|
|
|
8137
8129
|
class NodeAggregatedInfoComponent {
|
|
8138
8130
|
constructor() {
|
|
@@ -8142,7 +8134,7 @@ class NodeAggregatedInfoComponent {
|
|
|
8142
8134
|
this.triggers = input('click');
|
|
8143
8135
|
}
|
|
8144
8136
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeAggregatedInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8145
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeAggregatedInfoComponent, isStandalone: true, selector: "he-node-aggregated-info", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, showSource: { classPropertyName: "showSource", publicName: "showSource", isSignal: true, isRequired: false, transformFunction: null }, showSites: { classPropertyName: "showSites", publicName: "showSites", isSignal: true, isRequired: false, transformFunction: null }, triggers: { classPropertyName: "triggers", publicName: "triggers", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<button\n class=\"button is-ghost is-small is-p-0\"\n [ngbPopover]=\"popoverTemplate\"\n [triggers]=\"triggers()\"\n autoClose=\"outside\"\n placement=\"right\"\n container=\"body\"\n pointer>\n <he-svg-icon [name]=\"icon()\" />\n</button>\n\n<ng-template #popoverTemplate>\n <p>\n <b>Aggregated Data</b>\n combines producer-specific information to calculate average values for countries, products, date periods, and\n certain production systems.\n </p>\n <p class=\"is-mt-3\">\n <b>Cycles</b>\n refers to information about particular production sites (e.g., specific farms) and production cycles (e.g., specific\n fields and years) for growing crops.\n </p>\n @if (showSource()) {\n <p class=\"is-mt-3\">\n <b>Sources</b>\n are generally peer-reviewed published studies or databases. They contain data on one or many production Cycles.\n </p>\n }\n\n @if (showSites()) {\n <p class=\"is-mt-3\">\n <b>Sites</b>\n are generally fields for growing crops or grazing animals, water bodies, or urban areas. One or more Cycle can\n occur on a Site.\n </p>\n }\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: NgbPopoverModule }, { kind: "directive", type: i1$2.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "ngbPopover", "popoverTitle", "placement", "popperOptions", "triggers", "positionTarget", "container", "disablePopover", "popoverClass", "popoverContext", "openDelay", "closeDelay"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
8137
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeAggregatedInfoComponent, isStandalone: true, selector: "he-node-aggregated-info", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, showSource: { classPropertyName: "showSource", publicName: "showSource", isSignal: true, isRequired: false, transformFunction: null }, showSites: { classPropertyName: "showSites", publicName: "showSites", isSignal: true, isRequired: false, transformFunction: null }, triggers: { classPropertyName: "triggers", publicName: "triggers", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<button\n class=\"button is-ghost is-small is-p-0\"\n [ngbPopover]=\"popoverTemplate\"\n [triggers]=\"triggers()\"\n autoClose=\"outside\"\n placement=\"right\"\n container=\"body\"\n pointer>\n <he-svg-icon [name]=\"icon()\" />\n</button>\n\n<ng-template #popoverTemplate>\n <p>\n <b>Aggregated Data</b>\n combines producer-specific information to calculate average values for countries, products, date periods, and\n certain production systems.\n </p>\n <p class=\"is-mt-3\">\n <b>Cycles</b>\n refers to information about particular production sites (e.g., specific farms) and production cycles (e.g., specific\n fields and years) for growing crops.\n </p>\n @if (showSource()) {\n <p class=\"is-mt-3\">\n <b>Sources</b>\n are generally peer-reviewed published studies or databases. They contain data on one or many production Cycles.\n </p>\n }\n\n @if (showSites()) {\n <p class=\"is-mt-3\">\n <b>Sites</b>\n are generally fields for growing crops or grazing animals, water bodies, or urban areas. One or more Cycle can\n occur on a Site.\n </p>\n }\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: NgbPopoverModule }, { kind: "directive", type: i1$2.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "ngbPopover", "popoverTitle", "placement", "popperOptions", "triggers", "positionTarget", "container", "disablePopover", "popoverClass", "popoverContext", "openDelay", "closeDelay"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }] }); }
|
|
8146
8138
|
}
|
|
8147
8139
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeAggregatedInfoComponent, decorators: [{
|
|
8148
8140
|
type: Component$1,
|
|
@@ -8293,7 +8285,7 @@ class NodeAggregatedQualityScoreComponent {
|
|
|
8293
8285
|
return term['@id'];
|
|
8294
8286
|
}
|
|
8295
8287
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeAggregatedQualityScoreComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8296
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeAggregatedQualityScoreComponent, isStandalone: true, selector: "he-node-aggregated-quality-score", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, country: { classPropertyName: "country", publicName: "country", isSignal: true, isRequired: false, transformFunction: null }, showInfo: { classPropertyName: "showInfo", publicName: "showInfo", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.is-none": "this.hidden" } }, ngImport: i0, template: "@if (score() >= 0) {\n @switch (mode()) {\n @case ('tag') {\n <div class=\"tags has-addons\">\n <a class=\"tag\" [href]=\"schemaUrl()\" target=\"_blank\">Data Quality</a>\n <ng-container *ngTemplateOutlet=\"quality\" />\n @if (showInfo()) {\n <span\n class=\"tag pointer\"\n [ngbTooltip]=\"logsTooltip\"\n [placement]=\"placement() + ' auto'\"\n triggers=\"click\"\n container=\"body\"\n autoClose=\"outside\"\n tooltipClass=\"quality-tooltip\">\n @if (loading()) {\n <he-svg-icon name=\"loading\" animation=\"spin\" />\n } @else if (logs()) {\n <he-svg-icon name=\"help-circle\" />\n }\n </span>\n }\n </div>\n }\n @default {\n <ng-container *ngTemplateOutlet=\"quality\" />\n }\n }\n}\n\n<ng-template #quality>\n <span\n [ngStyle]=\"{\n 'background-color': scoreColor()\n }\"\n class=\"tag-score | tag is-primary has-text-white\">\n <span>{{ scoreLevel() | uppercase }}</span>\n </span>\n</ng-template>\n\n<ng-template #logsTooltip>\n <div>\n <p class=\"mb-2\">\n Up to {{ scoreMax() }} points are awarded for the following criteria, where \"low\" is 0 to\n {{ scoreMax() - 3 }} points, \"medium\" is {{ scoreMax() - 2 }} to {{ scoreMax() - 1 }} points, and \"high\" is\n {{ scoreMax() }} points:\n </p>\n @if (validScores()) {\n <div class=\"table-container\">\n <table class=\"table is-fullwidth has-text-white has-background-secondary\">\n <thead>\n <tr>\n <th class=\"has-text-white\">Condition</th>\n <th class=\"has-text-white\">Met</th>\n @if (isCycle()) {\n <th class=\"has-text-white\">Details</th>\n }\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>No emissions included in the system boundary are missing</td>\n <td [class.has-text-success]=\"validScores()[0]\" [class.has-text-danger]=\"!validScores()[0]\">\n {{ validScores()[0] ? 'Yes' : 'No' }}\n </td>\n @if (isCycle()) {\n <td>\n @if (missingEmissions()?.length) {\n <span>{{ missingEmissions().length }}</span>\n <span class=\"is-pl-1\">{{ 'emission' | pluralize: missingEmissions().length }} are missing:</span>\n <div class=\"is-mt-2 | missing-emissions\">\n <ul class=\"is-list-style-disc is-pl-4\">\n @for (term of missingEmissions(); track trackByTerm($index, term); let l = $last) {\n <li>\n <he-node-link class=\"is-inline-block is-pl-1\" linkClass=\"is-dark\" [node]=\"term\">\n <span class=\"is-nowrap has-text-ellipsis\">{{ term.name }}</span>\n </he-node-link>\n </li>\n }\n </ul>\n </div>\n } @else if (logs()?.included_emissions) {\n <span>\n All {{ logs().included_emissions }} {{ 'emission' | pluralize: +logs().included_emissions }} for\n this product are included.\n </span>\n }\n </td>\n }\n </tr>\n <tr>\n <td>The aggregation is based on data from over {{ minObservations() }} Cycles</td>\n <td [class.has-text-success]=\"validScores()[1]\" [class.has-text-danger]=\"!validScores()[1]\">\n {{ validScores()[1] ? 'Yes' : 'No' }}\n </td>\n @if (isCycle()) {\n <td>\n <span>Based on {{ observations() }} {{ 'Cycle' | pluralize: observations() }}.</span>\n </td>\n }\n </tr>\n @if (isCrop()) {\n <tr>\n <td>\n The difference between yield per hectare here and FAOSTAT is less than \u00B1{{\n logs().yield_delta_min || logs().delta_min | number\n }}%\n </td>\n <td [class.has-text-success]=\"validScores()[2]\" [class.has-text-danger]=\"!validScores()[2]\">\n {{ validScores()[2] ? 'Yes' : 'No' }}\n </td>\n @if (isCycle()) {\n <td>\n @if (logs()?.faostat_yield !== 'None') {\n <span>FAOSTAT yield =</span>\n <span class=\"is-pl-1\">{{ logs()?.faostat_yield | precision: 3 }}</span>\n <span class=\"is-pl-1\">kg/ha;</span>\n <span class=\"is-pl-1\">Aggregated data yield =</span>\n <span class=\"is-pl-1\">{{ logs()?.product_yield | precision: 3 }}</span>\n <span class=\"is-pl-1\">kg/ha.</span>\n } @else {\n No yield found on FAOSTAT for this product.\n }\n </td>\n }\n </tr>\n }\n <tr>\n <td>\n Data completeness is\n <code class=\"is-p-1\">true</code>\n for all priority areas\n </td>\n <td [class.has-text-success]=\"validScores()[3]\" [class.has-text-danger]=\"!validScores()[3]\">\n {{ validScores()[3] ? 'Yes' : 'No' }}\n </td>\n @if (isCycle()) {\n <td>\n @if (missingCompletenessFields()?.length) {\n <span>{{ missingCompletenessFields().length }}</span>\n <span class=\"is-pl-1\">completeness areas missing data:</span>\n @for (field of missingCompletenessFields(); track field; let l = $last) {\n <a class=\"is-inline-block is-pl-1 is-dark\" [href]=\"completenessUrl(field)\" target=\"_blank\">\n {{ field }}\n </a>\n <span>{{ l ? '.' : ',' }}</span>\n }\n }\n </td>\n }\n </tr>\n @if (isCrop() && isGlobal()) {\n <tr>\n <td>Aggregated countries represent at least 75% of {{ countryName() }} production</td>\n <td [class.has-text-success]=\"validScores()[4]\" [class.has-text-danger]=\"!validScores()[4]\">\n {{ validScores()[4] ? 'Yes' : 'No' }}\n </td>\n @if (isCycle()) {\n <td>\n @if (hasProductionQuantity()) {\n <span>{{ countryName() }} production quantity =</span>\n <span class=\"is-pl-1\">{{ regionProductionQuantity() / 1000000 | number: '1.0-0' }}</span>\n <span class=\"is-pl-1\">million tonnes;</span>\n <span class=\"is-pl-1\">Production of countries included in the aggregation =</span>\n <span class=\"is-pl-1\">{{ countriesProductionQuantity() / 1000000 | number: '1.0-0' }}</span>\n <span class=\"is-pl-1\">million tonnes.</span>\n } @else {\n No production quantity found on FAOSTAT for this product.\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n</ng-template>\n", styles: [":host{display:inline-block}::ng-deep .quality-tooltip{min-width:500px}.missing-emissions{max-height:250px;overflow-y:auto}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: PluralizePipe, name: "pluralize" }, { kind: "pipe", type: DecimalPipe, name: "number" }, { kind: "pipe", type: PrecisionPipe, name: "precision" }, { kind: "pipe", type: UpperCasePipe, name: "uppercase" }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "dataState", "showExternalLink", "linkClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: NgbTooltipModule }, { kind: "directive", type: i1$2.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
8288
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeAggregatedQualityScoreComponent, isStandalone: true, selector: "he-node-aggregated-quality-score", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, country: { classPropertyName: "country", publicName: "country", isSignal: true, isRequired: false, transformFunction: null }, showInfo: { classPropertyName: "showInfo", publicName: "showInfo", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.is-none": "this.hidden" } }, ngImport: i0, template: "@if (score() >= 0) {\n @switch (mode()) {\n @case ('tag') {\n <div class=\"tags has-addons\">\n <a class=\"tag\" [href]=\"schemaUrl()\" target=\"_blank\">Data Quality</a>\n <ng-container *ngTemplateOutlet=\"quality\" />\n @if (showInfo()) {\n <span\n class=\"tag pointer\"\n [ngbTooltip]=\"logsTooltip\"\n [placement]=\"placement() + ' auto'\"\n triggers=\"click\"\n container=\"body\"\n autoClose=\"outside\"\n tooltipClass=\"quality-tooltip\">\n @if (loading()) {\n <he-svg-icon name=\"loading\" animation=\"spin\" />\n } @else if (logs()) {\n <he-svg-icon name=\"help-circle\" />\n }\n </span>\n }\n </div>\n }\n @default {\n <ng-container *ngTemplateOutlet=\"quality\" />\n }\n }\n}\n\n<ng-template #quality>\n <span\n [ngStyle]=\"{\n 'background-color': scoreColor()\n }\"\n class=\"tag-score | tag is-primary has-text-white\">\n <span>{{ scoreLevel() | uppercase }}</span>\n </span>\n</ng-template>\n\n<ng-template #logsTooltip>\n <div>\n <p class=\"mb-2\">\n Up to {{ scoreMax() }} points are awarded for the following criteria, where \"low\" is 0 to\n {{ scoreMax() - 3 }} points, \"medium\" is {{ scoreMax() - 2 }} to {{ scoreMax() - 1 }} points, and \"high\" is\n {{ scoreMax() }} points:\n </p>\n @if (validScores()) {\n <div class=\"table-container\">\n <table class=\"table is-fullwidth has-text-white has-background-secondary\">\n <thead>\n <tr>\n <th class=\"has-text-white\">Condition</th>\n <th class=\"has-text-white\">Met</th>\n @if (isCycle()) {\n <th class=\"has-text-white\">Details</th>\n }\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>No emissions included in the system boundary are missing</td>\n <td [class.has-text-success]=\"validScores()[0]\" [class.has-text-danger]=\"!validScores()[0]\">\n {{ validScores()[0] ? 'Yes' : 'No' }}\n </td>\n @if (isCycle()) {\n <td>\n @if (missingEmissions()?.length) {\n <span>{{ missingEmissions().length }}</span>\n <span class=\"is-pl-1\">{{ 'emission' | pluralize: missingEmissions().length }} are missing:</span>\n <div class=\"is-mt-2 | missing-emissions\">\n <ul class=\"is-list-style-disc is-pl-4\">\n @for (term of missingEmissions(); track trackByTerm($index, term); let l = $last) {\n <li>\n <he-node-link class=\"is-inline-block is-pl-1\" linkClass=\"is-dark\" [node]=\"term\">\n <span class=\"is-nowrap has-text-ellipsis\">{{ term.name }}</span>\n </he-node-link>\n </li>\n }\n </ul>\n </div>\n } @else if (logs()?.included_emissions) {\n <span>\n All {{ logs().included_emissions }} {{ 'emission' | pluralize: +logs().included_emissions }} for\n this product are included.\n </span>\n }\n </td>\n }\n </tr>\n <tr>\n <td>The aggregation is based on data from over {{ minObservations() }} Cycles</td>\n <td [class.has-text-success]=\"validScores()[1]\" [class.has-text-danger]=\"!validScores()[1]\">\n {{ validScores()[1] ? 'Yes' : 'No' }}\n </td>\n @if (isCycle()) {\n <td>\n <span>Based on {{ observations() }} {{ 'Cycle' | pluralize: observations() }}.</span>\n </td>\n }\n </tr>\n @if (isCrop()) {\n <tr>\n <td>\n The difference between yield per hectare here and FAOSTAT is less than \u00B1{{\n logs().yield_delta_min || logs().delta_min | number\n }}%\n </td>\n <td [class.has-text-success]=\"validScores()[2]\" [class.has-text-danger]=\"!validScores()[2]\">\n {{ validScores()[2] ? 'Yes' : 'No' }}\n </td>\n @if (isCycle()) {\n <td>\n @if (logs()?.faostat_yield !== 'None') {\n <span>FAOSTAT yield =</span>\n <span class=\"is-pl-1\">{{ logs()?.faostat_yield | precision: 3 }}</span>\n <span class=\"is-pl-1\">kg/ha;</span>\n <span class=\"is-pl-1\">Aggregated data yield =</span>\n <span class=\"is-pl-1\">{{ logs()?.product_yield | precision: 3 }}</span>\n <span class=\"is-pl-1\">kg/ha.</span>\n } @else {\n No yield found on FAOSTAT for this product.\n }\n </td>\n }\n </tr>\n }\n <tr>\n <td>\n Data completeness is\n <code class=\"is-p-1\">true</code>\n for all priority areas\n </td>\n <td [class.has-text-success]=\"validScores()[3]\" [class.has-text-danger]=\"!validScores()[3]\">\n {{ validScores()[3] ? 'Yes' : 'No' }}\n </td>\n @if (isCycle()) {\n <td>\n @if (missingCompletenessFields()?.length) {\n <span>{{ missingCompletenessFields().length }}</span>\n <span class=\"is-pl-1\">completeness areas missing data:</span>\n @for (field of missingCompletenessFields(); track field; let l = $last) {\n <a class=\"is-inline-block is-pl-1 is-dark\" [href]=\"completenessUrl(field)\" target=\"_blank\">\n {{ field }}\n </a>\n <span>{{ l ? '.' : ',' }}</span>\n }\n }\n </td>\n }\n </tr>\n @if (isCrop() && isGlobal()) {\n <tr>\n <td>Aggregated countries represent at least 75% of {{ countryName() }} production</td>\n <td [class.has-text-success]=\"validScores()[4]\" [class.has-text-danger]=\"!validScores()[4]\">\n {{ validScores()[4] ? 'Yes' : 'No' }}\n </td>\n @if (isCycle()) {\n <td>\n @if (hasProductionQuantity()) {\n <span>{{ countryName() }} production quantity =</span>\n <span class=\"is-pl-1\">{{ regionProductionQuantity() / 1000000 | number: '1.0-0' }}</span>\n <span class=\"is-pl-1\">million tonnes;</span>\n <span class=\"is-pl-1\">Production of countries included in the aggregation =</span>\n <span class=\"is-pl-1\">{{ countriesProductionQuantity() / 1000000 | number: '1.0-0' }}</span>\n <span class=\"is-pl-1\">million tonnes.</span>\n } @else {\n No production quantity found on FAOSTAT for this product.\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n</ng-template>\n", styles: [":host{display:inline-block}::ng-deep .quality-tooltip{min-width:500px}.missing-emissions{max-height:250px;overflow-y:auto}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: PluralizePipe, name: "pluralize" }, { kind: "pipe", type: DecimalPipe, name: "number" }, { kind: "pipe", type: PrecisionPipe, name: "precision" }, { kind: "pipe", type: UpperCasePipe, name: "uppercase" }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "dataState", "showExternalLink", "linkClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: NgbTooltipModule }, { kind: "directive", type: i1$2.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
8297
8289
|
}
|
|
8298
8290
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeAggregatedQualityScoreComponent, decorators: [{
|
|
8299
8291
|
type: Component$1,
|
|
@@ -8334,7 +8326,7 @@ class NodeCsvPreviewComponent {
|
|
|
8334
8326
|
this.rows = computed(() => this.parsedCsv().slice(1));
|
|
8335
8327
|
}
|
|
8336
8328
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeCsvPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8337
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeCsvPreviewComponent, isStandalone: true, selector: "he-node-csv-preview", inputs: { nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: true, isRequired: true, transformFunction: null }, compacted: { classPropertyName: "compacted", publicName: "compacted", isSignal: true, isRequired: false, transformFunction: null }, showDownload: { classPropertyName: "showDownload", publicName: "showDownload", isSignal: true, isRequired: false, transformFunction: null }, csvOptions: { classPropertyName: "csvOptions", publicName: "csvOptions", isSignal: true, isRequired: false, transformFunction: null }, csvNotice: { classPropertyName: "csvNotice", publicName: "csvNotice", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (showDownload() && csv()) {\n <div class=\"is-flex is-justify-content-space-between is-align-items-center\">\n <p>{{ csvNotice() }}</p>\n <a class=\"button is-ghost is-small | download-csv-button\" [href]=\"csv()\" download=\"sample.csv\">\n <he-svg-icon name=\"download\" class=\"has-text-grey-dark\" />\n <span class=\"is-pl-2\">Download</span>\n </a>\n </div>\n}\n@if (nodes().length) {\n <div class=\"table-container is-mt-2\">\n <table class=\"table is-fullwidth is-narrow is-hoverable is-striped\">\n <thead>\n @for (header of headers(); track header) {\n <th class=\"has-text-white has-text-weight-light has-text-centered\">\n <span class=\"is-block is-px-2 is-nowrap\">{{ header }}</span>\n </th>\n }\n </thead>\n <tbody>\n @for (row of rows(); track rowIndex; let rowIndex = $index) {\n <tr>\n @for (col of row; track colIndex; let colIndex = $index) {\n <td class=\"has-text-centered\">\n <span class=\"is-px-2 is-nowrap\">{{ col }}</span>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n}\n", styles: [":host{display:block}.table th>span{background-color:#4c7194;border-radius:6px}.download-csv-button{background-color:#ffe8a3}\n"], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
8329
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeCsvPreviewComponent, isStandalone: true, selector: "he-node-csv-preview", inputs: { nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: true, isRequired: true, transformFunction: null }, compacted: { classPropertyName: "compacted", publicName: "compacted", isSignal: true, isRequired: false, transformFunction: null }, showDownload: { classPropertyName: "showDownload", publicName: "showDownload", isSignal: true, isRequired: false, transformFunction: null }, csvOptions: { classPropertyName: "csvOptions", publicName: "csvOptions", isSignal: true, isRequired: false, transformFunction: null }, csvNotice: { classPropertyName: "csvNotice", publicName: "csvNotice", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (showDownload() && csv()) {\n <div class=\"is-flex is-justify-content-space-between is-align-items-center\">\n <p>{{ csvNotice() }}</p>\n <a class=\"button is-ghost is-small | download-csv-button\" [href]=\"csv()\" download=\"sample.csv\">\n <he-svg-icon name=\"download\" class=\"has-text-grey-dark\" />\n <span class=\"is-pl-2\">Download</span>\n </a>\n </div>\n}\n@if (nodes().length) {\n <div class=\"table-container is-mt-2\">\n <table class=\"table is-fullwidth is-narrow is-hoverable is-striped\">\n <thead>\n @for (header of headers(); track header) {\n <th class=\"has-text-white has-text-weight-light has-text-centered\">\n <span class=\"is-block is-px-2 is-nowrap\">{{ header }}</span>\n </th>\n }\n </thead>\n <tbody>\n @for (row of rows(); track rowIndex; let rowIndex = $index) {\n <tr>\n @for (col of row; track colIndex; let colIndex = $index) {\n <td class=\"has-text-centered\">\n <span class=\"is-px-2 is-nowrap\">{{ col }}</span>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n}\n", styles: [":host{display:block}.table th>span{background-color:#4c7194;border-radius:6px}.download-csv-button{background-color:#ffe8a3}\n"], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
8338
8330
|
}
|
|
8339
8331
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeCsvPreviewComponent, decorators: [{
|
|
8340
8332
|
type: Component$1,
|
|
@@ -8357,7 +8349,7 @@ class NodeIconComponent {
|
|
|
8357
8349
|
this.icon = computed(() => nodeTypeIcon[this.type()]);
|
|
8358
8350
|
}
|
|
8359
8351
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8360
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeIconComponent, isStandalone: true, selector: "he-node-icon", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (type() && icon()) {\n <he-svg-icon [name]=\"icon()\" [size]=\"size()\" class=\"is-inline-block\" />\n}\n", styles: [""], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
8352
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeIconComponent, isStandalone: true, selector: "he-node-icon", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (type() && icon()) {\n <he-svg-icon [name]=\"icon()\" [size]=\"size()\" class=\"is-inline-block\" />\n}\n", styles: [""], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
8361
8353
|
}
|
|
8362
8354
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeIconComponent, decorators: [{
|
|
8363
8355
|
type: Component$1,
|
|
@@ -8460,7 +8452,7 @@ class NodeLogsFileComponent {
|
|
|
8460
8452
|
this.csvFilename = computed(() => fileToExt(this.node()?.['@id'] ?? '', 'csv'));
|
|
8461
8453
|
}
|
|
8462
8454
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeLogsFileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8463
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeLogsFileComponent, isStandalone: true, selector: "he-node-logs-file", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"is-relative\">\n <div class=\"copy-clipboard\">\n <div class=\"field has-addons\">\n @if (showFilters()) {\n <div class=\"control\">\n <input\n class=\"input is-secondary is-small\"\n [(ngModel)]=\"modelFilter\"\n id=\"modelFilter\"\n placeholder=\"Filter by Method / Model\" />\n </div>\n <div class=\"control\">\n <input\n class=\"input is-secondary is-small\"\n [(ngModel)]=\"termFilter\"\n id=\"termFilter\"\n placeholder=\"Filter by Term\" />\n </div>\n <div class=\"control\">\n <div class=\"select is-secondary is-small\">\n <select [(ngModel)]=\"selectedLevel\" id=\"selectedLevel\">\n @for (level of Level | keyvalue; track level) {\n <option [value]=\"level.value\">{{ level.value }}</option>\n }\n </select>\n </div>\n </div>\n }\n <div class=\"control\">\n <button\n class=\"button is-small\"\n (click)=\"showFilters.set(!showFilters())\"\n [ngbTooltip]=\"showFilters() ? 'Hide filters' : 'Show filters'\"\n placement=\"bottom\"\n container=\"body\">\n <he-svg-icon name=\"filter-funnel\" />\n </button>\n </div>\n <div class=\"control\">\n <he-clipboard clipboardClass=\"button is-secondary is-small\" [value]=\"nodeLog()\" [hideText]=\"true\" />\n </div>\n <div class=\"control\">\n <a class=\"button is-info is-small\" target=\"_blank\" [href]=\"csvContent()\" [download]=\"csvFilename()\">\n <he-svg-icon name=\"download\" />\n </a>\n </div>\n </div>\n </div>\n\n <pre class=\"pl-3 pt-3 ml-3\">\n @for (line of nodeLogLines(); track line) {\n <code class=\"is-block {{line.class}}\">{{line.data.timestamp}} {{('[' + line.data.level + ']:').padEnd(9, ' ')}} {{line.data.message}}</code>\n }\n </pre>\n</div>\n", styles: [":host{display:block}pre{background-color:inherit;color:inherit;min-height:38px;max-height:500px;font-size:0}pre>code{font-size:.875rem;line-height:20px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { 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: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
8455
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeLogsFileComponent, isStandalone: true, selector: "he-node-logs-file", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"is-relative\">\n <div class=\"copy-clipboard\">\n <div class=\"field has-addons\">\n @if (showFilters()) {\n <div class=\"control\">\n <input\n class=\"input is-secondary is-small\"\n [(ngModel)]=\"modelFilter\"\n id=\"modelFilter\"\n placeholder=\"Filter by Method / Model\" />\n </div>\n <div class=\"control\">\n <input\n class=\"input is-secondary is-small\"\n [(ngModel)]=\"termFilter\"\n id=\"termFilter\"\n placeholder=\"Filter by Term\" />\n </div>\n <div class=\"control\">\n <div class=\"select is-secondary is-small\">\n <select [(ngModel)]=\"selectedLevel\" id=\"selectedLevel\">\n @for (level of Level | keyvalue; track level) {\n <option [value]=\"level.value\">{{ level.value }}</option>\n }\n </select>\n </div>\n </div>\n }\n <div class=\"control\">\n <button\n class=\"button is-small\"\n (click)=\"showFilters.set(!showFilters())\"\n [ngbTooltip]=\"showFilters() ? 'Hide filters' : 'Show filters'\"\n placement=\"bottom\"\n container=\"body\">\n <he-svg-icon name=\"filter-funnel\" />\n </button>\n </div>\n <div class=\"control\">\n <he-clipboard clipboardClass=\"button is-secondary is-small\" [value]=\"nodeLog()\" [hideText]=\"true\" />\n </div>\n <div class=\"control\">\n <a class=\"button is-info is-small\" target=\"_blank\" [href]=\"csvContent()\" [download]=\"csvFilename()\">\n <he-svg-icon name=\"download\" />\n </a>\n </div>\n </div>\n </div>\n\n <pre class=\"pl-3 pt-3 ml-3\">\n @for (line of nodeLogLines(); track line) {\n <code class=\"is-block {{line.class}}\">{{line.data.timestamp}} {{('[' + line.data.level + ']:').padEnd(9, ' ')}} {{line.data.message}}</code>\n }\n </pre>\n</div>\n", styles: [":host{display:block}pre{background-color:inherit;color:inherit;min-height:38px;max-height:500px;font-size:0}pre>code{font-size:.875rem;line-height:20px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { 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: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }, { kind: "component", type: ClipboardComponent, selector: "he-clipboard", inputs: ["icon", "value", "disabled", "hideText", "size", "clipboardClass"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
8464
8456
|
}
|
|
8465
8457
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeLogsFileComponent, decorators: [{
|
|
8466
8458
|
type: Component$1,
|
|
@@ -8511,7 +8503,7 @@ class NodeLogsTimeComponent {
|
|
|
8511
8503
|
.join(' ');
|
|
8512
8504
|
}
|
|
8513
8505
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeLogsTimeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8514
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeLogsTimeComponent, isStandalone: true, selector: "he-node-logs-time", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, showMemoryUsage: { classPropertyName: "showMemoryUsage", publicName: "showMemoryUsage", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"table-container data-table-container\">\n <table class=\"table is-fullwidth\">\n <thead>\n <tr>\n <th>\n <div class=\"is-nowrap\">\n <span>Model ID</span>\n <ng-container *ngTemplateOutlet=\"sortColumn; context: { column: 'model_id' }\" />\n </div>\n </th>\n <th>\n <div class=\"is-nowrap\">\n <span>Model Value</span>\n <ng-container *ngTemplateOutlet=\"sortColumn; context: { column: 'model_value' }\" />\n </div>\n </th>\n <th>\n <div class=\"is-nowrap\">\n <span>Time (ms)</span>\n <span class=\"has-text-secondary\" [ngbTooltip]=\"'Total calculation time: ' + totalTime() + 's'\">\n <he-svg-icon name=\"help-circle\" />\n </span>\n <ng-container *ngTemplateOutlet=\"sortColumn; context: { column: 'time' }\" />\n </div>\n </th>\n @if (showMemoryUsage()) {\n <th>\n <div class=\"is-nowrap\">\n <span>Memory Usage (MB)</span>\n <ng-container *ngTemplateOutlet=\"sortColumn; context: { column: 'memory_used' }\" />\n </div>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @if (nodeLogsResource.isLoading()) {\n <tr>\n <td colspan=\"4\">\n <he-skeleton-text [width]=\"70\" />\n </td>\n </tr>\n <tr>\n <td colspan=\"4\">\n <he-skeleton-text [width]=\"70\" />\n </td>\n </tr>\n }\n @for (log of logs() | sortBy: sorting.sortBy : sorting.sortOrder; track logIndex; let logIndex = $index) {\n <tr>\n <td class=\"copy-log\">\n <span class=\"ellipsis\">{{ log.model_model }}</span>\n <he-clipboard\n class=\"is-inline-block is-align-middle\"\n clipboardClass=\"is-size-7 is-p-1\"\n [value]=\"runModelCmd(log)\"\n [hideText]=\"true\" />\n </td>\n <td>\n <span class=\"ellipsis\">{{ log.model_value }}</span>\n </td>\n <td>\n <span>{{ +log.time | number: '1.0-2' }}</span>\n </td>\n @if (showMemoryUsage()) {\n <td>\n <span>{{ log.memory_used }}</span>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n</div>\n\n<ng-template #sortColumn let-column=\"column\">\n <a class=\"is-p-1\" (click)=\"toggleSort(column)\">\n @if (sorting.sortBy === column) {\n @if (sorting.sortOrder === 'asc') {\n <he-svg-icon name=\"sort-caret-up-filled\" />\n } @else {\n <he-svg-icon name=\"sort-caret-down-filled\" />\n }\n } @else {\n <he-svg-icon name=\"sort-caret-stacked-filled-stacked\" />\n }\n </a>\n</ng-template>\n", styles: ["span{word-break:break-all}.copy-log he-clipboard{visibility:hidden}.copy-log:hover he-clipboard{visibility:visible}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: DecimalPipe, name: "number" }, { 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"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
8506
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeLogsTimeComponent, isStandalone: true, selector: "he-node-logs-time", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, showMemoryUsage: { classPropertyName: "showMemoryUsage", publicName: "showMemoryUsage", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"table-container data-table-container\">\n <table class=\"table is-fullwidth\">\n <thead>\n <tr>\n <th>\n <div class=\"is-nowrap\">\n <span>Model ID</span>\n <ng-container *ngTemplateOutlet=\"sortColumn; context: { column: 'model_id' }\" />\n </div>\n </th>\n <th>\n <div class=\"is-nowrap\">\n <span>Model Value</span>\n <ng-container *ngTemplateOutlet=\"sortColumn; context: { column: 'model_value' }\" />\n </div>\n </th>\n <th>\n <div class=\"is-nowrap\">\n <span>Time (ms)</span>\n <span class=\"has-text-secondary\" [ngbTooltip]=\"'Total calculation time: ' + totalTime() + 's'\">\n <he-svg-icon name=\"help-circle\" />\n </span>\n <ng-container *ngTemplateOutlet=\"sortColumn; context: { column: 'time' }\" />\n </div>\n </th>\n @if (showMemoryUsage()) {\n <th>\n <div class=\"is-nowrap\">\n <span>Memory Usage (MB)</span>\n <ng-container *ngTemplateOutlet=\"sortColumn; context: { column: 'memory_used' }\" />\n </div>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @if (nodeLogsResource.isLoading()) {\n <tr>\n <td colspan=\"4\">\n <he-skeleton-text [width]=\"70\" />\n </td>\n </tr>\n <tr>\n <td colspan=\"4\">\n <he-skeleton-text [width]=\"70\" />\n </td>\n </tr>\n }\n @for (log of logs() | sortBy: sorting.sortBy : sorting.sortOrder; track logIndex; let logIndex = $index) {\n <tr>\n <td class=\"copy-log\">\n <span class=\"ellipsis\">{{ log.model_model }}</span>\n <he-clipboard\n class=\"is-inline-block is-align-middle\"\n clipboardClass=\"is-size-7 is-p-1\"\n [value]=\"runModelCmd(log)\"\n [hideText]=\"true\" />\n </td>\n <td>\n <span class=\"ellipsis\">{{ log.model_value }}</span>\n </td>\n <td>\n <span>{{ +log.time | number: '1.0-2' }}</span>\n </td>\n @if (showMemoryUsage()) {\n <td>\n <span>{{ log.memory_used }}</span>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n</div>\n\n<ng-template #sortColumn let-column=\"column\">\n <a class=\"is-p-1\" (click)=\"toggleSort(column)\">\n @if (sorting.sortBy === column) {\n @if (sorting.sortOrder === 'asc') {\n <he-svg-icon name=\"sort-caret-up-filled\" />\n } @else {\n <he-svg-icon name=\"sort-caret-down-filled\" />\n }\n } @else {\n <he-svg-icon name=\"sort-caret-stacked-filled-stacked\" />\n }\n </a>\n</ng-template>\n", styles: ["span{word-break:break-all}.copy-log he-clipboard{visibility:hidden}.copy-log:hover he-clipboard{visibility:visible}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: DecimalPipe, name: "number" }, { 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"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }, { kind: "pipe", type: SortByPipe, name: "sortBy" }, { kind: "component", type: SkeletonTextComponent, selector: "he-skeleton-text", inputs: ["animated", "width", "height"] }, { kind: "component", type: ClipboardComponent, selector: "he-clipboard", inputs: ["icon", "value", "disabled", "hideText", "size", "clipboardClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
8515
8507
|
}
|
|
8516
8508
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeLogsTimeComponent, decorators: [{
|
|
8517
8509
|
type: Component$1,
|
|
@@ -8539,7 +8531,7 @@ class NodeMissingLookupFactorsComponent {
|
|
|
8539
8531
|
});
|
|
8540
8532
|
}
|
|
8541
8533
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeMissingLookupFactorsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8542
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeMissingLookupFactorsComponent, isStandalone: true, selector: "he-node-missing-lookup-factors", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (logsResource.isLoading()) {\n <div class=\"has-text-center py-3\">\n <he-svg-icon name=\"loading\" animation=\"spin\" size=\"40\" />\n </div>\n} @else {\n <div class=\"table-container data-table-container\">\n <table class=\"table is-fullwidth is-hoverable is-striped mb-0\">\n <thead>\n <tr>\n <th>\n <span>Filename</span>\n </th>\n <th>\n <span>Column Title</span>\n </th>\n <th>\n <span>Row (term.id)</span>\n </th>\n <th>\n <span>Model</span>\n </th>\n </tr>\n </thead>\n <tbody>\n @for (log of logsResource.value(); track log) {\n <tr>\n <td>{{ log.filename }}</td>\n <td>\n @if (log.column) {\n <span>{{ log.column }}</span>\n } @else {\n <span>-</span>\n }\n </td>\n <td>\n @if (log.termId) {\n <span>{{ log.termId }}</span>\n } @else {\n <span>-</span>\n }\n </td>\n <td>\n @if (log.model) {\n <span>{{ log.model }}</span>\n @if (log.key) {\n <span class=\"pl-1\">/ {{ log.key }}</span>\n }\n @if (log.term && log.term !== log.termId) {\n <span class=\"pl-1\">/ {{ log.term }}</span>\n }\n } @else {\n <span>-</span>\n }\n </td>\n </tr>\n } @empty {\n <tr>\n <td colspan=\"3\">\n <span>No missing lookup factors.</span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n}\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
8534
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeMissingLookupFactorsComponent, isStandalone: true, selector: "he-node-missing-lookup-factors", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (logsResource.isLoading()) {\n <div class=\"has-text-center py-3\">\n <he-svg-icon name=\"loading\" animation=\"spin\" size=\"40\" />\n </div>\n} @else {\n <div class=\"table-container data-table-container\">\n <table class=\"table is-fullwidth is-hoverable is-striped mb-0\">\n <thead>\n <tr>\n <th>\n <span>Filename</span>\n </th>\n <th>\n <span>Column Title</span>\n </th>\n <th>\n <span>Row (term.id)</span>\n </th>\n <th>\n <span>Model</span>\n </th>\n </tr>\n </thead>\n <tbody>\n @for (log of logsResource.value(); track log) {\n <tr>\n <td>{{ log.filename }}</td>\n <td>\n @if (log.column) {\n <span>{{ log.column }}</span>\n } @else {\n <span>-</span>\n }\n </td>\n <td>\n @if (log.termId) {\n <span>{{ log.termId }}</span>\n } @else {\n <span>-</span>\n }\n </td>\n <td>\n @if (log.model) {\n <span>{{ log.model }}</span>\n @if (log.key) {\n <span class=\"pl-1\">/ {{ log.key }}</span>\n }\n @if (log.term && log.term !== log.termId) {\n <span class=\"pl-1\">/ {{ log.term }}</span>\n }\n } @else {\n <span>-</span>\n }\n </td>\n </tr>\n } @empty {\n <tr>\n <td colspan=\"3\">\n <span>No missing lookup factors.</span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n}\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
8543
8535
|
}
|
|
8544
8536
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeMissingLookupFactorsComponent, decorators: [{
|
|
8545
8537
|
type: Component$1,
|
|
@@ -8600,7 +8592,7 @@ class NodeRecommendationsComponent {
|
|
|
8600
8592
|
this.recommendations.set(recommendations);
|
|
8601
8593
|
}
|
|
8602
8594
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeRecommendationsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8603
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeRecommendationsComponent, isStandalone: true, selector: "he-node-recommendations", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, nodeField: { classPropertyName: "nodeField", publicName: "nodeField", isSignal: true, isRequired: true, transformFunction: null }, buttonClass: { classPropertyName: "buttonClass", publicName: "buttonClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectRecommendation: "selectRecommendation" }, ngImport: i0, template: "@if (loading() || recommendations().length > 0) {\n <p class=\"is-my-2 is-size-7\">\n <span class=\"is-pr-2\">Recommendations</span>\n @if (loading()) {\n <span>\n <he-svg-icon name=\"loading\" animation=\"spin\" size=\"40\" />\n </span>\n } @else {\n <a (click)=\"visible.set(!visible())\">\n @if (visible()) {\n <span>Hide</span>\n } @else {\n <span>Show</span>\n }\n </a>\n }\n </p>\n}\n\n@if (visible()) {\n <div>\n @for (id of recommendations(); track id; let index = $index) {\n <button class=\"button mr-2 mb-2 {{ buttonClass() }}\" (click)=\"add(id, index)\">\n <he-svg-icon name=\"plus\" />\n <span class=\"pl-2\">Add</span>\n <span class=\"pl-1\">{{ id | keyToLabel }}</span>\n </button>\n }\n </div>\n}\n", styles: [""], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
8595
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: NodeRecommendationsComponent, isStandalone: true, selector: "he-node-recommendations", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, nodeField: { classPropertyName: "nodeField", publicName: "nodeField", isSignal: true, isRequired: true, transformFunction: null }, buttonClass: { classPropertyName: "buttonClass", publicName: "buttonClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectRecommendation: "selectRecommendation" }, ngImport: i0, template: "@if (loading() || recommendations().length > 0) {\n <p class=\"is-my-2 is-size-7\">\n <span class=\"is-pr-2\">Recommendations</span>\n @if (loading()) {\n <span>\n <he-svg-icon name=\"loading\" animation=\"spin\" size=\"40\" />\n </span>\n } @else {\n <a (click)=\"visible.set(!visible())\">\n @if (visible()) {\n <span>Hide</span>\n } @else {\n <span>Show</span>\n }\n </a>\n }\n </p>\n}\n\n@if (visible()) {\n <div>\n @for (id of recommendations(); track id; let index = $index) {\n <button class=\"button mr-2 mb-2 {{ buttonClass() }}\" (click)=\"add(id, index)\">\n <he-svg-icon name=\"plus\" />\n <span class=\"pl-2\">Add</span>\n <span class=\"pl-1\">{{ id | keyToLabel }}</span>\n </button>\n }\n </div>\n}\n", styles: [""], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }, { kind: "pipe", type: KeyToLabelPipe, name: "keyToLabel" }] }); }
|
|
8604
8596
|
}
|
|
8605
8597
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NodeRecommendationsComponent, decorators: [{
|
|
8606
8598
|
type: Component$1,
|
|
@@ -8670,7 +8662,7 @@ class EngineModelsVersionLinkComponent {
|
|
|
8670
8662
|
this.url = computed(() => [engineGitBaseUrl(), '-', 'tree', `v${this.version()}`].filter(Boolean).join('/'));
|
|
8671
8663
|
}
|
|
8672
8664
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: EngineModelsVersionLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8673
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: EngineModelsVersionLinkComponent, isStandalone: true, selector: "he-engine-models-version-link", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (version()) {\n <div class=\"tags has-addons\">\n <a class=\"tag is-info\" [href]=\"url()\" target=\"_blank\" (click)=\"$event.stopPropagation()\">\n {{ version() }}\n <he-svg-icon name=\"external-link\" size=\"20\" class=\"ml-2\" />\n </a>\n </div>\n}\n", styles: [":host{display:inline-block}a{color:inherit}\n"], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
8665
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: EngineModelsVersionLinkComponent, isStandalone: true, selector: "he-engine-models-version-link", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (version()) {\n <div class=\"tags has-addons\">\n <a class=\"tag is-info\" [href]=\"url()\" target=\"_blank\" (click)=\"$event.stopPropagation()\">\n {{ version() }}\n <he-svg-icon name=\"external-link\" size=\"20\" class=\"ml-2\" />\n </a>\n </div>\n}\n", styles: [":host{display:inline-block}a{color:inherit}\n"], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
8674
8666
|
}
|
|
8675
8667
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: EngineModelsVersionLinkComponent, decorators: [{
|
|
8676
8668
|
type: Component$1,
|
|
@@ -8768,7 +8760,7 @@ class EngineModelsStageDeepComponent {
|
|
|
8768
8760
|
this.service.focusedNode.set(node);
|
|
8769
8761
|
}
|
|
8770
8762
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: EngineModelsStageDeepComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8771
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: EngineModelsStageDeepComponent, isStandalone: true, selector: "he-engine-models-stage-deep", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null }, expandedNode: { classPropertyName: "expandedNode", publicName: "expandedNode", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expanded: "expandedChange" }, ngImport: i0, template: "<div\n class=\"is-flex is-flex-direction-column is-gap-8 is-py-2 is-pl-2 | engine-models-stage--container is-type-{{ type }}\"\n [style.border-color]=\"nodeColour()\">\n <div class=\"is-flex is-flex-direction-row is-justify-content-space-between is-gap-8\">\n @if (canExpand()) {\n <div (click)=\"expanded.set(!expanded())\" pointer>\n <he-svg-icon [name]=\"expanded() ? 'chevron-down' : 'chevron-right'\" />\n </div>\n }\n\n <div\n class=\"is-flex is-flex-direction-row is-justify-content-space-between is-gap-8 is-flex-wrap-wrap is-flex-grow-1\">\n <he-node-link class=\"is-flex-grow-1\" [node]=\"node()\" [showExternalLink]=\"true\">\n <span>{{ type() }} {{ id() }}</span>\n </he-node-link>\n\n <div class=\"is-flex is-flex-direction-column is-gap-4 | engine-models-stage--calculations\">\n <div class=\"is-flex is-gap-4 is-pr-2\">\n <span class=\"has-text-secondary has-text-weight-bold\">Calculations:</span>\n\n @if (inProgress()) {\n <span [class.has-text-danger]=\"stage() === 0\" [class.has-text-warning]=\"stage() > 0\">\n stage {{ stage() }} / {{ maxStage() }}\n </span>\n } @else if (recalculatedAt()) {\n <span\n class=\"trigger-popover\"\n [ngbPopover]=\"popoverDetails\"\n autoClose=\"outside\"\n popoverClass=\"is-narrow\"\n placement=\"left auto\"\n container=\"body\">\n <span class=\"has-text-success\">complete</span>\n </span>\n }\n\n @if (hasError()) {\n <a\n class=\"has-text-danger\"\n ngbTooltip=\"Errors validating recalculation. Click to open\"\n (click)=\"openError(node())\">\n <he-svg-icon name=\"exclamation-triangle\" />\n </a>\n }\n </div>\n </div>\n </div>\n </div>\n\n @if (expanded()) {\n @if (loading() && nodesLength() > 0) {\n @for (node of nodesLength() | times; track $index) {\n <he-skeleton-text [width]=\"60\" />\n }\n }\n\n @for (relatedNode of expandableNodes(); track trackNode(relatedNode)) {\n <div class=\"related-node\">\n <he-engine-models-stage-deep\n [node]=\"relatedNode\"\n [expanded]=\"false\"\n [expandedNode]=\"expandedNode() || node()\" />\n </div>\n }\n }\n</div>\n\n<ng-template #popoverDetails>\n <div class=\"is-flex is-flex-direction-column is-gap-4 has-text-white w-100\">\n <div class=\"is-flex is-align-items-center is-gap-8 w-100\">\n <span class=\"has-text-weight-bold\">Calculated Date:</span>\n <span>{{ recalculatedAt() | date: (recalculatedAt().length === 10 ? 'mediumDate' : 'medium') }}</span>\n </div>\n <div class=\"is-flex is-align-items-center is-gap-8 w-100\">\n <span class=\"has-text-weight-bold\">Calculated Version:</span>\n <he-engine-models-version-link [node]=\"node()\" />\n </div>\n </div>\n</ng-template>\n", styles: [".engine-models-stage--container{border:1px solid transparent;border-radius:3px}he-engine-models-stage-deep ::ng-deep .engine-models-stage--container{border-right:0px;border-top-right-radius:0;border-bottom-right-radius:0}\n"], dependencies: [{ kind: "component", type: EngineModelsStageDeepComponent, selector: "he-engine-models-stage-deep", inputs: ["node", "expanded", "expandedNode"], outputs: ["expandedChange"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
8763
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: EngineModelsStageDeepComponent, isStandalone: true, selector: "he-engine-models-stage-deep", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null }, expandedNode: { classPropertyName: "expandedNode", publicName: "expandedNode", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expanded: "expandedChange" }, ngImport: i0, template: "<div\n class=\"is-flex is-flex-direction-column is-gap-8 is-py-2 is-pl-2 | engine-models-stage--container is-type-{{ type }}\"\n [style.border-color]=\"nodeColour()\">\n <div class=\"is-flex is-flex-direction-row is-justify-content-space-between is-gap-8\">\n @if (canExpand()) {\n <div (click)=\"expanded.set(!expanded())\" pointer>\n <he-svg-icon [name]=\"expanded() ? 'chevron-down' : 'chevron-right'\" />\n </div>\n }\n\n <div\n class=\"is-flex is-flex-direction-row is-justify-content-space-between is-gap-8 is-flex-wrap-wrap is-flex-grow-1\">\n <he-node-link class=\"is-flex-grow-1\" [node]=\"node()\" [showExternalLink]=\"true\">\n <span>{{ type() }} {{ id() }}</span>\n </he-node-link>\n\n <div class=\"is-flex is-flex-direction-column is-gap-4 | engine-models-stage--calculations\">\n <div class=\"is-flex is-gap-4 is-pr-2\">\n <span class=\"has-text-secondary has-text-weight-bold\">Calculations:</span>\n\n @if (inProgress()) {\n <span [class.has-text-danger]=\"stage() === 0\" [class.has-text-warning]=\"stage() > 0\">\n stage {{ stage() }} / {{ maxStage() }}\n </span>\n } @else if (recalculatedAt()) {\n <span\n class=\"trigger-popover\"\n [ngbPopover]=\"popoverDetails\"\n autoClose=\"outside\"\n popoverClass=\"is-narrow\"\n placement=\"left auto\"\n container=\"body\">\n <span class=\"has-text-success\">complete</span>\n </span>\n }\n\n @if (hasError()) {\n <a\n class=\"has-text-danger\"\n ngbTooltip=\"Errors validating recalculation. Click to open\"\n (click)=\"openError(node())\">\n <he-svg-icon name=\"exclamation-triangle\" />\n </a>\n }\n </div>\n </div>\n </div>\n </div>\n\n @if (expanded()) {\n @if (loading() && nodesLength() > 0) {\n @for (node of nodesLength() | times; track $index) {\n <he-skeleton-text [width]=\"60\" />\n }\n }\n\n @for (relatedNode of expandableNodes(); track trackNode(relatedNode)) {\n <div class=\"related-node\">\n <he-engine-models-stage-deep\n [node]=\"relatedNode\"\n [expanded]=\"false\"\n [expandedNode]=\"expandedNode() || node()\" />\n </div>\n }\n }\n</div>\n\n<ng-template #popoverDetails>\n <div class=\"is-flex is-flex-direction-column is-gap-4 has-text-white w-100\">\n <div class=\"is-flex is-align-items-center is-gap-8 w-100\">\n <span class=\"has-text-weight-bold\">Calculated Date:</span>\n <span>{{ recalculatedAt() | date: (recalculatedAt().length === 10 ? 'mediumDate' : 'medium') }}</span>\n </div>\n <div class=\"is-flex is-align-items-center is-gap-8 w-100\">\n <span class=\"has-text-weight-bold\">Calculated Version:</span>\n <he-engine-models-version-link [node]=\"node()\" />\n </div>\n </div>\n</ng-template>\n", styles: [".engine-models-stage--container{border:1px solid transparent;border-radius:3px}he-engine-models-stage-deep ::ng-deep .engine-models-stage--container{border-right:0px;border-top-right-radius:0;border-bottom-right-radius:0}\n"], dependencies: [{ kind: "component", type: EngineModelsStageDeepComponent, selector: "he-engine-models-stage-deep", inputs: ["node", "expanded", "expandedNode"], outputs: ["expandedChange"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }, { kind: "ngmodule", type: NgbPopoverModule }, { kind: "directive", type: i1$2.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "ngbPopover", "popoverTitle", "placement", "popperOptions", "triggers", "positionTarget", "container", "disablePopover", "popoverClass", "popoverContext", "openDelay", "closeDelay"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { kind: "ngmodule", type: NgbTooltipModule }, { kind: "directive", type: i1$2.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: EngineModelsVersionLinkComponent, selector: "he-engine-models-version-link", inputs: ["node"] }, { kind: "component", type: SkeletonTextComponent, selector: "he-skeleton-text", inputs: ["animated", "width", "height"] }, { kind: "pipe", type: TimesPipe, name: "times" }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "dataState", "showExternalLink", "linkClass"] }] }); }
|
|
8772
8764
|
}
|
|
8773
8765
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: EngineModelsStageDeepComponent, decorators: [{
|
|
8774
8766
|
type: Component$1,
|
|
@@ -8875,7 +8867,7 @@ class EngineOrchestratorEditComponent {
|
|
|
8875
8867
|
});
|
|
8876
8868
|
}
|
|
8877
8869
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: EngineOrchestratorEditComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8878
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: EngineOrchestratorEditComponent, isStandalone: true, selector: "he-engine-orchestrator-edit", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, nodeType: { classPropertyName: "nodeType", publicName: "nodeType", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<p>\n <i>\n The configuration below is a preview of the\n <a [href]=\"configUrl\" target=\"_blank\">JSON configuration file</a>\n used for the orchestration of the HESTIA's calculations.\n </i>\n</p>\n<p>\n <i>Note: not all models might be represented accurately.</i>\n</p>\n\n<div class=\"is-size-7 is-italic\">\n <div class=\"columns is-mobile is-multiline is-vcentered is-variable is-1 my-0\">\n <div class=\"column\">\n <div class=\"pl-3 model-parallel my-3\">\n <span>Models running in parallel</span>\n </div>\n </div>\n\n <div class=\"column is-narrow\">\n <div ngbDropdown #optionDd=\"ngbDropdown\" container=\"body\" placement=\"bottom-end\" autoClose=\"outside\">\n <button\n ngbDropdownToggle\n class=\"button is-ghost\"\n aria-haspopup=\"true\"\n aria-controls=\"option-menu\"\n ngbTooltip=\"Options\"\n placement=\"bottom\"\n container=\"body\"\n [disableTooltip]=\"optionDd.isOpen()\">\n <span class=\"icon is-small\">\n <he-svg-icon name=\"settings\" aria-hidden=\"true\" />\n </span>\n </button>\n <div ngbDropdownMenu id=\"option-menu\" role=\"menu\">\n <div class=\"dropdown-content | is-dropdown-filters\">\n <div class=\"dropdown-item\">\n <div class=\"field\">\n <div class=\"control is-expanded has-icons-right\">\n <input\n type=\"text\"\n class=\"input search-input is-secondary is-small\"\n name=\"collection\"\n placeholder=\"Filter by key, name or model\"\n [(ngModel)]=\"search\" />\n <a class=\"icon is-small is-right\" (click)=\"search.set('')\">\n <he-svg-icon name=\"xmark\" />\n </a>\n </div>\n </div>\n\n <div class=\"field is-relative\">\n <input\n type=\"checkbox\"\n class=\"switch is-small is-rounded is-secondary\"\n [(ngModel)]=\"showAdvanced\"\n id=\"showAdvanced\" />\n <label class=\"is-size-7\" for=\"showAdvanced\">\n <span>Show advanced data</span>\n </label>\n </div>\n\n <div class=\"field is-relative\">\n <input\n type=\"checkbox\"\n class=\"switch is-small is-rounded is-secondary\"\n [(ngModel)]=\"onlyGapFilled\"\n id=\"onlyGapFilled\" />\n <label class=\"is-size-7\" for=\"onlyGapFilled\">\n <span>Show only gap-filled data</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"column is-narrow\">\n <div ngbDropdown #optionDd=\"ngbDropdown\" container=\"body\" placement=\"bottom-end\">\n <button\n ngbDropdownToggle\n class=\"button is-ghost\"\n aria-haspopup=\"true\"\n aria-controls=\"display-menu\"\n ngbTooltip=\"Display options\"\n placement=\"bottom\"\n container=\"body\"\n [disableTooltip]=\"optionDd.isOpen()\">\n <span class=\"icon is-small\">\n <he-svg-icon [name]=\"displayBy() === 'list' ? 'textform-list' : 'table'\" aria-hidden=\"true\" />\n </span>\n </button>\n <div ngbDropdownMenu id=\"display-menu\" role=\"menu\">\n <div class=\"dropdown-content\">\n <a ngbDropdownItem [class.is-selected]=\"displayBy() === 'list'\" (click)=\"displayBy.set('list')\">\n <he-svg-icon name=\"textform-list\" aria-hidden=\"true\" />\n <span class=\"pl-2\">Display by Priority</span>\n </a>\n <a ngbDropdownItem [class.is-selected]=\"displayBy() === 'type'\" (click)=\"displayBy.set('type')\">\n <he-svg-icon name=\"table\" aria-hidden=\"true\" />\n <span class=\"pl-2\">Display by Type</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n@if (displayBy() === 'list' && models()) {\n <div class=\"pl-3\">\n <ng-container *ngTemplateOutlet=\"modelList; context: { $implicit: models() }\" />\n </div>\n}\n\n@if (displayBy() === 'type' && groupedModels()) {\n <div class=\"tabs\">\n <ul>\n @for (group of groupedModels() | keyvalue; track group.key) {\n <li [class.is-active]=\"selectedGroupedKey() === group.key\">\n <a (click)=\"selectedGroupedKey.set(group.key)\">\n <span class=\"pl-2\">{{ group.key }} ({{ group.value.length }})</span>\n </a>\n </li>\n }\n </ul>\n </div>\n <div class=\"pl-3\">\n <ng-container *ngTemplateOutlet=\"modelList; context: { $implicit: groupedModels()[selectedGroupedKey()] }\" />\n </div>\n}\n\n<ng-template #termLink let-value>\n @if (termsById()[value]) {\n <he-node-link [node]=\"termsById()[value]\" [showExternalLink]=\"true\">\n <span>{{ termsById()[value].name }}</span>\n </he-node-link>\n } @else {\n <span>{{ value | keyToLabel }}</span>\n }\n</ng-template>\n\n<ng-template #modelList let-data>\n @for (v of data; track v) {\n <div>\n <ng-container *ngTemplateOutlet=\"model; context: { $implicit: v }\" />\n </div>\n }\n</ng-template>\n\n<ng-template #model let-data>\n @if (isArray(data) && data.length) {\n <div class=\"pl-3 model-parallel\">\n <ng-container *ngTemplateOutlet=\"modelList; context: { $implicit: data }\" />\n </div>\n <hr />\n } @else if (!isArray(data)) {\n <div class=\"card mb-2 model-serie is-size-6\">\n <div class=\"card-content p-3\">\n <span class=\"is-capitalized\">{{ data.key | keyToLabel }}</span>\n :\n @let link = findModelLink(data);\n @if (link) {\n <ng-container *ngTemplateOutlet=\"modelLink; context: { model: data.model, value: data.value, link }\" />\n } @else {\n @let modelLink = findModelPathLink(data);\n @if (modelLink) {\n <ng-container\n *ngTemplateOutlet=\"modelPathLink; context: { model: data.model, value: data.value, link: modelLink }\" />\n } @else {\n <span class=\"default-value\">{{ data.value }}</span>\n <p>\n <span class=\"pr-1\">Model:</span>\n <span class=\"pr-2\">\n <ng-container *ngTemplateOutlet=\"termLink; context: { $implicit: data.model }\" />\n </span>\n </p>\n }\n }\n @if (showAdvanced()) {\n <div>\n @if (data.runStrategy) {\n <div>\n <span class=\"pr-1\">Run strategy:</span>\n <ng-container\n *ngTemplateOutlet=\"strategiesLink; context: { strategy: data.runStrategy, type: 'run' }\" />\n @if (data.runArgs) {\n <div class=\"pl-3 is-size-7\">\n <p><b>Run arguments:</b></p>\n <ng-container *ngTemplateOutlet=\"strategiesArgs; context: { $implicit: data.runArgs }\" />\n </div>\n }\n </div>\n }\n @if (data.mergeStrategy) {\n <div>\n <span class=\"pr-1\">Merge strategy:</span>\n <ng-container\n *ngTemplateOutlet=\"strategiesLink; context: { strategy: data.mergeStrategy, type: 'merge' }\" />\n @if (data.mergeArgs) {\n <div class=\"pl-3 is-size-7\">\n <p><b>Merge arguments:</b></p>\n <ng-container *ngTemplateOutlet=\"strategiesArgs; context: { $implicit: data.mergeArgs }\" />\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #modelLinkKey let-model=\"model\" let-link=\"link\">\n <a [href]=\"modelKeyUrl(link, model)\" target=\"_blank\">{{ modelKeyName(link.modelKey) }}</a>\n</ng-template>\n\n<ng-template #modelLink let-model=\"model\" let-link=\"link\" let-value=\"value\">\n @if (link.term) {\n <ng-container *ngTemplateOutlet=\"termLink; context: { $implicit: link.term }\" />\n }\n\n @if (!link.term && !link?.modelKey) {\n <span class=\"default-value\">{{ value }}</span>\n }\n\n @if (!link.term && link?.modelKey) {\n <ng-container *ngTemplateOutlet=\"modelLinkKey; context: { link, model }\" />\n }\n\n <p class=\"model-link\">\n <span class=\"pr-1\">Model:</span>\n <span class=\"pr-2\">\n <ng-container *ngTemplateOutlet=\"termLink; context: { $implicit: model }\" />\n </span>\n\n <a class=\"is-size-7\" [href]=\"link.docPath\" target=\"_blank\">\n <span>(View Docs)</span>\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n </a>\n </p>\n</ng-template>\n\n<ng-template #modelPathLink let-model=\"model\" let-link=\"link\" let-value=\"value\">\n @if (!link?.modelKey) {\n <span class=\"default-value\">{{ value }}</span>\n }\n\n @if (link?.modelKey) {\n <ng-container *ngTemplateOutlet=\"modelLinkKey; context: { link, model }\" />\n }\n\n <p class=\"model-path-link\">\n <span class=\"pr-1\">Model:</span>\n <span class=\"pr-2\">\n <ng-container *ngTemplateOutlet=\"termLink; context: { $implicit: model }\" />\n </span>\n\n <a class=\"is-size-7\" [href]=\"link.docPath\" target=\"_blank\">\n <span>(View Docs)</span>\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n </a>\n </p>\n</ng-template>\n\n<ng-template #strategiesLink let-strategy=\"strategy\" let-type=\"type\">\n <span class=\"pr-2 is-inline-block\">\n <code>{{ strategy }}</code>\n </span>\n\n <a\n class=\"is-size-7\"\n [href]=\"strategiesDocs + '/' + type + '/' + (type === 'merge' ? 'merge_' : '') + strategy + '.md'\"\n target=\"_blank\">\n <span>(View Docs)</span>\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n </a>\n</ng-template>\n\n<ng-template #strategiesArgs let-args>\n <div class=\"pl-2\">\n @for (arg of args | keyvalue; track arg) {\n <p>\n <span class=\"has-text-underline\">{{ arg.key }}</span>\n :\n <code>{{ arg.value | json }}</code>\n </p>\n }\n </div>\n</ng-template>\n", styles: [":host{display:block}.model-parallel{border-left:3px solid #4a4a4a}.dropdown-content.is-dropdown-filters{min-width:250px}\n"], dependencies: [{ kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: JsonPipe, name: "json" }, { 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"] }, { kind: "ngmodule", type: NgbDropdownModule }, { kind: "directive", type: i1$2.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i1$2.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i1$2.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i1$2.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { 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: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "dataState", "showExternalLink", "linkClass"] }, { kind: "pipe", type: KeyToLabelPipe, name: "keyToLabel" }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
8870
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: EngineOrchestratorEditComponent, isStandalone: true, selector: "he-engine-orchestrator-edit", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, nodeType: { classPropertyName: "nodeType", publicName: "nodeType", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<p>\n <i>\n The configuration below is a preview of the\n <a [href]=\"configUrl\" target=\"_blank\">JSON configuration file</a>\n used for the orchestration of the HESTIA's calculations.\n </i>\n</p>\n<p>\n <i>Note: not all models might be represented accurately.</i>\n</p>\n\n<div class=\"is-size-7 is-italic\">\n <div class=\"columns is-mobile is-multiline is-vcentered is-variable is-1 my-0\">\n <div class=\"column\">\n <div class=\"pl-3 model-parallel my-3\">\n <span>Models running in parallel</span>\n </div>\n </div>\n\n <div class=\"column is-narrow\">\n <div ngbDropdown #optionDd=\"ngbDropdown\" container=\"body\" placement=\"bottom-end\" autoClose=\"outside\">\n <button\n ngbDropdownToggle\n class=\"button is-ghost\"\n aria-haspopup=\"true\"\n aria-controls=\"option-menu\"\n ngbTooltip=\"Options\"\n placement=\"bottom\"\n container=\"body\"\n [disableTooltip]=\"optionDd.isOpen()\">\n <span class=\"icon is-small\">\n <he-svg-icon name=\"settings\" aria-hidden=\"true\" />\n </span>\n </button>\n <div ngbDropdownMenu id=\"option-menu\" role=\"menu\">\n <div class=\"dropdown-content | is-dropdown-filters\">\n <div class=\"dropdown-item\">\n <div class=\"field\">\n <div class=\"control is-expanded has-icons-right\">\n <input\n type=\"text\"\n class=\"input search-input is-secondary is-small\"\n name=\"collection\"\n placeholder=\"Filter by key, name or model\"\n [(ngModel)]=\"search\" />\n <a class=\"icon is-small is-right\" (click)=\"search.set('')\">\n <he-svg-icon name=\"xmark\" />\n </a>\n </div>\n </div>\n\n <div class=\"field is-relative\">\n <input\n type=\"checkbox\"\n class=\"switch is-small is-rounded is-secondary\"\n [(ngModel)]=\"showAdvanced\"\n id=\"showAdvanced\" />\n <label class=\"is-size-7\" for=\"showAdvanced\">\n <span>Show advanced data</span>\n </label>\n </div>\n\n <div class=\"field is-relative\">\n <input\n type=\"checkbox\"\n class=\"switch is-small is-rounded is-secondary\"\n [(ngModel)]=\"onlyGapFilled\"\n id=\"onlyGapFilled\" />\n <label class=\"is-size-7\" for=\"onlyGapFilled\">\n <span>Show only gap-filled data</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"column is-narrow\">\n <div ngbDropdown #optionDd=\"ngbDropdown\" container=\"body\" placement=\"bottom-end\">\n <button\n ngbDropdownToggle\n class=\"button is-ghost\"\n aria-haspopup=\"true\"\n aria-controls=\"display-menu\"\n ngbTooltip=\"Display options\"\n placement=\"bottom\"\n container=\"body\"\n [disableTooltip]=\"optionDd.isOpen()\">\n <span class=\"icon is-small\">\n <he-svg-icon [name]=\"displayBy() === 'list' ? 'textform-list' : 'table'\" aria-hidden=\"true\" />\n </span>\n </button>\n <div ngbDropdownMenu id=\"display-menu\" role=\"menu\">\n <div class=\"dropdown-content\">\n <a ngbDropdownItem [class.is-selected]=\"displayBy() === 'list'\" (click)=\"displayBy.set('list')\">\n <he-svg-icon name=\"textform-list\" aria-hidden=\"true\" />\n <span class=\"pl-2\">Display by Priority</span>\n </a>\n <a ngbDropdownItem [class.is-selected]=\"displayBy() === 'type'\" (click)=\"displayBy.set('type')\">\n <he-svg-icon name=\"table\" aria-hidden=\"true\" />\n <span class=\"pl-2\">Display by Type</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n@if (displayBy() === 'list' && models()) {\n <div class=\"pl-3\">\n <ng-container *ngTemplateOutlet=\"modelList; context: { $implicit: models() }\" />\n </div>\n}\n\n@if (displayBy() === 'type' && groupedModels()) {\n <div class=\"tabs\">\n <ul>\n @for (group of groupedModels() | keyvalue; track group.key) {\n <li [class.is-active]=\"selectedGroupedKey() === group.key\">\n <a (click)=\"selectedGroupedKey.set(group.key)\">\n <span class=\"pl-2\">{{ group.key }} ({{ group.value.length }})</span>\n </a>\n </li>\n }\n </ul>\n </div>\n <div class=\"pl-3\">\n <ng-container *ngTemplateOutlet=\"modelList; context: { $implicit: groupedModels()[selectedGroupedKey()] }\" />\n </div>\n}\n\n<ng-template #termLink let-value>\n @if (termsById()[value]) {\n <he-node-link [node]=\"termsById()[value]\" [showExternalLink]=\"true\">\n <span>{{ termsById()[value].name }}</span>\n </he-node-link>\n } @else {\n <span>{{ value | keyToLabel }}</span>\n }\n</ng-template>\n\n<ng-template #modelList let-data>\n @for (v of data; track v) {\n <div>\n <ng-container *ngTemplateOutlet=\"model; context: { $implicit: v }\" />\n </div>\n }\n</ng-template>\n\n<ng-template #model let-data>\n @if (isArray(data) && data.length) {\n <div class=\"pl-3 model-parallel\">\n <ng-container *ngTemplateOutlet=\"modelList; context: { $implicit: data }\" />\n </div>\n <hr />\n } @else if (!isArray(data)) {\n <div class=\"card mb-2 model-serie is-size-6\">\n <div class=\"card-content p-3\">\n <span class=\"is-capitalized\">{{ data.key | keyToLabel }}</span>\n :\n @let link = findModelLink(data);\n @if (link) {\n <ng-container *ngTemplateOutlet=\"modelLink; context: { model: data.model, value: data.value, link }\" />\n } @else {\n @let modelLink = findModelPathLink(data);\n @if (modelLink) {\n <ng-container\n *ngTemplateOutlet=\"modelPathLink; context: { model: data.model, value: data.value, link: modelLink }\" />\n } @else {\n <span class=\"default-value\">{{ data.value }}</span>\n <p>\n <span class=\"pr-1\">Model:</span>\n <span class=\"pr-2\">\n <ng-container *ngTemplateOutlet=\"termLink; context: { $implicit: data.model }\" />\n </span>\n </p>\n }\n }\n @if (showAdvanced()) {\n <div>\n @if (data.runStrategy) {\n <div>\n <span class=\"pr-1\">Run strategy:</span>\n <ng-container\n *ngTemplateOutlet=\"strategiesLink; context: { strategy: data.runStrategy, type: 'run' }\" />\n @if (data.runArgs) {\n <div class=\"pl-3 is-size-7\">\n <p><b>Run arguments:</b></p>\n <ng-container *ngTemplateOutlet=\"strategiesArgs; context: { $implicit: data.runArgs }\" />\n </div>\n }\n </div>\n }\n @if (data.mergeStrategy) {\n <div>\n <span class=\"pr-1\">Merge strategy:</span>\n <ng-container\n *ngTemplateOutlet=\"strategiesLink; context: { strategy: data.mergeStrategy, type: 'merge' }\" />\n @if (data.mergeArgs) {\n <div class=\"pl-3 is-size-7\">\n <p><b>Merge arguments:</b></p>\n <ng-container *ngTemplateOutlet=\"strategiesArgs; context: { $implicit: data.mergeArgs }\" />\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #modelLinkKey let-model=\"model\" let-link=\"link\">\n <a [href]=\"modelKeyUrl(link, model)\" target=\"_blank\">{{ modelKeyName(link.modelKey) }}</a>\n</ng-template>\n\n<ng-template #modelLink let-model=\"model\" let-link=\"link\" let-value=\"value\">\n @if (link.term) {\n <ng-container *ngTemplateOutlet=\"termLink; context: { $implicit: link.term }\" />\n }\n\n @if (!link.term && !link?.modelKey) {\n <span class=\"default-value\">{{ value }}</span>\n }\n\n @if (!link.term && link?.modelKey) {\n <ng-container *ngTemplateOutlet=\"modelLinkKey; context: { link, model }\" />\n }\n\n <p class=\"model-link\">\n <span class=\"pr-1\">Model:</span>\n <span class=\"pr-2\">\n <ng-container *ngTemplateOutlet=\"termLink; context: { $implicit: model }\" />\n </span>\n\n <a class=\"is-size-7\" [href]=\"link.docPath\" target=\"_blank\">\n <span>(View Docs)</span>\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n </a>\n </p>\n</ng-template>\n\n<ng-template #modelPathLink let-model=\"model\" let-link=\"link\" let-value=\"value\">\n @if (!link?.modelKey) {\n <span class=\"default-value\">{{ value }}</span>\n }\n\n @if (link?.modelKey) {\n <ng-container *ngTemplateOutlet=\"modelLinkKey; context: { link, model }\" />\n }\n\n <p class=\"model-path-link\">\n <span class=\"pr-1\">Model:</span>\n <span class=\"pr-2\">\n <ng-container *ngTemplateOutlet=\"termLink; context: { $implicit: model }\" />\n </span>\n\n <a class=\"is-size-7\" [href]=\"link.docPath\" target=\"_blank\">\n <span>(View Docs)</span>\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n </a>\n </p>\n</ng-template>\n\n<ng-template #strategiesLink let-strategy=\"strategy\" let-type=\"type\">\n <span class=\"pr-2 is-inline-block\">\n <code>{{ strategy }}</code>\n </span>\n\n <a\n class=\"is-size-7\"\n [href]=\"strategiesDocs + '/' + type + '/' + (type === 'merge' ? 'merge_' : '') + strategy + '.md'\"\n target=\"_blank\">\n <span>(View Docs)</span>\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n </a>\n</ng-template>\n\n<ng-template #strategiesArgs let-args>\n <div class=\"pl-2\">\n @for (arg of args | keyvalue; track arg) {\n <p>\n <span class=\"has-text-underline\">{{ arg.key }}</span>\n :\n <code>{{ arg.value | json }}</code>\n </p>\n }\n </div>\n</ng-template>\n", styles: [":host{display:block}.model-parallel{border-left:3px solid #4a4a4a}.dropdown-content.is-dropdown-filters{min-width:250px}\n"], dependencies: [{ kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: JsonPipe, name: "json" }, { 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"] }, { kind: "ngmodule", type: NgbDropdownModule }, { kind: "directive", type: i1$2.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i1$2.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i1$2.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i1$2.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { 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: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "dataState", "showExternalLink", "linkClass"] }, { kind: "pipe", type: KeyToLabelPipe, name: "keyToLabel" }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
8879
8871
|
}
|
|
8880
8872
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: EngineOrchestratorEditComponent, decorators: [{
|
|
8881
8873
|
type: Component$1,
|
|
@@ -8944,7 +8936,7 @@ class EngineRequirementsFormComponent {
|
|
|
8944
8936
|
};
|
|
8945
8937
|
}
|
|
8946
8938
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: EngineRequirementsFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8947
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: EngineRequirementsFormComponent, isStandalone: true, selector: "he-engine-requirements-form", ngImport: i0, template: "<form class=\"needs-validation mt-3\" novalidate [formGroup]=\"form\">\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\" for=\"productTermId\">\n <span>Product Term ID</span>\n </label>\n </div>\n <div class=\"field-body\">\n <div class=\"field\">\n <div class=\"control is-expanded\" [class.has-icons-right]=\"suggestingProductTermId()\">\n <input\n class=\"input\"\n formControlName=\"productTermId\"\n name=\"productTermId\"\n placeholder=\"Search product by ID or name\"\n [editable]=\"false\"\n [ngbTypeahead]=\"suggestProductTermId\"\n [resultTemplate]=\"suggestionProductTermId\"\n [inputFormatter]=\"inputFormatterProductTermId\" />\n <span class=\"icon is-right has-text-grey-dark\" [class.is-hidden]=\"!suggestingProductTermId()\">\n <he-svg-icon name=\"loading\" animation=\"spin\" size=\"20\" />\n </span>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"field is-horizontal mt-3\">\n <div class=\"field-label is-normal\">\n <label class=\"label\" for=\"productTermType\">\n <span>Product Term Type</span>\n </label>\n </div>\n <div class=\"field-body\">\n <div class=\"field\">\n <div class=\"control is-expanded\">\n <div class=\"select is-fullwidth\">\n <select formControlName=\"productTermType\" name=\"productTermType\">\n <option [ngValue]=\"undefined\">Select a Type</option>\n @for (termType of productTermTermType; track termType) {\n <option [value]=\"termType\">\n {{ termType | keyToLabel }}\n </option>\n }\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"field is-horizontal mt-3\">\n <div class=\"field-label is-normal\">\n <label class=\"label\" for=\"tier\">\n <span>Emissions Method Tier</span>\n </label>\n </div>\n <div class=\"field-body\">\n <div class=\"field\">\n <div class=\"control is-expanded\">\n <div class=\"select is-fullwidth\">\n <select formControlName=\"tier\" name=\"tier\">\n <option [ngValue]=\"undefined\">Select a Tier</option>\n @for (tier of EmissionMethodTier | keyvalue; track tier) {\n <option [value]=\"tier.value\">{{ tier.value }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"field is-horizontal mt-3\">\n <div class=\"field-label is-normal\">\n <label class=\"label\" for=\"siteType\">\n <span>Site Type</span>\n </label>\n </div>\n <div class=\"field-body\">\n <div class=\"field\">\n <div class=\"control is-expanded\">\n <div class=\"select is-fullwidth\">\n <select formControlName=\"siteType\" name=\"siteType\">\n <option [ngValue]=\"undefined\">Select a Type</option>\n @for (siteType of SiteSiteType | keyvalue; track siteType) {\n <option [value]=\"siteType.value\">\n {{ siteType.value }}\n </option>\n }\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n</form>\n\n<ng-template #suggestionProductTermId let-r=\"result\" let-t=\"term\">\n <ngb-highlight [result]=\"r.name\" [term]=\"t\" />\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { 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: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
8939
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: EngineRequirementsFormComponent, isStandalone: true, selector: "he-engine-requirements-form", ngImport: i0, template: "<form class=\"needs-validation mt-3\" novalidate [formGroup]=\"form\">\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\" for=\"productTermId\">\n <span>Product Term ID</span>\n </label>\n </div>\n <div class=\"field-body\">\n <div class=\"field\">\n <div class=\"control is-expanded\" [class.has-icons-right]=\"suggestingProductTermId()\">\n <input\n class=\"input\"\n formControlName=\"productTermId\"\n name=\"productTermId\"\n placeholder=\"Search product by ID or name\"\n [editable]=\"false\"\n [ngbTypeahead]=\"suggestProductTermId\"\n [resultTemplate]=\"suggestionProductTermId\"\n [inputFormatter]=\"inputFormatterProductTermId\" />\n <span class=\"icon is-right has-text-grey-dark\" [class.is-hidden]=\"!suggestingProductTermId()\">\n <he-svg-icon name=\"loading\" animation=\"spin\" size=\"20\" />\n </span>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"field is-horizontal mt-3\">\n <div class=\"field-label is-normal\">\n <label class=\"label\" for=\"productTermType\">\n <span>Product Term Type</span>\n </label>\n </div>\n <div class=\"field-body\">\n <div class=\"field\">\n <div class=\"control is-expanded\">\n <div class=\"select is-fullwidth\">\n <select formControlName=\"productTermType\" name=\"productTermType\">\n <option [ngValue]=\"undefined\">Select a Type</option>\n @for (termType of productTermTermType; track termType) {\n <option [value]=\"termType\">\n {{ termType | keyToLabel }}\n </option>\n }\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"field is-horizontal mt-3\">\n <div class=\"field-label is-normal\">\n <label class=\"label\" for=\"tier\">\n <span>Emissions Method Tier</span>\n </label>\n </div>\n <div class=\"field-body\">\n <div class=\"field\">\n <div class=\"control is-expanded\">\n <div class=\"select is-fullwidth\">\n <select formControlName=\"tier\" name=\"tier\">\n <option [ngValue]=\"undefined\">Select a Tier</option>\n @for (tier of EmissionMethodTier | keyvalue; track tier) {\n <option [value]=\"tier.value\">{{ tier.value }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"field is-horizontal mt-3\">\n <div class=\"field-label is-normal\">\n <label class=\"label\" for=\"siteType\">\n <span>Site Type</span>\n </label>\n </div>\n <div class=\"field-body\">\n <div class=\"field\">\n <div class=\"control is-expanded\">\n <div class=\"select is-fullwidth\">\n <select formControlName=\"siteType\" name=\"siteType\">\n <option [ngValue]=\"undefined\">Select a Type</option>\n @for (siteType of SiteSiteType | keyvalue; track siteType) {\n <option [value]=\"siteType.value\">\n {{ siteType.value }}\n </option>\n }\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n</form>\n\n<ng-template #suggestionProductTermId let-r=\"result\" let-t=\"term\">\n <ngb-highlight [result]=\"r.name\" [term]=\"t\" />\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { 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: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }, { kind: "component", type: NgbHighlight, selector: "ngb-highlight", inputs: ["highlightClass", "result", "term", "accentSensitive"] }, { kind: "pipe", type: KeyToLabelPipe, name: "keyToLabel" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
8948
8940
|
}
|
|
8949
8941
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: EngineRequirementsFormComponent, decorators: [{
|
|
8950
8942
|
type: Component$1,
|
|
@@ -10397,7 +10389,7 @@ class FilesFormComponent {
|
|
|
10397
10389
|
return focusFirstError(this.ref.nativeElement);
|
|
10398
10390
|
}
|
|
10399
10391
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: FilesFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10400
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: FilesFormComponent, isStandalone: true, selector: "he-files-form", inputs: { isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null }, node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, showNodeLink: { classPropertyName: "showNodeLink", publicName: "showNodeLink", isSignal: true, isRequired: false, transformFunction: null }, errorGuidePrefix: { classPropertyName: "errorGuidePrefix", publicName: "errorGuidePrefix", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isOpen: "isOpenChange", nodeErorrResolved: "nodeErorrResolved" }, exportAs: ["filesForm"], ngImport: i0, template: "<div class=\"is-flex is-flex-direction-column is-align-items-flex-start is-align-self-stretch | files-form-container\">\n <div\n class=\"is-flex is-flex-direction-row is-justify-content-space-between is-align-items-center is-align-self-stretch is-gap-16 px-4 py-2 has-text-secondary | files-form-header\"\n (click)=\"isOpen.set(!isOpen())\"\n pointer>\n <div class=\"is-flex is-gap-8 is-align-items-center\">\n @if (nodeProperty()) {\n <he-node-icon class=\"is-flex\" [type]=\"schemaType()\" [size]=\"24\" />\n <span class=\"has-text-weight-bold has-text-secondary is-size-5\">{{ schemaType() }}</span>\n @if (nodeProperty().hasError || hasError()) {\n <he-svg-icon name=\"xmark-circle\" class=\"has-text-danger is-flex is-align-items-center\" />\n <span class=\"has-text-danger has-text-weight-bold is-italic\">Error</span>\n } @else if (nodeProperty().hasWarning || hasWarning()) {\n <he-svg-icon name=\"exclamation-triangle\" class=\"has-text-warning is-flex is-align-items-center\" />\n <span class=\"has-text-warning has-text-weight-bold is-italic\">Warning</span>\n }\n }\n </div>\n @if ((showNodeLink() && nodeUrl()) || canOpen()) {\n <div class=\"is-flex is-flex-direction-row is-align-items-center is-gap-16\">\n @if (showNodeLink() && nodeUrl()) {\n <ng-container *ngTemplateOutlet=\"nodeLink; context: { url: nodeUrl(), nodeType: schemaType() }\" />\n }\n @if (canOpen()) {\n <he-svg-icon [name]=\"isOpen() ? 'minus' : 'plus'\" />\n }\n </div>\n }\n </div>\n\n <div class=\"is-flex is-flex-direction-column is-align-items-flex-start is-align-self-stretch\">\n @if (isOpen()) {\n @if (nodeProperty()?.error) {\n <ng-container\n *ngTemplateOutlet=\"propertyError; context: { property: nodeProperty(), classes: 'is-my-1 is-px-3' }\" />\n }\n }\n\n <div class=\"is-flex is-flex-direction-row is-flex-wrap-wrap is-align-self-stretch\">\n @for (property of properties(); track trackByProperty($index, property)) {\n <ng-container *ngTemplateOutlet=\"showProperty; context: { $implicit: property }\" />\n }\n </div>\n\n @if (isOpen()) {\n <ng-container *ngTemplateOutlet=\"propertyMap; context: { $implicit: nodeProperty() }\" />\n }\n </div>\n\n <ng-content />\n</div>\n\n<ng-template #propertyKeyTooltip let-property=\"property\">\n <markdown [data]=\"property.schema.description\" />\n</ng-template>\n\n<ng-template #propertyKey let-property=\"property\">\n @if (property.schema?.description) {\n <span\n class=\"trigger-popover | property-key\"\n [ngbTooltip]=\"propertyKeyTooltip\"\n [tooltipContext]=\"{ property }\"\n triggers=\"click\"\n autoClose=\"outside\"\n tooltipClass=\"property-tooltip\"\n placement=\"bottom-left auto\"\n container=\"body\"\n (click)=\"$event.stopPropagation()\">\n <span>{{ property.key }}</span>\n </span>\n } @else {\n <span>{{ property.key }}</span>\n }\n</ng-template>\n\n<ng-template #propertyContent let-property=\"property\">\n <div class=\"is-flex is-align-items-center is-flex-wrap-wrap is-gap-4\">\n <div class=\"is-flex has-text-secondary\">\n <ng-container *ngTemplateOutlet=\"propertyKey; context: { property }\" />\n <span>:</span>\n </div>\n\n @if (property.isCollapsible && property.showMaxLength) {\n <span class=\"is-flex is-size-7 | property-value\">\n {{ property.value | ellipsis: property.showMaxLength }}\n </span>\n\n <a class=\"is-flex is-size-7\" (click)=\"property.showMaxLength = 0\">Show more</a>\n } @else {\n <span class=\"is-flex is-size-7 | property-value\">\n {{ property.value }}\n </span>\n }\n\n @if (property.schema?.internal && property.key !== 'originalId') {\n <div class=\"property-internal\" ngbTooltip=\"This value is auto-generated.\">\n <he-svg-icon name=\"autogenerate-circle\" />\n </div>\n }\n\n <div class=\"copy-button\">\n <he-clipboard [value]=\"property.value\" [hideText]=\"true\" />\n </div>\n </div>\n\n <div class=\"is-flex is-gap-8\">\n @if (property.externalUrl?.url) {\n <a\n [href]=\"property.externalUrl.url + (property.externalUrl.urlParamValue ? property.value : '')\"\n target=\"_blank\"\n [title]=\"property.externalUrl.title\"\n class=\"ml-2\"\n [ngClass]=\"{ 'is-info': property.key === 'type' }\"\n [attr.disabled]=\"property.externalUrl.urlParamValue && !property.value ? true : null\">\n <he-svg-icon [name]=\"property.externalUrl.icon || 'external-link'\" />\n </a>\n }\n </div>\n</ng-template>\n\n<ng-template #showProperty let-property>\n @if ((isOpen() || property.closedVisible) && !property.isHidden) {\n @if (property.properties.length) {\n <div class=\"is-flex is-flex-direction-column is-flex-wrap-wrap w-100 | properties-container\">\n <div\n class=\"is-flex is-flex-direction-row is-justify-content-space-between is-gap-4 has-text-secondary w-100 | properties-container--title\"\n (click)=\"property.isOpen = !property.isOpen\"\n pointer\n [class.is-open]=\"property.isOpen\"\n [class.is-group-error-danger]=\"property.hasError\"\n [class.is-group-error-warning]=\"!property.hasError && property.hasWarning\">\n <div class=\"is-flex is-gap-8 has-text-weight-bold\">\n <!-- @if (property.schemaType === SchemaType.Term) {\n <he-node-icon [type]=\"property.schemaType\" />\n } -->\n <ng-container *ngTemplateOutlet=\"propertyKey; context: { property }\" />\n </div>\n <he-svg-icon [name]=\"property.isOpen ? 'minus' : 'plus'\" />\n </div>\n @if (property.isOpen) {\n @if (property.error) {\n <ng-container *ngTemplateOutlet=\"propertyError; context: { property, classes: 'is-my-1 is-px-3' }\" />\n }\n @if (property.isArray) {\n <div class=\"py-2 px-3 w-100\">\n @for (prop2 of property.properties; track trackByProperty($index, prop2)) {\n @if (prop2.key) {\n <div class=\"pt-2 my-4 | property-array-container\" [id]=\"prop2.fullKey + '_' + prop2.id\">\n <div class=\"ml-2 is-mb-2 | property-array-number\">\n <span class=\"has-text-info is-px-1 | number-tag\">{{ prop2.key }}</span>\n </div>\n @if (prop2.error) {\n <ng-container\n *ngTemplateOutlet=\"propertyError; context: { property: prop2, classes: 'is-py-1 is-px-3' }\" />\n }\n <div class=\"p-3\">\n <div class=\"is-flex is-flex-direction-row is-flex-wrap-wrap is-align-self-stretch\">\n @for (prop3 of prop2.properties; track trackByProperty($index, prop3)) {\n <ng-container *ngTemplateOutlet=\"showProperty; context: { $implicit: prop3 }\" />\n }\n </div>\n </div>\n </div>\n }\n }\n </div>\n } @else {\n <div class=\"is-flex is-flex-direction-row is-flex-wrap-wrap is-align-self-stretch\">\n @for (prop2 of property.properties; track trackByProperty($index, prop2)) {\n <ng-container *ngTemplateOutlet=\"showProperty; context: { $implicit: prop2 }\" />\n }\n </div>\n }\n }\n </div>\n } @else {\n <div\n class=\"is-flex is-flex-direction-column is-gap-4 | property-container\"\n [class.is-error-danger]=\"property.hasError\"\n [class.is-error-warning]=\"!property.hasError && property.hasWarning\">\n <div\n class=\"is-flex is-flex-direction-row is-align-items-center is-justify-content-space-between is-gap-4 | field-container\">\n @if (property.key) {\n <ng-container *ngTemplateOutlet=\"propertyContent; context: { property }\" />\n }\n </div>\n @if (property.hasError || property.hasWarning) {\n <ng-container *ngTemplateOutlet=\"propertyError; context: { property }\" />\n }\n </div>\n }\n }\n</ng-template>\n\n<ng-template #propertyError let-property=\"property\" let-classes=\"classes\">\n @if (property.error?.message) {\n <div\n class=\"is-flex is-flex-direction-row is-gap-8 is-size-6 is-m-0 w-100 has-text-grey {{ classes }} | property-error\"\n [class.is-error-danger]=\"property.hasError\"\n [class.is-error-warning]=\"!property.hasError && property.hasWarning\">\n @if (property.hasError) {\n <he-svg-icon name=\"xmark-circle\" size=\"24\" class=\"has-text-danger is-flex-grow-0\" />\n } @else {\n <he-svg-icon name=\"exclamation-triangle\" size=\"24\" class=\"has-text-warning is-flex-grow-0\" />\n }\n <div class=\"is-flex is-flex-grow-1\" [innerHTML]=\"property.error.message\"></div>\n @if (errorGuidePrefix() && property.errorGuidePageId) {\n <he-guide-overlay class=\"is-flex-grow-0\" [pageId]=\"errorGuidePrefix() + property.errorGuidePageId\" />\n }\n @if (property.error.index >= 0) {\n @if (property.hasWarning) {\n <a (click)=\"resolveError(property)\">\n <he-svg-icon name=\"checkmark\" />\n <span class=\"is-pl-2\">Resolved</span>\n </a>\n }\n }\n </div>\n }\n</ng-template>\n\n<ng-template #propertyMap let-property>\n @if (showMap()) {\n <div class=\"is-flex is-flex-direction-column is-flex-wrap-wrap w-100 | properties-container\">\n <div\n class=\"is-flex is-flex-direction-row is-justify-content-space-between is-gap-4 w-100 | properties-container--title\"\n (click)=\"mapVisible.set(!mapVisible())\"\n pointer\n [class.is-open]=\"mapVisible()\">\n <span class=\"is-size-6\">View on Map</span>\n <he-svg-icon [name]=\"mapVisible() ? 'minus' : 'plus'\" />\n </div>\n @if (mapVisible()) {\n <he-sites-maps [sites]=\"[node()]\" [showNotice]=\"false\" />\n }\n </div>\n }\n</ng-template>\n\n<ng-template #nodeLink let-url=\"url\" let-nodeType=\"nodeType\">\n <a class=\"external-link\" [href]=\"url\" target=\"_blank\">\n <span class=\"is-hidden-mobile\">View</span>\n <span class=\"is-hidden-mobile is-pl-1\">{{ nodeType }}</span>\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n </a>\n</ng-template>\n", styles: [".notification{color:#0a0a0a!important}.notification.is-success{background-color:#d5f3d8}.notification.is-success *:not(.button):not(.icon):not(.dropdown-item)>fa-icon,.notification.is-success>fa-icon,.notification.is-success *:not(.button):not(.icon):not(.dropdown-item)>he-svg-icon,.notification.is-success>he-svg-icon{color:#48c78e}.notification.is-info{background-color:#d3ebed}.notification.is-info *:not(.button):not(.icon):not(.dropdown-item)>fa-icon,.notification.is-info>fa-icon,.notification.is-info *:not(.button):not(.icon):not(.dropdown-item)>he-svg-icon,.notification.is-info>he-svg-icon{color:#249da5}.notification.is-warning{background-color:#ffdec0}.notification.is-warning *:not(.button):not(.icon):not(.dropdown-item)>fa-icon,.notification.is-warning>fa-icon,.notification.is-warning *:not(.button):not(.icon):not(.dropdown-item)>he-svg-icon,.notification.is-warning>he-svg-icon{color:#ff881b}.notification.is-danger{background-color:#ffcdd0}.notification.is-danger *:not(.button):not(.icon):not(.dropdown-item)>fa-icon,.notification.is-danger>fa-icon,.notification.is-danger *:not(.button):not(.icon):not(.dropdown-item)>he-svg-icon,.notification.is-danger>he-svg-icon{color:#ff3844}he-sites-maps{height:200px}.external-link{color:#4c7194}.files-form-container{box-shadow:2px 2px 4px #00000029;background-color:#fff}.files-form-header{padding:10px 12px;background-color:#dbe3ea;border-top-left-radius:3px;border-top-right-radius:3px}.properties-container--title,.property-container{padding:6px 12px}.property-container{flex:none;flex-grow:1;min-width:50%;max-width:100%;border:1px solid #f5f5f5}.property-container.is-error-danger{border-color:#ff3844}.property-container.is-error-warning{border-color:#ff881b}.properties-container--title{border-top:1px solid #dbe3ea;border-bottom:1px solid #dbe3ea;background:#f5f7f9}.properties-container .properties-container{border-radius:6px;border:1px solid #dbe3ea;margin:4px 0}.properties-container .properties-container--title{border-top:none}.property-internal{color:#249da5}.property-key,.property-value{word-break:break-word}.property-array-container{border-radius:6px;border:1px solid #dbdbdb}.number-tag{border:1px solid #249da5;border-radius:50%}.copy-button{visibility:hidden}.field-container:hover .copy-button{visibility:visible}.is-group-error-danger{background-color:#ffcdd0}.is-group-error-warning{background-color:#ffdec0}.property-error.is-error-danger{background-color:#ffeced}.field-container+.property-error.is-error-danger{background-color:transparent;color:#ff3844!important}.property-error.is-error-warning{background-color:#fff5ec}.field-container+.property-error.is-error-warning{background-color:transparent;color:#ff881b!important}::ng-deep .property-tooltip{background-color:#fff;color:#0a0a0a;border:1px solid #dbdbdb;z-index:11;max-width:50vw;max-height:50vh;overflow:auto}::ng-deep .property-tooltip pre{white-space:pre-wrap}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }, { 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"] }, { kind: "component", type: NodeIconComponent, selector: "he-node-icon", inputs: ["type", "size"] }, { kind: "component", type: SitesMapsComponent, selector: "he-sites-maps", inputs: ["loadPolygons", "sites", "zoom", "showNotice"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation", "svgClass"] }, { kind: "component", type: ClipboardComponent, selector: "he-clipboard", inputs: ["icon", "value", "disabled", "hideText", "size", "clipboardClass"] }, { kind: "component", type: GuideOverlayComponent, selector: "he-guide-overlay", inputs: ["pageId", "width", "height", "positions"], outputs: ["widthChange", "heightChange"] }, { kind: "pipe", type: EllipsisPipe, name: "ellipsis" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
10392
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: FilesFormComponent, isStandalone: true, selector: "he-files-form", inputs: { isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null }, node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, showNodeLink: { classPropertyName: "showNodeLink", publicName: "showNodeLink", isSignal: true, isRequired: false, transformFunction: null }, errorGuidePrefix: { classPropertyName: "errorGuidePrefix", publicName: "errorGuidePrefix", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isOpen: "isOpenChange", nodeErorrResolved: "nodeErorrResolved" }, exportAs: ["filesForm"], ngImport: i0, template: "<div class=\"is-flex is-flex-direction-column is-align-items-flex-start is-align-self-stretch | files-form-container\">\n <div\n class=\"is-flex is-flex-direction-row is-justify-content-space-between is-align-items-center is-align-self-stretch is-gap-16 px-4 py-2 has-text-secondary | files-form-header\"\n (click)=\"isOpen.set(!isOpen())\"\n pointer>\n <div class=\"is-flex is-gap-8 is-align-items-center\">\n @if (nodeProperty()) {\n <he-node-icon class=\"is-flex\" [type]=\"schemaType()\" [size]=\"24\" />\n <span class=\"has-text-weight-bold has-text-secondary is-size-5\">{{ schemaType() }}</span>\n @if (nodeProperty().hasError || hasError()) {\n <he-svg-icon name=\"xmark-circle\" class=\"has-text-danger is-flex is-align-items-center\" />\n <span class=\"has-text-danger has-text-weight-bold is-italic\">Error</span>\n } @else if (nodeProperty().hasWarning || hasWarning()) {\n <he-svg-icon name=\"exclamation-triangle\" class=\"has-text-warning is-flex is-align-items-center\" />\n <span class=\"has-text-warning has-text-weight-bold is-italic\">Warning</span>\n }\n }\n </div>\n @if ((showNodeLink() && nodeUrl()) || canOpen()) {\n <div class=\"is-flex is-flex-direction-row is-align-items-center is-gap-16\">\n @if (showNodeLink() && nodeUrl()) {\n <ng-container *ngTemplateOutlet=\"nodeLink; context: { url: nodeUrl(), nodeType: schemaType() }\" />\n }\n @if (canOpen()) {\n <he-svg-icon [name]=\"isOpen() ? 'minus' : 'plus'\" />\n }\n </div>\n }\n </div>\n\n <div class=\"is-flex is-flex-direction-column is-align-items-flex-start is-align-self-stretch\">\n @if (isOpen()) {\n @if (nodeProperty()?.error) {\n <ng-container\n *ngTemplateOutlet=\"propertyError; context: { property: nodeProperty(), classes: 'is-my-1 is-px-3' }\" />\n }\n }\n\n <div class=\"is-flex is-flex-direction-row is-flex-wrap-wrap is-align-self-stretch\">\n @for (property of properties(); track trackByProperty($index, property)) {\n <ng-container *ngTemplateOutlet=\"showProperty; context: { $implicit: property }\" />\n }\n </div>\n\n @if (isOpen()) {\n <ng-container *ngTemplateOutlet=\"propertyMap; context: { $implicit: nodeProperty() }\" />\n }\n </div>\n\n <ng-content />\n</div>\n\n<ng-template #propertyKeyTooltip let-property=\"property\">\n <markdown [data]=\"property.schema.description\" />\n</ng-template>\n\n<ng-template #propertyKey let-property=\"property\">\n @if (property.schema?.description) {\n <span\n class=\"trigger-popover | property-key\"\n [ngbTooltip]=\"propertyKeyTooltip\"\n [tooltipContext]=\"{ property }\"\n triggers=\"click\"\n autoClose=\"outside\"\n tooltipClass=\"property-tooltip\"\n placement=\"bottom-left auto\"\n container=\"body\"\n (click)=\"$event.stopPropagation()\">\n <span>{{ property.key }}</span>\n </span>\n } @else {\n <span>{{ property.key }}</span>\n }\n</ng-template>\n\n<ng-template #propertyContent let-property=\"property\">\n <div class=\"is-flex is-align-items-center is-flex-wrap-wrap is-gap-4\">\n <div class=\"is-flex has-text-secondary\">\n <ng-container *ngTemplateOutlet=\"propertyKey; context: { property }\" />\n <span>:</span>\n </div>\n\n @if (property.isCollapsible && property.showMaxLength) {\n <span class=\"is-flex is-size-7 | property-value\">\n {{ property.value | ellipsis: property.showMaxLength }}\n </span>\n\n <a class=\"is-flex is-size-7\" (click)=\"property.showMaxLength = 0\">Show more</a>\n } @else {\n <span class=\"is-flex is-size-7 | property-value\">\n {{ property.value }}\n </span>\n }\n\n @if (property.schema?.internal && property.key !== 'originalId') {\n <div class=\"property-internal\" ngbTooltip=\"This value is auto-generated.\">\n <he-svg-icon name=\"autogenerate-circle\" />\n </div>\n }\n\n <div class=\"copy-button\">\n <he-clipboard [value]=\"property.value\" [hideText]=\"true\" />\n </div>\n </div>\n\n <div class=\"is-flex is-gap-8\">\n @if (property.externalUrl?.url) {\n <a\n [href]=\"property.externalUrl.url + (property.externalUrl.urlParamValue ? property.value : '')\"\n target=\"_blank\"\n [title]=\"property.externalUrl.title\"\n class=\"ml-2\"\n [ngClass]=\"{ 'is-info': property.key === 'type' }\"\n [attr.disabled]=\"property.externalUrl.urlParamValue && !property.value ? true : null\">\n <he-svg-icon [name]=\"property.externalUrl.icon || 'external-link'\" />\n </a>\n }\n </div>\n</ng-template>\n\n<ng-template #showProperty let-property>\n @if ((isOpen() || property.closedVisible) && !property.isHidden) {\n @if (property.properties.length) {\n <div class=\"is-flex is-flex-direction-column is-flex-wrap-wrap w-100 | properties-container\">\n <div\n class=\"is-flex is-flex-direction-row is-justify-content-space-between is-gap-4 has-text-secondary w-100 | properties-container--title\"\n (click)=\"property.isOpen = !property.isOpen\"\n pointer\n [class.is-open]=\"property.isOpen\"\n [class.is-group-error-danger]=\"property.hasError\"\n [class.is-group-error-warning]=\"!property.hasError && property.hasWarning\">\n <div class=\"is-flex is-gap-8 has-text-weight-bold\">\n <!-- @if (property.schemaType === SchemaType.Term) {\n <he-node-icon [type]=\"property.schemaType\" />\n } -->\n <ng-container *ngTemplateOutlet=\"propertyKey; context: { property }\" />\n </div>\n <he-svg-icon [name]=\"property.isOpen ? 'minus' : 'plus'\" />\n </div>\n @if (property.isOpen) {\n @if (property.error) {\n <ng-container *ngTemplateOutlet=\"propertyError; context: { property, classes: 'is-my-1 is-px-3' }\" />\n }\n @if (property.isArray) {\n <div class=\"py-2 px-3 w-100\">\n @for (prop2 of property.properties; track trackByProperty($index, prop2)) {\n @if (prop2.key) {\n <div class=\"pt-2 my-4 | property-array-container\" [id]=\"prop2.fullKey + '_' + prop2.id\">\n <div class=\"ml-2 is-mb-2 | property-array-number\">\n <span class=\"has-text-info is-px-1 | number-tag\">{{ prop2.key }}</span>\n </div>\n @if (prop2.error) {\n <ng-container\n *ngTemplateOutlet=\"propertyError; context: { property: prop2, classes: 'is-py-1 is-px-3' }\" />\n }\n <div class=\"p-3\">\n <div class=\"is-flex is-flex-direction-row is-flex-wrap-wrap is-align-self-stretch\">\n @for (prop3 of prop2.properties; track trackByProperty($index, prop3)) {\n <ng-container *ngTemplateOutlet=\"showProperty; context: { $implicit: prop3 }\" />\n }\n </div>\n </div>\n </div>\n }\n }\n </div>\n } @else {\n <div class=\"is-flex is-flex-direction-row is-flex-wrap-wrap is-align-self-stretch\">\n @for (prop2 of property.properties; track trackByProperty($index, prop2)) {\n <ng-container *ngTemplateOutlet=\"showProperty; context: { $implicit: prop2 }\" />\n }\n </div>\n }\n }\n </div>\n } @else {\n <div\n class=\"is-flex is-flex-direction-column is-gap-4 | property-container\"\n [class.is-error-danger]=\"property.hasError\"\n [class.is-error-warning]=\"!property.hasError && property.hasWarning\">\n <div\n class=\"is-flex is-flex-direction-row is-align-items-center is-justify-content-space-between is-gap-4 | field-container\">\n @if (property.key) {\n <ng-container *ngTemplateOutlet=\"propertyContent; context: { property }\" />\n }\n </div>\n @if (property.hasError || property.hasWarning) {\n <ng-container *ngTemplateOutlet=\"propertyError; context: { property }\" />\n }\n </div>\n }\n }\n</ng-template>\n\n<ng-template #propertyError let-property=\"property\" let-classes=\"classes\">\n @if (property.error?.message) {\n <div\n class=\"is-flex is-flex-direction-row is-gap-8 is-size-6 is-m-0 w-100 has-text-grey {{ classes }} | property-error\"\n [class.is-error-danger]=\"property.hasError\"\n [class.is-error-warning]=\"!property.hasError && property.hasWarning\">\n @if (property.hasError) {\n <he-svg-icon name=\"xmark-circle\" size=\"24\" class=\"has-text-danger is-flex-grow-0\" />\n } @else {\n <he-svg-icon name=\"exclamation-triangle\" size=\"24\" class=\"has-text-warning is-flex-grow-0\" />\n }\n <div class=\"is-flex is-flex-grow-1\" [innerHTML]=\"property.error.message\"></div>\n @if (errorGuidePrefix() && property.errorGuidePageId) {\n <he-guide-overlay class=\"is-flex-grow-0\" [pageId]=\"errorGuidePrefix() + property.errorGuidePageId\" />\n }\n @if (property.error.index >= 0) {\n @if (property.hasWarning) {\n <a (click)=\"resolveError(property)\">\n <he-svg-icon name=\"checkmark\" />\n <span class=\"is-pl-2\">Resolved</span>\n </a>\n }\n }\n </div>\n }\n</ng-template>\n\n<ng-template #propertyMap let-property>\n @if (showMap()) {\n <div class=\"is-flex is-flex-direction-column is-flex-wrap-wrap w-100 | properties-container\">\n <div\n class=\"is-flex is-flex-direction-row is-justify-content-space-between is-gap-4 w-100 | properties-container--title\"\n (click)=\"mapVisible.set(!mapVisible())\"\n pointer\n [class.is-open]=\"mapVisible()\">\n <span class=\"is-size-6\">View on Map</span>\n <he-svg-icon [name]=\"mapVisible() ? 'minus' : 'plus'\" />\n </div>\n @if (mapVisible()) {\n <he-sites-maps [sites]=\"[node()]\" [showNotice]=\"false\" />\n }\n </div>\n }\n</ng-template>\n\n<ng-template #nodeLink let-url=\"url\" let-nodeType=\"nodeType\">\n <a class=\"external-link\" [href]=\"url\" target=\"_blank\">\n <span class=\"is-hidden-mobile\">View</span>\n <span class=\"is-hidden-mobile is-pl-1\">{{ nodeType }}</span>\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n </a>\n</ng-template>\n", styles: [".notification{color:#0a0a0a!important}.notification.is-success{background-color:#d5f3d8}.notification.is-success *:not(.button):not(.icon):not(.dropdown-item)>fa-icon,.notification.is-success>fa-icon,.notification.is-success *:not(.button):not(.icon):not(.dropdown-item)>he-svg-icon,.notification.is-success>he-svg-icon{color:#48c78e}.notification.is-info{background-color:#d3ebed}.notification.is-info *:not(.button):not(.icon):not(.dropdown-item)>fa-icon,.notification.is-info>fa-icon,.notification.is-info *:not(.button):not(.icon):not(.dropdown-item)>he-svg-icon,.notification.is-info>he-svg-icon{color:#249da5}.notification.is-warning{background-color:#ffdec0}.notification.is-warning *:not(.button):not(.icon):not(.dropdown-item)>fa-icon,.notification.is-warning>fa-icon,.notification.is-warning *:not(.button):not(.icon):not(.dropdown-item)>he-svg-icon,.notification.is-warning>he-svg-icon{color:#ff881b}.notification.is-danger{background-color:#ffcdd0}.notification.is-danger *:not(.button):not(.icon):not(.dropdown-item)>fa-icon,.notification.is-danger>fa-icon,.notification.is-danger *:not(.button):not(.icon):not(.dropdown-item)>he-svg-icon,.notification.is-danger>he-svg-icon{color:#ff3844}he-sites-maps{height:200px}.external-link{color:#4c7194}.files-form-container{box-shadow:2px 2px 4px #00000029;background-color:#fff}.files-form-header{padding:10px 12px;background-color:#dbe3ea;border-top-left-radius:3px;border-top-right-radius:3px}.properties-container--title,.property-container{padding:6px 12px}.property-container{flex:none;flex-grow:1;min-width:50%;max-width:100%;border:1px solid #f5f5f5}.property-container.is-error-danger{border-color:#ff3844}.property-container.is-error-warning{border-color:#ff881b}.properties-container--title{border-top:1px solid #dbe3ea;border-bottom:1px solid #dbe3ea;background:#f5f7f9}.properties-container .properties-container{border-radius:6px;border:1px solid #dbe3ea;margin:4px 0}.properties-container .properties-container--title{border-top:none}.property-internal{color:#249da5}.property-key,.property-value{word-break:break-word}.property-array-container{border-radius:6px;border:1px solid #dbdbdb}.number-tag{border:1px solid #249da5;border-radius:50%}.copy-button{visibility:hidden}.field-container:hover .copy-button{visibility:visible}.is-group-error-danger{background-color:#ffcdd0}.is-group-error-warning{background-color:#ffdec0}.property-error.is-error-danger{background-color:#ffeced}.field-container+.property-error.is-error-danger{background-color:transparent;color:#ff3844!important}.property-error.is-error-warning{background-color:#fff5ec}.field-container+.property-error.is-error-warning{background-color:transparent;color:#ff881b!important}::ng-deep .property-tooltip{background-color:#fff;color:#0a0a0a;border:1px solid #dbdbdb;z-index:11;max-width:50vw;max-height:50vh;overflow:auto}::ng-deep .property-tooltip pre{white-space:pre-wrap}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }, { 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"] }, { kind: "component", type: NodeIconComponent, selector: "he-node-icon", inputs: ["type", "size"] }, { kind: "component", type: SitesMapsComponent, selector: "he-sites-maps", inputs: ["loadPolygons", "sites", "zoom", "showNotice"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }, { kind: "component", type: ClipboardComponent, selector: "he-clipboard", inputs: ["icon", "value", "disabled", "hideText", "size", "clipboardClass"] }, { kind: "component", type: GuideOverlayComponent, selector: "he-guide-overlay", inputs: ["pageId", "width", "height", "positions"], outputs: ["widthChange", "heightChange"] }, { kind: "pipe", type: EllipsisPipe, name: "ellipsis" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
10401
10393
|
}
|
|
10402
10394
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: FilesFormComponent, decorators: [{
|
|
10403
10395
|
type: Component$1,
|
|
@@ -10431,7 +10423,7 @@ class SchemaInfoComponent {
|
|
|
10431
10423
|
this.autoClose = computed(() => (this.triggers() === 'click' ? 'outside' : true));
|
|
10432
10424
|
}
|
|
10433
10425
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: SchemaInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10434
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: SchemaInfoComponent, isStandalone: true, selector: "he-schema-info", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, triggers: { classPropertyName: "triggers", publicName: "triggers", isSignal: true, isRequired: false, transformFunction: null }, container: { classPropertyName: "container", publicName: "container", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (contentString()) {\n <span\n class=\"is-inline-block has-text-secondary | help-icon\"\n [ngbTooltip]=\"tooltipContent\"\n [placement]=\"placement()\"\n [triggers]=\"triggers()\"\n [autoClose]=\"autoClose()\"\n [container]=\"container()\">\n <he-svg-icon name=\"help-circle\" size=\"20\" />\n </span>\n}\n\n<ng-template #tooltipContent>\n <span class=\"is-pre-line\">\n {{ contentString() | removeMarkdown }}\n </span>\n</ng-template>\n", styles: [":host{height:20px}\n"], dependencies: [{ 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"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
10426
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: SchemaInfoComponent, isStandalone: true, selector: "he-schema-info", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, triggers: { classPropertyName: "triggers", publicName: "triggers", isSignal: true, isRequired: false, transformFunction: null }, container: { classPropertyName: "container", publicName: "container", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (contentString()) {\n <span\n class=\"is-inline-block has-text-secondary | help-icon\"\n [ngbTooltip]=\"tooltipContent\"\n [placement]=\"placement()\"\n [triggers]=\"triggers()\"\n [autoClose]=\"autoClose()\"\n [container]=\"container()\">\n <he-svg-icon name=\"help-circle\" size=\"20\" />\n </span>\n}\n\n<ng-template #tooltipContent>\n <span class=\"is-pre-line\">\n {{ contentString() | removeMarkdown }}\n </span>\n</ng-template>\n", styles: [":host{height:20px}\n"], dependencies: [{ 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"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }, { kind: "pipe", type: RemoveMarkdownPipe, name: "removeMarkdown" }] }); }
|
|
10435
10427
|
}
|
|
10436
10428
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: SchemaInfoComponent, decorators: [{
|
|
10437
10429
|
type: Component$1,
|
|
@@ -10782,7 +10774,7 @@ class FilesFormEditableComponent {
|
|
|
10782
10774
|
return this.propertyChanged(value, array);
|
|
10783
10775
|
}
|
|
10784
10776
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: FilesFormEditableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10785
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: FilesFormEditableComponent, isStandalone: true, selector: "he-files-form-editable", inputs: { isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null }, node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, nodeMap: { classPropertyName: "nodeMap", publicName: "nodeMap", isSignal: true, isRequired: false, transformFunction: null }, showSuggestedDefaultProperties: { classPropertyName: "showSuggestedDefaultProperties", publicName: "showSuggestedDefaultProperties", isSignal: true, isRequired: false, transformFunction: null }, errorGuidePrefix: { classPropertyName: "errorGuidePrefix", publicName: "errorGuidePrefix", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isOpen: "isOpenChange", nodeChanged: "nodeChanged" }, ngImport: i0, template: "<div class=\"card\">\n <div class=\"card-toggle p-4\" (click)=\"isOpen.set(!isOpen())\" pointer>\n <he-svg-icon [name]=\"isOpen() ? 'chevron-down' : 'chevron-right'\" />\n @if (nodeProperty()) {\n <span\n class=\"is-px-2\"\n [class.has-text-danger]=\"nodeProperty().hasError\"\n [class.has-text-warning]=\"nodeProperty().hasWarning\">\n <he-node-icon [type]=\"schemaType()\" />\n </span>\n }\n </div>\n\n @if (isOpen() && nodeProperty()) {\n <ng-container *ngTemplateOutlet=\"showNewProperty; context: { $implicit: nodeProperty() }\" />\n }\n\n <div class=\"card-content\">\n @if (isOpen()) {\n @if (nodeProperty()?.error) {\n <div class=\"py-4 pl-4\">\n <ng-container *ngTemplateOutlet=\"propertyError; context: { property: nodeProperty() }\" />\n </div>\n }\n }\n\n <div class=\"columns is-multiline\">\n @for (property of properties(); track trackByProperty($index, property)) {\n <ng-container *ngTemplateOutlet=\"showProperty; context: { $implicit: property }\" />\n }\n </div>\n </div>\n\n <ng-content />\n</div>\n\n@if (!!bibliographiesSearchProperty()) {\n <he-bibliographies-search-confirm\n [search]=\"bibliographiesSearchProperty().value\"\n [searchBy]=\"bibliographiesSearchKey(bibliographiesSearchProperty())\"\n [searchSources]=\"bibliographiesSearchSources\"\n (closed)=\"onBibliographiesSearchClosed($event)\" />\n}\n\n<ng-template #labelDescription let-property>\n <span class=\"property-key\" [ngbTooltip]=\"property.key\" placement=\"right\">\n <span class=\"is-inline-block is-align-middle is-nowrap has-text-ellipsis\">{{ property.key }}</span>\n @if (property.schema?.description) {\n <he-schema-info\n class=\"is-inline-block is-pl-1 is-align-middle\"\n triggers=\"click\"\n [content]=\"property.schema.description\" />\n }\n </span>\n</ng-template>\n\n<ng-template #labelDefault let-property>\n <span>{{ property.key }}</span>\n</ng-template>\n\n<ng-template #showProperty let-property>\n @if ((isOpen() || property.closedVisible) && !property.isHidden) {\n <div\n class=\"column is-6\"\n [id]=\"property.fullKey + '_' + property.id\"\n [class.is-12]=\"property.properties.length || !property.key\">\n @if (!property.properties.length) {\n <div class=\"columns is-multiline is-variable is-1\">\n @if (property.key) {\n <div class=\"column is-3 py-1\">\n <label class=\"label has-text-right-tablet has-text-ellipsis\" [for]=\"property.id\" [title]=\"property.key\">\n <ng-container\n *ngTemplateOutlet=\"\n property.schema?.description && property.editable ? labelDescription : labelDefault;\n context: { $implicit: property }\n \" />\n </label>\n </div>\n }\n <div class=\"column is-9 py-1\" [class.is-12]=\"!property.key\">\n <div class=\"field\">\n <ng-container *ngTemplateOutlet=\"inputForm; context: { $implicit: property }\" />\n <ng-container *ngTemplateOutlet=\"propertyError; context: { property: property }\" />\n </div>\n </div>\n </div>\n }\n @if (!!property.properties.length) {\n <div\n class=\"panel\"\n [class.is-danger]=\"!property.changed && property.hasError\"\n [class.is-warning]=\"!property.changed && property.hasWarning\"\n [class.is-default]=\"!property.changed && !property.hasError && !property.hasWarning\">\n <div\n class=\"open-group panel-heading py-0\"\n (click)=\"property.isOpen = !property.isOpen\"\n pointer\n [class.is-open]=\"property.isOpen\"\n [class.has-text-white]=\"property.hasError || property.hasWarning\">\n <div class=\"columns is-mobile is-vcentered is-multiline\">\n <span class=\"column is-narrow py-1 my-0\">\n <he-svg-icon [name]=\"property.isOpen ? 'chevron-down' : 'chevron-right'\" />\n </span>\n <span class=\"column py-1 my-0\">\n <span class=\"is-size-6\">{{ property.key }}</span>\n </span>\n @if (property.schemaType) {\n <span class=\"column is-narrow py-1 my-0\">\n <span class=\"tags mb-0 has-addons\">\n <span class=\"tag mb-0 is-light\">Type</span>\n <span class=\"tag mb-0 is-white\">\n <he-schema-version-link linkClass=\"is-small\" [node]=\"{ '@type': property.schemaType }\">\n <span>{{ property.schemaType }}</span>\n </he-schema-version-link>\n </span>\n </span>\n </span>\n }\n <he-popover-confirm\n class=\"column is-narrow py-1 my-0 px-0\"\n ngbTooltip=\"Remove group\"\n placement=\"top\"\n [message]=\"\n '<p>This will remove the group completely.</p>' +\n (property.isRequired ? '<p><u>Warning: this field is required.</u></p>' : '') +\n '<p>Do you confirm?</p>'\n \"\n popoverClass=\"px-3\"\n (confirmed)=\"propertyChanged(null, property)\">\n <he-svg-icon name=\"xmark\" />\n </he-popover-confirm>\n </div>\n </div>\n @if (property.isOpen) {\n <div class=\"panel-block is-block p-0\">\n @if (property.error) {\n <div class=\"px-3 pt-4\">\n <ng-container *ngTemplateOutlet=\"propertyError; context: { property }\" />\n </div>\n }\n @if (!property.isArray) {\n <div class=\"mt-3\">\n @if (!property.editable) {\n <p class=\"help py-1 px-2\">\n To change the {{ property.key }}, please delete it first, then add the field again\n </p>\n }\n @if (property.editable) {\n @switch (property.schema?.title) {\n @case ('Bibliography') {\n <p class=\"help py-1 px-2\">\n Search by Title or Document DOI to auto-populate the fields using the Mendeley catalogue\n </p>\n }\n }\n }\n <ng-container *ngTemplateOutlet=\"showNewProperty; context: { $implicit: property }\" />\n <div class=\"property-group py-2 px-3 mt-2\">\n <div class=\"columns is-multiline mb-0\">\n @for (prop2 of property.properties; track trackByProperty($index, prop2)) {\n <ng-container *ngTemplateOutlet=\"showProperty; context: { $implicit: prop2 }\" />\n }\n </div>\n </div>\n </div>\n }\n @if (property.isArray) {\n <div class=\"py-2 px-3 mt-2\">\n @for (prop2 of property.properties; track trackByProperty($index, prop2)) {\n @if (prop2.key) {\n <div class=\"card p-0 my-4\" [id]=\"prop2.fullKey + '_' + prop2.id\">\n <div class=\"property-array-number\">\n <div class=\"tags has-addons\">\n <span class=\"tag is-dark\">{{ prop2.key }}</span>\n @if (property.editable) {\n <span\n class=\"tag is-info\"\n pointer\n (click)=\"duplicateArrayGroup(property, prop2)\"\n [ngbTooltip]=\"'Duplicate ' + property.key | pluralize: 1\"\n placement=\"top\">\n <he-svg-icon name=\"copy\" />\n </span>\n @if (prop2.key !== '0') {\n <span\n class=\"tag is-light\"\n pointer\n (click)=\"moveArrayGroupUp(property, prop2)\"\n ngbTooltip=\"Move Up\"\n placement=\"top\">\n <he-svg-icon name=\"chevron-up\" />\n </span>\n }\n @if (prop2.key !== property.properties.length - 1) {\n <span\n class=\"tag is-light\"\n pointer\n (click)=\"moveArrayGroupDown(property, prop2)\"\n ngbTooltip=\"Move Down\"\n placement=\"top\">\n <he-svg-icon name=\"chevron-down\" />\n </span>\n }\n <he-popover-confirm\n class=\"tag is-delete\"\n [ngbTooltip]=\"'Remove ' + property.key | pluralize: 1\"\n placement=\"top\"\n message=\"This will remove the group completely. Do you confirm?\"\n position=\"right\"\n (confirmed)=\"removeArrayGroup(property, prop2)\" />\n }\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"showNewProperty; context: { $implicit: prop2 }\" />\n @if (prop2.error) {\n <div class=\"px-4 mt-2\">\n <ng-container *ngTemplateOutlet=\"propertyError; context: { property: prop2 }\" />\n </div>\n }\n <div class=\"property-group card-content p-3\">\n <div class=\"columns is-multiline my-0\">\n @for (prop3 of prop2.properties; track trackByProperty($index, prop3)) {\n <ng-container *ngTemplateOutlet=\"showProperty; context: { $implicit: prop3 }\" />\n }\n </div>\n </div>\n </div>\n }\n }\n @if (property.editable) {\n <button class=\"button is-info is-small\" type=\"button\" (click)=\"addArrayGroup(property)\">\n <he-svg-icon name=\"plus\" />\n <span class=\"pl-2\">Add</span>\n <span class=\"pl-1\">{{ property.key | pluralize: 1 }}</span>\n </button>\n <he-node-recommendations\n buttonClass=\"is-small\"\n [node]=\"node\"\n [nodeField]=\"property.key\"\n (selectRecommendation)=\"onSelectRecommendation(property, $event)\" />\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #inputForm let-property>\n @if (property.key) {\n @switch (property.suggestions?.type) {\n @case ('select') {\n <ng-container *ngTemplateOutlet=\"inputSelect; context: { $implicit: property }\" />\n }\n @default {\n <ng-container *ngTemplateOutlet=\"inputInput; context: { $implicit: property }\" />\n }\n }\n }\n</ng-template>\n\n<ng-template #inputInput let-property>\n <div class=\"field mb-0\" [class.has-addons]=\"hasAddons(property)\">\n <div class=\"control is-expanded\" [class.has-icons-right]=\"property.loading\">\n <input\n class=\"input is-small search-input\"\n [class.is-dark]=\"property.key === 'type'\"\n [class.is-danger]=\"(!property.changed && property.hasError) || isRequired(property)\"\n [class.is-warning]=\"!property.changed && property.hasWarning\"\n [(ngModel)]=\"property.value\"\n #propertyModel=\"ngModel\"\n [type]=\"property.schema?.type === 'number' ? 'number' : 'string'\"\n [id]=\"property.id\"\n name=\"randomname\"\n [readonly]=\"!property.editable || property.schema?.internal\"\n [placeholder]=\"property.placeholder\"\n [appTagsInput]=\"{\n enabled: property.editable && property.schema?.type === 'array',\n items: property.schema?.items,\n delimiter: ';',\n allowDuplicates: true,\n placeholder: property.placeholder\n }\"\n (change)=\"propertyChanged($event.target.value, property)\"\n [pattern]=\"property.schema?.pattern\"\n [required]=\"property.fullKey.endsWith('id') && property.fullKey !== 'id'\"\n [min]=\"property.schema?.minimum\"\n [max]=\"property.schema?.maximum\"\n [ngbTypeahead]=\"property | applyPure: propertySuggest\"\n [resultTemplate]=\"suggestion\"\n [inputFormatter]=\"property.formatter\"\n [focusFirst]=\"true\"\n (focus)=\"property.editable && typeaheadFocus($event)\"\n (selectItem)=\"suggestionSelected($event.item, property)\" />\n\n <span class=\"icon is-small is-right has-text-grey-dark\" [class.is-hidden]=\"!property.loading\">\n <he-svg-icon name=\"loading\" animation=\"spin\" size=\"20\" />\n </span>\n </div>\n <ng-container *ngTemplateOutlet=\"inputAddons; context: { $implicit: property }\" />\n </div>\n @if (!property.hasError && propertyModel.invalid) {\n <p class=\"help is-danger-light\">\n <span [innerHTML]=\"formatPropertyError(propertyModel.errors, property)\"></span>\n </p>\n }\n</ng-template>\n\n<ng-template #inputSelect let-property>\n <div class=\"field mb-0\" [class.has-addons]=\"hasAddons(property)\">\n <div class=\"control is-expanded\">\n <div\n class=\"select is-small is-fullwidth\"\n [class.is-danger]=\"(!property.changed && property.hasError) || isRequired(property)\"\n [class.is-warning]=\"!property.changed && property.hasWarning\">\n <select\n [(ngModel)]=\"property.value\"\n #propertyModel=\"ngModel\"\n [id]=\"property.id\"\n name=\"randomname\"\n [disabled]=\"!property.editable || property.schema?.internal\"\n (change)=\"propertyChanged($event.target.value, property)\">\n <option value=\"\">Select</option>\n @for (value of property.suggestions.values; track trackByIndex($index, value)) {\n <option [value]=\"value\">\n {{ value }}\n </option>\n }\n </select>\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"inputAddons; context: { $implicit: property }\" />\n </div>\n @if (!property.hasError && propertyModel.invalid) {\n <p class=\"help is-danger-light\">\n <span [innerHTML]=\"formatPropertyError(propertyModel.errors, property)\"></span>\n </p>\n }\n</ng-template>\n\n<ng-template #removeFieldAddon let-property>\n @if (!property.isRequired) {\n <div class=\"control\">\n <a\n class=\"button is-small\"\n title=\"Remove field\"\n [class.is-outlined]=\"!property.changed && (property.hasError || property.hasWarning)\"\n [class.is-danger]=\"!property.changed && property.hasError\"\n [class.is-warning]=\"!property.changed && property.hasWarning\"\n (click)=\"$event.stopPropagation(); propertyChanged(null, property)\">\n <he-svg-icon name=\"xmark\" />\n </a>\n </div>\n }\n</ng-template>\n\n<ng-template #inputAddons let-property>\n @if (property.editable) {\n @switch (property.schemaType) {\n @case (SchemaType.Cycle) {\n <ng-container *ngTemplateOutlet=\"cycleAddons; context: { $implicit: property }\" />\n }\n }\n @if (bibliographiesSearchKey(property)) {\n <div class=\"control\">\n <button class=\"button is-small\" title=\"Advanced Search\" (click)=\"bibliographiesSearchProperty.set(property)\">\n <he-svg-icon name=\"search\" />\n </button>\n </div>\n }\n <ng-container *ngTemplateOutlet=\"removeFieldAddon; context: { $implicit: property }\" />\n }\n\n @if (property.addPropertyEnabled) {\n <div class=\"control\">\n <a\n class=\"button is-small is-danger\"\n title=\"Add field\"\n (click)=\"$event.stopPropagation(); addMissingProperty(property)\">\n <he-svg-icon name=\"plus\" />\n <span class=\"pl-2\">Add</span>\n </a>\n </div>\n }\n @if (isRequired(property)) {\n <div class=\"control\">\n <label class=\"button is-small is-danger\" [for]=\"property.id\" ngbTooltip=\"This field is required\" placement=\"top\">\n <he-svg-icon name=\"exclamation-triangle\" />\n </label>\n </div>\n }\n @if (property.externalUrl?.url) {\n <div class=\"control\">\n <a\n class=\"button is-small\"\n [href]=\"property.externalUrl.url + (property.externalUrl.urlParamValue ? property.value : '')\"\n target=\"_blank\"\n [title]=\"property.externalUrl.title\"\n [ngClass]=\"{ 'is-info': property.key === 'type' }\"\n [attr.disabled]=\"property.externalUrl.urlParamValue && !property.value ? true : null\">\n <he-svg-icon [name]=\"property.externalUrl.icon || 'external-link'\" class=\"ml-2\" />\n </a>\n </div>\n }\n</ng-template>\n\n<ng-template #cycleAddons let-property>\n @if (property.key === 'cycleDuration') {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n title=\"Calculate value from startDate and endDate\"\n (click)=\"calculateCycleDuration(property)\"\n [disabled]=\"!calculateCycleDurationEnabled(property)\">\n <he-svg-icon name=\"calculator\" />\n </button>\n </div>\n }\n @if (property.key === 'startDate') {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n title=\"Calculate value from endDate and cycleDuration\"\n (click)=\"calculateCycleStartDate(property)\"\n [disabled]=\"!calculateCycleStartDateEnabled(property)\">\n <he-svg-icon name=\"calculator\" />\n </button>\n </div>\n }\n</ng-template>\n\n<ng-template #showNewProperty let-property>\n @if (property.editable && property.addPropertyEnabled) {\n <header class=\"card-header\">\n <form class=\"py-3 px-4 is-flex-grow-1\" (submit)=\"addProperty(property)\" novalidate>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-small\">\n <label class=\"label\" [for]=\"property.id + '_new'\">\n <span>Add new field</span>\n </label>\n </div>\n <div class=\"field-body\">\n <div class=\"field has-addons\">\n <div class=\"control is-expanded\">\n <input\n class=\"input is-small\"\n [(ngModel)]=\"property.newProperty\"\n [id]=\"property.id + '_new'\"\n name=\"randomname\"\n placeholder=\"Search and select field from results\"\n [ngbTypeahead]=\"property | applyPure: suggestNewProperty\"\n [resultTemplate]=\"suggestion\"\n [inputFormatter]=\"formatNewProperty\"\n [focusFirst]=\"false\"\n [editable]=\"false\"\n (focus)=\"typeaheadFocus($event)\" />\n </div>\n <div class=\"control\">\n <button\n class=\"button is-small\"\n type=\"submit\"\n [disabled]=\"!property.newProperty || !property.newProperty.name\">\n <he-svg-icon name=\"plus\" />\n <span class=\"pl-2\">Add</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n </form>\n </header>\n } @else {\n <div class=\"pt-1\"></div>\n }\n</ng-template>\n\n<ng-template #propertyError let-property=\"property\">\n @if (property.error) {\n <p class=\"help\" [class.is-danger]=\"property.hasError\" [class.is-warning]=\"property.hasWarning\">\n <span class=\"is-pre-wrap\" [innerHTML]=\"property.error.message\"></span>\n @if (errorGuidePrefix() && property.errorGuidePageId) {\n <he-guide-overlay [pageId]=\"errorGuidePrefix() + property.errorGuidePageId\" />\n }\n </p>\n }\n</ng-template>\n\n<ng-template #suggestion let-r=\"result\" let-t=\"term\">\n <ngb-highlight\n [title]=\"r.bibliography?.title || r.bibliography?.documentDOI || r.bibliography?.scopus || r.name\"\n [result]=\"r.bibliography?.title || r.bibliography?.documentDOI || r.bibliography?.scopus || r.name\"\n [term]=\"t\" />\n</ng-template>\n", styles: [".panel.is-default .panel-heading{background-color:#f5f5f5;color:#363636}.card-toggle{left:0;position:absolute;top:0}@media screen and (max-width:767px){.card-toggle{position:relative}}.card{overflow:visible}.card .card{box-shadow:2px 2px #36363652,0 0 0 1px #36363652}.card .card>.card-header{box-shadow:0 2px 1px #36363652}.property-key span:first-child{width:calc(100% - 20px)}.property-array-number{left:-4px;position:absolute;top:-12px}.property-array-number .tag.is-delete{border:1px solid rgba(53.55,53.55,53.55,.32)}.control>.button{height:100%}.is-danger-light{color:#ff0514}he-sites-maps{height:200px}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { 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"] }, { 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: NgbHighlight, selector: "ngb-highlight", inputs: ["highlightClass", "result", "term", "accentSensitive"] }, { kind: "pipe", type: ApplyPurePipe, name: "applyPure" }, { kind: "pipe", type: PluralizePipe, name: "pluralize" }, { kind: "component", type: NodeIconComponent, selector: "he-node-icon", inputs: ["type", "size"] }, { kind: "component", type: BibliographiesSearchConfirmComponent, selector: "he-bibliographies-search-confirm", inputs: ["search", "searchSources", "searchBibliographies", "searchBy"], outputs: ["searchChange", "searchSourcesChange", "searchBibliographiesChange", "searchByChange", "closed"] }, { kind: "component", type: SchemaInfoComponent, selector: "he-schema-info", inputs: ["type", "field", "content", "placement", "triggers", "container"] }, { kind: "component", type: SchemaVersionLinkComponent, selector: "he-schema-version-link", inputs: ["node", "showExternalLink", "linkClass"] }, { kind: "component", type: PopoverConfirmComponent, selector: "he-popover-confirm", inputs: ["message", "content", "position", "popoverClass"], outputs: ["confirmed"] }, { kind: "component", type: NodeRecommendationsComponent, selector: "he-node-recommendations", inputs: ["node", "nodeField", "buttonClass"], outputs: ["selectRecommendation"] }, { kind: "directive", type: TagsInputDirective, selector: "[appTagsInput]", inputs: ["appTagsInput"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation", "svgClass"] }, { kind: "component", type: GuideOverlayComponent, selector: "he-guide-overlay", inputs: ["pageId", "width", "height", "positions"], outputs: ["widthChange", "heightChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
10777
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: FilesFormEditableComponent, isStandalone: true, selector: "he-files-form-editable", inputs: { isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null }, node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, nodeMap: { classPropertyName: "nodeMap", publicName: "nodeMap", isSignal: true, isRequired: false, transformFunction: null }, showSuggestedDefaultProperties: { classPropertyName: "showSuggestedDefaultProperties", publicName: "showSuggestedDefaultProperties", isSignal: true, isRequired: false, transformFunction: null }, errorGuidePrefix: { classPropertyName: "errorGuidePrefix", publicName: "errorGuidePrefix", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isOpen: "isOpenChange", nodeChanged: "nodeChanged" }, ngImport: i0, template: "<div class=\"card\">\n <div class=\"card-toggle p-4\" (click)=\"isOpen.set(!isOpen())\" pointer>\n <he-svg-icon [name]=\"isOpen() ? 'chevron-down' : 'chevron-right'\" />\n @if (nodeProperty()) {\n <span\n class=\"is-px-2\"\n [class.has-text-danger]=\"nodeProperty().hasError\"\n [class.has-text-warning]=\"nodeProperty().hasWarning\">\n <he-node-icon [type]=\"schemaType()\" />\n </span>\n }\n </div>\n\n @if (isOpen() && nodeProperty()) {\n <ng-container *ngTemplateOutlet=\"showNewProperty; context: { $implicit: nodeProperty() }\" />\n }\n\n <div class=\"card-content\">\n @if (isOpen()) {\n @if (nodeProperty()?.error) {\n <div class=\"py-4 pl-4\">\n <ng-container *ngTemplateOutlet=\"propertyError; context: { property: nodeProperty() }\" />\n </div>\n }\n }\n\n <div class=\"columns is-multiline\">\n @for (property of properties(); track trackByProperty($index, property)) {\n <ng-container *ngTemplateOutlet=\"showProperty; context: { $implicit: property }\" />\n }\n </div>\n </div>\n\n <ng-content />\n</div>\n\n@if (!!bibliographiesSearchProperty()) {\n <he-bibliographies-search-confirm\n [search]=\"bibliographiesSearchProperty().value\"\n [searchBy]=\"bibliographiesSearchKey(bibliographiesSearchProperty())\"\n [searchSources]=\"bibliographiesSearchSources\"\n (closed)=\"onBibliographiesSearchClosed($event)\" />\n}\n\n<ng-template #labelDescription let-property>\n <span class=\"property-key\" [ngbTooltip]=\"property.key\" placement=\"right\">\n <span class=\"is-inline-block is-align-middle is-nowrap has-text-ellipsis\">{{ property.key }}</span>\n @if (property.schema?.description) {\n <he-schema-info\n class=\"is-inline-block is-pl-1 is-align-middle\"\n triggers=\"click\"\n [content]=\"property.schema.description\" />\n }\n </span>\n</ng-template>\n\n<ng-template #labelDefault let-property>\n <span>{{ property.key }}</span>\n</ng-template>\n\n<ng-template #showProperty let-property>\n @if ((isOpen() || property.closedVisible) && !property.isHidden) {\n <div\n class=\"column is-6\"\n [id]=\"property.fullKey + '_' + property.id\"\n [class.is-12]=\"property.properties.length || !property.key\">\n @if (!property.properties.length) {\n <div class=\"columns is-multiline is-variable is-1\">\n @if (property.key) {\n <div class=\"column is-3 py-1\">\n <label class=\"label has-text-right-tablet has-text-ellipsis\" [for]=\"property.id\" [title]=\"property.key\">\n <ng-container\n *ngTemplateOutlet=\"\n property.schema?.description && property.editable ? labelDescription : labelDefault;\n context: { $implicit: property }\n \" />\n </label>\n </div>\n }\n <div class=\"column is-9 py-1\" [class.is-12]=\"!property.key\">\n <div class=\"field\">\n <ng-container *ngTemplateOutlet=\"inputForm; context: { $implicit: property }\" />\n <ng-container *ngTemplateOutlet=\"propertyError; context: { property: property }\" />\n </div>\n </div>\n </div>\n }\n @if (!!property.properties.length) {\n <div\n class=\"panel\"\n [class.is-danger]=\"!property.changed && property.hasError\"\n [class.is-warning]=\"!property.changed && property.hasWarning\"\n [class.is-default]=\"!property.changed && !property.hasError && !property.hasWarning\">\n <div\n class=\"open-group panel-heading py-0\"\n (click)=\"property.isOpen = !property.isOpen\"\n pointer\n [class.is-open]=\"property.isOpen\"\n [class.has-text-white]=\"property.hasError || property.hasWarning\">\n <div class=\"columns is-mobile is-vcentered is-multiline\">\n <span class=\"column is-narrow py-1 my-0\">\n <he-svg-icon [name]=\"property.isOpen ? 'chevron-down' : 'chevron-right'\" />\n </span>\n <span class=\"column py-1 my-0\">\n <span class=\"is-size-6\">{{ property.key }}</span>\n </span>\n @if (property.schemaType) {\n <span class=\"column is-narrow py-1 my-0\">\n <span class=\"tags mb-0 has-addons\">\n <span class=\"tag mb-0 is-light\">Type</span>\n <span class=\"tag mb-0 is-white\">\n <he-schema-version-link linkClass=\"is-small\" [node]=\"{ '@type': property.schemaType }\">\n <span>{{ property.schemaType }}</span>\n </he-schema-version-link>\n </span>\n </span>\n </span>\n }\n <he-popover-confirm\n class=\"column is-narrow py-1 my-0 px-0\"\n ngbTooltip=\"Remove group\"\n placement=\"top\"\n [message]=\"\n '<p>This will remove the group completely.</p>' +\n (property.isRequired ? '<p><u>Warning: this field is required.</u></p>' : '') +\n '<p>Do you confirm?</p>'\n \"\n popoverClass=\"px-3\"\n (confirmed)=\"propertyChanged(null, property)\">\n <he-svg-icon name=\"xmark\" />\n </he-popover-confirm>\n </div>\n </div>\n @if (property.isOpen) {\n <div class=\"panel-block is-block p-0\">\n @if (property.error) {\n <div class=\"px-3 pt-4\">\n <ng-container *ngTemplateOutlet=\"propertyError; context: { property }\" />\n </div>\n }\n @if (!property.isArray) {\n <div class=\"mt-3\">\n @if (!property.editable) {\n <p class=\"help py-1 px-2\">\n To change the {{ property.key }}, please delete it first, then add the field again\n </p>\n }\n @if (property.editable) {\n @switch (property.schema?.title) {\n @case ('Bibliography') {\n <p class=\"help py-1 px-2\">\n Search by Title or Document DOI to auto-populate the fields using the Mendeley catalogue\n </p>\n }\n }\n }\n <ng-container *ngTemplateOutlet=\"showNewProperty; context: { $implicit: property }\" />\n <div class=\"property-group py-2 px-3 mt-2\">\n <div class=\"columns is-multiline mb-0\">\n @for (prop2 of property.properties; track trackByProperty($index, prop2)) {\n <ng-container *ngTemplateOutlet=\"showProperty; context: { $implicit: prop2 }\" />\n }\n </div>\n </div>\n </div>\n }\n @if (property.isArray) {\n <div class=\"py-2 px-3 mt-2\">\n @for (prop2 of property.properties; track trackByProperty($index, prop2)) {\n @if (prop2.key) {\n <div class=\"card p-0 my-4\" [id]=\"prop2.fullKey + '_' + prop2.id\">\n <div class=\"property-array-number\">\n <div class=\"tags has-addons\">\n <span class=\"tag is-dark\">{{ prop2.key }}</span>\n @if (property.editable) {\n <span\n class=\"tag is-info\"\n pointer\n (click)=\"duplicateArrayGroup(property, prop2)\"\n [ngbTooltip]=\"'Duplicate ' + property.key | pluralize: 1\"\n placement=\"top\">\n <he-svg-icon name=\"copy\" />\n </span>\n @if (prop2.key !== '0') {\n <span\n class=\"tag is-light\"\n pointer\n (click)=\"moveArrayGroupUp(property, prop2)\"\n ngbTooltip=\"Move Up\"\n placement=\"top\">\n <he-svg-icon name=\"chevron-up\" />\n </span>\n }\n @if (prop2.key !== property.properties.length - 1) {\n <span\n class=\"tag is-light\"\n pointer\n (click)=\"moveArrayGroupDown(property, prop2)\"\n ngbTooltip=\"Move Down\"\n placement=\"top\">\n <he-svg-icon name=\"chevron-down\" />\n </span>\n }\n <he-popover-confirm\n class=\"tag is-delete\"\n [ngbTooltip]=\"'Remove ' + property.key | pluralize: 1\"\n placement=\"top\"\n message=\"This will remove the group completely. Do you confirm?\"\n position=\"right\"\n (confirmed)=\"removeArrayGroup(property, prop2)\" />\n }\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"showNewProperty; context: { $implicit: prop2 }\" />\n @if (prop2.error) {\n <div class=\"px-4 mt-2\">\n <ng-container *ngTemplateOutlet=\"propertyError; context: { property: prop2 }\" />\n </div>\n }\n <div class=\"property-group card-content p-3\">\n <div class=\"columns is-multiline my-0\">\n @for (prop3 of prop2.properties; track trackByProperty($index, prop3)) {\n <ng-container *ngTemplateOutlet=\"showProperty; context: { $implicit: prop3 }\" />\n }\n </div>\n </div>\n </div>\n }\n }\n @if (property.editable) {\n <button class=\"button is-info is-small\" type=\"button\" (click)=\"addArrayGroup(property)\">\n <he-svg-icon name=\"plus\" />\n <span class=\"pl-2\">Add</span>\n <span class=\"pl-1\">{{ property.key | pluralize: 1 }}</span>\n </button>\n <he-node-recommendations\n buttonClass=\"is-small\"\n [node]=\"node\"\n [nodeField]=\"property.key\"\n (selectRecommendation)=\"onSelectRecommendation(property, $event)\" />\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #inputForm let-property>\n @if (property.key) {\n @switch (property.suggestions?.type) {\n @case ('select') {\n <ng-container *ngTemplateOutlet=\"inputSelect; context: { $implicit: property }\" />\n }\n @default {\n <ng-container *ngTemplateOutlet=\"inputInput; context: { $implicit: property }\" />\n }\n }\n }\n</ng-template>\n\n<ng-template #inputInput let-property>\n <div class=\"field mb-0\" [class.has-addons]=\"hasAddons(property)\">\n <div class=\"control is-expanded\" [class.has-icons-right]=\"property.loading\">\n <input\n class=\"input is-small search-input\"\n [class.is-dark]=\"property.key === 'type'\"\n [class.is-danger]=\"(!property.changed && property.hasError) || isRequired(property)\"\n [class.is-warning]=\"!property.changed && property.hasWarning\"\n [(ngModel)]=\"property.value\"\n #propertyModel=\"ngModel\"\n [type]=\"property.schema?.type === 'number' ? 'number' : 'string'\"\n [id]=\"property.id\"\n name=\"randomname\"\n [readonly]=\"!property.editable || property.schema?.internal\"\n [placeholder]=\"property.placeholder\"\n [appTagsInput]=\"{\n enabled: property.editable && property.schema?.type === 'array',\n items: property.schema?.items,\n delimiter: ';',\n allowDuplicates: true,\n placeholder: property.placeholder\n }\"\n (change)=\"propertyChanged($event.target.value, property)\"\n [pattern]=\"property.schema?.pattern\"\n [required]=\"property.fullKey.endsWith('id') && property.fullKey !== 'id'\"\n [min]=\"property.schema?.minimum\"\n [max]=\"property.schema?.maximum\"\n [ngbTypeahead]=\"property | applyPure: propertySuggest\"\n [resultTemplate]=\"suggestion\"\n [inputFormatter]=\"property.formatter\"\n [focusFirst]=\"true\"\n (focus)=\"property.editable && typeaheadFocus($event)\"\n (selectItem)=\"suggestionSelected($event.item, property)\" />\n\n <span class=\"icon is-small is-right has-text-grey-dark\" [class.is-hidden]=\"!property.loading\">\n <he-svg-icon name=\"loading\" animation=\"spin\" size=\"20\" />\n </span>\n </div>\n <ng-container *ngTemplateOutlet=\"inputAddons; context: { $implicit: property }\" />\n </div>\n @if (!property.hasError && propertyModel.invalid) {\n <p class=\"help is-danger-light\">\n <span [innerHTML]=\"formatPropertyError(propertyModel.errors, property)\"></span>\n </p>\n }\n</ng-template>\n\n<ng-template #inputSelect let-property>\n <div class=\"field mb-0\" [class.has-addons]=\"hasAddons(property)\">\n <div class=\"control is-expanded\">\n <div\n class=\"select is-small is-fullwidth\"\n [class.is-danger]=\"(!property.changed && property.hasError) || isRequired(property)\"\n [class.is-warning]=\"!property.changed && property.hasWarning\">\n <select\n [(ngModel)]=\"property.value\"\n #propertyModel=\"ngModel\"\n [id]=\"property.id\"\n name=\"randomname\"\n [disabled]=\"!property.editable || property.schema?.internal\"\n (change)=\"propertyChanged($event.target.value, property)\">\n <option value=\"\">Select</option>\n @for (value of property.suggestions.values; track trackByIndex($index, value)) {\n <option [value]=\"value\">\n {{ value }}\n </option>\n }\n </select>\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"inputAddons; context: { $implicit: property }\" />\n </div>\n @if (!property.hasError && propertyModel.invalid) {\n <p class=\"help is-danger-light\">\n <span [innerHTML]=\"formatPropertyError(propertyModel.errors, property)\"></span>\n </p>\n }\n</ng-template>\n\n<ng-template #removeFieldAddon let-property>\n @if (!property.isRequired) {\n <div class=\"control\">\n <a\n class=\"button is-small\"\n title=\"Remove field\"\n [class.is-outlined]=\"!property.changed && (property.hasError || property.hasWarning)\"\n [class.is-danger]=\"!property.changed && property.hasError\"\n [class.is-warning]=\"!property.changed && property.hasWarning\"\n (click)=\"$event.stopPropagation(); propertyChanged(null, property)\">\n <he-svg-icon name=\"xmark\" />\n </a>\n </div>\n }\n</ng-template>\n\n<ng-template #inputAddons let-property>\n @if (property.editable) {\n @switch (property.schemaType) {\n @case (SchemaType.Cycle) {\n <ng-container *ngTemplateOutlet=\"cycleAddons; context: { $implicit: property }\" />\n }\n }\n @if (bibliographiesSearchKey(property)) {\n <div class=\"control\">\n <button class=\"button is-small\" title=\"Advanced Search\" (click)=\"bibliographiesSearchProperty.set(property)\">\n <he-svg-icon name=\"search\" />\n </button>\n </div>\n }\n <ng-container *ngTemplateOutlet=\"removeFieldAddon; context: { $implicit: property }\" />\n }\n\n @if (property.addPropertyEnabled) {\n <div class=\"control\">\n <a\n class=\"button is-small is-danger\"\n title=\"Add field\"\n (click)=\"$event.stopPropagation(); addMissingProperty(property)\">\n <he-svg-icon name=\"plus\" />\n <span class=\"pl-2\">Add</span>\n </a>\n </div>\n }\n @if (isRequired(property)) {\n <div class=\"control\">\n <label class=\"button is-small is-danger\" [for]=\"property.id\" ngbTooltip=\"This field is required\" placement=\"top\">\n <he-svg-icon name=\"exclamation-triangle\" />\n </label>\n </div>\n }\n @if (property.externalUrl?.url) {\n <div class=\"control\">\n <a\n class=\"button is-small\"\n [href]=\"property.externalUrl.url + (property.externalUrl.urlParamValue ? property.value : '')\"\n target=\"_blank\"\n [title]=\"property.externalUrl.title\"\n [ngClass]=\"{ 'is-info': property.key === 'type' }\"\n [attr.disabled]=\"property.externalUrl.urlParamValue && !property.value ? true : null\">\n <he-svg-icon [name]=\"property.externalUrl.icon || 'external-link'\" class=\"ml-2\" />\n </a>\n </div>\n }\n</ng-template>\n\n<ng-template #cycleAddons let-property>\n @if (property.key === 'cycleDuration') {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n title=\"Calculate value from startDate and endDate\"\n (click)=\"calculateCycleDuration(property)\"\n [disabled]=\"!calculateCycleDurationEnabled(property)\">\n <he-svg-icon name=\"calculator\" />\n </button>\n </div>\n }\n @if (property.key === 'startDate') {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n title=\"Calculate value from endDate and cycleDuration\"\n (click)=\"calculateCycleStartDate(property)\"\n [disabled]=\"!calculateCycleStartDateEnabled(property)\">\n <he-svg-icon name=\"calculator\" />\n </button>\n </div>\n }\n</ng-template>\n\n<ng-template #showNewProperty let-property>\n @if (property.editable && property.addPropertyEnabled) {\n <header class=\"card-header\">\n <form class=\"py-3 px-4 is-flex-grow-1\" (submit)=\"addProperty(property)\" novalidate>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-small\">\n <label class=\"label\" [for]=\"property.id + '_new'\">\n <span>Add new field</span>\n </label>\n </div>\n <div class=\"field-body\">\n <div class=\"field has-addons\">\n <div class=\"control is-expanded\">\n <input\n class=\"input is-small\"\n [(ngModel)]=\"property.newProperty\"\n [id]=\"property.id + '_new'\"\n name=\"randomname\"\n placeholder=\"Search and select field from results\"\n [ngbTypeahead]=\"property | applyPure: suggestNewProperty\"\n [resultTemplate]=\"suggestion\"\n [inputFormatter]=\"formatNewProperty\"\n [focusFirst]=\"false\"\n [editable]=\"false\"\n (focus)=\"typeaheadFocus($event)\" />\n </div>\n <div class=\"control\">\n <button\n class=\"button is-small\"\n type=\"submit\"\n [disabled]=\"!property.newProperty || !property.newProperty.name\">\n <he-svg-icon name=\"plus\" />\n <span class=\"pl-2\">Add</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n </form>\n </header>\n } @else {\n <div class=\"pt-1\"></div>\n }\n</ng-template>\n\n<ng-template #propertyError let-property=\"property\">\n @if (property.error) {\n <p class=\"help\" [class.is-danger]=\"property.hasError\" [class.is-warning]=\"property.hasWarning\">\n <span class=\"is-pre-wrap\" [innerHTML]=\"property.error.message\"></span>\n @if (errorGuidePrefix() && property.errorGuidePageId) {\n <he-guide-overlay [pageId]=\"errorGuidePrefix() + property.errorGuidePageId\" />\n }\n </p>\n }\n</ng-template>\n\n<ng-template #suggestion let-r=\"result\" let-t=\"term\">\n <ngb-highlight\n [title]=\"r.bibliography?.title || r.bibliography?.documentDOI || r.bibliography?.scopus || r.name\"\n [result]=\"r.bibliography?.title || r.bibliography?.documentDOI || r.bibliography?.scopus || r.name\"\n [term]=\"t\" />\n</ng-template>\n", styles: [".panel.is-default .panel-heading{background-color:#f5f5f5;color:#363636}.card-toggle{left:0;position:absolute;top:0}@media screen and (max-width:767px){.card-toggle{position:relative}}.card{overflow:visible}.card .card{box-shadow:2px 2px #36363652,0 0 0 1px #36363652}.card .card>.card-header{box-shadow:0 2px 1px #36363652}.property-key span:first-child{width:calc(100% - 20px)}.property-array-number{left:-4px;position:absolute;top:-12px}.property-array-number .tag.is-delete{border:1px solid rgba(53.55,53.55,53.55,.32)}.control>.button{height:100%}.is-danger-light{color:#ff0514}he-sites-maps{height:200px}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { 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"] }, { 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: NgbHighlight, selector: "ngb-highlight", inputs: ["highlightClass", "result", "term", "accentSensitive"] }, { kind: "pipe", type: ApplyPurePipe, name: "applyPure" }, { kind: "pipe", type: PluralizePipe, name: "pluralize" }, { kind: "component", type: NodeIconComponent, selector: "he-node-icon", inputs: ["type", "size"] }, { kind: "component", type: BibliographiesSearchConfirmComponent, selector: "he-bibliographies-search-confirm", inputs: ["search", "searchSources", "searchBibliographies", "searchBy"], outputs: ["searchChange", "searchSourcesChange", "searchBibliographiesChange", "searchByChange", "closed"] }, { kind: "component", type: SchemaInfoComponent, selector: "he-schema-info", inputs: ["type", "field", "content", "placement", "triggers", "container"] }, { kind: "component", type: SchemaVersionLinkComponent, selector: "he-schema-version-link", inputs: ["node", "showExternalLink", "linkClass"] }, { kind: "component", type: PopoverConfirmComponent, selector: "he-popover-confirm", inputs: ["message", "content", "position", "popoverClass"], outputs: ["confirmed"] }, { kind: "component", type: NodeRecommendationsComponent, selector: "he-node-recommendations", inputs: ["node", "nodeField", "buttonClass"], outputs: ["selectRecommendation"] }, { kind: "directive", type: TagsInputDirective, selector: "[appTagsInput]", inputs: ["appTagsInput"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }, { kind: "component", type: GuideOverlayComponent, selector: "he-guide-overlay", inputs: ["pageId", "width", "height", "positions"], outputs: ["widthChange", "heightChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
10786
10778
|
}
|
|
10787
10779
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: FilesFormEditableComponent, decorators: [{
|
|
10788
10780
|
type: Component$1,
|
|
@@ -10950,7 +10942,7 @@ class FilesUploadErrorsComponent {
|
|
|
10950
10942
|
return value !== firstVal;
|
|
10951
10943
|
}
|
|
10952
10944
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: FilesUploadErrorsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10953
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: FilesUploadErrorsComponent, isStandalone: true, selector: "he-files-upload-errors", inputs: { error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: true, transformFunction: null }, file: { classPropertyName: "file", publicName: "file", isSignal: true, isRequired: false, transformFunction: null }, debug: { classPropertyName: "debug", publicName: "debug", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (error()) {\n <div class=\"is-flex is-flex-direction-column is-gap-8 has-text-danger\">\n @switch (message()) {\n @case (ErrorKeys.PrivacyNotAllowed) {\n <div>\n <span>\n Uploading data with\n <code class=\"is-px-1\">dataPrivate={{ error().value }}</code>\n is not allowed.\n </span>\n <span class=\"is-pl-1\">\n Please try uploading with\n <code class=\"is-px-1\">dataPrivate={{ !error().value }}</code>\n instead.\n </span>\n </div>\n }\n @case (ErrorKeys.InvalidJSON) {\n <div>\n <p>The uploaded content does not appear to contain valid JSON data:</p>\n <div class=\"is-my-2\">\n <pre><code>{{error().error}}</code></pre>\n </div>\n <p>\n Please validate your JSON content before uploading it using an\n <a href=\"https://jsoneditoronline.org\" target=\"_blank\">online tool</a>\n for example.\n </p>\n </div>\n }\n @case (ErrorKeys.NoData) {\n <div>\n <p>No Nodes could be found in your Upload. Please verify the column headers match the HESTIA schema.</p>\n <ng-container *ngTemplateOutlet=\"defaultError\" />\n </div>\n }\n @case (ErrorKeys.SetValueError) {\n <div class=\"notification is-danger\" role=\"alert\">\n <p>\n <he-svg-icon name=\"exclamation-triangle\" />\n <span>\n We could not convert the data in your Upload. This can be due to setting 2 different formats in the same\n field.\n </span>\n <span class=\"px-1\">Please refer to the</span>\n <a [href]=\"schemaUrl()\" target=\"_blank\">schema</a>\n <span class=\"pl-1\">and then correct the column headers indicated below.</span>\n </p>\n <ng-container *ngTemplateOutlet=\"defaultError\" />\n </div>\n <div>\n <pre><code>{{error().key}}</code></pre>\n </div>\n }\n @case (SchemaErrorKeys.PropertyNotFound) {\n <div class=\"notification is-danger\" role=\"alert\">\n <p>\n <he-svg-icon name=\"exclamation-triangle\" />\n <span class=\"is-pl-2\">You have column headers that do not match the HESTIA schema.</span>\n <span class=\"px-1\">Please refer to the</span>\n <a [href]=\"schemaUrl()\" target=\"_blank\">schema</a>\n <span class=\"pl-1\">and then correct the column headers indicated below.</span>\n </p>\n <ng-container *ngTemplateOutlet=\"defaultError\" />\n </div>\n <div>\n <pre><code>{{error().key}}</code></pre>\n </div>\n }\n @case (SchemaErrorKeys.PropertyInvalidFormat) {\n <div>\n <div>\n <span>\n The following value in the column\n <i>{{ error().key }}</i>\n is not in the correct format:\n </span>\n <br />\n <pre class=\"is-mt-2\"><code>{{stringify(error().value)}}</code></pre>\n </div>\n @switch (hasNumberWithCommasError()) {\n @case (true) {\n <p class=\"is-mt-2\">\n Please format your numbers to remove commas and use a decimal point to separate the whole part of the\n number from the fractional part of the number.\n </p>\n <p class=\"is-mt-2 has-text-danger has-text-underline\">Incorrect:</p>\n <pre class=\"is-mt-2\"><code>3,510.1</code></pre>\n <p class=\"is-mt-2 has-text-success has-text-underline\">Correct:</p>\n <pre class=\"is-mt-2\"><code>3510.1</code></pre>\n }\n @case (false) {\n <ng-container *ngTemplateOutlet=\"schemaError\" />\n <p>The error could either be a value in the column, or an error with the column header.</p>\n <p>\n If you are trying to set no data, we accept either\n <code>-</code>\n or an empty cell.\n </p>\n }\n }\n </div>\n }\n @case (ErrorKeys.PropertyRequired) {\n <div>\n <div>\n <span class=\"pr-1\">The following field is required in the</span>\n @if (error().schema) {\n <a class=\"pr-1\" [href]=\"schemaUrl()\" target=\"_blank\">{{ error().schema }}</a>\n }\n <span>schema:</span>\n <br />\n <pre class=\"is-mt-2\"><code>{{error().property}}</code></pre>\n </div>\n <p>\n @switch (error().property) {\n @case ('id') {\n <span>\n You must assign a unique\n <code>id</code>\n for every record in your data.\n </span>\n }\n @case ('type') {\n <span>\n Every record in your data must contain a\n <code>type</code>\n .\n </span>\n }\n }\n </p>\n </div>\n }\n @case (ErrorKeys.PropertyInternal) {\n <div>\n <div>\n <span class=\"pr-1\">\n The following field is\n <code>internal</code>\n in the\n </span>\n <a [href]=\"schemaKeyUrl()\" target=\"_blank\">{{ error().schema }} schema</a>\n <span>:</span>\n <br />\n <pre class=\"is-mt-2\"><code>{{error().schemaKey || error().key}}</code></pre>\n </div>\n <p>\n You cannot upload\n <code>internal</code>\n fields to HESTIA.\n </p>\n </div>\n }\n @case (SchemaErrorKeys.SchemaNotFound) {\n <div>\n @if (error().key) {\n <div>\n <span>The following Node does not exist in the schema:</span>\n <br />\n <pre class=\"is-mt-2\"><code>{{error().key}}</code></pre>\n </div>\n } @else if (error().schema) {\n <div>\n <span>The following Node Type does not exist in the schema or can not be uploaded directly:</span>\n <br />\n <pre class=\"is-mt-2\"><code>{{error().schema}}</code></pre>\n </div>\n }\n <p>\n <span>The list of accepted values is:</span>\n </p>\n <div class=\"content\">\n <ul>\n @for (type of nodeTypes; track type) {\n <li>\n <i>{{ type }}</i>\n </li>\n }\n </ul>\n </div>\n </div>\n }\n @case (ErrorKeys.InvalidFirstColumn) {\n <div>\n <span>\n No data in the HESTIA format was detected on the first sheet. Either try selecting a different sheet in the\n upload screen, or check the sheet to ensure the headers follow the schema - see examples\n </span>\n <a class=\"pl-1\" href=\"/guide/guide-file-upload-examples\" target=\"_blank\">here</a>\n </div>\n }\n @case (ErrorKeys.InvalidExcelFile) {\n <div>\n This file has been uploaded with a\n <code>{{ fileExt() }}</code>\n extension, but does not appear to be a valid Excel file.\n </div>\n }\n @case (ErrorKeys.NoHeaders) {\n <div>\n <p>\n No headers matching the HESTIA schema were found on the first row. Please remove all empty rows at the\n begining of the file and try uploading again.\n </p>\n <ng-container *ngTemplateOutlet=\"defaultError\" />\n </div>\n }\n @case (ErrorKeys.InvalidSheetName) {\n <div>\n <div>\n <span class=\"pr-1\">The Excel sheet</span>\n <code>{{ error().value }}</code>\n <span class=\"pl-1\">does not exist.</span>\n <span class=\"pl-1\">Your Excel file contains the following sheets:</span>\n <ul class=\"mt-1 content is-list-style-disc pl-5\">\n @for (e of error().error.split(';'); track e) {\n <li>\n <code>{{ e }}</code>\n </li>\n }\n </ul>\n </div>\n <p>\n <span>Please re-upload selecting one of the sheets above.</span>\n </p>\n </div>\n }\n @case (ErrorKeys.DuplicatedHeaders) {\n <div>\n <span>Your upload contains duplicated column headers.</span>\n </div>\n }\n @case (ErrorKeys.DuplicatedIds) {\n <div>\n <div>\n <span class=\"is-pr-1\">You have multiple</span>\n <code>{{ error().schema | pluralize }}</code>\n <span class=\"is-px-1\">with the same</span>\n <a [href]=\"schemaKeyUrl()\" target=\"_blank\">{{ error().schemaKey }}</a>\n <span class=\"is-px-1\">but different data. The</span>\n <a [href]=\"schemaKeyUrl()\" target=\"_blank\">{{ error().schemaKey }}</a>\n <span class=\"is-pl-1\">is:</span>\n <br />\n <pre class=\"is-mt-2\"><code>{{error().value}}</code></pre>\n </div>\n <p class=\"is-mt-2 is-italic\">\n <span class=\"is-pr-1\">Please note that ussing different case does not make the</span>\n <a [href]=\"schemaKeyUrl()\" target=\"_blank\">{{ error().schemaKey }}</a>\n <span class=\"is-pl-1\">unique.</span>\n </p>\n </div>\n }\n @case (SchemaErrorKeys.DuplicatedIdFields) {\n <div>\n <span class=\"is-pr-1\">You have used both the</span>\n <code>@id</code>\n <span class=\"is-px-1\">and</span>\n <code>id</code>\n <span class=\"is-px-1\">fields in the same data. Please use</span>\n <code>@id</code>\n <span class=\"is-px-1\">when linking to existing nodes on the Platform, and</span>\n <code>id</code>\n <span class=\"is-px-1\">when linking to nodes you are uploading in this file using the same</span>\n <code>id</code>\n <span class=\"is-px-1\">field.</span>\n </div>\n }\n @case (ErrorKeys.NestedHeaders) {\n <div>\n <p>\n To link nodes together, you first need to define the node (e.g.,\n <code>source.id</code>\n ,\n <code>source.bibliography.title</code>\n ) and then create the link (e.g.,\n <code>cycle.defaultSource.id</code>\n ). We do not allow nesting (e.g.,\n <code>cycle.defaultSource.bibliography.title</code>\n ).\n </p>\n </div>\n }\n @case (ErrorKeys.NestedNodes) {\n <div>\n <p>To link nodes together, you need to upload each node separately, as we do not allow nesting:</p>\n <pre class=\"is-mt-2\"><code>{{ sampleLinkedNodes | json }}</code></pre>\n </div>\n }\n @case (ErrorKeys.ReferenceExistingHeaders) {\n <div>\n <p>\n You have used the internal\n <code>@id</code>\n field to upload a new Node.\n </p>\n <p>\n The\n <code>@id</code>\n field should only be used to reference existing Node or Terms. Example:\n </p>\n <p class=\"is-mt-2 has-text-danger has-text-underline\">Incorrect:</p>\n <pre class=\"is-mt-2\"><code>cycle.@id,cycle.inputs.0.term.@id,source.id</code></pre>\n <p class=\"is-mt-2 has-text-success has-text-underline\">Correct:</p>\n <pre class=\"is-mt-2\"><code>cycle.id,cycle.inputs.0.term.@id,source.id</code></pre>\n </div>\n }\n @case (ErrorKeys.InvalidBlankNodeHeaders) {\n <div>\n <p>Evry blank node must be followed by a number, e.g.:</p>\n <p class=\"is-mt-2 has-text-danger has-text-underline\">Incorrect:</p>\n <pre class=\"is-mt-2\"><code>cycle.inputs.term.name</code></pre>\n <p class=\"is-mt-2 has-text-success has-text-underline\">Correct:</p>\n <pre class=\"is-mt-2\"><code>cycle.inputs.0.term.name</code></pre>\n </div>\n }\n @case (ErrorKeys.MultipleTermHeaders) {\n <div>\n <p>\n You are using both\n <code>@id</code>\n (or\n <code>id</code>\n ) and\n <code>name</code>\n fields to upload an existing Node (e.g., a Term).\n </p>\n <p>\n Using both fields can lead to inconsistencies, if you are not uploading the correct value in either one.\n Instead, you should only use one of them:\n </p>\n <p class=\"is-mt-2 has-text-danger has-text-underline\">Incorrect:</p>\n <pre class=\"is-mt-2\"><code>cycle.inputs.0.term.@id,cycle.inputs.0.term.name</code></pre>\n <p class=\"is-mt-2 has-text-success has-text-underline\">Correct:</p>\n <pre class=\"is-mt-2\"><code>cycle.inputs.0.term.@id</code></pre>\n </div>\n }\n @case (SchemaErrorKeys.ObjectArrayInvalid) {\n <div>\n <p>The column header {{ error().key }} must use the array format. Examples:</p>\n <pre class=\"is-mt-2\"><code>{{ error().key + '.0.term.name' }}</code></pre>\n <pre class=\"is-mt-2\"><code>{{ error().key + '.0.value' }}</code></pre>\n <pre class=\"is-mt-2\"><code>{{ error().key + '.1.term.name' }}</code></pre>\n <pre class=\"is-mt-2\"><code>{{ error().key + '.1.value' }}</code></pre>\n <ng-container *ngTemplateOutlet=\"schemaError\" />\n </div>\n }\n @case (ErrorKeys.MaxSize) {\n <div>\n <span>The maximum file size limit is {{ maxFileSizeMb }}Mb (current file size: {{ error().value }}Mb).</span>\n <span class=\"pl-1\">Please re-upload these data in multiple files.</span>\n </div>\n }\n @case (ErrorKeys.MaxRows) {\n <div>\n <span>\n Your file has {{ error().value | number }} rows. This might be an error caused by adding some data at the\n bottom of a spreadsheet by accident: delete any unused rows and resubmit the file.\n </span>\n </div>\n }\n @case (ErrorKeys.Mendeley) {\n <div>\n <p>An error occured while fetching the bibliographic information. Please try re-uploading the file.</p>\n <ng-container *ngTemplateOutlet=\"reportError\" />\n </div>\n }\n @case (ErrorKeys.Timeout) {\n <div>\n <p>Time exceeded for current step.</p>\n\n @if (debug()) {\n <span>You can try to \"Re-index\" or \"Re-upload\" if it still does not work.</span>\n }\n\n <ng-container *ngTemplateOutlet=\"reportError\" />\n </div>\n }\n @default {\n <div>\n <p>{{ message() }}</p>\n\n @if (debug()) {\n <pre><code>{{ error() | json }}</code></pre>\n }\n\n <ng-container *ngTemplateOutlet=\"reportError\" />\n </div>\n }\n }\n\n @if (hasGeoJSONError()) {\n <div>\n <p>If the GeoJSON is too large, please try to simplify it following these steps:</p>\n <ul class=\"is-my-1 content is-list-style-decimal pl-5\">\n <li>\n <span class=\"is-pr-1\">Go to</span>\n <a href=\"https://mapshaper.org/\" target=\"_blank\">https://mapshaper.org/</a>\n </li>\n <li>\n <span>\n Save the boundary in a valid\n <code>.geojson</code>\n file.\n </span>\n </li>\n <li>\n <span>Import it on mapshaper.</span>\n </li>\n <li>\n <span>Click \"Simplify\" in the top right corner in the menu bar.</span>\n </li>\n <li>\n <span>Adjust the percentage to a lower value, like 50% to start with.</span>\n </li>\n <li>\n <span>\n Export to\n <code>GeoJson</code>\n or\n <code>CSV</code>\n .\n </span>\n </li>\n <li>\n <span>Copy the resulting content into your upload file.</span>\n </li>\n </ul>\n <p>If you encounter the error again, try again using a lower percentage at step 5.</p>\n </div>\n }\n\n @if (columns().length || (error().index && !isSchemaError())) {\n <div>\n <b>Hint:</b>\n <span class=\"pl-1\">the error might be located</span>\n @if (error().index && !isSchemaError()) {\n <span class=\"pl-1\">on row {{ error().index }}</span>\n }\n @if (columns().length) {\n <span class=\"pl-1\">in {{ 'column' | pluralize: columns().length }}:</span>\n <ul class=\"mt-1 content is-list-style-disc pl-5\">\n @for (column of columns(); track column) {\n <li>\n <b class=\"pr-2\">{{ column.column }}</b>\n <code>{{ column.name }}</code>\n </li>\n }\n </ul>\n }\n </div>\n }\n\n @if (error().suggestions?.length) {\n <div>\n <b>Suggestions:</b>\n <span class=\"pl-1\">did you mean instead:</span>\n <ul class=\"mt-1 content is-list-style-disc pl-5\">\n @for (suggestion of error().suggestions; track suggestion) {\n <li>\n <code>{{ suggestion }}</code>\n </li>\n }\n </ul>\n </div>\n }\n\n @if (showCsvPreview()) {\n <div>\n <b>\n Preview\n <sup>1</sup>\n :\n </b>\n <div class=\"table-container is-mt-2\">\n <table class=\"table is-bordered is-fullwidth is-hoverable is-narrow mb-0\">\n <thead>\n @if (error().index) {\n <th></th>\n }\n @for (header of headers(); track header) {\n <th>{{ header }}</th>\n }\n </thead>\n <tbody>\n @for (row of rows(); track row) {\n <tr>\n @if (error().index) {\n <td class=\"has-text-danger\">\n <span class=\"is-nowrap\">Row {{ error().index }}</span>\n </td>\n }\n @for (col of row; track col; let colIndex = $index) {\n <td>\n <span\n [class.has-text-danger]=\"\n message() === ErrorKeys.DuplicatedIds && hasDuplicatedError(col, colIndex)\n \">\n {{ col | ellipsis: 50 }}\n </span>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n <p class=\"is-size-7\">\n <i>1. The preview does not necessarily reflect the original Upload's order or content.</i>\n </p>\n </div>\n }\n\n @if (showJsonPreview()) {\n <div>\n <b>Preview:</b>\n <pre class=\"is-mt-2\"><code>{{stringify(error().node)}}</code></pre>\n </div>\n }\n </div>\n}\n\n<ng-template #defaultError>\n <p class=\"is-mt-2 has-text-black\">\n <span class=\"is-pr-1\">If you are still stuck, please see</span>\n <a [href]=\"baseUrl + '/guide/guide-file-upload-prepare-file'\" target=\"_blank\">the example uploads and videos</a>\n <span class=\"is-px-1\">\n or try using the Wizard to get the first few rows of data formatted correctly, or use the chat to ask for help.\n </span>\n </p>\n</ng-template>\n\n<ng-template #reportError>\n <p class=\"is-mt-2\">\n To report this error, please\n <a class=\"is-pl-1\" [href]=\"reportErrorUrl()\" target=\"_blank\">click here</a>\n .\n </p>\n</ng-template>\n\n<ng-template #schemaError>\n <p>\n <span class=\"pr-1\">You can see the accepted field type and some examples</span>\n <a [href]=\"schemaKeyUrl()\" target=\"_blank\">here</a>\n <span>.</span>\n </p>\n</ng-template>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation", "svgClass"] }, { kind: "pipe", type: DecimalPipe, name: "number" }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "pipe", type: EllipsisPipe, name: "ellipsis" }, { kind: "pipe", type: PluralizePipe, name: "pluralize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
10945
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: FilesUploadErrorsComponent, isStandalone: true, selector: "he-files-upload-errors", inputs: { error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: true, transformFunction: null }, file: { classPropertyName: "file", publicName: "file", isSignal: true, isRequired: false, transformFunction: null }, debug: { classPropertyName: "debug", publicName: "debug", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (error()) {\n <div class=\"is-flex is-flex-direction-column is-gap-8 has-text-danger\">\n @switch (message()) {\n @case (ErrorKeys.PrivacyNotAllowed) {\n <div>\n <span>\n Uploading data with\n <code class=\"is-px-1\">dataPrivate={{ error().value }}</code>\n is not allowed.\n </span>\n <span class=\"is-pl-1\">\n Please try uploading with\n <code class=\"is-px-1\">dataPrivate={{ !error().value }}</code>\n instead.\n </span>\n </div>\n }\n @case (ErrorKeys.InvalidJSON) {\n <div>\n <p>The uploaded content does not appear to contain valid JSON data:</p>\n <div class=\"is-my-2\">\n <pre><code>{{error().error}}</code></pre>\n </div>\n <p>\n Please validate your JSON content before uploading it using an\n <a href=\"https://jsoneditoronline.org\" target=\"_blank\">online tool</a>\n for example.\n </p>\n </div>\n }\n @case (ErrorKeys.NoData) {\n <div>\n <p>No Nodes could be found in your Upload. Please verify the column headers match the HESTIA schema.</p>\n <ng-container *ngTemplateOutlet=\"defaultError\" />\n </div>\n }\n @case (ErrorKeys.SetValueError) {\n <div class=\"notification is-danger\" role=\"alert\">\n <p>\n <he-svg-icon name=\"exclamation-triangle\" />\n <span>\n We could not convert the data in your Upload. This can be due to setting 2 different formats in the same\n field.\n </span>\n <span class=\"px-1\">Please refer to the</span>\n <a [href]=\"schemaUrl()\" target=\"_blank\">schema</a>\n <span class=\"pl-1\">and then correct the column headers indicated below.</span>\n </p>\n <ng-container *ngTemplateOutlet=\"defaultError\" />\n </div>\n <div>\n <pre><code>{{error().key}}</code></pre>\n </div>\n }\n @case (SchemaErrorKeys.PropertyNotFound) {\n <div class=\"notification is-danger\" role=\"alert\">\n <p>\n <he-svg-icon name=\"exclamation-triangle\" />\n <span class=\"is-pl-2\">You have column headers that do not match the HESTIA schema.</span>\n <span class=\"px-1\">Please refer to the</span>\n <a [href]=\"schemaUrl()\" target=\"_blank\">schema</a>\n <span class=\"pl-1\">and then correct the column headers indicated below.</span>\n </p>\n <ng-container *ngTemplateOutlet=\"defaultError\" />\n </div>\n <div>\n <pre><code>{{error().key}}</code></pre>\n </div>\n }\n @case (SchemaErrorKeys.PropertyInvalidFormat) {\n <div>\n <div>\n <span>\n The following value in the column\n <i>{{ error().key }}</i>\n is not in the correct format:\n </span>\n <br />\n <pre class=\"is-mt-2\"><code>{{stringify(error().value)}}</code></pre>\n </div>\n @switch (hasNumberWithCommasError()) {\n @case (true) {\n <p class=\"is-mt-2\">\n Please format your numbers to remove commas and use a decimal point to separate the whole part of the\n number from the fractional part of the number.\n </p>\n <p class=\"is-mt-2 has-text-danger has-text-underline\">Incorrect:</p>\n <pre class=\"is-mt-2\"><code>3,510.1</code></pre>\n <p class=\"is-mt-2 has-text-success has-text-underline\">Correct:</p>\n <pre class=\"is-mt-2\"><code>3510.1</code></pre>\n }\n @case (false) {\n <ng-container *ngTemplateOutlet=\"schemaError\" />\n <p>The error could either be a value in the column, or an error with the column header.</p>\n <p>\n If you are trying to set no data, we accept either\n <code>-</code>\n or an empty cell.\n </p>\n }\n }\n </div>\n }\n @case (ErrorKeys.PropertyRequired) {\n <div>\n <div>\n <span class=\"pr-1\">The following field is required in the</span>\n @if (error().schema) {\n <a class=\"pr-1\" [href]=\"schemaUrl()\" target=\"_blank\">{{ error().schema }}</a>\n }\n <span>schema:</span>\n <br />\n <pre class=\"is-mt-2\"><code>{{error().property}}</code></pre>\n </div>\n <p>\n @switch (error().property) {\n @case ('id') {\n <span>\n You must assign a unique\n <code>id</code>\n for every record in your data.\n </span>\n }\n @case ('type') {\n <span>\n Every record in your data must contain a\n <code>type</code>\n .\n </span>\n }\n }\n </p>\n </div>\n }\n @case (ErrorKeys.PropertyInternal) {\n <div>\n <div>\n <span class=\"pr-1\">\n The following field is\n <code>internal</code>\n in the\n </span>\n <a [href]=\"schemaKeyUrl()\" target=\"_blank\">{{ error().schema }} schema</a>\n <span>:</span>\n <br />\n <pre class=\"is-mt-2\"><code>{{error().schemaKey || error().key}}</code></pre>\n </div>\n <p>\n You cannot upload\n <code>internal</code>\n fields to HESTIA.\n </p>\n </div>\n }\n @case (SchemaErrorKeys.SchemaNotFound) {\n <div>\n @if (error().key) {\n <div>\n <span>The following Node does not exist in the schema:</span>\n <br />\n <pre class=\"is-mt-2\"><code>{{error().key}}</code></pre>\n </div>\n } @else if (error().schema) {\n <div>\n <span>The following Node Type does not exist in the schema or can not be uploaded directly:</span>\n <br />\n <pre class=\"is-mt-2\"><code>{{error().schema}}</code></pre>\n </div>\n }\n <p>\n <span>The list of accepted values is:</span>\n </p>\n <div class=\"content\">\n <ul>\n @for (type of nodeTypes; track type) {\n <li>\n <i>{{ type }}</i>\n </li>\n }\n </ul>\n </div>\n </div>\n }\n @case (ErrorKeys.InvalidFirstColumn) {\n <div>\n <span>\n No data in the HESTIA format was detected on the first sheet. Either try selecting a different sheet in the\n upload screen, or check the sheet to ensure the headers follow the schema - see examples\n </span>\n <a class=\"pl-1\" href=\"/guide/guide-file-upload-examples\" target=\"_blank\">here</a>\n </div>\n }\n @case (ErrorKeys.InvalidExcelFile) {\n <div>\n This file has been uploaded with a\n <code>{{ fileExt() }}</code>\n extension, but does not appear to be a valid Excel file.\n </div>\n }\n @case (ErrorKeys.NoHeaders) {\n <div>\n <p>\n No headers matching the HESTIA schema were found on the first row. Please remove all empty rows at the\n begining of the file and try uploading again.\n </p>\n <ng-container *ngTemplateOutlet=\"defaultError\" />\n </div>\n }\n @case (ErrorKeys.InvalidSheetName) {\n <div>\n <div>\n <span class=\"pr-1\">The Excel sheet</span>\n <code>{{ error().value }}</code>\n <span class=\"pl-1\">does not exist.</span>\n <span class=\"pl-1\">Your Excel file contains the following sheets:</span>\n <ul class=\"mt-1 content is-list-style-disc pl-5\">\n @for (e of error().error.split(';'); track e) {\n <li>\n <code>{{ e }}</code>\n </li>\n }\n </ul>\n </div>\n <p>\n <span>Please re-upload selecting one of the sheets above.</span>\n </p>\n </div>\n }\n @case (ErrorKeys.DuplicatedHeaders) {\n <div>\n <span>Your upload contains duplicated column headers.</span>\n </div>\n }\n @case (ErrorKeys.DuplicatedIds) {\n <div>\n <div>\n <span class=\"is-pr-1\">You have multiple</span>\n <code>{{ error().schema | pluralize }}</code>\n <span class=\"is-px-1\">with the same</span>\n <a [href]=\"schemaKeyUrl()\" target=\"_blank\">{{ error().schemaKey }}</a>\n <span class=\"is-px-1\">but different data. The</span>\n <a [href]=\"schemaKeyUrl()\" target=\"_blank\">{{ error().schemaKey }}</a>\n <span class=\"is-pl-1\">is:</span>\n <br />\n <pre class=\"is-mt-2\"><code>{{error().value}}</code></pre>\n </div>\n <p class=\"is-mt-2 is-italic\">\n <span class=\"is-pr-1\">Please note that ussing different case does not make the</span>\n <a [href]=\"schemaKeyUrl()\" target=\"_blank\">{{ error().schemaKey }}</a>\n <span class=\"is-pl-1\">unique.</span>\n </p>\n </div>\n }\n @case (SchemaErrorKeys.DuplicatedIdFields) {\n <div>\n <span class=\"is-pr-1\">You have used both the</span>\n <code>@id</code>\n <span class=\"is-px-1\">and</span>\n <code>id</code>\n <span class=\"is-px-1\">fields in the same data. Please use</span>\n <code>@id</code>\n <span class=\"is-px-1\">when linking to existing nodes on the Platform, and</span>\n <code>id</code>\n <span class=\"is-px-1\">when linking to nodes you are uploading in this file using the same</span>\n <code>id</code>\n <span class=\"is-px-1\">field.</span>\n </div>\n }\n @case (ErrorKeys.NestedHeaders) {\n <div>\n <p>\n To link nodes together, you first need to define the node (e.g.,\n <code>source.id</code>\n ,\n <code>source.bibliography.title</code>\n ) and then create the link (e.g.,\n <code>cycle.defaultSource.id</code>\n ). We do not allow nesting (e.g.,\n <code>cycle.defaultSource.bibliography.title</code>\n ).\n </p>\n </div>\n }\n @case (ErrorKeys.NestedNodes) {\n <div>\n <p>To link nodes together, you need to upload each node separately, as we do not allow nesting:</p>\n <pre class=\"is-mt-2\"><code>{{ sampleLinkedNodes | json }}</code></pre>\n </div>\n }\n @case (ErrorKeys.ReferenceExistingHeaders) {\n <div>\n <p>\n You have used the internal\n <code>@id</code>\n field to upload a new Node.\n </p>\n <p>\n The\n <code>@id</code>\n field should only be used to reference existing Node or Terms. Example:\n </p>\n <p class=\"is-mt-2 has-text-danger has-text-underline\">Incorrect:</p>\n <pre class=\"is-mt-2\"><code>cycle.@id,cycle.inputs.0.term.@id,source.id</code></pre>\n <p class=\"is-mt-2 has-text-success has-text-underline\">Correct:</p>\n <pre class=\"is-mt-2\"><code>cycle.id,cycle.inputs.0.term.@id,source.id</code></pre>\n </div>\n }\n @case (ErrorKeys.InvalidBlankNodeHeaders) {\n <div>\n <p>Evry blank node must be followed by a number, e.g.:</p>\n <p class=\"is-mt-2 has-text-danger has-text-underline\">Incorrect:</p>\n <pre class=\"is-mt-2\"><code>cycle.inputs.term.name</code></pre>\n <p class=\"is-mt-2 has-text-success has-text-underline\">Correct:</p>\n <pre class=\"is-mt-2\"><code>cycle.inputs.0.term.name</code></pre>\n </div>\n }\n @case (ErrorKeys.MultipleTermHeaders) {\n <div>\n <p>\n You are using both\n <code>@id</code>\n (or\n <code>id</code>\n ) and\n <code>name</code>\n fields to upload an existing Node (e.g., a Term).\n </p>\n <p>\n Using both fields can lead to inconsistencies, if you are not uploading the correct value in either one.\n Instead, you should only use one of them:\n </p>\n <p class=\"is-mt-2 has-text-danger has-text-underline\">Incorrect:</p>\n <pre class=\"is-mt-2\"><code>cycle.inputs.0.term.@id,cycle.inputs.0.term.name</code></pre>\n <p class=\"is-mt-2 has-text-success has-text-underline\">Correct:</p>\n <pre class=\"is-mt-2\"><code>cycle.inputs.0.term.@id</code></pre>\n </div>\n }\n @case (SchemaErrorKeys.ObjectArrayInvalid) {\n <div>\n <p>The column header {{ error().key }} must use the array format. Examples:</p>\n <pre class=\"is-mt-2\"><code>{{ error().key + '.0.term.name' }}</code></pre>\n <pre class=\"is-mt-2\"><code>{{ error().key + '.0.value' }}</code></pre>\n <pre class=\"is-mt-2\"><code>{{ error().key + '.1.term.name' }}</code></pre>\n <pre class=\"is-mt-2\"><code>{{ error().key + '.1.value' }}</code></pre>\n <ng-container *ngTemplateOutlet=\"schemaError\" />\n </div>\n }\n @case (ErrorKeys.MaxSize) {\n <div>\n <span>The maximum file size limit is {{ maxFileSizeMb }}Mb (current file size: {{ error().value }}Mb).</span>\n <span class=\"pl-1\">Please re-upload these data in multiple files.</span>\n </div>\n }\n @case (ErrorKeys.MaxRows) {\n <div>\n <span>\n Your file has {{ error().value | number }} rows. This might be an error caused by adding some data at the\n bottom of a spreadsheet by accident: delete any unused rows and resubmit the file.\n </span>\n </div>\n }\n @case (ErrorKeys.Mendeley) {\n <div>\n <p>An error occured while fetching the bibliographic information. Please try re-uploading the file.</p>\n <ng-container *ngTemplateOutlet=\"reportError\" />\n </div>\n }\n @case (ErrorKeys.Timeout) {\n <div>\n <p>Time exceeded for current step.</p>\n\n @if (debug()) {\n <span>You can try to \"Re-index\" or \"Re-upload\" if it still does not work.</span>\n }\n\n <ng-container *ngTemplateOutlet=\"reportError\" />\n </div>\n }\n @default {\n <div>\n <p>{{ message() }}</p>\n\n @if (debug()) {\n <pre><code>{{ error() | json }}</code></pre>\n }\n\n <ng-container *ngTemplateOutlet=\"reportError\" />\n </div>\n }\n }\n\n @if (hasGeoJSONError()) {\n <div>\n <p>If the GeoJSON is too large, please try to simplify it following these steps:</p>\n <ul class=\"is-my-1 content is-list-style-decimal pl-5\">\n <li>\n <span class=\"is-pr-1\">Go to</span>\n <a href=\"https://mapshaper.org/\" target=\"_blank\">https://mapshaper.org/</a>\n </li>\n <li>\n <span>\n Save the boundary in a valid\n <code>.geojson</code>\n file.\n </span>\n </li>\n <li>\n <span>Import it on mapshaper.</span>\n </li>\n <li>\n <span>Click \"Simplify\" in the top right corner in the menu bar.</span>\n </li>\n <li>\n <span>Adjust the percentage to a lower value, like 50% to start with.</span>\n </li>\n <li>\n <span>\n Export to\n <code>GeoJson</code>\n or\n <code>CSV</code>\n .\n </span>\n </li>\n <li>\n <span>Copy the resulting content into your upload file.</span>\n </li>\n </ul>\n <p>If you encounter the error again, try again using a lower percentage at step 5.</p>\n </div>\n }\n\n @if (columns().length || (error().index && !isSchemaError())) {\n <div>\n <b>Hint:</b>\n <span class=\"pl-1\">the error might be located</span>\n @if (error().index && !isSchemaError()) {\n <span class=\"pl-1\">on row {{ error().index }}</span>\n }\n @if (columns().length) {\n <span class=\"pl-1\">in {{ 'column' | pluralize: columns().length }}:</span>\n <ul class=\"mt-1 content is-list-style-disc pl-5\">\n @for (column of columns(); track column) {\n <li>\n <b class=\"pr-2\">{{ column.column }}</b>\n <code>{{ column.name }}</code>\n </li>\n }\n </ul>\n }\n </div>\n }\n\n @if (error().suggestions?.length) {\n <div>\n <b>Suggestions:</b>\n <span class=\"pl-1\">did you mean instead:</span>\n <ul class=\"mt-1 content is-list-style-disc pl-5\">\n @for (suggestion of error().suggestions; track suggestion) {\n <li>\n <code>{{ suggestion }}</code>\n </li>\n }\n </ul>\n </div>\n }\n\n @if (showCsvPreview()) {\n <div>\n <b>\n Preview\n <sup>1</sup>\n :\n </b>\n <div class=\"table-container is-mt-2\">\n <table class=\"table is-bordered is-fullwidth is-hoverable is-narrow mb-0\">\n <thead>\n @if (error().index) {\n <th></th>\n }\n @for (header of headers(); track header) {\n <th>{{ header }}</th>\n }\n </thead>\n <tbody>\n @for (row of rows(); track row) {\n <tr>\n @if (error().index) {\n <td class=\"has-text-danger\">\n <span class=\"is-nowrap\">Row {{ error().index }}</span>\n </td>\n }\n @for (col of row; track col; let colIndex = $index) {\n <td>\n <span\n [class.has-text-danger]=\"\n message() === ErrorKeys.DuplicatedIds && hasDuplicatedError(col, colIndex)\n \">\n {{ col | ellipsis: 50 }}\n </span>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n <p class=\"is-size-7\">\n <i>1. The preview does not necessarily reflect the original Upload's order or content.</i>\n </p>\n </div>\n }\n\n @if (showJsonPreview()) {\n <div>\n <b>Preview:</b>\n <pre class=\"is-mt-2\"><code>{{stringify(error().node)}}</code></pre>\n </div>\n }\n </div>\n}\n\n<ng-template #defaultError>\n <p class=\"is-mt-2 has-text-black\">\n <span class=\"is-pr-1\">If you are still stuck, please see</span>\n <a [href]=\"baseUrl + '/guide/guide-file-upload-prepare-file'\" target=\"_blank\">the example uploads and videos</a>\n <span class=\"is-px-1\">\n or try using the Wizard to get the first few rows of data formatted correctly, or use the chat to ask for help.\n </span>\n </p>\n</ng-template>\n\n<ng-template #reportError>\n <p class=\"is-mt-2\">\n To report this error, please\n <a class=\"is-pl-1\" [href]=\"reportErrorUrl()\" target=\"_blank\">click here</a>\n .\n </p>\n</ng-template>\n\n<ng-template #schemaError>\n <p>\n <span class=\"pr-1\">You can see the accepted field type and some examples</span>\n <a [href]=\"schemaKeyUrl()\" target=\"_blank\">here</a>\n <span>.</span>\n </p>\n</ng-template>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }, { kind: "pipe", type: DecimalPipe, name: "number" }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "pipe", type: EllipsisPipe, name: "ellipsis" }, { kind: "pipe", type: PluralizePipe, name: "pluralize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
10954
10946
|
}
|
|
10955
10947
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: FilesUploadErrorsComponent, decorators: [{
|
|
10956
10948
|
type: Component$1,
|
|
@@ -11021,7 +11013,7 @@ class FilesErrorSummaryItemComponent {
|
|
|
11021
11013
|
this.maxLength.set(Math.max(minimumMaxLength, width / 3));
|
|
11022
11014
|
}
|
|
11023
11015
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: FilesErrorSummaryItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11024
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: FilesErrorSummaryItemComponent, isStandalone: true, selector: "he-files-error-summary-item", inputs: { summary: { classPropertyName: "summary", publicName: "summary", isSignal: true, isRequired: true, transformFunction: null }, resolved: { classPropertyName: "resolved", publicName: "resolved", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { resolved: "resolvedChange" }, ngImport: i0, template: "<div class=\"is-flex is-justify-content-center is-align-items-center is-align-self-stretch is-gap-8 is-mb-2\">\n <div class=\"is-flex is-flex-grow-1 | errors-path border-right\">\n <span class=\"has-text-weight-bold\">{{ summary().path || '-' }}</span>\n </div>\n\n <div class=\"is-flex is-align-items-center is-gap-4 | errors-count\">\n <div\n class=\"is-flex is-justify-content-center is-align-items-center has-background-{{\n errorColor()\n }} | errors-count--number\">\n <span class=\"has-text-weight-bold has-text-white\">{{ summary().count }}</span>\n </div>\n <span class=\"has-text-{{ errorColor() }} is-capitalized\">\n {{ summary().level | pluralize: summary().count }}\n </span>\n </div>\n</div>\n\n<div class=\"py-2 w-100 border-y\">\n @if (summary().terms) {\n <p class=\"is-size-7\">\n <span class=\"is-pr-1 has-text-weight-bold\">Terms:</span>\n <span [innerHtml]=\"summary().terms\"></span>\n </p>\n }\n\n @if (hasAutoGeneratedNodes()) {\n <p class=\"is-size-7 has-text-info\">\n <span>Some nodes are auto-generated and the {{ summary().level }} might come from other nodes</span>\n </p>\n }\n\n <p class=\"is-italic has-text-weight-semilight has-text-grey-dark\" (resized)=\"onResized($event)\">\n <span [innerHTML]=\"message() | ellipsis: textMaxLength()\"></span>\n @if (showMoreButton()) {\n <a class=\"has-text-weight-semibold\" (click)=\"$event.stopPropagation(); showMore.set(!showMore())\">\n @if (showMore()) {\n less\n } @else {\n more\n }\n </a>\n }\n </p>\n</div>\n<div class=\"px-1 py-3 w-100\">\n <div class=\"is-flex is-align-items-center is-gap-8 | resolved-actions\">\n <p class=\"has-text-weight-bold is-size-7\">Resolved?</p>\n\n <a\n (click)=\"$event.stopPropagation(); resolved.set(false)\"\n class=\"resolved-actions--unresolve\"\n [class.is-resolved]=\"resolved()\">\n <he-svg-icon name=\"xmark-circle\" />\n </a>\n\n <a\n (click)=\"$event.stopPropagation(); resolved.set(true)\"\n class=\"resolved-actions--resolve\"\n [class.is-resolved]=\"resolved()\">\n <he-svg-icon name=\"checkmark-circle\" />\n </a>\n </div>\n</div>\n", styles: [":host{--summary-files-border-edge: 1px solid #f5f5f5}:host .border-top{border-top:var(--summary-files-border-edge)}:host .border-bottom{border-bottom:var(--summary-files-border-edge)}:host .border-right{border-right:var(--summary-files-border-edge)}:host .border-x{border-left:var(--summary-files-border-edge);border-right:var(--summary-files-border-edge)}:host .border-y{border-bottom:var(--summary-files-border-edge);border-top:var(--summary-files-border-edge)}p,span{word-break:break-word}.errors-path{color:#4c7194}.errors-count{width:110px}.errors-count--number{line-height:1.3;border-radius:1px;padding:1px 5px}.resolved-actions--resolve{color:#b5b5b5}.resolved-actions--resolve.is-resolved,.resolved-actions--resolve:hover{color:#48c78e}.resolved-actions--unresolve{color:#b5b5b5}.resolved-actions--unresolve:not(.is-resolved),.resolved-actions--unresolve:hover{color:#ff3844}\n"], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
11016
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: FilesErrorSummaryItemComponent, isStandalone: true, selector: "he-files-error-summary-item", inputs: { summary: { classPropertyName: "summary", publicName: "summary", isSignal: true, isRequired: true, transformFunction: null }, resolved: { classPropertyName: "resolved", publicName: "resolved", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { resolved: "resolvedChange" }, ngImport: i0, template: "<div class=\"is-flex is-justify-content-center is-align-items-center is-align-self-stretch is-gap-8 is-mb-2\">\n <div class=\"is-flex is-flex-grow-1 | errors-path border-right\">\n <span class=\"has-text-weight-bold\">{{ summary().path || '-' }}</span>\n </div>\n\n <div class=\"is-flex is-align-items-center is-gap-4 | errors-count\">\n <div\n class=\"is-flex is-justify-content-center is-align-items-center has-background-{{\n errorColor()\n }} | errors-count--number\">\n <span class=\"has-text-weight-bold has-text-white\">{{ summary().count }}</span>\n </div>\n <span class=\"has-text-{{ errorColor() }} is-capitalized\">\n {{ summary().level | pluralize: summary().count }}\n </span>\n </div>\n</div>\n\n<div class=\"py-2 w-100 border-y\">\n @if (summary().terms) {\n <p class=\"is-size-7\">\n <span class=\"is-pr-1 has-text-weight-bold\">Terms:</span>\n <span [innerHtml]=\"summary().terms\"></span>\n </p>\n }\n\n @if (hasAutoGeneratedNodes()) {\n <p class=\"is-size-7 has-text-info\">\n <span>Some nodes are auto-generated and the {{ summary().level }} might come from other nodes</span>\n </p>\n }\n\n <p class=\"is-italic has-text-weight-semilight has-text-grey-dark\" (resized)=\"onResized($event)\">\n <span [innerHTML]=\"message() | ellipsis: textMaxLength()\"></span>\n @if (showMoreButton()) {\n <a class=\"has-text-weight-semibold\" (click)=\"$event.stopPropagation(); showMore.set(!showMore())\">\n @if (showMore()) {\n less\n } @else {\n more\n }\n </a>\n }\n </p>\n</div>\n<div class=\"px-1 py-3 w-100\">\n <div class=\"is-flex is-align-items-center is-gap-8 | resolved-actions\">\n <p class=\"has-text-weight-bold is-size-7\">Resolved?</p>\n\n <a\n (click)=\"$event.stopPropagation(); resolved.set(false)\"\n class=\"resolved-actions--unresolve\"\n [class.is-resolved]=\"resolved()\">\n <he-svg-icon name=\"xmark-circle\" />\n </a>\n\n <a\n (click)=\"$event.stopPropagation(); resolved.set(true)\"\n class=\"resolved-actions--resolve\"\n [class.is-resolved]=\"resolved()\">\n <he-svg-icon name=\"checkmark-circle\" />\n </a>\n </div>\n</div>\n", styles: [":host{--summary-files-border-edge: 1px solid #f5f5f5}:host .border-top{border-top:var(--summary-files-border-edge)}:host .border-bottom{border-bottom:var(--summary-files-border-edge)}:host .border-right{border-right:var(--summary-files-border-edge)}:host .border-x{border-left:var(--summary-files-border-edge);border-right:var(--summary-files-border-edge)}:host .border-y{border-bottom:var(--summary-files-border-edge);border-top:var(--summary-files-border-edge)}p,span{word-break:break-word}.errors-path{color:#4c7194}.errors-count{width:110px}.errors-count--number{line-height:1.3;border-radius:1px;padding:1px 5px}.resolved-actions--resolve{color:#b5b5b5}.resolved-actions--resolve.is-resolved,.resolved-actions--resolve:hover{color:#48c78e}.resolved-actions--unresolve{color:#b5b5b5}.resolved-actions--unresolve:not(.is-resolved),.resolved-actions--unresolve:hover{color:#ff3844}\n"], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }, { kind: "pipe", type: EllipsisPipe, name: "ellipsis" }, { kind: "pipe", type: PluralizePipe, name: "pluralize" }, { kind: "directive", type: ResizedDirective, selector: "[resized]", outputs: ["resized"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
11025
11017
|
}
|
|
11026
11018
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: FilesErrorSummaryItemComponent, decorators: [{
|
|
11027
11019
|
type: Component$1,
|
|
@@ -11727,7 +11719,7 @@ class HierarchyChartComponent {
|
|
|
11727
11719
|
this.updateChart({ switchingSelection });
|
|
11728
11720
|
}
|
|
11729
11721
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: HierarchyChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11730
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: HierarchyChartComponent, isStandalone: true, selector: "he-hierarchy-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, terms: { classPropertyName: "terms", publicName: "terms", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { chartError: "chartError" }, viewQueries: [{ propertyName: "chartRef", first: true, predicate: ["chart"], descendants: true, isSignal: true }, { propertyName: "tooltipOperator", first: true, predicate: ["t"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"columns is-centered py-2 is-size-7 is-mobile is-multiline\">\n @for (legendItem of legend(); track legendItem.type) {\n <div class=\"column is-narrow py-0 is-flex-mobile is-flex-direction-column is-align-items-center | is-legend-item\">\n <span\n class=\"is-inline-block-tablet is-align-middle | key-colour\"\n [style.backgroundColor]=\"nodeColours[legendItem.type]\"></span>\n <strong class=\"has-text-black is-align-middle is-pl-tablet-2 is-size-8-mobile\">\n <span class=\"is-hidden-desktop\">{{ legendItem.mobileText }}</span>\n <span class=\"is-hidden-touch\">{{ legendItem.text }}</span>\n </strong>\n </div>\n }\n</div>\n\n<div class=\"chart-container is-relative w-100\">\n <svg class=\"w-100 h-100\" #chart></svg>\n\n <span\n class=\"is-hidden\"\n [ngbPopover]=\"tipContent\"\n triggers=\"manual\"\n placement=\"right left auto\"\n container=\"body\"\n #t=\"ngbPopover\"\n positionTarget=\".tip-target\"\n popoverClass=\"is-narrow driver-chart-tooltip\"\n [animation]=\"true\"></span>\n</div>\n\n<ng-template #tipContent let-tipData=\"tipData\">\n @if (tipData.hasWeightedValue) {\n <p>contribution: {{ tipData.weightedValueText }}</p>\n }\n @if (tipData.valueValueText) {\n <p>\n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.valueKeyHref\">value</a>\n <span class=\"is-pr-1\">:</span>\n <span>{{ tipData.valueValueText }}</span>\n @if (tipData.hasValue) {\n <a class=\"is-dark is-ml-2\" [href]=\"tipData.modelDocsHref\" target=\"_blank\">\n <span>Docs</span>\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n </a>\n }\n </p>\n }\n <p>\n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.modelKeyHref\">methodModel</a>\n <span class=\"is-pr-1\">:</span>\n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.modelValueHref\">{{ tipData.modelValue }}</a>\n </p>\n <p>\n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.termKeyHref\">terms</a>\n <span class=\"is-pr-1\">:</span>\n @for (term of tipData.terms; track term.text; let lastTerm = $last) {\n <a class=\"is-dark\" target=\"_blank\" [href]=\"term.href\">{{ term.text }}</a>\n @if (!lastTerm) {\n <span class=\"is-px-1\">;</span>\n }\n }\n </p>\n</ng-template>\n", styles: ["@media screen and (min-width:1216px){.is-legend-item{min-width:130px}}.key-colour{border-radius:2px;box-shadow:0 2px 3px #0000001a,inset 0 0 0 1px #0000001a;height:1.5em;width:1.5em;opacity:.7}svg{pointer-events:none}:host ::ng-deep .node-box{rx:10px;ry:10px;fill-opacity:0;stroke-opacity:.5;pointer-events:auto}:host ::ng-deep .node-open{stroke-width:3}:host ::ng-deep .node-openable{cursor:pointer;stroke-opacity:1;fill-opacity:.1}:host ::ng-deep .node-openable:hover{stroke-width:3}:host ::ng-deep .group-button{fill:#fff;cursor:pointer;pointer-events:auto;stroke-dasharray:2,5;stroke:#999;stroke-width:2}:host ::ng-deep .group-button:hover{fill:#0a0a0a}:host ::ng-deep .group-button:hover+text{fill:#fff}:host ::ng-deep .group-button-text{text-anchor:middle;alignment-baseline:central}:host ::ng-deep .group-border,:host ::ng-deep .group-line{stroke-dasharray:2,5;stroke:#999;stroke-width:2;fill:none}:host ::ng-deep .group-label{font-weight:700;fill:#696969;text-anchor:start;alignment-baseline:central}:host ::ng-deep .node-label{font-weight:700;fill:#0a0a0a;text-anchor:middle;alignment-baseline:central}:host ::ng-deep .node-label tspan{alignment-baseline:inherit}:host ::ng-deep .bar-label{font-weight:700;fill:#696969;alignment-baseline:central}:host ::ng-deep .sibling-mask{fill:#fafafa;fill-opacity:.8;stroke-opacity:.9;stroke:#fafafa;rx:10px;ry:10px;stroke-width:3;pointer-events:none}:host ::ng-deep .mask-openable{pointer-events:all}:host ::ng-deep .mask-openable:hover{fill:none;stroke:none}:host ::ng-deep .bar-background{fill:#d3d3d3;fill-opacity:.5}:host ::ng-deep .link-path{fill:none;stroke:#999}:host ::ng-deep .bar-foreground{fill-opacity:.5}\n"], dependencies: [{ 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: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
11722
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: HierarchyChartComponent, isStandalone: true, selector: "he-hierarchy-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, terms: { classPropertyName: "terms", publicName: "terms", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { chartError: "chartError" }, viewQueries: [{ propertyName: "chartRef", first: true, predicate: ["chart"], descendants: true, isSignal: true }, { propertyName: "tooltipOperator", first: true, predicate: ["t"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"columns is-centered py-2 is-size-7 is-mobile is-multiline\">\n @for (legendItem of legend(); track legendItem.type) {\n <div class=\"column is-narrow py-0 is-flex-mobile is-flex-direction-column is-align-items-center | is-legend-item\">\n <span\n class=\"is-inline-block-tablet is-align-middle | key-colour\"\n [style.backgroundColor]=\"nodeColours[legendItem.type]\"></span>\n <strong class=\"has-text-black is-align-middle is-pl-tablet-2 is-size-8-mobile\">\n <span class=\"is-hidden-desktop\">{{ legendItem.mobileText }}</span>\n <span class=\"is-hidden-touch\">{{ legendItem.text }}</span>\n </strong>\n </div>\n }\n</div>\n\n<div class=\"chart-container is-relative w-100\">\n <svg class=\"w-100 h-100\" #chart></svg>\n\n <span\n class=\"is-hidden\"\n [ngbPopover]=\"tipContent\"\n triggers=\"manual\"\n placement=\"right left auto\"\n container=\"body\"\n #t=\"ngbPopover\"\n positionTarget=\".tip-target\"\n popoverClass=\"is-narrow driver-chart-tooltip\"\n [animation]=\"true\"></span>\n</div>\n\n<ng-template #tipContent let-tipData=\"tipData\">\n @if (tipData.hasWeightedValue) {\n <p>contribution: {{ tipData.weightedValueText }}</p>\n }\n @if (tipData.valueValueText) {\n <p>\n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.valueKeyHref\">value</a>\n <span class=\"is-pr-1\">:</span>\n <span>{{ tipData.valueValueText }}</span>\n @if (tipData.hasValue) {\n <a class=\"is-dark is-ml-2\" [href]=\"tipData.modelDocsHref\" target=\"_blank\">\n <span>Docs</span>\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n </a>\n }\n </p>\n }\n <p>\n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.modelKeyHref\">methodModel</a>\n <span class=\"is-pr-1\">:</span>\n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.modelValueHref\">{{ tipData.modelValue }}</a>\n </p>\n <p>\n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.termKeyHref\">terms</a>\n <span class=\"is-pr-1\">:</span>\n @for (term of tipData.terms; track term.text; let lastTerm = $last) {\n <a class=\"is-dark\" target=\"_blank\" [href]=\"term.href\">{{ term.text }}</a>\n @if (!lastTerm) {\n <span class=\"is-px-1\">;</span>\n }\n }\n </p>\n</ng-template>\n", styles: ["@media screen and (min-width:1216px){.is-legend-item{min-width:130px}}.key-colour{border-radius:2px;box-shadow:0 2px 3px #0000001a,inset 0 0 0 1px #0000001a;height:1.5em;width:1.5em;opacity:.7}svg{pointer-events:none}:host ::ng-deep .node-box{rx:10px;ry:10px;fill-opacity:0;stroke-opacity:.5;pointer-events:auto}:host ::ng-deep .node-open{stroke-width:3}:host ::ng-deep .node-openable{cursor:pointer;stroke-opacity:1;fill-opacity:.1}:host ::ng-deep .node-openable:hover{stroke-width:3}:host ::ng-deep .group-button{fill:#fff;cursor:pointer;pointer-events:auto;stroke-dasharray:2,5;stroke:#999;stroke-width:2}:host ::ng-deep .group-button:hover{fill:#0a0a0a}:host ::ng-deep .group-button:hover+text{fill:#fff}:host ::ng-deep .group-button-text{text-anchor:middle;alignment-baseline:central}:host ::ng-deep .group-border,:host ::ng-deep .group-line{stroke-dasharray:2,5;stroke:#999;stroke-width:2;fill:none}:host ::ng-deep .group-label{font-weight:700;fill:#696969;text-anchor:start;alignment-baseline:central}:host ::ng-deep .node-label{font-weight:700;fill:#0a0a0a;text-anchor:middle;alignment-baseline:central}:host ::ng-deep .node-label tspan{alignment-baseline:inherit}:host ::ng-deep .bar-label{font-weight:700;fill:#696969;alignment-baseline:central}:host ::ng-deep .sibling-mask{fill:#fafafa;fill-opacity:.8;stroke-opacity:.9;stroke:#fafafa;rx:10px;ry:10px;stroke-width:3;pointer-events:none}:host ::ng-deep .mask-openable{pointer-events:all}:host ::ng-deep .mask-openable:hover{fill:none;stroke:none}:host ::ng-deep .bar-background{fill:#d3d3d3;fill-opacity:.5}:host ::ng-deep .link-path{fill:none;stroke:#999}:host ::ng-deep .bar-foreground{fill-opacity:.5}\n"], dependencies: [{ 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: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }] }); }
|
|
11731
11723
|
}
|
|
11732
11724
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: HierarchyChartComponent, decorators: [{
|
|
11733
11725
|
type: Component$1,
|
|
@@ -11909,7 +11901,7 @@ class ImpactAssessmentsGraphComponent {
|
|
|
11909
11901
|
effect(() => this.showWarnings.set(this.warnings()?.length > 0));
|
|
11910
11902
|
}
|
|
11911
11903
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ImpactAssessmentsGraphComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11912
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: ImpactAssessmentsGraphComponent, isStandalone: true, selector: "he-impact-assessments-graph", inputs: { impactAssessments: { classPropertyName: "impactAssessments", publicName: "impactAssessments", isSignal: true, isRequired: false, transformFunction: null }, dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (isRecalculated()) {\n @if (loading()) {\n <div class=\"loading-container has-text-center my-5 py-5\">\n <he-svg-icon name=\"loading\" animation=\"spin\" size=\"40\" />\n <p class=\"is-mt-2 is-italic is-size-7\">Loading chart, please wait...</p>\n </div>\n } @else {\n @if (filteredImpactAssessments().length > 1) {\n <div class=\"field has-addons pt-2 px-3 mb-0\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select an Impact Assessment</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select [(ngModel)]=\"selectedImpactAssessmentId\" [disabled]=\"loading()\">\n @for (value of filteredImpactAssessments(); track value['@id']) {\n <option [value]=\"value['@id']\">\n {{ value.name || value['@id'] }}\n </option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n @if (!noData()) {\n <div class=\"field has-addons py-2 px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a model</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select [(ngModel)]=\"selectedModelId\" [disabled]=\"loading()\">\n @for (model of models(); track model['@id']) {\n <option [value]=\"model['@id']\">{{ model.name || model['@id'] }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n @if (showWarnings()) {\n <div class=\"has-text-warning py-3 has-text-centered\">\n @for (warning of warnings(); track warning) {\n <p class=\"is-mb-2\">\n <he-svg-icon name=\"exclamation-triangle\" class=\"pr-2\" />\n @switch (warning) {\n @case ('missing-terms') {\n <span>Calculations are not up to date. Some terms may not display correctly.</span>\n }\n }\n </p>\n }\n <p class=\"is-underlined is-size-7\"><a (click)=\"showWarnings.set(false)\">View chart anyway.</a></p>\n </div>\n }\n @if (error()) {\n <p class=\"has-text-danger py-3\">\n @switch (error()) {\n @case ('not-found') {\n <p>Impact Assessment not found</p>\n }\n @default {\n <div>\n <span>An unexpected error occurred:</span>\n <p class=\"mt-1\">{{ error() }}</p>\n </div>\n }\n }\n </p>\n }\n @if (noData()) {\n <div class=\"py-3\">\n <p class=\"has-text-centered\">No chart available.</p>\n </div>\n }\n }\n} @else {\n <p class=\"has-text-centered py-3\">\n No chart available. Switch to\n <code>recalculated</code>\n version.\n </p>\n}\n\n@if (showChart()) {\n <he-hierarchy-chart [data]=\"chartData()\" [terms]=\"allTerms()\" (chartError)=\"error.set($event)\" />\n}\n", styles: [".loading-container{min-height:200px}\n"], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
11904
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: ImpactAssessmentsGraphComponent, isStandalone: true, selector: "he-impact-assessments-graph", inputs: { impactAssessments: { classPropertyName: "impactAssessments", publicName: "impactAssessments", isSignal: true, isRequired: false, transformFunction: null }, dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (isRecalculated()) {\n @if (loading()) {\n <div class=\"loading-container has-text-center my-5 py-5\">\n <he-svg-icon name=\"loading\" animation=\"spin\" size=\"40\" />\n <p class=\"is-mt-2 is-italic is-size-7\">Loading chart, please wait...</p>\n </div>\n } @else {\n @if (filteredImpactAssessments().length > 1) {\n <div class=\"field has-addons pt-2 px-3 mb-0\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select an Impact Assessment</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select [(ngModel)]=\"selectedImpactAssessmentId\" [disabled]=\"loading()\">\n @for (value of filteredImpactAssessments(); track value['@id']) {\n <option [value]=\"value['@id']\">\n {{ value.name || value['@id'] }}\n </option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n @if (!noData()) {\n <div class=\"field has-addons py-2 px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a model</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select [(ngModel)]=\"selectedModelId\" [disabled]=\"loading()\">\n @for (model of models(); track model['@id']) {\n <option [value]=\"model['@id']\">{{ model.name || model['@id'] }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n @if (showWarnings()) {\n <div class=\"has-text-warning py-3 has-text-centered\">\n @for (warning of warnings(); track warning) {\n <p class=\"is-mb-2\">\n <he-svg-icon name=\"exclamation-triangle\" class=\"pr-2\" />\n @switch (warning) {\n @case ('missing-terms') {\n <span>Calculations are not up to date. Some terms may not display correctly.</span>\n }\n }\n </p>\n }\n <p class=\"is-underlined is-size-7\"><a (click)=\"showWarnings.set(false)\">View chart anyway.</a></p>\n </div>\n }\n @if (error()) {\n <p class=\"has-text-danger py-3\">\n @switch (error()) {\n @case ('not-found') {\n <p>Impact Assessment not found</p>\n }\n @default {\n <div>\n <span>An unexpected error occurred:</span>\n <p class=\"mt-1\">{{ error() }}</p>\n </div>\n }\n }\n </p>\n }\n @if (noData()) {\n <div class=\"py-3\">\n <p class=\"has-text-centered\">No chart available.</p>\n </div>\n }\n }\n} @else {\n <p class=\"has-text-centered py-3\">\n No chart available. Switch to\n <code>recalculated</code>\n version.\n </p>\n}\n\n@if (showChart()) {\n <he-hierarchy-chart [data]=\"chartData()\" [terms]=\"allTerms()\" (chartError)=\"error.set($event)\" />\n}\n", styles: [".loading-container{min-height:200px}\n"], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { 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: HierarchyChartComponent, selector: "he-hierarchy-chart", inputs: ["data", "terms"], outputs: ["chartError"] }] }); }
|
|
11913
11905
|
}
|
|
11914
11906
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ImpactAssessmentsGraphComponent, decorators: [{
|
|
11915
11907
|
type: Component$1,
|
|
@@ -12102,7 +12094,7 @@ class ImpactAssessmentsIndicatorBreakdownChartComponent {
|
|
|
12102
12094
|
});
|
|
12103
12095
|
}
|
|
12104
12096
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ImpactAssessmentsIndicatorBreakdownChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12105
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: ImpactAssessmentsIndicatorBreakdownChartComponent, isStandalone: true, selector: "he-impact-assessments-indicator-breakdown-chart", inputs: { impactAssessment: { classPropertyName: "impactAssessment", publicName: "impactAssessment", isSignal: true, isRequired: true, transformFunction: null }, indicators: { classPropertyName: "indicators", publicName: "indicators", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (logsResource.isLoading()) {\n <div class=\"has-text-center py-3\">\n <he-svg-icon name=\"loading\" animation=\"spin\" size=\"40\" />\n </div>\n} @else {\n <div class=\"p-3\" [class.is-hidden]=\"!terms()?.length\">\n <div class=\"columns\">\n <div class=\"column\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select an Indicator</span>\n </div>\n @if (terms()?.length) {\n <div class=\"control is-expanded\">\n <div class=\"select is-fullwidth is-small is-secondary\">\n <select [(ngModel)]=\"selectedTermId\" name=\"selectedTermId\">\n @for (term of terms(); track term) {\n <option [value]=\"term['@id']\">{{ term.name }} ({{ term.units }})</option>\n }\n </select>\n </div>\n </div>\n }\n @if (methods()?.length) {\n <div class=\"control is-expanded\">\n <div class=\"select is-fullwidth is-small is-secondary\">\n <select [(ngModel)]=\"selectedMethodId\" name=\"selectedMethodId\">\n @if (methods().length > 1) {\n <option [ngValue]=\"undefined\">Filter Model</option>\n }\n @for (term of methods(); track term) {\n <option [value]=\"term['@id']\">{{ term.name }}</option>\n }\n </select>\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"column is-narrow\">\n <a\n class=\"button is-ghost is-small\"\n [href]=\"csvContent()\"\n [download]=\"downloadFilename()\"\n ngbTooltip=\"Download as CSV\"\n placement=\"bottom\">\n <he-svg-icon name=\"download\" />\n </a>\n </div>\n </div>\n @if (!selectedMethod()) {\n <p class=\"is-size-7\">\n <i>Selecting a Model is recommended to avoid duplicated entries.</i>\n </p>\n }\n </div>\n}\n\n<div class=\"is-mt-1\">\n @if (!logsResource.isLoading() && noData()) {\n <p class=\"has-text-centered\">\n <span>No breakdown available for</span>\n @if (selectedTerm()) {\n <span class=\"is-pl-1\">{{ selectedTerm().name }}</span>\n }\n @if (selectedMethod()) {\n <span class=\"is-pl-1\">({{ selectedMethod().name }})</span>\n }\n <span>.</span>\n </p>\n }\n <he-chart class=\"is-relative\" [data]=\"chartData()\" [config]=\"chartConfig()\" />\n\n @if (hasNegativeContributions()) {\n <p class=\"is-mt-2 is-italic is-size-7\">\n <span class=\"is-pr-1\">This chart includes negative contributions that will appear as</span>\n <b>0</b>\n <span>.</span>\n </p>\n }\n</div>\n", styles: [":host{display:block;overflow:visible}he-chart{height:100%}he-chart::ng-deep .chart-container{min-height:400px}\n"], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
12097
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: ImpactAssessmentsIndicatorBreakdownChartComponent, isStandalone: true, selector: "he-impact-assessments-indicator-breakdown-chart", inputs: { impactAssessment: { classPropertyName: "impactAssessment", publicName: "impactAssessment", isSignal: true, isRequired: true, transformFunction: null }, indicators: { classPropertyName: "indicators", publicName: "indicators", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (logsResource.isLoading()) {\n <div class=\"has-text-center py-3\">\n <he-svg-icon name=\"loading\" animation=\"spin\" size=\"40\" />\n </div>\n} @else {\n <div class=\"p-3\" [class.is-hidden]=\"!terms()?.length\">\n <div class=\"columns\">\n <div class=\"column\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select an Indicator</span>\n </div>\n @if (terms()?.length) {\n <div class=\"control is-expanded\">\n <div class=\"select is-fullwidth is-small is-secondary\">\n <select [(ngModel)]=\"selectedTermId\" name=\"selectedTermId\">\n @for (term of terms(); track term) {\n <option [value]=\"term['@id']\">{{ term.name }} ({{ term.units }})</option>\n }\n </select>\n </div>\n </div>\n }\n @if (methods()?.length) {\n <div class=\"control is-expanded\">\n <div class=\"select is-fullwidth is-small is-secondary\">\n <select [(ngModel)]=\"selectedMethodId\" name=\"selectedMethodId\">\n @if (methods().length > 1) {\n <option [ngValue]=\"undefined\">Filter Model</option>\n }\n @for (term of methods(); track term) {\n <option [value]=\"term['@id']\">{{ term.name }}</option>\n }\n </select>\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"column is-narrow\">\n <a\n class=\"button is-ghost is-small\"\n [href]=\"csvContent()\"\n [download]=\"downloadFilename()\"\n ngbTooltip=\"Download as CSV\"\n placement=\"bottom\">\n <he-svg-icon name=\"download\" />\n </a>\n </div>\n </div>\n @if (!selectedMethod()) {\n <p class=\"is-size-7\">\n <i>Selecting a Model is recommended to avoid duplicated entries.</i>\n </p>\n }\n </div>\n}\n\n<div class=\"is-mt-1\">\n @if (!logsResource.isLoading() && noData()) {\n <p class=\"has-text-centered\">\n <span>No breakdown available for</span>\n @if (selectedTerm()) {\n <span class=\"is-pl-1\">{{ selectedTerm().name }}</span>\n }\n @if (selectedMethod()) {\n <span class=\"is-pl-1\">({{ selectedMethod().name }})</span>\n }\n <span>.</span>\n </p>\n }\n <he-chart class=\"is-relative\" [data]=\"chartData()\" [config]=\"chartConfig()\" />\n\n @if (hasNegativeContributions()) {\n <p class=\"is-mt-2 is-italic is-size-7\">\n <span class=\"is-pr-1\">This chart includes negative contributions that will appear as</span>\n <b>0</b>\n <span>.</span>\n </p>\n }\n</div>\n", styles: [":host{display:block;overflow:visible}he-chart{height:100%}he-chart::ng-deep .chart-container{min-height:400px}\n"], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { 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: ChartComponent, selector: "he-chart", inputs: ["data", "config"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12106
12098
|
}
|
|
12107
12099
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ImpactAssessmentsIndicatorBreakdownChartComponent, decorators: [{
|
|
12108
12100
|
type: Component$1,
|
|
@@ -12331,7 +12323,7 @@ class ImpactAssessmentsProductsComponent {
|
|
|
12331
12323
|
component.headerKeys.set(this.headerKeys());
|
|
12332
12324
|
}
|
|
12333
12325
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ImpactAssessmentsProductsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12334
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: ImpactAssessmentsProductsComponent, isStandalone: true, selector: "he-impact-assessments-products", inputs: { dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null }, nodeKey: { classPropertyName: "nodeKey", publicName: "nodeKey", isSignal: true, isRequired: false, transformFunction: null }, filterTermTypes: { classPropertyName: "filterTermTypes", publicName: "filterTermTypes", isSignal: true, isRequired: false, transformFunction: null }, enableFilterMethodModel: { classPropertyName: "enableFilterMethodModel", publicName: "enableFilterMethodModel", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"columns is-variable is-align-items-center is-2 is-m-0\">\n <div class=\"column\">\n @if (hasData() && selectedView() === View.table) {\n <button class=\"button is-small is-ghost\" (click)=\"showDownload()\">\n <he-svg-icon name=\"download\" />\n </button>\n }\n </div>\n @if (selectedView() === View.table) {\n <div class=\"column is-narrow\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter terms by name\"\n (searchText)=\"filterTerm.set($event)\" />\n </div>\n }\n @if (views()?.length > 1) {\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n @for (view of views(); track view) {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView() === view\"\n (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <he-svg-icon [name]=\"viewIcon[view]\" aria-hidden=\"true\" />\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n }\n </div>\n </div>\n }\n</div>\n\n@if (isNodeKeyAllowed()) {\n @switch (selectedView()) {\n @case (View.table) {\n <div class=\"is-px-3 is-pb-3\">\n @if (hasData()) {\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 @if (dataKeys().length > 1) {\n <tr class=\"has-text-weight-bold\">\n <th class=\"width-auto\"></th>\n <th></th>\n <th></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @let blankNodes = data()[dataKey];\n @if (isGroupVisible(blankNodes)) {\n <th [attr.colspan]=\"blankNodes.length\" [class.has-border-right]=\"!dataKeyLast\">\n @if (dataKey) {\n <span>{{ dataKey | keyToLabel }}</span>\n }\n </th>\n }\n }\n </tr>\n }\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right is-py-0\">\n @if (enableFilterMethodModel()) {\n <div class=\"select is-small\">\n <select (change)=\"updateSelectedMethodModel($event.target.value)\">\n <option [ngValue]=\"undefined\">Filter Model</option>\n @for (term of methodModels(); track term) {\n <option [ngValue]=\"term\">{{ term.name }}</option>\n }\n </select>\n </div>\n }\n </th>\n <th class=\"has-border-right\"></th>\n <th class=\"has-border-right\"></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @let blankNodes = data()[dataKey];\n @for (node of blankNodes; track node.value.term.name; let nodeLast = $last) {\n @if (node.value.visible) {\n <th\n [attr.title]=\"node.value.term.name\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <he-node-link [node]=\"node.value.term\">\n <span\n [innerHtml]=\"\n node.value.term.name | ellipsis: 30 | compound: node.value.term.termType\n \"></span>\n </he-node-link>\n </th>\n }\n }\n }\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\">\n <a [href]=\"schemaBaseUrl + '/ImpactAssessment#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n <th class=\"has-border-right\">\n <a [href]=\"schemaBaseUrl + '/ImpactAssessment#product'\" target=\"_blank\">Product</a>\n </th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @let blankNodes = data()[dataKey];\n @for (node of blankNodes; track node.value.term.name; let nodeLast = $last) {\n @if (node.value.visible) {\n <th\n [attr.title]=\"node.value.term.units\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <span [innerHtml]=\"node.value.term.units | compound: node.value.term.termType\"></span>\n <he-terms-units-description class=\"is-inline-block is-ml-2\" [term]=\"node.value.term\" />\n </th>\n }\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (\n impactAssessment of impactAssessments();\n track trackById(impactIndex, impactAssessment);\n let impactIndex = $index\n ) {\n @let product = productTerm(impactAssessment);\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"impactName(impactAssessment)\">\n <he-node-link [node]=\"impactAssessment\">\n <span>{{ impactIndex + 1 }}. {{ impactName(impactAssessment) }}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"product?.units\">\n <span>1 {{ product?.units }}</span>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"product?.name\">\n @if (product) {\n <he-node-link [node]=\"product\">\n <span>{{ product.name | ellipsis: 30 }}</span>\n </he-node-link>\n }\n </td>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @let blankNodes = data()[dataKey];\n @for (node of blankNodes; track node.value.term.name; let nodeLast = $last) {\n @if (node.value.visible) {\n @let impactData = node.value.values[impactAssessment['@id']];\n <td\n class=\"is-nowrap\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n @if (impactData) {\n <span\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n autoClose=\"outside\"\n popoverClass=\"is-narrow is-overflow-visible\"\n placement=\"left bottom auto\"\n container=\"body\"\n [popoverContext]=\"{\n data: impactData,\n impactAssessment\n }\">\n <span pointer>\n {{ impactData.propertyValue | precision: 3 | default: '-' }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"dataState()\"\n [node]=\"impactData.node\"\n key=\"value\"\n [state]=\"impactAssessment.aggregated ? 'aggregated' : undefined\" />\n </span>\n } @else {\n <span>-</span>\n }\n </td>\n }\n }\n }\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n <div class=\"is-flex is-align-items-center is-flex-wrap-wrap is-justify-content-space-between\">\n <he-blank-node-state-notice [dataState]=\"dataState()\" />\n @if (impactAssessments().length > 1) {\n <div class=\"field is-relative is-mb-0\">\n <input\n type=\"checkbox\"\n class=\"switch is-small is-rounded\"\n [id]=\"componentId() + 'hideIdenticalValues'\"\n name=\"hideIdenticalValues\"\n [(ngModel)]=\"hideIdenticalValues\" />\n <label [for]=\"componentId() + 'hideIdenticalValues'\">\n <span>Hide identical values</span>\n </label>\n </div>\n }\n </div>\n } @else if (noDataMessage()) {\n <div class=\"is-pt-3 has-text-centered\">\n <span>{{ noDataMessage() }}</span>\n </div>\n } @else {\n <div class=\"is-pt-3 has-text-centered\">\n <span>No data available</span>\n @if (filterTerm()) {\n <span class=\"is-pl-1\">matching your search criteria</span>\n }\n <span>.</span>\n @if (showSwitchToRecalculated()) {\n <span>\n Switch to\n <code>recalculated</code>\n version.\n </span>\n }\n </div>\n }\n </div>\n }\n @case (View.chart) {\n <he-impact-assessments-indicators-chart [key]=\"nodeKey()\" [filterTermTypes]=\"filterTermTypes()\" />\n }\n @case (View.breakdown) {\n <ng-container *ngTemplateOutlet=\"selectImpactAssessment\" />\n @if (selectedNode()) {\n <he-impact-assessments-indicator-breakdown-chart\n [impactAssessment]=\"selectedNode()\"\n [indicators]=\"selectedRecalculatedValues()\" />\n }\n }\n @case (View.logs) {\n <ng-container *ngTemplateOutlet=\"selectImpactAssessment\" />\n @if (selectedNode()) {\n <he-node-logs-models\n [node]=\"selectedNode()\"\n [nodeKey]=\"nodeKey()\"\n [filterTermTypes]=\"filterTermTypes()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [noDataMessage]=\"noDataMessage()\" />\n }\n }\n }\n}\n\n<ng-template #details let-node=\"impactAssessment\" let-data=\"data\">\n <p>\n <b>\n @if (data.cycle) {\n <span>{{ cycleLabel(node.cycle) }}</span>\n }\n @if (!data.cycle) {\n <span>{{ data.name }}</span>\n }\n </b>\n </p>\n <he-node-value-details\n class=\"is-overflow-visible\"\n [data]=\"data\"\n [dataState]=\"dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"nodeKey()\" />\n</ng-template>\n\n<ng-template #selectImpactAssessment>\n @if (impactAssessments().length > 1) {\n <div class=\"field has-addons pt-2 px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select an Impact Assessment</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n @for (value of impactAssessments(); track value; let i = $index) {\n <option [value]=\"i\">{{ i + 1 }}. {{ impactName(value) }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n</ng-template>\n", styles: ["he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}he-data-table ::ng-deep .table thead tr th:nth-child(3),he-data-table ::ng-deep .table tbody tr td:nth-child(3){min-width:110px}\n"], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation", "svgClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SearchExtendComponent, selector: "he-search-extend", inputs: ["value", "disabled", "placeholder", "class"], outputs: ["valueChange", "searchText"] }, { kind: "component", type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "dataState", "showExternalLink", "linkClass"] }, { kind: "component", type: TermsUnitsDescriptionComponent, selector: "he-terms-units-description", inputs: ["term", "iconTemplate"] }, { 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: "component", type: BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showDeleted"] }, { kind: "component", type: ImpactAssessmentsIndicatorsChartComponent, selector: "he-impact-assessments-indicators-chart", inputs: ["key", "filterTermTypes"] }, { kind: "component", type: ImpactAssessmentsIndicatorBreakdownChartComponent, selector: "he-impact-assessments-indicator-breakdown-chart", inputs: ["impactAssessment", "indicators"] }, { kind: "component", type: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "filterTermTypesLabel", "logsKey", "noDataMessage"] }, { kind: "component", type: NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataState", "dataKey"] }, { kind: "pipe", type: CompoundPipe, name: "compound" }, { kind: "pipe", type: DefaultPipe, name: "default" }, { kind: "pipe", type: EllipsisPipe, name: "ellipsis" }, { kind: "pipe", type: PrecisionPipe, name: "precision" }, { kind: "pipe", type: KeyToLabelPipe, name: "keyToLabel" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12326
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: ImpactAssessmentsProductsComponent, isStandalone: true, selector: "he-impact-assessments-products", inputs: { dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null }, nodeKey: { classPropertyName: "nodeKey", publicName: "nodeKey", isSignal: true, isRequired: false, transformFunction: null }, filterTermTypes: { classPropertyName: "filterTermTypes", publicName: "filterTermTypes", isSignal: true, isRequired: false, transformFunction: null }, enableFilterMethodModel: { classPropertyName: "enableFilterMethodModel", publicName: "enableFilterMethodModel", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"columns is-variable is-align-items-center is-2 is-m-0\">\n <div class=\"column\">\n @if (hasData() && selectedView() === View.table) {\n <button class=\"button is-small is-ghost\" (click)=\"showDownload()\">\n <he-svg-icon name=\"download\" />\n </button>\n }\n </div>\n @if (selectedView() === View.table) {\n <div class=\"column is-narrow\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter terms by name\"\n (searchText)=\"filterTerm.set($event)\" />\n </div>\n }\n @if (views()?.length > 1) {\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n @for (view of views(); track view) {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView() === view\"\n (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <he-svg-icon [name]=\"viewIcon[view]\" aria-hidden=\"true\" />\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n }\n </div>\n </div>\n }\n</div>\n\n@if (isNodeKeyAllowed()) {\n @switch (selectedView()) {\n @case (View.table) {\n <div class=\"is-px-3 is-pb-3\">\n @if (hasData()) {\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 @if (dataKeys().length > 1) {\n <tr class=\"has-text-weight-bold\">\n <th class=\"width-auto\"></th>\n <th></th>\n <th></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @let blankNodes = data()[dataKey];\n @if (isGroupVisible(blankNodes)) {\n <th [attr.colspan]=\"blankNodes.length\" [class.has-border-right]=\"!dataKeyLast\">\n @if (dataKey) {\n <span>{{ dataKey | keyToLabel }}</span>\n }\n </th>\n }\n }\n </tr>\n }\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right is-py-0\">\n @if (enableFilterMethodModel()) {\n <div class=\"select is-small\">\n <select (change)=\"updateSelectedMethodModel($event.target.value)\">\n <option [ngValue]=\"undefined\">Filter Model</option>\n @for (term of methodModels(); track term) {\n <option [ngValue]=\"term\">{{ term.name }}</option>\n }\n </select>\n </div>\n }\n </th>\n <th class=\"has-border-right\"></th>\n <th class=\"has-border-right\"></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @let blankNodes = data()[dataKey];\n @for (node of blankNodes; track node.value.term.name; let nodeLast = $last) {\n @if (node.value.visible) {\n <th\n [attr.title]=\"node.value.term.name\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <he-node-link [node]=\"node.value.term\">\n <span\n [innerHtml]=\"\n node.value.term.name | ellipsis: 30 | compound: node.value.term.termType\n \"></span>\n </he-node-link>\n </th>\n }\n }\n }\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\">\n <a [href]=\"schemaBaseUrl + '/ImpactAssessment#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n <th class=\"has-border-right\">\n <a [href]=\"schemaBaseUrl + '/ImpactAssessment#product'\" target=\"_blank\">Product</a>\n </th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @let blankNodes = data()[dataKey];\n @for (node of blankNodes; track node.value.term.name; let nodeLast = $last) {\n @if (node.value.visible) {\n <th\n [attr.title]=\"node.value.term.units\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <span [innerHtml]=\"node.value.term.units | compound: node.value.term.termType\"></span>\n <he-terms-units-description class=\"is-inline-block is-ml-2\" [term]=\"node.value.term\" />\n </th>\n }\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (\n impactAssessment of impactAssessments();\n track trackById(impactIndex, impactAssessment);\n let impactIndex = $index\n ) {\n @let product = productTerm(impactAssessment);\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"impactName(impactAssessment)\">\n <he-node-link [node]=\"impactAssessment\">\n <span>{{ impactIndex + 1 }}. {{ impactName(impactAssessment) }}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"product?.units\">\n <span>1 {{ product?.units }}</span>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"product?.name\">\n @if (product) {\n <he-node-link [node]=\"product\">\n <span>{{ product.name | ellipsis: 30 }}</span>\n </he-node-link>\n }\n </td>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @let blankNodes = data()[dataKey];\n @for (node of blankNodes; track node.value.term.name; let nodeLast = $last) {\n @if (node.value.visible) {\n @let impactData = node.value.values[impactAssessment['@id']];\n <td\n class=\"is-nowrap\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n @if (impactData) {\n <span\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n autoClose=\"outside\"\n popoverClass=\"is-narrow is-overflow-visible\"\n placement=\"left bottom auto\"\n container=\"body\"\n [popoverContext]=\"{\n data: impactData,\n impactAssessment\n }\">\n <span pointer>\n {{ impactData.propertyValue | precision: 3 | default: '-' }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"dataState()\"\n [node]=\"impactData.node\"\n key=\"value\"\n [state]=\"impactAssessment.aggregated ? 'aggregated' : undefined\" />\n </span>\n } @else {\n <span>-</span>\n }\n </td>\n }\n }\n }\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n <div class=\"is-flex is-align-items-center is-flex-wrap-wrap is-justify-content-space-between\">\n <he-blank-node-state-notice [dataState]=\"dataState()\" />\n @if (impactAssessments().length > 1) {\n <div class=\"field is-relative is-mb-0\">\n <input\n type=\"checkbox\"\n class=\"switch is-small is-rounded\"\n [id]=\"componentId() + 'hideIdenticalValues'\"\n name=\"hideIdenticalValues\"\n [(ngModel)]=\"hideIdenticalValues\" />\n <label [for]=\"componentId() + 'hideIdenticalValues'\">\n <span>Hide identical values</span>\n </label>\n </div>\n }\n </div>\n } @else if (noDataMessage()) {\n <div class=\"is-pt-3 has-text-centered\">\n <span>{{ noDataMessage() }}</span>\n </div>\n } @else {\n <div class=\"is-pt-3 has-text-centered\">\n <span>No data available</span>\n @if (filterTerm()) {\n <span class=\"is-pl-1\">matching your search criteria</span>\n }\n <span>.</span>\n @if (showSwitchToRecalculated()) {\n <span>\n Switch to\n <code>recalculated</code>\n version.\n </span>\n }\n </div>\n }\n </div>\n }\n @case (View.chart) {\n <he-impact-assessments-indicators-chart [key]=\"nodeKey()\" [filterTermTypes]=\"filterTermTypes()\" />\n }\n @case (View.breakdown) {\n <ng-container *ngTemplateOutlet=\"selectImpactAssessment\" />\n @if (selectedNode()) {\n <he-impact-assessments-indicator-breakdown-chart\n [impactAssessment]=\"selectedNode()\"\n [indicators]=\"selectedRecalculatedValues()\" />\n }\n }\n @case (View.logs) {\n <ng-container *ngTemplateOutlet=\"selectImpactAssessment\" />\n @if (selectedNode()) {\n <he-node-logs-models\n [node]=\"selectedNode()\"\n [nodeKey]=\"nodeKey()\"\n [filterTermTypes]=\"filterTermTypes()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [noDataMessage]=\"noDataMessage()\" />\n }\n }\n }\n}\n\n<ng-template #details let-node=\"impactAssessment\" let-data=\"data\">\n <p>\n <b>\n @if (data.cycle) {\n <span>{{ cycleLabel(node.cycle) }}</span>\n }\n @if (!data.cycle) {\n <span>{{ data.name }}</span>\n }\n </b>\n </p>\n <he-node-value-details\n class=\"is-overflow-visible\"\n [data]=\"data\"\n [dataState]=\"dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"nodeKey()\" />\n</ng-template>\n\n<ng-template #selectImpactAssessment>\n @if (impactAssessments().length > 1) {\n <div class=\"field has-addons pt-2 px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select an Impact Assessment</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n @for (value of impactAssessments(); track value; let i = $index) {\n <option [value]=\"i\">{{ i + 1 }}. {{ impactName(value) }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n</ng-template>\n", styles: ["he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}he-data-table ::ng-deep .table thead tr th:nth-child(3),he-data-table ::ng-deep .table tbody tr td:nth-child(3){min-width:110px}\n"], dependencies: [{ kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SearchExtendComponent, selector: "he-search-extend", inputs: ["value", "disabled", "placeholder", "class"], outputs: ["valueChange", "searchText"] }, { kind: "component", type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "dataState", "showExternalLink", "linkClass"] }, { kind: "component", type: TermsUnitsDescriptionComponent, selector: "he-terms-units-description", inputs: ["term", "iconTemplate"] }, { 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: "component", type: BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showDeleted"] }, { kind: "component", type: ImpactAssessmentsIndicatorsChartComponent, selector: "he-impact-assessments-indicators-chart", inputs: ["key", "filterTermTypes"] }, { kind: "component", type: ImpactAssessmentsIndicatorBreakdownChartComponent, selector: "he-impact-assessments-indicator-breakdown-chart", inputs: ["impactAssessment", "indicators"] }, { kind: "component", type: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "filterTermTypesLabel", "logsKey", "noDataMessage"] }, { kind: "component", type: NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataState", "dataKey"] }, { kind: "pipe", type: CompoundPipe, name: "compound" }, { kind: "pipe", type: DefaultPipe, name: "default" }, { kind: "pipe", type: EllipsisPipe, name: "ellipsis" }, { kind: "pipe", type: PrecisionPipe, name: "precision" }, { kind: "pipe", type: KeyToLabelPipe, name: "keyToLabel" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12335
12327
|
}
|
|
12336
12328
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ImpactAssessmentsProductsComponent, decorators: [{
|
|
12337
12329
|
type: Component$1,
|
|
@@ -12617,7 +12609,7 @@ class FilterAccordionComponent extends ControlValueAccessor {
|
|
|
12617
12609
|
multi: true
|
|
12618
12610
|
},
|
|
12619
12611
|
FilterStore
|
|
12620
|
-
], usesInheritance: true, ngImport: i0, template: "@if (showHeader()) {\n <div\n class=\"is-flex is-justify-content-space-between is-gap-16 is-align-items-flex-start is-flex-direction-column has-border-bottom\">\n <div class=\"is-flex is-align-items-center\">\n <span class=\"has-text-secondary has-text-weight-semibold\">{{ title() }}</span>\n @if (tooltip()) {\n <he-svg-icon\n name=\"info-circle\"\n class=\"is-ml-1 is-mb-1 has-text-grey-light is-clickable\"\n [ngbTooltip]=\"tooltip()\"\n placement=\"right\"\n triggers=\"hover\"\n size=\"16\"\n container=\"body\" />\n }\n </div>\n\n <ng-content select=\"[header-content]\" />\n\n @if (showClearAll()) {\n <span\n class=\"is-size-7 mb-1 has-text-weight-normal is-italic | clear-button\"\n [class.is-clickable]=\"hasSelectedValues()\"\n (click)=\"clearAll()\">\n Clear all\n </span>\n }\n\n @if (showGlobalSearch()) {\n <div class=\"field is-mb-0 pb-2 w-100\">\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]=\"globalSearchPlaceholder()\"\n [(ngModel)]=\"search\"\n [disabled]=\"disabled()\"\n (input)=\"onSearch($event.target.value, group())\" />\n <a class=\"icon has-text-secondary is-small is-right\" [class.is-hidden]=\"!search()\" (click)=\"search.set('')\">\n <he-svg-icon name=\"xmark\" />\n </a>\n <a class=\"icon has-text-secondary is-small is-right\" [class.is-hidden]=\"search()\">\n <he-svg-icon name=\"search\" />\n </a>\n </div>\n </div>\n }\n </div>\n}\n\n<div class=\"has-border-bottom\">\n <ng-container *ngTemplateOutlet=\"itemsList; context: { group: group(), parentSearch: search() }\" />\n</div>\n\n<ng-template #itemsList let-group=\"group\" let-parentSearch=\"parentSearch\">\n @let items = getFilteredDirectChildren(group, parentSearch);\n\n @for (item of items; track item.trackId || item.label; let lastItem = $last) {\n @if (item.type === 'group') {\n @let groupState = panelStates[item.label];\n @if (groupState) {\n <div [class.has-border-bottom]=\"!lastItem\" [class.is-active]=\"groupState.expanded\">\n <div\n class=\"is-flex is-align-items-center is-clickable has-background-hover is-py-1 | accordion-row\"\n (click)=\"groupState.expanded = !groupState.expanded\">\n <ng-container *ngTemplateOutlet=\"groupOptionLabel; context: { item, groupState }\" />\n </div>\n\n <div\n class=\"filter-accordion__panel-content\"\n [class.filter-accordion__panel-content--expanded]=\"groupState.expanded\"\n [style.--max-height]=\"groupMaxHeight() ? groupMaxHeight() + 'px' : 'none'\">\n <div class=\"filter-accordion__panel-inner\">\n @if (!showGlobalSearch() && getDirectOptionsCount(item) >= 5) {\n <div class=\"filter-accordion__search\">\n <div class=\"field is-mb-0 pb-2 has-border-bottom\">\n <div class=\"control is-expanded has-icons-right pl-5\">\n <input\n type=\"text\"\n class=\"input is-secondary is-small search-input pl-2\"\n placeholder=\"Search {{ item.label }}\"\n [value]=\"groupState.searchTerm || ''\"\n [disabled]=\"isItemEffectivelyDisabled(item)\"\n (input)=\"groupState.searchTerm = $event.target.value; onSearch($event.target.value, item)\" />\n <a\n class=\"icon has-text-secondary 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 has-text-secondary is-right\" [class.is-hidden]=\"groupState.searchTerm\">\n <he-svg-icon name=\"search\" />\n </a>\n </div>\n </div>\n </div>\n }\n\n <div class=\"pl-5\">\n <ng-container\n *ngTemplateOutlet=\"\n itemsList;\n context: { group: item, parentSearch: parentSearch || groupState.searchTerm }\n \" />\n </div>\n </div>\n </div>\n </div>\n }\n } @else {\n <div\n class=\"is-flex is-justify-content-space-between is-py-1 | accordion-row\"\n [class.has-border-bottom]=\"!lastItem\">\n <ng-container *ngTemplateOutlet=\"optionLabel; context: { item }\" />\n </div>\n }\n } @empty {\n @if (parentSearch) {\n <div class=\"px-6 py-4 has-text-grey is-size-7 has-text-centered is-italic\">\n No results found for \"{{ parentSearch }}\"\n </div>\n }\n }\n</ng-template>\n\n<ng-template #itemLabel let-item=\"item\" let-count=\"count\">\n <span class=\"is-flex-grow-1 is-size-7 has-text-grey-dark has-text-weight-medium\">\n <span>{{ item.label }}</span>\n\n @if (item.tooltip) {\n <he-svg-icon\n name=\"info-circle\"\n class=\"has-text-grey-light is-ml-1\"\n [ngbTooltip]=\"item.tooltip\"\n placement=\"top\"\n triggers=\"hover\"\n size=\"16\"\n container=\"body\" />\n }\n\n @if (isNumber(count)) {\n <span class=\"has-text-grey-light is-size-7 ml-2\">({{ count }})</span>\n }\n </span>\n</ng-template>\n\n<ng-template #groupOptionLabel let-item=\"item\" let-groupState=\"groupState\">\n <label\n class=\"checkbox is-flex is-justify-content-center is-align-items-center is-fullwidth\"\n (click)=\"$event.stopPropagation()\">\n <input\n type=\"checkbox\"\n class=\"mr-3 is-flex-shrink-0\"\n [checked]=\"isGroupFullySelected(item)\"\n [indeterminate]=\"isGroupPartiallySelected(item)\"\n (change)=\"toggleGroup(item)\"\n [disabled]=\"isItemEffectivelyDisabled(item)\" />\n </label>\n\n <ng-container\n *ngTemplateOutlet=\"itemLabel; context: { item, count: showGroupCount() ? countDirectChildren(item) : undefined }\" />\n\n <he-svg-icon\n class=\"has-text-secondary transition-transform\"\n [name]=\"groupState.expanded ? 'chevron-up' : 'chevron-down'\" />\n</ng-template>\n\n<ng-template #optionLabel let-item=\"item\" let-parentDisabled=\"parentDisabled\">\n <label\n class=\"checkbox is-flex is-justify-content-center is-align-items-center is-fullwidth\"\n (click)=\"$event.stopPropagation()\">\n <input\n type=\"checkbox\"\n class=\"mr-3 is-flex-shrink-0\"\n [checked]=\"isOptionSelected(item.value)\"\n (change)=\"toggleOption(item.value)\"\n [disabled]=\"isItemEffectivelyDisabled(item, parentDisabled)\" />\n\n <ng-container *ngTemplateOutlet=\"itemLabel; context: { item, count: item.count }\" />\n </label>\n</ng-template>\n", styles: [".clear-button{color:#b5b5b5}.clear-button.is-clickable{color:#4c7194}.accordion-row{min-height:25px}.control{height:28px}.control.has-icons-left .icon,.control.has-icons-right .icon{height:28px!important}.search-input{height:28px;border-radius:3px;border:1px solid #dbe3ea;font-weight:400;line-height:17px;box-shadow:none!important}.filter-accordion__panel-content{display:grid;grid-template-rows:0fr;transition:grid-template-rows .3s cubic-bezier(.4,0,.2,1);will-change:grid-template-rows}.filter-accordion__panel-content--expanded{grid-template-rows:1fr}.filter-accordion__panel-inner{min-height:0;overflow:hidden}.filter-accordion__panel-content--expanded .filter-accordion__panel-inner{overflow-y:hidden;max-height:var(--max-height, none)}.filter-accordion__search{opacity:0;visibility:hidden;transition:opacity .15s ease-out,visibility 0s .15s}.filter-accordion__panel-content--expanded .filter-accordion__search{opacity:1;visibility:visible;transition:opacity .2s ease-in .1s,visibility 0s 0s}.has-background-hover-light:hover{background-color:#fafafa}.has-border-bottom{border-bottom:1px solid #dbe3ea}.transition-transform{transition:transform .2s ease-out}input[type=checkbox]{height:14px;width:14px;border:1px solid #b5b5b5;border-radius:2px;appearance:none;-webkit-appearance:none;background-color:transparent;accent-color:transparent}input[type=checkbox]:disabled{background-color:#f5f5f5}input[type=checkbox]:checked{background-color:#4c7194;accent-color:#4c7194;appearance:auto;-webkit-appearance:auto}\n"], dependencies: [{ 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.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: "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"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12612
|
+
], usesInheritance: true, ngImport: i0, template: "@if (showHeader()) {\n <div\n class=\"is-flex is-justify-content-space-between is-gap-16 is-align-items-flex-start is-flex-direction-column has-border-bottom\">\n <div class=\"is-flex is-align-items-center\">\n <span class=\"has-text-secondary has-text-weight-semibold\">{{ title() }}</span>\n @if (tooltip()) {\n <he-svg-icon\n name=\"info-circle\"\n class=\"is-ml-1 is-mb-1 has-text-grey-light is-clickable\"\n [ngbTooltip]=\"tooltip()\"\n placement=\"right\"\n triggers=\"hover\"\n size=\"16\"\n container=\"body\" />\n }\n </div>\n\n <ng-content select=\"[header-content]\" />\n\n @if (showClearAll()) {\n <span\n class=\"is-size-7 mb-1 has-text-weight-normal is-italic | clear-button\"\n [class.is-clickable]=\"hasSelectedValues()\"\n (click)=\"clearAll()\">\n Clear all\n </span>\n }\n\n @if (showGlobalSearch()) {\n <div class=\"field is-mb-0 pb-2 w-100\">\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]=\"globalSearchPlaceholder()\"\n [(ngModel)]=\"search\"\n [disabled]=\"disabled()\"\n (input)=\"onSearch($event.target.value, group())\" />\n <a class=\"icon has-text-secondary is-small is-right\" [class.is-hidden]=\"!search()\" (click)=\"search.set('')\">\n <he-svg-icon name=\"xmark\" />\n </a>\n <a class=\"icon has-text-secondary is-small is-right\" [class.is-hidden]=\"search()\">\n <he-svg-icon name=\"search\" />\n </a>\n </div>\n </div>\n }\n </div>\n}\n\n<div class=\"has-border-bottom\">\n <ng-container *ngTemplateOutlet=\"itemsList; context: { group: group(), parentSearch: search() }\" />\n</div>\n\n<ng-template #itemsList let-group=\"group\" let-parentSearch=\"parentSearch\">\n @let items = getFilteredDirectChildren(group, parentSearch);\n\n @for (item of items; track item.trackId || item.label; let lastItem = $last) {\n @if (item.type === 'group') {\n @let groupState = panelStates[item.label];\n @if (groupState) {\n <div [class.has-border-bottom]=\"!lastItem\" [class.is-active]=\"groupState.expanded\">\n <div\n class=\"is-flex is-align-items-center is-clickable has-background-hover is-py-1 | accordion-row\"\n (click)=\"groupState.expanded = !groupState.expanded\">\n <ng-container *ngTemplateOutlet=\"groupOptionLabel; context: { item, groupState }\" />\n </div>\n\n <div\n class=\"filter-accordion__panel-content\"\n [class.filter-accordion__panel-content--expanded]=\"groupState.expanded\"\n [style.--max-height]=\"groupMaxHeight() ? groupMaxHeight() + 'px' : 'none'\">\n <div class=\"filter-accordion__panel-inner\">\n @if (!showGlobalSearch() && getDirectOptionsCount(item) >= 5) {\n <div class=\"filter-accordion__search\">\n <div class=\"field is-mb-0 pb-2 has-border-bottom\">\n <div class=\"control is-expanded has-icons-right pl-5\">\n <input\n type=\"text\"\n class=\"input is-secondary is-small search-input pl-2\"\n placeholder=\"Search {{ item.label }}\"\n [value]=\"groupState.searchTerm || ''\"\n [disabled]=\"isItemEffectivelyDisabled(item)\"\n (input)=\"groupState.searchTerm = $event.target.value; onSearch($event.target.value, item)\" />\n <a\n class=\"icon has-text-secondary 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 has-text-secondary is-right\" [class.is-hidden]=\"groupState.searchTerm\">\n <he-svg-icon name=\"search\" />\n </a>\n </div>\n </div>\n </div>\n }\n\n <div class=\"pl-5\">\n <ng-container\n *ngTemplateOutlet=\"\n itemsList;\n context: { group: item, parentSearch: parentSearch || groupState.searchTerm }\n \" />\n </div>\n </div>\n </div>\n </div>\n }\n } @else {\n <div\n class=\"is-flex is-justify-content-space-between is-py-1 | accordion-row\"\n [class.has-border-bottom]=\"!lastItem\">\n <ng-container *ngTemplateOutlet=\"optionLabel; context: { item }\" />\n </div>\n }\n } @empty {\n @if (parentSearch) {\n <div class=\"px-6 py-4 has-text-grey is-size-7 has-text-centered is-italic\">\n No results found for \"{{ parentSearch }}\"\n </div>\n }\n }\n</ng-template>\n\n<ng-template #itemLabel let-item=\"item\" let-count=\"count\">\n <span class=\"is-flex-grow-1 is-size-7 has-text-grey-dark has-text-weight-medium\">\n <span>{{ item.label }}</span>\n\n @if (item.tooltip) {\n <he-svg-icon\n name=\"info-circle\"\n class=\"has-text-grey-light is-ml-1\"\n [ngbTooltip]=\"item.tooltip\"\n placement=\"top\"\n triggers=\"hover\"\n size=\"16\"\n container=\"body\" />\n }\n\n @if (isNumber(count)) {\n <span class=\"has-text-grey-light is-size-7 ml-2\">({{ count }})</span>\n }\n </span>\n</ng-template>\n\n<ng-template #groupOptionLabel let-item=\"item\" let-groupState=\"groupState\">\n <label\n class=\"checkbox is-flex is-justify-content-center is-align-items-center is-fullwidth\"\n (click)=\"$event.stopPropagation()\">\n <input\n type=\"checkbox\"\n class=\"mr-3 is-flex-shrink-0\"\n [checked]=\"isGroupFullySelected(item)\"\n [indeterminate]=\"isGroupPartiallySelected(item)\"\n (change)=\"toggleGroup(item)\"\n [disabled]=\"isItemEffectivelyDisabled(item)\" />\n </label>\n\n <ng-container\n *ngTemplateOutlet=\"itemLabel; context: { item, count: showGroupCount() ? countDirectChildren(item) : undefined }\" />\n\n <he-svg-icon\n class=\"has-text-secondary transition-transform\"\n [name]=\"groupState.expanded ? 'chevron-up' : 'chevron-down'\" />\n</ng-template>\n\n<ng-template #optionLabel let-item=\"item\" let-parentDisabled=\"parentDisabled\">\n <label\n class=\"checkbox is-flex is-justify-content-center is-align-items-center is-fullwidth\"\n (click)=\"$event.stopPropagation()\">\n <input\n type=\"checkbox\"\n class=\"mr-3 is-flex-shrink-0\"\n [checked]=\"isOptionSelected(item.value)\"\n (change)=\"toggleOption(item.value)\"\n [disabled]=\"isItemEffectivelyDisabled(item, parentDisabled)\" />\n\n <ng-container *ngTemplateOutlet=\"itemLabel; context: { item, count: item.count }\" />\n </label>\n</ng-template>\n", styles: [".clear-button{color:#b5b5b5}.clear-button.is-clickable{color:#4c7194}.accordion-row{min-height:25px}.control{height:28px}.control.has-icons-left .icon,.control.has-icons-right .icon{height:28px!important}.search-input{height:28px;border-radius:3px;border:1px solid #dbe3ea;font-weight:400;line-height:17px;box-shadow:none!important}.filter-accordion__panel-content{display:grid;grid-template-rows:0fr;transition:grid-template-rows .3s cubic-bezier(.4,0,.2,1);will-change:grid-template-rows}.filter-accordion__panel-content--expanded{grid-template-rows:1fr}.filter-accordion__panel-inner{min-height:0;overflow:hidden}.filter-accordion__panel-content--expanded .filter-accordion__panel-inner{overflow-y:hidden;max-height:var(--max-height, none)}.filter-accordion__search{opacity:0;visibility:hidden;transition:opacity .15s ease-out,visibility 0s .15s}.filter-accordion__panel-content--expanded .filter-accordion__search{opacity:1;visibility:visible;transition:opacity .2s ease-in .1s,visibility 0s 0s}.has-background-hover-light:hover{background-color:#fafafa}.has-border-bottom{border-bottom:1px solid #dbe3ea}.transition-transform{transition:transform .2s ease-out}input[type=checkbox]{height:14px;width:14px;border:1px solid #b5b5b5;border-radius:2px;appearance:none;-webkit-appearance:none;background-color:transparent;accent-color:transparent}input[type=checkbox]:disabled{background-color:#f5f5f5}input[type=checkbox]:checked{background-color:#4c7194;accent-color:#4c7194;appearance:auto;-webkit-appearance:auto}\n"], dependencies: [{ 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.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: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }, { 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"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12621
12613
|
}
|
|
12622
12614
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: FilterAccordionComponent, decorators: [{
|
|
12623
12615
|
type: Component$1,
|
|
@@ -12830,7 +12822,7 @@ class SitesNodesComponent {
|
|
|
12830
12822
|
component.headerKeys.set(this.headerKeys());
|
|
12831
12823
|
}
|
|
12832
12824
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: SitesNodesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12833
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: SitesNodesComponent, isStandalone: true, selector: "he-sites-nodes", inputs: { dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null }, nodeKey: { classPropertyName: "nodeKey", publicName: "nodeKey", isSignal: true, isRequired: false, transformFunction: null }, enableChart: { classPropertyName: "enableChart", publicName: "enableChart", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"columns is-variable is-align-items-center is-2 is-m-0\">\n <div class=\"column\">\n @if (hasData() && selectedView() === View.table) {\n <button class=\"button is-small is-ghost\" (click)=\"showDownload()\">\n <he-svg-icon name=\"download\" />\n </button>\n }\n </div>\n @if (selectedView() === View.table) {\n <div class=\"column is-narrow\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter terms by name\"\n (searchText)=\"filterTerm.set($event)\" />\n </div>\n }\n @if (views()?.length > 1) {\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n @for (view of views(); track view) {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView() === view\"\n (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <he-svg-icon [name]=\"viewIcon[view]\" aria-hidden=\"true\" />\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n }\n </div>\n </div>\n }\n</div>\n\n@if (isNodeKeyAllowed()) {\n @switch (selectedView()) {\n @case (View.table) {\n <div class=\"is-px-3 is-pb-3\">\n @if (hasData()) {\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 class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n @for (node of data(); track node.value.term.name) {\n @if (node.value.visible) {\n <th [attr.title]=\"node.value.term.name\">\n <he-node-link [node]=\"node.value.term\">\n <span\n [innerHtml]=\"\n node.value.term.name | ellipsis: 30 | compound: node.value.term.termType\n \"></span>\n </he-node-link>\n </th>\n }\n }\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n @for (node of data(); track node.value.term.name) {\n @if (node.value.visible) {\n <th [attr.title]=\"node.value.term.units\">\n <span [innerHtml]=\"node.value.term.units | compound: node.value.term.termType\"></span>\n <he-terms-units-description class=\"is-inline-block is-ml-2\" [term]=\"node.value.term\" />\n </th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (site of sites(); track trackById(siteIndex, site); let siteIndex = $index) {\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(site)\">\n <he-node-link [node]=\"site\">\n <span>{{ siteIndex + 1 }}. {{ defaultLabel(site) }}</span>\n </he-node-link>\n </td>\n @for (node of data(); track node.value.term.name) {\n @if (node.value.visible) {\n @let siteData = node.value.values[site['@id']];\n <td class=\"is-nowrap\">\n @if (siteData) {\n <span\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n autoClose=\"outside\"\n popoverClass=\"is-narrow is-overflow-visible\"\n placement=\"left bottom auto\"\n container=\"body\"\n [popoverContext]=\"{ data: siteData, site }\">\n <span pointer>\n {{ siteData.propertyValue | precision: 3 | default: '-' }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"dataState()\"\n [node]=\"siteData.node\"\n key=\"value\" />\n </span>\n }\n @if (isMeasurement() && !siteData) {\n <span>\n <span>-</span>\n @if (siteTooBig(site)) {\n <sup class=\"pl-1\">(1)</sup>\n }\n </span>\n }\n </td>\n }\n }\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n <div class=\"is-flex is-align-items-center is-flex-wrap-wrap is-justify-content-space-between\">\n <he-blank-node-state-notice [dataState]=\"dataState()\" />\n <div class=\"field is-relative is-mb-0\">\n <input\n type=\"checkbox\"\n class=\"switch is-small is-rounded\"\n [id]=\"componentId() + 'hideZeroValues'\"\n name=\"hideZeroValues\"\n [(ngModel)]=\"hideZeroValues\" />\n <label [for]=\"componentId() + 'hideZeroValues'\">\n <span>\n Hide\n <b>0</b>\n values\n </span>\n </label>\n </div>\n @if (sites().length > 1) {\n <div class=\"field is-relative is-mb-0\">\n <input\n type=\"checkbox\"\n class=\"switch is-small is-rounded\"\n [id]=\"componentId() + 'hideIdenticalValues'\"\n name=\"hideIdenticalValues\"\n [(ngModel)]=\"hideIdenticalValues\" />\n <label [for]=\"componentId() + 'hideIdenticalValues'\">\n <span>Hide identical values</span>\n </label>\n </div>\n }\n </div>\n @if (showAreaTooBig()) {\n <p class=\"is-size-7 is-italic\">\n (1) This region is >{{ maxAreaSize }}km2 and is too large to reliably gap fill Measurements.\n </p>\n }\n } @else {\n <div class=\"is-pt-3 has-text-centered\">\n <span>No data available</span>\n @if (filterTerm()) {\n <span class=\"is-pl-1\">matching your search criteria</span>\n }\n <span>.</span>\n @if (showSwitchToRecalculated()) {\n <span>\n Switch to\n <code>recalculated</code>\n version.\n </span>\n }\n </div>\n }\n </div>\n }\n @case (View.chart) {\n @if (nodeKey() === BlankNodesKey.management) {\n <ng-container *ngTemplateOutlet=\"selectSite\" />\n @if (selectedNode()) {\n <div class=\"is-px-3 is-pb-3\">\n <he-sites-management-chart [site]=\"selectedNode()\" />\n </div>\n }\n }\n }\n @case (View.logs) {\n <ng-container *ngTemplateOutlet=\"selectSite\" />\n @if (selectedNode()) {\n <he-node-logs-models\n [node]=\"selectedNode()\"\n [nodeKey]=\"nodeKey()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [filterTermTypes]=\"filterTermTypes()\"\n [filterTermTypesLabel]=\"nodeKey() | capitalize\" />\n }\n }\n }\n}\n\n<ng-template #emptyValue>\n <span>-</span>\n</ng-template>\n\n<ng-template #details let-node=\"site\" let-data=\"data\">\n <p>\n <b>{{ node.name }}</b>\n </p>\n <he-node-value-details\n class=\"is-overflow-visible\"\n [data]=\"data\"\n [dataState]=\"dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"nodeKey()\" />\n</ng-template>\n\n<ng-template #selectSite>\n @if (sites().length > 1) {\n <div class=\"field has-addons pt-2 px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Site</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n @for (value of sites(); track value; let siteIndex = $index) {\n <option [value]=\"siteIndex\">{{ siteIndex + 1 }}. {{ defaultLabel(value) }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation", "svgClass"] }, { kind: "component", type: SearchExtendComponent, selector: "he-search-extend", inputs: ["value", "disabled", "placeholder", "class"], outputs: ["valueChange", "searchText"] }, { kind: "component", type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "dataState", "showExternalLink", "linkClass"] }, { kind: "component", type: TermsUnitsDescriptionComponent, selector: "he-terms-units-description", inputs: ["term", "iconTemplate"] }, { 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: "component", type: BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showDeleted"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "filterTermTypesLabel", "logsKey", "noDataMessage"] }, { kind: "component", type: NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataState", "dataKey"] }, { kind: "pipe", type: CompoundPipe, name: "compound" }, { kind: "pipe", type: DefaultPipe, name: "default" }, { kind: "pipe", type: EllipsisPipe, name: "ellipsis" }, { kind: "pipe", type: PrecisionPipe, name: "precision" }, { kind: "pipe", type: CapitalizePipe, name: "capitalize" }, { kind: "component", type: SitesManagementChartComponent, selector: "he-sites-management-chart", inputs: ["site"] }] }); }
|
|
12825
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: SitesNodesComponent, isStandalone: true, selector: "he-sites-nodes", inputs: { dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null }, nodeKey: { classPropertyName: "nodeKey", publicName: "nodeKey", isSignal: true, isRequired: false, transformFunction: null }, enableChart: { classPropertyName: "enableChart", publicName: "enableChart", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"columns is-variable is-align-items-center is-2 is-m-0\">\n <div class=\"column\">\n @if (hasData() && selectedView() === View.table) {\n <button class=\"button is-small is-ghost\" (click)=\"showDownload()\">\n <he-svg-icon name=\"download\" />\n </button>\n }\n </div>\n @if (selectedView() === View.table) {\n <div class=\"column is-narrow\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter terms by name\"\n (searchText)=\"filterTerm.set($event)\" />\n </div>\n }\n @if (views()?.length > 1) {\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n @for (view of views(); track view) {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView() === view\"\n (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <he-svg-icon [name]=\"viewIcon[view]\" aria-hidden=\"true\" />\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n }\n </div>\n </div>\n }\n</div>\n\n@if (isNodeKeyAllowed()) {\n @switch (selectedView()) {\n @case (View.table) {\n <div class=\"is-px-3 is-pb-3\">\n @if (hasData()) {\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 class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n @for (node of data(); track node.value.term.name) {\n @if (node.value.visible) {\n <th [attr.title]=\"node.value.term.name\">\n <he-node-link [node]=\"node.value.term\">\n <span\n [innerHtml]=\"\n node.value.term.name | ellipsis: 30 | compound: node.value.term.termType\n \"></span>\n </he-node-link>\n </th>\n }\n }\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n @for (node of data(); track node.value.term.name) {\n @if (node.value.visible) {\n <th [attr.title]=\"node.value.term.units\">\n <span [innerHtml]=\"node.value.term.units | compound: node.value.term.termType\"></span>\n <he-terms-units-description class=\"is-inline-block is-ml-2\" [term]=\"node.value.term\" />\n </th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (site of sites(); track trackById(siteIndex, site); let siteIndex = $index) {\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(site)\">\n <he-node-link [node]=\"site\">\n <span>{{ siteIndex + 1 }}. {{ defaultLabel(site) }}</span>\n </he-node-link>\n </td>\n @for (node of data(); track node.value.term.name) {\n @if (node.value.visible) {\n @let siteData = node.value.values[site['@id']];\n <td class=\"is-nowrap\">\n @if (siteData) {\n <span\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n autoClose=\"outside\"\n popoverClass=\"is-narrow is-overflow-visible\"\n placement=\"left bottom auto\"\n container=\"body\"\n [popoverContext]=\"{ data: siteData, site }\">\n <span pointer>\n {{ siteData.propertyValue | precision: 3 | default: '-' }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"dataState()\"\n [node]=\"siteData.node\"\n key=\"value\" />\n </span>\n }\n @if (isMeasurement() && !siteData) {\n <span>\n <span>-</span>\n @if (siteTooBig(site)) {\n <sup class=\"pl-1\">(1)</sup>\n }\n </span>\n }\n </td>\n }\n }\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n <div class=\"is-flex is-align-items-center is-flex-wrap-wrap is-justify-content-space-between\">\n <he-blank-node-state-notice [dataState]=\"dataState()\" />\n <div class=\"field is-relative is-mb-0\">\n <input\n type=\"checkbox\"\n class=\"switch is-small is-rounded\"\n [id]=\"componentId() + 'hideZeroValues'\"\n name=\"hideZeroValues\"\n [(ngModel)]=\"hideZeroValues\" />\n <label [for]=\"componentId() + 'hideZeroValues'\">\n <span>\n Hide\n <b>0</b>\n values\n </span>\n </label>\n </div>\n @if (sites().length > 1) {\n <div class=\"field is-relative is-mb-0\">\n <input\n type=\"checkbox\"\n class=\"switch is-small is-rounded\"\n [id]=\"componentId() + 'hideIdenticalValues'\"\n name=\"hideIdenticalValues\"\n [(ngModel)]=\"hideIdenticalValues\" />\n <label [for]=\"componentId() + 'hideIdenticalValues'\">\n <span>Hide identical values</span>\n </label>\n </div>\n }\n </div>\n @if (showAreaTooBig()) {\n <p class=\"is-size-7 is-italic\">\n (1) This region is >{{ maxAreaSize }}km2 and is too large to reliably gap fill Measurements.\n </p>\n }\n } @else {\n <div class=\"is-pt-3 has-text-centered\">\n <span>No data available</span>\n @if (filterTerm()) {\n <span class=\"is-pl-1\">matching your search criteria</span>\n }\n <span>.</span>\n @if (showSwitchToRecalculated()) {\n <span>\n Switch to\n <code>recalculated</code>\n version.\n </span>\n }\n </div>\n }\n </div>\n }\n @case (View.chart) {\n @if (nodeKey() === BlankNodesKey.management) {\n <ng-container *ngTemplateOutlet=\"selectSite\" />\n @if (selectedNode()) {\n <div class=\"is-px-3 is-pb-3\">\n <he-sites-management-chart [site]=\"selectedNode()\" />\n </div>\n }\n }\n }\n @case (View.logs) {\n <ng-container *ngTemplateOutlet=\"selectSite\" />\n @if (selectedNode()) {\n <he-node-logs-models\n [node]=\"selectedNode()\"\n [nodeKey]=\"nodeKey()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [filterTermTypes]=\"filterTermTypes()\"\n [filterTermTypesLabel]=\"nodeKey() | capitalize\" />\n }\n }\n }\n}\n\n<ng-template #emptyValue>\n <span>-</span>\n</ng-template>\n\n<ng-template #details let-node=\"site\" let-data=\"data\">\n <p>\n <b>{{ node.name }}</b>\n </p>\n <he-node-value-details\n class=\"is-overflow-visible\"\n [data]=\"data\"\n [dataState]=\"dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"nodeKey()\" />\n</ng-template>\n\n<ng-template #selectSite>\n @if (sites().length > 1) {\n <div class=\"field has-addons pt-2 px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Site</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n @for (value of sites(); track value; let siteIndex = $index) {\n <option [value]=\"siteIndex\">{{ siteIndex + 1 }}. {{ defaultLabel(value) }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }, { kind: "component", type: SearchExtendComponent, selector: "he-search-extend", inputs: ["value", "disabled", "placeholder", "class"], outputs: ["valueChange", "searchText"] }, { kind: "component", type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "dataState", "showExternalLink", "linkClass"] }, { kind: "component", type: TermsUnitsDescriptionComponent, selector: "he-terms-units-description", inputs: ["term", "iconTemplate"] }, { 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: "component", type: BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showDeleted"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "filterTermTypesLabel", "logsKey", "noDataMessage"] }, { kind: "component", type: NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataState", "dataKey"] }, { kind: "pipe", type: CompoundPipe, name: "compound" }, { kind: "pipe", type: DefaultPipe, name: "default" }, { kind: "pipe", type: EllipsisPipe, name: "ellipsis" }, { kind: "pipe", type: PrecisionPipe, name: "precision" }, { kind: "pipe", type: CapitalizePipe, name: "capitalize" }, { kind: "component", type: SitesManagementChartComponent, selector: "he-sites-management-chart", inputs: ["site"] }] }); }
|
|
12834
12826
|
}
|
|
12835
12827
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: SitesNodesComponent, decorators: [{
|
|
12836
12828
|
type: Component$1,
|
|
@@ -12868,7 +12860,7 @@ class TermsPropertyContentComponent {
|
|
|
12868
12860
|
return keys.includes(key);
|
|
12869
12861
|
}
|
|
12870
12862
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: TermsPropertyContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12871
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: TermsPropertyContentComponent, isStandalone: true, selector: "he-terms-property-content", inputs: { property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, showTermName: { classPropertyName: "showTermName", publicName: "showTermName", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (property().term) {\n @if (showTermName()) {\n <a class=\"pr-2\" [routerLink]=\"['/', 'term', property().term['@id']]\" target=\"_blank\">\n <b>{{ property().term.name }}:</b>\n </a>\n }\n @if (property().key?.name) {\n <span class=\"pr-1\">\n <span>{{ property().key.name }}</span>\n @if (hasKey('value')) {\n ,\n <span class=\"has-text-underline\">value</span>\n :\n }\n </span>\n }\n @if (hasKey('value')) {\n <ng-container\n *ngTemplateOutlet=\"\n property().value.toString().indexOf('http') === 0 ? externalLink : defaultValue;\n context: { $implicit: property().value }\n \" />\n @if (hasKey('sd')) {\n <span class=\"px-2\">\u00B1</span>\n <ng-container *ngTemplateOutlet=\"defaultValue; context: { $implicit: property().sd }\" />\n }\n @if (hasKey('min') && hasKey('max')) {\n <span class=\"is-pl-2\">(</span>\n <ng-container *ngTemplateOutlet=\"defaultValue; context: { $implicit: property().min }\" />\n <span class=\"is-px-2\">-</span>\n <ng-container *ngTemplateOutlet=\"defaultValue; context: { $implicit: property().max }\" />\n <span>)</span>\n }\n }\n @if (property().term.units) {\n <span class=\"is-ml-1\" [innerHtml]=\"property().term.units | compound: property().term.termType\"></span>\n <he-terms-units-description class=\"is-inline-block is-ml-2\" [term]=\"property().term\" />\n }\n @if (hasKey('source')) {\n <span class=\"is-px-1\">(Source:</span>\n <markdown class=\"is-inline-block\" [data]=\"property().source\" />\n <span>)</span>\n }\n}\n\n<ng-template #defaultValue let-value>\n @if (isEmpty(value)) {\n <span>{{ 'N/A' }}</span>\n } @else {\n @if (isNumber(value)) {\n <span>{{ value | precision: 3 }}</span>\n } @else {\n <span>{{ value }}</span>\n }\n }\n</ng-template>\n\n<ng-template #externalLink let-value>\n <a [href]=\"value\" target=\"_blank\">\n <span>{{ value }}</span>\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n </a>\n</ng-template>\n", styles: ["markdown ::ng-deep *{display:inline-block}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }, { kind: "component", type: TermsUnitsDescriptionComponent, selector: "he-terms-units-description", inputs: ["term", "iconTemplate"] }, { kind: "pipe", type: CompoundPipe, name: "compound" }, { kind: "pipe", type: PrecisionPipe, name: "precision" }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
12863
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: TermsPropertyContentComponent, isStandalone: true, selector: "he-terms-property-content", inputs: { property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, showTermName: { classPropertyName: "showTermName", publicName: "showTermName", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (property().term) {\n @if (showTermName()) {\n <a class=\"pr-2\" [routerLink]=\"['/', 'term', property().term['@id']]\" target=\"_blank\">\n <b>{{ property().term.name }}:</b>\n </a>\n }\n @if (property().key?.name) {\n <span class=\"pr-1\">\n <span>{{ property().key.name }}</span>\n @if (hasKey('value')) {\n ,\n <span class=\"has-text-underline\">value</span>\n :\n }\n </span>\n }\n @if (hasKey('value')) {\n <ng-container\n *ngTemplateOutlet=\"\n property().value.toString().indexOf('http') === 0 ? externalLink : defaultValue;\n context: { $implicit: property().value }\n \" />\n @if (hasKey('sd')) {\n <span class=\"px-2\">\u00B1</span>\n <ng-container *ngTemplateOutlet=\"defaultValue; context: { $implicit: property().sd }\" />\n }\n @if (hasKey('min') && hasKey('max')) {\n <span class=\"is-pl-2\">(</span>\n <ng-container *ngTemplateOutlet=\"defaultValue; context: { $implicit: property().min }\" />\n <span class=\"is-px-2\">-</span>\n <ng-container *ngTemplateOutlet=\"defaultValue; context: { $implicit: property().max }\" />\n <span>)</span>\n }\n }\n @if (property().term.units) {\n <span class=\"is-ml-1\" [innerHtml]=\"property().term.units | compound: property().term.termType\"></span>\n <he-terms-units-description class=\"is-inline-block is-ml-2\" [term]=\"property().term\" />\n }\n @if (hasKey('source')) {\n <span class=\"is-px-1\">(Source:</span>\n <markdown class=\"is-inline-block\" [data]=\"property().source\" />\n <span>)</span>\n }\n}\n\n<ng-template #defaultValue let-value>\n @if (isEmpty(value)) {\n <span>{{ 'N/A' }}</span>\n } @else {\n @if (isNumber(value)) {\n <span>{{ value | precision: 3 }}</span>\n } @else {\n <span>{{ value }}</span>\n }\n }\n</ng-template>\n\n<ng-template #externalLink let-value>\n <a [href]=\"value\" target=\"_blank\">\n <span>{{ value }}</span>\n <he-svg-icon name=\"external-link\" class=\"ml-2\" />\n </a>\n</ng-template>\n", styles: ["markdown ::ng-deep *{display:inline-block}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }, { kind: "component", type: TermsUnitsDescriptionComponent, selector: "he-terms-units-description", inputs: ["term", "iconTemplate"] }, { kind: "pipe", type: CompoundPipe, name: "compound" }, { kind: "pipe", type: PrecisionPipe, name: "precision" }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12872
12864
|
}
|
|
12873
12865
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: TermsPropertyContentComponent, decorators: [{
|
|
12874
12866
|
type: Component$1,
|
|
@@ -12905,7 +12897,7 @@ class TermsSubClassOfContentComponent {
|
|
|
12905
12897
|
this.open = signal(false);
|
|
12906
12898
|
}
|
|
12907
12899
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: TermsSubClassOfContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12908
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: TermsSubClassOfContentComponent, isStandalone: true, selector: "he-terms-sub-class-of-content", inputs: { term: { classPropertyName: "term", publicName: "term", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div>\n <a (click)=\"open.set(!open())\">\n @if (loading()) {\n <he-svg-icon name=\"loading\" animation=\"spin\" size=\"24\" />\n } @else {\n <he-svg-icon [name]=\"open() ? 'minus' : 'plus'\" />\n }\n <he-node-link class=\"pl-2\" [node]=\"term()\" [showExternalLink]=\"true\" />\n </a>\n</div>\n\n@if (results()?.length && open()) {\n <ul class=\"is-ml-2\">\n @for (result of results(); track result) {\n <li>\n <he-terms-sub-class-of-content [term]=\"result\" />\n </li>\n }\n </ul>\n}\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: TermsSubClassOfContentComponent, selector: "he-terms-sub-class-of-content", inputs: ["term"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"
|
|
12900
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: TermsSubClassOfContentComponent, isStandalone: true, selector: "he-terms-sub-class-of-content", inputs: { term: { classPropertyName: "term", publicName: "term", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div>\n <a (click)=\"open.set(!open())\">\n @if (loading()) {\n <he-svg-icon name=\"loading\" animation=\"spin\" size=\"24\" />\n } @else {\n <he-svg-icon [name]=\"open() ? 'minus' : 'plus'\" />\n }\n <he-node-link class=\"pl-2\" [node]=\"term()\" [showExternalLink]=\"true\" />\n </a>\n</div>\n\n@if (results()?.length && open()) {\n <ul class=\"is-ml-2\">\n @for (result of results(); track result) {\n <li>\n <he-terms-sub-class-of-content [term]=\"result\" />\n </li>\n }\n </ul>\n}\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: TermsSubClassOfContentComponent, selector: "he-terms-sub-class-of-content", inputs: ["term"] }, { kind: "component", type: HESvgIconComponent, selector: "he-svg-icon", inputs: ["name", "size", "animation"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "dataState", "showExternalLink", "linkClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12909
12901
|
}
|
|
12910
12902
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: TermsSubClassOfContentComponent, decorators: [{
|
|
12911
12903
|
type: Component$1,
|
|
@@ -12916,5 +12908,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImpor
|
|
|
12916
12908
|
* Generated bundle index. Do not edit.
|
|
12917
12909
|
*/
|
|
12918
12910
|
|
|
12919
|
-
export { ARRAY_DELIMITER, ApplyPurePipe, BarChartComponent, BibliographiesSearchConfirmComponent, BlankNodeStateComponent, BlankNodeStateNoticeComponent, BlankNodeValueDeltaComponent, CapitalizePipe, ChartComponent, ChartConfigurationDirective, ClickOutsideDirective, ClipboardComponent, CollapsibleBoxComponent, ColorPalette, CompoundDirective, CompoundPipe, CycleNodesKeyGroup, CyclesCompletenessComponent, CyclesEmissionsChartComponent, CyclesFunctionalUnitMeasureComponent, CyclesNodesComponent, CyclesNodesTimelineComponent, CyclesResultComponent, DataTableComponent, DefaultPipe, DeltaColour, DistributionChartComponent, DrawerContainerComponent, DurationPipe, EllipsisPipe, EngineModelsLinkComponent, EngineModelsLookupInfoComponent, EngineModelsStageComponent, EngineModelsStageDeepComponent, EngineModelsStageDeepService, EngineModelsVersionLinkComponent, EngineOrchestratorEditComponent, EngineRequirementsFormComponent, FileSizePipe, FilesErrorSummaryComponent, FilesFormComponent, FilesFormEditableComponent, FilesUploadErrorsComponent, FilterAccordionComponent, GUIDE_ENABLED, GetPipe, GlossaryMigrationFormat, GuideOverlayComponent, HESvgIconComponent, HE_API_BASE_URL, HE_CALCULATIONS_BASE_URL, HE_MAP_LOADED, HeAuthService, HeCommonService, HeEngineService, HeGlossaryService, HeMendeleyService, HeNodeCsvService, HeNodeService, HeNodeStoreService, HeSchemaService, HeSearchService,
|
|
12911
|
+
export { ARRAY_DELIMITER, ApplyPurePipe, BarChartComponent, BibliographiesSearchConfirmComponent, BlankNodeStateComponent, BlankNodeStateNoticeComponent, BlankNodeValueDeltaComponent, CapitalizePipe, ChartComponent, ChartConfigurationDirective, ClickOutsideDirective, ClipboardComponent, CollapsibleBoxComponent, ColorPalette, CompoundDirective, CompoundPipe, CycleNodesKeyGroup, CyclesCompletenessComponent, CyclesEmissionsChartComponent, CyclesFunctionalUnitMeasureComponent, CyclesNodesComponent, CyclesNodesTimelineComponent, CyclesResultComponent, DataTableComponent, DefaultPipe, DeltaColour, DistributionChartComponent, DrawerContainerComponent, DurationPipe, EllipsisPipe, EngineModelsLinkComponent, EngineModelsLookupInfoComponent, EngineModelsStageComponent, EngineModelsStageDeepComponent, EngineModelsStageDeepService, EngineModelsVersionLinkComponent, EngineOrchestratorEditComponent, EngineRequirementsFormComponent, FileSizePipe, FilesErrorSummaryComponent, FilesFormComponent, FilesFormEditableComponent, FilesUploadErrorsComponent, FilterAccordionComponent, GUIDE_ENABLED, GetPipe, GlossaryMigrationFormat, GuideOverlayComponent, HESvgIconComponent, HE_API_BASE_URL, HE_CALCULATIONS_BASE_URL, HE_MAP_LOADED, HeAuthService, HeCommonService, HeEngineService, HeGlossaryService, HeMendeleyService, HeNodeCsvService, HeNodeService, HeNodeStoreService, HeSchemaService, HeSearchService, HeToastService, ImpactAssessmentsGraphComponent, ImpactAssessmentsIndicatorBreakdownChartComponent, ImpactAssessmentsIndicatorsChartComponent, ImpactAssessmentsProductsComponent, IsArrayPipe, IsObjectPipe, IssueConfirmComponent, KeyToLabelPipe, Level, LineChartComponent, LinkKeyValueComponent, LogStatus, MAX_RESULTS, MapsDrawingComponent, MapsDrawingConfirmComponent, MendeleySearchResult, MobileShellComponent, NavigationMenuComponent, NoExtPipe, NodeAggregatedComponent, NodeAggregatedInfoComponent, NodeAggregatedQualityScoreComponent, NodeCsvExportConfirmComponent, NodeCsvPreviewComponent, NodeCsvSelectHeadersComponent, NodeIconComponent, NodeJsonldComponent, NodeJsonldSchemaComponent, NodeKeyState, NodeLinkComponent, NodeLogsFileComponent, NodeLogsModelsComponent, NodeLogsTimeComponent, NodeMissingLookupFactorsComponent, NodeQualityScore, NodeRecommendationsComponent, NodeSelectComponent, NodeValueDetailsComponent, PluralizePipe, PopoverComponent, PopoverConfirmComponent, PrecisionPipe, RelatedNodeResult, RemoveMarkdownPipe, Repository, ResizedDirective, ResizedEvent, ResponsiveService, SchemaInfoComponent, SchemaVersionLinkComponent, SearchExtendComponent, ShelfDialogComponent, ShellComponent, SitesManagementChartComponent, SitesMapsComponent, SitesNodesComponent, SkeletonTextComponent, SocialTagsComponent, SortByPipe, SortSelectComponent, TagsInputDirective, Template, TermsPropertyContentComponent, TermsSubClassOfContentComponent, TermsUnitsDescriptionComponent, ThousandSuffixesPipe, ThousandsPipe, TimesPipe, ToastComponent, UncapitalizePipe, addPolygonToFeature, allCountriesQuery, allGroups, allOptions, arrayValue, availableProperties, baseApiUrl, baseUrl, bottom, buildSummary, bytesSize, calculateCycleDuration, calculateCycleDurationEnabled, calculateCycleStartDate, calculateCycleStartDateEnabled, capitalize, changelogUrl, clustererImage, code, compoundToHtml, computeKeys, computeTerms, contactUsEmail, contactUsLink, coordinatesToPoint, copyObject, countriesQuery, createMarker, cropsQuery, d3ellipse, d3wrap, dataPathLabel, dataPathToKey, defaultFeature, defaultLabel, defaultSuggestionType, defaultSvgIconSize, definitionToSchemaType, distinctUntilChangedDeep, ellipsis, engineGitBaseUrl, engineGitUrl, errorHasError, errorHasWarning, errorText, evaluateSuccess, externalLink, externalNodeLink, fillColor, fillStyle, filterBlankNode$1 as filterBlankNode, filterError, filterParams, findConfigModels, findMatchingModel, findModels, findNodeModel, findOrchestratorModel, findProperty, findPropertyById, flatFilterData, flatFilterNode, formatCustomErrorMessage, formatDate, formatError, formatPropertyError, formatter, getColor, getDatesBetween, gitBranch, gitHome, gitlabRawUrl, glossaryBaseUrl, glossaryLink, groupChanged, groupLogsByModel, groupLogsByTerm, groupNodesByTerm, groupdLogsByKey, grouppedKeys, grouppedValueKeys, guideModelUrl, guideNamespace, guidePageId, handleAPIError, handleGuideEvent, hasError, hasValidationError, hasWarning, ignoreKeys$2 as ignoreKeys, initialFilterState, inputGroupsTermTypes, isAddPropertyEnabled, isChrome, isDateBetween, isEqual, isExternal, isGroupVisible, isKeyClosedVisible, isKeyHidden, isMaxStage, isMethodModelAllowed, isMigrationError, isMissingOneOfError, isMissingPropertyError, isNonNodeModelKey, isSchemaIri, isScrolledBelow, isState, isTermTypeAllowed, isValidKey, keyToDataPath, levels, listColor, listColorContinuous, loadMapApi, loadSvgSprite, localStorageSignal, locationQuery, logToCsv$1 as logToCsv, logValueArray, logsKey, lookupUrl, mapFilterData, mapsUrl, markerIcon, markerPie, matchAggregatedQuery, matchAggregatedValidatedQuery, matchBoolPrefixQuery, matchCountry, matchExactQuery, matchGlobalRegion, matchId, matchNameNormalized, matchNestedKey, matchPhrasePrefixQuery, matchPhraseQuery, matchPrimaryProductQuery, matchQuery, matchRegex, matchRegion, matchTermType, matchType, maxAreaSize, measurementValue, mergeDataWithHeaders, methodTierOrder, migrationErrorMessage, migrationsUrl, missingNodeErrors, modelCount, modelKeyParams, modelParams, models, multiMatchQuery, nestedProperty, nestingEnabled, nestingTypeEnabled, nodeAvailableProperties, nodeColours$1 as nodeColours, nodeDataState, nodeId, nodeLink, nodeLinkEnabled, nodeLinkTypeEnabled, nodeLogsUrl, nodeQualityScoreColor, nodeQualityScoreLevel, nodeQualityScoreMaxDefault, nodeQualityScoreOrder, nodeToAggregationFilename, nodeType, nodeTypeDataState, nodeUrl, nodeUrlParams, nodeVersion, numberGte, optionsFromGroup, parentKey, parentProperty, parseData, parseDataPath, parseLines, parseMessage$1 as parseMessage, parseNewValue, pluralize, pointToCoordinates, polygonBounds, polygonToCoordinates, polygonToMap, polygonsFromFeature, populateWithTrackIdsFilterData, postGuideEvent, primaryProduct, productsQuery, propertyError, propertyId, recursiveProperties, refToSchemaType, refreshPropertyKeys, regionsQuery, repeat, reportIssueLink, reportIssueUrl, safeJSONParse, safeJSONStringify, schemaBaseUrl, schemaDataBaseUrl, schemaLink, schemaRequiredProperties, schemaTypeToDefaultValue, scrollToEl, scrollTop, searchFilterData, searchableTypes, siblingProperty, singleProperty, siteTooBig, siteTypeToIcon, sortProperties, sortedDates, strokeColor, strokeStyle, suggestMatchQuery, suggestQuery, takeAfterViewInit, termLocation, termLocationName, termProperties, termTypeLabel, toSnakeCase, toThousands, typeToNewProperty, typeaheadFocus, uncapitalize, uniqueDatesBetween, updateProperties, valueTypeToDefault, waitFor, wildcardQuery };
|
|
12920
12912
|
//# sourceMappingURL=hestia-earth-ui-components.mjs.map
|