|
1 | 1 | <script setup lang="ts">
|
2 |
| -import { useColorMode } from '@vueuse/core' |
| 2 | +import { useColorMode, useDark } from '@vueuse/core' |
3 | 3 | import { Pinia } from '@vue/devtools-applet'
|
| 4 | +import '@vue/devtools-applet/style.css' |
| 5 | +import { HandShakeServer, getDevToolsState, initDevToolsSeparateWindow, initDevToolsSeparateWindowBridge, onDevToolsStateUpdated, setupDevToolsBridge } from '@vue/devtools-core' |
| 6 | +import { useCounterStore } from './stores' |
| 7 | +
|
| 8 | +const isDark = useDark() |
| 9 | +// user app |
| 10 | +const counterStore = useCounterStore() |
| 11 | +
|
| 12 | +// devtools |
| 13 | +const appConnected = ref(false) |
| 14 | +const clientConnected = ref(false) |
| 15 | +const connected = computed(() => appConnected.value && clientConnected.value) |
| 16 | +
|
| 17 | +initDevToolsSeparateWindow({ |
| 18 | + onConnected(channel) { |
| 19 | + const bridge = initDevToolsSeparateWindowBridge(channel) |
| 20 | + setupDevToolsBridge(bridge) |
| 21 | + new HandShakeServer(bridge).onnConnect().then(() => { |
| 22 | + bridge.emit('devtools:client-ready') |
| 23 | + initVueDevToolsState() |
| 24 | + }) |
| 25 | + bridge.on('disconnect', () => { |
| 26 | + channel.close() |
| 27 | + initDevToolsSeparateWindow() |
| 28 | + }) |
| 29 | + }, |
| 30 | +}) |
| 31 | +
|
| 32 | +function initVueDevToolsState() { |
| 33 | + getDevToolsState().then((data) => { |
| 34 | + if (data) |
| 35 | + return |
| 36 | + appConnected.value = data!.connected |
| 37 | + clientConnected.value = data!.clientConnected |
| 38 | + }) |
| 39 | +
|
| 40 | + onDevToolsStateUpdated((data) => { |
| 41 | + if (!data) |
| 42 | + return |
| 43 | + appConnected.value = data!.connected |
| 44 | + clientConnected.value = data!.clientConnected |
| 45 | + }) |
| 46 | +} |
4 | 47 |
|
5 | 48 | useColorMode()
|
6 | 49 | </script>
|
7 | 50 |
|
8 | 51 | <template>
|
9 | 52 | <div class="h-screen w-screen flex flex-col items-center justify-center">
|
| 53 | + <div i-carbon-sun dark:i-carbon-moon translate-y--1px @click="isDark = !isDark" /> |
| 54 | + |
| 55 | + <div select-none> |
| 56 | + Count:{{ counterStore.count }} |
| 57 | + <span @click="counterStore.increment">➕</span> |
| 58 | + <span @click="counterStore.decrement">➖</span> |
| 59 | + </div> |
10 | 60 | <div h-150 w-200 border="1 green solid">
|
11 |
| - <Pinia /> |
| 61 | + <Pinia v-if="connected" /> |
| 62 | + <div v-else class="h-full flex items-center justify-center"> |
| 63 | + Connecting... |
| 64 | + </div> |
12 | 65 | </div>
|
13 | 66 | </div>
|
14 | 67 | </template>
|
0 commit comments