diff --git a/packages/core/src/client/webcomponents/components/display/Confirm.vue b/packages/core/src/client/webcomponents/components/display/Confirm.vue new file mode 100644 index 00000000..4aaf892b --- /dev/null +++ b/packages/core/src/client/webcomponents/components/display/Confirm.vue @@ -0,0 +1,64 @@ + + + diff --git a/packages/core/src/client/webcomponents/components/dock/DockEmbedded.vue b/packages/core/src/client/webcomponents/components/dock/DockEmbedded.vue index 196f8ba9..c0bbc98b 100644 --- a/packages/core/src/client/webcomponents/components/dock/DockEmbedded.vue +++ b/packages/core/src/client/webcomponents/components/dock/DockEmbedded.vue @@ -5,6 +5,7 @@ import { onUnmounted, ref } from 'vue' import { sharedStateToRef } from '../../state/docks' import { closeDockPopup, useIsDockPopupOpen } from '../../state/popup' import CommandPalette from '../command-palette/CommandPalette.vue' +import Confirm from '../display/Confirm.vue' import ToastOverlay from '../display/ToastOverlay.vue' import FloatingElements from '../floating/FloatingElements.vue' import Dock from './Dock.vue' @@ -70,4 +71,5 @@ onUnmounted(() => { + diff --git a/packages/core/src/client/webcomponents/components/dock/DockStandalone.vue b/packages/core/src/client/webcomponents/components/dock/DockStandalone.vue index 645d8afe..e9472a69 100644 --- a/packages/core/src/client/webcomponents/components/dock/DockStandalone.vue +++ b/packages/core/src/client/webcomponents/components/dock/DockStandalone.vue @@ -3,6 +3,7 @@ import type { DocksContext } from '@vitejs/devtools-kit/client' import { computed, markRaw, ref, useTemplateRef, watch } from 'vue' import { PersistedDomViewsManager } from '../../utils/PersistedDomViewsManager' import CommandPalette from '../command-palette/CommandPalette.vue' +import Confirm from '../display/Confirm.vue' import ToastOverlay from '../display/ToastOverlay.vue' import FloatingElements from '../floating/FloatingElements.vue' import VitePlus from '../icons/VitePlus.vue' @@ -80,4 +81,5 @@ function switchEntry(id: string | undefined) { + diff --git a/packages/core/src/client/webcomponents/components/views-builtin/SettingsAdvanced.vue b/packages/core/src/client/webcomponents/components/views-builtin/SettingsAdvanced.vue index 29f31c86..1113a7c4 100644 --- a/packages/core/src/client/webcomponents/components/views-builtin/SettingsAdvanced.vue +++ b/packages/core/src/client/webcomponents/components/views-builtin/SettingsAdvanced.vue @@ -3,33 +3,42 @@ import type { DocksContext } from '@vitejs/devtools-kit/client' import type { SharedState } from 'devframe/utils/shared-state' import type { DevToolsDocksUserSettings } from '../../state/dock-settings' import { DEFAULT_STATE_USER_SETTINGS } from '@vitejs/devtools-kit/constants' +import { useConfirm } from '../../state/confirm' const props = defineProps<{ context: DocksContext settingsStore: SharedState }>() -function resetAllSettings() { - // eslint-disable-next-line no-alert - if (confirm('Reset all settings to defaults? This includes appearance, docks, and shortcuts.')) { +const confirm = useConfirm() + +async function resetAllSettings() { + if (await confirm({ + title: 'Reset All Settings', + message: 'Reset all settings to defaults? This includes appearance, docks, and shortcuts.', + })) { props.settingsStore.mutate(() => { return DEFAULT_STATE_USER_SETTINGS() }) } } -function resetShortcuts() { - // eslint-disable-next-line no-alert - if (confirm('Reset all keyboard shortcuts to defaults?')) { +async function resetShortcuts() { + if (await confirm({ + title: 'Reset Keyboard Shortcuts', + message: 'Reset all keyboard shortcuts to defaults?', + })) { props.settingsStore.mutate((state) => { state.commandShortcuts = {} }) } } -function resetDocks() { - // eslint-disable-next-line no-alert - if (confirm('Reset dock visibility, order, and pinning to defaults?')) { +async function resetDocks() { + if (await confirm({ + title: 'Reset Dock Settings', + message: 'Reset dock visibility, order, and pinning to defaults?', + })) { props.settingsStore.mutate((state) => { const defaults = DEFAULT_STATE_USER_SETTINGS() state.docksHidden = defaults.docksHidden diff --git a/packages/core/src/client/webcomponents/state/confirm.ts b/packages/core/src/client/webcomponents/state/confirm.ts new file mode 100644 index 00000000..ca2f8535 --- /dev/null +++ b/packages/core/src/client/webcomponents/state/confirm.ts @@ -0,0 +1,16 @@ +import { createTemplatePromise } from '@vueuse/core' + +export interface ConfirmOptions { + title?: string + message: string + confirmText?: string + cancelText?: string +} + +export const ConfirmPromise = createTemplatePromise({ + singleton: true, +}) + +export function useConfirm() { + return ConfirmPromise.start +}