@testgorilla/tgo-ui 4.2.4 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/accordion/accordion.component.d.ts +2 -2
- package/components/accordion/accordion.component.module.d.ts +2 -2
- package/components/accordion/index.d.ts +5 -0
- package/components/accordion/public-api.d.ts +4 -0
- package/components/ai-feedback/ai-feedback.module.d.ts +2 -2
- package/components/ai-feedback/index.d.ts +5 -0
- package/components/ai-feedback/public-api.d.ts +4 -0
- package/components/alert-banner/alert-banner.component.d.ts +3 -3
- package/components/alert-banner/alert-banner.component.module.d.ts +3 -3
- package/components/alert-banner/index.d.ts +5 -0
- package/components/alert-banner/public-api.d.ts +4 -0
- package/components/autocomplete/autocomplete.component.d.ts +2 -2
- package/components/autocomplete/autocomplete.component.module.d.ts +9 -10
- package/components/autocomplete/index.d.ts +5 -0
- package/components/autocomplete/public-api.d.ts +4 -0
- package/components/avatar/avatar.component.d.ts +2 -2
- package/components/avatar/avatar.component.module.d.ts +4 -4
- package/components/avatar/avatar.model.d.ts +1 -1
- package/components/avatar/index.d.ts +5 -0
- package/components/avatar/public-api.d.ts +4 -0
- package/components/badge/badge.component.d.ts +2 -2
- package/components/badge/badge.component.module.d.ts +1 -1
- package/components/badge/index.d.ts +5 -0
- package/components/badge/public-api.d.ts +4 -0
- package/components/breadcrumb/breadcrumb.component.d.ts +2 -2
- package/components/breadcrumb/breadcrumb.component.module.d.ts +8 -9
- package/components/breadcrumb/index.d.ts +5 -0
- package/components/breadcrumb/public-api.d.ts +4 -0
- package/components/button/button.component.d.ts +2 -2
- package/components/button/button.component.module.d.ts +4 -5
- package/components/button/button.model.d.ts +1 -1
- package/components/button/index.d.ts +5 -0
- package/components/button/public-api.d.ts +5 -0
- package/components/card/card.component.d.ts +2 -2
- package/components/card/card.component.module.d.ts +1 -1
- package/components/card/index.d.ts +5 -0
- package/components/card/public-api.d.ts +4 -0
- package/components/checkbox/checkbox.component.d.ts +2 -2
- package/components/checkbox/checkbox.component.module.d.ts +6 -8
- package/components/checkbox/index.d.ts +5 -0
- package/components/checkbox/public-api.d.ts +4 -0
- package/components/checklist/checklist.component.d.ts +1 -2
- package/components/checklist/index.d.ts +5 -0
- package/components/checklist/public-api.d.ts +3 -0
- package/{utils → components/core}/alert-bars.utils.d.ts +1 -2
- package/components/core/application-theme.model.d.ts +7 -0
- package/components/core/color-contrast.d.ts +28 -0
- package/components/core/index.d.ts +5 -0
- package/components/core/link-target.model.d.ts +1 -0
- package/components/core/public-api.d.ts +25 -0
- package/components/core/select-text.directive.d.ts +19 -0
- package/{pipes → components/core}/truncate.pipe.d.ts +1 -1
- package/{pipes → components/core}/ui-translate.pipe.d.ts +1 -1
- package/components/datepicker/datepicker.component.d.ts +1 -1
- package/components/datepicker/datepicker.component.module.d.ts +4 -5
- package/components/datepicker/index.d.ts +5 -0
- package/components/datepicker/public-api.d.ts +6 -0
- package/components/{confirm-dialog → dialog/confirm-dialog}/confirm-dialog.component.d.ts +4 -4
- package/components/{confirm-dialog → dialog/confirm-dialog}/confirm-dialog.component.module.d.ts +3 -3
- package/components/{confirm-dialog → dialog/confirm-dialog}/confirm-dialog.model.d.ts +3 -3
- package/components/dialog/dialog-custom/dialog-custom.component.d.ts +22 -0
- package/components/dialog/dialog-custom/dialog-custom.component.module.d.ts +10 -0
- package/components/dialog/dialog.component.d.ts +4 -4
- package/components/dialog/dialog.component.module.d.ts +2 -2
- package/components/dialog/dialog.model.d.ts +1 -1
- package/components/dialog/dialog.service.d.ts +1 -1
- package/components/dialog/index.d.ts +5 -0
- package/components/dialog/public-api.d.ts +10 -0
- package/components/divider/divider.component.d.ts +1 -1
- package/components/divider/index.d.ts +5 -0
- package/components/divider/public-api.d.ts +4 -0
- package/components/donut-chart/donut-chart.component.d.ts +1 -1
- package/components/donut-chart/index.d.ts +5 -0
- package/components/donut-chart/public-api.d.ts +3 -0
- package/components/dropdown/dropdown.component.d.ts +2 -2
- package/components/dropdown/dropdown.component.module.d.ts +5 -6
- package/components/dropdown/index.d.ts +5 -0
- package/components/dropdown/public-api.d.ts +4 -0
- package/components/elevation-shadow/elevation-shadow.component.d.ts +1 -1
- package/components/elevation-shadow/index.d.ts +5 -0
- package/components/elevation-shadow/public-api.d.ts +3 -0
- package/components/empty-state/empty-state.component.d.ts +4 -4
- package/components/empty-state/empty-state.component.module.d.ts +3 -3
- package/components/empty-state/index.d.ts +5 -0
- package/components/empty-state/public-api.d.ts +4 -0
- package/components/field/field.component.d.ts +4 -4
- package/components/field/field.component.module.d.ts +6 -8
- package/components/field/index.d.ts +5 -0
- package/components/field/public-api.d.ts +4 -0
- package/components/file-upload/file-upload.component.d.ts +1 -2
- package/components/file-upload/file-upload.component.module.d.ts +4 -4
- package/components/file-upload/index.d.ts +5 -0
- package/components/file-upload/public-api.d.ts +3 -0
- package/components/filter-button/filter-button.component.d.ts +3 -3
- package/components/filter-button/filter-button.component.module.d.ts +7 -8
- package/components/filter-button/filter-button.model.d.ts +1 -1
- package/components/filter-button/index.d.ts +5 -0
- package/components/filter-button/public-api.d.ts +4 -0
- package/components/gaussian-chart/gaussian-chart.component.d.ts +1 -1
- package/components/gaussian-chart/gaussian-chart.module.d.ts +3 -4
- package/components/gaussian-chart/index.d.ts +5 -0
- package/components/gaussian-chart/public-api.d.ts +2 -0
- package/components/icon/icon.component.d.ts +2 -2
- package/components/icon/index.d.ts +5 -0
- package/components/icon/public-api.d.ts +6 -0
- package/components/icon-label/icon-label.component.d.ts +2 -2
- package/components/icon-label/icon-label.component.module.d.ts +1 -1
- package/components/icon-label/index.d.ts +5 -0
- package/components/icon-label/public-api.d.ts +2 -0
- package/components/inline-field/index.d.ts +5 -0
- package/components/inline-field/inline-field.component.d.ts +5 -5
- package/components/inline-field/inline-field.component.module.d.ts +3 -3
- package/components/inline-field/inline-field.model.d.ts +1 -1
- package/components/inline-field/public-api.d.ts +4 -0
- package/components/logo/index.d.ts +5 -0
- package/components/logo/logo.component.d.ts +1 -1
- package/components/logo/public-api.d.ts +4 -0
- package/components/media-card/index.d.ts +5 -0
- package/components/media-card/public-api.d.ts +1 -0
- package/components/media-dialog/index.d.ts +5 -0
- package/components/media-dialog/public-api.d.ts +2 -0
- package/components/multi-input/index.d.ts +5 -0
- package/components/multi-input/multi-input.component.module.d.ts +7 -8
- package/components/multi-input/public-api.d.ts +5 -0
- package/components/navbar/index.d.ts +5 -0
- package/components/navbar/mobile-navbar-side-sheet/mobile-navbar-side-sheet.component.d.ts +2 -2
- package/components/navbar/navbar.component.d.ts +4 -4
- package/components/navbar/navbar.component.module.d.ts +7 -7
- package/components/navbar/navbar.model.d.ts +2 -2
- package/components/navbar/public-api.d.ts +5 -0
- package/components/overflow-menu/index.d.ts +5 -0
- package/components/overflow-menu/overflow-menu.component.d.ts +3 -3
- package/components/overflow-menu/overflow-menu.component.module.d.ts +4 -5
- package/components/overflow-menu/overflow-menu.model.d.ts +1 -1
- package/components/overflow-menu/public-api.d.ts +4 -0
- package/components/page-header/index.d.ts +5 -0
- package/components/page-header/page-header.component.d.ts +1 -1
- package/components/page-header/page-header.component.module.d.ts +2 -2
- package/components/page-header/public-api.d.ts +3 -0
- package/components/paginator/index.d.ts +5 -0
- package/components/paginator/paginator.component.d.ts +1 -1
- package/components/paginator/public-api.d.ts +3 -0
- package/components/password-criteria/index.d.ts +5 -0
- package/components/password-criteria/password.component.module.d.ts +4 -4
- package/components/password-criteria/public-api.d.ts +3 -0
- package/components/password-strength/index.d.ts +5 -0
- package/components/password-strength/password-strength.component.d.ts +2 -2
- package/components/password-strength/password-strength.component.module.d.ts +3 -3
- package/components/password-strength/public-api.d.ts +3 -0
- package/components/phone-input/index.d.ts +5 -0
- package/components/phone-input/phone-input.component.d.ts +1 -1
- package/components/phone-input/phone-input.component.module.d.ts +5 -6
- package/components/phone-input/public-api.d.ts +5 -0
- package/components/progress-bar/index.d.ts +5 -0
- package/components/progress-bar/progress-bar.component.d.ts +1 -1
- package/components/progress-bar/progress-bar.component.module.d.ts +1 -1
- package/components/progress-bar/public-api.d.ts +3 -0
- package/components/prompt/index.d.ts +5 -0
- package/components/prompt/prompt.component.d.ts +2 -2
- package/components/prompt/prompt.module.d.ts +8 -8
- package/components/prompt/public-api.d.ts +4 -0
- package/components/radial-progress/index.d.ts +5 -0
- package/components/radial-progress/public-api.d.ts +4 -0
- package/components/radial-progress/radial-progress.component.d.ts +2 -2
- package/components/radial-progress/radial-progress.component.module.d.ts +1 -1
- package/components/radio-button/index.d.ts +5 -0
- package/components/radio-button/public-api.d.ts +4 -0
- package/components/radio-button/radio-button.component.d.ts +2 -2
- package/components/radio-button/radio-button.component.module.d.ts +2 -2
- package/components/rating/index.d.ts +5 -0
- package/components/rating/public-api.d.ts +3 -0
- package/components/rating/rating.component.d.ts +1 -1
- package/components/scale/index.d.ts +5 -0
- package/components/scale/public-api.d.ts +3 -0
- package/components/scale/scale.component.d.ts +1 -1
- package/components/scale-table/index.d.ts +5 -0
- package/components/scale-table/public-api.d.ts +3 -0
- package/components/scale-table/scale-table.component.d.ts +1 -1
- package/components/segmented-bar/index.d.ts +5 -0
- package/components/segmented-bar/public-api.d.ts +4 -0
- package/components/segmented-bar/segmented-bar.component.d.ts +1 -1
- package/components/segmented-bar/segmented-bar.component.module.d.ts +2 -2
- package/components/segmented-bar/segmented-bar.model.d.ts +1 -1
- package/components/segmented-button/index.d.ts +5 -0
- package/components/segmented-button/public-api.d.ts +4 -0
- package/components/segmented-button/segmented-button.component.d.ts +1 -1
- package/components/selectable-card/index.d.ts +5 -0
- package/components/selectable-card/public-api.d.ts +2 -0
- package/components/selectable-card/selectable-card.component.d.ts +1 -1
- package/components/selectable-card/selectable-card.component.module.d.ts +2 -2
- package/components/side-panel/index.d.ts +5 -0
- package/components/side-panel/public-api.d.ts +5 -0
- package/components/side-panel/side-panel.component.d.ts +1 -1
- package/components/side-sheet/index.d.ts +5 -0
- package/components/side-sheet/public-api.d.ts +4 -0
- package/components/side-sheet/side-sheet.component.d.ts +1 -1
- package/components/side-sheet/side-sheet.component.module.d.ts +4 -4
- package/components/skeleton/index.d.ts +5 -0
- package/components/skeleton/public-api.d.ts +3 -0
- package/components/skeleton/skeleton.component.d.ts +2 -2
- package/components/slider/index.d.ts +5 -0
- package/components/slider/public-api.d.ts +4 -0
- package/components/slider/slider.component.d.ts +1 -1
- package/components/snackbar/index.d.ts +5 -0
- package/components/snackbar/public-api.d.ts +5 -0
- package/components/snackbar/snackbar.component.d.ts +4 -4
- package/components/snackbar/snackbar.component.module.d.ts +3 -3
- package/components/snackbar/snackbar.service.d.ts +1 -1
- package/components/spider-chart/index.d.ts +5 -0
- package/components/spider-chart/public-api.d.ts +3 -0
- package/components/spider-chart/spider-chart.component.d.ts +1 -1
- package/components/spider-chart/spider-chart.module.d.ts +3 -4
- package/components/spinner/index.d.ts +5 -0
- package/components/spinner/public-api.d.ts +4 -0
- package/components/spinner/spinner.component.d.ts +2 -2
- package/components/spinner/spinner.module.d.ts +2 -2
- package/components/stepper/index.d.ts +5 -0
- package/components/stepper/public-api.d.ts +7 -0
- package/{directives → components/stepper}/step-line-element.directive.d.ts +1 -1
- package/components/{step → stepper}/step.component.d.ts +4 -4
- package/components/{step → stepper}/step.component.module.d.ts +2 -2
- package/components/stepper/stepper.component.d.ts +1 -1
- package/components/stepper/stepper.component.module.d.ts +5 -5
- package/components/stepper/stepper.model.d.ts +1 -1
- package/components/table/index.d.ts +5 -0
- package/components/table/public-api.d.ts +6 -0
- package/components/table/table.component.d.ts +1 -1
- package/components/table/table.component.module.d.ts +6 -9
- package/{utils → components/table}/table.utils.d.ts +1 -1
- package/components/tabs/index.d.ts +5 -0
- package/components/tabs/public-api.d.ts +5 -0
- package/components/tabs/tab.directive.d.ts +1 -1
- package/components/tabs/tabs.component.d.ts +1 -1
- package/components/tabs/tabs.component.module.d.ts +3 -3
- package/components/tabs/tabs.model.d.ts +1 -1
- package/components/tag/index.d.ts +5 -0
- package/components/tag/public-api.d.ts +4 -0
- package/components/tag/tag.component.d.ts +2 -2
- package/components/tag/tag.component.module.d.ts +3 -3
- package/components/toggle/index.d.ts +5 -0
- package/components/toggle/public-api.d.ts +3 -0
- package/components/toggle/toggle.component.d.ts +1 -1
- package/components/toggle/toggle.component.module.d.ts +4 -5
- package/components/tooltip/index.d.ts +5 -0
- package/components/tooltip/public-api.d.ts +5 -0
- package/components/tooltip/tooltip.component.d.ts +1 -1
- package/components/tooltip/tooltip.component.module.d.ts +2 -3
- package/components/universal-skills/index.d.ts +5 -0
- package/components/universal-skills/public-api.d.ts +6 -0
- package/components/{universal-skills-spider-charts → universal-skills/spider-charts}/universal-skills-spider-charts.component.d.ts +4 -4
- package/components/{universal-skills-spider-charts → universal-skills/spider-charts}/universal-skills-spider-charts.component.module.d.ts +7 -9
- package/components/{universal-skills-report → universal-skills}/universal-skills-report.component.d.ts +4 -4
- package/components/{universal-skills-report → universal-skills}/universal-skills-report.component.module.d.ts +5 -7
- package/{models → components/universal-skills}/universal-skills-report.model.d.ts +1 -1
- package/{services → components/universal-skills}/universal-skills.service.d.ts +1 -1
- package/components/validation-error/index.d.ts +5 -0
- package/components/validation-error/public-api.d.ts +3 -0
- package/components/validation-error/validation-error.component.d.ts +1 -1
- package/components/validation-error/validation-error.module.d.ts +2 -2
- package/fesm2022/testgorilla-tgo-ui-components-accordion.mjs +179 -0
- package/fesm2022/testgorilla-tgo-ui-components-accordion.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs +59 -0
- package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs +222 -0
- package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-autocomplete.mjs +1045 -0
- package/fesm2022/testgorilla-tgo-ui-components-autocomplete.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs +173 -0
- package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-badge.mjs +180 -0
- package/fesm2022/testgorilla-tgo-ui-components-badge.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs +250 -0
- package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-button.mjs +635 -0
- package/fesm2022/testgorilla-tgo-ui-components-button.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-card.mjs +164 -0
- package/fesm2022/testgorilla-tgo-ui-components-card.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-checkbox.mjs +402 -0
- package/fesm2022/testgorilla-tgo-ui-components-checkbox.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs +162 -0
- package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-core.mjs +11243 -0
- package/fesm2022/testgorilla-tgo-ui-components-core.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-datepicker.mjs +512 -0
- package/fesm2022/testgorilla-tgo-ui-components-datepicker.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs +481 -0
- package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-divider.mjs +88 -0
- package/fesm2022/testgorilla-tgo-ui-components-divider.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-donut-chart.mjs +146 -0
- package/fesm2022/testgorilla-tgo-ui-components-donut-chart.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs +434 -0
- package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-elevation-shadow.mjs +75 -0
- package/fesm2022/testgorilla-tgo-ui-components-elevation-shadow.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs +326 -0
- package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-field.mjs +639 -0
- package/fesm2022/testgorilla-tgo-ui-components-field.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-file-upload.mjs +402 -0
- package/fesm2022/testgorilla-tgo-ui-components-file-upload.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs +314 -0
- package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-gaussian-chart.mjs +297 -0
- package/fesm2022/testgorilla-tgo-ui-components-gaussian-chart.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-icon-label.mjs +98 -0
- package/fesm2022/testgorilla-tgo-ui-components-icon-label.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-icon.mjs +1496 -0
- package/fesm2022/testgorilla-tgo-ui-components-icon.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs +367 -0
- package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-logo.mjs +218 -0
- package/fesm2022/testgorilla-tgo-ui-components-logo.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs +54 -0
- package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs +82 -0
- package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-multi-input.mjs +343 -0
- package/fesm2022/testgorilla-tgo-ui-components-multi-input.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs +358 -0
- package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs +279 -0
- package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs +94 -0
- package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-paginator.mjs +110 -0
- package/fesm2022/testgorilla-tgo-ui-components-paginator.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-password-criteria.mjs +153 -0
- package/fesm2022/testgorilla-tgo-ui-components-password-criteria.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-password-strength.mjs +118 -0
- package/fesm2022/testgorilla-tgo-ui-components-password-strength.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-phone-input.mjs +428 -0
- package/fesm2022/testgorilla-tgo-ui-components-phone-input.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-progress-bar.mjs +128 -0
- package/fesm2022/testgorilla-tgo-ui-components-progress-bar.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs +252 -0
- package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs +152 -0
- package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-radio-button.mjs +373 -0
- package/fesm2022/testgorilla-tgo-ui-components-radio-button.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-rating.mjs +150 -0
- package/fesm2022/testgorilla-tgo-ui-components-rating.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs +68 -0
- package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-scale.mjs +158 -0
- package/fesm2022/testgorilla-tgo-ui-components-scale.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-segmented-bar.mjs +137 -0
- package/fesm2022/testgorilla-tgo-ui-components-segmented-bar.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-segmented-button.mjs +128 -0
- package/fesm2022/testgorilla-tgo-ui-components-segmented-button.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-selectable-card.mjs +81 -0
- package/fesm2022/testgorilla-tgo-ui-components-selectable-card.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs +231 -0
- package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs +180 -0
- package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-skeleton.mjs +81 -0
- package/fesm2022/testgorilla-tgo-ui-components-skeleton.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-slider.mjs +274 -0
- package/fesm2022/testgorilla-tgo-ui-components-slider.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs +299 -0
- package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-spider-chart.mjs +490 -0
- package/fesm2022/testgorilla-tgo-ui-components-spider-chart.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-spinner.mjs +108 -0
- package/fesm2022/testgorilla-tgo-ui-components-spinner.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-stepper.mjs +507 -0
- package/fesm2022/testgorilla-tgo-ui-components-stepper.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-table.mjs +394 -0
- package/fesm2022/testgorilla-tgo-ui-components-table.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-tabs.mjs +304 -0
- package/fesm2022/testgorilla-tgo-ui-components-tabs.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-tag.mjs +239 -0
- package/fesm2022/testgorilla-tgo-ui-components-tag.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-toggle.mjs +216 -0
- package/fesm2022/testgorilla-tgo-ui-components-toggle.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-tooltip.mjs +272 -0
- package/fesm2022/testgorilla-tgo-ui-components-tooltip.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-universal-skills.mjs +381 -0
- package/fesm2022/testgorilla-tgo-ui-components-universal-skills.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-validation-error.mjs +79 -0
- package/fesm2022/testgorilla-tgo-ui-components-validation-error.mjs.map +1 -0
- package/fesm2022/testgorilla-tgo-ui.mjs +118 -27024
- package/fesm2022/testgorilla-tgo-ui.mjs.map +1 -1
- package/package.json +249 -1
- package/public-api.d.ts +75 -183
- package/components/ai-caveat/ai-caveat.component.d.ts +0 -36
- package/components/ai-caveat/ai-caveat.component.module.d.ts +0 -10
- package/models/application-theme.model.d.ts +0 -1
- package/projects/tgo-canopy-ui/assets/i18n/da-dk.json +0 -820
- package/projects/tgo-canopy-ui/assets/i18n/de.json +0 -820
- package/projects/tgo-canopy-ui/assets/i18n/en.json +0 -830
- package/projects/tgo-canopy-ui/assets/i18n/es.json +0 -820
- package/projects/tgo-canopy-ui/assets/i18n/fr.json +0 -820
- package/projects/tgo-canopy-ui/assets/i18n/it-it.json +0 -820
- package/projects/tgo-canopy-ui/assets/i18n/ja-jp.json +0 -820
- package/projects/tgo-canopy-ui/assets/i18n/nb-no.json +0 -820
- package/projects/tgo-canopy-ui/assets/i18n/nl.json +0 -820
- package/projects/tgo-canopy-ui/assets/i18n/pl-pl.json +0 -820
- package/projects/tgo-canopy-ui/assets/i18n/pt-br.json +0 -820
- package/projects/tgo-canopy-ui/assets/i18n/sv-se.json +0 -820
- /package/{directives → components/autocomplete}/select-text.directive.d.ts +0 -0
- /package/{pipes → components/avatar}/name-initials.pipe.d.ts +0 -0
- /package/{utils → components/button}/color-contrast.d.ts +0 -0
- /package/{utils → components/core}/alert-bar.model.d.ts +0 -0
- /package/{utils → components/core}/autocomplete-utils.d.ts +0 -0
- /package/{models → components/core}/checkbox.model.d.ts +0 -0
- /package/{models → components/core}/colors.model.d.ts +0 -0
- /package/{pipes/data-property-getter.d.ts → components/core/data-property-getter.pipe.d.ts} +0 -0
- /package/{directives → components/core}/digits-only.directive.d.ts +0 -0
- /package/{directives → components/core}/dynamic-component.directive.d.ts +0 -0
- /package/{directives → components/core}/ellipse-text.directive.d.ts +0 -0
- /package/{pipes → components/core}/has-validation-error.pipe.d.ts +0 -0
- /package/{utils → components/core}/hex-to-rgb.d.ts +0 -0
- /package/{providers → components/core}/is-large-tablet.d.ts +0 -0
- /package/{providers → components/core}/is-mobile.d.ts +0 -0
- /package/{models → components/core}/keyboard-events.model.d.ts +0 -0
- /package/{utils/localization → components/core}/language.model.d.ts +0 -0
- /package/{utils/localization → components/core}/language.service.d.ts +0 -0
- /package/{pipes → components/core}/memoize-func.pipe.d.ts +0 -0
- /package/{models → components/core}/screen-breakpoints.model.d.ts +0 -0
- /package/{pipes → components/core}/ui-ordinal-suffix.pipe.d.ts +0 -0
- /package/{directives → components/file-upload}/drag-drop.directive.d.ts +0 -0
- /package/{services → components/icon}/icons.service.d.ts +0 -0
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { ViewChildren, ViewChild, Input, Component, NgModule } from '@angular/core';
|
|
3
|
+
import * as i5 from '@testgorilla/tgo-ui/components/core';
|
|
4
|
+
import { Color, UiTranslatePipe, MemoizeFuncPipe } from '@testgorilla/tgo-ui/components/core';
|
|
5
|
+
import * as i2 from 'ng2-charts';
|
|
6
|
+
import { BaseChartDirective, NgChartsModule } from 'ng2-charts';
|
|
7
|
+
import * as i1 from '@angular/common';
|
|
8
|
+
import { NgClass, CommonModule } from '@angular/common';
|
|
9
|
+
import * as i3 from '@angular/material/tooltip';
|
|
10
|
+
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
11
|
+
import * as i4 from '@testgorilla/tgo-ui/components/spinner';
|
|
12
|
+
import { SpinnerComponentModule } from '@testgorilla/tgo-ui/components/spinner';
|
|
13
|
+
import { Chart, registerables } from 'chart.js';
|
|
14
|
+
|
|
15
|
+
// These are the sizes of the canvas, not the chart itself. It includes 40px of padding on all sides.
|
|
16
|
+
const SmallSpiderChartSize = 200;
|
|
17
|
+
const LargeSpiderChartSize = 280;
|
|
18
|
+
|
|
19
|
+
class SpiderChartComponent {
|
|
20
|
+
constructor() {
|
|
21
|
+
/**
|
|
22
|
+
* The size of the spider chart.
|
|
23
|
+
* @type {SpiderChartSize}
|
|
24
|
+
* @memberof SpiderChartComponent
|
|
25
|
+
*/
|
|
26
|
+
this.size = 'large';
|
|
27
|
+
/**
|
|
28
|
+
* The step size for the spider chart.
|
|
29
|
+
* @type {number}
|
|
30
|
+
* @memberof SpiderChartComponent
|
|
31
|
+
*/
|
|
32
|
+
this.stepSize = 20;
|
|
33
|
+
/**
|
|
34
|
+
* The aria label for the spider chart.
|
|
35
|
+
* @type {string}
|
|
36
|
+
* @memberof SpiderChartComponent
|
|
37
|
+
*/
|
|
38
|
+
this.ariaLabel = 'Radar chart. Press tab to navigate through the chart.';
|
|
39
|
+
/**
|
|
40
|
+
* Whether the spider chart is loading.
|
|
41
|
+
* @type {boolean}
|
|
42
|
+
* @memberof SpiderChartComponent
|
|
43
|
+
*/
|
|
44
|
+
this.loading = false;
|
|
45
|
+
/**
|
|
46
|
+
*
|
|
47
|
+
* Defines the application theme
|
|
48
|
+
*
|
|
49
|
+
* @type {ApplicationTheme}
|
|
50
|
+
* @memberof SpinnerComponent
|
|
51
|
+
*/
|
|
52
|
+
this.applicationTheme = 'light';
|
|
53
|
+
this.radarChartData = {
|
|
54
|
+
labels: [],
|
|
55
|
+
datasets: [],
|
|
56
|
+
};
|
|
57
|
+
this.labelPositions = {};
|
|
58
|
+
this.labelPositionsVisible = false;
|
|
59
|
+
this.focusedLabelIndex = 0;
|
|
60
|
+
this.focusedFakeDataPointIndex = 0;
|
|
61
|
+
this.loadingChartData = {
|
|
62
|
+
labels: [1, 2, 3, 4, 5, 6],
|
|
63
|
+
datasets: [],
|
|
64
|
+
};
|
|
65
|
+
this.loadingChartOptions = {
|
|
66
|
+
responsive: true,
|
|
67
|
+
layout: {
|
|
68
|
+
padding: {
|
|
69
|
+
left: 40,
|
|
70
|
+
right: 40,
|
|
71
|
+
top: 40,
|
|
72
|
+
bottom: 40,
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
scales: {
|
|
76
|
+
r: {
|
|
77
|
+
angleLines: {
|
|
78
|
+
display: true,
|
|
79
|
+
color: Color.GRAYSCALE_30,
|
|
80
|
+
},
|
|
81
|
+
grid: {
|
|
82
|
+
color: () => Color.GRAYSCALE_30,
|
|
83
|
+
},
|
|
84
|
+
pointLabels: {
|
|
85
|
+
display: false,
|
|
86
|
+
},
|
|
87
|
+
suggestedMin: 0,
|
|
88
|
+
suggestedMax: 100,
|
|
89
|
+
ticks: {
|
|
90
|
+
stepSize: this.stepSize,
|
|
91
|
+
display: false,
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
this.translationContext = 'CHARTS.SPIDER.';
|
|
97
|
+
}
|
|
98
|
+
ngOnInit() {
|
|
99
|
+
if (!this.loading) {
|
|
100
|
+
this.handleInputErrors();
|
|
101
|
+
this.setChartData();
|
|
102
|
+
this.setChartOptions();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
handleInputErrors() {
|
|
106
|
+
if (!this.spiderChartData.labels || this.spiderChartData.labels.length === 0) {
|
|
107
|
+
throw new Error('The "labels" input is required and cannot be empty.');
|
|
108
|
+
}
|
|
109
|
+
if (!this.spiderChartData.labelDescription || this.spiderChartData.labelDescription.length === 0) {
|
|
110
|
+
throw new Error('The "labelDescription" input is required and cannot be empty.');
|
|
111
|
+
}
|
|
112
|
+
if (this.spiderChartData.labelDescription &&
|
|
113
|
+
this.spiderChartData.labelDescription.length !== this.spiderChartData.labels.length) {
|
|
114
|
+
throw new Error('The "labelDescription" input must have the same length as "labels".');
|
|
115
|
+
}
|
|
116
|
+
if (!this.spiderChartData.plotData[0].databaseLabel) {
|
|
117
|
+
throw new Error('The "plotData.databaseLabel" input is required.');
|
|
118
|
+
}
|
|
119
|
+
if (!this.spiderChartData.plotData[0].data || this.spiderChartData.plotData[0].data.length === 0) {
|
|
120
|
+
throw new Error('The "plotData.data" input is required and cannot be empty.');
|
|
121
|
+
}
|
|
122
|
+
if (this.spiderChartData.plotData[0].data.length !== this.spiderChartData.labels.length) {
|
|
123
|
+
throw new Error('The "plotData.data" input must have the same length as "labels".');
|
|
124
|
+
}
|
|
125
|
+
if (this.spiderChartData.plotData.length === 2 &&
|
|
126
|
+
this.spiderChartData.labels.length > 0 &&
|
|
127
|
+
this.spiderChartData.plotData[1].data &&
|
|
128
|
+
this.spiderChartData.plotData[1].data.length !== this.spiderChartData.labels.length) {
|
|
129
|
+
throw new Error('The "plotData.data" input must have the same length as "labels".');
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
setChartData() {
|
|
133
|
+
const datasets = [];
|
|
134
|
+
datasets.push({
|
|
135
|
+
label: this.spiderChartData.plotData[0].databaseLabel,
|
|
136
|
+
data: this.spiderChartData.plotData[0].data,
|
|
137
|
+
fill: true,
|
|
138
|
+
backgroundColor: 'rgba(212, 16, 170, 0.2)',
|
|
139
|
+
borderColor: Color.BRAND_50,
|
|
140
|
+
pointBackgroundColor: Color.BRAND_50,
|
|
141
|
+
pointBorderColor: Color.TGO_WHITE,
|
|
142
|
+
pointHoverBackgroundColor: Color.TGO_WHITE,
|
|
143
|
+
pointHoverBorderColor: Color.BRAND_50,
|
|
144
|
+
});
|
|
145
|
+
if (this.spiderChartData.plotData.length === 2) {
|
|
146
|
+
datasets.push({
|
|
147
|
+
label: this.spiderChartData.plotData[1].databaseLabel,
|
|
148
|
+
data: this.spiderChartData.plotData[1].data,
|
|
149
|
+
fill: false,
|
|
150
|
+
borderColor: Color.BLACK,
|
|
151
|
+
borderDash: [5, 5],
|
|
152
|
+
borderWidth: 1,
|
|
153
|
+
pointBackgroundColor: Color.BLACK,
|
|
154
|
+
pointBorderColor: Color.TGO_WHITE,
|
|
155
|
+
pointHoverBackgroundColor: Color.TGO_WHITE,
|
|
156
|
+
pointHoverBorderColor: Color.BLACK,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
this.radarChartData = {
|
|
160
|
+
labels: this.spiderChartData.labels,
|
|
161
|
+
datasets: datasets,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
setChartOptions() {
|
|
165
|
+
this.radarChartOptions = {
|
|
166
|
+
responsive: true,
|
|
167
|
+
elements: {
|
|
168
|
+
line: {
|
|
169
|
+
borderWidth: 3,
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
layout: {
|
|
173
|
+
padding: {
|
|
174
|
+
left: 40,
|
|
175
|
+
right: 40,
|
|
176
|
+
top: 40,
|
|
177
|
+
bottom: 40,
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
scales: {
|
|
181
|
+
r: {
|
|
182
|
+
angleLines: {
|
|
183
|
+
display: true,
|
|
184
|
+
color: Color.BLACK,
|
|
185
|
+
},
|
|
186
|
+
grid: {
|
|
187
|
+
color: context => {
|
|
188
|
+
if (context.tick.value === 100) {
|
|
189
|
+
return Color.BLACK;
|
|
190
|
+
}
|
|
191
|
+
return Color.GRAYSCALE_30;
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
pointLabels: {
|
|
195
|
+
color: 'black',
|
|
196
|
+
font: {
|
|
197
|
+
family: 'Arial',
|
|
198
|
+
size: 14,
|
|
199
|
+
},
|
|
200
|
+
display: false,
|
|
201
|
+
},
|
|
202
|
+
suggestedMin: 0,
|
|
203
|
+
suggestedMax: 100,
|
|
204
|
+
ticks: {
|
|
205
|
+
stepSize: this.stepSize,
|
|
206
|
+
display: false,
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
plugins: {
|
|
211
|
+
legend: {
|
|
212
|
+
display: false,
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
ngAfterViewInit() {
|
|
218
|
+
if (this.chart?.chart && !this.loading) {
|
|
219
|
+
this.logCornerCoordinates(this.chart.chart);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
logCornerCoordinates(chart) {
|
|
223
|
+
const scale = chart.scales['r'];
|
|
224
|
+
const canvasWidth = this.size === 'large' ? LargeSpiderChartSize : SmallSpiderChartSize;
|
|
225
|
+
const canvasHeight = this.size === 'large' ? LargeSpiderChartSize : SmallSpiderChartSize;
|
|
226
|
+
// Loop through the labels and calculate the percentage coordinates
|
|
227
|
+
this.spiderChartData.labels.forEach((label, index) => {
|
|
228
|
+
const position = scale.getPointPositionForValue(index, scale.max);
|
|
229
|
+
// Calculate percentage values relative to the canvas size
|
|
230
|
+
const xPercent = (position.x / canvasWidth) * 100;
|
|
231
|
+
const yPercent = ((canvasHeight - position.y) / canvasHeight) * 100; // Inverting the Y-axis
|
|
232
|
+
this.labelPositions[label] = { x: Number(xPercent.toFixed(2)), y: Number(yPercent.toFixed(2)) };
|
|
233
|
+
});
|
|
234
|
+
this.labelPositionsVisible = true;
|
|
235
|
+
}
|
|
236
|
+
getCenteredLabelBottomPosition(label, height) {
|
|
237
|
+
const position = this.labelPositions[label];
|
|
238
|
+
const padding = 7;
|
|
239
|
+
if (position.x > 50 || position.x < 50) {
|
|
240
|
+
return `calc(${position.y}% - ${height / 2}px)`;
|
|
241
|
+
}
|
|
242
|
+
else if (position.y < 50) {
|
|
243
|
+
return `calc(${position.y}% - ${height}px - ${padding}px)`;
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
return `calc(${position.y}% + ${padding}px)`;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
getCenteredLabelLeftPosition(label, width) {
|
|
250
|
+
const position = this.labelPositions[label];
|
|
251
|
+
const padding = 15;
|
|
252
|
+
if (position.x === 50) {
|
|
253
|
+
return `calc(${position.x}% - ${width / 2}px)`;
|
|
254
|
+
}
|
|
255
|
+
else if (position.x < 50) {
|
|
256
|
+
return `calc(${position.x}% - ${width}px - ${padding}px)`;
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
return `calc(${position.x}% + ${padding}px)`;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
onLabelKeyDown(event, index) {
|
|
263
|
+
if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {
|
|
264
|
+
this.focusNextLabel(index);
|
|
265
|
+
}
|
|
266
|
+
else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {
|
|
267
|
+
this.focusPreviousLabel(index);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
focusNextLabel(index) {
|
|
271
|
+
const nextIndex = index + 1;
|
|
272
|
+
if (nextIndex < this.labelContainers.length) {
|
|
273
|
+
this.labelContainers.get(nextIndex)?.nativeElement.focus();
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
this.labelContainers.first?.nativeElement.focus();
|
|
277
|
+
}
|
|
278
|
+
this.focusedLabelIndex = nextIndex;
|
|
279
|
+
}
|
|
280
|
+
focusPreviousLabel(index) {
|
|
281
|
+
const previousIndex = index - 1;
|
|
282
|
+
if (previousIndex >= 0) {
|
|
283
|
+
this.labelContainers.get(previousIndex)?.nativeElement.focus();
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
this.labelContainers.last?.nativeElement.focus();
|
|
287
|
+
}
|
|
288
|
+
this.focusedLabelIndex = previousIndex;
|
|
289
|
+
}
|
|
290
|
+
onLegendItemKeyDown(event, index) {
|
|
291
|
+
if (event.key === 'Enter') {
|
|
292
|
+
this.toggleDatasetVisibility(index);
|
|
293
|
+
}
|
|
294
|
+
else if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {
|
|
295
|
+
this.focusNextLegendItem(index);
|
|
296
|
+
}
|
|
297
|
+
else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {
|
|
298
|
+
this.focusPreviousLegendItem(index);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
focusNextLegendItem(index) {
|
|
302
|
+
const nextIndex = index + 1;
|
|
303
|
+
if (nextIndex < this.legendItems.length) {
|
|
304
|
+
this.legendItems.get(nextIndex)?.nativeElement.focus();
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
this.legendItems.first?.nativeElement.focus();
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
focusPreviousLegendItem(index) {
|
|
311
|
+
const previousIndex = index - 1;
|
|
312
|
+
if (previousIndex >= 0) {
|
|
313
|
+
this.legendItems.get(previousIndex)?.nativeElement.focus();
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
this.legendItems.last?.nativeElement.focus();
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
onFakeDataPointsKeyDown(event, index, isSecondary = false) {
|
|
320
|
+
if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {
|
|
321
|
+
this.focusNextFakeDataPoint(index, isSecondary);
|
|
322
|
+
this.showTooltipForDataPoint(index + 1 > this.spiderChartData.labels.length ? 0 : index + 1, isSecondary);
|
|
323
|
+
}
|
|
324
|
+
else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {
|
|
325
|
+
this.focusPreviousFakeDataPoint(index, isSecondary);
|
|
326
|
+
this.showTooltipForDataPoint(index - 1 < 0 ? this.spiderChartData.labels.length - 1 : index - 1, isSecondary);
|
|
327
|
+
}
|
|
328
|
+
else if (event.key === 'Tab') {
|
|
329
|
+
this.resetActiveElement();
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
focusNextFakeDataPoint(index, isSecondary = false) {
|
|
333
|
+
const nextIndex = index + 1;
|
|
334
|
+
if (nextIndex < this.fakeDataPoints.length) {
|
|
335
|
+
const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;
|
|
336
|
+
fakeDataPoints.get(nextIndex)?.nativeElement.focus();
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;
|
|
340
|
+
fakeDataPoints.first?.nativeElement.focus();
|
|
341
|
+
}
|
|
342
|
+
if (!isSecondary) {
|
|
343
|
+
this.focusedFakeDataPointIndex = nextIndex;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
focusPreviousFakeDataPoint(index, isSecondary = false) {
|
|
347
|
+
const previousIndex = index - 1;
|
|
348
|
+
if (previousIndex >= 0) {
|
|
349
|
+
const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;
|
|
350
|
+
fakeDataPoints.get(previousIndex)?.nativeElement.focus();
|
|
351
|
+
}
|
|
352
|
+
else {
|
|
353
|
+
const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;
|
|
354
|
+
fakeDataPoints.last?.nativeElement.focus();
|
|
355
|
+
}
|
|
356
|
+
if (!isSecondary) {
|
|
357
|
+
this.focusedFakeDataPointIndex = previousIndex;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
showTooltipForDataPoint(index, isSecondary = false) {
|
|
361
|
+
const chartInstance = this.chart?.chart;
|
|
362
|
+
if (!chartInstance)
|
|
363
|
+
return;
|
|
364
|
+
const activeElement = [{ datasetIndex: isSecondary ? 1 : 0, index }];
|
|
365
|
+
const meta = chartInstance.getDatasetMeta(isSecondary ? 1 : 0);
|
|
366
|
+
const dataPoint = meta.data[index];
|
|
367
|
+
const eventPosition = {
|
|
368
|
+
x: dataPoint.x,
|
|
369
|
+
y: dataPoint.y,
|
|
370
|
+
};
|
|
371
|
+
if (!isSecondary) {
|
|
372
|
+
this.focusedFakeDataPointIndex = index;
|
|
373
|
+
}
|
|
374
|
+
chartInstance.tooltip?.setActiveElements(activeElement, eventPosition);
|
|
375
|
+
chartInstance.update();
|
|
376
|
+
}
|
|
377
|
+
resetActiveElement() {
|
|
378
|
+
const chartInstance = this.chart?.chart;
|
|
379
|
+
if (!chartInstance)
|
|
380
|
+
return;
|
|
381
|
+
// Clear the active elements to hide the tooltip
|
|
382
|
+
chartInstance.tooltip?.setActiveElements([], { x: 0, y: 0 });
|
|
383
|
+
chartInstance.update();
|
|
384
|
+
}
|
|
385
|
+
toggleDatasetVisibility(datasetIndex) {
|
|
386
|
+
const chartInstance = this.chart?.chart;
|
|
387
|
+
if (!chartInstance)
|
|
388
|
+
return;
|
|
389
|
+
const dataset = chartInstance.data.datasets[datasetIndex];
|
|
390
|
+
dataset.hidden = !dataset.hidden;
|
|
391
|
+
chartInstance.update();
|
|
392
|
+
}
|
|
393
|
+
isDatasetVisible(datasetIndex) {
|
|
394
|
+
const chartInstance = this.chart?.chart;
|
|
395
|
+
if (!chartInstance)
|
|
396
|
+
return;
|
|
397
|
+
return !chartInstance.data.datasets[datasetIndex].hidden;
|
|
398
|
+
}
|
|
399
|
+
getFirstLine(label) {
|
|
400
|
+
const words = label.split(' ');
|
|
401
|
+
let firstLine = '';
|
|
402
|
+
for (const word of words) {
|
|
403
|
+
if ((firstLine + word).length <= 20) {
|
|
404
|
+
firstLine += (firstLine ? ' ' : '') + word;
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
break;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
return firstLine;
|
|
411
|
+
}
|
|
412
|
+
getSecondLine(label) {
|
|
413
|
+
const firstLine = this.getFirstLine(label);
|
|
414
|
+
return label.substring(firstLine.length).trim();
|
|
415
|
+
}
|
|
416
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SpiderChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
417
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.18", type: SpiderChartComponent, isStandalone: false, selector: "ui-spider-chart", inputs: { size: "size", spiderChartData: "spiderChartData", stepSize: "stepSize", ariaLabel: "ariaLabel", loading: "loading", applicationTheme: "applicationTheme" }, viewQueries: [{ propertyName: "chart", first: true, predicate: BaseChartDirective, descendants: true }, { propertyName: "labelContainers", predicate: ["labelContainer"], descendants: true }, { propertyName: "fakeDataPoints", predicate: ["fakeDataPoints"], descendants: true }, { propertyName: "fakeDataPointsSecondary", predicate: ["fakeDataPointsSecondary"], descendants: true }, { propertyName: "legendItems", predicate: ["legendItem"], descendants: true }], ngImport: i0, template: "<div class=\"spider-chart-container\"\n tabindex=\"0\"\n [attr.aria-label]=\"ariaLabel\">\n <div class=\"spacing-container\"\n [ngClass]=\"{'small-spacing': radarChartData.labels && radarChartData.labels.length % 2 === 1 && !loading}\">\n <div class=\"chart-container\"\n [style.width]=\"size === 'large' ? '280px' : '200px'\"\n [style.height]=\"size === 'large' ? '280px' : '200px'\">\n @if (!loading) {\n <canvas\n baseChart\n [data]=\"radarChartData\"\n [options]=\"radarChartOptions\"\n type=\"radar\"\n class=\"chart\"\n >\n </canvas>\n } @else {\n <canvas\n baseChart\n [data]=\"loadingChartData\"\n [options]=\"loadingChartOptions\"\n type=\"radar\"\n class=\"chart\"\n >\n </canvas>\n <ui-spinner></ui-spinner>\n }\n\n @if (labelPositionsVisible) {\n <div class=\"overlay-container\">\n @for (label of spiderChartData.labels; track label) {\n <div class=\"label-container\" #labelContainer\n [matTooltip]=\"spiderChartData.labelDescription[$index]\"\n [tabindex]=\"$index === 0 ? '0' : '-1'\"\n (keydown)=\"onLabelKeyDown($event, $index)\"\n [attr.aria-label]=\"spiderChartData.labelDescription[$index]\"\n [style.left]=\"getCenteredLabelLeftPosition(label, labelContainer.offsetWidth)\"\n [style.bottom]=\"getCenteredLabelBottomPosition(label, labelContainer.offsetHeight)\">\n @if (!(label.length > 20 && size === 'large' && spiderChartData.labels.length < 9)) {\n <div class=\"label\" [style.max-width]=\"size === 'large' ? '135px' : '100px'\">\n {{ label }}\n </div>\n } @else {\n <div>\n <div class=\"label\" [style.max-width]=\"size === 'large' ? '135px' : '100px'\">{{ label | memoizeFunc : getFirstLine }}</div>\n <div class=\"label\" [style.max-width]=\"size === 'large' ? '135px' : '100px'\">{{ label | memoizeFunc : getSecondLine : this }}</div>\n </div>\n }\n <span class=\"value\">{{ spiderChartData.plotData[0].data[$index] }}</span>\n </div>\n <span class=\"fake-data-points\" #fakeDataPoints\n [tabindex]=\"focusedLabelIndex === $index ? '0' : '-1'\"\n (focus)=\"$index === focusedLabelIndex ? showTooltipForDataPoint($index) : null\"\n (keydown)=\"onFakeDataPointsKeyDown($event, $index)\">\n </span>\n @if (radarChartData.datasets.length > 1) {\n <span class=\"fake-data-points-secondary\" #fakeDataPointsSecondary\n [tabindex]=\"focusedFakeDataPointIndex === $index ? '0' : '-1'\"\n (focus)=\"$index === focusedFakeDataPointIndex ? showTooltipForDataPoint($index, true) : null\"\n (keydown)=\"onFakeDataPointsKeyDown($event, $index, true)\">\n </span>\n }\n }\n </div>\n }\n </div>\n </div>\n @if (radarChartData.datasets.length > 0) {\n <div class=\"legend-container\">\n @for (dataset of radarChartData.datasets; track dataset.label) {\n <div class=\"legend-item\"\n (click)=\"toggleDatasetVisibility($index)\"\n [tabindex]=\"$index === 0 ? '0' : '-1'\"\n role=\"button\"\n [attr.aria-pressed]=\"isDatasetVisible($index) ? false : true\"\n [attr.aria-label]=\"isDatasetVisible($index) ?\n ((translationContext + 'DATASET_VISIBLE') | uiTranslate : { dataset: dataset.label } | async) :\n ((translationContext + 'DATASET_HIDDEN') | uiTranslate : { dataset: dataset.label } | async)\"\n (keydown)=\"onLegendItemKeyDown($event, $index)\"\n #legendItem>\n <span class=\"legend-line\" [ngClass]=\"{'solid-line': $index === 0, 'dashed-line': $index === 1}\"></span>\n <span class=\"legend-label\" [style.text-decoration]=\"isDatasetVisible($index) ? 'none' : 'line-through'\">\n {{ dataset.label }}\n </span>\n </div>\n }\n </div>\n }\n</div>\n\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}.spider-chart-container{display:flex;flex-direction:column;align-items:center}.spider-chart-container .spacing-container{padding:40px 140px}.spider-chart-container .spacing-container.small-spacing{padding:0 80px}.spider-chart-container .spacing-container .chart-container{position:relative}.spider-chart-container .spacing-container .chart-container .overlay-container{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.spider-chart-container .spacing-container .chart-container .overlay-container .label-container{display:flex;gap:4px;position:absolute;pointer-events:all;cursor:pointer}.spider-chart-container .spacing-container .chart-container .overlay-container .label-container .fake-data-points{visibility:hidden}.spider-chart-container .spacing-container .chart-container .overlay-container .label-container:focus{outline:none}.spider-chart-container .spacing-container .chart-container .overlay-container .label-container .label{font-size:12px;border-bottom:1px dashed #D3D3D3;white-space:nowrap;overflow:hidden;width:fit-content;text-overflow:ellipsis}.spider-chart-container .spacing-container .chart-container .overlay-container .label-container .value{font-weight:700}.spider-chart-container .legend-container{display:flex;gap:16px;cursor:pointer}.spider-chart-container .legend-container .legend-item{display:flex;align-items:center;gap:8px}.spider-chart-container .legend-container .legend-item .legend-line{display:inline-block;width:11px;height:4px}.spider-chart-container .legend-container .legend-item .solid-line{background-color:#d410aa}.spider-chart-container .legend-container .legend-item .dashed-line{border-top:2px dashed #242424}:host ::ng-deep .spider-chart-container .spinner-container.loader{position:absolute}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.BaseChartDirective, selector: "canvas[baseChart]", inputs: ["type", "legend", "data", "options", "plugins", "labels", "datasets"], outputs: ["chartClick", "chartHover"], exportAs: ["base-chart"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i4.SpinnerComponent, selector: "ui-spinner", inputs: ["size", "isLoader", "text", "applicationTheme", "iconName", "iconSize"] }, { kind: "pipe", type: i5.UiTranslatePipe, name: "uiTranslate" }, { kind: "pipe", type: i5.MemoizeFuncPipe, name: "memoizeFunc" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
|
|
418
|
+
}
|
|
419
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SpiderChartComponent, decorators: [{
|
|
420
|
+
type: Component,
|
|
421
|
+
args: [{ selector: 'ui-spider-chart', standalone: false, template: "<div class=\"spider-chart-container\"\n tabindex=\"0\"\n [attr.aria-label]=\"ariaLabel\">\n <div class=\"spacing-container\"\n [ngClass]=\"{'small-spacing': radarChartData.labels && radarChartData.labels.length % 2 === 1 && !loading}\">\n <div class=\"chart-container\"\n [style.width]=\"size === 'large' ? '280px' : '200px'\"\n [style.height]=\"size === 'large' ? '280px' : '200px'\">\n @if (!loading) {\n <canvas\n baseChart\n [data]=\"radarChartData\"\n [options]=\"radarChartOptions\"\n type=\"radar\"\n class=\"chart\"\n >\n </canvas>\n } @else {\n <canvas\n baseChart\n [data]=\"loadingChartData\"\n [options]=\"loadingChartOptions\"\n type=\"radar\"\n class=\"chart\"\n >\n </canvas>\n <ui-spinner></ui-spinner>\n }\n\n @if (labelPositionsVisible) {\n <div class=\"overlay-container\">\n @for (label of spiderChartData.labels; track label) {\n <div class=\"label-container\" #labelContainer\n [matTooltip]=\"spiderChartData.labelDescription[$index]\"\n [tabindex]=\"$index === 0 ? '0' : '-1'\"\n (keydown)=\"onLabelKeyDown($event, $index)\"\n [attr.aria-label]=\"spiderChartData.labelDescription[$index]\"\n [style.left]=\"getCenteredLabelLeftPosition(label, labelContainer.offsetWidth)\"\n [style.bottom]=\"getCenteredLabelBottomPosition(label, labelContainer.offsetHeight)\">\n @if (!(label.length > 20 && size === 'large' && spiderChartData.labels.length < 9)) {\n <div class=\"label\" [style.max-width]=\"size === 'large' ? '135px' : '100px'\">\n {{ label }}\n </div>\n } @else {\n <div>\n <div class=\"label\" [style.max-width]=\"size === 'large' ? '135px' : '100px'\">{{ label | memoizeFunc : getFirstLine }}</div>\n <div class=\"label\" [style.max-width]=\"size === 'large' ? '135px' : '100px'\">{{ label | memoizeFunc : getSecondLine : this }}</div>\n </div>\n }\n <span class=\"value\">{{ spiderChartData.plotData[0].data[$index] }}</span>\n </div>\n <span class=\"fake-data-points\" #fakeDataPoints\n [tabindex]=\"focusedLabelIndex === $index ? '0' : '-1'\"\n (focus)=\"$index === focusedLabelIndex ? showTooltipForDataPoint($index) : null\"\n (keydown)=\"onFakeDataPointsKeyDown($event, $index)\">\n </span>\n @if (radarChartData.datasets.length > 1) {\n <span class=\"fake-data-points-secondary\" #fakeDataPointsSecondary\n [tabindex]=\"focusedFakeDataPointIndex === $index ? '0' : '-1'\"\n (focus)=\"$index === focusedFakeDataPointIndex ? showTooltipForDataPoint($index, true) : null\"\n (keydown)=\"onFakeDataPointsKeyDown($event, $index, true)\">\n </span>\n }\n }\n </div>\n }\n </div>\n </div>\n @if (radarChartData.datasets.length > 0) {\n <div class=\"legend-container\">\n @for (dataset of radarChartData.datasets; track dataset.label) {\n <div class=\"legend-item\"\n (click)=\"toggleDatasetVisibility($index)\"\n [tabindex]=\"$index === 0 ? '0' : '-1'\"\n role=\"button\"\n [attr.aria-pressed]=\"isDatasetVisible($index) ? false : true\"\n [attr.aria-label]=\"isDatasetVisible($index) ?\n ((translationContext + 'DATASET_VISIBLE') | uiTranslate : { dataset: dataset.label } | async) :\n ((translationContext + 'DATASET_HIDDEN') | uiTranslate : { dataset: dataset.label } | async)\"\n (keydown)=\"onLegendItemKeyDown($event, $index)\"\n #legendItem>\n <span class=\"legend-line\" [ngClass]=\"{'solid-line': $index === 0, 'dashed-line': $index === 1}\"></span>\n <span class=\"legend-label\" [style.text-decoration]=\"isDatasetVisible($index) ? 'none' : 'line-through'\">\n {{ dataset.label }}\n </span>\n </div>\n }\n </div>\n }\n</div>\n\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}.spider-chart-container{display:flex;flex-direction:column;align-items:center}.spider-chart-container .spacing-container{padding:40px 140px}.spider-chart-container .spacing-container.small-spacing{padding:0 80px}.spider-chart-container .spacing-container .chart-container{position:relative}.spider-chart-container .spacing-container .chart-container .overlay-container{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.spider-chart-container .spacing-container .chart-container .overlay-container .label-container{display:flex;gap:4px;position:absolute;pointer-events:all;cursor:pointer}.spider-chart-container .spacing-container .chart-container .overlay-container .label-container .fake-data-points{visibility:hidden}.spider-chart-container .spacing-container .chart-container .overlay-container .label-container:focus{outline:none}.spider-chart-container .spacing-container .chart-container .overlay-container .label-container .label{font-size:12px;border-bottom:1px dashed #D3D3D3;white-space:nowrap;overflow:hidden;width:fit-content;text-overflow:ellipsis}.spider-chart-container .spacing-container .chart-container .overlay-container .label-container .value{font-weight:700}.spider-chart-container .legend-container{display:flex;gap:16px;cursor:pointer}.spider-chart-container .legend-container .legend-item{display:flex;align-items:center;gap:8px}.spider-chart-container .legend-container .legend-item .legend-line{display:inline-block;width:11px;height:4px}.spider-chart-container .legend-container .legend-item .solid-line{background-color:#d410aa}.spider-chart-container .legend-container .legend-item .dashed-line{border-top:2px dashed #242424}:host ::ng-deep .spider-chart-container .spinner-container.loader{position:absolute}\n"] }]
|
|
422
|
+
}], propDecorators: { size: [{
|
|
423
|
+
type: Input
|
|
424
|
+
}], spiderChartData: [{
|
|
425
|
+
type: Input
|
|
426
|
+
}], stepSize: [{
|
|
427
|
+
type: Input
|
|
428
|
+
}], ariaLabel: [{
|
|
429
|
+
type: Input
|
|
430
|
+
}], loading: [{
|
|
431
|
+
type: Input
|
|
432
|
+
}], applicationTheme: [{
|
|
433
|
+
type: Input
|
|
434
|
+
}], chart: [{
|
|
435
|
+
type: ViewChild,
|
|
436
|
+
args: [BaseChartDirective]
|
|
437
|
+
}], labelContainers: [{
|
|
438
|
+
type: ViewChildren,
|
|
439
|
+
args: ['labelContainer']
|
|
440
|
+
}], fakeDataPoints: [{
|
|
441
|
+
type: ViewChildren,
|
|
442
|
+
args: ['fakeDataPoints']
|
|
443
|
+
}], fakeDataPointsSecondary: [{
|
|
444
|
+
type: ViewChildren,
|
|
445
|
+
args: ['fakeDataPointsSecondary']
|
|
446
|
+
}], legendItems: [{
|
|
447
|
+
type: ViewChildren,
|
|
448
|
+
args: ['legendItem']
|
|
449
|
+
}] } });
|
|
450
|
+
|
|
451
|
+
Chart.register(...registerables);
|
|
452
|
+
class SpiderChartComponentModule {
|
|
453
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SpiderChartComponentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
454
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.18", ngImport: i0, type: SpiderChartComponentModule, declarations: [SpiderChartComponent], imports: [NgClass,
|
|
455
|
+
UiTranslatePipe,
|
|
456
|
+
NgChartsModule,
|
|
457
|
+
MatTooltipModule,
|
|
458
|
+
UiTranslatePipe,
|
|
459
|
+
MemoizeFuncPipe,
|
|
460
|
+
SpinnerComponentModule,
|
|
461
|
+
CommonModule], exports: [SpiderChartComponent] }); }
|
|
462
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SpiderChartComponentModule, imports: [NgChartsModule,
|
|
463
|
+
MatTooltipModule,
|
|
464
|
+
SpinnerComponentModule,
|
|
465
|
+
CommonModule] }); }
|
|
466
|
+
}
|
|
467
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SpiderChartComponentModule, decorators: [{
|
|
468
|
+
type: NgModule,
|
|
469
|
+
args: [{
|
|
470
|
+
declarations: [SpiderChartComponent],
|
|
471
|
+
exports: [SpiderChartComponent],
|
|
472
|
+
imports: [
|
|
473
|
+
NgClass,
|
|
474
|
+
UiTranslatePipe,
|
|
475
|
+
NgChartsModule,
|
|
476
|
+
MatTooltipModule,
|
|
477
|
+
UiTranslatePipe,
|
|
478
|
+
MemoizeFuncPipe,
|
|
479
|
+
SpinnerComponentModule,
|
|
480
|
+
CommonModule,
|
|
481
|
+
],
|
|
482
|
+
}]
|
|
483
|
+
}] });
|
|
484
|
+
|
|
485
|
+
/**
|
|
486
|
+
* Generated bundle index. Do not edit.
|
|
487
|
+
*/
|
|
488
|
+
|
|
489
|
+
export { LargeSpiderChartSize, SmallSpiderChartSize, SpiderChartComponent, SpiderChartComponentModule };
|
|
490
|
+
//# sourceMappingURL=testgorilla-tgo-ui-components-spider-chart.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testgorilla-tgo-ui-components-spider-chart.mjs","sources":["../../../components/spider-chart/spider-chart.model.ts","../../../components/spider-chart/spider-chart.component.ts","../../../components/spider-chart/spider-chart.component.html","../../../components/spider-chart/spider-chart.module.ts","../../../components/spider-chart/testgorilla-tgo-ui-components-spider-chart.ts"],"sourcesContent":["export type SpiderChartSize = 'large' | 'small';\n// These are the sizes of the canvas, not the chart itself. It includes 40px of padding on all sides.\nexport const SmallSpiderChartSize: number = 200;\nexport const LargeSpiderChartSize: number = 280;\nexport type SpiderChartData = {\n labels: string[];\n labelDescription: string[];\n plotData: [PlotData, PlotData] | [PlotData]; // Current implementation supports max 2 datasets.\n};\nexport type PlotData = {\n databaseLabel: string;\n data: number[];\n};\n","import { Component, ElementRef, Input, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\nimport { LargeSpiderChartSize, SmallSpiderChartSize, SpiderChartData, SpiderChartSize } from './spider-chart.model';\nimport { ApplicationTheme, Color } from '@testgorilla/tgo-ui/components/core';\nimport { Chart, ChartData, ChartOptions } from 'chart.js';\nimport { BaseChartDirective } from 'ng2-charts';\n\n@Component({\n selector: 'ui-spider-chart',\n templateUrl: './spider-chart.component.html',\n styleUrls: ['./spider-chart.component.scss'],\n standalone: false\n})\nexport class SpiderChartComponent implements OnInit {\n /**\n * The size of the spider chart.\n * @type {SpiderChartSize}\n * @memberof SpiderChartComponent\n */\n @Input() size: SpiderChartSize = 'large';\n\n /**\n * The data to be used for the spider chart.\n * @type {SpiderChartData}\n * @memberof SpiderChartComponent\n */\n @Input() spiderChartData: SpiderChartData;\n\n /**\n * The step size for the spider chart.\n * @type {number}\n * @memberof SpiderChartComponent\n */\n @Input() stepSize: number = 20;\n\n /**\n * The aria label for the spider chart.\n * @type {string}\n * @memberof SpiderChartComponent\n */\n @Input() ariaLabel: string = 'Radar chart. Press tab to navigate through the chart.';\n\n /**\n * Whether the spider chart is loading.\n * @type {boolean}\n * @memberof SpiderChartComponent\n */\n @Input() loading: boolean = false;\n\n /**\n *\n * Defines the application theme\n *\n * @type {ApplicationTheme}\n * @memberof SpinnerComponent\n */\n @Input() applicationTheme: ApplicationTheme = 'light';\n\n @ViewChild(BaseChartDirective) chart: BaseChartDirective;\n @ViewChildren('labelContainer') labelContainers: QueryList<ElementRef>;\n @ViewChildren('fakeDataPoints') fakeDataPoints: QueryList<ElementRef>;\n @ViewChildren('fakeDataPointsSecondary') fakeDataPointsSecondary: QueryList<ElementRef>;\n @ViewChildren('legendItem') legendItems: QueryList<ElementRef>;\n\n radarChartData: ChartData<'radar'> = {\n labels: [],\n datasets: [],\n };\n radarChartOptions: ChartOptions<'radar'>;\n labelPositions: { [key: string]: { x: number; y: number } } = {};\n labelPositionsVisible: boolean = false;\n focusedLabelIndex: number = 0;\n focusedFakeDataPointIndex: number = 0;\n loadingChartData: ChartData<'radar'> = {\n labels: [1, 2, 3, 4, 5, 6],\n datasets: [],\n };\n loadingChartOptions: ChartOptions<'radar'> = {\n responsive: true,\n layout: {\n padding: {\n left: 40,\n right: 40,\n top: 40,\n bottom: 40,\n },\n },\n scales: {\n r: {\n angleLines: {\n display: true,\n color: Color.GRAYSCALE_30,\n },\n grid: {\n color: () => Color.GRAYSCALE_30,\n },\n pointLabels: {\n display: false,\n },\n suggestedMin: 0,\n suggestedMax: 100,\n ticks: {\n stepSize: this.stepSize,\n display: false,\n },\n },\n },\n };\n protected readonly translationContext = 'CHARTS.SPIDER.';\n\n ngOnInit(): void {\n if (!this.loading) {\n this.handleInputErrors();\n this.setChartData();\n this.setChartOptions();\n }\n }\n\n private handleInputErrors() {\n if (!this.spiderChartData.labels || this.spiderChartData.labels.length === 0) {\n throw new Error('The \"labels\" input is required and cannot be empty.');\n }\n if (!this.spiderChartData.labelDescription || this.spiderChartData.labelDescription.length === 0) {\n throw new Error('The \"labelDescription\" input is required and cannot be empty.');\n }\n if (\n this.spiderChartData.labelDescription &&\n this.spiderChartData.labelDescription.length !== this.spiderChartData.labels.length\n ) {\n throw new Error('The \"labelDescription\" input must have the same length as \"labels\".');\n }\n if (!this.spiderChartData.plotData[0].databaseLabel) {\n throw new Error('The \"plotData.databaseLabel\" input is required.');\n }\n if (!this.spiderChartData.plotData[0].data || this.spiderChartData.plotData[0].data.length === 0) {\n throw new Error('The \"plotData.data\" input is required and cannot be empty.');\n }\n if (this.spiderChartData.plotData[0].data.length !== this.spiderChartData.labels.length) {\n throw new Error('The \"plotData.data\" input must have the same length as \"labels\".');\n }\n if (\n this.spiderChartData.plotData.length === 2 &&\n this.spiderChartData.labels.length > 0 &&\n this.spiderChartData.plotData[1].data &&\n this.spiderChartData.plotData[1].data.length !== this.spiderChartData.labels.length\n ) {\n throw new Error('The \"plotData.data\" input must have the same length as \"labels\".');\n }\n }\n\n private setChartData() {\n const datasets = [];\n datasets.push({\n label: this.spiderChartData.plotData[0].databaseLabel,\n data: this.spiderChartData.plotData[0].data,\n fill: true,\n backgroundColor: 'rgba(212, 16, 170, 0.2)',\n borderColor: Color.BRAND_50,\n pointBackgroundColor: Color.BRAND_50,\n pointBorderColor: Color.TGO_WHITE,\n pointHoverBackgroundColor: Color.TGO_WHITE,\n pointHoverBorderColor: Color.BRAND_50,\n });\n if (this.spiderChartData.plotData.length === 2) {\n datasets.push({\n label: this.spiderChartData.plotData[1].databaseLabel,\n data: this.spiderChartData.plotData[1].data,\n fill: false,\n borderColor: Color.BLACK,\n borderDash: [5, 5],\n borderWidth: 1,\n pointBackgroundColor: Color.BLACK,\n pointBorderColor: Color.TGO_WHITE,\n pointHoverBackgroundColor: Color.TGO_WHITE,\n pointHoverBorderColor: Color.BLACK,\n });\n }\n this.radarChartData = {\n labels: this.spiderChartData.labels,\n datasets: datasets,\n };\n }\n\n private setChartOptions() {\n this.radarChartOptions = {\n responsive: true,\n elements: {\n line: {\n borderWidth: 3,\n },\n },\n layout: {\n padding: {\n left: 40,\n right: 40,\n top: 40,\n bottom: 40,\n },\n },\n scales: {\n r: {\n angleLines: {\n display: true,\n color: Color.BLACK,\n },\n grid: {\n color: context => {\n if (context.tick.value === 100) {\n return Color.BLACK;\n }\n return Color.GRAYSCALE_30;\n },\n },\n pointLabels: {\n color: 'black',\n font: {\n family: 'Arial',\n size: 14,\n },\n display: false,\n },\n suggestedMin: 0,\n suggestedMax: 100,\n ticks: {\n stepSize: this.stepSize,\n display: false,\n },\n },\n },\n plugins: {\n legend: {\n display: false,\n },\n },\n };\n }\n\n ngAfterViewInit(): void {\n if (this.chart?.chart && !this.loading) {\n this.logCornerCoordinates(this.chart.chart);\n }\n }\n\n private logCornerCoordinates(chart: Chart) {\n const scale = chart.scales['r'] as any;\n const canvasWidth = this.size === 'large' ? LargeSpiderChartSize : SmallSpiderChartSize;\n const canvasHeight = this.size === 'large' ? LargeSpiderChartSize : SmallSpiderChartSize;\n\n // Loop through the labels and calculate the percentage coordinates\n this.spiderChartData.labels.forEach((label, index) => {\n const position = scale.getPointPositionForValue(index, scale.max);\n\n // Calculate percentage values relative to the canvas size\n const xPercent = (position.x / canvasWidth) * 100;\n const yPercent = ((canvasHeight - position.y) / canvasHeight) * 100; // Inverting the Y-axis\n\n this.labelPositions[label] = { x: Number(xPercent.toFixed(2)), y: Number(yPercent.toFixed(2)) };\n });\n this.labelPositionsVisible = true;\n }\n\n getCenteredLabelBottomPosition(label: string, height: number) {\n const position = this.labelPositions[label];\n const padding = 7;\n if (position.x > 50 || position.x < 50) {\n return `calc(${position.y}% - ${height / 2}px)`;\n } else if (position.y < 50) {\n return `calc(${position.y}% - ${height}px - ${padding}px)`;\n } else {\n return `calc(${position.y}% + ${padding}px)`;\n }\n }\n\n getCenteredLabelLeftPosition(label: string, width: number) {\n const position = this.labelPositions[label];\n const padding = 15;\n if (position.x === 50) {\n return `calc(${position.x}% - ${width / 2}px)`;\n } else if (position.x < 50) {\n return `calc(${position.x}% - ${width}px - ${padding}px)`;\n } else {\n return `calc(${position.x}% + ${padding}px)`;\n }\n }\n\n onLabelKeyDown(event: KeyboardEvent, index: number) {\n if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {\n this.focusNextLabel(index);\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {\n this.focusPreviousLabel(index);\n }\n }\n\n private focusNextLabel(index: number) {\n const nextIndex = index + 1;\n if (nextIndex < this.labelContainers.length) {\n this.labelContainers.get(nextIndex)?.nativeElement.focus();\n } else {\n this.labelContainers.first?.nativeElement.focus();\n }\n this.focusedLabelIndex = nextIndex;\n }\n\n private focusPreviousLabel(index: number) {\n const previousIndex = index - 1;\n if (previousIndex >= 0) {\n this.labelContainers.get(previousIndex)?.nativeElement.focus();\n } else {\n this.labelContainers.last?.nativeElement.focus();\n }\n this.focusedLabelIndex = previousIndex;\n }\n\n onLegendItemKeyDown(event: KeyboardEvent, index: number) {\n if (event.key === 'Enter') {\n this.toggleDatasetVisibility(index);\n } else if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {\n this.focusNextLegendItem(index);\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {\n this.focusPreviousLegendItem(index);\n }\n }\n\n private focusNextLegendItem(index: number) {\n const nextIndex = index + 1;\n if (nextIndex < this.legendItems.length) {\n this.legendItems.get(nextIndex)?.nativeElement.focus();\n } else {\n this.legendItems.first?.nativeElement.focus();\n }\n }\n\n private focusPreviousLegendItem(index: number) {\n const previousIndex = index - 1;\n if (previousIndex >= 0) {\n this.legendItems.get(previousIndex)?.nativeElement.focus();\n } else {\n this.legendItems.last?.nativeElement.focus();\n }\n }\n\n onFakeDataPointsKeyDown(event: KeyboardEvent, index: number, isSecondary: boolean = false) {\n if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {\n this.focusNextFakeDataPoint(index, isSecondary);\n this.showTooltipForDataPoint(index + 1 > this.spiderChartData.labels.length ? 0 : index + 1, isSecondary);\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {\n this.focusPreviousFakeDataPoint(index, isSecondary);\n this.showTooltipForDataPoint(index - 1 < 0 ? this.spiderChartData.labels.length - 1 : index - 1, isSecondary);\n } else if (event.key === 'Tab') {\n this.resetActiveElement();\n }\n }\n\n private focusNextFakeDataPoint(index: number, isSecondary: boolean = false) {\n const nextIndex = index + 1;\n if (nextIndex < this.fakeDataPoints.length) {\n const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;\n fakeDataPoints.get(nextIndex)?.nativeElement.focus();\n } else {\n const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;\n fakeDataPoints.first?.nativeElement.focus();\n }\n if (!isSecondary) {\n this.focusedFakeDataPointIndex = nextIndex;\n }\n }\n\n private focusPreviousFakeDataPoint(index: number, isSecondary: boolean = false) {\n const previousIndex = index - 1;\n if (previousIndex >= 0) {\n const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;\n fakeDataPoints.get(previousIndex)?.nativeElement.focus();\n } else {\n const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;\n fakeDataPoints.last?.nativeElement.focus();\n }\n if (!isSecondary) {\n this.focusedFakeDataPointIndex = previousIndex;\n }\n }\n\n showTooltipForDataPoint(index: number, isSecondary: boolean = false) {\n const chartInstance = this.chart?.chart;\n if (!chartInstance) return;\n const activeElement = [{ datasetIndex: isSecondary ? 1 : 0, index }];\n const meta = chartInstance.getDatasetMeta(isSecondary ? 1 : 0);\n const dataPoint = meta.data[index];\n const eventPosition = {\n x: dataPoint.x,\n y: dataPoint.y,\n };\n if (!isSecondary) {\n this.focusedFakeDataPointIndex = index;\n }\n\n chartInstance.tooltip?.setActiveElements(activeElement, eventPosition);\n\n chartInstance.update();\n }\n\n private resetActiveElement() {\n const chartInstance = this.chart?.chart;\n if (!chartInstance) return;\n\n // Clear the active elements to hide the tooltip\n chartInstance.tooltip?.setActiveElements([], { x: 0, y: 0 });\n\n chartInstance.update();\n }\n\n toggleDatasetVisibility(datasetIndex: number) {\n const chartInstance = this.chart?.chart;\n if (!chartInstance) return;\n\n const dataset = chartInstance.data.datasets[datasetIndex];\n dataset.hidden = !dataset.hidden;\n chartInstance.update();\n }\n\n isDatasetVisible(datasetIndex: number) {\n const chartInstance = this.chart?.chart;\n if (!chartInstance) return;\n return !chartInstance.data.datasets[datasetIndex].hidden;\n }\n\n getFirstLine(label: string): string {\n const words = label.split(' ');\n let firstLine = '';\n for (const word of words) {\n if ((firstLine + word).length <= 20) {\n firstLine += (firstLine ? ' ' : '') + word;\n } else {\n break;\n }\n }\n return firstLine;\n }\n\n getSecondLine(label: string): string {\n const firstLine = this.getFirstLine(label);\n return label.substring(firstLine.length).trim();\n }\n}\n","<div class=\"spider-chart-container\"\n tabindex=\"0\"\n [attr.aria-label]=\"ariaLabel\">\n <div class=\"spacing-container\"\n [ngClass]=\"{'small-spacing': radarChartData.labels && radarChartData.labels.length % 2 === 1 && !loading}\">\n <div class=\"chart-container\"\n [style.width]=\"size === 'large' ? '280px' : '200px'\"\n [style.height]=\"size === 'large' ? '280px' : '200px'\">\n @if (!loading) {\n <canvas\n baseChart\n [data]=\"radarChartData\"\n [options]=\"radarChartOptions\"\n type=\"radar\"\n class=\"chart\"\n >\n </canvas>\n } @else {\n <canvas\n baseChart\n [data]=\"loadingChartData\"\n [options]=\"loadingChartOptions\"\n type=\"radar\"\n class=\"chart\"\n >\n </canvas>\n <ui-spinner></ui-spinner>\n }\n\n @if (labelPositionsVisible) {\n <div class=\"overlay-container\">\n @for (label of spiderChartData.labels; track label) {\n <div class=\"label-container\" #labelContainer\n [matTooltip]=\"spiderChartData.labelDescription[$index]\"\n [tabindex]=\"$index === 0 ? '0' : '-1'\"\n (keydown)=\"onLabelKeyDown($event, $index)\"\n [attr.aria-label]=\"spiderChartData.labelDescription[$index]\"\n [style.left]=\"getCenteredLabelLeftPosition(label, labelContainer.offsetWidth)\"\n [style.bottom]=\"getCenteredLabelBottomPosition(label, labelContainer.offsetHeight)\">\n @if (!(label.length > 20 && size === 'large' && spiderChartData.labels.length < 9)) {\n <div class=\"label\" [style.max-width]=\"size === 'large' ? '135px' : '100px'\">\n {{ label }}\n </div>\n } @else {\n <div>\n <div class=\"label\" [style.max-width]=\"size === 'large' ? '135px' : '100px'\">{{ label | memoizeFunc : getFirstLine }}</div>\n <div class=\"label\" [style.max-width]=\"size === 'large' ? '135px' : '100px'\">{{ label | memoizeFunc : getSecondLine : this }}</div>\n </div>\n }\n <span class=\"value\">{{ spiderChartData.plotData[0].data[$index] }}</span>\n </div>\n <span class=\"fake-data-points\" #fakeDataPoints\n [tabindex]=\"focusedLabelIndex === $index ? '0' : '-1'\"\n (focus)=\"$index === focusedLabelIndex ? showTooltipForDataPoint($index) : null\"\n (keydown)=\"onFakeDataPointsKeyDown($event, $index)\">\n </span>\n @if (radarChartData.datasets.length > 1) {\n <span class=\"fake-data-points-secondary\" #fakeDataPointsSecondary\n [tabindex]=\"focusedFakeDataPointIndex === $index ? '0' : '-1'\"\n (focus)=\"$index === focusedFakeDataPointIndex ? showTooltipForDataPoint($index, true) : null\"\n (keydown)=\"onFakeDataPointsKeyDown($event, $index, true)\">\n </span>\n }\n }\n </div>\n }\n </div>\n </div>\n @if (radarChartData.datasets.length > 0) {\n <div class=\"legend-container\">\n @for (dataset of radarChartData.datasets; track dataset.label) {\n <div class=\"legend-item\"\n (click)=\"toggleDatasetVisibility($index)\"\n [tabindex]=\"$index === 0 ? '0' : '-1'\"\n role=\"button\"\n [attr.aria-pressed]=\"isDatasetVisible($index) ? false : true\"\n [attr.aria-label]=\"isDatasetVisible($index) ?\n ((translationContext + 'DATASET_VISIBLE') | uiTranslate : { dataset: dataset.label } | async) :\n ((translationContext + 'DATASET_HIDDEN') | uiTranslate : { dataset: dataset.label } | async)\"\n (keydown)=\"onLegendItemKeyDown($event, $index)\"\n #legendItem>\n <span class=\"legend-line\" [ngClass]=\"{'solid-line': $index === 0, 'dashed-line': $index === 1}\"></span>\n <span class=\"legend-label\" [style.text-decoration]=\"isDatasetVisible($index) ? 'none' : 'line-through'\">\n {{ dataset.label }}\n </span>\n </div>\n }\n </div>\n }\n</div>\n\n","import { NgModule } from '@angular/core';\nimport { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { SpiderChartComponent } from './spider-chart.component';\nimport { NgChartsModule } from 'ng2-charts';\nimport { Chart, registerables } from 'chart.js';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { CommonModule, NgClass } from '@angular/common';\nimport { SpinnerComponentModule } from '@testgorilla/tgo-ui/components/spinner';\nimport { MemoizeFuncPipe } from '@testgorilla/tgo-ui/components/core';\n\nChart.register(...registerables);\n\n@NgModule({\n declarations: [SpiderChartComponent],\n exports: [SpiderChartComponent],\n imports: [\n NgClass,\n UiTranslatePipe,\n NgChartsModule,\n MatTooltipModule,\n UiTranslatePipe,\n MemoizeFuncPipe,\n SpinnerComponentModule,\n CommonModule,\n ],\n})\nexport class SpiderChartComponentModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|