import { CommonModule } from "@angular/common"; import { Component, Input } from "@angular/core"; import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; import { Meta, StoryObj, applicationConfig, moduleMetadata } from "@storybook/angular"; import { action } from "storybook/actions"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { formatArgsForCodeSnippet } from "../../../../.storybook/format-args-for-code-snippet"; import { ButtonModule } from "../button"; import { I18nMockService } from "../utils/i18n-mock.service"; import { ToastComponent } from "./toast.component"; import { BitwardenToastrGlobalConfig, ToastModule } from "./toast.module"; import { ToastOptions, ToastService } from "./toast.service"; const toastServiceExampleTemplate = ` `; // FIXME(https://bitwarden.atlassian.net/browse/CL-764): Migrate to OnPush // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection @Component({ selector: "toast-service-example", template: toastServiceExampleTemplate, imports: [ButtonModule], }) export class ToastServiceExampleComponent { // FIXME(https://bitwarden.atlassian.net/browse/CL-903): Migrate to Signals // eslint-disable-next-line @angular-eslint/prefer-signals @Input() toastOptions?: ToastOptions; constructor(protected toastService: ToastService) {} } export default { title: "Component Library/Toast", component: ToastComponent, decorators: [ moduleMetadata({ imports: [ CommonModule, BrowserAnimationsModule, ButtonModule, ToastModule, ToastServiceExampleComponent, ], }), applicationConfig({ providers: [ ToastModule.forRoot().providers!, { provide: I18nService, useFactory: () => { return new I18nMockService({ close: "Close", success: "Success", error: "Error", warning: "Warning", info: "Info", loading: "Loading", }); }, }, ], }), ], args: { onClose: action("emit onClose"), variant: "info", progressWidth: 50, title: "", message: "Hello Bitwarden!", }, parameters: { design: { type: "figma", url: "https://www.figma.com/design/Zt3YSeb6E6lebAffrNLa0h/Tailwind-Component-Library?node-id=16329-41506&t=b5tDKylm5sWm2yKo-11", }, }, } as Meta; type Story = StoryObj; export const Default: Story = { render: (args) => ({ props: args, template: `
(args)}>
`, }), }; export const Variants: Story = { render: (args) => ({ props: args, template: `
(args)} variant="success"> (args)} variant="info"> (args)} variant="warning"> (args)} variant="error">
`, }), }; /** * Avoid using long messages in toasts. */ export const LongContent: Story = { ...Default, args: { title: "Foo", message: [ "Maecenas commodo posuere quam, vel malesuada nulla accumsan ac.", "Pellentesque interdum ligula ante, eget bibendum ante lacinia congue.", ], }, }; export const Service: Story = { render: (args) => ({ props: { toastOptions: args, }, template: /*html*/ ` `, }), args: { title: "", message: "Hello Bitwarden!", variant: "error", timeout: BitwardenToastrGlobalConfig.timeOut, } as ToastOptions, parameters: { chromatic: { disableSnapshot: true }, docs: { source: { code: toastServiceExampleTemplate, }, }, }, };