11<script setup lang="ts">
2- import type { DevToolsDockEntry } from ' @vitejs/devtools-kit'
3- import type { ImportScriptContext } from ' @vitejs/devtools-kit/client'
42import type { DockProps } from ' ./DockProps'
53import { useEventListener , useScreenSafeArea } from ' @vueuse/core'
64import { computed , onMounted , reactive , ref , toRefs , useTemplateRef , watchEffect } from ' vue'
5+ import { useStateHandlers } from ' ../state/state'
76import DockEntries from ' ./DockEntries.vue'
87import BracketLeft from ' ./icons/BracketLeft.vue'
98import BracketRight from ' ./icons/BracketRight.vue'
@@ -218,64 +217,7 @@ const panelStyle = computed(() => {
218217 return style
219218})
220219
221- function importScript(entry : DevToolsDockEntry ): Promise <(context : ImportScriptContext ) => void | Promise <void >> {
222- const id = entry .id
223- return import (/* @vite-ignore */ [' /.devtools' , ' imports' ].join (' -' ))
224- .then ((module ) => {
225- const importsMap = module .importsMap as Record <string , () => Promise <() => void >>
226- const importFn = importsMap [id ]
227- if (! importFn ) {
228- return Promise .reject (new Error (` [VITE DEVTOOLS] No import found for id: ${id } ` ))
229- }
230- return importFn ()
231- })
232- .catch ((error ) => {
233- // TODO: maybe popup a error toast here?
234- // TODO: A unified logger API
235- console .error (' [VITE DEVTOOLS] Error executing import action' , error )
236- return Promise .reject (error )
237- })
238- }
239-
240- function onSelected(entry ? : DevToolsDockEntry ) {
241- if (! entry ) {
242- state .value .open = false
243- state .value .dockEntry = undefined
244- return
245- }
246-
247- const scriptContext: ImportScriptContext = reactive ({
248- dockEntry: entry ,
249- // @ts-expect-error cast for unwraping
250- dockState: computed <' active' | ' inactive' >({
251- get() {
252- return state .value .dockEntry ?.id === entry .id ? ' active' : ' inactive'
253- },
254- set(val ) {
255- if (val === ' active' )
256- state .value .dockEntry = entry
257- else if (state .value .dockEntry ?.id === entry .id )
258- state .value .dockEntry = undefined
259- },
260- }),
261- hidePanel() {
262- state .value .open = false
263- },
264- })
265-
266- // If it's an action, run and return (early exit)
267- if (entry ?.type === ' action' ) {
268- return importScript (entry ).then (fn => fn (scriptContext ))
269- }
270-
271- state .value .dockEntry = entry
272- state .value .open = true
273-
274- // If has import script, run it
275- if (entry .import ) {
276- importScript (entry ).then (fn => fn (scriptContext ))
277- }
278- }
220+ const { selectDockEntry } = useStateHandlers (state )
279221
280222onMounted (() => {
281223 bringUp ()
@@ -298,7 +240,7 @@ onMounted(() => {
298240 <div
299241 v-if =" !isSafari"
300242 id =" vite-devtools-glowing"
301- :style =" isDragging ? 'opacity: 0.6 !important ' : ''"
243+ :class =" isDragging ? 'op60! ' : ''"
302244 />
303245 <div
304246 id =" vite-devtools-dock-container"
@@ -322,18 +264,19 @@ onMounted(() => {
322264 />
323265 <DockEntries
324266 :entries =" docks"
325- class =" transition duration-200"
267+ class =" transition duration-200 flex items-center w-full h-full justify-center "
326268 :class =" isMinimized ? 'opacity-0 pointer-events-none' : 'opacity-100'"
327269 :is-vertical =" isVertical"
328270 :selected =" state.dockEntry"
329- @select =" onSelected "
271+ @select =" selectDockEntry "
330272 />
331273 </div >
332274 </div >
333275 <slot
334276 :dock-el =" dockEl"
335277 :panel-margins =" panelMargins"
336278 :state =" state"
279+ :is-dragging =" isDragging"
337280 :entry =" state.dockEntry?.type === 'action' ? undefined : state.dockEntry"
338281 />
339282 </div >
0 commit comments