diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index d686abb..ecad428 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -58,6 +58,7 @@ function getComponents() { function getUtils() { return [ { text: 'Flowbite Themable', link: '/components/flowbiteThemable/flowbiteThemable.md' }, + { text: 'ToastProvider', link: '/components/toastProvider/toastProvider.md' }, ] } diff --git a/docs/.vitepress/theme/index.js b/docs/.vitepress/theme/index.js index 881b43c..6feeb02 100644 --- a/docs/.vitepress/theme/index.js +++ b/docs/.vitepress/theme/index.js @@ -4,4 +4,12 @@ import DefaultTheme from 'vitepress/theme' import './clear.css' -export default DefaultTheme +import { TransitionGroup } from "vue"; + +export default { + ...DefaultTheme, + enhanceApp({ app, router, siteData }) { + // strange thing, but there is no global transition-group component inside vitepress app + app.component('TransitionGroup', TransitionGroup) + } +} diff --git a/docs/components/toast/toast.md b/docs/components/toast/toast.md index b806a4f..c585975 100644 --- a/docs/components/toast/toast.md +++ b/docs/components/toast/toast.md @@ -4,6 +4,7 @@ import ToastClosableExample from './examples/ToastClosableExample.vue'; import ToastIconExample from './examples/ToastIconExample.vue'; import ToastDivideExample from './examples/ToastDivideExample.vue'; import ToastMessageExample from './examples/ToastMessageExample.vue'; +import ToastProviderExample from './examples/ToastProviderExample.vue'; import ToastInteractiveExample from './examples/ToastInteractiveExample.vue' # Toast @@ -176,3 +177,6 @@ import { Toast } from 'flowbite-vue' ``` + +--- + diff --git a/docs/components/toastProvider/examples/ToastProviderExample.vue b/docs/components/toastProvider/examples/ToastProviderExample.vue new file mode 100644 index 0000000..7aab2d7 --- /dev/null +++ b/docs/components/toastProvider/examples/ToastProviderExample.vue @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/docs/components/toastProvider/examples/ToastProviderExampleChild.vue b/docs/components/toastProvider/examples/ToastProviderExampleChild.vue new file mode 100644 index 0000000..1288081 --- /dev/null +++ b/docs/components/toastProvider/examples/ToastProviderExampleChild.vue @@ -0,0 +1,33 @@ + + + + + add('success')" color="green">success + add('warning')" color="yellow">warning + add('danger')" color="red">danger + + + remove + + + + diff --git a/docs/components/toastProvider/toastProvider.md b/docs/components/toastProvider/toastProvider.md new file mode 100644 index 0000000..0b1be30 --- /dev/null +++ b/docs/components/toastProvider/toastProvider.md @@ -0,0 +1,6 @@ + +# Toast provider + + diff --git a/package.json b/package.json index 8bb14b5..1b6e95c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "flowbite-vue", - "version": "0.0.3", + "version": "0.0.4", "repository": "https://github.com/themesberg/flowbite-vue.git", "author": "themesberg", "license": "MIT", diff --git a/src/components/Toast/Toast.vue b/src/components/Toast/Toast.vue index 2653108..f47cf52 100644 --- a/src/components/Toast/Toast.vue +++ b/src/components/Toast/Toast.vue @@ -23,7 +23,7 @@ diff --git a/src/components/Toast/components/ToastProvider/ToastProvider.css b/src/components/Toast/components/ToastProvider/ToastProvider.css new file mode 100644 index 0000000..48177ac --- /dev/null +++ b/src/components/Toast/components/ToastProvider/ToastProvider.css @@ -0,0 +1,9 @@ +.list-enter-active, +.list-leave-active { + transition: all 0.5s ease; +} +.list-enter-from, +.list-leave-to { + opacity: 0; + transform: translateX(30px); +} diff --git a/src/components/Toast/components/ToastProvider/ToastProvider.vue b/src/components/Toast/components/ToastProvider/ToastProvider.vue new file mode 100644 index 0000000..fba3550 --- /dev/null +++ b/src/components/Toast/components/ToastProvider/ToastProvider.vue @@ -0,0 +1,79 @@ + + diff --git a/src/components/Toast/components/ToastProvider/composables/useToast.ts b/src/components/Toast/components/ToastProvider/composables/useToast.ts new file mode 100644 index 0000000..c268f7e --- /dev/null +++ b/src/components/Toast/components/ToastProvider/composables/useToast.ts @@ -0,0 +1,3 @@ +export function useToast() { + return '' +} diff --git a/src/components/Toast/components/ToastProvider/injection/config.ts b/src/components/Toast/components/ToastProvider/injection/config.ts new file mode 100644 index 0000000..3e8e0e8 --- /dev/null +++ b/src/components/Toast/components/ToastProvider/injection/config.ts @@ -0,0 +1 @@ +export const FLOWBITE_TOAST_INJECTION_KEY = 'flowbite-toast-injection-key' diff --git a/src/components/Toast/components/ToastProvider/types.ts b/src/components/Toast/components/ToastProvider/types.ts new file mode 100644 index 0000000..9ecaf0a --- /dev/null +++ b/src/components/Toast/components/ToastProvider/types.ts @@ -0,0 +1,14 @@ +import type { ToastType } from '@/components/Toast/types' + +export type ToastItem = { + time: number // ms + type: ToastType + text: string +} + +export type ToastItemWithId = ToastItem & { + id: string +} + +export type ToastInjection = { +} diff --git a/src/components/Toast/composables/useToastClasses.ts b/src/components/Toast/composables/useToastClasses.ts index 9e03740..16cdafd 100644 --- a/src/components/Toast/composables/useToastClasses.ts +++ b/src/components/Toast/composables/useToastClasses.ts @@ -1,6 +1,6 @@ import type { Ref } from 'vue' import { computed } from 'vue' -import type { ToastPreset } from '@/components/Toast/types' +import type { ToastType } from '@/components/Toast/types' import { simplifyTailwindClasses } from '@/utils/simplifyTailwindClasses' import type { ToastAlign } from '@/components/Toast/types' @@ -11,12 +11,12 @@ type UseToastClassesReturns = { } type UseToastClassesProps = { - type: Ref + type: Ref divide: Ref alignment: Ref } -const typeClassesMap: Record = { +const typeClassesMap: Record = { danger: 'text-red-500 bg-red-100 dark:bg-red-800 dark:text-red-200', empty: '', success: 'text-green-500 bg-green-100 dark:bg-green-800 dark:text-green-200', diff --git a/src/components/Toast/types.ts b/src/components/Toast/types.ts index 48e20c5..2d08fca 100644 --- a/src/components/Toast/types.ts +++ b/src/components/Toast/types.ts @@ -1,2 +1,2 @@ -export type ToastPreset = 'success' | 'warning' | 'danger' | 'empty' +export type ToastType = 'success' | 'warning' | 'danger' | 'empty' export type ToastAlign = 'start' | 'center' | 'end' diff --git a/src/composables.ts b/src/composables.ts new file mode 100644 index 0000000..1e7bcc6 --- /dev/null +++ b/src/composables.ts @@ -0,0 +1,5 @@ +import { useToast } from '@/components/Toast/components/ToastProvider/composables/useToast' + +export { + useToast, +} diff --git a/src/index.ts b/src/index.ts index 7df3dfb..9e85c51 100644 --- a/src/index.ts +++ b/src/index.ts @@ -26,4 +26,7 @@ export { default as Sidebar } from './components/Sidebar/Sidebar.vue' export { default as Table } from './components/Table/Table.vue' export { default as Timeline } from './components/Timeline/Timeline.vue' export { default as Toast } from './components/Toast/Toast.vue' +export { default as ToastProvider } from './components/Toast/components/ToastProvider/ToastProvider.vue' export { default as Tooltip } from './components/Tooltip/Tooltip.vue' + +export * from './composables'