import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
import { faDownload, faSave, faShare, faEdit, faTrash, faFile, faFileText, faPrint } from '@fortawesome/free-solid-svg-icons';
import { SplitButtonComponent, SplitButtonMenuItem } from '../../../../../ui-essentials/src/lib/components/buttons/split-button';
@Component({
selector: 'ui-split-button-demo',
standalone: true,
imports: [CommonModule, SplitButtonComponent],
template: `
Split Button Demo
Sizes
@for (size of sizes; track size) {
{{ size | titlecase }} Size
}
Variants
@for (variant of variants; track variant) {
{{ variant | titlecase }}
}
With Icons
Download
Save
Share
States
Disabled
Loading
Full Width
Complex Examples
Edit Document
New File
Interactive Results
Last Action: {{ lastAction || 'None' }}
Click Count: {{ clickCount }}
`,
styleUrl: './split-button-demo.component.scss'
})
export class SplitButtonDemoComponent {
sizes = ['small', 'medium', 'large'] as const;
variants = ['filled', 'tonal', 'outlined'] as const;
clickCount = 0;
lastAction = '';
// Icons
faDownload = faDownload;
faSave = faSave;
faShare = faShare;
faEdit = faEdit;
faTrash = faTrash;
faFile = faFile;
faFileText = faFileText;
faPrint = faPrint;
// Menu configurations
basicMenuItems: SplitButtonMenuItem[] = [
{ label: 'Option 1', value: 'opt1' },
{ label: 'Option 2', value: 'opt2' },
{ label: 'Option 3', value: 'opt3' },
{ label: 'Disabled Option', value: 'disabled', disabled: true }
];
exportMenuItems: SplitButtonMenuItem[] = [
{ label: 'Download PDF', value: 'pdf', icon: this.faFile },
{ label: 'Download CSV', value: 'csv', icon: this.faFileText },
{ label: 'Download Excel', value: 'excel', icon: this.faFile },
{ label: 'Print', value: 'print', icon: this.faPrint }
];
saveMenuItems: SplitButtonMenuItem[] = [
{ label: 'Save As...', value: 'save-as' },
{ label: 'Save Copy', value: 'save-copy' },
{ label: 'Save Template', value: 'save-template' }
];
shareMenuItems: SplitButtonMenuItem[] = [
{ label: 'Share Link', value: 'share-link' },
{ label: 'Share via Email', value: 'share-email' },
{ label: 'Export & Share', value: 'export-share' }
];
editMenuItems: SplitButtonMenuItem[] = [
{ label: 'Quick Edit', value: 'quick-edit', icon: this.faEdit },
{ label: 'Advanced Edit', value: 'advanced-edit', icon: this.faEdit },
{ label: 'Delete', value: 'delete', icon: this.faTrash }
];
fileMenuItems: SplitButtonMenuItem[] = [
{ label: 'New Text File', value: 'new-text', icon: this.faFileText },
{ label: 'New Document', value: 'new-doc', icon: this.faFile },
{ label: 'New from Template', value: 'new-template', icon: this.faFile }
];
handlePrimaryClick(action: string): void {
this.clickCount++;
this.lastAction = action;
console.log('Primary button clicked:', action);
}
handleMenuItemClick(data: { event: Event; item: SplitButtonMenuItem }): void {
this.clickCount++;
this.lastAction = `Menu item: ${data.item.label} (value: ${data.item.value})`;
console.log('Menu item clicked:', data);
}
}