@daffodil/design 0.93.0 → 0.93.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/beacon/README.md +61 -0
- package/beacon/src/beacon-theme.scss +61 -0
- package/fesm2022/daffodil-design-beacon.mjs +48 -0
- package/fesm2022/daffodil-design-beacon.mjs.map +1 -0
- package/fesm2022/daffodil-design-modal.mjs +2 -2
- package/fesm2022/daffodil-design-modal.mjs.map +1 -1
- package/fesm2022/daffodil-design-progress-bar.mjs +2 -2
- package/fesm2022/daffodil-design-progress-bar.mjs.map +1 -1
- package/fesm2022/daffodil-design-sidebar.mjs +2 -2
- package/fesm2022/daffodil-design-sidebar.mjs.map +1 -1
- package/fesm2022/daffodil-design-spinner.mjs +2 -2
- package/fesm2022/daffodil-design-spinner.mjs.map +1 -1
- package/fesm2022/daffodil-design-tag.mjs +29 -21
- package/fesm2022/daffodil-design-tag.mjs.map +1 -1
- package/fesm2022/daffodil-design-toast.mjs +2 -2
- package/fesm2022/daffodil-design-toast.mjs.map +1 -1
- package/fesm2022/daffodil-design.mjs +16 -11
- package/fesm2022/daffodil-design.mjs.map +1 -1
- package/package.json +1 -1
- package/scss/global.scss +4 -0
- package/scss/theme.scss +2 -0
- package/tag/README.md +10 -6
- package/tag/src/tag-theme.scss +100 -3
- package/types/daffodil-design-beacon.d.ts +26 -0
- package/types/daffodil-design-tag.d.ts +20 -12
- package/types/daffodil-design.d.ts +8 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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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"}
|
|
1
|
+
{"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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"}
|
|
@@ -618,7 +618,7 @@ var DaffTheme;
|
|
|
618
618
|
(function (DaffTheme) {
|
|
619
619
|
DaffTheme["Light"] = "light";
|
|
620
620
|
DaffTheme["Dark"] = "dark";
|
|
621
|
-
DaffTheme["
|
|
621
|
+
DaffTheme["System"] = "system";
|
|
622
622
|
})(DaffTheme || (DaffTheme = {}));
|
|
623
623
|
|
|
624
624
|
const mediaQueryDarkPreference = '(prefers-color-scheme: dark)';
|
|
@@ -643,7 +643,7 @@ class DaffOsThemeService {
|
|
|
643
643
|
this.preference$ = this.doc.defaultView?.matchMedia
|
|
644
644
|
? fromEventPattern(addHandlerFactory(this.doc.defaultView), removeHandlerFactory(this.doc.defaultView))
|
|
645
645
|
.pipe(startWith(this.doc.defaultView?.matchMedia(mediaQueryDarkPreference)), map((e) => e.matches), map((prefersDark) => prefersDark ? DaffTheme.Dark : DaffTheme.Light))
|
|
646
|
-
: of(DaffTheme.
|
|
646
|
+
: of(DaffTheme.System);
|
|
647
647
|
}
|
|
648
648
|
/**
|
|
649
649
|
* Get the operating system's theme preference.
|
|
@@ -667,13 +667,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
667
667
|
const THEME_STORAGE_KEY = 'DAFF_THEME';
|
|
668
668
|
const coerceValue = (val) => val === DaffTheme.Dark || val === DaffTheme.Light
|
|
669
669
|
? val
|
|
670
|
-
: DaffTheme.
|
|
670
|
+
: DaffTheme.System;
|
|
671
671
|
/**
|
|
672
672
|
* Generate a StorageEvent
|
|
673
673
|
*/
|
|
674
674
|
const storageEventBuilder = (value) => ({
|
|
675
675
|
key: THEME_STORAGE_KEY,
|
|
676
|
-
newValue: coerceValue(value) !== DaffTheme.
|
|
676
|
+
newValue: coerceValue(value) !== DaffTheme.System ? value : null,
|
|
677
677
|
});
|
|
678
678
|
/**
|
|
679
679
|
* A service for retrieving and managing the application's stored theme.
|
|
@@ -705,7 +705,7 @@ class DaffThemeStorageService {
|
|
|
705
705
|
this.storage.setItem(THEME_STORAGE_KEY, theme);
|
|
706
706
|
}
|
|
707
707
|
removeThemeSetting() {
|
|
708
|
-
this.progressStorageEvent(DaffTheme.
|
|
708
|
+
this.progressStorageEvent(DaffTheme.System);
|
|
709
709
|
this.storage.removeItem(THEME_STORAGE_KEY);
|
|
710
710
|
}
|
|
711
711
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffThemeStorageService, deps: [{ token: DaffServerSafePersistenceServiceToken }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
@@ -729,7 +729,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
729
729
|
* It cascades from `storedPreference` to `osPreference` to `defaultTheme`.
|
|
730
730
|
*/
|
|
731
731
|
const daffComputeThemeSetting = (osPreference, storedPreference, defaultTheme = DaffTheme.Dark) => {
|
|
732
|
-
if (storedPreference) {
|
|
732
|
+
if (storedPreference && storedPreference !== DaffTheme.System) {
|
|
733
733
|
return storedPreference;
|
|
734
734
|
}
|
|
735
735
|
if (osPreference === 'dark') {
|
|
@@ -762,6 +762,13 @@ class DaffThemingService {
|
|
|
762
762
|
getTheme() {
|
|
763
763
|
return this.theme$;
|
|
764
764
|
}
|
|
765
|
+
/**
|
|
766
|
+
* Get the user's stored theme preference. Emits `DaffTheme.System` when no
|
|
767
|
+
* preference is stored and the theme follows the operating system.
|
|
768
|
+
*/
|
|
769
|
+
getThemePreference() {
|
|
770
|
+
return this.themeStorage.getThemeAsObservable();
|
|
771
|
+
}
|
|
765
772
|
/**
|
|
766
773
|
* Set the theme to dark mode.
|
|
767
774
|
*/
|
|
@@ -775,12 +782,10 @@ class DaffThemingService {
|
|
|
775
782
|
this.themeStorage.setTheme(DaffTheme.Light);
|
|
776
783
|
}
|
|
777
784
|
/**
|
|
778
|
-
*
|
|
785
|
+
* Follow the operating system's theme preference by clearing any stored theme.
|
|
779
786
|
*/
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
? this.lightMode()
|
|
783
|
-
: this.darkMode();
|
|
787
|
+
systemMode() {
|
|
788
|
+
this.themeStorage.removeThemeSetting();
|
|
784
789
|
}
|
|
785
790
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffThemingService, deps: [{ token: DaffOsThemeService }, { token: DaffThemeStorageService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
786
791
|
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffThemingService, providedIn: 'root' }); }
|