1
1
<script setup lang="ts">
2
2
import type { Ref } from ' vue'
3
- import { useDevToolsBridge , useDevToolsState } from ' @vue/devtools-core'
3
+ import { useDevToolsBridge , useDevToolsBridgeRpc , useDevToolsState } from ' @vue/devtools-core'
4
4
import { isInChromePanel } from ' @vue/devtools-shared'
5
5
import { Pane , Splitpanes } from ' splitpanes'
6
6
@@ -11,6 +11,7 @@ useColorMode()
11
11
const router = useRouter ()
12
12
const route = useRoute ()
13
13
const { connected, clientConnected } = useDevToolsState ()
14
+ const bridgeRpc = useDevToolsBridgeRpc ()
14
15
const clientState = devtoolsClientState
15
16
16
17
const viewMode = inject <Ref <' overlay' | ' panel' >>(' viewMode' , ref (' overlay' ))
@@ -66,6 +67,40 @@ watchEffect(() => {
66
67
activeAppRecords .value = devtoolsState .appRecords .value
67
68
activeAppRecordId .value = devtoolsState .activeAppRecordId .value
68
69
})
70
+
71
+ // register commands
72
+ const { copy } = useCopy ()
73
+ const eyeDropper = useEyeDropper ({})
74
+
75
+ bridgeRpc ?.isVueInspectorDetected ?.()?.then (({ data }) => {
76
+ if (data ) {
77
+ registerCommands (() =>
78
+ [{
79
+ id: ' action:vue-inspector' ,
80
+ title: ' Inspector' ,
81
+ icon: ' i-carbon-select-window' ,
82
+ action : async () => {
83
+ bridge .value .emit (' toggle-panel' , false )
84
+ await bridgeRpc .enableVueInspector ()
85
+ },
86
+ }],
87
+ )
88
+ }
89
+ })
90
+ registerCommands (() => [
91
+ ... (eyeDropper .isSupported .value
92
+ ? [{
93
+ id: ' action:eye-dropper' ,
94
+ title: ' Color Picker' ,
95
+ icon: ' i-carbon-eyedropper' ,
96
+ action : async () => {
97
+ const { sRGBHex } = await eyeDropper .open () || {}
98
+ if (sRGBHex )
99
+ copy (sRGBHex )
100
+ },
101
+ }]
102
+ : []),
103
+ ])
69
104
</script >
70
105
71
106
<template >
0 commit comments