1- <script setup lang="ts ">
1+ <script setup lang="tsx ">
22import { useDevtoolsClient } from ' ../logic/client'
33
44const client = useDevtoolsClient ()
@@ -16,7 +16,14 @@ function close() {
1616 router .replace (frameState .route .value )
1717}
1818
19+ const inSecurityContext = checkIsSecurityContext ()
20+ // @ts-expect-error missing types
21+ const supportEyeDropper = !! window .EyeDropper
22+ const isSupported = inSecurityContext && supportEyeDropper
23+
1924async function open() {
25+ if (! isSupported )
26+ return
2027 // @ts-expect-error missing types?
2128 const eyeDropper = new EyeDropper ()
2229 return eyeDropper .open ()
@@ -34,25 +41,46 @@ onMounted(() => {
3441 color .value = res .sRGBHex
3542 })
3643})
44+
45+ function ErrorBoundary() {
46+ let content: JSX .Element = <div ></div >
47+ if (! inSecurityContext ) {
48+ content = <p >
49+ EyeDropper is not available due to <a class = " text-primary transition-colors hover:text-primary/80" href = " https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts" target = ' _blank' >secure context</a > restrict.
50+ </p >
51+ }
52+ else if (! supportEyeDropper ) {
53+ content = <p >
54+ Your browser doesn't support
55+ <a class = " text-primary transition-colors hover:text-primary/80" href = " https://developer.mozilla.org/en-US/docs/Web/API/EyeDropper#browser_compatibility" target = ' _blank' >EyeDropper</a >.
56+ </p >
57+ }
58+ return <div class = " flex items-center justify-center text-12px" >
59+ { content }
60+ </div >
61+ }
3762 </script >
3863
3964<template >
4065 <VPanelGrids h-screen w-screen px5 >
4166 <div absolute right-0 top-0 p2 >
4267 <button carbon-close ma text-xl op50 hover:op100 @click =" close" />
4368 </div >
44- <div v-if =" !color" >
45- Launching EyeDropper
46- </div >
47- <div v-else flex items-center >
48- <span flex items-center >
49- <em mr-2 inline-block h-5 w-5 border border-base rounded :style =" { backgroundColor: color }" />
50- :
51- {{ color }}
52- </span >
53- <span ml-2 flex cursor-pointer items-center border border-base rounded-10 p-2 hover =" bg-active" @click =" restart" >
54- <i class =" i-mdi:eyedropper" text-3 />
55- </span >
69+ <div v-if =" isSupported" >
70+ <div v-if =" !color" >
71+ Launching EyeDropper
72+ </div >
73+ <div v-else flex items-center >
74+ <span flex items-center >
75+ <em mr-2 inline-block h-5 w-5 border border-base rounded :style =" { backgroundColor: color }" />
76+ :
77+ {{ color }}
78+ </span >
79+ <span ml-2 flex cursor-pointer items-center border border-base rounded-10 p-2 hover =" bg-active" @click =" restart" >
80+ <i class =" i-mdi:eyedropper" text-3 />
81+ </span >
82+ </div >
5683 </div >
84+ <ErrorBoundary v-else />
5785 </VPanelGrids >
5886</template >
0 commit comments