{"version":3,"file":"daffodil-design-toast.mjs","sources":["../../../libs/design/toast/src/service/changes-focus.ts","../../../libs/design/toast/src/service/position-strategy.ts","../../../libs/design/toast/src/interfaces/toast-options.ts","../../../libs/design/toast/src/service/position.service.ts","../../../libs/design/toast/src/toast/toast-config.ts","../../../libs/design/toast/src/toast-actions/toast-actions.directive.ts","../../../libs/design/toast/src/toast/toast.component.ts","../../../libs/design/toast/src/toast/toast.component.html","../../../libs/design/toast/src/toast-message/toast-message.directive.ts","../../../libs/design/toast/src/toast-title/toast-title.directive.ts","../../../libs/design/toast/src/toast/toast-template.component.ts","../../../libs/design/toast/src/service/toast.service.ts","../../../libs/design/toast/src/toast/toast-provider.ts","../../../libs/design/toast/src/daffodil-design-toast.ts"],"sourcesContent":["import { DaffToast } from '../interfaces/toast';\n\nexport const daffToastChangesFocus = (toast: DaffToast): boolean => toast.actions?.length > 0;\n","import {\n  GlobalPositionStrategy,\n  PositionStrategy,\n} from '@angular/cdk/overlay';\n\nimport { DaffToastPosition } from '../interfaces/toast-options';\n\nexport const createPositionStrategy = (position: DaffToastPosition): PositionStrategy => {\n  const strat = new GlobalPositionStrategy();\n\n  switch ( position.horizontal ) {\n    case 'left':\n      strat.left('48px');\n      break;\n    case 'right':\n      strat.right('48px');\n      break;\n    case 'center':\n      strat.centerHorizontally();\n      break;\n    default:\n      strat.right('48px');\n  }\n\n  switch(position.vertical) {\n    case 'top':\n      strat.top('80px');\n      break;\n    case 'bottom':\n      strat.bottom('48px');\n      break;\n    default:\n      strat.top('80px');\n  }\n\n  return strat;\n};\n","import { createConfigInjectionToken } from '@daffodil/core';\n\nimport {\n  DaffToastHorizontalPosition,\n  DaffToastVerticalPosition,\n} from '../helpers/toast-position';\n\ntype Without<T, U> = { [P in Exclude<keyof T, keyof U>]?: never };\ntype XOR<T, U> = (T | U) extends Record<string,unknown> ? (Without<T, U> & U) | (Without<U, T> & T) : T | U;\n\nexport interface DaffToastVerticalPositionInterface {\n  vertical: DaffToastVerticalPosition;\n};\n\nexport interface DaffToastHorizontalPositionInterface {\n  horizontal: DaffToastHorizontalPosition;\n};\n\nexport type DaffToastPosition = DaffToastVerticalPositionInterface & DaffToastHorizontalPositionInterface;\n\nexport interface DaffToastOptions {\n  /**\n   * The position of all toasts.\n   */\n  position: DaffToastPosition;\n\n  /**\n   * @docs-private\n   */\n  useParent?: boolean;\n}\n\nexport const daffToastDefaultOptions: DaffToastOptions = {\n  position: {\n    vertical: 'top',\n    horizontal: 'right',\n  },\n  useParent: true,\n};\n\nexport const {\n  token: DAFF_TOAST_OPTIONS,\n  provider: provideDaffToastOptions,\n} = createConfigInjectionToken<DaffToastOptions>(daffToastDefaultOptions, 'DAFF_TOAST_OPTIONS');\n","import { BreakpointObserver } from '@angular/cdk/layout';\nimport {\n  Inject,\n  Injectable,\n} from '@angular/core';\n\nimport { DaffBreakpoints } from '@daffodil/design';\n\nimport {\n  DAFF_TOAST_OPTIONS,\n  DaffToastOptions,\n  DaffToastPosition,\n} from '../interfaces/toast-options';\n\n@Injectable()\nexport class DaffToastPositionService {\n\n  constructor(@Inject(DAFF_TOAST_OPTIONS) private options: DaffToastOptions, private mediaQuery: BreakpointObserver) {\n    this._config = options.position;\n  }\n\n  private _config: DaffToastPosition;\n  private _position: DaffToastPosition;\n\n  /**\n   * Reads the current position of the toast. Defaults to bottom center on mobile devices.\n   */\n  get config(): DaffToastPosition {\n    return this.mediaQuery.isMatched(DaffBreakpoints.MOBILE)\n      ? this._position ?? this._config\n      : <DaffToastPosition>{ vertical: 'bottom', horizontal: 'center' };\n  }\n\n  private set config(val: DaffToastPosition) {\n    this._config = val;\n  }\n\n  /**\n   * Changes the position of the toast.\n   *\n   * @param position The position of the toast.\n   */\n  setPosition(position: DaffToastPosition) {\n    this._position = position;\n  }\n}\n","/**\n * Defines optional settings that control the behavior of a toast.\n */\nexport interface DaffToastConfiguration {\n  /**\n   * The duration (in milliseconds) the toast remains visible before dismissal. By default, toasts without actions are dismissed after `5000ms`.\n   *\n   * While a duration can be set for actionable toasts, it is not recommended since\n   * users should have sufficient time to interact with the actions.\n   *\n   *\n   * @usage\n   * ```\n   * export class CustomComponent {\n   *   private toast: DaffToast;\n   *\n   *   constructor(private toastService: DaffToastService) {}\n   *\n   *   open() {\n   *     this.toast = this.toastService.open({\n   *       title: 'Update Complete',\n   *       message: 'This page has been updated to the newest version.',\n   *       status: 'success',\n   *     },\n   *     {\n   *       duration: 7000,\n   *     });\n   *   }\n   * }\n   * ```\n   */\n  duration?: number;\n}\n\nexport const daffDefaultToastConfiguration: DaffToastConfiguration = {};\n","/* eslint-disable quote-props */\nimport { Directive } from '@angular/core';\n\n@Directive({\n  selector: '[daffToastActions]',\n  host: {\n    'class': 'daff-toast__actions',\n  },\n})\n\nexport class DaffToastActionsDirective {}\n","/* eslint-disable quote-props */\nimport {\n  ConfigurableFocusTrap,\n  ConfigurableFocusTrapFactory,\n} from '@angular/cdk/a11y';\nimport {\n  Component,\n  ElementRef,\n  ContentChild,\n  ViewEncapsulation,\n  ChangeDetectionStrategy,\n  AfterViewInit,\n  AfterContentInit,\n  Input,\n  OnDestroy,\n} from '@angular/core';\n\nimport {\n  DaffArticleEncapsulatedDirective,\n  DaffFocusStackService,\n  DaffPrefixDirective,\n  DaffStatusableDirective,\n} from '@daffodil/design';\n\nimport { DaffToast } from '../interfaces/toast';\nimport { daffToastChangesFocus } from '../service/changes-focus';\nimport { DaffToastActionsDirective } from '../toast-actions/toast-actions.directive';\n\n/**\n * @docs-private\n *\n * DaffToastComponent provides a way to display and\n * communicate information for user actions or system updates.\n */\n@Component({\n  selector: 'daff-toast',\n  templateUrl: './toast.component.html',\n  styleUrls: ['./toast.component.scss'],\n  hostDirectives: [\n    { directive: DaffArticleEncapsulatedDirective },\n    {\n      directive: DaffStatusableDirective,\n      inputs: ['status'],\n    },\n  ],\n  host: {\n    'class': 'daff-toast',\n    '(keydown.escape)': 'onEscape()',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DaffToastComponent implements AfterContentInit, AfterViewInit, OnDestroy {\n  /**\n   * @docs-private\n   */\n  @ContentChild(DaffToastActionsDirective) _actions: DaffToastActionsDirective;\n\n  /**\n   * @docs-private\n   */\n  @ContentChild(DaffPrefixDirective) _prefix: DaffPrefixDirective;\n\n  @Input() toast: DaffToast;\n\n  /**\n   * @docs-private\n   */\n  onEscape() {\n    this.toast.dismiss();\n  }\n\n  private _focusTrap: ConfigurableFocusTrap;\n\n  constructor(\n    private _elementRef: ElementRef,\n    private _focusTrapFactory: ConfigurableFocusTrapFactory,\n    private _focusStack: DaffFocusStackService,\n  ) {\n  }\n\n  /**\n   * @docs-private\n   */\n  ngAfterContentInit() {\n    if(daffToastChangesFocus(this.toast)) {\n      this._focusTrap = this._focusTrapFactory.create(\n        this._elementRef.nativeElement,\n      );\n    }\n  }\n\n  /**\n   * @docs-private\n   */\n  ngAfterViewInit() {\n    if(daffToastChangesFocus(this.toast)) {\n      this._focusStack.push();\n      this._focusTrap.focusFirstTabbableElementWhenReady();\n    }\n  }\n\n  /**\n   * @docs-private\n   */\n  ngOnDestroy() {\n    if(daffToastChangesFocus(this.toast)) {\n      this._focusTrap.destroy();\n    }\n  }\n}\n","@if (_prefix) {\n  <ng-content select=\"[daffPrefix]\"></ng-content>\n}\n<div class=\"daff-toast__details\">\n  <div class=\"daff-toast__content\">\n    <ng-content select=\"[daffToastTitle]\"></ng-content>\n    <ng-content select=\"[daffToastMessage]\"></ng-content>\n  </div>\n  <ng-content select=\"[daffToastActions]\"></ng-content>\n</div>\n<ng-content></ng-content>\n","/* eslint-disable quote-props */\nimport { Directive } from '@angular/core';\n\n@Directive({\n  selector: '[daffToastMessage]',\n  host: {\n    'class': 'daff-toast__message',\n  },\n})\n\nexport class DaffToastMessageDirective {}\n","/* eslint-disable quote-props */\nimport { Directive } from '@angular/core';\n\n@Directive({\n  selector: '[daffToastTitle]',\n  host: {\n    'class': 'daff-toast__title',\n  },\n})\n\nexport class DaffToastTitleDirective {}\n","import {\n  NgTemplateOutlet,\n  SlicePipe,\n} from '@angular/common';\nimport {\n  Input,\n  ChangeDetectionStrategy,\n  Component,\n  ChangeDetectorRef,\n  Inject,\n  Output,\n  EventEmitter,\n} from '@angular/core';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\n\nimport { DAFF_BUTTON_COMPONENTS } from '@daffodil/design/button';\n\nimport { DaffToastComponent } from './toast.component';\nimport { DaffToast } from '../interfaces/toast';\nimport {\n  DaffToastOptions,\n  DAFF_TOAST_OPTIONS,\n} from '../interfaces/toast-options';\nimport { DaffToastPositionService } from '../service/position.service';\nimport { DaffToastActionsDirective } from '../toast-actions/toast-actions.directive';\nimport { DaffToastMessageDirective } from '../toast-message/toast-message.directive';\nimport { DaffToastTitleDirective } from '../toast-title/toast-title.directive';\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    @for (item of items | slice:0:3; track item) {\n      <daff-toast\n        [toast]=\"item\"\n        [status]=\"item.status ?? null\"\n        (closeToast)=\"item.dismiss()\"\n        [class]=\"'slide-in-' + getAnimationDirection()\"\n        [attr.role]=\"item.actions ? 'alertdialog' : 'status'\"\n        [attr.aria-labelledby]=\"item.actions ? item.title : undefined\"\n        [attr.aria-describedby]=\"item.actions ? item.message : undefined\">\n        <div daffToastTitle>{{ item.title }}</div>\n        <div daffToastMessage>{{ item.message }}</div>\n        @if (item.actions) {\n          <div daffToastActions>\n            @for (action of item.actions; track action) {\n              <ng-container *ngTemplateOutlet=\"button;context:{ action, item }\"></ng-container>\n            }\n          </div>\n        }\n        @if (item.dismissible) {\n          <button daff-icon-button color=\"theme-contrast\"\n            aria-label=\"Close\"\n            [attr.aria-hidden]=\"item.actions ? undefined : true\"\n            (click)=\"item.dismiss()\">\n            <fa-icon [icon]=\"faTimes\" [fixedWidth]=\"true\"></fa-icon>\n          </button>\n        }\n      </daff-toast>\n    }\n\n    <ng-template #button let-action=\"action\" let-item=\"item\">\n      @switch (action.type) {\n        @case ('stroked') {\n          <button type=\"button\" daff-stroked-button\n            [status]=\"action.status\"\n            [color]=\"action.color\"\n            [size]=\"action.size\"\n            [attr.aria-label]=\"action.content\"\n            (click)=\"action.eventEmitter?.emit({ event: $event, action})\">\n              {{ action.content }}\n          </button>\n        }\n        @case ('flat') {\n          <button type=\"button\" daff-flat-button\n            [status]=\"action.status\"\n            [color]=\"action.color\"\n            [size]=\"action.size\"\n            [attr.aria-label]=\"action.content\"\n            (click)=\"action.eventEmitter?.emit({ event: $event, action})\">\n              {{ action.content }}\n          </button>\n        }\n        @case ('underline') {\n          <button type=\"button\" daff-underline-button\n            [status]=\"action.status\"\n            [color]=\"action.color\"\n            [size]=\"action.size\"\n            [attr.aria-label]=\"action.content\"\n            (click)=\"action.eventEmitter?.emit({ event: $event, action})\">\n              {{ action.content }}\n          </button>\n        }\n        @default {\n          <button type=\"button\" daff-button\n            [status]=\"action.status\"\n            [color]=\"action.color\"\n            [size]=\"action.size\"\n            [attr.aria-label]=\"action.content\"\n            (click)=\"action.eventEmitter?.emit({ event: $event, action})\">\n              {{ action.content }}\n          </button>\n        }\n      }\n    </ng-template>\n  `,\n  imports: [\n    DAFF_BUTTON_COMPONENTS,\n    DaffToastComponent,\n    DaffToastActionsDirective,\n    DaffToastTitleDirective,\n    DaffToastMessageDirective,\n    FaIconComponent,\n    SlicePipe,\n    NgTemplateOutlet,\n  ],\n})\nexport class DaffToastTemplateComponent {\n  faTimes = faTimes;\n\n  private _items: DaffToast[] = [];\n\n  constructor(\n    private cd: ChangeDetectorRef,\n    @Inject(DAFF_TOAST_OPTIONS)\n    private options: DaffToastOptions,\n    private toastPosition: DaffToastPositionService,\n  ) { }\n\n  @Output() closeToast: EventEmitter<void> = new EventEmitter();\n\n  onCloseToast(event: Event) {\n    this.closeToast.emit();\n  }\n\n  getAnimationDirection(): string {\n    const position = this.toastPosition.config.horizontal + '-' + this.toastPosition.config.vertical;\n\n    switch (position) {\n      case 'left-top':\n      case 'left-bottom':\n        return 'left';\n      case 'right-top':\n      case 'right-bottom':\n        return 'right';\n      case 'center-top':\n        return 'top';\n      case 'center-bottom':\n        return 'bottom';\n      default:\n        return 'left';\n    }\n  }\n\n  @Input()\n  get items(): DaffToast[] {\n    return this._items;\n  }\n  set items(value: DaffToast[]) {\n    this._items = value;\n    this.cd.markForCheck();\n  }\n}\n","import { BreakpointObserver } from '@angular/cdk/layout';\nimport {\n  Overlay,\n  OverlayRef,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n  ComponentRef,\n  EventEmitter,\n  Inject,\n  Injectable,\n  Injector,\n  OnDestroy,\n  Optional,\n  SkipSelf,\n} from '@angular/core';\nimport {\n  EMPTY,\n  merge,\n  of,\n  Subscription,\n} from 'rxjs';\nimport {\n  delay,\n  filter,\n  map,\n  take,\n  tap,\n} from 'rxjs/operators';\n\nimport {\n  DaffBreakpoints,\n  DaffFocusStackService,\n} from '@daffodil/design';\n\nimport { daffToastChangesFocus } from './changes-focus';\nimport { createPositionStrategy } from './position-strategy';\nimport { DaffToastPositionService } from './position.service';\nimport {\n  DaffToast,\n  DaffToastData,\n} from '../interfaces/toast';\nimport {\n  DAFF_TOAST_OPTIONS,\n  DaffToastOptions,\n} from '../interfaces/toast-options';\nimport {\n  daffDefaultToastConfiguration,\n  DaffToastConfiguration,\n} from '../toast/toast-config';\nimport { DaffToastTemplateComponent } from '../toast/toast-template.component';\n\n/**\n * Service to display toasts.\n *\n * @example\n * ```ts\n * import {\n *   ChangeDetectionStrategy,\n *   Component,\n *   EventEmitter,\n *   OnInit,\n * } from '@angular/core';\n *\n * import {\n *   DaffToast,\n *   DaffToastAction,\n *   DaffToastService,\n * } from '@daffodil/design/toast';\n *\n * @Component({\n *   selector: 'default-toast',\n *   templateUrl: './default-toast.component.html',\n *   styles: [],\n *   changeDetection: ChangeDetectionStrategy.OnPush,\n * })\n * export class DefaultToastComponent implements OnInit {\n *   private toast: DaffToast;\n *\n *   constructor(private toastService: DaffToastService) {}\n *\n *   closeToast = new EventEmitter<DaffToastAction>();\n *\n *   open() {\n *     this.toast = this.toastService.open({\n *       title: 'Update Available',\n *       message: 'A new version of this page is available.',\n *       actions: [\n *         { content: 'Remind me later', type: 'flat', size: 'sm', eventEmitter: this.closeToast },\n *       ],\n *     });\n *   }\n *\n *   ngOnInit() {\n *     this.closeToast.subscribe(() => {\n *       this.toastService.close(this.toast);\n *     });\n *   }\n * }\n * ```\n */\n@Injectable()\nexport class DaffToastService implements OnDestroy {\n\n  private _sub: Subscription;\n\n  private _toasts: DaffToast[] = [];\n\n  private _overlayRef?: OverlayRef;\n\n  private _template?: ComponentRef<DaffToastTemplateComponent>;\n\n  constructor(\n    private overlay: Overlay,\n    @Inject(DAFF_TOAST_OPTIONS) private options: DaffToastOptions,\n    @Optional() @SkipSelf() private _parentToast: DaffToastService,\n    private mediaQuery: BreakpointObserver,\n    private toastPosition: DaffToastPositionService,\n    private focusStack: DaffFocusStackService,\n    private injector: Injector,\n  ) {\n    this._sub = this.mediaQuery.observe(DaffBreakpoints.MOBILE).pipe(\n      filter(() => this._overlayRef !== undefined),\n      map((position) => createPositionStrategy(this.toastPosition.config)),\n      tap((strategy) => this._overlayRef.updatePositionStrategy(strategy)),\n    ).subscribe();\n  }\n\n  /**\n   * @docs-private\n   */\n  ngOnDestroy(): void {\n    this._sub.unsubscribe();\n  }\n\n  private _attachToastTemplate(\n    overlayRef: OverlayRef,\n  ): ComponentRef<DaffToastTemplateComponent> {\n    const template = overlayRef.attach(new ComponentPortal(DaffToastTemplateComponent, null, this.injector));\n    return template;\n  }\n\n  private _createOverlayRef(): OverlayRef {\n    return this.overlay.create({\n      hasBackdrop: false,\n      scrollStrategy: this.overlay.scrollStrategies.noop(),\n      positionStrategy: createPositionStrategy(this.toastPosition.config),\n    });\n  }\n\n  /**\n   * Opens a toast.\n   *\n   * @param toast Data that can be shown on a toast.\n   * @param configuration Additional configuration options such as duration. The default duration is set to `5000ms`.\n   */\n  open(\n    toast: DaffToastData,\n    configuration?: Partial<DaffToastConfiguration>,\n  ): DaffToast {\n    if(this._parentToast && this.options.useParent) {\n      return this._parentToast.open(toast, configuration);\n    }\n\n    const config: DaffToastConfiguration = {\n      ...daffDefaultToastConfiguration,\n      // sets the default duration to 5000ms if a toast does not have actions\n      duration: toast.actions?.length > 0 ? undefined : 5000,\n      ...configuration,\n    };\n    if(this._toasts.length === 0) {\n      this._overlayRef = this._createOverlayRef();\n      this._template = this._attachToastTemplate(this._overlayRef);\n    }\n    const dismissEvent = new EventEmitter<void>();\n    const _toastPlus: DaffToast = {\n      dismissible: true,\n      ...toast,\n      dismiss: () => {\n        dismissEvent.emit();\n      },\n      dismissalStream: merge(\n        config.duration ? of(undefined).pipe(delay(config.duration)) : EMPTY,\n        dismissEvent,\n      ).pipe(\n        take(1),\n      ),\n    };\n\n    _toastPlus.dismissalStream.subscribe(() => {\n      this.close(_toastPlus);\n    });\n\n    this._toasts = [\n      _toastPlus,\n      ...this._toasts,\n    ];\n\n    this._template.instance.items = this._toasts;\n\n    return _toastPlus;\n  }\n\n  /**\n   * Closes a toast.\n   *\n   * @param toast The instance of toast that you wish to close.\n   */\n  close(toast: DaffToast): void {\n    if(this._parentToast && this.options.useParent) {\n      this._parentToast.close(toast);\n      return;\n    }\n\n    if(daffToastChangesFocus(toast)) {\n      this.focusStack.pop();\n    }\n\n    const index = this._toasts.indexOf(toast);\n    if (index === -1) {\n      throw new Error(\n        'The Toast that you are trying to remove does not exist.',\n      );\n    }\n\n    this._toasts = this._toasts.filter(m => m !== toast);\n    this._template.instance.items = [...this._toasts];\n\n    if(this._toasts.length === 0) {\n      this._overlayRef.dispose();\n      this._template.destroy();\n      this._overlayRef = undefined;\n      this._template = undefined;\n    }\n  }\n}\n","import { Provider } from '@angular/core';\n\nimport {\n  daffToastDefaultOptions,\n  DaffToastOptions,\n  provideDaffToastOptions,\n} from '../interfaces/toast-options';\nimport { DaffToastPositionService } from '../service/position.service';\nimport { DaffToastService } from '../service/toast.service';\n\n/**\n * Registers the `DaffToastService` for displaying a toast. This provider ensures\n * toasts function correctly within your application.\n *\n * ```ts\n * import { provideDaffToast } from '@daffodil/design/toast';\n *\n * @NgModule({\n * \tproviders: [\n *    provideDaffToast({\n *      position: {\n *        vertical: 'bottom',\n *        horizontal: 'left',\n *      },\n *    }),\n *  ]\n * )}\n *\n * export class AppModule {}\n * ```\n * @param config Sets the configuration for all toasts.\n * Toasts are displayed in the top-right corner of the screen by default on desktop devices.\n *\n * On mobile devices, toasts will always appear in the bottom-center position,\n * regardless of configuration settings.\n *\n */\nexport const provideDaffToast = (config: DaffToastOptions = daffToastDefaultOptions): Provider[] => [\n  DaffToastService,\n  DaffToastPositionService,\n  provideDaffToastOptions(config),\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i1.DaffToastPositionService","i2","i3.DaffToastPositionService","i4"],"mappings":"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"}