UNPKG

@ionic-snippets/star-rating

Version:

A flexible star rating component for Angular with Ionic support

1 lines 7.62 kB
{"version":3,"file":"ionic-snippets-star-rating.mjs","sources":["../../../projects/star-rating-lib/src/lib/star-rating.component.ts","../../../projects/star-rating-lib/src/lib/star-rating.component.html","../../../projects/star-rating-lib/src/public-api.ts","../../../projects/star-rating-lib/src/ionic-snippets-star-rating.ts"],"sourcesContent":["import {\n Component,\n OnInit,\n input,\n output,\n computed,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IonButton, IonIcon } from '@ionic/angular/standalone';\nimport { addIcons } from 'ionicons';\nimport {\n star,\n heart,\n thumbsUp,\n diamond,\n square,\n radioButtonOff,\n starOutline,\n heartOutline,\n thumbsUpOutline,\n diamondOutline,\n squareOutline,\n radioButtonOffOutline,\n} from 'ionicons/icons';\n\n@Component({\n selector: 'app-star-rating',\n templateUrl: './star-rating.component.html',\n styleUrls: ['./star-rating.component.scss'],\n standalone: true,\n imports: [CommonModule, IonButton, IonIcon],\n})\nexport class StarRatingComponent implements OnInit {\n // Input Signals\n rating = input(0);\n maxRating = input(5);\n iconType = input('star');\n editable = input(true);\n size = input('medium');\n color = input('#ffc107');\n emptyColor = input('#e0e0e0');\n showRating = input(false);\n\n // Output Signals\n ratingChange = output<number>();\n ratingClick = output<number>();\n\n // Computed signals for derived values\n stars = computed(() => {\n const maxRating = this.maxRating();\n return Array.from({ length: maxRating }, (_, i) => i + 1);\n });\n\n constructor() {\n // Register the icons we need\n addIcons({\n star,\n 'star-outline': starOutline,\n heart,\n 'heart-outline': heartOutline,\n 'thumbs-up': thumbsUp,\n 'thumbs-up-outline': thumbsUpOutline,\n diamond,\n 'diamond-outline': diamondOutline,\n square,\n 'square-outline': squareOutline,\n 'radio-button-off': radioButtonOff,\n 'radio-button-off-outline': radioButtonOffOutline,\n });\n }\n\n ngOnInit() { }\n\n onStarClick(starIndex: number) {\n if (!this.editable()) return;\n\n this.ratingChange.emit(starIndex);\n this.ratingClick.emit(starIndex);\n }\n\n getIconName(starIndex: number): string {\n const isFilled = starIndex <= this.rating();\n const suffix = isFilled ? '' : '-outline';\n\n // Icon mapping with robust fallbacks\n const iconMap: { [key: string]: string } = {\n heart: `heart${suffix}`,\n 'thumbs-up': `thumbs-up${suffix}`,\n diamond: `diamond${suffix}`,\n square: `square${suffix}`,\n circle: `radio-button-off${suffix}`,\n star: `star${suffix}`,\n };\n\n // If the icon doesn't exist in the map, use star as fallback\n return iconMap[this.iconType()] || `star${suffix}`;\n }\n\n getIconStyle(starIndex: number): any {\n return {\n color: starIndex <= this.rating() ? this.color() : this.emptyColor(),\n fontSize: this.getSizeValue(),\n };\n }\n\n getSizeValue(): string {\n switch (this.size()) {\n case 'small':\n return '16px';\n case 'large':\n return '24px';\n default:\n return '20px';\n }\n }\n\n getButtonSize(): string {\n switch (this.size()) {\n case 'small':\n return 'small';\n case 'large':\n return 'large';\n default:\n return 'default';\n }\n }\n}\n","<div class=\"star-rating-container\">\n <div class=\"stars-wrapper\">\n <ion-button\n *ngFor=\"let star of stars(); let i = index\"\n [fill]=\"i + 1 <= rating() ? 'solid' : 'clear'\"\n [size]=\"getButtonSize()\"\n [disabled]=\"!editable()\"\n (click)=\"onStarClick(i + 1)\"\n class=\"rating-button\"\n [attr.data-rating]=\"i + 1\"\n >\n <ion-icon [name]=\"getIconName(i + 1)\" [style]=\"getIconStyle(i + 1)\">\n </ion-icon>\n </ion-button>\n </div>\n\n <div *ngIf=\"showRating()\" class=\"rating-text\">\n {{ rating() }}/{{ maxRating() }}\n </div>\n</div>\n","/*\n * Public API Surface of star-rating-lib\n */\n\nexport * from './lib/star-rating.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}