From 671872b9a44304ea93c87f29a4e924efd55ecb48 Mon Sep 17 00:00:00 2001 From: linshen <32978552+linshenkx@users.noreply.github.com> Date: Sat, 15 Feb 2025 15:54:29 +0800 Subject: [PATCH] refactor: Move useToast and clickOutside to UI package - Export useToast composable from @prompt-optimizer/ui - Remove local useToast and clickOutside implementations from web package - Update import statements in App.vue to use UI package exports --- packages/ui/src/index.ts | 5 ++- packages/web/src/App.vue | 4 +-- packages/web/src/composables/useToast.js | 36 --------------------- packages/web/src/directives/clickOutside.ts | 19 ----------- 4 files changed, 6 insertions(+), 58 deletions(-) delete mode 100644 packages/web/src/composables/useToast.js delete mode 100644 packages/web/src/directives/clickOutside.ts diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts index 9e3daa79..88b25e9d 100644 --- a/packages/ui/src/index.ts +++ b/packages/ui/src/index.ts @@ -15,4 +15,7 @@ export { default as Modal } from './components/Modal.vue' export { default as ApiKeyConfig } from './components/ApiKeyConfig.vue' // 导出指令 -export { clickOutside } from './directives/clickOutside' \ No newline at end of file +export { clickOutside } from './directives/clickOutside' + +// 导出组合式函数 +export { useToast } from './composables/useToast' \ No newline at end of file diff --git a/packages/web/src/App.vue b/packages/web/src/App.vue index f289d213..d064a6fc 100644 --- a/packages/web/src/App.vue +++ b/packages/web/src/App.vue @@ -173,9 +173,9 @@ import { HistoryDrawer, InputPanel, Modal, - ApiKeyConfig + ApiKeyConfig, + useToast } from '@prompt-optimizer/ui' -import { useToast } from './composables/useToast' import { v4 as uuidv4 } from 'uuid' // 初始化服务 diff --git a/packages/web/src/composables/useToast.js b/packages/web/src/composables/useToast.js deleted file mode 100644 index 0c611561..00000000 --- a/packages/web/src/composables/useToast.js +++ /dev/null @@ -1,36 +0,0 @@ -import { ref } from 'vue' - -const toasts = ref([]) - -export function useToast() { - const add = (message, type = 'info', duration = 3000) => { - const id = Date.now() - toasts.value.push({ id, message, type }) - - setTimeout(() => { - remove(id) - }, duration) - } - - const remove = (id) => { - const index = toasts.value.findIndex(toast => toast.id === id) - if (index > -1) { - toasts.value.splice(index, 1) - } - } - - const success = (message, duration) => add(message, 'success', duration) - const error = (message, duration) => add(message, 'error', duration) - const info = (message, duration) => add(message, 'info', duration) - const warning = (message, duration) => add(message, 'warning', duration) - - return { - toasts, - add, - remove, - success, - error, - info, - warning - } -} diff --git a/packages/web/src/directives/clickOutside.ts b/packages/web/src/directives/clickOutside.ts deleted file mode 100644 index e372dc6f..00000000 --- a/packages/web/src/directives/clickOutside.ts +++ /dev/null @@ -1,19 +0,0 @@ -interface ExtendedHTMLElement extends HTMLElement { - _clickOutside?: (event: Event) => void -} - -export const clickOutside = { - mounted(el: ExtendedHTMLElement, binding: { value: () => void }) { - el._clickOutside = (event: Event) => { - if (!(el === event.target || el.contains(event.target as Node))) { - binding.value() - } - } - document.addEventListener('click', el._clickOutside) - }, - unmounted(el: ExtendedHTMLElement) { - if (el._clickOutside) { - document.removeEventListener('click', el._clickOutside) - } - } -} \ No newline at end of file