UNPKG

ngx-voicely-cx

Version:

A feedback collection widget for Angular applications

1 lines 27.9 kB
{"version":3,"file":"ngx-voicely-cx.mjs","sources":["../../../projects/voicely-cx/src/lib/voicely-cx.service.ts","../../../projects/voicely-cx/src/lib/voicely-cx.component.ts","../../../projects/voicely-cx/src/lib/feedback-form/feedback-form.component.ts","../../../projects/voicely-cx/src/lib/feedback-form/feedback-form.component.html","../../../projects/voicely-cx/src/lib/voicely-cx.module.ts","../../../projects/voicely-cx/src/public-api.ts","../../../projects/voicely-cx/src/ngx-voicely-cx.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class VoicelyCxService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-voicely-cx',\r\n imports: [],\r\n template: `\r\n <p>\r\n voicely-cx works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class VoicelyCxComponent {\r\n\r\n}\r\n","import { Component, EventEmitter, Input, Output, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport interface FeedbackFormLabels {\r\n easeOfUse: string;\r\n performance: string;\r\n design: string;\r\n missingFeatures: string;\r\n missingFeaturesPlaceholder: string;\r\n thoughts: string;\r\n thoughtsPlaceholder: string;\r\n submitButton: string;\r\n ratingDescription?: {\r\n 1: string;\r\n 2: string;\r\n 3: string;\r\n 4: string;\r\n 5: string;\r\n };\r\n}\r\n\r\nexport interface FeedbackFormData {\r\n easeOfUse: any;\r\n performance: any;\r\n design: any;\r\n missingFeatures: string[];\r\n userFeedback: string;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-feedback-form',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n MatCardModule,\r\n MatButtonModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatChipsModule,\r\n MatIconModule\r\n ],\r\n templateUrl: './feedback-form.component.html',\r\n styleUrl: './feedback-form.component.scss',\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class FeedbackFormComponent implements OnInit {\r\n @Input() title = 'Feedback Form';\r\n @Input() subtitle?: string;\r\n\r\n @Input() labels: FeedbackFormLabels = {\r\n easeOfUse: 'Ease of Use',\r\n performance: 'Performance/Speed',\r\n design: 'Design/Visual Clarity',\r\n missingFeatures: 'Missing Features?',\r\n missingFeaturesPlaceholder: 'Please enter to add tags',\r\n thoughts: 'Your thoughts',\r\n thoughtsPlaceholder: 'Please share your feedback',\r\n submitButton: 'Submit',\r\n ratingDescription: {\r\n 1: 'Poor',\r\n 2: 'Fair',\r\n 3: 'Good',\r\n 4: 'Great',\r\n 5: 'Excellent'\r\n }\r\n };\r\n\r\n @Output() formSubmit = new EventEmitter<FeedbackFormData>();\r\n\r\n feedbackForm!: FormGroup;\r\n featureInput = new FormControl('');\r\n features: string[] = [];\r\n\r\n constructor(private fb: FormBuilder) {}\r\n\r\n ngOnInit(): void {\r\n this.feedbackForm = this.fb.group({\r\n easeOfUse: [null],\r\n performance: [null],\r\n design: [null],\r\n userFeedback: ['']\r\n });\r\n }\r\n\r\n onRatingChange(controlName: string, value: number): void {\r\n this.feedbackForm.get(controlName)?.setValue(value);\r\n }\r\n\r\n addFeature(): void {\r\n const value = this.featureInput.value?.trim();\r\n if (value && !this.features.includes(value)) {\r\n this.features.push(value);\r\n this.featureInput.setValue('');\r\n }\r\n }\r\n\r\n removeFeature(index: number): void {\r\n if (index >= 0 && index < this.features.length) {\r\n this.features.splice(index, 1);\r\n }\r\n }\r\n\r\n onSubmit(): void {\r\n if (this.hasAtLeastOneValue()) {\r\n const formData: FeedbackFormData = {\r\n easeOfUse: this.feedbackForm.value.easeOfUse ? Number(this.feedbackForm.value.easeOfUse) : null,\r\n performance: this.feedbackForm.value.performance ? Number(this.feedbackForm.value.performance) : null,\r\n design: this.feedbackForm.value.design ? Number(this.feedbackForm.value.design) : null,\r\n userFeedback: this.feedbackForm.value.userFeedback || '',\r\n missingFeatures: [...this.features]\r\n };\r\n this.formSubmit.emit(formData);\r\n }\r\n }\r\n\r\n hasAtLeastOneValue(): boolean {\r\n return !!(\r\n this.feedbackForm.value.easeOfUse ||\r\n this.feedbackForm.value.performance ||\r\n this.feedbackForm.value.design ||\r\n this.feedbackForm.value.userFeedback ||\r\n this.features.length > 0\r\n );\r\n }\r\n\r\n getRatingDescription(value: any): string {\r\n if (value === null || value === undefined) {\r\n return '';\r\n }\r\n\r\n const rating = Number(value);\r\n if (isNaN(rating) || !this.labels.ratingDescription) {\r\n return '';\r\n }\r\n\r\n return this.labels.ratingDescription[rating as 1|2|3|4|5] || '';\r\n }\r\n}\r\n","<mat-card class=\"feedback-form-card\">\r\n <mat-card-header>\r\n <mat-card-title>{{ title }}</mat-card-title>\r\n <mat-card-subtitle *ngIf=\"subtitle\">{{ subtitle }}</mat-card-subtitle>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <form [formGroup]=\"feedbackForm\" (ngSubmit)=\"onSubmit()\">\r\n <!-- Ease of Use Rating -->\r\n <div class=\"rating-container\">\r\n <div class=\"rating-row\">\r\n <span class=\"rating-label-text\">{{ labels.easeOfUse }}</span>\r\n <div class=\"rating\">\r\n <input type=\"radio\" [id]=\"'easeOfUse5_' + title\" formControlName=\"easeOfUse\" value=\"5\" />\r\n <label [for]=\"'easeOfUse5_' + title\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" viewBox=\"0 0 576 512\">\r\n <path d=\"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z\"></path>\r\n </svg>\r\n </label>\r\n <input type=\"radio\" value=\"4\" formControlName=\"easeOfUse\" [id]=\"'easeOfUse4_' + title\" />\r\n <label [for]=\"'easeOfUse4_' + title\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" viewBox=\"0 0 576 512\">\r\n <path d=\"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z\"></path>\r\n </svg>\r\n </label>\r\n <input type=\"radio\" value=\"3\" formControlName=\"easeOfUse\" [id]=\"'easeOfUse3_' + title\" />\r\n <label [for]=\"'easeOfUse3_' + title\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" viewBox=\"0 0 576 512\">\r\n <path d=\"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z\"></path>\r\n </svg>\r\n </label>\r\n <input type=\"radio\" value=\"2\" formControlName=\"easeOfUse\" [id]=\"'easeOfUse2_' + title\" />\r\n <label [for]=\"'easeOfUse2_' + title\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" viewBox=\"0 0 576 512\">\r\n <path d=\"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z\"></path>\r\n </svg>\r\n </label>\r\n <input type=\"radio\" value=\"1\" formControlName=\"easeOfUse\" [id]=\"'easeOfUse1_' + title\" />\r\n <label [for]=\"'easeOfUse1_' + title\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" viewBox=\"0 0 576 512\">\r\n <path d=\"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z\"></path>\r\n </svg>\r\n </label>\r\n </div>\r\n <div class=\"rating-description\" *ngIf=\"feedbackForm.get('easeOfUse')?.value\">\r\n {{ getRatingDescription(feedbackForm.get('easeOfUse')?.value) }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Performance/Speed Rating -->\r\n <div class=\"rating-container\">\r\n <div class=\"rating-row\">\r\n <span class=\"rating-label-text\">{{ labels.performance }}</span>\r\n <div class=\"rating\">\r\n <input type=\"radio\" [id]=\"'performance5_' + title\" formControlName=\"performance\" value=\"5\" />\r\n <label [for]=\"'performance5_' + title\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" viewBox=\"0 0 576 512\">\r\n <path d=\"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z\"></path>\r\n </svg>\r\n </label>\r\n <input type=\"radio\" formControlName=\"performance\" value=\"4\" [id]=\"'performance4_' + title\" />\r\n <label [for]=\"'performance4_' + title\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" viewBox=\"0 0 576 512\">\r\n <path d=\"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z\"></path>\r\n </svg>\r\n </label>\r\n <input type=\"radio\" formControlName=\"performance\" value=\"3\" [id]=\"'performance3_' + title\" />\r\n <label [for]=\"'performance3_' + title\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" viewBox=\"0 0 576 512\">\r\n <path d=\"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z\"></path>\r\n </svg>\r\n </label>\r\n <input type=\"radio\" formControlName=\"performance\" value=\"2\" [id]=\"'performance2_' + title\" />\r\n <label [for]=\"'performance2_' + title\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" viewBox=\"0 0 576 512\">\r\n <path d=\"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z\"></path>\r\n </svg>\r\n </label>\r\n <input type=\"radio\" formControlName=\"performance\" value=\"1\" [id]=\"'performance1_' + title\" />\r\n <label [for]=\"'performance1_' + title\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" viewBox=\"0 0 576 512\">\r\n <path d=\"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z\"></path>\r\n </svg>\r\n </label>\r\n </div>\r\n <div class=\"rating-description\" *ngIf=\"feedbackForm.get('performance')?.value\">\r\n {{ getRatingDescription(feedbackForm.get('performance')?.value) }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Design/Visual Clarity Rating -->\r\n <div class=\"rating-container\">\r\n <div class=\"rating-row\">\r\n <span class=\"rating-label-text\">{{ labels.design }}</span>\r\n <div class=\"rating\">\r\n <input type=\"radio\" [id]=\"'design5_' + title\" formControlName=\"design\" value=\"5\" />\r\n <label [for]=\"'design5_' + title\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" viewBox=\"0 0 576 512\">\r\n <path d=\"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z\"></path>\r\n </svg>\r\n </label>\r\n <input type=\"radio\" formControlName=\"design\" value=\"4\" [id]=\"'design4_' + title\" />\r\n <label [for]=\"'design4_' + title\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" viewBox=\"0 0 576 512\">\r\n <path d=\"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z\"></path>\r\n </svg>\r\n </label>\r\n <input type=\"radio\" formControlName=\"design\" value=\"3\" [id]=\"'design3_' + title\" />\r\n <label [for]=\"'design3_' + title\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" viewBox=\"0 0 576 512\">\r\n <path d=\"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z\"></path>\r\n </svg>\r\n </label>\r\n <input type=\"radio\" formControlName=\"design\" value=\"2\" [id]=\"'design2_' + title\" />\r\n <label [for]=\"'design2_' + title\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" viewBox=\"0 0 576 512\">\r\n <path d=\"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z\"></path>\r\n </svg>\r\n </label>\r\n <input type=\"radio\" formControlName=\"design\" value=\"1\" [id]=\"'design1_' + title\" />\r\n <label [for]=\"'design1_' + title\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" viewBox=\"0 0 576 512\">\r\n <path d=\"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z\"></path>\r\n </svg>\r\n </label>\r\n </div>\r\n <div class=\"rating-description\" *ngIf=\"feedbackForm.get('design')?.value\">\r\n {{ getRatingDescription(feedbackForm.get('design')?.value) }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Missing Features (Tag Input) -->\r\n <div class=\"features-container\">\r\n <label>{{ labels.missingFeatures }}</label>\r\n <mat-form-field appearance=\"outline\" class=\"full-width\">\r\n <input matInput\r\n placeholder=\"{{ labels.missingFeaturesPlaceholder }}\"\r\n [formControl]=\"featureInput\"\r\n (keyup.enter)=\"addFeature()\">\r\n </mat-form-field>\r\n <div class=\"tags-container\">\r\n <mat-chip-set>\r\n <mat-chip *ngFor=\"let feature of features; let i = index\" (removed)=\"removeFeature(i)\">\r\n {{ feature }}\r\n <button matChipRemove>\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip>\r\n </mat-chip-set>\r\n </div>\r\n </div>\r\n\r\n <!-- Your Thoughts (Text Area) - renamed to userFeedback in the form structure -->\r\n <div class=\"thoughts-container\">\r\n <label>{{ labels.thoughts }}</label>\r\n <mat-form-field appearance=\"outline\" class=\"full-width\">\r\n <textarea matInput\r\n formControlName=\"userFeedback\"\r\n rows=\"4\"\r\n placeholder=\"{{ labels.thoughtsPlaceholder }}\"></textarea>\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- Submit Button -->\r\n <div class=\"button-container\">\r\n <button mat-raised-button type=\"submit\" [disabled]=\"!hasAtLeastOneValue()\">\r\n {{ labels.submitButton }}\r\n </button>\r\n </div>\r\n </form>\r\n </mat-card-content>\r\n</mat-card>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { VoicelyCxComponent } from './voicely-cx.component';\r\nimport { FeedbackFormComponent } from './feedback-form/feedback-form.component';\r\nimport { VoicelyCxService } from './voicely-cx.service';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n VoicelyCxComponent,\r\n FeedbackFormComponent\r\n ],\r\n exports: [\r\n VoicelyCxComponent,\r\n FeedbackFormComponent\r\n ],\r\n providers: [\r\n VoicelyCxService\r\n ]\r\n})\r\nexport class VoicelyCxModule { } ","/*\r\n * Public API Surface of voicely-cx\r\n */\r\n\r\nexport * from './lib/voicely-cx.service';\r\nexport * from './lib/voicely-cx.component';\r\nexport * from './lib/voicely-cx.module';\r\nexport * from './lib/feedback-form/feedback-form.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}