button.component.mjs 12 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
  2. import { IconComponent } from '../icon/icon.component';
  3. import { NgClass } from '@angular/common';
  4. import * as i0 from "@angular/core";
  5. export class ButtonComponent {
  6. constructor() {
  7. this.text = '';
  8. this.type = 'default';
  9. this.size = 'base';
  10. this.variant = 'default';
  11. this.icon = undefined;
  12. }
  13. getCssClasses() {
  14. const sizeAndTextClasses = this.getSizeAndTextClasses();
  15. const borderClasses = this.getBorderClasses();
  16. const backgroundClasses = this.getBackgroundClasses();
  17. const allClasses = { ...sizeAndTextClasses, ...borderClasses, ...backgroundClasses };
  18. return this.getClassesAsString(allClasses);
  19. }
  20. getBackgroundClasses() {
  21. return {
  22. 'bg-primary hover:bg-primary-variation dark:bg-primary-dark': this.type === 'default' && this.variant === 'default',
  23. 'bg-secondary hover:bg-primary dark:bg-secondary-dark': this.type === 'alternate' && this.variant === 'default',
  24. 'bg-warning hover:bg-warning-variation': this.type === 'warning' && this.variant === 'default',
  25. 'bg-error hover:bg-error-variation': this.type === 'error' && this.variant === 'default',
  26. 'bg-success hover:bg-success-variation': this.type === 'success' && this.variant === 'default',
  27. };
  28. }
  29. getBorderClasses() {
  30. return {
  31. border: this.variant === 'outline',
  32. 'border-primary dark:border-primary-dark': this.type === 'default' && this.variant === 'outline',
  33. 'border-secondary dark:border-secondary-dark': this.type === 'alternate' && this.variant === 'outline',
  34. 'border-warning': this.type === 'warning' && this.variant === 'outline',
  35. 'border-error': this.type === 'error' && this.variant === 'outline',
  36. 'border-success': this.type === 'success' && this.variant === 'outline',
  37. };
  38. }
  39. getSizeAndTextClasses() {
  40. return {
  41. 'px-3 py-2': this.size === 'xs' || this.size === 'sm',
  42. 'px-5 py-2.5': this.size === 'base' || this.size === 'lg',
  43. 'px-6 py-3.5': this.size === 'xl',
  44. 'text-xs': this.size === 'xs',
  45. 'text-sm': this.size === 'sm' || this.size === 'base',
  46. 'text-base': this.size === 'lg' || this.size === 'xl',
  47. };
  48. }
  49. getClassesAsString(classesObj) {
  50. return Object.entries(classesObj)
  51. .filter(([_, value]) => value)
  52. .map(([key, _]) => key)
  53. .join(' ');
  54. }
  55. static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
  56. static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.1", type: ButtonComponent, isStandalone: true, selector: "ct-button", inputs: { text: "text", type: "type", size: "size", variant: "variant", icon: "icon" }, ngImport: i0, template: "<button class=\"flex flex-row items-center gap-1.5 rounded-md\" [ngClass]=\"getCssClasses()\">\n @if (icon) {\n <ct-icon class=\"flex\" [size]=\"size || 'base'\" [icon]=\"icon\" />\n }\n {{ text }}\n</button>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IconComponent, selector: "ct-icon", inputs: ["icon", "iconClass", "fill", "strokeWidth", "strokeColor", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
  57. }
  58. i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: ButtonComponent, decorators: [{
  59. type: Component,
  60. args: [{ selector: 'ct-button', standalone: true, imports: [NgClass, IconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<button class=\"flex flex-row items-center gap-1.5 rounded-md\" [ngClass]=\"getCssClasses()\">\n @if (icon) {\n <ct-icon class=\"flex\" [size]=\"size || 'base'\" [icon]=\"icon\" />\n }\n {{ text }}\n</button>\n" }]
  61. }], propDecorators: { text: [{
  62. type: Input,
  63. args: [{ required: true }]
  64. }], type: [{
  65. type: Input
  66. }], size: [{
  67. type: Input
  68. }], variant: [{
  69. type: Input
  70. }], icon: [{
  71. type: Input
  72. }] } });
  73. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NpcmNsZXRvbmUvc3JjL2xpYi9jb21wb25lbnRzL2F0b21zL2J1dHRvbi9idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2lyY2xldG9uZS9zcmMvbGliL2NvbXBvbmVudHMvYXRvbXMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQVMxQyxNQUFNLE9BQU8sZUFBZTtJQVA1QjtRQVE2QixTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzVCLFNBQUksR0FBOEQsU0FBUyxDQUFDO1FBQzVFLFNBQUksR0FBYSxNQUFNLENBQUM7UUFDeEIsWUFBTyxHQUEwQixTQUFTLENBQUM7UUFDM0MsU0FBSSxHQUFZLFNBQVMsQ0FBQztLQW1EcEM7SUFqREMsYUFBYTtRQUNYLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDeEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDOUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUV0RCxNQUFNLFVBQVUsR0FBRyxFQUFFLEdBQUcsa0JBQWtCLEVBQUUsR0FBRyxhQUFhLEVBQUUsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1FBRXJGLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFF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c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTaXplVHlwZSB9IGZyb20gJy4uLy4uLy4uL21vZGVsL3NpemUudHlwZSc7XG5pbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3QtYnV0dG9uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW05nQ2xhc3MsIEljb25Db21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEJ1dHRvbkNvbXBvbmVudCB7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHRleHQgPSAnJztcbiAgQElucHV0KCkgdHlwZTogJ2RlZmF1bHQnIHwgJ2FsdGVybmF0ZScgfCAnc3VjY2VzcycgfCAnd2FybmluZycgfCAnZXJyb3InID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBzaXplOiBTaXplVHlwZSA9ICdiYXNlJztcbiAgQElucHV0KCkgdmFyaWFudDogJ2RlZmF1bHQnIHwgJ291dGxpbmUnID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBpY29uPzogc3RyaW5nID0gdW5kZWZpbmVkO1xuXG4gIGdldENzc0NsYXNzZXMoKSB7XG4gICAgY29uc3Qgc2l6ZUFuZFRleHRDbGFzc2VzID0gdGhpcy5nZXRTaXplQW5kVGV4dENsYXNzZXMoKTtcbiAgICBjb25zdCBib3JkZXJDbGFzc2VzID0gdGhpcy5nZXRCb3JkZXJDbGFzc2VzKCk7XG4gICAgY29uc3QgYmFja2dyb3VuZENsYXNzZXMgPSB0aGlzLmdldEJhY2tncm91bmRDbGFzc2VzKCk7XG5cbiAgICBjb25zdCBhbGxDbGFzc2VzID0geyAuLi5zaXplQW5kVGV4dENsYXNzZXMsIC4uLmJvcmRlckNsYXNzZXMsIC4uLmJhY2tncm91bmRDbGFzc2VzIH07XG5cbiAgICByZXR1cm4gdGhpcy5nZXRDbGFzc2VzQXNTdHJpbmcoYWxsQ2xhc3Nlcyk7XG4gIH1cblxuICBwcml2YXRlIGdldEJhY2tncm91bmRDbGFzc2VzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAnYmctcHJpbWFyeSBob3ZlcjpiZy1wcmltYXJ5LXZhcmlhdGlvbiBkYXJrOmJnLXByaW1hcnktZGFyayc6XG4gICAgICAgIHRoaXMudHlwZSA9PT0gJ2RlZmF1bHQnICYmIHRoaXMudmFyaWFudCA9PT0gJ2RlZmF1bHQnLFxuICAgICAgJ2JnLXNlY29uZGFyeSBob3ZlcjpiZy1wcmltYXJ5IGRhcms6Ymctc2Vjb25kYXJ5LWRhcmsnOiB0aGlzLnR5cGUgPT09ICdhbHRlcm5hdGUnICYmIHRoaXMudmFyaWFudCA9PT0gJ2RlZmF1bHQnLFxuICAgICAgJ2JnLXdhcm5pbmcgaG92ZXI6Ymctd2FybmluZy12YXJpYXRpb24nOiB0aGlzLnR5cGUgPT09ICd3YXJuaW5nJyAmJiB0aGlzLnZhcmlhbnQgPT09ICdkZWZhdWx0JyxcbiAgICAgICdiZy1lcnJvciBob3ZlcjpiZy1lcnJvci12YXJpYXRpb24nOiB0aGlzLnR5cGUgPT09ICdlcnJvcicgJiYgdGhpcy52YXJpYW50ID09PSAnZGVmYXVsdCcsXG4gICAgICAnYmctc3VjY2VzcyBob3ZlcjpiZy1zdWNjZXNzLXZhcmlhdGlvbic6IHRoaXMudHlwZSA9PT0gJ3N1Y2Nlc3MnICYmIHRoaXMudmFyaWFudCA9PT0gJ2RlZmF1bHQnLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldEJvcmRlckNsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogdGhpcy52YXJpYW50ID09PSAnb3V0bGluZScsXG4gICAgICAnYm9yZGVyLXByaW1hcnkgZGFyazpib3JkZXItcHJpbWFyeS1kYXJrJzogdGhpcy50eXBlID09PSAnZGVmYXVsdCcgJiYgdGhpcy52YXJpYW50ID09PSAnb3V0bGluZScsXG4gICAgICAnYm9yZGVyLXNlY29uZGFyeSBkYXJrOmJvcmRlci1zZWNvbmRhcnktZGFyayc6IHRoaXMudHlwZSA9PT0gJ2FsdGVybmF0ZScgJiYgdGhpcy52YXJpYW50ID09PSAnb3V0bGluZScsXG4gICAgICAnYm9yZGVyLXdhcm5pbmcnOiB0aGlzLnR5cGUgPT09ICd3YXJuaW5nJyAmJiB0aGlzLnZhcmlhbnQgPT09ICdvdXRsaW5lJyxcbiAgICAgICdib3JkZXItZXJyb3InOiB0aGlzLnR5cGUgPT09ICdlcnJvcicgJiYgdGhpcy52YXJpYW50ID09PSAnb3V0bGluZScsXG4gICAgICAnYm9yZGVyLXN1Y2Nlc3MnOiB0aGlzLnR5cGUgPT09ICdzdWNjZXNzJyAmJiB0aGlzLnZhcmlhbnQgPT09ICdvdXRsaW5lJyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaXplQW5kVGV4dENsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdweC0zIHB5LTInOiB0aGlzLnNpemUgPT09ICd4cycgfHwgdGhpcy5zaXplID09PSAnc20nLFxuICAgICAgJ3B4LTUgcHktMi41JzogdGhpcy5zaXplID09PSAnYmFzZScgfHwgdGhpcy5zaXplID09PSAnbGcnLFxuICAgICAgJ3B4LTYgcHktMy41JzogdGhpcy5zaXplID09PSAneGwnLFxuICAgICAgJ3RleHQteHMnOiB0aGlzLnNpemUgPT09ICd4cycsXG4gICAgICAndGV4dC1zbSc6IHRoaXMuc2l6ZSA9PT0gJ3NtJyB8fCB0aGlzLnNpemUgPT09ICdiYXNlJyxcbiAgICAgICd0ZXh0LWJhc2UnOiB0aGlzLnNpemUgPT09ICdsZycgfHwgdGhpcy5zaXplID09PSAneGwnLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldENsYXNzZXNBc1N0cmluZyhjbGFzc2VzT2JqOiBvYmplY3QpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoY2xhc3Nlc09iailcbiAgICAgIC5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlKVxuICAgICAgLm1hcCgoW2tleSwgX10pID0+IGtleSlcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cbn1cbiIsIjxidXR0b24gY2xhc3M9XCJmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBnYXAtMS41IHJvdW5kZWQtbWRcIiBbbmdDbGFzc109XCJnZXRDc3NDbGFzc2VzKClcIj5cbiAgQGlmIChpY29uKSB7XG4gICAgPGN0LWljb24gY2xhc3M9XCJmbGV4XCIgW3NpemVdPVwic2l6ZSB8fCAnYmFzZSdcIiBbaWNvbl09XCJpY29uXCIgLz5cbiAgfVxuICB7eyB0ZXh0IH19XG48L2J1dHRvbj5cbiJdfQ==