{"version":3,"file":"tstdl-angular-button.mjs","sources":["../../../../projects/tstdl/angular/button/source/config.ts","../../../../projects/tstdl/angular/button/source/button.component.ts","../../../../projects/tstdl/angular/button/source/button.component.html","../../../../projects/tstdl/angular/button/tstdl-angular-button.ts"],"sourcesContent":["\nimport type { Provider } from '@angular/core';\nimport type { ValueOrProvider } from '@tstdl/base/utils';\n\nimport type { ButtonColor, ButtonDesign, ButtonSize } from './button.component';\n\nexport class TstdlButtonConfig {\n  default?: {\n    design?: ValueOrProvider<ButtonDesign>,\n    color?: ValueOrProvider<ButtonColor>,\n    size?: ValueOrProvider<ButtonSize>,\n    coloredText?: ValueOrProvider<boolean>\n  };\n}\n\nexport function provideTstdlButtonConfig(config: TstdlButtonConfig): Provider {\n  return { provide: TstdlButtonConfig, useValue: config };\n}\n","import { ChangeDetectionStrategy, Component, type OnDestroy, type OnInit, ViewEncapsulation, booleanAttribute, computed, effect, inject, input } from '@angular/core';\nimport { MatRipple } from '@angular/material/core';\nimport { hostClass } from '@tstdl/angular/host-class';\nimport { resolveValueOrProvider } from '@tstdl/base/utils';\nimport { fromEntries, objectEntries } from '@tstdl/base/utils/object';\n\nimport { TstdlButtonConfig } from './config';\n\nexport type ButtonDesign = 'flat' | 'outline' | 'icon' | 'icon-outline' | 'none';\nexport type ButtonSize = 'normal' | 'small';\nexport type ButtonColor = 'transparent' | 'white' | 'accent' | 'neutral' | 'stone' | 'red' | 'orange' | 'amber' | 'yellow' | 'lime' | 'green' | 'emerald' | 'teal' | 'cyan' | 'sky' | 'blue' | 'indigo' | 'violet' | 'purple' | 'fuchsia' | 'pink' | 'rose';\n\n@Component({\n  selector: '[tslButton]',\n  imports: [],\n  templateUrl: './button.component.html',\n  styleUrl: './button.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  providers: [MatRipple],\n  host: {\n    '[attr.disabled]': 'disabledAttribute()',\n    '[class.tsl-button-loading]': 'loading()',\n  },\n})\nexport class ButtonComponent implements OnInit, OnDestroy {\n  readonly #ripple = inject(MatRipple);\n  readonly #config = inject(TstdlButtonConfig, { optional: true });\n\n  readonly design = input<ButtonDesign | null | undefined>(null);\n  readonly color = input<ButtonColor | null | undefined>(null);\n  readonly size = input<ButtonSize | null | undefined>(null);\n  readonly coloredText = input<boolean | null | undefined, boolean | `${boolean}` | null | undefined>(null, { transform: booleanAttribute });\n  readonly invertIconPadding = input<boolean, boolean | null | `${boolean}` | undefined>(false, { transform: booleanAttribute });\n  readonly loading = input<boolean, boolean | null | `${boolean}` | '' | undefined>(false, { transform: (value) => (value === '') ? true : booleanAttribute(value) });\n  readonly disabled = input<boolean, boolean | null | `${boolean}` | '' | undefined>(false, { transform: (value) => (value === '') ? true : booleanAttribute(value) });\n  readonly inert = input<boolean, boolean | null | `${boolean}` | '' | undefined>(false, { transform: (value) => (value === '') ? true : booleanAttribute(value) });\n\n  readonly disabledAttribute = computed(() => this.disabled() ? true : null);\n\n  readonly hostClass = hostClass(() => {\n    const design = this.design() ?? resolveValueOrProvider(this.#config?.default?.design) ?? 'flat';\n    const size = this.size() ?? resolveValueOrProvider(this.#config?.default?.size) ?? 'normal';\n    const color = this.color() ?? resolveValueOrProvider(this.#config?.default?.color) ?? 'accent';\n    const coloredText = this.coloredText() ?? resolveValueOrProvider(this.#config?.default?.coloredText) ?? false;\n    const invertIconPadding = this.invertIconPadding();\n    const disabled = this.disabled();\n\n    const small = size == 'small';\n    const useNoneStyle = design == 'none';\n    const useFlatStyle = design == 'flat';\n    const useOutlineStyle = (design == 'outline') || (design == 'icon-outline');\n    const useIconStyle = (design == 'icon') || (design == 'icon-outline');\n\n    const ngClassEntries = objectEntries({\n      [`tsl-button-${color}`]: true,\n      'tsl-button-flat': useFlatStyle,\n      'tsl-button-outline': useOutlineStyle,\n      'tsl-button-icon': useIconStyle,\n      'tsl-button-none': useNoneStyle,\n      'tsl-button-small': small,\n      'tsl-button-colored-text': coloredText,\n      'tsl-button-icon-invert-padding': invertIconPadding,\n    });\n\n    return fromEntries(\n      ngClassEntries\n        .filter(([, classesEnabled]) => classesEnabled)\n        .map(([key, value]) => [disabled ? key.split(' ').filter((k) => !k.includes('hover:')).join(' ') : key, value])\n    );\n  });\n\n  constructor() {\n    effect(() => (this.#ripple.disabled = this.disabled()));\n  }\n\n  ngOnInit(): void {\n    this.#ripple.ngOnInit();\n  }\n\n  ngOnDestroy(): void {\n    this.#ripple.ngOnDestroy();\n  }\n}\n","@if (loading()) {\n  <svg [animate.leave]=\"loading() ? null : 'tsl-loading-svg-leaving'\" class=\"tsl-loading-svg\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n    <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n    <path fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n  </svg>\n}\n\n<ng-content></ng-content>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}