@testgorilla/tgo-ui 8.19.1 → 9.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/index.d.ts +7 -7
- package/components/ai-audio-circle/index.d.ts +3 -3
- package/components/ai-caveat/index.d.ts +5 -5
- package/components/ai-feedback/index.d.ts +14 -14
- package/components/alert-banner/index.d.ts +8 -8
- package/components/autocomplete/index.d.ts +15 -16
- package/components/autocomplete-v2/index.d.ts +36 -32
- package/components/avatar/index.d.ts +7 -7
- package/components/badge/index.d.ts +6 -6
- package/components/breadcrumb/index.d.ts +11 -11
- package/components/button/index.d.ts +23 -13
- package/components/card/index.d.ts +4 -4
- package/components/checkbox/index.d.ts +24 -24
- package/components/core/index.d.ts +39 -31
- package/components/datepicker/index.d.ts +18 -18
- package/components/dialog/index.d.ts +29 -21
- package/components/divider/index.d.ts +4 -4
- package/components/donut-chart/index.d.ts +3 -3
- package/components/dropdown/index.d.ts +37 -33
- package/components/elevation-shadow/index.d.ts +3 -3
- package/components/empty-state/index.d.ts +7 -7
- package/components/field/index.d.ts +33 -44
- package/components/file-upload/index.d.ts +14 -13
- package/components/filter-button/index.d.ts +19 -19
- package/components/gaussian-chart/index.d.ts +8 -8
- package/components/icon/index.d.ts +20 -18
- package/components/icon-label/index.d.ts +5 -5
- package/components/inline-field/index.d.ts +20 -24
- package/components/logo/index.d.ts +2 -3
- package/components/media-dialog/index.d.ts +3 -3
- package/components/multi-input/index.d.ts +25 -16
- package/components/navbar/index.d.ts +30 -30
- package/components/overflow-menu/index.d.ts +20 -19
- package/components/page-header/index.d.ts +5 -5
- package/components/paginator/index.d.ts +4 -4
- package/components/password-criteria/index.d.ts +13 -12
- package/components/password-strength/index.d.ts +6 -6
- package/components/phone-input/index.d.ts +28 -30
- package/components/progress-bar/index.d.ts +5 -5
- package/components/prompt/index.d.ts +25 -25
- package/components/radial-progress/index.d.ts +5 -5
- package/components/radio-button/index.d.ts +28 -29
- package/components/rating/index.d.ts +5 -5
- package/components/scale/index.d.ts +4 -4
- package/components/segmented-bar/index.d.ts +8 -8
- package/components/segmented-button/index.d.ts +17 -16
- package/components/selectable-card/index.d.ts +6 -6
- package/components/side-navigation/index.d.ts +14 -14
- package/components/side-panel/index.d.ts +8 -8
- package/components/side-sheet/index.d.ts +19 -17
- package/components/snackbar/index.d.ts +16 -15
- package/components/spider-chart/index.d.ts +12 -12
- package/components/spinner/index.d.ts +5 -5
- package/components/stepper/index.d.ts +35 -35
- package/components/table/index.d.ts +36 -34
- package/components/tabs/index.d.ts +18 -17
- package/components/tag/index.d.ts +10 -10
- package/components/toggle/index.d.ts +10 -9
- package/components/tooltip/index.d.ts +16 -18
- package/components/universal-skills/index.d.ts +16 -16
- package/components/validation-error/index.d.ts +22 -10
- package/components/write-with-ai/index.d.ts +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-accordion.mjs +36 -15
- package/fesm2022/testgorilla-tgo-ui-components-accordion.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-ai-audio-circle.mjs +9 -12
- package/fesm2022/testgorilla-tgo-ui-components-ai-audio-circle.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-ai-caveat.mjs +7 -10
- package/fesm2022/testgorilla-tgo-ui-components-ai-caveat.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs +39 -27
- package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs +25 -14
- package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-audio-waveform.mjs +4 -2
- package/fesm2022/testgorilla-tgo-ui-components-audio-waveform.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-autocomplete-v2.mjs +134 -117
- package/fesm2022/testgorilla-tgo-ui-components-autocomplete-v2.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-autocomplete.mjs +47 -48
- package/fesm2022/testgorilla-tgo-ui-components-autocomplete.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs +30 -18
- package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-badge.mjs +9 -12
- package/fesm2022/testgorilla-tgo-ui-components-badge.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs +25 -18
- package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-button.mjs +155 -120
- package/fesm2022/testgorilla-tgo-ui-components-button.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-card.mjs +7 -9
- package/fesm2022/testgorilla-tgo-ui-components-card.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-checkbox.mjs +51 -47
- package/fesm2022/testgorilla-tgo-ui-components-checkbox.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-core.mjs +2232 -2210
- package/fesm2022/testgorilla-tgo-ui-components-core.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-datepicker.mjs +44 -25
- package/fesm2022/testgorilla-tgo-ui-components-datepicker.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs +55 -31
- package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-divider.mjs +8 -11
- package/fesm2022/testgorilla-tgo-ui-components-divider.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-donut-chart.mjs +8 -10
- package/fesm2022/testgorilla-tgo-ui-components-donut-chart.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs +105 -90
- package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-elevation-shadow.mjs +5 -7
- package/fesm2022/testgorilla-tgo-ui-components-elevation-shadow.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs +24 -13
- package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-field.mjs +65 -57
- package/fesm2022/testgorilla-tgo-ui-components-field.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-file-upload.mjs +35 -23
- package/fesm2022/testgorilla-tgo-ui-components-file-upload.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs +34 -27
- package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-gaussian-chart.mjs +26 -16
- package/fesm2022/testgorilla-tgo-ui-components-gaussian-chart.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-icon-label.mjs +6 -7
- package/fesm2022/testgorilla-tgo-ui-components-icon-label.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-icon.mjs +63 -57
- package/fesm2022/testgorilla-tgo-ui-components-icon.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs +24 -24
- package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-logo.mjs +6 -6
- package/fesm2022/testgorilla-tgo-ui-components-logo.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs +6 -6
- package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs +4 -4
- package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-multi-input.mjs +42 -21
- package/fesm2022/testgorilla-tgo-ui-components-multi-input.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs +44 -32
- package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs +39 -21
- package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs +10 -14
- package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-paginator.mjs +7 -9
- package/fesm2022/testgorilla-tgo-ui-components-paginator.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-password-criteria.mjs +33 -20
- package/fesm2022/testgorilla-tgo-ui-components-password-criteria.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-password-strength.mjs +9 -12
- package/fesm2022/testgorilla-tgo-ui-components-password-strength.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-phone-input.mjs +82 -73
- package/fesm2022/testgorilla-tgo-ui-components-phone-input.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-popover.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-progress-bar.mjs +8 -11
- package/fesm2022/testgorilla-tgo-ui-components-progress-bar.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs +47 -40
- package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs +7 -10
- package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-radio-button.mjs +43 -48
- package/fesm2022/testgorilla-tgo-ui-components-radio-button.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-rating.mjs +7 -12
- package/fesm2022/testgorilla-tgo-ui-components-rating.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-scale.mjs +6 -10
- package/fesm2022/testgorilla-tgo-ui-components-scale.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-segmented-bar.mjs +30 -16
- package/fesm2022/testgorilla-tgo-ui-components-segmented-bar.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-segmented-button.mjs +15 -14
- package/fesm2022/testgorilla-tgo-ui-components-segmented-button.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-segmented-toggle.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-selectable-card.mjs +8 -11
- package/fesm2022/testgorilla-tgo-ui-components-selectable-card.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-side-navigation.mjs +27 -21
- package/fesm2022/testgorilla-tgo-ui-components-side-navigation.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs +5 -2
- package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs +34 -26
- package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-skeleton.mjs +5 -5
- package/fesm2022/testgorilla-tgo-ui-components-skeleton.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-slider.mjs +10 -10
- package/fesm2022/testgorilla-tgo-ui-components-slider.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs +31 -20
- package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-spider-chart.mjs +28 -23
- package/fesm2022/testgorilla-tgo-ui-components-spider-chart.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-spinner.mjs +9 -12
- package/fesm2022/testgorilla-tgo-ui-components-spinner.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-stepper.mjs +85 -79
- package/fesm2022/testgorilla-tgo-ui-components-stepper.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-table.mjs +74 -51
- package/fesm2022/testgorilla-tgo-ui-components-table.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-tabs.mjs +57 -25
- package/fesm2022/testgorilla-tgo-ui-components-tabs.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-tag.mjs +16 -17
- package/fesm2022/testgorilla-tgo-ui-components-tag.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-toggle.mjs +25 -17
- package/fesm2022/testgorilla-tgo-ui-components-toggle.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-tooltip.mjs +44 -28
- package/fesm2022/testgorilla-tgo-ui-components-tooltip.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-universal-skills.mjs +34 -27
- package/fesm2022/testgorilla-tgo-ui-components-universal-skills.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-validation-error.mjs +30 -14
- package/fesm2022/testgorilla-tgo-ui-components-validation-error.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-write-with-ai.mjs +13 -11
- package/fesm2022/testgorilla-tgo-ui-components-write-with-ai.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui.mjs +6 -8
- package/fesm2022/testgorilla-tgo-ui.mjs.map +1 -1
- package/index.d.ts +4 -4
- package/mcp/catalog.json +1 -1
- package/package.json +1 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testgorilla-tgo-ui-components-file-upload.mjs","sources":["../../../components/file-upload/drag-drop.directive.ts","../../../components/file-upload/file-upload.component.ts","../../../components/file-upload/file-upload.component.html","../../../components/file-upload/file-upload.component.module.ts","../../../components/file-upload/testgorilla-tgo-ui-components-file-upload.ts"],"sourcesContent":["import { Directive, EventEmitter, HostBinding, HostListener, Output } from '@angular/core';\n\n@Directive({\n selector: '[uiDragDrop]',\n standalone: false,\n})\nexport class DragDropDirective {\n constructor() {}\n\n @HostBinding('class.file-over') file: boolean;\n @Output() fileDropped = new EventEmitter<any>();\n\n // Dragover listener\n @HostListener('dragover', ['$event']) onDragOver(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n this.file = true;\n }\n\n // Dragleave listener\n @HostListener('dragleave', ['$event']) public onDragLeave(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n this.file = false;\n }\n\n // Drop listener\n @HostListener('drop', ['$event']) public ondrop(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.file = false;\n let files: FileList;\n if (event.dataTransfer) {\n files = event.dataTransfer.files;\n if (files.length > 0) {\n this.fileDropped.emit(files);\n }\n }\n }\n}\n","import { animate, style, transition, trigger } from '@angular/animations';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ApplicationTheme, Color } from '@testgorilla/tgo-ui/components/core';\n\n@Component({\n selector: 'ui-file-upload',\n templateUrl: './file-upload.component.html',\n styleUrls: ['./file-upload.component.scss'],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FileUploadComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('inOutAnimation', [\n transition(':enter', [\n style({ opacity: 0, height: 0 }),\n animate('0.2s ease-out', style({ opacity: 1, height: '196px' })),\n ]),\n transition(':leave', [\n style({ opacity: 1, height: '196px' }),\n animate('0.2s ease-in', style({ opacity: 0, height: 0 })),\n ]),\n ]),\n trigger('inOutAnimationProgress', [\n transition(':enter', [\n style({ opacity: 0, height: 0 }),\n animate('0.2s ease-out', style({ opacity: 1, height: '196px' })),\n ]),\n transition(':leave', [\n style({ opacity: 1, height: '196px' }),\n animate('0.2s ease-in', style({ opacity: 0, height: 0 })),\n ]),\n ]),\n trigger('inOutAnimationChange', [\n transition(':enter', [\n style({ opacity: 0, height: 0 }),\n animate('0.2s ease-out', style({ opacity: 1, height: '196px' })),\n ]),\n transition(':leave', [\n style({ opacity: 1, height: '196px' }),\n animate('0.2s ease-in', style({ opacity: 0, height: 0 })),\n ]),\n ]),\n ],\n standalone: false,\n})\nexport class FileUploadComponent implements OnInit, OnChanges, ControlValueAccessor {\n @HostBinding() class = 'ui-file-upload';\n\n /**\n *\n * @type {number}\n * @memberof FileUploadComponent\n */\n @Input() maxFileSizeMB: number;\n\n /**\n *\n * @type {number}\n * @memberof FileUploadComponent\n */\n @Input() minFileSizeMB: number;\n\n /**\n * Supported files for input field\n *\n * @type {string}\n * @memberof FileUploadComponent\n */\n @Input() supportedFileTypes?: string;\n\n /**\n * Upload progress\n *\n * @type {number}\n * @memberof FileUploadComponent\n */\n @Input() uploadProgress: number;\n\n /**\n * Show Upload progress percentage or not\n *\n * @type {boolean}\n * @memberof FileUploadComponent\n */\n @Input() showUploadProgress = true;\n\n /**\n * Custom progress message\n *\n * @type {string}\n * @memberof FileUploadComponent\n */\n @Input() fileProcessingMessage: string | undefined;\n\n /**\n * File upload errors\n *\n * @type {string[]}\n * @memberof FileUploadComponent\n */\n @Input() errors?: string[] | null;\n\n /**\n * File upload disabled\n *\n * @type {boolean}\n * @memberof FileUploadComponent\n */\n @Input() disabled = false;\n\n /**\n * Existing file information\n *\n * @type {(File | null)}\n * @memberof FileUploadComponent\n */\n @Input() file: File | null = null;\n\n /**\n * Color of the file upload.\n * Defaults to Test Gorilla primary color.\n *\n * @type {string}\n * @memberof FileUploadComponent\n */\n @Input() companyColor: string | null = '';\n\n @HostBinding('style.--color')\n compColor: string;\n\n /**\n *\n * Defines the application theme\n *\n * @type {ApplicationTheme}\n * @memberof FileUploadComponent\n */\n @Input() applicationTheme: ApplicationTheme = 'light';\n\n /**\n * A string representing the ARIA label for accessibility.\n * This label is used to provide an accessible name for the input element.\n * @type {string}\n * @memberof FileUploadComponent\n */\n @Input() ariaLabel: string;\n\n /**\n * A string representing the ARIA requirement for accessibility.\n * This attribute is used to indicate whether an input field is required for form submission.\n * @type {boolean}\n * @memberof FileUploadComponent\n */\n @Input() ariaRequired = false;\n\n /**\n * Whether to show the file size information.\n * @type {boolean}\n * @memberof FileUploadComponent\n */\n @Input() showFileSize = true;\n\n @Output() OnDrop: EventEmitter<File> = new EventEmitter<File>();\n\n @ViewChild('fileDrop') fileDrop: ElementRef<HTMLInputElement>;\n\n protected readonly translationContext = 'FILE_UPLOAD.';\n\n /**\n * @ignore\n */\n onChange = (_value: any) => {};\n\n /**\n * @ignore\n */\n onTouch = () => {};\n\n get fileSizeInMB(): string | null {\n return this.file ? (this.file.size / (1024 * 1024)).toFixed(2) : null;\n }\n\n isMissedMinSize = false;\n progress = false;\n success = false;\n browse: boolean;\n isCanceled = false;\n colorUploadSuccess = Color.SUCCESS_50;\n\n constructor(\n @Optional() @Inject('CANOPYUI_DEFAULT_APPLICATION_THEME') private readonly defaultAppTheme: ApplicationTheme\n ) {\n if (defaultAppTheme) {\n this.applicationTheme = defaultAppTheme;\n }\n }\n\n ngOnInit(): void {\n this.browse = true;\n }\n\n //When file is dropped\n onFileDropped(files: FileList) {\n this.emitFile(files);\n }\n\n //When input changes\n onChangeUpload(event: Event) {\n this.isCanceled = false;\n const element = event.currentTarget as HTMLInputElement;\n // Prevents clearing items when user selects cancel in the dialog. Cancel event can emit empty file list.\n if (element.files?.length) {\n this.emitFile(element.files || new FileList());\n }\n }\n\n //Emit drop file\n emitFile(files: FileList) {\n const [file] = Array.from(files);\n this.file = file;\n this.errors = null;\n this.onTouch();\n this.isMissedMinSize =\n !file?.size && !this.minFileSizeMB ? true : this.fileSizeToMB(file?.size ?? 0) <= this.minFileSizeMB;\n if (!this.isMissedMinSize) {\n this.onChange(this.file);\n this.OnDrop.emit(file);\n }\n }\n\n //Show progress-bar\n showProgress(): boolean {\n this.browse = false;\n return !!(this.file && !this.errors && !this.isMissedMinSize);\n }\n\n //Show success elements\n showSuccess(): boolean {\n return !!(this.file && this.uploadProgress === 100 && !this.errors && !this.isMissedMinSize);\n }\n\n //Show browse when there are error\n showBrowse(): boolean {\n return !!(this.errors || this.isMissedMinSize);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (!this.isCanceled) {\n if (changes['uploadProgress'] || changes['file']) {\n this.progress = this.showProgress();\n this.success = this.showSuccess();\n this.browse = this.showBrowse();\n }\n if (changes['errors']) {\n this.progress = this.showProgress();\n this.success = this.showSuccess();\n this.browse = this.showBrowse();\n }\n if (changes['applicationTheme']) {\n this.compColor = this.getCompanyColor();\n }\n }\n }\n\n writeValue(value?: File): void {\n if (value) {\n this.file = value || null;\n } else {\n this.file = null;\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n private getCompanyColor(): string {\n return this.companyColor || (this.applicationTheme === 'classic' ? '#46A997' : '#D410AA');\n }\n\n private fileSizeToMB(fileSize: number): number {\n return fileSize / 1024 / 1024;\n }\n\n onKeydown(ev: KeyboardEvent) {\n if (ev.key === 'Enter' || ev.key === ' ') {\n this.fileDrop?.nativeElement?.click();\n } else if (ev.key === 'Escape') {\n this.file = null;\n this.success = false;\n this.progress = false;\n this.errors = null;\n this.isMissedMinSize = false;\n this.browse = true;\n this.isCanceled = true;\n }\n }\n}\n","<ng-container>\n <div\n class=\"upload-file-container\"\n uiDragDrop\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-required]=\"ariaRequired\"\n [attr.theme]=\"applicationTheme\"\n [ngClass]=\"{ 'upload-errors': !!errors || isMissedMinSize, 'upload-file-container-disabled': disabled }\"\n (fileDropped)=\"onFileDropped($event)\"\n tabindex=\"0\"\n [tabIndex]=\"0\"\n (keydown)=\"onKeydown($event)\"\n (click)=\"fileDrop?.nativeElement?.click()\"\n >\n @if (browse && !(success && !!file && progress)) {\n <div [@inOutAnimation] class=\"upload-files\">\n <div class=\"upload-browse\">\n <ng-container [ngTemplateOutlet]=\"iconTpl\"></ng-container>\n @if (!!errors || isMissedMinSize) {\n <div class=\"errors\" role=\"alert\">\n @if (!!errors) {\n @for (error of errors; track error) {\n <span><ui-icon name=\"Error\" class=\"error-icon\"></ui-icon> {{ error }}</span>\n }\n }\n @if (isMissedMinSize) {\n <span>\n <ui-icon name=\"Error\" class=\"error-icon\"></ui-icon>\n {{ translationContext + 'MIN_SIZE_ERROR' | uiTranslate: { min: minFileSizeMB } | async }}\n </span>\n }\n </div>\n }\n <input\n [attr.aria-labelledby]=\"success || progress ? '' : 'drag-and-drop'\"\n [attr.aria-describedby]=\"'upload-supported-files'\"\n [tabIndex]=\"-1\"\n class=\"form-control\"\n #fileDrop\n type=\"file\"\n id=\"file\"\n [accept]=\"supportedFileTypes\"\n [disabled]=\"disabled\"\n (change)=\"onChangeUpload($event)\"\n />\n @if (applicationTheme === 'classic') {\n <p>\n {{ translationContext + 'DRAG_AND_DROP_OR' | uiTranslate | async }}\n <span class=\"semibold\"> {{ translationContext + 'BROWSE' | uiTranslate | async | lowercase }}</span>\n {{ translationContext + 'YOUR_FILES' | uiTranslate | async }}\n </p>\n } @else {\n <p id=\"'drag-and-drop'\">{{ translationContext + 'DRAG_AND_DROP' | uiTranslate | async }}</p>\n }\n <span class=\"upload-text\"\n >{{ maxFileSizeMB }}{{ translationContext + 'MAX_SIZE' | uiTranslate | async }}</span\n >\n @if (minFileSizeMB) {\n <span class=\"upload-text\"\n >{{ minFileSizeMB }}{{ translationContext + 'MIN_SIZE' | uiTranslate | async }}</span\n >\n }\n </div>\n </div>\n }\n @if (success) {\n <div class=\"upload-success\">\n <ng-container [ngTemplateOutlet]=\"iconTpl\"></ng-container>\n <span class=\"upload-success-text\"\n ><ui-icon name=\"Check-round-in-line\" [color]=\"colorUploadSuccess\"></ui-icon\n >{{ translationContext + 'FILE_UPLOADING_SUCCESS' | uiTranslate | async }}</span\n >\n <input\n [tabIndex]=\"-1\"\n [attr.aria-labelledby]=\"success || progress ? '' : 'drag-and-drop'\"\n [attr.aria-describedby]=\"success || progress ? '' : 'supported-file-types'\"\n class=\"form-control\"\n #fileDrop\n type=\"file\"\n id=\"fileTest\"\n [accept]=\"supportedFileTypes\"\n (change)=\"onChangeUpload($event)\"\n [disabled]=\"disabled\"\n />\n <span class=\"upload-text\">{{ file?.name }}</span>\n @if (showFileSize) {\n <span class=\"upload-text\">{{\n translationContext + 'FILE_SIZE' | uiTranslate: { fileSize: fileSizeInMB } | async\n }}</span>\n }\n </div>\n }\n @if (!!progress && !!file && !success) {\n <div class=\"upload-progress\" [@inOutAnimationProgress]>\n <p>{{ file.name }}</p>\n <ui-progress-bar\n [progress]=\"uploadProgress\"\n [companyColor]=\"compColor\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-progress-bar>\n <p class=\"upload-text\">\n {{ fileProcessingMessage ?? (translationContext + 'UPLOADING' | uiTranslate | async) }}\n @if (showUploadProgress) {\n <span>{{ uploadProgress }}</span\n >%\n }\n </p>\n </div>\n }\n\n <ng-template #iconTpl>\n @if (applicationTheme === 'classic') {\n <ui-icon class=\"upload-icon\" name=\"File-upload\"></ui-icon>\n } @else {\n <ui-icon class=\"upload-icon\" name=\"Upload\" [size]=\"'24'\" [applicationTheme]=\"applicationTheme\"></ui-icon>\n }\n </ng-template>\n\n @if (!!supportedFileTypes) {\n <div [attr.theme]=\"applicationTheme\" class=\"upload-supported-files\" id=\"upload-supported-files\">\n <span>{{ translationContext + 'SUPPORTED_FILE_TYPES' | uiTranslate | async }}</span\n >{{ supportedFileTypes }}\n </div>\n }\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { DragDropDirective } from './drag-drop.directive';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { ProgressBarComponentModule } from '@testgorilla/tgo-ui/components/progress-bar';\nimport { FileUploadComponent } from './file-upload.component';\nimport { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\n\n@NgModule({\n declarations: [FileUploadComponent, DragDropDirective],\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n IconComponentModule,\n ProgressBarComponentModule,\n UiTranslatePipe,\n ],\n exports: [FileUploadComponent],\n})\nexport class FileUploadComponentModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4.DragDropDirective"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"testgorilla-tgo-ui-components-file-upload.mjs","sources":["../../../components/file-upload/drag-drop.directive.ts","../../../components/file-upload/file-upload.component.ts","../../../components/file-upload/file-upload.component.html","../../../components/file-upload/file-upload.component.module.ts","../../../components/file-upload/testgorilla-tgo-ui-components-file-upload.ts"],"sourcesContent":["import { Directive, EventEmitter, HostBinding, HostListener, Output } from '@angular/core';\n\n@Directive({ selector: '[uiDragDrop]' })\nexport class DragDropDirective {\n constructor() {}\n\n @HostBinding('class.file-over') file: boolean;\n @Output() fileDropped = new EventEmitter<FileList>();\n\n // Dragover listener\n @HostListener('dragover', ['$event']) onDragOver(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n this.file = true;\n }\n\n // Dragleave listener\n @HostListener('dragleave', ['$event']) public onDragLeave(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n this.file = false;\n }\n\n // Drop listener\n @HostListener('drop', ['$event']) public ondrop(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.file = false;\n let files: FileList;\n if (event.dataTransfer) {\n files = event.dataTransfer.files;\n if (files.length > 0) {\n this.fileDropped.emit(files);\n }\n }\n }\n}\n","import { animate, style, transition, trigger } from '@angular/animations';\nimport { NgClass, NgTemplateOutlet, AsyncPipe, LowerCasePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Inject,\n inject,\n Input,\n OnChanges,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { ApplicationTheme, Color, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponent } from '@testgorilla/tgo-ui/components/icon';\nimport { ProgressBarComponent } from '@testgorilla/tgo-ui/components/progress-bar';\n\nimport { DragDropDirective } from './drag-drop.directive';\n\n@Component({\n selector: 'ui-file-upload',\n templateUrl: './file-upload.component.html',\n styleUrls: ['./file-upload.component.scss'],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FileUploadComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n /* eslint-disable @typescript-eslint/no-deprecated -- the @angular/animations trigger/state/style/animate/transition DSL is deprecated in 20.2 in favor of template-level animate.enter/animate.leave; migrating every Material/component animation is out of scope for this lint pass */\n animations: [\n trigger('inOutAnimation', [\n transition(':enter', [\n style({ opacity: 0, height: 0 }),\n animate('0.2s ease-out', style({ opacity: 1, height: '196px' })),\n ]),\n transition(':leave', [\n style({ opacity: 1, height: '196px' }),\n animate('0.2s ease-in', style({ opacity: 0, height: 0 })),\n ]),\n ]),\n trigger('inOutAnimationProgress', [\n transition(':enter', [\n style({ opacity: 0, height: 0 }),\n animate('0.2s ease-out', style({ opacity: 1, height: '196px' })),\n ]),\n transition(':leave', [\n style({ opacity: 1, height: '196px' }),\n animate('0.2s ease-in', style({ opacity: 0, height: 0 })),\n ]),\n ]),\n trigger('inOutAnimationChange', [\n transition(':enter', [\n style({ opacity: 0, height: 0 }),\n animate('0.2s ease-out', style({ opacity: 1, height: '196px' })),\n ]),\n transition(':leave', [\n style({ opacity: 1, height: '196px' }),\n animate('0.2s ease-in', style({ opacity: 0, height: 0 })),\n ]),\n ]),\n ],\n imports: [\n DragDropDirective,\n NgClass,\n NgTemplateOutlet,\n IconComponent,\n ProgressBarComponent,\n AsyncPipe,\n LowerCasePipe,\n UiTranslatePipe,\n ],\n})\nexport class FileUploadComponent implements OnInit, OnChanges, ControlValueAccessor {\n @HostBinding() class = 'ui-file-upload';\n\n /**\n *\n * @type {number}\n * @memberof FileUploadComponent\n */\n @Input() maxFileSizeMB: number;\n\n /**\n *\n * @type {number}\n * @memberof FileUploadComponent\n */\n @Input() minFileSizeMB: number;\n\n /**\n * Supported files for input field\n *\n * @type {string}\n * @memberof FileUploadComponent\n */\n @Input() supportedFileTypes?: string;\n\n /**\n * Upload progress\n *\n * @type {number}\n * @memberof FileUploadComponent\n */\n @Input() uploadProgress: number;\n\n /**\n * Show Upload progress percentage or not\n *\n * @type {boolean}\n * @memberof FileUploadComponent\n */\n @Input() showUploadProgress = true;\n\n /**\n * Custom progress message\n *\n * @type {string}\n * @memberof FileUploadComponent\n */\n @Input() fileProcessingMessage: string | undefined;\n\n /**\n * File upload errors\n *\n * @type {string[]}\n * @memberof FileUploadComponent\n */\n @Input() errors?: string[] | null;\n\n /**\n * File upload disabled\n *\n * @type {boolean}\n * @memberof FileUploadComponent\n */\n @Input() disabled = false;\n\n /**\n * Existing file information\n *\n * @type {(File | null)}\n * @memberof FileUploadComponent\n */\n @Input() file: File | null = null;\n\n /**\n * Color of the file upload.\n * Defaults to Test Gorilla primary color.\n *\n * @type {string}\n * @memberof FileUploadComponent\n */\n @Input() companyColor: string | null = '';\n\n @HostBinding('style.--color')\n compColor: string;\n\n /**\n *\n * Defines the application theme\n *\n * @type {ApplicationTheme}\n * @memberof FileUploadComponent\n */\n @Input() applicationTheme: ApplicationTheme = 'light';\n\n /**\n * A string representing the ARIA label for accessibility.\n * This label is used to provide an accessible name for the input element.\n * @type {string}\n * @memberof FileUploadComponent\n */\n @Input() ariaLabel: string;\n\n /**\n * A string representing the ARIA requirement for accessibility.\n * This attribute is used to indicate whether an input field is required for form submission.\n * @type {boolean}\n * @memberof FileUploadComponent\n */\n @Input() ariaRequired = false;\n\n /**\n * Whether to show the file size information.\n * @type {boolean}\n * @memberof FileUploadComponent\n */\n @Input() showFileSize = true;\n\n @Output() OnDrop: EventEmitter<File> = new EventEmitter<File>();\n\n @ViewChild('fileDrop') fileDrop: ElementRef<HTMLInputElement>;\n\n protected readonly translationContext = 'FILE_UPLOAD.';\n\n /**\n * @ignore\n */\n onChange = (_value: File | null) => {};\n\n /**\n * @ignore\n */\n onTouch = () => {};\n\n get fileSizeInMB(): string | null {\n return this.file ? (this.file.size / (1024 * 1024)).toFixed(2) : null;\n }\n\n isMissedMinSize = false;\n progress = false;\n success = false;\n browse: boolean;\n isCanceled = false;\n colorUploadSuccess = Color.SUCCESS_50;\n\n constructor(\n @Optional() @Inject('CANOPYUI_DEFAULT_APPLICATION_THEME') private readonly defaultAppTheme: ApplicationTheme\n ) {\n if (defaultAppTheme) {\n this.applicationTheme = defaultAppTheme;\n }\n }\n\n ngOnInit(): void {\n this.browse = true;\n }\n\n //When file is dropped\n onFileDropped(files: FileList) {\n this.emitFile(files);\n }\n\n //When input changes\n onChangeUpload(event: Event) {\n this.isCanceled = false;\n const element = event.currentTarget as HTMLInputElement;\n // Prevents clearing items when user selects cancel in the dialog. Cancel event can emit empty file list.\n if (element.files?.length) {\n this.emitFile(element.files || new FileList());\n }\n }\n\n //Emit drop file\n emitFile(files: FileList) {\n const [file] = Array.from(files);\n this.file = file;\n this.errors = null;\n this.onTouch();\n this.isMissedMinSize =\n !file?.size && !this.minFileSizeMB ? true : this.fileSizeToMB(file?.size ?? 0) <= this.minFileSizeMB;\n if (!this.isMissedMinSize) {\n this.onChange(this.file);\n this.OnDrop.emit(file);\n }\n }\n\n //Show progress-bar\n showProgress(): boolean {\n this.browse = false;\n return Boolean(this.file && !this.errors && !this.isMissedMinSize);\n }\n\n //Show success elements\n showSuccess(): boolean {\n return Boolean(this.file && this.uploadProgress === 100 && !this.errors && !this.isMissedMinSize);\n }\n\n //Show browse when there are error\n showBrowse(): boolean {\n return Boolean(this.errors) || this.isMissedMinSize;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (!this.isCanceled) {\n if (changes['uploadProgress'] || changes['file']) {\n this.progress = this.showProgress();\n this.success = this.showSuccess();\n this.browse = this.showBrowse();\n }\n if (changes['errors']) {\n this.progress = this.showProgress();\n this.success = this.showSuccess();\n this.browse = this.showBrowse();\n }\n if (changes['applicationTheme']) {\n this.compColor = this.getCompanyColor();\n }\n }\n }\n\n private readonly cdr = inject(ChangeDetectorRef);\n\n writeValue(value?: File): void {\n if (value) {\n this.file = value || null;\n } else {\n this.file = null;\n }\n // The forms API calls this from outside the component's own change\n // detection — under OnPush the view must be marked explicitly.\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: File | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouch = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n private getCompanyColor(): string {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- empty companyColor falls back to the theme colour\n return this.companyColor || (this.applicationTheme === 'classic' ? '#46A997' : '#D410AA');\n }\n\n private fileSizeToMB(fileSize: number): number {\n return fileSize / 1024 / 1024;\n }\n\n onKeydown(ev: KeyboardEvent) {\n if (ev.key === 'Enter' || ev.key === ' ') {\n this.fileDrop?.nativeElement?.click();\n } else if (ev.key === 'Escape') {\n this.file = null;\n this.success = false;\n this.progress = false;\n this.errors = null;\n this.isMissedMinSize = false;\n this.browse = true;\n this.isCanceled = true;\n }\n }\n}\n","<ng-container>\n <div\n class=\"upload-file-container\"\n uiDragDrop\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-required]=\"ariaRequired\"\n [attr.theme]=\"applicationTheme\"\n [ngClass]=\"{ 'upload-errors': !!errors || isMissedMinSize, 'upload-file-container-disabled': disabled }\"\n (fileDropped)=\"onFileDropped($event)\"\n tabindex=\"0\"\n [tabIndex]=\"0\"\n (keydown)=\"onKeydown($event)\"\n (click)=\"fileDrop?.nativeElement?.click()\"\n >\n @if (browse && !(success && !!file && progress)) {\n <div [@inOutAnimation] class=\"upload-files\">\n <div class=\"upload-browse\">\n <ng-container [ngTemplateOutlet]=\"iconTpl\"></ng-container>\n @if (!!errors || isMissedMinSize) {\n <div class=\"errors\" role=\"alert\">\n @if (!!errors) {\n @for (error of errors; track error) {\n <span><ui-icon name=\"Error\" class=\"error-icon\"></ui-icon> {{ error }}</span>\n }\n }\n @if (isMissedMinSize) {\n <span>\n <ui-icon name=\"Error\" class=\"error-icon\"></ui-icon>\n {{ translationContext + 'MIN_SIZE_ERROR' | uiTranslate: { min: minFileSizeMB } | async }}\n </span>\n }\n </div>\n }\n <input\n data-testid=\"file-upload-input\"\n [attr.aria-labelledby]=\"success || progress ? '' : 'drag-and-drop'\"\n [attr.aria-describedby]=\"'upload-supported-files'\"\n [tabIndex]=\"-1\"\n class=\"form-control\"\n #fileDrop\n type=\"file\"\n id=\"file\"\n [accept]=\"supportedFileTypes\"\n [disabled]=\"disabled\"\n (change)=\"onChangeUpload($event)\"\n />\n @if (applicationTheme === 'classic') {\n <p>\n {{ translationContext + 'DRAG_AND_DROP_OR' | uiTranslate | async }}\n <span class=\"semibold\"> {{ translationContext + 'BROWSE' | uiTranslate | async | lowercase }}</span>\n {{ translationContext + 'YOUR_FILES' | uiTranslate | async }}\n </p>\n } @else {\n <p id=\"'drag-and-drop'\">{{ translationContext + 'DRAG_AND_DROP' | uiTranslate | async }}</p>\n }\n <span class=\"upload-text\"\n >{{ maxFileSizeMB }}{{ translationContext + 'MAX_SIZE' | uiTranslate | async }}</span\n >\n @if (minFileSizeMB) {\n <span class=\"upload-text\"\n >{{ minFileSizeMB }}{{ translationContext + 'MIN_SIZE' | uiTranslate | async }}</span\n >\n }\n </div>\n </div>\n }\n @if (success) {\n <div class=\"upload-success\">\n <ng-container [ngTemplateOutlet]=\"iconTpl\"></ng-container>\n <span class=\"upload-success-text\"\n ><ui-icon name=\"Check-round-in-line\" [color]=\"colorUploadSuccess\"></ui-icon\n >{{ translationContext + 'FILE_UPLOADING_SUCCESS' | uiTranslate | async }}</span\n >\n <input\n data-testid=\"file-upload-success-input\"\n [tabIndex]=\"-1\"\n [attr.aria-labelledby]=\"success || progress ? '' : 'drag-and-drop'\"\n [attr.aria-describedby]=\"success || progress ? '' : 'supported-file-types'\"\n class=\"form-control\"\n #fileDrop\n type=\"file\"\n id=\"fileTest\"\n [accept]=\"supportedFileTypes\"\n (change)=\"onChangeUpload($event)\"\n [disabled]=\"disabled\"\n />\n <span class=\"upload-text\">{{ file?.name }}</span>\n @if (showFileSize) {\n <span class=\"upload-text\">{{\n translationContext + 'FILE_SIZE' | uiTranslate: { fileSize: fileSizeInMB } | async\n }}</span>\n }\n </div>\n }\n @if (!!progress && !!file && !success) {\n <div class=\"upload-progress\" [@inOutAnimationProgress]>\n <p>{{ file.name }}</p>\n <ui-progress-bar\n [progress]=\"uploadProgress\"\n [companyColor]=\"compColor\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-progress-bar>\n <p class=\"upload-text\">\n {{ fileProcessingMessage ?? (translationContext + 'UPLOADING' | uiTranslate | async) }}\n @if (showUploadProgress) {\n <span>{{ uploadProgress }}</span\n >%\n }\n </p>\n </div>\n }\n\n <ng-template #iconTpl>\n @if (applicationTheme === 'classic') {\n <ui-icon class=\"upload-icon\" name=\"File-upload\"></ui-icon>\n } @else {\n <ui-icon class=\"upload-icon\" name=\"Upload\" [size]=\"'24'\" [applicationTheme]=\"applicationTheme\"></ui-icon>\n }\n </ng-template>\n\n @if (!!supportedFileTypes) {\n <div [attr.theme]=\"applicationTheme\" class=\"upload-supported-files\" id=\"upload-supported-files\">\n <span>{{ translationContext + 'SUPPORTED_FILE_TYPES' | uiTranslate | async }}</span\n >{{ supportedFileTypes }}\n </div>\n }\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { ProgressBarComponentModule } from '@testgorilla/tgo-ui/components/progress-bar';\n\nimport { DragDropDirective } from './drag-drop.directive';\nimport { FileUploadComponent } from './file-upload.component';\n\n@NgModule({\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n IconComponentModule,\n ProgressBarComponentModule,\n UiTranslatePipe,\n FileUploadComponent,\n DragDropDirective,\n ],\n exports: [FileUploadComponent],\n})\nexport class FileUploadComponentModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +1,17 @@
|
|
|
1
1
|
import { FocusKeyManager } from '@angular/cdk/a11y';
|
|
2
|
+
import { CdkOverlayOrigin, CdkConnectedOverlay, OverlayModule } from '@angular/cdk/overlay';
|
|
3
|
+
import { AsyncPipe, CommonModule } from '@angular/common';
|
|
2
4
|
import * as i0 from '@angular/core';
|
|
3
5
|
import { input, EventEmitter, signal, computed, ViewChildren, ViewChild, HostBinding, Input, Output, Optional, Inject, ChangeDetectionStrategy, ViewEncapsulation, Component, NgModule } from '@angular/core';
|
|
4
|
-
import * as i8 from '@testgorilla/tgo-ui/components/core';
|
|
5
|
-
import { IKeyboardEvent, UiTranslatePipe, EllipseTextDirective } from '@testgorilla/tgo-ui/components/core';
|
|
6
6
|
import * as i1 from '@angular/forms';
|
|
7
7
|
import { FormsModule } from '@angular/forms';
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
12
|
-
import
|
|
13
|
-
import {
|
|
14
|
-
import
|
|
15
|
-
import { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';
|
|
16
|
-
import * as i6 from '@testgorilla/tgo-ui/components/checkbox';
|
|
17
|
-
import { CheckboxComponentModule } from '@testgorilla/tgo-ui/components/checkbox';
|
|
18
|
-
import * as i7 from '@testgorilla/tgo-ui/components/field';
|
|
19
|
-
import { FieldComponentModule } from '@testgorilla/tgo-ui/components/field';
|
|
20
|
-
import * as i9 from '@testgorilla/tgo-ui/components/radio-button';
|
|
21
|
-
import { RadioButtonComponentModule } from '@testgorilla/tgo-ui/components/radio-button';
|
|
22
|
-
import * as i10 from '@angular/common';
|
|
23
|
-
import { CommonModule } from '@angular/common';
|
|
8
|
+
import { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';
|
|
9
|
+
import { ButtonComponent, ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';
|
|
10
|
+
import { CheckboxComponent, CheckboxComponentModule } from '@testgorilla/tgo-ui/components/checkbox';
|
|
11
|
+
import { IKeyboardEvent, EllipseTextDirective, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';
|
|
12
|
+
import { FieldComponent, FieldComponentModule } from '@testgorilla/tgo-ui/components/field';
|
|
13
|
+
import { IconComponent, IconComponentModule } from '@testgorilla/tgo-ui/components/icon';
|
|
14
|
+
import { RadioButtonComponent, RadioButtonComponentModule } from '@testgorilla/tgo-ui/components/radio-button';
|
|
24
15
|
|
|
25
16
|
class FilterButtonComponent {
|
|
26
17
|
constructor(defaultAppTheme, cdr) {
|
|
@@ -125,6 +116,7 @@ class FilterButtonComponent {
|
|
|
125
116
|
let lastSectionTitle;
|
|
126
117
|
return this.options()
|
|
127
118
|
.map(option => {
|
|
119
|
+
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- an empty section title reuses the previous section
|
|
128
120
|
lastSectionTitle = option.sectionTitle || lastSectionTitle;
|
|
129
121
|
return { ...option, sectionTitle: lastSectionTitle };
|
|
130
122
|
})
|
|
@@ -160,7 +152,7 @@ class FilterButtonComponent {
|
|
|
160
152
|
this.cdr.markForCheck();
|
|
161
153
|
}
|
|
162
154
|
isSelected(value) {
|
|
163
|
-
return this.value?.includes(value
|
|
155
|
+
return this.value?.includes(value ?? '');
|
|
164
156
|
}
|
|
165
157
|
optionChanged(selected, option) {
|
|
166
158
|
this.value = this.value || [];
|
|
@@ -201,9 +193,9 @@ class FilterButtonComponent {
|
|
|
201
193
|
let tooltip = '';
|
|
202
194
|
const sortedLabels = this.options()
|
|
203
195
|
.filter(option => this.value.includes(option.value))
|
|
204
|
-
.map(item => item?.label
|
|
196
|
+
.map(item => item?.label ?? '');
|
|
205
197
|
if (sortedLabels.length > 0) {
|
|
206
|
-
displayedLabel = this.options().find(option => option.value === this.value[0])?.label
|
|
198
|
+
displayedLabel = this.options().find(option => option.value === this.value[0])?.label ?? '';
|
|
207
199
|
tooltip = `${this.label}${sortedLabels.map(value => `\n • ${value}`).join('')}`;
|
|
208
200
|
}
|
|
209
201
|
if (this.value.length > 1) {
|
|
@@ -214,11 +206,24 @@ class FilterButtonComponent {
|
|
|
214
206
|
this.cdr.markForCheck();
|
|
215
207
|
}
|
|
216
208
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FilterButtonComponent, deps: [{ token: 'CANOPYUI_DEFAULT_APPLICATION_THEME', optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
217
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: FilterButtonComponent, isStandalone: false, selector: "ui-filter-button", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: false, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: false, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, allowClear: { classPropertyName: "allowClear", publicName: "allowClear", isSignal: false, isRequired: false, transformFunction: null }, singleSelection: { classPropertyName: "singleSelection", publicName: "singleSelection", isSignal: false, isRequired: false, transformFunction: null }, iconName: { classPropertyName: "iconName", publicName: "iconName", isSignal: false, isRequired: false, transformFunction: null }, iconPosition: { classPropertyName: "iconPosition", publicName: "iconPosition", isSignal: false, isRequired: false, transformFunction: null }, noOptionsMessage: { classPropertyName: "noOptionsMessage", publicName: "noOptionsMessage", isSignal: false, isRequired: false, transformFunction: null }, applicationTheme: { classPropertyName: "applicationTheme", publicName: "applicationTheme", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { changed: "changed", optionChange: "optionChange" }, host: { properties: { "class": "this.class", "attr.theme": "this.applicationTheme" } }, viewQueries: [{ propertyName: "overlayContainer", first: true, predicate: ["overlayContainer"], descendants: true }, { propertyName: "filterOptions", predicate: ["filterOption"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container>\n <ui-button\n [matTooltip]=\"tooltip()\"\n [matTooltipClass]=\"'tooltip-multi-line ' + applicationTheme\"\n [matTooltipPosition]=\"'above'\"\n class=\"ui-filter-button-trigger\"\n [class.button-opened]=\"isOpen()\"\n [variant]=\"value.length || isOpen() ? 'secondary' : 'ghost'\"\n [label]=\"displayedLabel() || label\"\n [disabled]=\"disabled || (options().length === 0 && !noOptionsMessage)\"\n (click)=\"toggle()\"\n type=\"button\"\n size=\"small\"\n [role]=\"'combobox'\"\n [tooltip]=\"value.length ? ' ' : ''\"\n [attr.aria-expanded]=\"isOpen()\"\n [iconName]=\"iconName || (isOpen() ? 'Arrow-chevron-up-filled' : 'Arrow-chevron-down-filled')\"\n [iconPosition]=\"iconPosition\"\n [applicationTheme]=\"applicationTheme\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n ></ui-button>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n (overlayOutsideClick)=\"outsideClick()\"\n >\n @if (displayedOptions().length) {\n <div style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">\n {{ displayedOptions()[keyManager.activeItemIndex ?? 0].label }}\n {{\n translationContext + 'ACTIVE_ITEM'\n | uiTranslate: { active: (keyManager.activeItemIndex ?? 0) + 1, total: filterOptions.length }\n | async\n }}\n </div>\n <div style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">\n {{ displayedOptions()[keyManager.activeItemIndex ?? 0].label }}\n {{\n (value.includes(displayedOptions()[keyManager.activeItemIndex ?? 0].value)\n ? translationContext + 'SELECTED'\n : translationContext + 'DESELECTED'\n )\n | uiTranslate\n | async\n }}\n </div>\n }\n <div class=\"ui-filter-button\" #overlayContainer>\n @if (options().length > MIN_OPTIONS_LENGTH_FOR_SEARCH) {\n <div class=\"ui-filter-button-header\">\n <ui-field\n type=\"search\"\n [showBottomContent]=\"false\"\n [ngModel]=\"search()\"\n (ngModelChange)=\"search.set($event)\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-field>\n </div>\n }\n <div class=\"ui-filter-button-list\" #list tabindex=\"0\" (keydown)=\"keyDownHandler($event)\">\n @if (!displayedOptions().length && options().length) {\n <div class=\"no-results-found\">\n <span>{{ translationContext + 'NO_RESULTS_FOUND' | uiTranslate | async }}</span>\n </div>\n } @else {\n @for (section of displayedOptions(); track section; let i = $index) {\n <div>\n @if (section.sectionTitle && section.sectionTitle !== displayedOptions()[i - 1]?.sectionTitle) {\n <div class=\"section-title\">\n {{ section.sectionTitle }}\n </div>\n }\n <div\n class=\"item\"\n [class.item-selected]=\"isSelected(section.value)\"\n tabindex=\"0\"\n (click)=\"optionChanged(!isSelected(section.value), section)\"\n (keydown.enter)=\"optionChanged(!isSelected(section.value), section)\"\n >\n @if (singleSelection) {\n <ui-radio-button\n (click)=\"$event.stopPropagation()\"\n [tabIndex]=\"i === 0 ? 0 : -1\"\n [selected]=\"isSelected(section.value)\"\n (changeRadio)=\"optionChanged($event.optionChecked, section)\"\n [applicationTheme]=\"applicationTheme\"\n #filterOption\n >\n </ui-radio-button>\n }\n @if (!singleSelection) {\n <ui-checkbox\n (click)=\"$event.stopPropagation()\"\n [class.with-label-number]=\"section.labelNumber !== undefined\"\n [tabIndex]=\"i === 0 ? 0 : -1\"\n [checked]=\"isSelected(section.value)\"\n (changed)=\"optionChanged($event, section)\"\n [applicationTheme]=\"applicationTheme\"\n #filterOption\n ></ui-checkbox>\n }\n @if (section.icon) {\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"section.icon\"></ui-icon>\n }\n <span\n #tooltip=\"matTooltip\"\n class=\"item-label\"\n uiEllipseText\n (onChangeTextState)=\"onLabelEllipsisChange($event, section.value)\"\n [matTooltip]=\"showTooltip[section.value] ? section.label : ''\"\n [matTooltipClass]=\"applicationTheme\"\n >\n {{ section.label }}\n </span>\n @if (section.labelNumber !== undefined) {\n <span class=\"item-number\">({{ section.labelNumber }})</span>\n }\n </div>\n </div>\n }\n }\n </div>\n @if (!options().length && !!noOptionsMessage) {\n <div class=\"ui-filter-button-no-options\" [innerHTML]=\"noOptionsMessage\"></div>\n } @else {\n @if (allowClear || message) {\n <div class=\"ui-filter-button-footer\">\n @if (allowClear) {\n <ui-button\n variant=\"text\"\n size=\"small\"\n [label]=\"('COMMON.RESET' | uiTranslate | async)!\"\n (click)=\"clearValue()\"\n [applicationTheme]=\"applicationTheme\"\n (keydown.escape)=\"toggle()\"\n ></ui-button>\n }\n <div class=\"ui-filter-button-footer-message\">\n {{ message }}\n </div>\n </div>\n }\n }\n </div>\n </ng-template>\n</ng-container>\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}ui-filter-button{display:inline-block}ui-filter-button ui-button .button-wrapper button{padding:7px 24px!important}ui-filter-button ui-button .button-wrapper button .icon ui-icon mat-icon.size-16 svg{width:24px;height:24px}ui-filter-button ui-button .button-wrapper button .label{line-clamp:1;-webkit-line-clamp:1!important}ui-filter-button ui-button.button-opened .button-wrapper button{background-color:#666!important;border-color:#666}ui-filter-button ui-button button.secondary{border:1px solid #242424}ui-filter-button ui-button button.secondary:hover{border-color:#666}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button{margin-top:4px;box-shadow:0 4px 16px #24242414;border-radius:10px;background-color:#fff;padding:0 0 8px;width:240px}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-header{padding:8px 16px 0}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list{max-height:290px;overflow-y:auto;overflow-x:hidden}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .section-title,.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .no-results-found{padding:8px 16px}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item{padding:0 16px 0 5px;display:flex;align-items:center;gap:5px;height:48px;cursor:pointer}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item:hover,.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item.item-selected{background-color:#f4f4f4}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item ui-checkbox{max-width:100%}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item ui-checkbox.with-label-number{max-width:calc(100% - 25px)}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item-number{color:#666}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item-label{-webkit-user-select:none;user-select:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-footer{display:flex;justify-content:space-between;align-items:center;padding:0 16px 0 5px}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-footer ui-button{margin-left:-5px}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-footer-message{color:#666}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-no-options{padding:24px}.tooltip-multi-line .mdc-tooltip__surface{text-align:left;white-space:pre-line}\n"], dependencies: [{ 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: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i3.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: i3.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: i4.ButtonComponent, selector: "ui-button", inputs: ["size", "variant", "label", "iconPosition", "justIcon", "iconName", "disabled", "loading", "loadingWithLabel", "fullWidth", "url", "urlTarget", "value", "tooltip", "isPremium", "type", "companyColor", "buttonBadgeConfig", "applicationTheme", "disabledScaleOnClick", "ariaLabel", "ariaExpanded", "ariaControls", "ariaPressed", "ariaRequired", "ariaLabelledby", "ariaDescribedby", "preventDefault", "hasBackground", "tooltipPosition", "role", "iconFilled"], outputs: ["buttonClickEvent", "buttonHoverEvent"] }, { kind: "component", type: i5.IconComponent, selector: "ui-icon", inputs: ["size", "cssClass", "name", "color", "filled", "toggleIconStyle", "applicationTheme", "useFullIconName"] }, { kind: "component", type: i6.CheckboxComponent, selector: "ui-checkbox", inputs: ["disabled", "checked", "indeterminate", "companyColor", "name", "label", "multiple", "applicationTheme", "ariaLabel", "ariaRequired", "hasError", "hideBuiltInErrors", "hideLabelInErrors", "ariaLabelledby", "ariaDescribedby", "truncateText", "alignment", "tabIndex"], outputs: ["changed"] }, { kind: "component", type: i7.FieldComponent, selector: "ui-field", inputs: ["fullWidth", "fullHeight", "label", "labelHtml", "labelIcon", "fieldName", "placeholder", "id", "value", "badgeVariant", "errors", "disabled", "required", "readOnly", "hintMessage", "type", "updateOnBlur", "allowOnlyDigits", "isAutocompleteOff", "allowNegative", "showBottomContent", "applicationTheme", "ariaLabel", "loading", "isValid", "maxCharacters", "trimOnBlur", "trimOnSubmit", "maxRows", "hasTextAreaCounter", "hideBuiltInErrors", "hideLabelInErrors", "max", "min", "textareaHeight", "borderless", "autosizableTextarea", "isAIVariant", "ariaLabelledby", "ariaDescribedby", "hasError"], outputs: ["validateEvent", "fieldBlur"] }, { kind: "directive", type: i8.EllipseTextDirective, selector: "[uiEllipseText]", inputs: ["isMultiline", "maxDiffPixels", "refresh"], outputs: ["onChangeTextState"] }, { kind: "component", type: i9.RadioButtonComponent, selector: "ui-radio-button", inputs: ["disabled", "selected", "allowUnselect", "companyColor", "name", "label", "multiple", "mediaCard", "value", "applicationTheme", "ariaLabel", "ariaRequired", "hasError", "ariaLabelledby", "ariaDescribedby", "truncateText", "alignment", "tabIndex", "hideTooltipOnEllipsis"], outputs: ["changeRadio"] }, { kind: "pipe", type: i10.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.UiTranslatePipe, name: "uiTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
209
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: FilterButtonComponent, isStandalone: true, selector: "ui-filter-button", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: false, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: false, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, allowClear: { classPropertyName: "allowClear", publicName: "allowClear", isSignal: false, isRequired: false, transformFunction: null }, singleSelection: { classPropertyName: "singleSelection", publicName: "singleSelection", isSignal: false, isRequired: false, transformFunction: null }, iconName: { classPropertyName: "iconName", publicName: "iconName", isSignal: false, isRequired: false, transformFunction: null }, iconPosition: { classPropertyName: "iconPosition", publicName: "iconPosition", isSignal: false, isRequired: false, transformFunction: null }, noOptionsMessage: { classPropertyName: "noOptionsMessage", publicName: "noOptionsMessage", isSignal: false, isRequired: false, transformFunction: null }, applicationTheme: { classPropertyName: "applicationTheme", publicName: "applicationTheme", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { changed: "changed", optionChange: "optionChange" }, host: { properties: { "class": "this.class", "attr.theme": "this.applicationTheme" } }, viewQueries: [{ propertyName: "overlayContainer", first: true, predicate: ["overlayContainer"], descendants: true }, { propertyName: "filterOptions", predicate: ["filterOption"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container>\n <ui-button\n [matTooltip]=\"tooltip()\"\n [matTooltipClass]=\"'tooltip-multi-line ' + applicationTheme\"\n [matTooltipPosition]=\"'above'\"\n class=\"ui-filter-button-trigger\"\n [class.button-opened]=\"isOpen()\"\n [variant]=\"value.length || isOpen() ? 'secondary' : 'ghost'\"\n [label]=\"displayedLabel() || label\"\n [disabled]=\"disabled || (options().length === 0 && !noOptionsMessage)\"\n (click)=\"toggle()\"\n type=\"button\"\n size=\"small\"\n [role]=\"'combobox'\"\n [tooltip]=\"value.length ? ' ' : ''\"\n [attr.aria-expanded]=\"isOpen()\"\n [iconName]=\"iconName || (isOpen() ? 'Arrow-chevron-up-filled' : 'Arrow-chevron-down-filled')\"\n [iconPosition]=\"iconPosition\"\n [applicationTheme]=\"applicationTheme\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n ></ui-button>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n (overlayOutsideClick)=\"outsideClick()\"\n >\n @if (displayedOptions().length) {\n <div style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">\n {{ displayedOptions()[keyManager.activeItemIndex ?? 0].label }}\n {{\n translationContext + 'ACTIVE_ITEM'\n | uiTranslate: { active: (keyManager.activeItemIndex ?? 0) + 1, total: filterOptions.length }\n | async\n }}\n </div>\n <div style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">\n {{ displayedOptions()[keyManager.activeItemIndex ?? 0].label }}\n {{\n (value.includes(displayedOptions()[keyManager.activeItemIndex ?? 0].value)\n ? translationContext + 'SELECTED'\n : translationContext + 'DESELECTED'\n )\n | uiTranslate\n | async\n }}\n </div>\n }\n <div class=\"ui-filter-button\" #overlayContainer>\n @if (options().length > MIN_OPTIONS_LENGTH_FOR_SEARCH) {\n <div class=\"ui-filter-button-header\">\n <ui-field\n type=\"search\"\n [showBottomContent]=\"false\"\n [ngModel]=\"search()\"\n (ngModelChange)=\"search.set($event)\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-field>\n </div>\n }\n <div class=\"ui-filter-button-list\" #list tabindex=\"0\" (keydown)=\"keyDownHandler($event)\">\n @if (!displayedOptions().length && options().length) {\n <div class=\"no-results-found\">\n <span>{{ translationContext + 'NO_RESULTS_FOUND' | uiTranslate | async }}</span>\n </div>\n } @else {\n @for (section of displayedOptions(); track section; let i = $index) {\n <div>\n @if (section.sectionTitle && section.sectionTitle !== displayedOptions()[i - 1]?.sectionTitle) {\n <div class=\"section-title\">\n {{ section.sectionTitle }}\n </div>\n }\n <div\n class=\"item\"\n [class.item-selected]=\"isSelected(section.value)\"\n tabindex=\"0\"\n (click)=\"optionChanged(!isSelected(section.value), section)\"\n (keydown.enter)=\"optionChanged(!isSelected(section.value), section)\"\n >\n @if (singleSelection) {\n <ui-radio-button\n (click)=\"$event.stopPropagation()\"\n [tabIndex]=\"i === 0 ? 0 : -1\"\n [selected]=\"isSelected(section.value)\"\n (changeRadio)=\"optionChanged($event.optionChecked, section)\"\n [applicationTheme]=\"applicationTheme\"\n #filterOption\n >\n </ui-radio-button>\n }\n @if (!singleSelection) {\n <ui-checkbox\n (click)=\"$event.stopPropagation()\"\n [class.with-label-number]=\"section.labelNumber !== undefined\"\n [tabIndex]=\"i === 0 ? 0 : -1\"\n [checked]=\"isSelected(section.value)\"\n (changed)=\"optionChanged($event, section)\"\n [applicationTheme]=\"applicationTheme\"\n #filterOption\n ></ui-checkbox>\n }\n @if (section.icon) {\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"section.icon\"></ui-icon>\n }\n <span\n #tooltip=\"matTooltip\"\n class=\"item-label\"\n uiEllipseText\n (onChangeTextState)=\"onLabelEllipsisChange($event, section.value)\"\n [matTooltip]=\"showTooltip[section.value] ? section.label : ''\"\n [matTooltipClass]=\"applicationTheme\"\n >\n {{ section.label }}\n </span>\n @if (section.labelNumber !== undefined) {\n <span class=\"item-number\">({{ section.labelNumber }})</span>\n }\n </div>\n </div>\n }\n }\n </div>\n @if (!options().length && !!noOptionsMessage) {\n <div class=\"ui-filter-button-no-options\" [innerHTML]=\"noOptionsMessage\"></div>\n } @else {\n @if (allowClear || message) {\n <div class=\"ui-filter-button-footer\">\n @if (allowClear) {\n <ui-button\n variant=\"text\"\n size=\"small\"\n [label]=\"('COMMON.RESET' | uiTranslate | async)!\"\n (click)=\"clearValue()\"\n [applicationTheme]=\"applicationTheme\"\n (keydown.escape)=\"toggle()\"\n ></ui-button>\n }\n <div class=\"ui-filter-button-footer-message\">\n {{ message }}\n </div>\n </div>\n }\n }\n </div>\n </ng-template>\n</ng-container>\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}ui-filter-button{display:inline-block}ui-filter-button ui-button .button-wrapper button{padding:7px 24px!important}ui-filter-button ui-button .button-wrapper button .icon ui-icon mat-icon.size-16 svg{width:24px;height:24px}ui-filter-button ui-button .button-wrapper button .label{line-clamp:1;-webkit-line-clamp:1!important}ui-filter-button ui-button.button-opened .button-wrapper button{background-color:#666!important;border-color:#666}ui-filter-button ui-button button.secondary{border:1px solid #242424}ui-filter-button ui-button button.secondary:hover{border-color:#666}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button{margin-top:4px;box-shadow:0 4px 16px #24242414;border-radius:10px;background-color:#fff;padding:0 0 8px;width:240px}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-header{padding:8px 16px 0}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list{max-height:290px;overflow-y:auto;overflow-x:hidden}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .section-title,.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .no-results-found{padding:8px 16px}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item{padding:0 16px 0 5px;display:flex;align-items:center;gap:5px;height:48px;cursor:pointer}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item:hover,.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item.item-selected{background-color:#f4f4f4}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item ui-checkbox{max-width:100%}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item ui-checkbox.with-label-number{max-width:calc(100% - 25px)}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item-number{color:#666}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item-label{-webkit-user-select:none;user-select:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-footer{display:flex;justify-content:space-between;align-items:center;padding:0 16px 0 5px}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-footer ui-button{margin-left:-5px}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-footer-message{color:#666}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-no-options{padding:24px}.tooltip-multi-line .mdc-tooltip__surface{text-align:left;white-space:pre-line}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "ui-button", inputs: ["size", "variant", "label", "iconPosition", "justIcon", "iconName", "disabled", "loading", "loadingWithLabel", "fullWidth", "url", "urlTarget", "value", "tooltip", "isPremium", "type", "companyColor", "buttonBadgeConfig", "applicationTheme", "disabledScaleOnClick", "ariaLabel", "ariaExpanded", "ariaControls", "ariaPressed", "ariaRequired", "ariaLabelledby", "ariaDescribedby", "preventDefault", "hasBackground", "tooltipPosition", "role", "iconFilled"], outputs: ["buttonClickEvent", "buttonHoverEvent"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { 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: "component", type: FieldComponent, selector: "ui-field", inputs: ["fullWidth", "fullHeight", "label", "labelHtml", "labelIcon", "fieldName", "placeholder", "id", "value", "badgeVariant", "errors", "disabled", "required", "readOnly", "hintMessage", "type", "updateOnBlur", "allowOnlyDigits", "isAutocompleteOff", "allowNegative", "showBottomContent", "applicationTheme", "ariaLabel", "loading", "isValid", "maxCharacters", "trimOnBlur", "trimOnSubmit", "maxRows", "hasTextAreaCounter", "hideBuiltInErrors", "hideLabelInErrors", "max", "min", "textareaHeight", "borderless", "autosizableTextarea", "isAIVariant", "ariaLabelledby", "ariaDescribedby", "hasError"], outputs: ["validateEvent", "fieldBlur"] }, { kind: "ngmodule", type: FormsModule }, { 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: RadioButtonComponent, selector: "ui-radio-button", inputs: ["disabled", "selected", "allowUnselect", "companyColor", "name", "label", "multiple", "mediaCard", "value", "applicationTheme", "ariaLabel", "ariaRequired", "hasError", "ariaLabelledby", "ariaDescribedby", "truncateText", "alignment", "tabIndex", "hideTooltipOnEllipsis"], outputs: ["changeRadio"] }, { kind: "component", type: CheckboxComponent, selector: "ui-checkbox", inputs: ["disabled", "checked", "indeterminate", "companyColor", "name", "label", "multiple", "applicationTheme", "ariaLabel", "ariaRequired", "hasError", "hideBuiltInErrors", "hideLabelInErrors", "ariaLabelledby", "ariaDescribedby", "truncateText", "alignment", "tabIndex"], outputs: ["changed"] }, { kind: "component", type: IconComponent, selector: "ui-icon", inputs: ["size", "cssClass", "name", "color", "filled", "toggleIconStyle", "applicationTheme", "useFullIconName"] }, { kind: "directive", type: EllipseTextDirective, selector: "[uiEllipseText]", inputs: ["isMultiline", "maxDiffPixels", "refresh"], outputs: ["onChangeTextState"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: UiTranslatePipe, name: "uiTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
218
210
|
}
|
|
219
211
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FilterButtonComponent, decorators: [{
|
|
220
212
|
type: Component,
|
|
221
|
-
args: [{ selector: 'ui-filter-button', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<ng-container>\n <ui-button\n [matTooltip]=\"tooltip()\"\n [matTooltipClass]=\"'tooltip-multi-line ' + applicationTheme\"\n [matTooltipPosition]=\"'above'\"\n class=\"ui-filter-button-trigger\"\n [class.button-opened]=\"isOpen()\"\n [variant]=\"value.length || isOpen() ? 'secondary' : 'ghost'\"\n [label]=\"displayedLabel() || label\"\n [disabled]=\"disabled || (options().length === 0 && !noOptionsMessage)\"\n (click)=\"toggle()\"\n type=\"button\"\n size=\"small\"\n [role]=\"'combobox'\"\n [tooltip]=\"value.length ? ' ' : ''\"\n [attr.aria-expanded]=\"isOpen()\"\n [iconName]=\"iconName || (isOpen() ? 'Arrow-chevron-up-filled' : 'Arrow-chevron-down-filled')\"\n [iconPosition]=\"iconPosition\"\n [applicationTheme]=\"applicationTheme\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n ></ui-button>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n (overlayOutsideClick)=\"outsideClick()\"\n >\n @if (displayedOptions().length) {\n <div style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">\n {{ displayedOptions()[keyManager.activeItemIndex ?? 0].label }}\n {{\n translationContext + 'ACTIVE_ITEM'\n | uiTranslate: { active: (keyManager.activeItemIndex ?? 0) + 1, total: filterOptions.length }\n | async\n }}\n </div>\n <div style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">\n {{ displayedOptions()[keyManager.activeItemIndex ?? 0].label }}\n {{\n (value.includes(displayedOptions()[keyManager.activeItemIndex ?? 0].value)\n ? translationContext + 'SELECTED'\n : translationContext + 'DESELECTED'\n )\n | uiTranslate\n | async\n }}\n </div>\n }\n <div class=\"ui-filter-button\" #overlayContainer>\n @if (options().length > MIN_OPTIONS_LENGTH_FOR_SEARCH) {\n <div class=\"ui-filter-button-header\">\n <ui-field\n type=\"search\"\n [showBottomContent]=\"false\"\n [ngModel]=\"search()\"\n (ngModelChange)=\"search.set($event)\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-field>\n </div>\n }\n <div class=\"ui-filter-button-list\" #list tabindex=\"0\" (keydown)=\"keyDownHandler($event)\">\n @if (!displayedOptions().length && options().length) {\n <div class=\"no-results-found\">\n <span>{{ translationContext + 'NO_RESULTS_FOUND' | uiTranslate | async }}</span>\n </div>\n } @else {\n @for (section of displayedOptions(); track section; let i = $index) {\n <div>\n @if (section.sectionTitle && section.sectionTitle !== displayedOptions()[i - 1]?.sectionTitle) {\n <div class=\"section-title\">\n {{ section.sectionTitle }}\n </div>\n }\n <div\n class=\"item\"\n [class.item-selected]=\"isSelected(section.value)\"\n tabindex=\"0\"\n (click)=\"optionChanged(!isSelected(section.value), section)\"\n (keydown.enter)=\"optionChanged(!isSelected(section.value), section)\"\n >\n @if (singleSelection) {\n <ui-radio-button\n (click)=\"$event.stopPropagation()\"\n [tabIndex]=\"i === 0 ? 0 : -1\"\n [selected]=\"isSelected(section.value)\"\n (changeRadio)=\"optionChanged($event.optionChecked, section)\"\n [applicationTheme]=\"applicationTheme\"\n #filterOption\n >\n </ui-radio-button>\n }\n @if (!singleSelection) {\n <ui-checkbox\n (click)=\"$event.stopPropagation()\"\n [class.with-label-number]=\"section.labelNumber !== undefined\"\n [tabIndex]=\"i === 0 ? 0 : -1\"\n [checked]=\"isSelected(section.value)\"\n (changed)=\"optionChanged($event, section)\"\n [applicationTheme]=\"applicationTheme\"\n #filterOption\n ></ui-checkbox>\n }\n @if (section.icon) {\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"section.icon\"></ui-icon>\n }\n <span\n #tooltip=\"matTooltip\"\n class=\"item-label\"\n uiEllipseText\n (onChangeTextState)=\"onLabelEllipsisChange($event, section.value)\"\n [matTooltip]=\"showTooltip[section.value] ? section.label : ''\"\n [matTooltipClass]=\"applicationTheme\"\n >\n {{ section.label }}\n </span>\n @if (section.labelNumber !== undefined) {\n <span class=\"item-number\">({{ section.labelNumber }})</span>\n }\n </div>\n </div>\n }\n }\n </div>\n @if (!options().length && !!noOptionsMessage) {\n <div class=\"ui-filter-button-no-options\" [innerHTML]=\"noOptionsMessage\"></div>\n } @else {\n @if (allowClear || message) {\n <div class=\"ui-filter-button-footer\">\n @if (allowClear) {\n <ui-button\n variant=\"text\"\n size=\"small\"\n [label]=\"('COMMON.RESET' | uiTranslate | async)!\"\n (click)=\"clearValue()\"\n [applicationTheme]=\"applicationTheme\"\n (keydown.escape)=\"toggle()\"\n ></ui-button>\n }\n <div class=\"ui-filter-button-footer-message\">\n {{ message }}\n </div>\n </div>\n }\n }\n </div>\n </ng-template>\n</ng-container>\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}ui-filter-button{display:inline-block}ui-filter-button ui-button .button-wrapper button{padding:7px 24px!important}ui-filter-button ui-button .button-wrapper button .icon ui-icon mat-icon.size-16 svg{width:24px;height:24px}ui-filter-button ui-button .button-wrapper button .label{line-clamp:1;-webkit-line-clamp:1!important}ui-filter-button ui-button.button-opened .button-wrapper button{background-color:#666!important;border-color:#666}ui-filter-button ui-button button.secondary{border:1px solid #242424}ui-filter-button ui-button button.secondary:hover{border-color:#666}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button{margin-top:4px;box-shadow:0 4px 16px #24242414;border-radius:10px;background-color:#fff;padding:0 0 8px;width:240px}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-header{padding:8px 16px 0}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list{max-height:290px;overflow-y:auto;overflow-x:hidden}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .section-title,.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .no-results-found{padding:8px 16px}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item{padding:0 16px 0 5px;display:flex;align-items:center;gap:5px;height:48px;cursor:pointer}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item:hover,.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item.item-selected{background-color:#f4f4f4}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item ui-checkbox{max-width:100%}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item ui-checkbox.with-label-number{max-width:calc(100% - 25px)}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item-number{color:#666}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item-label{-webkit-user-select:none;user-select:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-footer{display:flex;justify-content:space-between;align-items:center;padding:0 16px 0 5px}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-footer ui-button{margin-left:-5px}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-footer-message{color:#666}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-no-options{padding:24px}.tooltip-multi-line .mdc-tooltip__surface{text-align:left;white-space:pre-line}\n"] }]
|
|
213
|
+
args: [{ selector: 'ui-filter-button', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
214
|
+
ButtonComponent,
|
|
215
|
+
CdkOverlayOrigin,
|
|
216
|
+
MatTooltip,
|
|
217
|
+
CdkConnectedOverlay,
|
|
218
|
+
FieldComponent,
|
|
219
|
+
FormsModule,
|
|
220
|
+
RadioButtonComponent,
|
|
221
|
+
CheckboxComponent,
|
|
222
|
+
IconComponent,
|
|
223
|
+
EllipseTextDirective,
|
|
224
|
+
AsyncPipe,
|
|
225
|
+
UiTranslatePipe,
|
|
226
|
+
], template: "<ng-container>\n <ui-button\n [matTooltip]=\"tooltip()\"\n [matTooltipClass]=\"'tooltip-multi-line ' + applicationTheme\"\n [matTooltipPosition]=\"'above'\"\n class=\"ui-filter-button-trigger\"\n [class.button-opened]=\"isOpen()\"\n [variant]=\"value.length || isOpen() ? 'secondary' : 'ghost'\"\n [label]=\"displayedLabel() || label\"\n [disabled]=\"disabled || (options().length === 0 && !noOptionsMessage)\"\n (click)=\"toggle()\"\n type=\"button\"\n size=\"small\"\n [role]=\"'combobox'\"\n [tooltip]=\"value.length ? ' ' : ''\"\n [attr.aria-expanded]=\"isOpen()\"\n [iconName]=\"iconName || (isOpen() ? 'Arrow-chevron-up-filled' : 'Arrow-chevron-down-filled')\"\n [iconPosition]=\"iconPosition\"\n [applicationTheme]=\"applicationTheme\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n ></ui-button>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n (overlayOutsideClick)=\"outsideClick()\"\n >\n @if (displayedOptions().length) {\n <div style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">\n {{ displayedOptions()[keyManager.activeItemIndex ?? 0].label }}\n {{\n translationContext + 'ACTIVE_ITEM'\n | uiTranslate: { active: (keyManager.activeItemIndex ?? 0) + 1, total: filterOptions.length }\n | async\n }}\n </div>\n <div style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">\n {{ displayedOptions()[keyManager.activeItemIndex ?? 0].label }}\n {{\n (value.includes(displayedOptions()[keyManager.activeItemIndex ?? 0].value)\n ? translationContext + 'SELECTED'\n : translationContext + 'DESELECTED'\n )\n | uiTranslate\n | async\n }}\n </div>\n }\n <div class=\"ui-filter-button\" #overlayContainer>\n @if (options().length > MIN_OPTIONS_LENGTH_FOR_SEARCH) {\n <div class=\"ui-filter-button-header\">\n <ui-field\n type=\"search\"\n [showBottomContent]=\"false\"\n [ngModel]=\"search()\"\n (ngModelChange)=\"search.set($event)\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-field>\n </div>\n }\n <div class=\"ui-filter-button-list\" #list tabindex=\"0\" (keydown)=\"keyDownHandler($event)\">\n @if (!displayedOptions().length && options().length) {\n <div class=\"no-results-found\">\n <span>{{ translationContext + 'NO_RESULTS_FOUND' | uiTranslate | async }}</span>\n </div>\n } @else {\n @for (section of displayedOptions(); track section; let i = $index) {\n <div>\n @if (section.sectionTitle && section.sectionTitle !== displayedOptions()[i - 1]?.sectionTitle) {\n <div class=\"section-title\">\n {{ section.sectionTitle }}\n </div>\n }\n <div\n class=\"item\"\n [class.item-selected]=\"isSelected(section.value)\"\n tabindex=\"0\"\n (click)=\"optionChanged(!isSelected(section.value), section)\"\n (keydown.enter)=\"optionChanged(!isSelected(section.value), section)\"\n >\n @if (singleSelection) {\n <ui-radio-button\n (click)=\"$event.stopPropagation()\"\n [tabIndex]=\"i === 0 ? 0 : -1\"\n [selected]=\"isSelected(section.value)\"\n (changeRadio)=\"optionChanged($event.optionChecked, section)\"\n [applicationTheme]=\"applicationTheme\"\n #filterOption\n >\n </ui-radio-button>\n }\n @if (!singleSelection) {\n <ui-checkbox\n (click)=\"$event.stopPropagation()\"\n [class.with-label-number]=\"section.labelNumber !== undefined\"\n [tabIndex]=\"i === 0 ? 0 : -1\"\n [checked]=\"isSelected(section.value)\"\n (changed)=\"optionChanged($event, section)\"\n [applicationTheme]=\"applicationTheme\"\n #filterOption\n ></ui-checkbox>\n }\n @if (section.icon) {\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"section.icon\"></ui-icon>\n }\n <span\n #tooltip=\"matTooltip\"\n class=\"item-label\"\n uiEllipseText\n (onChangeTextState)=\"onLabelEllipsisChange($event, section.value)\"\n [matTooltip]=\"showTooltip[section.value] ? section.label : ''\"\n [matTooltipClass]=\"applicationTheme\"\n >\n {{ section.label }}\n </span>\n @if (section.labelNumber !== undefined) {\n <span class=\"item-number\">({{ section.labelNumber }})</span>\n }\n </div>\n </div>\n }\n }\n </div>\n @if (!options().length && !!noOptionsMessage) {\n <div class=\"ui-filter-button-no-options\" [innerHTML]=\"noOptionsMessage\"></div>\n } @else {\n @if (allowClear || message) {\n <div class=\"ui-filter-button-footer\">\n @if (allowClear) {\n <ui-button\n variant=\"text\"\n size=\"small\"\n [label]=\"('COMMON.RESET' | uiTranslate | async)!\"\n (click)=\"clearValue()\"\n [applicationTheme]=\"applicationTheme\"\n (keydown.escape)=\"toggle()\"\n ></ui-button>\n }\n <div class=\"ui-filter-button-footer-message\">\n {{ message }}\n </div>\n </div>\n }\n }\n </div>\n </ng-template>\n</ng-container>\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}ui-filter-button{display:inline-block}ui-filter-button ui-button .button-wrapper button{padding:7px 24px!important}ui-filter-button ui-button .button-wrapper button .icon ui-icon mat-icon.size-16 svg{width:24px;height:24px}ui-filter-button ui-button .button-wrapper button .label{line-clamp:1;-webkit-line-clamp:1!important}ui-filter-button ui-button.button-opened .button-wrapper button{background-color:#666!important;border-color:#666}ui-filter-button ui-button button.secondary{border:1px solid #242424}ui-filter-button ui-button button.secondary:hover{border-color:#666}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button{margin-top:4px;box-shadow:0 4px 16px #24242414;border-radius:10px;background-color:#fff;padding:0 0 8px;width:240px}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-header{padding:8px 16px 0}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list{max-height:290px;overflow-y:auto;overflow-x:hidden}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .section-title,.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .no-results-found{padding:8px 16px}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item{padding:0 16px 0 5px;display:flex;align-items:center;gap:5px;height:48px;cursor:pointer}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item:hover,.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item.item-selected{background-color:#f4f4f4}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item ui-checkbox{max-width:100%}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item ui-checkbox.with-label-number{max-width:calc(100% - 25px)}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item-number{color:#666}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-list .item-label{-webkit-user-select:none;user-select:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-footer{display:flex;justify-content:space-between;align-items:center;padding:0 16px 0 5px}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-footer ui-button{margin-left:-5px}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-footer-message{color:#666}.cdk-overlay-container .cdk-overlay-pane .ui-filter-button-no-options{padding:24px}.tooltip-multi-line .mdc-tooltip__surface{text-align:left;white-space:pre-line}\n"] }]
|
|
222
227
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
223
228
|
type: Optional
|
|
224
229
|
}, {
|
|
@@ -263,7 +268,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
263
268
|
|
|
264
269
|
class FilterButtonComponentModule {
|
|
265
270
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FilterButtonComponentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
266
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.25", ngImport: i0, type: FilterButtonComponentModule,
|
|
271
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.25", ngImport: i0, type: FilterButtonComponentModule, imports: [CommonModule,
|
|
267
272
|
FormsModule,
|
|
268
273
|
MatTooltipModule,
|
|
269
274
|
OverlayModule,
|
|
@@ -273,7 +278,8 @@ class FilterButtonComponentModule {
|
|
|
273
278
|
CheckboxComponentModule,
|
|
274
279
|
FieldComponentModule,
|
|
275
280
|
EllipseTextDirective,
|
|
276
|
-
RadioButtonComponentModule
|
|
281
|
+
RadioButtonComponentModule,
|
|
282
|
+
FilterButtonComponent], exports: [FilterButtonComponent] }); }
|
|
277
283
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FilterButtonComponentModule, imports: [CommonModule,
|
|
278
284
|
FormsModule,
|
|
279
285
|
MatTooltipModule,
|
|
@@ -282,12 +288,12 @@ class FilterButtonComponentModule {
|
|
|
282
288
|
IconComponentModule,
|
|
283
289
|
CheckboxComponentModule,
|
|
284
290
|
FieldComponentModule,
|
|
285
|
-
RadioButtonComponentModule
|
|
291
|
+
RadioButtonComponentModule,
|
|
292
|
+
FilterButtonComponent] }); }
|
|
286
293
|
}
|
|
287
294
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FilterButtonComponentModule, decorators: [{
|
|
288
295
|
type: NgModule,
|
|
289
296
|
args: [{
|
|
290
|
-
declarations: [FilterButtonComponent],
|
|
291
297
|
imports: [
|
|
292
298
|
CommonModule,
|
|
293
299
|
FormsModule,
|
|
@@ -300,6 +306,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
300
306
|
FieldComponentModule,
|
|
301
307
|
EllipseTextDirective,
|
|
302
308
|
RadioButtonComponentModule,
|
|
309
|
+
FilterButtonComponent,
|
|
303
310
|
],
|
|
304
311
|
exports: [FilterButtonComponent],
|
|
305
312
|
}]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testgorilla-tgo-ui-components-filter-button.mjs","sources":["../../../components/filter-button/filter-button.component.ts","../../../components/filter-button/filter-button.component.html","../../../components/filter-button/filter-button.component.module.ts","../../../components/filter-button/testgorilla-tgo-ui-components-filter-button.ts"],"sourcesContent":["import { FocusKeyManager } from '@angular/cdk/a11y';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n EventEmitter,\n HostBinding,\n Inject,\n input,\n Input,\n OnChanges,\n Optional,\n Output,\n QueryList,\n signal,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ApplicationTheme } from '@testgorilla/tgo-ui/components/core';\nimport { IKeyboardEvent } from '@testgorilla/tgo-ui/components/core';\nimport { ButtonIconPosition } from '@testgorilla/tgo-ui/components/button';\nimport { IconName } from '@testgorilla/tgo-ui/components/icon';\nimport { FilterButtonOption, FilterValue, OptionChangeEvent } from './filter-button.model';\n\n@Component({\n selector: 'ui-filter-button',\n templateUrl: './filter-button.component.html',\n styleUrls: ['./filter-button.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class FilterButtonComponent implements OnChanges {\n @HostBinding() class = 'ui-filter-button';\n\n /**\n * The button label when no value is selected.\n *\n * @type {string}\n * @memberof FilterButtonComponent\n */\n @Input() label = '';\n\n /**\n * Optional message to display on the overflow bottom.\n *\n * @type {string}\n * @memberof FilterButtonComponent\n */\n @Input() message? = '';\n\n /**\n * List of selected values.\n *\n * @type {string[]}\n * @memberof FilterButtonComponent\n */\n @Input() value: FilterValue[] = [];\n\n /**\n * Whether the component is disabled.\n * Default: false.\n *\n * @type {boolean}\n * @memberof FilterButtonComponent\n */\n @Input() disabled = false;\n\n /**\n * List of options.\n *\n * @type {OptionType}\n * @memberof FilterButtonComponent\n */\n options = input<FilterButtonOption[]>([]);\n\n /**\n * Whether the user should be allowed to clear the values.\n * Default: true.\n *\n * @type {boolean}\n * @memberof FilterButtonComponent\n */\n @Input() allowClear = true;\n\n /**\n * Whether the user should be allowed to select single or multiple values.\n * Default: false.\n *\n * @type {boolean}\n * @memberof FilterButtonComponent\n */\n @Input() singleSelection? = false;\n\n /**\n * The icon name to display.\n *\n * @type {string}\n * @memberof FilterButtonComponent\n *\n **/\n\n @Input() iconName?: IconName;\n\n /**\n * The position of the icon.\n * Default: 'right'.\n *\n * @type {ButtonIconPosition}\n * @memberof FilterButtonComponent\n */\n @Input() iconPosition?: ButtonIconPosition = 'right';\n\n /**\n * Optional message to display if there are no options to select available\n *\n * @type {string}\n * @memberof FilterButtonComponent\n */\n @Input() noOptionsMessage? = '';\n\n /**\n * Emits the list of selected values when the selection changes.\n *\n * @type {EventEmitter<string[]>}\n * @memberof FilterButtonComponent\n */\n @Output() changed = new EventEmitter<FilterValue[]>();\n\n /**\n * Emits the option change event\n *\n * @type {EventEmitter<OptionChangeEvent>}\n * @memberof FilterButtonComponent\n */\n @Output() optionChange = new EventEmitter<OptionChangeEvent>();\n /**\n *\n * Defines the application theme\n *\n * @type {ApplicationTheme}\n * @memberof FilterButtonComponent\n */\n @HostBinding('attr.theme')\n @Input()\n applicationTheme: ApplicationTheme = 'light';\n\n @ViewChild('overlayContainer') overlayContainer: any;\n @ViewChildren('filterOption') filterOptions: QueryList<any>;\n\n isOpen = signal<boolean>(false);\n displayedLabel = signal<string>('');\n tooltip = signal<string>('');\n search = signal<string>('');\n showTooltip: { [key: string]: boolean } = {};\n displayedOptions = computed(() => {\n let lastSectionTitle: string;\n return this.options()\n .map(option => {\n lastSectionTitle = option.sectionTitle || lastSectionTitle;\n return { ...option, sectionTitle: lastSectionTitle };\n })\n .filter(option => option.label.toLowerCase().includes(this.search().toLowerCase()));\n });\n readonly MIN_OPTIONS_LENGTH_FOR_SEARCH = 8;\n protected keyManager: FocusKeyManager<HTMLElement>;\n protected translationContext = 'FILTER_BUTTON.';\n constructor(\n @Optional() @Inject('CANOPYUI_DEFAULT_APPLICATION_THEME') private readonly defaultAppTheme: ApplicationTheme,\n private readonly cdr: ChangeDetectorRef\n ) {\n if (this.defaultAppTheme) {\n this.applicationTheme = this.defaultAppTheme;\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value']) {\n this.updateLabel();\n }\n }\n\n clearValue(): void {\n this.value = [];\n this.updateLabel();\n this.changed.emit(this.value);\n }\n\n outsideClick() {\n window.setTimeout(() => {\n this.isOpen.set(false);\n });\n }\n\n toggle(): void {\n this.isOpen.set(!this.isOpen());\n if (this.isOpen()) {\n this.keyManager = new FocusKeyManager(this.filterOptions).withWrap();\n this.keyManager.setActiveItem(0);\n }\n this.cdr.markForCheck();\n }\n\n isSelected(value?: FilterValue) {\n return this.value?.includes(value || '');\n }\n\n optionChanged(selected: boolean, option: FilterButtonOption) {\n this.value = this.value || [];\n if (this.singleSelection) {\n this.value = selected ? [option.value] : [];\n } else {\n if (selected) {\n this.value.push(option.value);\n } else {\n this.value.splice(this.value.indexOf(option.value), 1);\n }\n }\n this.changed.emit(this.value);\n this.optionChange.emit({ selected, option });\n this.updateLabel();\n }\n\n keyDownHandler(ev: any) {\n if (ev.key === IKeyboardEvent.ARROW_DOWN) {\n ev.preventDefault();\n this.keyManager.setNextItemActive();\n } else if (ev.key === IKeyboardEvent.ARROW_UP) {\n ev.preventDefault();\n this.keyManager.setPreviousItemActive();\n } else if (ev.key === IKeyboardEvent.ESCAPE) {\n this.isOpen.set(false);\n }\n }\n\n onLabelEllipsisChange(isEllipsis: boolean, value: FilterValue): void {\n this.showTooltip[value] = isEllipsis;\n }\n\n private updateLabel() {\n this.value = this.value || [];\n let displayedLabel = '';\n let tooltip = '';\n const sortedLabels = this.options()\n .filter(option => this.value.includes(option.value))\n .map(item => item?.label || '');\n\n if (sortedLabels.length > 0) {\n displayedLabel = this.options().find(option => option.value === this.value[0])?.label || '';\n tooltip = `${this.label}${sortedLabels.map(value => `\\n • ${value}`).join('')}`;\n }\n\n if (this.value.length > 1) {\n displayedLabel += ` (+${this.value.length - 1})`;\n }\n this.displayedLabel.set(displayedLabel);\n this.tooltip.set(tooltip);\n this.cdr.markForCheck();\n }\n}\n","<ng-container>\n <ui-button\n [matTooltip]=\"tooltip()\"\n [matTooltipClass]=\"'tooltip-multi-line ' + applicationTheme\"\n [matTooltipPosition]=\"'above'\"\n class=\"ui-filter-button-trigger\"\n [class.button-opened]=\"isOpen()\"\n [variant]=\"value.length || isOpen() ? 'secondary' : 'ghost'\"\n [label]=\"displayedLabel() || label\"\n [disabled]=\"disabled || (options().length === 0 && !noOptionsMessage)\"\n (click)=\"toggle()\"\n type=\"button\"\n size=\"small\"\n [role]=\"'combobox'\"\n [tooltip]=\"value.length ? ' ' : ''\"\n [attr.aria-expanded]=\"isOpen()\"\n [iconName]=\"iconName || (isOpen() ? 'Arrow-chevron-up-filled' : 'Arrow-chevron-down-filled')\"\n [iconPosition]=\"iconPosition\"\n [applicationTheme]=\"applicationTheme\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n ></ui-button>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n (overlayOutsideClick)=\"outsideClick()\"\n >\n @if (displayedOptions().length) {\n <div style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">\n {{ displayedOptions()[keyManager.activeItemIndex ?? 0].label }}\n {{\n translationContext + 'ACTIVE_ITEM'\n | uiTranslate: { active: (keyManager.activeItemIndex ?? 0) + 1, total: filterOptions.length }\n | async\n }}\n </div>\n <div style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">\n {{ displayedOptions()[keyManager.activeItemIndex ?? 0].label }}\n {{\n (value.includes(displayedOptions()[keyManager.activeItemIndex ?? 0].value)\n ? translationContext + 'SELECTED'\n : translationContext + 'DESELECTED'\n )\n | uiTranslate\n | async\n }}\n </div>\n }\n <div class=\"ui-filter-button\" #overlayContainer>\n @if (options().length > MIN_OPTIONS_LENGTH_FOR_SEARCH) {\n <div class=\"ui-filter-button-header\">\n <ui-field\n type=\"search\"\n [showBottomContent]=\"false\"\n [ngModel]=\"search()\"\n (ngModelChange)=\"search.set($event)\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-field>\n </div>\n }\n <div class=\"ui-filter-button-list\" #list tabindex=\"0\" (keydown)=\"keyDownHandler($event)\">\n @if (!displayedOptions().length && options().length) {\n <div class=\"no-results-found\">\n <span>{{ translationContext + 'NO_RESULTS_FOUND' | uiTranslate | async }}</span>\n </div>\n } @else {\n @for (section of displayedOptions(); track section; let i = $index) {\n <div>\n @if (section.sectionTitle && section.sectionTitle !== displayedOptions()[i - 1]?.sectionTitle) {\n <div class=\"section-title\">\n {{ section.sectionTitle }}\n </div>\n }\n <div\n class=\"item\"\n [class.item-selected]=\"isSelected(section.value)\"\n tabindex=\"0\"\n (click)=\"optionChanged(!isSelected(section.value), section)\"\n (keydown.enter)=\"optionChanged(!isSelected(section.value), section)\"\n >\n @if (singleSelection) {\n <ui-radio-button\n (click)=\"$event.stopPropagation()\"\n [tabIndex]=\"i === 0 ? 0 : -1\"\n [selected]=\"isSelected(section.value)\"\n (changeRadio)=\"optionChanged($event.optionChecked, section)\"\n [applicationTheme]=\"applicationTheme\"\n #filterOption\n >\n </ui-radio-button>\n }\n @if (!singleSelection) {\n <ui-checkbox\n (click)=\"$event.stopPropagation()\"\n [class.with-label-number]=\"section.labelNumber !== undefined\"\n [tabIndex]=\"i === 0 ? 0 : -1\"\n [checked]=\"isSelected(section.value)\"\n (changed)=\"optionChanged($event, section)\"\n [applicationTheme]=\"applicationTheme\"\n #filterOption\n ></ui-checkbox>\n }\n @if (section.icon) {\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"section.icon\"></ui-icon>\n }\n <span\n #tooltip=\"matTooltip\"\n class=\"item-label\"\n uiEllipseText\n (onChangeTextState)=\"onLabelEllipsisChange($event, section.value)\"\n [matTooltip]=\"showTooltip[section.value] ? section.label : ''\"\n [matTooltipClass]=\"applicationTheme\"\n >\n {{ section.label }}\n </span>\n @if (section.labelNumber !== undefined) {\n <span class=\"item-number\">({{ section.labelNumber }})</span>\n }\n </div>\n </div>\n }\n }\n </div>\n @if (!options().length && !!noOptionsMessage) {\n <div class=\"ui-filter-button-no-options\" [innerHTML]=\"noOptionsMessage\"></div>\n } @else {\n @if (allowClear || message) {\n <div class=\"ui-filter-button-footer\">\n @if (allowClear) {\n <ui-button\n variant=\"text\"\n size=\"small\"\n [label]=\"('COMMON.RESET' | uiTranslate | async)!\"\n (click)=\"clearValue()\"\n [applicationTheme]=\"applicationTheme\"\n (keydown.escape)=\"toggle()\"\n ></ui-button>\n }\n <div class=\"ui-filter-button-footer-message\">\n {{ message }}\n </div>\n </div>\n }\n }\n </div>\n </ng-template>\n</ng-container>\n","import { EllipseTextDirective } from '@testgorilla/tgo-ui/components/core';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { FilterButtonComponent } from './filter-button.component';\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { CheckboxComponentModule } from '@testgorilla/tgo-ui/components/checkbox';\nimport { RadioButtonComponentModule } from '@testgorilla/tgo-ui/components/radio-button';\nimport { FieldComponentModule } from '@testgorilla/tgo-ui/components/field';\nimport { FormsModule } from '@angular/forms';\nimport { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\n\n@NgModule({\n declarations: [FilterButtonComponent],\n imports: [\n CommonModule,\n FormsModule,\n MatTooltipModule,\n OverlayModule,\n UiTranslatePipe,\n ButtonComponentModule,\n IconComponentModule,\n CheckboxComponentModule,\n FieldComponentModule,\n EllipseTextDirective,\n RadioButtonComponentModule,\n ],\n exports: [FilterButtonComponent],\n})\nexport class FilterButtonComponentModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"testgorilla-tgo-ui-components-filter-button.mjs","sources":["../../../components/filter-button/filter-button.component.ts","../../../components/filter-button/filter-button.component.html","../../../components/filter-button/filter-button.component.module.ts","../../../components/filter-button/testgorilla-tgo-ui-components-filter-button.ts"],"sourcesContent":["import { FocusableOption, FocusKeyManager } from '@angular/cdk/a11y';\nimport { CdkOverlayOrigin, CdkConnectedOverlay } from '@angular/cdk/overlay';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n input,\n Input,\n OnChanges,\n Optional,\n Output,\n QueryList,\n signal,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { ButtonIconPosition, ButtonComponent } from '@testgorilla/tgo-ui/components/button';\nimport { CheckboxComponent } from '@testgorilla/tgo-ui/components/checkbox';\nimport {\n ApplicationTheme,\n IKeyboardEvent,\n EllipseTextDirective,\n UiTranslatePipe,\n} from '@testgorilla/tgo-ui/components/core';\nimport { FieldComponent } from '@testgorilla/tgo-ui/components/field';\nimport { IconName, IconComponent } from '@testgorilla/tgo-ui/components/icon';\nimport { RadioButtonComponent } from '@testgorilla/tgo-ui/components/radio-button';\n\nimport { FilterButtonOption, FilterValue, OptionChangeEvent } from './filter-button.model';\n\n@Component({\n selector: 'ui-filter-button',\n templateUrl: './filter-button.component.html',\n styleUrls: ['./filter-button.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ButtonComponent,\n CdkOverlayOrigin,\n MatTooltip,\n CdkConnectedOverlay,\n FieldComponent,\n FormsModule,\n RadioButtonComponent,\n CheckboxComponent,\n IconComponent,\n EllipseTextDirective,\n AsyncPipe,\n UiTranslatePipe,\n ],\n})\nexport class FilterButtonComponent implements OnChanges {\n @HostBinding() class = 'ui-filter-button';\n\n /**\n * The button label when no value is selected.\n *\n * @type {string}\n * @memberof FilterButtonComponent\n */\n @Input() label = '';\n\n /**\n * Optional message to display on the overflow bottom.\n *\n * @type {string}\n * @memberof FilterButtonComponent\n */\n @Input() message? = '';\n\n /**\n * List of selected values.\n *\n * @type {string[]}\n * @memberof FilterButtonComponent\n */\n @Input() value: FilterValue[] = [];\n\n /**\n * Whether the component is disabled.\n * Default: false.\n *\n * @type {boolean}\n * @memberof FilterButtonComponent\n */\n @Input() disabled = false;\n\n /**\n * List of options.\n *\n * @type {OptionType}\n * @memberof FilterButtonComponent\n */\n options = input<FilterButtonOption[]>([]);\n\n /**\n * Whether the user should be allowed to clear the values.\n * Default: true.\n *\n * @type {boolean}\n * @memberof FilterButtonComponent\n */\n @Input() allowClear = true;\n\n /**\n * Whether the user should be allowed to select single or multiple values.\n * Default: false.\n *\n * @type {boolean}\n * @memberof FilterButtonComponent\n */\n @Input() singleSelection? = false;\n\n /**\n * The icon name to display.\n *\n * @type {string}\n * @memberof FilterButtonComponent\n *\n **/\n\n @Input() iconName?: IconName;\n\n /**\n * The position of the icon.\n * Default: 'right'.\n *\n * @type {ButtonIconPosition}\n * @memberof FilterButtonComponent\n */\n @Input() iconPosition?: ButtonIconPosition = 'right';\n\n /**\n * Optional message to display if there are no options to select available\n *\n * @type {string}\n * @memberof FilterButtonComponent\n */\n @Input() noOptionsMessage? = '';\n\n /**\n * Emits the list of selected values when the selection changes.\n *\n * @type {EventEmitter<string[]>}\n * @memberof FilterButtonComponent\n */\n @Output() changed = new EventEmitter<FilterValue[]>();\n\n /**\n * Emits the option change event\n *\n * @type {EventEmitter<OptionChangeEvent>}\n * @memberof FilterButtonComponent\n */\n @Output() optionChange = new EventEmitter<OptionChangeEvent>();\n /**\n *\n * Defines the application theme\n *\n * @type {ApplicationTheme}\n * @memberof FilterButtonComponent\n */\n @HostBinding('attr.theme')\n @Input()\n applicationTheme: ApplicationTheme = 'light';\n\n @ViewChild('overlayContainer') overlayContainer: ElementRef<HTMLElement>;\n @ViewChildren('filterOption') filterOptions: QueryList<FocusableOption>;\n\n isOpen = signal<boolean>(false);\n displayedLabel = signal<string>('');\n tooltip = signal<string>('');\n search = signal<string>('');\n showTooltip: { [key: string]: boolean } = {};\n displayedOptions = computed(() => {\n let lastSectionTitle: string;\n return this.options()\n .map(option => {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- an empty section title reuses the previous section\n lastSectionTitle = option.sectionTitle || lastSectionTitle;\n return { ...option, sectionTitle: lastSectionTitle };\n })\n .filter(option => option.label.toLowerCase().includes(this.search().toLowerCase()));\n });\n readonly MIN_OPTIONS_LENGTH_FOR_SEARCH = 8;\n protected keyManager: FocusKeyManager<FocusableOption>;\n protected translationContext = 'FILTER_BUTTON.';\n constructor(\n @Optional() @Inject('CANOPYUI_DEFAULT_APPLICATION_THEME') private readonly defaultAppTheme: ApplicationTheme,\n private readonly cdr: ChangeDetectorRef\n ) {\n if (this.defaultAppTheme) {\n this.applicationTheme = this.defaultAppTheme;\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value']) {\n this.updateLabel();\n }\n }\n\n clearValue(): void {\n this.value = [];\n this.updateLabel();\n this.changed.emit(this.value);\n }\n\n outsideClick() {\n window.setTimeout(() => {\n this.isOpen.set(false);\n });\n }\n\n toggle(): void {\n this.isOpen.set(!this.isOpen());\n if (this.isOpen()) {\n this.keyManager = new FocusKeyManager<FocusableOption>(this.filterOptions).withWrap();\n this.keyManager.setActiveItem(0);\n }\n this.cdr.markForCheck();\n }\n\n isSelected(value?: FilterValue) {\n return this.value?.includes(value ?? '');\n }\n\n optionChanged(selected: boolean, option: FilterButtonOption) {\n this.value = this.value || [];\n if (this.singleSelection) {\n this.value = selected ? [option.value] : [];\n } else {\n if (selected) {\n this.value.push(option.value);\n } else {\n this.value.splice(this.value.indexOf(option.value), 1);\n }\n }\n this.changed.emit(this.value);\n this.optionChange.emit({ selected, option });\n this.updateLabel();\n }\n\n keyDownHandler(ev: KeyboardEvent) {\n if (ev.key === (IKeyboardEvent.ARROW_DOWN as string)) {\n ev.preventDefault();\n this.keyManager.setNextItemActive();\n } else if (ev.key === (IKeyboardEvent.ARROW_UP as string)) {\n ev.preventDefault();\n this.keyManager.setPreviousItemActive();\n } else if (ev.key === (IKeyboardEvent.ESCAPE as string)) {\n this.isOpen.set(false);\n }\n }\n\n onLabelEllipsisChange(isEllipsis: boolean, value: FilterValue): void {\n this.showTooltip[value] = isEllipsis;\n }\n\n private updateLabel() {\n this.value = this.value || [];\n let displayedLabel = '';\n let tooltip = '';\n const sortedLabels = this.options()\n .filter(option => this.value.includes(option.value))\n .map(item => item?.label ?? '');\n\n if (sortedLabels.length > 0) {\n displayedLabel = this.options().find(option => option.value === this.value[0])?.label ?? '';\n tooltip = `${this.label}${sortedLabels.map(value => `\\n • ${value}`).join('')}`;\n }\n\n if (this.value.length > 1) {\n displayedLabel += ` (+${this.value.length - 1})`;\n }\n this.displayedLabel.set(displayedLabel);\n this.tooltip.set(tooltip);\n this.cdr.markForCheck();\n }\n}\n","<ng-container>\n <ui-button\n [matTooltip]=\"tooltip()\"\n [matTooltipClass]=\"'tooltip-multi-line ' + applicationTheme\"\n [matTooltipPosition]=\"'above'\"\n class=\"ui-filter-button-trigger\"\n [class.button-opened]=\"isOpen()\"\n [variant]=\"value.length || isOpen() ? 'secondary' : 'ghost'\"\n [label]=\"displayedLabel() || label\"\n [disabled]=\"disabled || (options().length === 0 && !noOptionsMessage)\"\n (click)=\"toggle()\"\n type=\"button\"\n size=\"small\"\n [role]=\"'combobox'\"\n [tooltip]=\"value.length ? ' ' : ''\"\n [attr.aria-expanded]=\"isOpen()\"\n [iconName]=\"iconName || (isOpen() ? 'Arrow-chevron-up-filled' : 'Arrow-chevron-down-filled')\"\n [iconPosition]=\"iconPosition\"\n [applicationTheme]=\"applicationTheme\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n ></ui-button>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n (overlayOutsideClick)=\"outsideClick()\"\n >\n @if (displayedOptions().length) {\n <div style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">\n {{ displayedOptions()[keyManager.activeItemIndex ?? 0].label }}\n {{\n translationContext + 'ACTIVE_ITEM'\n | uiTranslate: { active: (keyManager.activeItemIndex ?? 0) + 1, total: filterOptions.length }\n | async\n }}\n </div>\n <div style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">\n {{ displayedOptions()[keyManager.activeItemIndex ?? 0].label }}\n {{\n (value.includes(displayedOptions()[keyManager.activeItemIndex ?? 0].value)\n ? translationContext + 'SELECTED'\n : translationContext + 'DESELECTED'\n )\n | uiTranslate\n | async\n }}\n </div>\n }\n <div class=\"ui-filter-button\" #overlayContainer>\n @if (options().length > MIN_OPTIONS_LENGTH_FOR_SEARCH) {\n <div class=\"ui-filter-button-header\">\n <ui-field\n type=\"search\"\n [showBottomContent]=\"false\"\n [ngModel]=\"search()\"\n (ngModelChange)=\"search.set($event)\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-field>\n </div>\n }\n <div class=\"ui-filter-button-list\" #list tabindex=\"0\" (keydown)=\"keyDownHandler($event)\">\n @if (!displayedOptions().length && options().length) {\n <div class=\"no-results-found\">\n <span>{{ translationContext + 'NO_RESULTS_FOUND' | uiTranslate | async }}</span>\n </div>\n } @else {\n @for (section of displayedOptions(); track section; let i = $index) {\n <div>\n @if (section.sectionTitle && section.sectionTitle !== displayedOptions()[i - 1]?.sectionTitle) {\n <div class=\"section-title\">\n {{ section.sectionTitle }}\n </div>\n }\n <div\n class=\"item\"\n [class.item-selected]=\"isSelected(section.value)\"\n tabindex=\"0\"\n (click)=\"optionChanged(!isSelected(section.value), section)\"\n (keydown.enter)=\"optionChanged(!isSelected(section.value), section)\"\n >\n @if (singleSelection) {\n <ui-radio-button\n (click)=\"$event.stopPropagation()\"\n [tabIndex]=\"i === 0 ? 0 : -1\"\n [selected]=\"isSelected(section.value)\"\n (changeRadio)=\"optionChanged($event.optionChecked, section)\"\n [applicationTheme]=\"applicationTheme\"\n #filterOption\n >\n </ui-radio-button>\n }\n @if (!singleSelection) {\n <ui-checkbox\n (click)=\"$event.stopPropagation()\"\n [class.with-label-number]=\"section.labelNumber !== undefined\"\n [tabIndex]=\"i === 0 ? 0 : -1\"\n [checked]=\"isSelected(section.value)\"\n (changed)=\"optionChanged($event, section)\"\n [applicationTheme]=\"applicationTheme\"\n #filterOption\n ></ui-checkbox>\n }\n @if (section.icon) {\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"section.icon\"></ui-icon>\n }\n <span\n #tooltip=\"matTooltip\"\n class=\"item-label\"\n uiEllipseText\n (onChangeTextState)=\"onLabelEllipsisChange($event, section.value)\"\n [matTooltip]=\"showTooltip[section.value] ? section.label : ''\"\n [matTooltipClass]=\"applicationTheme\"\n >\n {{ section.label }}\n </span>\n @if (section.labelNumber !== undefined) {\n <span class=\"item-number\">({{ section.labelNumber }})</span>\n }\n </div>\n </div>\n }\n }\n </div>\n @if (!options().length && !!noOptionsMessage) {\n <div class=\"ui-filter-button-no-options\" [innerHTML]=\"noOptionsMessage\"></div>\n } @else {\n @if (allowClear || message) {\n <div class=\"ui-filter-button-footer\">\n @if (allowClear) {\n <ui-button\n variant=\"text\"\n size=\"small\"\n [label]=\"('COMMON.RESET' | uiTranslate | async)!\"\n (click)=\"clearValue()\"\n [applicationTheme]=\"applicationTheme\"\n (keydown.escape)=\"toggle()\"\n ></ui-button>\n }\n <div class=\"ui-filter-button-footer-message\">\n {{ message }}\n </div>\n </div>\n }\n }\n </div>\n </ng-template>\n</ng-container>\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { CheckboxComponentModule } from '@testgorilla/tgo-ui/components/checkbox';\nimport { EllipseTextDirective, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { FieldComponentModule } from '@testgorilla/tgo-ui/components/field';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { RadioButtonComponentModule } from '@testgorilla/tgo-ui/components/radio-button';\n\nimport { FilterButtonComponent } from './filter-button.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n MatTooltipModule,\n OverlayModule,\n UiTranslatePipe,\n ButtonComponentModule,\n IconComponentModule,\n CheckboxComponentModule,\n FieldComponentModule,\n EllipseTextDirective,\n RadioButtonComponentModule,\n FilterButtonComponent,\n ],\n exports: [FilterButtonComponent],\n})\nexport class FilterButtonComponentModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|