{"version":3,"file":"talenra-ngx-base-message.mjs","sources":["../../../projects/ngx-base/message/src/message/message.types.ts","../../../projects/ngx-base/message/src/message/message.component.ts","../../../projects/ngx-base/message/src/message/message.component.html","../../../projects/ngx-base/message/talenra-ngx-base-message.ts"],"sourcesContent":["import { MessageComponent } from './message.component';\n\n/**\n * Values accepted by `Message`'s `level` property.\n *\n * ```html\n * <talenra-message text=\"My message\" level=\"success\"></talenra-message>\n * ```\n *\n * ### Import\n *\n * ```typescript\n * import { MessageLevel } from '@talenra/ngx-base/message';\n * ```\n *\n * @see {@link MessageComponent}\n */\nexport const MessageLevel = {\n  Info: 'info',\n  Error: 'error',\n  Success: 'success',\n  Warning: 'warning',\n} as const;\n\n/**\n * Type of values accepted by the`Message`'s `level` property.\n *\n * ### Import\n *\n * ```typescript\n * import { TMessageLevel } from '@talenra/ngx-base/message';\n * ```\n *\n * @see {@link MessageComponent}\n */\nexport type TMessageLevel = (typeof MessageLevel)[keyof typeof MessageLevel];\n\n/**\n * Values accepted by `Message`'s `size` property.\n *\n * ```html\n * <talenra-message text=\"My message\" size=\"s\"></talenra-message>\n * ```\n *\n * ### Import\n *\n * ```typescript\n * import { MessageSize } from '@talenra/ngx-base/message';\n * ```\n *\n * @see {@link MessageComponent}\n */\nexport const MessageSize = {\n  S: 's',\n  M: 'm',\n} as const;\n\n/**\n * Type of values accepted by the`Message`'s `size` property.\n *\n * ### Import\n *\n * ```typescript\n * import { TMessageSize } from '@talenra/ngx-base/message';\n * ```\n *\n * @see {@link MessageComponent}\n */\nexport type TMessageSize = (typeof MessageSize)[keyof typeof MessageSize];\n\n/**\n * Values accepted by `Message`'s `kind` property.\n *\n * ```html\n * <talenra-message text=\"My message\" kind=\"ghost\"></talenra-message>\n * ```\n *\n * ### Import\n *\n * ```typescript\n * import { MessageKind } from '@talenra/ngx-base/message';\n * ```\n *\n * @see {@link MessageComponent}\n */\nexport const MessageKind = {\n  Default: 'default',\n  Ghost: 'ghost',\n} as const;\n\n/**\n * Type of values accepted by the`Message`'s `kind` property.\n *\n * ### Import\n *\n * ```typescript\n * import { TMessageKind } from '@talenra/ngx-base/message';\n * ```\n *\n * @see {@link MessageComponent}\n */\nexport type TMessageKind = (typeof MessageKind)[keyof typeof MessageKind];\n\n/**\n * Event emitted when Message is removed.\n */\nexport interface MessageRemove {\n  /** Reference to the emitting Message component */\n  source: MessageComponent;\n  /** Identifier of the emitting Message component (if provided) */\n  identifier: string;\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  OnDestroy,\n  booleanAttribute,\n  computed,\n  input,\n  output,\n} from '@angular/core';\nimport { IconComponent } from '@talenra/ngx-base/icons';\nimport { ButtonComponent } from '@talenra/ngx-base/button';\nimport { CopyContentButtonComponent } from '@talenra/ngx-base/copy-content';\nimport {\n  MessageKind,\n  MessageLevel,\n  MessageRemove,\n  MessageSize,\n  TMessageKind,\n  TMessageLevel,\n  TMessageSize,\n} from './message.types';\n\n/**\n * Maps message-type to icon\n *\n * @internal\n */\nconst typeToIcon: { [key in TMessageLevel]: string } = {\n  [MessageLevel.Error]: 'highlight-off',\n  [MessageLevel.Success]: 'task-alt',\n  [MessageLevel.Warning]: 'warning',\n  [MessageLevel.Info]: 'info',\n};\n\n/**\n * Duration from when fade-out starts until Message is visually removed.\n *\n * @internal\n */\nconst REMOVAL_DURATION: number = 0.4;\n\n/**\n * Displays a user message with an icon and a text. Comes in diferent flavours, sizes and styles.\n *\n * - Level: success, error, warning and info (default)\n * - Size: s and m (default)\n * - Kind: default (default) and ghost (transparent background)\n *\n * Basic usage:\n *\n * ```html\n * <talenra-message text=\"My user message\"></talenra-message>\n * ```\n *\n * Formatted content:\n *\n * ```html\n * <talenra-message level=\"success\"><strong>Congrats!</strong> You made it.</talenra-message>\n * ````\n *\n * ### Import\n *\n * ```typescript\n * import { MessageComponent } from '@talenra/ngx-base/message';\n * ```\n *\n * <example-url>../../#/message</example-url>\n */\n@Component({\n  selector: 'talenra-message',\n  templateUrl: './message.component.html',\n  styleUrls: ['./message.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '[class.fade-out]': 'fadeOut',\n    '[class.removed]': 'removed',\n    '[class.is-expanded]': 'expanded',\n    '[class]': 'hostClass',\n  },\n  imports: [IconComponent, ButtonComponent, CopyContentButtonComponent],\n})\nexport class MessageComponent implements OnDestroy {\n  /**\n   * Unique identifier provided by the parent component. Used to track the message in environments with multiple\n   * Message instances.\n   *\n   * If you rely on a single/static Message instance or if you do not allow users do dismiss messages (using the\n   * `dismissible` input property) you might not need an identifier.\n   */\n  identifier = input<string>('');\n\n  /**\n   * Defines the message level: info (default), error, success or warning.\n   *\n   * ```html\n   * <talenra-message text=\"My message\" level=\"success\"></talenra-message>\n   * ```\n   */\n  level = input<TMessageLevel>(MessageLevel.Info);\n\n  /**\n   * Size of the message displayed.\n   *\n   * ```html\n   * <talenra-message text=\"My message\" size=\"s\"></talenra-message>\n   * ```\n   */\n  size = input<TMessageSize>(MessageSize.M);\n\n  /**\n   * Kind of the message displayed. Determinates the style of the Message.\n   *\n   * ```html\n   * <talenra-message text=\"My message\" kind=\"ghost\"></talenra-message>\n   * ```\n   */\n  kind = input<TMessageKind>(MessageKind.Default);\n\n  /**\n   * Message text displayed to the user.\n   *\n   * ```html\n   * <talenra-message text=\"My message\"></talenra-message>\n   * ```\n   */\n  text = input<string>('');\n\n  /**\n   * Optional description displayed in accordion. Description is hidden by default and can by expanded by the user. It\n   * is typically used to give the user extra information. Use description to keep the message text concise without\n   * compromising content.\n   *\n   * ```html\n   * <talenra-message text=\"My message\" description=\"My user-expandable description.\"></talenra-message>\n   * ```\n   */\n  description = input<string>('');\n\n  /**\n   * Determines whether Message can be dismissed by the user. If set, the close button is shown.\n   *\n   * ```html\n   * <talenra-message text=\"My message\" dismissible></talenra-message>\n   * ```\n   */\n  dismissible = input(false, { transform: booleanAttribute });\n\n  /**\n   * Event emitted when Message is removed. Removal is triggered if the user dismisses the message, after the fade-out\n   * animation is completed.\n   *\n   * Returns a reference to the emitting Message instance and its identifier (if provided).\n   *\n   * ```html\n   * <talenra-message [identifier]=\"message.identifier\" [text]=\"message.text\" (removed)=\"onRemoved($event)\"></talenra-message>\n   * ```\n   *\n   * @see {@link MessageRemove}\n   */\n  removeMessage = output<MessageRemove>();\n\n  /**\n   * Determines whether Message is about to be removed. Triggers fade-out animation if set true.\n   */\n  protected fadeOut: boolean = false;\n\n  /**\n   * Determines whether Message is removed. Sets the template to `display: none`.\n   */\n  protected removed: boolean = false;\n\n  /**\n   * Determines whether Message is expanded (description visible).\n   */\n  protected expanded: boolean = false;\n\n  /**\n   * Set classname based on input properties.\n   */\n  private get hostClass(): string {\n    return computed<string>(() =>\n      [\n        `level--${this.level()}`,\n        `size--${this.size()}`,\n        `kind--${this.kind()}`,\n        this.dismissible() ? 'dismissible' : '',\n        this.description() ? 'has-description' : '',\n      ].join(' ')\n    )();\n  }\n\n  /** Return type-based icon name */\n  protected mappedIcon = computed<string>(() => {\n    return typeToIcon[this.level()];\n  });\n\n  // Timeout reference\n  private removeTimeout: number | null = null;\n\n  /** Remove the message */\n  protected remove(): void {\n    this.fadeOut = true;\n    this.removeTimeout = window.setTimeout(() => {\n      this.removed = true;\n      this.removeMessage.emit({ source: this, identifier: this.identifier() });\n      this.removeTimeout = null;\n    }, REMOVAL_DURATION * 1000);\n  }\n\n  /** Toggle description */\n  protected toggle(): void {\n    this.expanded = !this.expanded;\n  }\n\n  /**\n   * Clear timeout on destroy. Prevents \"Error: NG0953: Unexpected emit for destroyed `OutputRef`. The owning\n   * directive/component is destroyed.\"\n   *\n   * @internal\n   */\n  ngOnDestroy(): void {\n    if (this.removeTimeout !== null) {\n      window.clearTimeout(this.removeTimeout);\n      this.removeTimeout = null;\n    }\n  }\n}\n","<div class=\"head\">\n  <talenra-icon class=\"icon\" [name]=\"mappedIcon()\" aria-hidden=\"true\" />\n  <span class=\"text\">\n    {{ text() }}\n    <ng-content />\n  </span>\n  @if (dismissible() || description()) {\n    <div class=\"buttons\">\n      @if (description()) {\n        <button\n          talenra-button\n          size=\"s\"\n          kind=\"ghost\"\n          [icon]=\"expanded ? 'expand-less' : 'expand-more'\"\n          (click)=\"toggle()\"\n          data-testid=\"toggle\"></button>\n      }\n      @if (dismissible()) {\n        <button talenra-button size=\"s\" kind=\"ghost\" icon=\"close\" (click)=\"remove()\"></button>\n      }\n    </div>\n  }\n</div>\n\n@if (description()) {\n  <div class=\"body\">\n    <div class=\"inner\">\n      <p class=\"description\">{{ description() }}</p>\n      <talenra-copy-content-button class=\"copy-content\" [toCopy]=\"text() + '\\r\\n\\r\\n' + description()\" position=\"west\" />\n    </div>\n  </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}