@testgorilla/tgo-ui 5.2.2 → 5.2.4
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/icon/icon-svg-content.d.ts +1 -1
- package/components/icon/icon.config.d.ts +1 -1
- package/components/inline-field/inline-field.component.d.ts +2 -2
- package/fesm2022/testgorilla-tgo-ui-components-ai-audio-circle.mjs +2 -1
- package/fesm2022/testgorilla-tgo-ui-components-ai-audio-circle.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-icon.mjs +4 -2
- package/fesm2022/testgorilla-tgo-ui-components-icon.mjs.map +1 -1
- package/package.json +31 -31
- package/projects/tgo-canopy-ui/assets/icons/rebrand/Bookmark-filled.svg +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const tgoIcons: readonly ["Add", "Archive", "Arrow_down", "Arrow_left", "Arrow_right", "Arrow_up", "Assessment", "Attempts", "Book", "Calendar", "Candidates", "Chat-notifications", "Chat", "Check", "Clone", "Close", "Code", "Company", "Copy", "Custom-questions", "Delete", "Devices", "Document", "Dot", "Download", "Edit", "Email-message", "Empty-placeholder", "Error", "Essay", "Eye-hide", "Eye-view", "Feedback-1", "Feedback-2", "Feedback-3", "Feedback-4", "Feedback-5", "File-attach", "File-upload", "Filter", "Flag", "Folder", "Format-add-file", "Format-add-table", "Format-align-L", "Format-align-R", "Format-align-center", "Format-align-justify", "Format-bold", "Format-code-active", "Format-code-block", "Format-edit-table", "Format-format", "Format-function", "Format-italics", "Format-list-bulleted", "Format-list-numbered", "Format-picker", "Format-quote", "Format-subscript", "Format-superscript", "Format-text-direction-L", "Format-text-direction-R", "Format-text-size", "Format-underline", "Format-variable", "Full-screen", "Gender-female", "Gender-male", "Help-2", "Help", "Image", "Info", "Integration", "Language", "Layout", "Learn", "Level", "Light-bulb", "Link", "Loading-spinner", "Localisation", "Location", "Lock", "Log-out", "Menu-burger", "Menu-close", "Menu-ellipsis", "Menu-open", "Microphone", "Microsoft", "Minus", "Mouse-cursor", "Mouse-grab-cursor", "Mouse", "Multi-choice", "Notifications", "Password", "Path", "Pin-marker", "Plan-billing", "Plus", "Premium", "Promotion", "Question-count", "Refer", "Reset", "Review", "Round-check-filled", "Round-check", "Search", "Secure-checkout", "Send", "Settings", "Social-facebook", "Social-instagram", "Social-linkedin", "Sorting-down-1", "Sorting-down", "Speedometer", "Star-filled", "Star-half", "Star-outline", "Support", "Sync", "Team", "Test", "Thunder", "Timer", "Trophy", "Type", "Unarchive", "Unlock", "Upgrade", "Upload", "User-access", "User-add", "User-invite", "User-profile", "User-reject", "User-switch", "Video-pause", "Video-play", "Video-record", "Video", "Volume", "Warning", "Zoom-in", "Zoom-out", "Fire", "Gift", "Grab", "Share", "Sparkles", "Video-stop", "Minimize", "Employee", "Money-bag", "Suitcase", "Google", "Fast-forward", "Fast-rewind", "Skip-next", "Skip-previous", "TestGorilla", "Switch-tab"];
|
|
2
|
-
export declare const tgoRebrandIcons: readonly ["Device-rotate-in-line", "Archive-filled", "Archive-in-line", "Add-in-line", "Add-filled", "Arrow-chevron-down-filled", "Arrow-chevron-down-in-line", "Arrow-chevron-left-filled", "Arrow-chevron-left-in-line", "Arrow-chevron-right-filled", "Arrow-chevron-right-in-line", "Arrow-chevron-up-filled", "Arrow-chevron-up-in-line", "Arrow-down-filled", "Arrow-down-in-line", "Arrow-up-filled", "Arrow-up-in-line", "Assessment-filled", "Assessment-in-line", "Attach-filled", "Attach-in-line", "Attempts-filled", "Attempts-in-line", "Book-filled", "Book-in-line", "Calendar-filled", "Calendar-in-line", "Candidates-filled", "Candidates-in-line", "Chat-filled", "Chat-in-line", "Check-filled", "Check-in-line", "Check-small-in-line", "Check-small-filled", "Check-round-filled", "Check-round-in-line", "Circle-filled", "Circle-in-line", "Clone-filled", "Clone-in-line", "Close-filled", "Close-in-line", "Code-filled", "Code-in-line", "Company-filled", "Company-in-line", "Copy-filled", "Copy-in-line", "Credit-filled", "Credit-in-line", "Credit-card-filled", "Credit-card-in-line", "Delete-filled", "Delete-in-line", "Devices-filled", "Devices-in-line", "Document-filled", "Document-in-line", "Dot-filled", "Dot-in-line", "Download-filled", "Download-in-line", "Edit-filled", "Edit-in-line", "Edit-text-filled", "Edit-text-in-line", "Employee-filled", "Employee-in-line", "Error-filled", "Error-in-line", "Essay-filled", "Essay-in-line", "Experience-filled", "Experience-in-line", "Facebook-filled", "Facebook-in-line", "Fast-forward-filled", "Fast-forward-in-line", "Fast-rewind-filled", "Fast-rewind-in-line", "Filter-filled", "Filter-in-line", "Fire-filled", "Fire-in-line", "Flag-filled", "Flag-in-line", "Folder-filled", "Folder-in-line", "Full-screen-filled", "Full-screen-in-line", "Gender-male-filled", "Gender-male-in-line", "Gender-female-filled", "Gender-female-in-line", "Gift-filled", "Gift-in-line", "Google-filled", "Google-in-line", "Grab-filled", "Grab-in-line", "Help-filled", "Help-in-line", "Hide-filled", "Hide-in-line", "Image-filled", "Image-in-line", "Info-filled", "Info-in-line", "Instagram-filled", "Instagram-in-line", "Integration-filled", "Integration-in-line", "Invite-filled", "Invite-in-line", "ID-verified-filled", "ID-verified-in-line", "ID-not-verified-filled", "ID-not-verified-in-line", "ID-failed-filled", "ID-failed-in-line", "Language-filled", "Language-in-line", "Layout-filled", "Layout-in-line", "Learn-filled", "Learn-in-line", "Level-filled", "Level-in-line", "Light-bulb-filled", "Light-bulb-in-line", "Link-filled", "Link-in-line", "Linkedin-filled", "Linkedin-in-line", "Localization-filled", "Localization-in-line", "Location-filled", "Location-in-line", "Lock-filled", "Lock-in-line", "Logout-filled", "Logout-in-line", "Medal-filled", "Medal-in-line", "Menu-burger-filled", "Menu-burger-in-line", "Menu-close-filled", "Menu-close-in-line", "Menu-ellipsis-filled", "Menu-ellipsis-in-line", "Menu-open-filled", "Menu-open-in-line", "Mic-filled", "Mic-in-line", "Microsoft-filled", "Microsoft-in-line", "Minimize-filled", "Minimize-in-line", "Minus-filled", "Minus-in-line", "Mouse-filled", "Mouse-in-line", "Multi-choice-filled", "Multi-choice-in-line", "Notification-bell-filled", "Notification-bell-in-line", "Open-lock-filled", "Open-lock-in-line", "Open-in-new-filled", "Open-in-new-in-line", "Password-filled", "Password-in-line", "Path-filled", "Path-in-line", "Pause-filled", "Pause-in-line", "Pin-marker-filled", "Pin-marker-in-line", "Plan-billing-filled", "Plan-billing-in-line", "Play-filled", "Play-in-line", "Plus-filled", "Plus-in-line", "Premium-filled", "Premium-in-line", "Premium-circle-in-line", "Question-count-filled", "Question-count-in-line", "Question-filled", "Question-in-line", "Record-filled", "Record-in-line", "Reject-filled", "Refer-in-line", "Refer-filled", "Reject-in-line", "Reset-filled", "Reset-in-line", "Review-emoji-1-filled", "Review-emoji-1-in-line", "Review-emoji-2-filled", "Review-emoji-2-in-line", "Review-emoji-3-filled", "Review-emoji-3-in-line", "Review-emoji-4-filled", "Review-emoji-4-in-line", "Review-emoji-5-filled", "Review-emoji-5-in-line", "Review-filled", "Review-half-star-filled", "Review-half-star-in-line", "Review-in-line", "Review-star-filled", "Review-star-in-line", "Search-filled", "Search-in-line", "Secure-filled", "Secure-in-line", "Send-filled", "Send-in-line", "Settings-filled", "Settings-in-line", "Share-filled", "Share-in-line", "Skip-next-filled", "Skip-next-in-line", "Skip-previous-filled", "Skip-previous-in-line", "Sparkle-filled", "Sparkle-in-line", "Speedometer-filled", "Speedometer-in-line", "Star-filled", "Star-in-line", "Stop-filled", "Stop-in-line", "Switch-filled", "Switch-in-line", "Sync-filled", "Sync-in-line", "Tag-filled", "Tag-in-line", "Team-filled", "Team-in-line", "Test-filled", "Test-in-line", "Thumb-down-in-line", "Thumb-down-filled", "Thumb-up-in-line", "Thumb-up-filled", "Timer-filled", "Timer-in-line", "Trophy-filled", "Trophy-in-line", "Type-filled", "Type-in-line", "Unarchive-filled", "Unarchive-in-line", "Unlock-filled", "Unlock-in-line", "Upgrade-filled", "Upgrade-in-line", "Upload-filled", "Upload-in-line", "User-access-filled", "User-access-in-line", "User-add-filled", "User-add-in-line", "User-profile-filled", "User-profile-in-line", "Video-filled", "Video-in-line", "View-filled", "View-in-line", "Volume-filled", "Volume-in-line", "Warning-filled", "Warning-in-line", "Validated-filled", "Validated-in-line", "Verified-badge-filled", "Verified-badge-in-line", "Zoom-in-filled", "Zoom-in-in-line", "Zoom-out-filled", "Zoom-out-in-line", "Analytics-filled", "Analytics-in-line", "Failed-to-load-filled", "Failed-to-load-in-line", "History-filled", "History-in-line", "TestGorilla-filled", "TestGorilla-in-line", "TestGorilla-Pink-filled", "TestGorilla-Pink-in-line", "Pencil-to-gorilla-in-line", "Pencil-to-gorilla-filled", "Switch-tab-in-line", "Switch-tab-filled", "Close-round-in-line", "Close-round-filled"];
|
|
2
|
+
export declare const tgoRebrandIcons: readonly ["Device-rotate-in-line", "Archive-filled", "Archive-in-line", "Add-in-line", "Add-filled", "Arrow-chevron-down-filled", "Arrow-chevron-down-in-line", "Arrow-chevron-left-filled", "Arrow-chevron-left-in-line", "Arrow-chevron-right-filled", "Arrow-chevron-right-in-line", "Arrow-chevron-up-filled", "Arrow-chevron-up-in-line", "Arrow-down-filled", "Arrow-down-in-line", "Arrow-up-filled", "Arrow-up-in-line", "Assessment-filled", "Assessment-in-line", "Attach-filled", "Attach-in-line", "Attempts-filled", "Attempts-in-line", "Book-filled", "Book-in-line", "Bookmark-filled", "Bookmark-in-line", "Calendar-filled", "Calendar-in-line", "Candidates-filled", "Candidates-in-line", "Chat-filled", "Chat-in-line", "Check-filled", "Check-in-line", "Check-small-in-line", "Check-small-filled", "Check-round-filled", "Check-round-in-line", "Circle-filled", "Circle-in-line", "Clone-filled", "Clone-in-line", "Close-filled", "Close-in-line", "Code-filled", "Code-in-line", "Company-filled", "Company-in-line", "Copy-filled", "Copy-in-line", "Credit-filled", "Credit-in-line", "Credit-card-filled", "Credit-card-in-line", "Delete-filled", "Delete-in-line", "Devices-filled", "Devices-in-line", "Document-filled", "Document-in-line", "Dot-filled", "Dot-in-line", "Download-filled", "Download-in-line", "Edit-filled", "Edit-in-line", "Edit-text-filled", "Edit-text-in-line", "Employee-filled", "Employee-in-line", "Error-filled", "Error-in-line", "Essay-filled", "Essay-in-line", "Experience-filled", "Experience-in-line", "Facebook-filled", "Facebook-in-line", "Fast-forward-filled", "Fast-forward-in-line", "Fast-rewind-filled", "Fast-rewind-in-line", "Filter-filled", "Filter-in-line", "Fire-filled", "Fire-in-line", "Flag-filled", "Flag-in-line", "Folder-filled", "Folder-in-line", "Full-screen-filled", "Full-screen-in-line", "Gender-male-filled", "Gender-male-in-line", "Gender-female-filled", "Gender-female-in-line", "Gift-filled", "Gift-in-line", "Google-filled", "Google-in-line", "Grab-filled", "Grab-in-line", "Help-filled", "Help-in-line", "Hide-filled", "Hide-in-line", "Image-filled", "Image-in-line", "Info-filled", "Info-in-line", "Instagram-filled", "Instagram-in-line", "Integration-filled", "Integration-in-line", "Invite-filled", "Invite-in-line", "ID-verified-filled", "ID-verified-in-line", "ID-not-verified-filled", "ID-not-verified-in-line", "ID-failed-filled", "ID-failed-in-line", "Language-filled", "Language-in-line", "Layout-filled", "Layout-in-line", "Learn-filled", "Learn-in-line", "Level-filled", "Level-in-line", "Light-bulb-filled", "Light-bulb-in-line", "Link-filled", "Link-in-line", "Linkedin-filled", "Linkedin-in-line", "Localization-filled", "Localization-in-line", "Location-filled", "Location-in-line", "Lock-filled", "Lock-in-line", "Logout-filled", "Logout-in-line", "Medal-filled", "Medal-in-line", "Menu-burger-filled", "Menu-burger-in-line", "Menu-close-filled", "Menu-close-in-line", "Menu-ellipsis-filled", "Menu-ellipsis-in-line", "Menu-open-filled", "Menu-open-in-line", "Mic-filled", "Mic-in-line", "Microsoft-filled", "Microsoft-in-line", "Minimize-filled", "Minimize-in-line", "Minus-filled", "Minus-in-line", "Mouse-filled", "Mouse-in-line", "Multi-choice-filled", "Multi-choice-in-line", "Notification-bell-filled", "Notification-bell-in-line", "Open-lock-filled", "Open-lock-in-line", "Open-in-new-filled", "Open-in-new-in-line", "Password-filled", "Password-in-line", "Path-filled", "Path-in-line", "Pause-filled", "Pause-in-line", "Pin-marker-filled", "Pin-marker-in-line", "Plan-billing-filled", "Plan-billing-in-line", "Play-filled", "Play-in-line", "Plus-filled", "Plus-in-line", "Premium-filled", "Premium-in-line", "Premium-circle-in-line", "Question-count-filled", "Question-count-in-line", "Question-filled", "Question-in-line", "Record-filled", "Record-in-line", "Reject-filled", "Refer-in-line", "Refer-filled", "Reject-in-line", "Reset-filled", "Reset-in-line", "Review-emoji-1-filled", "Review-emoji-1-in-line", "Review-emoji-2-filled", "Review-emoji-2-in-line", "Review-emoji-3-filled", "Review-emoji-3-in-line", "Review-emoji-4-filled", "Review-emoji-4-in-line", "Review-emoji-5-filled", "Review-emoji-5-in-line", "Review-filled", "Review-half-star-filled", "Review-half-star-in-line", "Review-in-line", "Review-star-filled", "Review-star-in-line", "Search-filled", "Search-in-line", "Secure-filled", "Secure-in-line", "Send-filled", "Send-in-line", "Settings-filled", "Settings-in-line", "Share-filled", "Share-in-line", "Skip-next-filled", "Skip-next-in-line", "Skip-previous-filled", "Skip-previous-in-line", "Sparkle-filled", "Sparkle-in-line", "Speedometer-filled", "Speedometer-in-line", "Star-filled", "Star-in-line", "Stop-filled", "Stop-in-line", "Switch-filled", "Switch-in-line", "Sync-filled", "Sync-in-line", "Tag-filled", "Tag-in-line", "Team-filled", "Team-in-line", "Test-filled", "Test-in-line", "Thumb-down-in-line", "Thumb-down-filled", "Thumb-up-in-line", "Thumb-up-filled", "Timer-filled", "Timer-in-line", "Trophy-filled", "Trophy-in-line", "Type-filled", "Type-in-line", "Unarchive-filled", "Unarchive-in-line", "Unlock-filled", "Unlock-in-line", "Upgrade-filled", "Upgrade-in-line", "Upload-filled", "Upload-in-line", "User-access-filled", "User-access-in-line", "User-add-filled", "User-add-in-line", "User-profile-filled", "User-profile-in-line", "Video-filled", "Video-in-line", "View-filled", "View-in-line", "Volume-filled", "Volume-in-line", "Warning-filled", "Warning-in-line", "Validated-filled", "Validated-in-line", "Verified-badge-filled", "Verified-badge-in-line", "Zoom-in-filled", "Zoom-in-in-line", "Zoom-out-filled", "Zoom-out-in-line", "Analytics-filled", "Analytics-in-line", "Failed-to-load-filled", "Failed-to-load-in-line", "History-filled", "History-in-line", "TestGorilla-filled", "TestGorilla-in-line", "TestGorilla-Pink-filled", "TestGorilla-Pink-in-line", "Pencil-to-gorilla-in-line", "Pencil-to-gorilla-filled", "Switch-tab-in-line", "Switch-tab-filled", "Close-round-in-line", "Close-round-filled"];
|
|
3
3
|
export declare const groupedIcons: {
|
|
4
4
|
directional: string[];
|
|
5
5
|
assessment: string[];
|
|
@@ -109,14 +109,14 @@ export declare class InlineFieldComponent implements OnInit, ControlValueAccesso
|
|
|
109
109
|
state: import("@angular/core").Signal<InlineFieldState>;
|
|
110
110
|
saveButtonConfig: import("@angular/core").Signal<{
|
|
111
111
|
label: string;
|
|
112
|
-
iconName: "Device-rotate-in-line" | "Archive-filled" | "Archive-in-line" | "Add-in-line" | "Add-filled" | "Arrow-chevron-down-filled" | "Arrow-chevron-down-in-line" | "Arrow-chevron-left-filled" | "Arrow-chevron-left-in-line" | "Arrow-chevron-right-filled" | "Arrow-chevron-right-in-line" | "Arrow-chevron-up-filled" | "Arrow-chevron-up-in-line" | "Arrow-down-filled" | "Arrow-down-in-line" | "Arrow-up-filled" | "Arrow-up-in-line" | "Assessment-filled" | "Assessment-in-line" | "Attach-filled" | "Attach-in-line" | "Attempts-filled" | "Attempts-in-line" | "Book-filled" | "Book-in-line" | "Calendar-filled" | "Calendar-in-line" | "Candidates-filled" | "Candidates-in-line" | "Chat-filled" | "Chat-in-line" | "Check-filled" | "Check-in-line" | "Check-small-in-line" | "Check-small-filled" | "Check-round-filled" | "Check-round-in-line" | "Circle-filled" | "Circle-in-line" | "Clone-filled" | "Clone-in-line" | "Close-filled" | "Close-in-line" | "Code-filled" | "Code-in-line" | "Company-filled" | "Company-in-line" | "Copy-filled" | "Copy-in-line" | "Credit-filled" | "Credit-in-line" | "Credit-card-filled" | "Credit-card-in-line" | "Delete-filled" | "Delete-in-line" | "Devices-filled" | "Devices-in-line" | "Document-filled" | "Document-in-line" | "Dot-filled" | "Dot-in-line" | "Download-filled" | "Download-in-line" | "Edit-filled" | "Edit-in-line" | "Edit-text-filled" | "Edit-text-in-line" | "Employee-filled" | "Employee-in-line" | "Error-filled" | "Error-in-line" | "Essay-filled" | "Essay-in-line" | "Experience-filled" | "Experience-in-line" | "Facebook-filled" | "Facebook-in-line" | "Fast-forward-filled" | "Fast-forward-in-line" | "Fast-rewind-filled" | "Fast-rewind-in-line" | "Filter-filled" | "Filter-in-line" | "Fire-filled" | "Fire-in-line" | "Flag-filled" | "Flag-in-line" | "Folder-filled" | "Folder-in-line" | "Full-screen-filled" | "Full-screen-in-line" | "Gender-male-filled" | "Gender-male-in-line" | "Gender-female-filled" | "Gender-female-in-line" | "Gift-filled" | "Gift-in-line" | "Google-filled" | "Google-in-line" | "Grab-filled" | "Grab-in-line" | "Help-filled" | "Help-in-line" | "Hide-filled" | "Hide-in-line" | "Image-filled" | "Image-in-line" | "Info-filled" | "Info-in-line" | "Instagram-filled" | "Instagram-in-line" | "Integration-filled" | "Integration-in-line" | "Invite-filled" | "Invite-in-line" | "ID-verified-filled" | "ID-verified-in-line" | "ID-not-verified-filled" | "ID-not-verified-in-line" | "ID-failed-filled" | "ID-failed-in-line" | "Language-filled" | "Language-in-line" | "Layout-filled" | "Layout-in-line" | "Learn-filled" | "Learn-in-line" | "Level-filled" | "Level-in-line" | "Light-bulb-filled" | "Light-bulb-in-line" | "Link-filled" | "Link-in-line" | "Linkedin-filled" | "Linkedin-in-line" | "Localization-filled" | "Localization-in-line" | "Location-filled" | "Location-in-line" | "Lock-filled" | "Lock-in-line" | "Logout-filled" | "Logout-in-line" | "Medal-filled" | "Medal-in-line" | "Menu-burger-filled" | "Menu-burger-in-line" | "Menu-close-filled" | "Menu-close-in-line" | "Menu-ellipsis-filled" | "Menu-ellipsis-in-line" | "Menu-open-filled" | "Menu-open-in-line" | "Mic-filled" | "Mic-in-line" | "Microsoft-filled" | "Microsoft-in-line" | "Minimize-filled" | "Minimize-in-line" | "Minus-filled" | "Minus-in-line" | "Mouse-filled" | "Mouse-in-line" | "Multi-choice-filled" | "Multi-choice-in-line" | "Notification-bell-filled" | "Notification-bell-in-line" | "Open-lock-filled" | "Open-lock-in-line" | "Open-in-new-filled" | "Open-in-new-in-line" | "Password-filled" | "Password-in-line" | "Path-filled" | "Path-in-line" | "Pause-filled" | "Pause-in-line" | "Pin-marker-filled" | "Pin-marker-in-line" | "Plan-billing-filled" | "Plan-billing-in-line" | "Play-filled" | "Play-in-line" | "Plus-filled" | "Plus-in-line" | "Premium-filled" | "Premium-in-line" | "Premium-circle-in-line" | "Question-count-filled" | "Question-count-in-line" | "Question-filled" | "Question-in-line" | "Record-filled" | "Record-in-line" | "Reject-filled" | "Refer-in-line" | "Refer-filled" | "Reject-in-line" | "Reset-filled" | "Reset-in-line" | "Review-emoji-1-filled" | "Review-emoji-1-in-line" | "Review-emoji-2-filled" | "Review-emoji-2-in-line" | "Review-emoji-3-filled" | "Review-emoji-3-in-line" | "Review-emoji-4-filled" | "Review-emoji-4-in-line" | "Review-emoji-5-filled" | "Review-emoji-5-in-line" | "Review-filled" | "Review-half-star-filled" | "Review-half-star-in-line" | "Review-in-line" | "Review-star-filled" | "Review-star-in-line" | "Search-filled" | "Search-in-line" | "Secure-filled" | "Secure-in-line" | "Send-filled" | "Send-in-line" | "Settings-filled" | "Settings-in-line" | "Share-filled" | "Share-in-line" | "Skip-next-filled" | "Skip-next-in-line" | "Skip-previous-filled" | "Skip-previous-in-line" | "Sparkle-filled" | "Sparkle-in-line" | "Speedometer-filled" | "Speedometer-in-line" | "Star-filled" | "Star-in-line" | "Stop-filled" | "Stop-in-line" | "Switch-filled" | "Switch-in-line" | "Sync-filled" | "Sync-in-line" | "Tag-filled" | "Tag-in-line" | "Team-filled" | "Team-in-line" | "Test-filled" | "Test-in-line" | "Thumb-down-in-line" | "Thumb-down-filled" | "Thumb-up-in-line" | "Thumb-up-filled" | "Timer-filled" | "Timer-in-line" | "Trophy-filled" | "Trophy-in-line" | "Type-filled" | "Type-in-line" | "Unarchive-filled" | "Unarchive-in-line" | "Unlock-filled" | "Unlock-in-line" | "Upgrade-filled" | "Upgrade-in-line" | "Upload-filled" | "Upload-in-line" | "User-access-filled" | "User-access-in-line" | "User-add-filled" | "User-add-in-line" | "User-profile-filled" | "User-profile-in-line" | "Video-filled" | "Video-in-line" | "View-filled" | "View-in-line" | "Volume-filled" | "Volume-in-line" | "Warning-filled" | "Warning-in-line" | "Validated-filled" | "Validated-in-line" | "Verified-badge-filled" | "Verified-badge-in-line" | "Zoom-in-filled" | "Zoom-in-in-line" | "Zoom-out-filled" | "Zoom-out-in-line" | "Analytics-filled" | "Analytics-in-line" | "Failed-to-load-filled" | "Failed-to-load-in-line" | "History-filled" | "History-in-line" | "TestGorilla-filled" | "TestGorilla-in-line" | "TestGorilla-Pink-filled" | "TestGorilla-Pink-in-line" | "Pencil-to-gorilla-in-line" | "Pencil-to-gorilla-filled" | "Switch-tab-in-line" | "Switch-tab-filled" | "Close-round-in-line" | "Close-round-filled" | "Add" | "Archive" | "Arrow_down" | "Arrow_left" | "Arrow_right" | "Arrow_up" | "Assessment" | "Attempts" | "Book" | "Calendar" | "Candidates" | "Chat-notifications" | "Chat" | "Check" | "Clone" | "Close" | "Code" | "Company" | "Copy" | "Custom-questions" | "Delete" | "Devices" | "Document" | "Dot" | "Download" | "Edit" | "Email-message" | "Empty-placeholder" | "Error" | "Essay" | "Eye-hide" | "Eye-view" | "Feedback-1" | "Feedback-2" | "Feedback-3" | "Feedback-4" | "Feedback-5" | "File-attach" | "File-upload" | "Filter" | "Flag" | "Folder" | "Format-add-file" | "Format-add-table" | "Format-align-L" | "Format-align-R" | "Format-align-center" | "Format-align-justify" | "Format-bold" | "Format-code-active" | "Format-code-block" | "Format-edit-table" | "Format-format" | "Format-function" | "Format-italics" | "Format-list-bulleted" | "Format-list-numbered" | "Format-picker" | "Format-quote" | "Format-subscript" | "Format-superscript" | "Format-text-direction-L" | "Format-text-direction-R" | "Format-text-size" | "Format-underline" | "Format-variable" | "Full-screen" | "Gender-female" | "Gender-male" | "Help-2" | "Help" | "Image" | "Info" | "Integration" | "Language" | "Layout" | "Learn" | "Level" | "Light-bulb" | "Link" | "Loading-spinner" | "Localisation" | "Location" | "Lock" | "Log-out" | "Menu-burger" | "Menu-close" | "Menu-ellipsis" | "Menu-open" | "Microphone" | "Microsoft" | "Minus" | "Mouse-cursor" | "Mouse-grab-cursor" | "Mouse" | "Multi-choice" | "Notifications" | "Password" | "Path" | "Pin-marker" | "Plan-billing" | "Plus" | "Premium" | "Promotion" | "Question-count" | "Refer" | "Reset" | "Review" | "Round-check-filled" | "Round-check" | "Search" | "Secure-checkout" | "Send" | "Settings" | "Social-facebook" | "Social-instagram" | "Social-linkedin" | "Sorting-down-1" | "Sorting-down" | "Speedometer" | "Star-half" | "Star-outline" | "Support" | "Sync" | "Team" | "Test" | "Thunder" | "Timer" | "Trophy" | "Type" | "Unarchive" | "Unlock" | "Upgrade" | "Upload" | "User-access" | "User-add" | "User-invite" | "User-profile" | "User-reject" | "User-switch" | "Video-pause" | "Video-play" | "Video-record" | "Video" | "Volume" | "Warning" | "Zoom-in" | "Zoom-out" | "Fire" | "Gift" | "Grab" | "Share" | "Sparkles" | "Video-stop" | "Minimize" | "Employee" | "Money-bag" | "Suitcase" | "Google" | "Fast-forward" | "Fast-rewind" | "Skip-next" | "Skip-previous" | "TestGorilla" | "Switch-tab";
|
|
112
|
+
iconName: "Device-rotate-in-line" | "Archive-filled" | "Archive-in-line" | "Add-in-line" | "Add-filled" | "Arrow-chevron-down-filled" | "Arrow-chevron-down-in-line" | "Arrow-chevron-left-filled" | "Arrow-chevron-left-in-line" | "Arrow-chevron-right-filled" | "Arrow-chevron-right-in-line" | "Arrow-chevron-up-filled" | "Arrow-chevron-up-in-line" | "Arrow-down-filled" | "Arrow-down-in-line" | "Arrow-up-filled" | "Arrow-up-in-line" | "Assessment-filled" | "Assessment-in-line" | "Attach-filled" | "Attach-in-line" | "Attempts-filled" | "Attempts-in-line" | "Book-filled" | "Book-in-line" | "Bookmark-filled" | "Bookmark-in-line" | "Calendar-filled" | "Calendar-in-line" | "Candidates-filled" | "Candidates-in-line" | "Chat-filled" | "Chat-in-line" | "Check-filled" | "Check-in-line" | "Check-small-in-line" | "Check-small-filled" | "Check-round-filled" | "Check-round-in-line" | "Circle-filled" | "Circle-in-line" | "Clone-filled" | "Clone-in-line" | "Close-filled" | "Close-in-line" | "Code-filled" | "Code-in-line" | "Company-filled" | "Company-in-line" | "Copy-filled" | "Copy-in-line" | "Credit-filled" | "Credit-in-line" | "Credit-card-filled" | "Credit-card-in-line" | "Delete-filled" | "Delete-in-line" | "Devices-filled" | "Devices-in-line" | "Document-filled" | "Document-in-line" | "Dot-filled" | "Dot-in-line" | "Download-filled" | "Download-in-line" | "Edit-filled" | "Edit-in-line" | "Edit-text-filled" | "Edit-text-in-line" | "Employee-filled" | "Employee-in-line" | "Error-filled" | "Error-in-line" | "Essay-filled" | "Essay-in-line" | "Experience-filled" | "Experience-in-line" | "Facebook-filled" | "Facebook-in-line" | "Fast-forward-filled" | "Fast-forward-in-line" | "Fast-rewind-filled" | "Fast-rewind-in-line" | "Filter-filled" | "Filter-in-line" | "Fire-filled" | "Fire-in-line" | "Flag-filled" | "Flag-in-line" | "Folder-filled" | "Folder-in-line" | "Full-screen-filled" | "Full-screen-in-line" | "Gender-male-filled" | "Gender-male-in-line" | "Gender-female-filled" | "Gender-female-in-line" | "Gift-filled" | "Gift-in-line" | "Google-filled" | "Google-in-line" | "Grab-filled" | "Grab-in-line" | "Help-filled" | "Help-in-line" | "Hide-filled" | "Hide-in-line" | "Image-filled" | "Image-in-line" | "Info-filled" | "Info-in-line" | "Instagram-filled" | "Instagram-in-line" | "Integration-filled" | "Integration-in-line" | "Invite-filled" | "Invite-in-line" | "ID-verified-filled" | "ID-verified-in-line" | "ID-not-verified-filled" | "ID-not-verified-in-line" | "ID-failed-filled" | "ID-failed-in-line" | "Language-filled" | "Language-in-line" | "Layout-filled" | "Layout-in-line" | "Learn-filled" | "Learn-in-line" | "Level-filled" | "Level-in-line" | "Light-bulb-filled" | "Light-bulb-in-line" | "Link-filled" | "Link-in-line" | "Linkedin-filled" | "Linkedin-in-line" | "Localization-filled" | "Localization-in-line" | "Location-filled" | "Location-in-line" | "Lock-filled" | "Lock-in-line" | "Logout-filled" | "Logout-in-line" | "Medal-filled" | "Medal-in-line" | "Menu-burger-filled" | "Menu-burger-in-line" | "Menu-close-filled" | "Menu-close-in-line" | "Menu-ellipsis-filled" | "Menu-ellipsis-in-line" | "Menu-open-filled" | "Menu-open-in-line" | "Mic-filled" | "Mic-in-line" | "Microsoft-filled" | "Microsoft-in-line" | "Minimize-filled" | "Minimize-in-line" | "Minus-filled" | "Minus-in-line" | "Mouse-filled" | "Mouse-in-line" | "Multi-choice-filled" | "Multi-choice-in-line" | "Notification-bell-filled" | "Notification-bell-in-line" | "Open-lock-filled" | "Open-lock-in-line" | "Open-in-new-filled" | "Open-in-new-in-line" | "Password-filled" | "Password-in-line" | "Path-filled" | "Path-in-line" | "Pause-filled" | "Pause-in-line" | "Pin-marker-filled" | "Pin-marker-in-line" | "Plan-billing-filled" | "Plan-billing-in-line" | "Play-filled" | "Play-in-line" | "Plus-filled" | "Plus-in-line" | "Premium-filled" | "Premium-in-line" | "Premium-circle-in-line" | "Question-count-filled" | "Question-count-in-line" | "Question-filled" | "Question-in-line" | "Record-filled" | "Record-in-line" | "Reject-filled" | "Refer-in-line" | "Refer-filled" | "Reject-in-line" | "Reset-filled" | "Reset-in-line" | "Review-emoji-1-filled" | "Review-emoji-1-in-line" | "Review-emoji-2-filled" | "Review-emoji-2-in-line" | "Review-emoji-3-filled" | "Review-emoji-3-in-line" | "Review-emoji-4-filled" | "Review-emoji-4-in-line" | "Review-emoji-5-filled" | "Review-emoji-5-in-line" | "Review-filled" | "Review-half-star-filled" | "Review-half-star-in-line" | "Review-in-line" | "Review-star-filled" | "Review-star-in-line" | "Search-filled" | "Search-in-line" | "Secure-filled" | "Secure-in-line" | "Send-filled" | "Send-in-line" | "Settings-filled" | "Settings-in-line" | "Share-filled" | "Share-in-line" | "Skip-next-filled" | "Skip-next-in-line" | "Skip-previous-filled" | "Skip-previous-in-line" | "Sparkle-filled" | "Sparkle-in-line" | "Speedometer-filled" | "Speedometer-in-line" | "Star-filled" | "Star-in-line" | "Stop-filled" | "Stop-in-line" | "Switch-filled" | "Switch-in-line" | "Sync-filled" | "Sync-in-line" | "Tag-filled" | "Tag-in-line" | "Team-filled" | "Team-in-line" | "Test-filled" | "Test-in-line" | "Thumb-down-in-line" | "Thumb-down-filled" | "Thumb-up-in-line" | "Thumb-up-filled" | "Timer-filled" | "Timer-in-line" | "Trophy-filled" | "Trophy-in-line" | "Type-filled" | "Type-in-line" | "Unarchive-filled" | "Unarchive-in-line" | "Unlock-filled" | "Unlock-in-line" | "Upgrade-filled" | "Upgrade-in-line" | "Upload-filled" | "Upload-in-line" | "User-access-filled" | "User-access-in-line" | "User-add-filled" | "User-add-in-line" | "User-profile-filled" | "User-profile-in-line" | "Video-filled" | "Video-in-line" | "View-filled" | "View-in-line" | "Volume-filled" | "Volume-in-line" | "Warning-filled" | "Warning-in-line" | "Validated-filled" | "Validated-in-line" | "Verified-badge-filled" | "Verified-badge-in-line" | "Zoom-in-filled" | "Zoom-in-in-line" | "Zoom-out-filled" | "Zoom-out-in-line" | "Analytics-filled" | "Analytics-in-line" | "Failed-to-load-filled" | "Failed-to-load-in-line" | "History-filled" | "History-in-line" | "TestGorilla-filled" | "TestGorilla-in-line" | "TestGorilla-Pink-filled" | "TestGorilla-Pink-in-line" | "Pencil-to-gorilla-in-line" | "Pencil-to-gorilla-filled" | "Switch-tab-in-line" | "Switch-tab-filled" | "Close-round-in-line" | "Close-round-filled" | "Add" | "Archive" | "Arrow_down" | "Arrow_left" | "Arrow_right" | "Arrow_up" | "Assessment" | "Attempts" | "Book" | "Calendar" | "Candidates" | "Chat-notifications" | "Chat" | "Check" | "Clone" | "Close" | "Code" | "Company" | "Copy" | "Custom-questions" | "Delete" | "Devices" | "Document" | "Dot" | "Download" | "Edit" | "Email-message" | "Empty-placeholder" | "Error" | "Essay" | "Eye-hide" | "Eye-view" | "Feedback-1" | "Feedback-2" | "Feedback-3" | "Feedback-4" | "Feedback-5" | "File-attach" | "File-upload" | "Filter" | "Flag" | "Folder" | "Format-add-file" | "Format-add-table" | "Format-align-L" | "Format-align-R" | "Format-align-center" | "Format-align-justify" | "Format-bold" | "Format-code-active" | "Format-code-block" | "Format-edit-table" | "Format-format" | "Format-function" | "Format-italics" | "Format-list-bulleted" | "Format-list-numbered" | "Format-picker" | "Format-quote" | "Format-subscript" | "Format-superscript" | "Format-text-direction-L" | "Format-text-direction-R" | "Format-text-size" | "Format-underline" | "Format-variable" | "Full-screen" | "Gender-female" | "Gender-male" | "Help-2" | "Help" | "Image" | "Info" | "Integration" | "Language" | "Layout" | "Learn" | "Level" | "Light-bulb" | "Link" | "Loading-spinner" | "Localisation" | "Location" | "Lock" | "Log-out" | "Menu-burger" | "Menu-close" | "Menu-ellipsis" | "Menu-open" | "Microphone" | "Microsoft" | "Minus" | "Mouse-cursor" | "Mouse-grab-cursor" | "Mouse" | "Multi-choice" | "Notifications" | "Password" | "Path" | "Pin-marker" | "Plan-billing" | "Plus" | "Premium" | "Promotion" | "Question-count" | "Refer" | "Reset" | "Review" | "Round-check-filled" | "Round-check" | "Search" | "Secure-checkout" | "Send" | "Settings" | "Social-facebook" | "Social-instagram" | "Social-linkedin" | "Sorting-down-1" | "Sorting-down" | "Speedometer" | "Star-half" | "Star-outline" | "Support" | "Sync" | "Team" | "Test" | "Thunder" | "Timer" | "Trophy" | "Type" | "Unarchive" | "Unlock" | "Upgrade" | "Upload" | "User-access" | "User-add" | "User-invite" | "User-profile" | "User-reject" | "User-switch" | "Video-pause" | "Video-play" | "Video-record" | "Video" | "Volume" | "Warning" | "Zoom-in" | "Zoom-out" | "Fire" | "Gift" | "Grab" | "Share" | "Sparkles" | "Video-stop" | "Minimize" | "Employee" | "Money-bag" | "Suitcase" | "Google" | "Fast-forward" | "Fast-rewind" | "Skip-next" | "Skip-previous" | "TestGorilla" | "Switch-tab";
|
|
113
113
|
variant: "secondary-inverted";
|
|
114
114
|
size: "small";
|
|
115
115
|
disabled: boolean;
|
|
116
116
|
}>;
|
|
117
117
|
cancelButtonConfig: import("@angular/core").Signal<{
|
|
118
118
|
label: string;
|
|
119
|
-
iconName: "Device-rotate-in-line" | "Archive-filled" | "Archive-in-line" | "Add-in-line" | "Add-filled" | "Arrow-chevron-down-filled" | "Arrow-chevron-down-in-line" | "Arrow-chevron-left-filled" | "Arrow-chevron-left-in-line" | "Arrow-chevron-right-filled" | "Arrow-chevron-right-in-line" | "Arrow-chevron-up-filled" | "Arrow-chevron-up-in-line" | "Arrow-down-filled" | "Arrow-down-in-line" | "Arrow-up-filled" | "Arrow-up-in-line" | "Assessment-filled" | "Assessment-in-line" | "Attach-filled" | "Attach-in-line" | "Attempts-filled" | "Attempts-in-line" | "Book-filled" | "Book-in-line" | "Calendar-filled" | "Calendar-in-line" | "Candidates-filled" | "Candidates-in-line" | "Chat-filled" | "Chat-in-line" | "Check-filled" | "Check-in-line" | "Check-small-in-line" | "Check-small-filled" | "Check-round-filled" | "Check-round-in-line" | "Circle-filled" | "Circle-in-line" | "Clone-filled" | "Clone-in-line" | "Close-filled" | "Close-in-line" | "Code-filled" | "Code-in-line" | "Company-filled" | "Company-in-line" | "Copy-filled" | "Copy-in-line" | "Credit-filled" | "Credit-in-line" | "Credit-card-filled" | "Credit-card-in-line" | "Delete-filled" | "Delete-in-line" | "Devices-filled" | "Devices-in-line" | "Document-filled" | "Document-in-line" | "Dot-filled" | "Dot-in-line" | "Download-filled" | "Download-in-line" | "Edit-filled" | "Edit-in-line" | "Edit-text-filled" | "Edit-text-in-line" | "Employee-filled" | "Employee-in-line" | "Error-filled" | "Error-in-line" | "Essay-filled" | "Essay-in-line" | "Experience-filled" | "Experience-in-line" | "Facebook-filled" | "Facebook-in-line" | "Fast-forward-filled" | "Fast-forward-in-line" | "Fast-rewind-filled" | "Fast-rewind-in-line" | "Filter-filled" | "Filter-in-line" | "Fire-filled" | "Fire-in-line" | "Flag-filled" | "Flag-in-line" | "Folder-filled" | "Folder-in-line" | "Full-screen-filled" | "Full-screen-in-line" | "Gender-male-filled" | "Gender-male-in-line" | "Gender-female-filled" | "Gender-female-in-line" | "Gift-filled" | "Gift-in-line" | "Google-filled" | "Google-in-line" | "Grab-filled" | "Grab-in-line" | "Help-filled" | "Help-in-line" | "Hide-filled" | "Hide-in-line" | "Image-filled" | "Image-in-line" | "Info-filled" | "Info-in-line" | "Instagram-filled" | "Instagram-in-line" | "Integration-filled" | "Integration-in-line" | "Invite-filled" | "Invite-in-line" | "ID-verified-filled" | "ID-verified-in-line" | "ID-not-verified-filled" | "ID-not-verified-in-line" | "ID-failed-filled" | "ID-failed-in-line" | "Language-filled" | "Language-in-line" | "Layout-filled" | "Layout-in-line" | "Learn-filled" | "Learn-in-line" | "Level-filled" | "Level-in-line" | "Light-bulb-filled" | "Light-bulb-in-line" | "Link-filled" | "Link-in-line" | "Linkedin-filled" | "Linkedin-in-line" | "Localization-filled" | "Localization-in-line" | "Location-filled" | "Location-in-line" | "Lock-filled" | "Lock-in-line" | "Logout-filled" | "Logout-in-line" | "Medal-filled" | "Medal-in-line" | "Menu-burger-filled" | "Menu-burger-in-line" | "Menu-close-filled" | "Menu-close-in-line" | "Menu-ellipsis-filled" | "Menu-ellipsis-in-line" | "Menu-open-filled" | "Menu-open-in-line" | "Mic-filled" | "Mic-in-line" | "Microsoft-filled" | "Microsoft-in-line" | "Minimize-filled" | "Minimize-in-line" | "Minus-filled" | "Minus-in-line" | "Mouse-filled" | "Mouse-in-line" | "Multi-choice-filled" | "Multi-choice-in-line" | "Notification-bell-filled" | "Notification-bell-in-line" | "Open-lock-filled" | "Open-lock-in-line" | "Open-in-new-filled" | "Open-in-new-in-line" | "Password-filled" | "Password-in-line" | "Path-filled" | "Path-in-line" | "Pause-filled" | "Pause-in-line" | "Pin-marker-filled" | "Pin-marker-in-line" | "Plan-billing-filled" | "Plan-billing-in-line" | "Play-filled" | "Play-in-line" | "Plus-filled" | "Plus-in-line" | "Premium-filled" | "Premium-in-line" | "Premium-circle-in-line" | "Question-count-filled" | "Question-count-in-line" | "Question-filled" | "Question-in-line" | "Record-filled" | "Record-in-line" | "Reject-filled" | "Refer-in-line" | "Refer-filled" | "Reject-in-line" | "Reset-filled" | "Reset-in-line" | "Review-emoji-1-filled" | "Review-emoji-1-in-line" | "Review-emoji-2-filled" | "Review-emoji-2-in-line" | "Review-emoji-3-filled" | "Review-emoji-3-in-line" | "Review-emoji-4-filled" | "Review-emoji-4-in-line" | "Review-emoji-5-filled" | "Review-emoji-5-in-line" | "Review-filled" | "Review-half-star-filled" | "Review-half-star-in-line" | "Review-in-line" | "Review-star-filled" | "Review-star-in-line" | "Search-filled" | "Search-in-line" | "Secure-filled" | "Secure-in-line" | "Send-filled" | "Send-in-line" | "Settings-filled" | "Settings-in-line" | "Share-filled" | "Share-in-line" | "Skip-next-filled" | "Skip-next-in-line" | "Skip-previous-filled" | "Skip-previous-in-line" | "Sparkle-filled" | "Sparkle-in-line" | "Speedometer-filled" | "Speedometer-in-line" | "Star-filled" | "Star-in-line" | "Stop-filled" | "Stop-in-line" | "Switch-filled" | "Switch-in-line" | "Sync-filled" | "Sync-in-line" | "Tag-filled" | "Tag-in-line" | "Team-filled" | "Team-in-line" | "Test-filled" | "Test-in-line" | "Thumb-down-in-line" | "Thumb-down-filled" | "Thumb-up-in-line" | "Thumb-up-filled" | "Timer-filled" | "Timer-in-line" | "Trophy-filled" | "Trophy-in-line" | "Type-filled" | "Type-in-line" | "Unarchive-filled" | "Unarchive-in-line" | "Unlock-filled" | "Unlock-in-line" | "Upgrade-filled" | "Upgrade-in-line" | "Upload-filled" | "Upload-in-line" | "User-access-filled" | "User-access-in-line" | "User-add-filled" | "User-add-in-line" | "User-profile-filled" | "User-profile-in-line" | "Video-filled" | "Video-in-line" | "View-filled" | "View-in-line" | "Volume-filled" | "Volume-in-line" | "Warning-filled" | "Warning-in-line" | "Validated-filled" | "Validated-in-line" | "Verified-badge-filled" | "Verified-badge-in-line" | "Zoom-in-filled" | "Zoom-in-in-line" | "Zoom-out-filled" | "Zoom-out-in-line" | "Analytics-filled" | "Analytics-in-line" | "Failed-to-load-filled" | "Failed-to-load-in-line" | "History-filled" | "History-in-line" | "TestGorilla-filled" | "TestGorilla-in-line" | "TestGorilla-Pink-filled" | "TestGorilla-Pink-in-line" | "Pencil-to-gorilla-in-line" | "Pencil-to-gorilla-filled" | "Switch-tab-in-line" | "Switch-tab-filled" | "Close-round-in-line" | "Close-round-filled" | "Add" | "Archive" | "Arrow_down" | "Arrow_left" | "Arrow_right" | "Arrow_up" | "Assessment" | "Attempts" | "Book" | "Calendar" | "Candidates" | "Chat-notifications" | "Chat" | "Check" | "Clone" | "Close" | "Code" | "Company" | "Copy" | "Custom-questions" | "Delete" | "Devices" | "Document" | "Dot" | "Download" | "Edit" | "Email-message" | "Empty-placeholder" | "Error" | "Essay" | "Eye-hide" | "Eye-view" | "Feedback-1" | "Feedback-2" | "Feedback-3" | "Feedback-4" | "Feedback-5" | "File-attach" | "File-upload" | "Filter" | "Flag" | "Folder" | "Format-add-file" | "Format-add-table" | "Format-align-L" | "Format-align-R" | "Format-align-center" | "Format-align-justify" | "Format-bold" | "Format-code-active" | "Format-code-block" | "Format-edit-table" | "Format-format" | "Format-function" | "Format-italics" | "Format-list-bulleted" | "Format-list-numbered" | "Format-picker" | "Format-quote" | "Format-subscript" | "Format-superscript" | "Format-text-direction-L" | "Format-text-direction-R" | "Format-text-size" | "Format-underline" | "Format-variable" | "Full-screen" | "Gender-female" | "Gender-male" | "Help-2" | "Help" | "Image" | "Info" | "Integration" | "Language" | "Layout" | "Learn" | "Level" | "Light-bulb" | "Link" | "Loading-spinner" | "Localisation" | "Location" | "Lock" | "Log-out" | "Menu-burger" | "Menu-close" | "Menu-ellipsis" | "Menu-open" | "Microphone" | "Microsoft" | "Minus" | "Mouse-cursor" | "Mouse-grab-cursor" | "Mouse" | "Multi-choice" | "Notifications" | "Password" | "Path" | "Pin-marker" | "Plan-billing" | "Plus" | "Premium" | "Promotion" | "Question-count" | "Refer" | "Reset" | "Review" | "Round-check-filled" | "Round-check" | "Search" | "Secure-checkout" | "Send" | "Settings" | "Social-facebook" | "Social-instagram" | "Social-linkedin" | "Sorting-down-1" | "Sorting-down" | "Speedometer" | "Star-half" | "Star-outline" | "Support" | "Sync" | "Team" | "Test" | "Thunder" | "Timer" | "Trophy" | "Type" | "Unarchive" | "Unlock" | "Upgrade" | "Upload" | "User-access" | "User-add" | "User-invite" | "User-profile" | "User-reject" | "User-switch" | "Video-pause" | "Video-play" | "Video-record" | "Video" | "Volume" | "Warning" | "Zoom-in" | "Zoom-out" | "Fire" | "Gift" | "Grab" | "Share" | "Sparkles" | "Video-stop" | "Minimize" | "Employee" | "Money-bag" | "Suitcase" | "Google" | "Fast-forward" | "Fast-rewind" | "Skip-next" | "Skip-previous" | "TestGorilla" | "Switch-tab";
|
|
119
|
+
iconName: "Device-rotate-in-line" | "Archive-filled" | "Archive-in-line" | "Add-in-line" | "Add-filled" | "Arrow-chevron-down-filled" | "Arrow-chevron-down-in-line" | "Arrow-chevron-left-filled" | "Arrow-chevron-left-in-line" | "Arrow-chevron-right-filled" | "Arrow-chevron-right-in-line" | "Arrow-chevron-up-filled" | "Arrow-chevron-up-in-line" | "Arrow-down-filled" | "Arrow-down-in-line" | "Arrow-up-filled" | "Arrow-up-in-line" | "Assessment-filled" | "Assessment-in-line" | "Attach-filled" | "Attach-in-line" | "Attempts-filled" | "Attempts-in-line" | "Book-filled" | "Book-in-line" | "Bookmark-filled" | "Bookmark-in-line" | "Calendar-filled" | "Calendar-in-line" | "Candidates-filled" | "Candidates-in-line" | "Chat-filled" | "Chat-in-line" | "Check-filled" | "Check-in-line" | "Check-small-in-line" | "Check-small-filled" | "Check-round-filled" | "Check-round-in-line" | "Circle-filled" | "Circle-in-line" | "Clone-filled" | "Clone-in-line" | "Close-filled" | "Close-in-line" | "Code-filled" | "Code-in-line" | "Company-filled" | "Company-in-line" | "Copy-filled" | "Copy-in-line" | "Credit-filled" | "Credit-in-line" | "Credit-card-filled" | "Credit-card-in-line" | "Delete-filled" | "Delete-in-line" | "Devices-filled" | "Devices-in-line" | "Document-filled" | "Document-in-line" | "Dot-filled" | "Dot-in-line" | "Download-filled" | "Download-in-line" | "Edit-filled" | "Edit-in-line" | "Edit-text-filled" | "Edit-text-in-line" | "Employee-filled" | "Employee-in-line" | "Error-filled" | "Error-in-line" | "Essay-filled" | "Essay-in-line" | "Experience-filled" | "Experience-in-line" | "Facebook-filled" | "Facebook-in-line" | "Fast-forward-filled" | "Fast-forward-in-line" | "Fast-rewind-filled" | "Fast-rewind-in-line" | "Filter-filled" | "Filter-in-line" | "Fire-filled" | "Fire-in-line" | "Flag-filled" | "Flag-in-line" | "Folder-filled" | "Folder-in-line" | "Full-screen-filled" | "Full-screen-in-line" | "Gender-male-filled" | "Gender-male-in-line" | "Gender-female-filled" | "Gender-female-in-line" | "Gift-filled" | "Gift-in-line" | "Google-filled" | "Google-in-line" | "Grab-filled" | "Grab-in-line" | "Help-filled" | "Help-in-line" | "Hide-filled" | "Hide-in-line" | "Image-filled" | "Image-in-line" | "Info-filled" | "Info-in-line" | "Instagram-filled" | "Instagram-in-line" | "Integration-filled" | "Integration-in-line" | "Invite-filled" | "Invite-in-line" | "ID-verified-filled" | "ID-verified-in-line" | "ID-not-verified-filled" | "ID-not-verified-in-line" | "ID-failed-filled" | "ID-failed-in-line" | "Language-filled" | "Language-in-line" | "Layout-filled" | "Layout-in-line" | "Learn-filled" | "Learn-in-line" | "Level-filled" | "Level-in-line" | "Light-bulb-filled" | "Light-bulb-in-line" | "Link-filled" | "Link-in-line" | "Linkedin-filled" | "Linkedin-in-line" | "Localization-filled" | "Localization-in-line" | "Location-filled" | "Location-in-line" | "Lock-filled" | "Lock-in-line" | "Logout-filled" | "Logout-in-line" | "Medal-filled" | "Medal-in-line" | "Menu-burger-filled" | "Menu-burger-in-line" | "Menu-close-filled" | "Menu-close-in-line" | "Menu-ellipsis-filled" | "Menu-ellipsis-in-line" | "Menu-open-filled" | "Menu-open-in-line" | "Mic-filled" | "Mic-in-line" | "Microsoft-filled" | "Microsoft-in-line" | "Minimize-filled" | "Minimize-in-line" | "Minus-filled" | "Minus-in-line" | "Mouse-filled" | "Mouse-in-line" | "Multi-choice-filled" | "Multi-choice-in-line" | "Notification-bell-filled" | "Notification-bell-in-line" | "Open-lock-filled" | "Open-lock-in-line" | "Open-in-new-filled" | "Open-in-new-in-line" | "Password-filled" | "Password-in-line" | "Path-filled" | "Path-in-line" | "Pause-filled" | "Pause-in-line" | "Pin-marker-filled" | "Pin-marker-in-line" | "Plan-billing-filled" | "Plan-billing-in-line" | "Play-filled" | "Play-in-line" | "Plus-filled" | "Plus-in-line" | "Premium-filled" | "Premium-in-line" | "Premium-circle-in-line" | "Question-count-filled" | "Question-count-in-line" | "Question-filled" | "Question-in-line" | "Record-filled" | "Record-in-line" | "Reject-filled" | "Refer-in-line" | "Refer-filled" | "Reject-in-line" | "Reset-filled" | "Reset-in-line" | "Review-emoji-1-filled" | "Review-emoji-1-in-line" | "Review-emoji-2-filled" | "Review-emoji-2-in-line" | "Review-emoji-3-filled" | "Review-emoji-3-in-line" | "Review-emoji-4-filled" | "Review-emoji-4-in-line" | "Review-emoji-5-filled" | "Review-emoji-5-in-line" | "Review-filled" | "Review-half-star-filled" | "Review-half-star-in-line" | "Review-in-line" | "Review-star-filled" | "Review-star-in-line" | "Search-filled" | "Search-in-line" | "Secure-filled" | "Secure-in-line" | "Send-filled" | "Send-in-line" | "Settings-filled" | "Settings-in-line" | "Share-filled" | "Share-in-line" | "Skip-next-filled" | "Skip-next-in-line" | "Skip-previous-filled" | "Skip-previous-in-line" | "Sparkle-filled" | "Sparkle-in-line" | "Speedometer-filled" | "Speedometer-in-line" | "Star-filled" | "Star-in-line" | "Stop-filled" | "Stop-in-line" | "Switch-filled" | "Switch-in-line" | "Sync-filled" | "Sync-in-line" | "Tag-filled" | "Tag-in-line" | "Team-filled" | "Team-in-line" | "Test-filled" | "Test-in-line" | "Thumb-down-in-line" | "Thumb-down-filled" | "Thumb-up-in-line" | "Thumb-up-filled" | "Timer-filled" | "Timer-in-line" | "Trophy-filled" | "Trophy-in-line" | "Type-filled" | "Type-in-line" | "Unarchive-filled" | "Unarchive-in-line" | "Unlock-filled" | "Unlock-in-line" | "Upgrade-filled" | "Upgrade-in-line" | "Upload-filled" | "Upload-in-line" | "User-access-filled" | "User-access-in-line" | "User-add-filled" | "User-add-in-line" | "User-profile-filled" | "User-profile-in-line" | "Video-filled" | "Video-in-line" | "View-filled" | "View-in-line" | "Volume-filled" | "Volume-in-line" | "Warning-filled" | "Warning-in-line" | "Validated-filled" | "Validated-in-line" | "Verified-badge-filled" | "Verified-badge-in-line" | "Zoom-in-filled" | "Zoom-in-in-line" | "Zoom-out-filled" | "Zoom-out-in-line" | "Analytics-filled" | "Analytics-in-line" | "Failed-to-load-filled" | "Failed-to-load-in-line" | "History-filled" | "History-in-line" | "TestGorilla-filled" | "TestGorilla-in-line" | "TestGorilla-Pink-filled" | "TestGorilla-Pink-in-line" | "Pencil-to-gorilla-in-line" | "Pencil-to-gorilla-filled" | "Switch-tab-in-line" | "Switch-tab-filled" | "Close-round-in-line" | "Close-round-filled" | "Add" | "Archive" | "Arrow_down" | "Arrow_left" | "Arrow_right" | "Arrow_up" | "Assessment" | "Attempts" | "Book" | "Calendar" | "Candidates" | "Chat-notifications" | "Chat" | "Check" | "Clone" | "Close" | "Code" | "Company" | "Copy" | "Custom-questions" | "Delete" | "Devices" | "Document" | "Dot" | "Download" | "Edit" | "Email-message" | "Empty-placeholder" | "Error" | "Essay" | "Eye-hide" | "Eye-view" | "Feedback-1" | "Feedback-2" | "Feedback-3" | "Feedback-4" | "Feedback-5" | "File-attach" | "File-upload" | "Filter" | "Flag" | "Folder" | "Format-add-file" | "Format-add-table" | "Format-align-L" | "Format-align-R" | "Format-align-center" | "Format-align-justify" | "Format-bold" | "Format-code-active" | "Format-code-block" | "Format-edit-table" | "Format-format" | "Format-function" | "Format-italics" | "Format-list-bulleted" | "Format-list-numbered" | "Format-picker" | "Format-quote" | "Format-subscript" | "Format-superscript" | "Format-text-direction-L" | "Format-text-direction-R" | "Format-text-size" | "Format-underline" | "Format-variable" | "Full-screen" | "Gender-female" | "Gender-male" | "Help-2" | "Help" | "Image" | "Info" | "Integration" | "Language" | "Layout" | "Learn" | "Level" | "Light-bulb" | "Link" | "Loading-spinner" | "Localisation" | "Location" | "Lock" | "Log-out" | "Menu-burger" | "Menu-close" | "Menu-ellipsis" | "Menu-open" | "Microphone" | "Microsoft" | "Minus" | "Mouse-cursor" | "Mouse-grab-cursor" | "Mouse" | "Multi-choice" | "Notifications" | "Password" | "Path" | "Pin-marker" | "Plan-billing" | "Plus" | "Premium" | "Promotion" | "Question-count" | "Refer" | "Reset" | "Review" | "Round-check-filled" | "Round-check" | "Search" | "Secure-checkout" | "Send" | "Settings" | "Social-facebook" | "Social-instagram" | "Social-linkedin" | "Sorting-down-1" | "Sorting-down" | "Speedometer" | "Star-half" | "Star-outline" | "Support" | "Sync" | "Team" | "Test" | "Thunder" | "Timer" | "Trophy" | "Type" | "Unarchive" | "Unlock" | "Upgrade" | "Upload" | "User-access" | "User-add" | "User-invite" | "User-profile" | "User-reject" | "User-switch" | "Video-pause" | "Video-play" | "Video-record" | "Video" | "Volume" | "Warning" | "Zoom-in" | "Zoom-out" | "Fire" | "Gift" | "Grab" | "Share" | "Sparkles" | "Video-stop" | "Minimize" | "Employee" | "Money-bag" | "Suitcase" | "Google" | "Fast-forward" | "Fast-rewind" | "Skip-next" | "Skip-previous" | "TestGorilla" | "Switch-tab";
|
|
120
120
|
variant: "secondary-inverted";
|
|
121
121
|
size: "small";
|
|
122
122
|
disabled: boolean;
|
|
@@ -187,6 +187,8 @@ class AiAudioCircleComponent {
|
|
|
187
187
|
this.animationFrameId = requestAnimationFrame(analyze);
|
|
188
188
|
}
|
|
189
189
|
startAnimations() {
|
|
190
|
+
this.animatePulse = this.animatePulse.bind(this);
|
|
191
|
+
this.mainLoop = this.mainLoop.bind(this);
|
|
190
192
|
this.animatePulse();
|
|
191
193
|
this.mainLoop();
|
|
192
194
|
}
|
|
@@ -345,7 +347,6 @@ class AiAudioCircleComponent {
|
|
|
345
347
|
ctx.restore();
|
|
346
348
|
this.pulseAnimationId = requestAnimationFrame(this.animatePulse);
|
|
347
349
|
}
|
|
348
|
-
;
|
|
349
350
|
hexToRgb(hex) {
|
|
350
351
|
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
|
351
352
|
if (!result) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testgorilla-tgo-ui-components-ai-audio-circle.mjs","sources":["../../../components/ai-audio-circle/ai-audio-circle.component.ts","../../../components/ai-audio-circle/ai-audio-circle.component.html","../../../components/ai-audio-circle/ai-audio-circle.module.ts","../../../components/ai-audio-circle/testgorilla-tgo-ui-components-ai-audio-circle.ts"],"sourcesContent":["import {\n Component,\n input,\n model,\n OnDestroy,\n ChangeDetectionStrategy,\n WritableSignal,\n signal,\n ElementRef,\n ViewChild,\n AfterViewInit,\n effect,\n computed,\n} from '@angular/core';\nimport { Color } from '@testgorilla/tgo-ui/components/core';\n\nexport enum InterviewState {\n CandidateSpeaking = 'candidate-speaking',\n AiListening = 'ai-listening',\n AiSpeaking = 'ai-speaking',\n}\n\n@Component({\n selector: 'ui-ai-audio-circle',\n templateUrl: './ai-audio-circle.component.html',\n styleUrls: ['./ai-audio-circle.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class AiAudioCircleComponent implements OnDestroy, AfterViewInit {\n @ViewChild('pulseCanvas', { static: false }) pulseCanvasRef?: ElementRef<HTMLCanvasElement>;\n\n audioTrack = input<MediaStreamTrack>();\n candidateAudioTrack = input<MediaStreamTrack>();\n state = model<InterviewState>(InterviewState.AiListening);\n canvasSize = input<number>(280);\n\n isSpeaking: WritableSignal<boolean> = signal(false);\n scaleValue: WritableSignal<number> = signal(1);\n\n audioContext?: AudioContext;\n analyser?: AnalyserNode;\n candidateAnalyser?: AnalyserNode;\n dataArray?: Uint8Array<ArrayBuffer>;\n candidateDataArray?: Uint8Array<ArrayBuffer>;\n animationFrameId?: number;\n source?: MediaStreamAudioSourceNode;\n candidateSource?: MediaStreamAudioSourceNode;\n\n pulseCtx?: CanvasRenderingContext2D;\n currentAmp = 0.02;\n simTime = 0;\n baseRadius = computed(() => this.canvasSize() * 0.38);\n\n // Audio detection thresholds\n readonly AI_SPEAKING_THRESHOLD = 0.02;\n readonly CANDIDATE_SPEAKING_THRESHOLD = 0.5;\n\n readonly SHADOW_COLOR_RGB = this.hexToRgb(Color.BRAND_50);\n\n pulseTime = 0;\n pulseScale = 1;\n pulseTargetScale = 1;\n pulseAnimationId?: number;\n blobs: Array<{\n x: number;\n y: number;\n vx: number;\n vy: number;\n radius: number;\n color: string;\n opacity: number;\n }> = [];\n\n constructor() {\n effect(() => {\n const audioTrack = this.audioTrack();\n if (audioTrack) {\n this.setupAudioAnalysis();\n }\n });\n\n effect(() => {\n const candidateAudioTrack = this.candidateAudioTrack();\n if (candidateAudioTrack) {\n this.setupCandidateAudioAnalysis();\n }\n });\n }\n\n ngAfterViewInit(): void {\n this.initializeCanvas();\n this.initializeBlobs();\n this.startAnimations();\n }\n\n private initializeCanvas(): void {\n if (!this.pulseCanvasRef) {\n return;\n }\n\n const pulseCanvas = this.pulseCanvasRef.nativeElement;\n\n const dpr = window.devicePixelRatio || 1;\n\n // Setup pulse canvas\n const size = this.canvasSize();\n pulseCanvas.width = size * dpr;\n pulseCanvas.height = size * dpr;\n pulseCanvas.style.width = `${size}px`;\n pulseCanvas.style.height = `${size}px`;\n const ctx = pulseCanvas.getContext('2d');\n if (!ctx) {\n console.error('[AI_AUDIO_CIRCLE] Failed to get 2d context');\n return;\n }\n this.pulseCtx = ctx;\n this.pulseCtx.scale(dpr, dpr);\n }\n\n private initializeBlobs(): void {\n const size = this.canvasSize();\n const centerX = size / 2;\n const centerY = size / 2;\n const baseRadius = this.baseRadius();\n\n const colors = [\n { color: Color.INFORMATIVE_30, opacity: 0.8 },\n { color: Color.INFORMATIVE_20, opacity: 0.7 },\n { color: Color.BRAND_50, opacity: 0.75 },\n { color: Color.BRAND_20, opacity: 0.6 },\n { color: Color.INFORMATIVE_30, opacity: 0.65 },\n ];\n\n this.blobs = colors.map((c, i) => {\n const angle = (i / colors.length) * Math.PI * 2;\n const dist = baseRadius * 0.25;\n return {\n x: centerX + Math.cos(angle) * dist,\n y: centerY + Math.sin(angle) * dist,\n vx: (Math.random() - 0.5) * 0.4,\n vy: (Math.random() - 0.5) * 0.4,\n radius: baseRadius * (0.6 + Math.random() * 0.4),\n color: c.color,\n opacity: c.opacity,\n };\n });\n }\n\n private setupAudioAnalysis(): void {\n const audioTrack = this.audioTrack();\n if (!audioTrack) {\n return;\n }\n\n try {\n if (!this.audioContext) {\n this.audioContext = new AudioContext();\n }\n\n this.analyser = this.audioContext.createAnalyser();\n this.analyser.fftSize = 256;\n this.analyser.smoothingTimeConstant = 0.8;\n\n const bufferLength = this.analyser.frequencyBinCount;\n this.dataArray = new Uint8Array(bufferLength);\n\n const stream = new MediaStream([audioTrack]);\n this.source = this.audioContext.createMediaStreamSource(stream);\n this.source.connect(this.analyser);\n\n this.analyzeAudio();\n } catch (error) {\n console.error('[AI_AUDIO_CIRCLE] Error setting up audio analysis:', error);\n }\n }\n\n private setupCandidateAudioAnalysis(): void {\n const candidateAudioTrack = this.candidateAudioTrack();\n if (!candidateAudioTrack) {\n return;\n }\n\n try {\n if (!this.audioContext) {\n this.audioContext = new AudioContext();\n }\n\n this.candidateAnalyser = this.audioContext.createAnalyser();\n this.candidateAnalyser.fftSize = 256;\n this.candidateAnalyser.smoothingTimeConstant = 0.8;\n\n const bufferLength = this.candidateAnalyser.frequencyBinCount;\n this.candidateDataArray = new Uint8Array(bufferLength);\n\n const stream = new MediaStream([candidateAudioTrack]);\n this.candidateSource = this.audioContext.createMediaStreamSource(stream);\n this.candidateSource.connect(this.candidateAnalyser);\n } catch (error) {\n console.error('[AI_AUDIO_CIRCLE] Error setting up candidate audio analysis:', error);\n }\n }\n\n private analyzeAudio(): void {\n if (!this.analyser || !this.dataArray) {\n return;\n }\n\n const analyze = () => {\n if (!this.analyser || !this.dataArray) {\n return;\n }\n\n // Analyze AI audio\n this.analyser.getByteFrequencyData(this.dataArray);\n const sum = Array.from(this.dataArray).reduce((a, b) => a + b, 0);\n const aiVolume = sum / this.dataArray.length / 255;\n\n // Analyze candidate audio if available\n let candidateVolume = 0;\n if (this.candidateAnalyser && this.candidateDataArray) {\n this.candidateAnalyser.getByteFrequencyData(this.candidateDataArray);\n const candidateSum = Array.from(this.candidateDataArray).reduce((a, b) => a + b, 0);\n candidateVolume = candidateSum / this.candidateDataArray.length / 255;\n }\n\n const aiSpeaking = aiVolume > this.AI_SPEAKING_THRESHOLD;\n const candidateSpeaking = candidateVolume > this.CANDIDATE_SPEAKING_THRESHOLD;\n\n if (candidateSpeaking) {\n this.state.set(InterviewState.CandidateSpeaking);\n } else if (aiSpeaking) {\n this.state.set(InterviewState.AiSpeaking);\n } else {\n this.state.set(InterviewState.AiListening);\n }\n\n this.isSpeaking.set(aiSpeaking);\n\n // Update amplitude for animations\n const currentStateValue = this.state();\n if (currentStateValue === InterviewState.AiSpeaking && aiSpeaking) {\n const target = Math.pow(aiVolume, 0.8) * 1.3;\n this.currentAmp += (target - this.currentAmp) * 0.4;\n } else if (currentStateValue === InterviewState.CandidateSpeaking) {\n const target = 0.55;\n this.currentAmp += (target - this.currentAmp) * 0.1;\n } else {\n const fixedBase = 0.2;\n this.currentAmp += (fixedBase - this.currentAmp) * 0.05;\n }\n\n this.animationFrameId = requestAnimationFrame(analyze);\n };\n\n this.animationFrameId = requestAnimationFrame(analyze);\n }\n\n private startAnimations(): void {\n this.animatePulse();\n this.mainLoop();\n }\n\n private mainLoop(): void {\n this.simTime += 0.05;\n\n const currentStateValue = this.state();\n\n if (currentStateValue === InterviewState.AiSpeaking) {\n if (this.analyser && this.dataArray) {\n // Use real audio amplitude (already handled in analyzeAudio)\n } else {\n // Simulated speaking\n const rhythm = Math.sin(this.simTime * 0.8) * 0.5 + 0.5;\n const spikes = Math.random() * 0.6;\n const target = rhythm * spikes;\n this.currentAmp += (target - this.currentAmp) * 0.2;\n }\n } else if (currentStateValue === InterviewState.CandidateSpeaking) {\n const target = 0.55;\n this.currentAmp += (target - this.currentAmp) * 0.1;\n } else {\n const fixedBase = 0.2;\n this.currentAmp += (fixedBase - this.currentAmp) * 0.05;\n }\n\n requestAnimationFrame(this.mainLoop);\n }\n\n private animatePulse(): void {\n if (!this.pulseCtx) {\n return;\n }\n\n const ctx = this.pulseCtx;\n this.pulseTime += 0.016;\n const size = this.canvasSize();\n const centerX = size / 2;\n const centerY = size / 2;\n const baseRadius = this.baseRadius();\n\n ctx.clearRect(0, 0, size, size);\n\n const currentStateValue = this.state();\n const effectiveAmp = this.currentAmp;\n const isListening = currentStateValue === InterviewState.AiListening;\n const isCandidate = currentStateValue === InterviewState.CandidateSpeaking;\n\n // Scale logic\n if (isCandidate) {\n // Candidate speaking: Fixed enlarged scale (115%), no breathing effect\n this.pulseTargetScale = 1.15;\n const breathing = 0;\n this.pulseScale += (this.pulseTargetScale + breathing - this.pulseScale) * 0.05;\n } else {\n // AI speaking/listening: Scale reacts to audio amplitude, with optional breathing\n // When AI is speaking: effectiveAmp is high, scale grows with voice\n // When AI is listening: effectiveAmp is low (~0.2), scale stays near 1.0 with breathing effect\n this.pulseTargetScale = 1 + effectiveAmp * 0.3;\n const breathing = isListening ? Math.sin(this.pulseTime * 1.5) * 0.035 : 0;\n this.pulseScale += (this.pulseTargetScale + breathing - this.pulseScale) * 0.05;\n }\n\n const currentRadius = baseRadius * this.pulseScale;\n\n // Draw shadows\n for (let i = 3; i >= 1; i--) {\n const shadowRadius = currentRadius + i * 6;\n const shadowOpacity = 0.24 - i * 0.04;\n const shadowGradient = ctx.createRadialGradient(\n centerX,\n centerY,\n currentRadius * 0.98,\n centerX,\n centerY,\n shadowRadius\n );\n shadowGradient.addColorStop(0, `rgba(${this.SHADOW_COLOR_RGB}, ${shadowOpacity})`);\n shadowGradient.addColorStop(0.6, `rgba(${this.SHADOW_COLOR_RGB}, ${shadowOpacity * 0.4})`);\n shadowGradient.addColorStop(1, `rgba(${this.SHADOW_COLOR_RGB}, 0)`);\n ctx.beginPath();\n ctx.arc(centerX, centerY, shadowRadius, 0, Math.PI * 2);\n ctx.fillStyle = shadowGradient;\n ctx.fill();\n }\n\n // Clip to circle\n ctx.save();\n ctx.beginPath();\n ctx.arc(centerX, centerY, currentRadius, 0, Math.PI * 2);\n ctx.clip();\n\n // Background gradient\n const bgGradient = ctx.createLinearGradient(\n centerX - currentRadius,\n centerY - currentRadius,\n centerX + currentRadius,\n centerY + currentRadius\n );\n bgGradient.addColorStop(0, Color.BRAND_50);\n bgGradient.addColorStop(0.5, Color.INFORMATIVE_20);\n bgGradient.addColorStop(1, Color.INFORMATIVE_30);\n ctx.beginPath();\n ctx.arc(centerX, centerY, currentRadius, 0, Math.PI * 2);\n ctx.fillStyle = bgGradient;\n ctx.fill();\n\n // Animate blobs\n let speedMultiplier;\n if (isCandidate) {\n speedMultiplier = 2.0;\n } else if (isListening) {\n speedMultiplier = 1.2;\n } else {\n speedMultiplier = 0.8 + effectiveAmp * 1.5;\n }\n\n this.blobs.forEach((blob, index) => {\n // Chaos forces\n const chaos1 = Math.sin(this.pulseTime * 0.6 + index * 2.5 + blob.x * 0.02) * 0.15;\n const chaos2 = Math.cos(this.pulseTime * 0.4 + index * 1.8 + blob.y * 0.015) * 0.12;\n const chaos3 = Math.sin(this.pulseTime * 1.0 + index * 0.7) * 0.08;\n\n // Apply forces\n blob.vx += (chaos1 + chaos3 * Math.cos(this.pulseTime * 1.5 + index)) * 0.025 * speedMultiplier;\n blob.vy += (chaos2 + chaos3 * Math.sin(this.pulseTime * 1.2 + index)) * 0.025 * speedMultiplier;\n\n // Friction\n blob.vx *= 0.98;\n blob.vy *= 0.98;\n\n // Max velocity\n const maxVel = (isListening ? 1.5 : 2.2) * speedMultiplier;\n const vel = Math.sqrt(blob.vx * blob.vx + blob.vy * blob.vy);\n if (vel > maxVel) {\n blob.vx = (blob.vx / vel) * maxVel;\n blob.vy = (blob.vy / vel) * maxVel;\n }\n\n // Update position\n blob.x += blob.vx;\n blob.y += blob.vy;\n\n // Keep within bounds\n const dx = blob.x - centerX;\n const dy = blob.y - centerY;\n const dist = Math.sqrt(dx * dx + dy * dy);\n const maxDist = currentRadius * 0.55;\n if (dist > maxDist) {\n const angle = Math.atan2(dy, dx);\n blob.x = centerX + Math.cos(angle) * maxDist;\n blob.y = centerY + Math.sin(angle) * maxDist;\n blob.vx -= dx * 0.065;\n blob.vy -= dy * 0.065;\n }\n\n // Parse color to RGB\n const rgb = this.hexToRgb(blob.color);\n\n // Draw blob with glow\n const blurRadius = blob.radius * 1.3;\n const outerGlow = ctx.createRadialGradient(blob.x, blob.y, 0, blob.x, blob.y, blurRadius);\n outerGlow.addColorStop(0, `rgba(${rgb}, ${blob.opacity * 0.9})`);\n outerGlow.addColorStop(0.2, `rgba(${rgb}, ${blob.opacity * 0.7})`);\n outerGlow.addColorStop(0.4, `rgba(${rgb}, ${blob.opacity * 0.5})`);\n outerGlow.addColorStop(0.6, `rgba(${rgb}, ${blob.opacity * 0.3})`);\n outerGlow.addColorStop(0.8, `rgba(${rgb}, ${blob.opacity * 0.1})`);\n outerGlow.addColorStop(1, `rgba(${rgb}, 0)`);\n ctx.beginPath();\n ctx.arc(blob.x, blob.y, blurRadius, 0, Math.PI * 2);\n ctx.fillStyle = outerGlow;\n ctx.fill();\n });\n\n // Highlight\n const highlightGradient = ctx.createRadialGradient(\n centerX - currentRadius * 0.3,\n centerY - currentRadius * 0.3,\n 0,\n centerX - currentRadius * 0.3,\n centerY - currentRadius * 0.3,\n currentRadius * 0.6\n );\n highlightGradient.addColorStop(0, 'rgba(255, 255, 255, 0.12)');\n highlightGradient.addColorStop(0.5, 'rgba(255, 255, 255, 0.03)');\n highlightGradient.addColorStop(1, 'rgba(255, 255, 255, 0)');\n ctx.beginPath();\n ctx.arc(centerX, centerY, currentRadius, 0, Math.PI * 2);\n ctx.fillStyle = highlightGradient;\n ctx.fill();\n\n ctx.restore();\n\n this.pulseAnimationId = requestAnimationFrame(this.animatePulse);\n };\n\n private hexToRgb(hex: string): string {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n if (!result) {\n return '0, 0, 0';\n }\n const r = parseInt(result[1], 16);\n const g = parseInt(result[2], 16);\n const b = parseInt(result[3], 16);\n return `${r}, ${g}, ${b}`;\n }\n\n private cleanup(): void {\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n if (this.pulseAnimationId) {\n cancelAnimationFrame(this.pulseAnimationId);\n this.pulseAnimationId = undefined;\n }\n if (this.source) {\n this.source.disconnect();\n this.source = undefined;\n }\n if (this.candidateSource) {\n this.candidateSource.disconnect();\n this.candidateSource = undefined;\n }\n if (this.audioContext && this.audioContext.state !== 'closed') {\n void this.audioContext.close();\n this.audioContext = undefined;\n }\n this.analyser = undefined;\n this.candidateAnalyser = undefined;\n this.dataArray = undefined;\n this.candidateDataArray = undefined;\n }\n\n ngOnDestroy(): void {\n this.cleanup();\n }\n}\n","<div class=\"ai-audio-visualizer\">\n <div class=\"canvas-container\">\n <canvas #pulseCanvas></canvas>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AiAudioCircleComponent } from './ai-audio-circle.component';\n\n@NgModule({\n declarations: [AiAudioCircleComponent],\n imports: [CommonModule],\n exports: [AiAudioCircleComponent],\n})\nexport class AiAudioCircleModule {}\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-ai-audio-circle.mjs","sources":["../../../components/ai-audio-circle/ai-audio-circle.component.ts","../../../components/ai-audio-circle/ai-audio-circle.component.html","../../../components/ai-audio-circle/ai-audio-circle.module.ts","../../../components/ai-audio-circle/testgorilla-tgo-ui-components-ai-audio-circle.ts"],"sourcesContent":["import {\n Component,\n input,\n model,\n OnDestroy,\n ChangeDetectionStrategy,\n WritableSignal,\n signal,\n ElementRef,\n ViewChild,\n AfterViewInit,\n effect,\n computed,\n} from '@angular/core';\nimport { Color } from '@testgorilla/tgo-ui/components/core';\n\nexport enum InterviewState {\n CandidateSpeaking = 'candidate-speaking',\n AiListening = 'ai-listening',\n AiSpeaking = 'ai-speaking',\n}\n\n@Component({\n selector: 'ui-ai-audio-circle',\n templateUrl: './ai-audio-circle.component.html',\n styleUrls: ['./ai-audio-circle.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class AiAudioCircleComponent implements OnDestroy, AfterViewInit {\n @ViewChild('pulseCanvas', { static: false }) pulseCanvasRef?: ElementRef<HTMLCanvasElement>;\n\n audioTrack = input<MediaStreamTrack>();\n candidateAudioTrack = input<MediaStreamTrack>();\n state = model<InterviewState>(InterviewState.AiListening);\n canvasSize = input<number>(280);\n\n isSpeaking: WritableSignal<boolean> = signal(false);\n scaleValue: WritableSignal<number> = signal(1);\n\n audioContext?: AudioContext;\n analyser?: AnalyserNode;\n candidateAnalyser?: AnalyserNode;\n dataArray?: Uint8Array<ArrayBuffer>;\n candidateDataArray?: Uint8Array<ArrayBuffer>;\n animationFrameId?: number;\n source?: MediaStreamAudioSourceNode;\n candidateSource?: MediaStreamAudioSourceNode;\n\n pulseCtx?: CanvasRenderingContext2D;\n currentAmp = 0.02;\n simTime = 0;\n baseRadius = computed(() => this.canvasSize() * 0.38);\n\n // Audio detection thresholds\n readonly AI_SPEAKING_THRESHOLD = 0.02;\n readonly CANDIDATE_SPEAKING_THRESHOLD = 0.5;\n\n readonly SHADOW_COLOR_RGB = this.hexToRgb(Color.BRAND_50);\n\n pulseTime = 0;\n pulseScale = 1;\n pulseTargetScale = 1;\n pulseAnimationId?: number;\n blobs: Array<{\n x: number;\n y: number;\n vx: number;\n vy: number;\n radius: number;\n color: string;\n opacity: number;\n }> = [];\n\n constructor() {\n effect(() => {\n const audioTrack = this.audioTrack();\n if (audioTrack) {\n this.setupAudioAnalysis();\n }\n });\n\n effect(() => {\n const candidateAudioTrack = this.candidateAudioTrack();\n if (candidateAudioTrack) {\n this.setupCandidateAudioAnalysis();\n }\n });\n }\n\n ngAfterViewInit(): void {\n this.initializeCanvas();\n this.initializeBlobs();\n this.startAnimations();\n }\n\n private initializeCanvas(): void {\n if (!this.pulseCanvasRef) {\n return;\n }\n\n const pulseCanvas = this.pulseCanvasRef.nativeElement;\n\n const dpr = window.devicePixelRatio || 1;\n\n // Setup pulse canvas\n const size = this.canvasSize();\n pulseCanvas.width = size * dpr;\n pulseCanvas.height = size * dpr;\n pulseCanvas.style.width = `${size}px`;\n pulseCanvas.style.height = `${size}px`;\n const ctx = pulseCanvas.getContext('2d');\n if (!ctx) {\n console.error('[AI_AUDIO_CIRCLE] Failed to get 2d context');\n return;\n }\n this.pulseCtx = ctx;\n this.pulseCtx.scale(dpr, dpr);\n }\n\n private initializeBlobs(): void {\n const size = this.canvasSize();\n const centerX = size / 2;\n const centerY = size / 2;\n const baseRadius = this.baseRadius();\n\n const colors = [\n { color: Color.INFORMATIVE_30, opacity: 0.8 },\n { color: Color.INFORMATIVE_20, opacity: 0.7 },\n { color: Color.BRAND_50, opacity: 0.75 },\n { color: Color.BRAND_20, opacity: 0.6 },\n { color: Color.INFORMATIVE_30, opacity: 0.65 },\n ];\n\n this.blobs = colors.map((c, i) => {\n const angle = (i / colors.length) * Math.PI * 2;\n const dist = baseRadius * 0.25;\n return {\n x: centerX + Math.cos(angle) * dist,\n y: centerY + Math.sin(angle) * dist,\n vx: (Math.random() - 0.5) * 0.4,\n vy: (Math.random() - 0.5) * 0.4,\n radius: baseRadius * (0.6 + Math.random() * 0.4),\n color: c.color,\n opacity: c.opacity,\n };\n });\n }\n\n private setupAudioAnalysis(): void {\n const audioTrack = this.audioTrack();\n if (!audioTrack) {\n return;\n }\n\n try {\n if (!this.audioContext) {\n this.audioContext = new AudioContext();\n }\n\n this.analyser = this.audioContext.createAnalyser();\n this.analyser.fftSize = 256;\n this.analyser.smoothingTimeConstant = 0.8;\n\n const bufferLength = this.analyser.frequencyBinCount;\n this.dataArray = new Uint8Array(bufferLength);\n\n const stream = new MediaStream([audioTrack]);\n this.source = this.audioContext.createMediaStreamSource(stream);\n this.source.connect(this.analyser);\n\n this.analyzeAudio();\n } catch (error) {\n console.error('[AI_AUDIO_CIRCLE] Error setting up audio analysis:', error);\n }\n }\n\n private setupCandidateAudioAnalysis(): void {\n const candidateAudioTrack = this.candidateAudioTrack();\n if (!candidateAudioTrack) {\n return;\n }\n\n try {\n if (!this.audioContext) {\n this.audioContext = new AudioContext();\n }\n\n this.candidateAnalyser = this.audioContext.createAnalyser();\n this.candidateAnalyser.fftSize = 256;\n this.candidateAnalyser.smoothingTimeConstant = 0.8;\n\n const bufferLength = this.candidateAnalyser.frequencyBinCount;\n this.candidateDataArray = new Uint8Array(bufferLength);\n\n const stream = new MediaStream([candidateAudioTrack]);\n this.candidateSource = this.audioContext.createMediaStreamSource(stream);\n this.candidateSource.connect(this.candidateAnalyser);\n } catch (error) {\n console.error('[AI_AUDIO_CIRCLE] Error setting up candidate audio analysis:', error);\n }\n }\n\n private analyzeAudio(): void {\n if (!this.analyser || !this.dataArray) {\n return;\n }\n\n const analyze = () => {\n if (!this.analyser || !this.dataArray) {\n return;\n }\n\n // Analyze AI audio\n this.analyser.getByteFrequencyData(this.dataArray);\n const sum = Array.from(this.dataArray).reduce((a, b) => a + b, 0);\n const aiVolume = sum / this.dataArray.length / 255;\n\n // Analyze candidate audio if available\n let candidateVolume = 0;\n if (this.candidateAnalyser && this.candidateDataArray) {\n this.candidateAnalyser.getByteFrequencyData(this.candidateDataArray);\n const candidateSum = Array.from(this.candidateDataArray).reduce((a, b) => a + b, 0);\n candidateVolume = candidateSum / this.candidateDataArray.length / 255;\n }\n\n const aiSpeaking = aiVolume > this.AI_SPEAKING_THRESHOLD;\n const candidateSpeaking = candidateVolume > this.CANDIDATE_SPEAKING_THRESHOLD;\n\n if (candidateSpeaking) {\n this.state.set(InterviewState.CandidateSpeaking);\n } else if (aiSpeaking) {\n this.state.set(InterviewState.AiSpeaking);\n } else {\n this.state.set(InterviewState.AiListening);\n }\n\n this.isSpeaking.set(aiSpeaking);\n\n // Update amplitude for animations\n const currentStateValue = this.state();\n if (currentStateValue === InterviewState.AiSpeaking && aiSpeaking) {\n const target = Math.pow(aiVolume, 0.8) * 1.3;\n this.currentAmp += (target - this.currentAmp) * 0.4;\n } else if (currentStateValue === InterviewState.CandidateSpeaking) {\n const target = 0.55;\n this.currentAmp += (target - this.currentAmp) * 0.1;\n } else {\n const fixedBase = 0.2;\n this.currentAmp += (fixedBase - this.currentAmp) * 0.05;\n }\n\n this.animationFrameId = requestAnimationFrame(analyze);\n };\n\n this.animationFrameId = requestAnimationFrame(analyze);\n }\n\n private startAnimations(): void {\n this.animatePulse = this.animatePulse.bind(this);\n this.mainLoop = this.mainLoop.bind(this);\n this.animatePulse();\n this.mainLoop();\n }\n\n private mainLoop(): void {\n this.simTime += 0.05;\n\n const currentStateValue = this.state();\n\n if (currentStateValue === InterviewState.AiSpeaking) {\n if (this.analyser && this.dataArray) {\n // Use real audio amplitude (already handled in analyzeAudio)\n } else {\n // Simulated speaking\n const rhythm = Math.sin(this.simTime * 0.8) * 0.5 + 0.5;\n const spikes = Math.random() * 0.6;\n const target = rhythm * spikes;\n this.currentAmp += (target - this.currentAmp) * 0.2;\n }\n } else if (currentStateValue === InterviewState.CandidateSpeaking) {\n const target = 0.55;\n this.currentAmp += (target - this.currentAmp) * 0.1;\n } else {\n const fixedBase = 0.2;\n this.currentAmp += (fixedBase - this.currentAmp) * 0.05;\n }\n\n requestAnimationFrame(this.mainLoop);\n }\n\n private animatePulse(): void {\n if (!this.pulseCtx) {\n return;\n }\n\n const ctx = this.pulseCtx;\n this.pulseTime += 0.016;\n const size = this.canvasSize();\n const centerX = size / 2;\n const centerY = size / 2;\n const baseRadius = this.baseRadius();\n\n ctx.clearRect(0, 0, size, size);\n\n const currentStateValue = this.state();\n const effectiveAmp = this.currentAmp;\n const isListening = currentStateValue === InterviewState.AiListening;\n const isCandidate = currentStateValue === InterviewState.CandidateSpeaking;\n\n // Scale logic\n if (isCandidate) {\n // Candidate speaking: Fixed enlarged scale (115%), no breathing effect\n this.pulseTargetScale = 1.15;\n const breathing = 0;\n this.pulseScale += (this.pulseTargetScale + breathing - this.pulseScale) * 0.05;\n } else {\n // AI speaking/listening: Scale reacts to audio amplitude, with optional breathing\n // When AI is speaking: effectiveAmp is high, scale grows with voice\n // When AI is listening: effectiveAmp is low (~0.2), scale stays near 1.0 with breathing effect\n this.pulseTargetScale = 1 + effectiveAmp * 0.3;\n const breathing = isListening ? Math.sin(this.pulseTime * 1.5) * 0.035 : 0;\n this.pulseScale += (this.pulseTargetScale + breathing - this.pulseScale) * 0.05;\n }\n\n const currentRadius = baseRadius * this.pulseScale;\n\n // Draw shadows\n for (let i = 3; i >= 1; i--) {\n const shadowRadius = currentRadius + i * 6;\n const shadowOpacity = 0.24 - i * 0.04;\n const shadowGradient = ctx.createRadialGradient(\n centerX,\n centerY,\n currentRadius * 0.98,\n centerX,\n centerY,\n shadowRadius\n );\n shadowGradient.addColorStop(0, `rgba(${this.SHADOW_COLOR_RGB}, ${shadowOpacity})`);\n shadowGradient.addColorStop(0.6, `rgba(${this.SHADOW_COLOR_RGB}, ${shadowOpacity * 0.4})`);\n shadowGradient.addColorStop(1, `rgba(${this.SHADOW_COLOR_RGB}, 0)`);\n ctx.beginPath();\n ctx.arc(centerX, centerY, shadowRadius, 0, Math.PI * 2);\n ctx.fillStyle = shadowGradient;\n ctx.fill();\n }\n\n // Clip to circle\n ctx.save();\n ctx.beginPath();\n ctx.arc(centerX, centerY, currentRadius, 0, Math.PI * 2);\n ctx.clip();\n\n // Background gradient\n const bgGradient = ctx.createLinearGradient(\n centerX - currentRadius,\n centerY - currentRadius,\n centerX + currentRadius,\n centerY + currentRadius\n );\n bgGradient.addColorStop(0, Color.BRAND_50);\n bgGradient.addColorStop(0.5, Color.INFORMATIVE_20);\n bgGradient.addColorStop(1, Color.INFORMATIVE_30);\n ctx.beginPath();\n ctx.arc(centerX, centerY, currentRadius, 0, Math.PI * 2);\n ctx.fillStyle = bgGradient;\n ctx.fill();\n\n // Animate blobs\n let speedMultiplier;\n if (isCandidate) {\n speedMultiplier = 2.0;\n } else if (isListening) {\n speedMultiplier = 1.2;\n } else {\n speedMultiplier = 0.8 + effectiveAmp * 1.5;\n }\n\n this.blobs.forEach((blob, index) => {\n // Chaos forces\n const chaos1 = Math.sin(this.pulseTime * 0.6 + index * 2.5 + blob.x * 0.02) * 0.15;\n const chaos2 = Math.cos(this.pulseTime * 0.4 + index * 1.8 + blob.y * 0.015) * 0.12;\n const chaos3 = Math.sin(this.pulseTime * 1.0 + index * 0.7) * 0.08;\n\n // Apply forces\n blob.vx += (chaos1 + chaos3 * Math.cos(this.pulseTime * 1.5 + index)) * 0.025 * speedMultiplier;\n blob.vy += (chaos2 + chaos3 * Math.sin(this.pulseTime * 1.2 + index)) * 0.025 * speedMultiplier;\n\n // Friction\n blob.vx *= 0.98;\n blob.vy *= 0.98;\n\n // Max velocity\n const maxVel = (isListening ? 1.5 : 2.2) * speedMultiplier;\n const vel = Math.sqrt(blob.vx * blob.vx + blob.vy * blob.vy);\n if (vel > maxVel) {\n blob.vx = (blob.vx / vel) * maxVel;\n blob.vy = (blob.vy / vel) * maxVel;\n }\n\n // Update position\n blob.x += blob.vx;\n blob.y += blob.vy;\n\n // Keep within bounds\n const dx = blob.x - centerX;\n const dy = blob.y - centerY;\n const dist = Math.sqrt(dx * dx + dy * dy);\n const maxDist = currentRadius * 0.55;\n if (dist > maxDist) {\n const angle = Math.atan2(dy, dx);\n blob.x = centerX + Math.cos(angle) * maxDist;\n blob.y = centerY + Math.sin(angle) * maxDist;\n blob.vx -= dx * 0.065;\n blob.vy -= dy * 0.065;\n }\n\n // Parse color to RGB\n const rgb = this.hexToRgb(blob.color);\n\n // Draw blob with glow\n const blurRadius = blob.radius * 1.3;\n const outerGlow = ctx.createRadialGradient(blob.x, blob.y, 0, blob.x, blob.y, blurRadius);\n outerGlow.addColorStop(0, `rgba(${rgb}, ${blob.opacity * 0.9})`);\n outerGlow.addColorStop(0.2, `rgba(${rgb}, ${blob.opacity * 0.7})`);\n outerGlow.addColorStop(0.4, `rgba(${rgb}, ${blob.opacity * 0.5})`);\n outerGlow.addColorStop(0.6, `rgba(${rgb}, ${blob.opacity * 0.3})`);\n outerGlow.addColorStop(0.8, `rgba(${rgb}, ${blob.opacity * 0.1})`);\n outerGlow.addColorStop(1, `rgba(${rgb}, 0)`);\n ctx.beginPath();\n ctx.arc(blob.x, blob.y, blurRadius, 0, Math.PI * 2);\n ctx.fillStyle = outerGlow;\n ctx.fill();\n });\n\n // Highlight\n const highlightGradient = ctx.createRadialGradient(\n centerX - currentRadius * 0.3,\n centerY - currentRadius * 0.3,\n 0,\n centerX - currentRadius * 0.3,\n centerY - currentRadius * 0.3,\n currentRadius * 0.6\n );\n highlightGradient.addColorStop(0, 'rgba(255, 255, 255, 0.12)');\n highlightGradient.addColorStop(0.5, 'rgba(255, 255, 255, 0.03)');\n highlightGradient.addColorStop(1, 'rgba(255, 255, 255, 0)');\n ctx.beginPath();\n ctx.arc(centerX, centerY, currentRadius, 0, Math.PI * 2);\n ctx.fillStyle = highlightGradient;\n ctx.fill();\n\n ctx.restore();\n\n this.pulseAnimationId = requestAnimationFrame(this.animatePulse);\n }\n\n private hexToRgb(hex: string): string {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n if (!result) {\n return '0, 0, 0';\n }\n const r = parseInt(result[1], 16);\n const g = parseInt(result[2], 16);\n const b = parseInt(result[3], 16);\n return `${r}, ${g}, ${b}`;\n }\n\n private cleanup(): void {\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n if (this.pulseAnimationId) {\n cancelAnimationFrame(this.pulseAnimationId);\n this.pulseAnimationId = undefined;\n }\n if (this.source) {\n this.source.disconnect();\n this.source = undefined;\n }\n if (this.candidateSource) {\n this.candidateSource.disconnect();\n this.candidateSource = undefined;\n }\n if (this.audioContext && this.audioContext.state !== 'closed') {\n void this.audioContext.close();\n this.audioContext = undefined;\n }\n this.analyser = undefined;\n this.candidateAnalyser = undefined;\n this.dataArray = undefined;\n this.candidateDataArray = undefined;\n }\n\n ngOnDestroy(): void {\n this.cleanup();\n }\n}\n","<div class=\"ai-audio-visualizer\">\n <div class=\"canvas-container\">\n <canvas #pulseCanvas></canvas>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AiAudioCircleComponent } from './ai-audio-circle.component';\n\n@NgModule({\n declarations: [AiAudioCircleComponent],\n imports: [CommonModule],\n exports: [AiAudioCircleComponent],\n})\nexport class AiAudioCircleModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ import { HttpClientModule } from '@angular/common/http';
|
|
|
10
10
|
/* eslint-disable */
|
|
11
11
|
/**
|
|
12
12
|
* Auto-generated file containing SVG icon content
|
|
13
|
-
* Generated on: 2026-02-
|
|
13
|
+
* Generated on: 2026-02-11T03:51:26.036Z
|
|
14
14
|
*
|
|
15
15
|
* DO NOT EDIT THIS FILE MANUALLY
|
|
16
16
|
* Run 'npm run generate:icons' to regenerate
|
|
@@ -208,7 +208,7 @@ const rebrandIconSvgContent = {
|
|
|
208
208
|
'Attempts-in-line': `<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 23.0001C10.6167 23.0001 9.31667 22.7376 8.1 22.2126C6.88333 21.6876 5.825 20.9751 4.925 20.0751C4.025 19.1751 3.3125 18.1168 2.7875 16.9001C2.2625 15.6835 2 14.3835 2 13.0001C2 11.6168 2.2625 10.3168 2.7875 9.10012C3.3125 7.88346 4.025 6.82512 4.925 5.92512C5.825 5.02512 6.88333 4.31262 8.1 3.78762C9.31667 3.26262 10.6167 3.00012 12 3.00012C13.3833 3.00012 14.6833 3.26262 15.9 3.78762C17.1167 4.31262 18.175 5.02512 19.075 5.92512C19.975 6.82512 20.6875 7.88346 21.2125 9.10012C21.7375 10.3168 22 11.6168 22 13.0001C22 14.3835 21.7375 15.6835 21.2125 16.9001C20.6875 18.1168 19.975 19.1751 19.075 20.0751C18.175 20.9751 17.1167 21.6876 15.9 22.2126C14.6833 22.7376 13.3833 23.0001 12 23.0001ZM12 21.0001C14.2333 21.0001 16.125 20.2251 17.675 18.6751C19.225 17.1251 20 15.2335 20 13.0001C20 10.7668 19.225 8.87512 17.675 7.32512C16.125 5.77512 14.2333 5.00012 12 5.00012C9.76667 5.00012 7.875 5.77512 6.325 7.32512C4.775 8.87512 4 10.7668 4 13.0001C4 15.2335 4.775 17.1251 6.325 18.6751C7.875 20.2251 9.76667 21.0001 12 21.0001ZM12 19.0001C10.3333 19.0001 8.91667 18.4168 7.75 17.2501C6.58333 16.0835 6 14.6668 6 13.0001C6 11.3335 6.58333 9.91679 7.75 8.75012C8.91667 7.58346 10.3333 7.00012 12 7.00012C13.6667 7.00012 15.0833 7.58346 16.25 8.75012C17.4167 9.91679 18 11.3335 18 13.0001C18 14.6668 17.4167 16.0835 16.25 17.2501C15.0833 18.4168 13.6667 19.0001 12 19.0001ZM12 17.0001C13.1 17.0001 14.0417 16.6085 14.825 15.8251C15.6083 15.0418 16 14.1001 16 13.0001C16 11.9001 15.6083 10.9585 14.825 10.1751C14.0417 9.39179 13.1 9.00012 12 9.00012C10.9 9.00012 9.95833 9.39179 9.175 10.1751C8.39167 10.9585 8 11.9001 8 13.0001C8 14.1001 8.39167 15.0418 9.175 15.8251C9.95833 16.6085 10.9 17.0001 12 17.0001ZM12 15.0001C11.45 15.0001 10.9792 14.8043 10.5875 14.4126C10.1958 14.021 10 13.5501 10 13.0001C10 12.4501 10.1958 11.9793 10.5875 11.5876C10.9792 11.196 11.45 11.0001 12 11.0001C12.55 11.0001 13.0208 11.196 13.4125 11.5876C13.8042 11.9793 14 12.4501 14 13.0001C14 13.5501 13.8042 14.021 13.4125 14.4126C13.0208 14.8043 12.55 15.0001 12 15.0001Z" fill="currentColor"/></svg>`,
|
|
209
209
|
'Book-filled': `<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13 17.5965C13.7333 17.2465 14.4708 16.984 15.2125 16.809C15.9542 16.634 16.7167 16.5465 17.5 16.5465C18.1 16.5465 18.6875 16.5965 19.2625 16.6965C19.8375 16.7965 20.4167 16.9465 21 17.1465V7.24651C20.45 7.01318 19.8792 6.83818 19.2875 6.72151C18.6958 6.60484 18.1 6.54651 17.5 6.54651C16.7167 6.54651 15.9417 6.64651 15.175 6.84651C14.4083 7.04651 13.6833 7.34651 13 7.74651V17.5965ZM12 20.5465C11.2 19.9132 10.3333 19.4215 9.4 19.0715C8.46667 18.7215 7.5 18.5465 6.5 18.5465C5.61667 18.5465 4.69167 18.7132 3.725 19.0465C2.75833 19.3798 1.85 19.8965 1 20.5965V6.09651C1.73333 5.59651 2.59583 5.21318 3.5875 4.94651C4.57917 4.67984 5.55 4.54651 6.5 4.54651C7.46667 4.54651 8.4125 4.67151 9.3375 4.92151C10.2625 5.17151 11.15 5.54651 12 6.04651C12.85 5.54651 13.7375 5.17151 14.6625 4.92151C15.5875 4.67151 16.5333 4.54651 17.5 4.54651C18.45 4.54651 19.4208 4.67984 20.4125 4.94651C21.4042 5.21318 22.2667 5.59651 23 6.09651V20.5965C22.1667 19.8965 21.2625 19.3798 20.2875 19.0465C19.3125 18.7132 18.3833 18.5465 17.5 18.5465C16.5 18.5465 15.5333 18.7215 14.6 19.0715C13.6667 19.4215 12.8 19.9132 12 20.5465ZM14 10.4465V8.74651C14.55 8.51318 15.1125 8.33818 15.6875 8.22151C16.2625 8.10484 16.8667 8.04651 17.5 8.04651C17.9333 8.04651 18.3583 8.07984 18.775 8.14651C19.1917 8.21318 19.6 8.29651 20 8.39651V9.99651C19.6 9.84651 19.1958 9.73401 18.7875 9.65901C18.3792 9.58401 17.95 9.54651 17.5 9.54651C16.8667 9.54651 16.2583 9.62568 15.675 9.78401C15.0917 9.94234 14.5333 10.1632 14 10.4465ZM14 15.9465V14.2465C14.55 14.0132 15.1125 13.8382 15.6875 13.7215C16.2625 13.6048 16.8667 13.5465 17.5 13.5465C17.9333 13.5465 18.3583 13.5798 18.775 13.6465C19.1917 13.7132 19.6 13.7965 20 13.8965V15.4965C19.6 15.3465 19.1958 15.234 18.7875 15.159C18.3792 15.084 17.95 15.0465 17.5 15.0465C16.8667 15.0465 16.2583 15.1215 15.675 15.2715C15.0917 15.4215 14.5333 15.6465 14 15.9465ZM14 13.1965V11.4965C14.55 11.2632 15.1125 11.0882 15.6875 10.9715C16.2625 10.8548 16.8667 10.7965 17.5 10.7965C17.9333 10.7965 18.3583 10.8298 18.775 10.8965C19.1917 10.9632 19.6 11.0465 20 11.1465V12.7465C19.6 12.5965 19.1958 12.484 18.7875 12.409C18.3792 12.334 17.95 12.2965 17.5 12.2965C16.8667 12.2965 16.2583 12.3757 15.675 12.534C15.0917 12.6923 14.5333 12.9132 14 13.1965Z" fill="currentColor"/></svg>`,
|
|
210
210
|
'Book-in-line': `<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6.5 16.5465C7.28333 16.5465 8.04583 16.634 8.7875 16.809C9.52917 16.984 10.2667 17.2465 11 17.5965V7.74651C10.3167 7.34651 9.59167 7.04651 8.825 6.84651C8.05833 6.64651 7.28333 6.54651 6.5 6.54651C5.9 6.54651 5.30417 6.60484 4.7125 6.72151C4.12083 6.83818 3.55 7.01318 3 7.24651V17.1465C3.58333 16.9465 4.1625 16.7965 4.7375 16.6965C5.3125 16.5965 5.9 16.5465 6.5 16.5465ZM13 17.5965C13.7333 17.2465 14.4708 16.984 15.2125 16.809C15.9542 16.634 16.7167 16.5465 17.5 16.5465C18.1 16.5465 18.6875 16.5965 19.2625 16.6965C19.8375 16.7965 20.4167 16.9465 21 17.1465V7.24651C20.45 7.01318 19.8792 6.83818 19.2875 6.72151C18.6958 6.60484 18.1 6.54651 17.5 6.54651C16.7167 6.54651 15.9417 6.64651 15.175 6.84651C14.4083 7.04651 13.6833 7.34651 13 7.74651V17.5965ZM12 20.5465C11.2 19.9132 10.3333 19.4215 9.4 19.0715C8.46667 18.7215 7.5 18.5465 6.5 18.5465C5.61667 18.5465 4.69167 18.7132 3.725 19.0465C2.75833 19.3798 1.85 19.8965 1 20.5965V6.09651C1.73333 5.59651 2.59583 5.21318 3.5875 4.94651C4.57917 4.67984 5.55 4.54651 6.5 4.54651C7.46667 4.54651 8.4125 4.67151 9.3375 4.92151C10.2625 5.17151 11.15 5.54651 12 6.04651C12.85 5.54651 13.7375 5.17151 14.6625 4.92151C15.5875 4.67151 16.5333 4.54651 17.5 4.54651C18.45 4.54651 19.4208 4.67984 20.4125 4.94651C21.4042 5.21318 22.2667 5.59651 23 6.09651V20.5965C22.1667 19.8965 21.2625 19.3798 20.2875 19.0465C19.3125 18.7132 18.3833 18.5465 17.5 18.5465C16.5 18.5465 15.5333 18.7215 14.6 19.0715C13.6667 19.4215 12.8 19.9132 12 20.5465ZM14 10.4465V8.74651C14.55 8.51318 15.1125 8.33818 15.6875 8.22151C16.2625 8.10484 16.8667 8.04651 17.5 8.04651C17.9333 8.04651 18.3583 8.07984 18.775 8.14651C19.1917 8.21318 19.6 8.29651 20 8.39651V9.99651C19.6 9.84651 19.1958 9.73401 18.7875 9.65901C18.3792 9.58401 17.95 9.54651 17.5 9.54651C16.8667 9.54651 16.2583 9.62568 15.675 9.78401C15.0917 9.94234 14.5333 10.1632 14 10.4465ZM14 15.9465V14.2465C14.55 14.0132 15.1125 13.8382 15.6875 13.7215C16.2625 13.6048 16.8667 13.5465 17.5 13.5465C17.9333 13.5465 18.3583 13.5798 18.775 13.6465C19.1917 13.7132 19.6 13.7965 20 13.8965V15.4965C19.6 15.3465 19.1958 15.234 18.7875 15.159C18.3792 15.084 17.95 15.0465 17.5 15.0465C16.8667 15.0465 16.2583 15.1215 15.675 15.2715C15.0917 15.4215 14.5333 15.6465 14 15.9465ZM14 13.1965V11.4965C14.55 11.2632 15.1125 11.0882 15.6875 10.9715C16.2625 10.8548 16.8667 10.7965 17.5 10.7965C17.9333 10.7965 18.3583 10.8298 18.775 10.8965C19.1917 10.9632 19.6 11.0465 20 11.1465V12.7465C19.6 12.5965 19.1958 12.484 18.7875 12.409C18.3792 12.334 17.95 12.2965 17.5 12.2965C16.8667 12.2965 16.2583 12.3757 15.675 12.534C15.0917 12.6923 14.5333 12.9132 14 13.1965Z" fill="currentColor"/></svg>`,
|
|
211
|
-
'Bookmark-filled': `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5 21.4535V5.45349C5 4.90349 5.19583 4.43266 5.5875 4.04099C5.97917 3.64932 6.45 3.45349 7 3.45349H17C17.55 3.45349 18.0208 3.64932 18.4125 4.04099C18.8042 4.43266 19 4.90349 19 5.45349V21.4535L12 18.4535L5 21.4535Z" fill="
|
|
211
|
+
'Bookmark-filled': `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5 21.4535V5.45349C5 4.90349 5.19583 4.43266 5.5875 4.04099C5.97917 3.64932 6.45 3.45349 7 3.45349H17C17.55 3.45349 18.0208 3.64932 18.4125 4.04099C18.8042 4.43266 19 4.90349 19 5.45349V21.4535L12 18.4535L5 21.4535Z" fill="currentColor"/></svg>`,
|
|
212
212
|
'Bookmark-in-line': `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5 21.4535V5.45349C5 4.90349 5.19583 4.43266 5.5875 4.04099C5.97917 3.64932 6.45 3.45349 7 3.45349H17C17.55 3.45349 18.0208 3.64932 18.4125 4.04099C18.8042 4.43266 19 4.90349 19 5.45349V21.4535L12 18.4535L5 21.4535ZM7 18.4035L12 16.2535L17 18.4035V5.45349H7V18.4035Z" fill="#242424"/></svg>`,
|
|
213
213
|
'Calendar-filled': `<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 18.5465C13.8 18.5465 13.2083 18.3048 12.725 17.8215C12.2417 17.3382 12 16.7465 12 16.0465C12 15.3465 12.2417 14.7548 12.725 14.2715C13.2083 13.7882 13.8 13.5465 14.5 13.5465C15.2 13.5465 15.7917 13.7882 16.275 14.2715C16.7583 14.7548 17 15.3465 17 16.0465C17 16.7465 16.7583 17.3382 16.275 17.8215C15.7917 18.3048 15.2 18.5465 14.5 18.5465ZM3 22.5465V4.54651H6V2.54651H8V4.54651H16V2.54651H18V4.54651H21V22.5465H3ZM5 20.5465H19V10.5465H5V20.5465Z" fill="currentColor"/></svg>`,
|
|
214
214
|
'Calendar-in-line': `<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 18.5465C13.8 18.5465 13.2083 18.3048 12.725 17.8215C12.2417 17.3382 12 16.7465 12 16.0465C12 15.3465 12.2417 14.7548 12.725 14.2715C13.2083 13.7882 13.8 13.5465 14.5 13.5465C15.2 13.5465 15.7917 13.7882 16.275 14.2715C16.7583 14.7548 17 15.3465 17 16.0465C17 16.7465 16.7583 17.3382 16.275 17.8215C15.7917 18.3048 15.2 18.5465 14.5 18.5465ZM3 22.5465V4.54651H6V2.54651H8V4.54651H16V2.54651H18V4.54651H21V22.5465H3ZM5 20.5465H19V10.5465H5V20.5465ZM5 8.54651H19V6.54651H5V8.54651Z" fill="currentColor"/></svg>`,
|
|
@@ -700,6 +700,8 @@ const tgoRebrandIcons = [
|
|
|
700
700
|
'Attempts-in-line',
|
|
701
701
|
'Book-filled',
|
|
702
702
|
'Book-in-line',
|
|
703
|
+
'Bookmark-filled',
|
|
704
|
+
'Bookmark-in-line',
|
|
703
705
|
'Calendar-filled',
|
|
704
706
|
'Calendar-in-line',
|
|
705
707
|
'Candidates-filled',
|