UNPKG

vue-toastify

Version:

<p align="center">Simple and dependency-free notification plugin.</p>

151 lines (124 loc) 4.77 kB
## <p align="center">🔥Vue Toastify🔥</p> <p align="center">Simple and dependency-free notification plugin.</p> ## Installation ```bash npm i vue-toastify ``` ```ts import { createApp } from 'vue'; import plugin from 'vue-toastify'; // base styles import 'vue-toastify/index.css'; // theme styles import 'vue-toastify/themes/dark.css'; import type { Settings } from 'vue-toastify'; const app = createApp({ }); app.use<Settings>(plugin, { }); app.mount('#app'); ``` [Usage with Nuxt](#usage-with-nuxt) ## Options: - [ToastOptions](src/type.ts#L195) - settings per toast - [Settings](src/type.ts#L113) - global settings (default settings [here](src/composables/useSettings.ts#L7)) - [ToastPluginAPI](src/composables/useToast.ts#L13) - methods available on the `useToast()` composable - [Events](src/composables/useVtEvents.ts#L6) - events emitted by the plugin ## Migration Information In the future `enableHtmlInterpretation` setting will default to `false`. If you rely on that behavior, make sure to enable it in the settings. If you don't want user input treated as html, make sure to set it to `false`. ## Custom styling Styles include a `'dark'`(default) and a `'light'` theme. If you would like to create your own styles you may use the following helpers: ```ts import { createVtTheme, getCssRules } from 'vue-toastify'; // this will create a stylesheet if doesn't exists and insert it into the head createVtTheme('myThemeName', '#8f6b42'); // then you can set the theme of the status or the global settings // alternatively, you can get an array of css rules using getCssRules getCssRules('myThemeName', '#8f6b42').forEach(rule => {...}); // this will give you a good starting point to customise the theme ``` ## Custom notifications You may create some methods on the `useToast()` so it will shortcut any repetition you may have in your app. To register them add a `customNotifications` key to the settings when registering the plugin. ```ts app.use<Settings>(plugin, { customNotifications: { authenticationError: { body: 'Authentication error', // ... rest of the toast options here } } }); // then later you can use it as useToast().authenticationError(); ``` ## Ambient declaration for custom notifications ```ts import type { ToastPluginAPI, CustomMethods } from 'vue-toastify'; declare module 'vue-toastify' { interface MyMethods extends CustomMethods { authenticationError(): string; } function useToast(): ToastPluginAPI & MyMethods; } ``` ## Events The plugin emits events that you can listen to which allows for using callbacks at different points in the toast's lifecycle. ```ts import { useVtEvents, useToast } from 'vue-toastify'; const toast = useToast().success({ body: 'Hello world', canTimeout: true }); useVtEvents().once('vtPaused', payload => { if (payload.id === toast.id) { // do something } }) ``` ### Usage with Nuxt The recommended way to install is by creating a plugin. As notifications are expected to be responses to user actions, we can lazy load the plugin to reduce the initial bundle size. Be sure to familiarise yourself with the [Nuxt plugin documentation](https://nuxt.com/docs/guide/directory-structure/plugins). ```ts // plugins/toast.client.ts // .client will only run the plugin on the client side. import type { Settings } from 'vue-toastify'; export default defineNuxtPlugin({ name: 'toast', // can load the same time as the rest of the plugins parallel: true, setup: nuxt => { // this will lazy load the plugin therefore won't be included in the entry point void import('vue-toastify').then(exports => { nuxt.vueApp.use<Settings>(exports.default, { pauseOnHover: true, theme: 'light', position: 'top-right' }); }); } }); ``` Then specify the auto-imported preset in your configuration. ```ts // nuxt.config.ts export default defineNuxtConfig({ css: [ // required base themes 'vue-toastify/index.css', // include the theme you want to use 'vue-toastify/themes/light.css' // or generate one of your own as described in the custom styling section ], imports: { // this will include the composables that the plugin provides // which is negligable in size compared to the plugin itself presets: [ { from: 'vue-toastify', imports: [ // include only the composables you need auto-imported 'useToast', // 'useVtEvents', // 'useVtSettings' ] } ] }, }) ```