|
|
|
|
@ -1262,10 +1262,18 @@ export class ColorPickerEyeDropperProvider {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
readonly isSupported: boolean =
|
|
|
|
|
typeof window !== 'undefined' &&
|
|
|
|
|
'EyeDropper' in window &&
|
|
|
|
|
typeof (window as unknown as { EyeDropper: unknown }).EyeDropper === 'function';
|
|
|
|
|
private get eyeDropperCtor(): (new () => EyeDropperLike) | undefined {
|
|
|
|
|
let win: Window;
|
|
|
|
|
try {
|
|
|
|
|
win = this.provider.soma.dom.getWindow(this.opts.ref.current);
|
|
|
|
|
} catch {
|
|
|
|
|
return undefined;
|
|
|
|
|
}
|
|
|
|
|
const candidate = (win as unknown as { EyeDropper?: unknown }).EyeDropper;
|
|
|
|
|
return typeof candidate === 'function' ? (candidate as new () => EyeDropperLike) : undefined;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
readonly isSupported = $derived.by(() => this.eyeDropperCtor !== undefined);
|
|
|
|
|
|
|
|
|
|
readonly resolvedLabel = $derived.by(
|
|
|
|
|
() => this.opts.ariaLabel.current ?? this.provider.langs(COLOR_PICKER_LANGS.EYE_DROPPER)
|
|
|
|
|
@ -1274,7 +1282,8 @@ export class ColorPickerEyeDropperProvider {
|
|
|
|
|
readonly onclick = async () => {
|
|
|
|
|
if (!this.isSupported || this.provider.isDisabled || this.provider.isReadonly) return;
|
|
|
|
|
try {
|
|
|
|
|
const Ctor = (window as unknown as { EyeDropper: new () => EyeDropperLike }).EyeDropper;
|
|
|
|
|
const Ctor = this.eyeDropperCtor;
|
|
|
|
|
if (!Ctor) return;
|
|
|
|
|
const picker = new Ctor();
|
|
|
|
|
const { sRGBHex } = await picker.open();
|
|
|
|
|
const hsv = parseColor(sRGBHex);
|
|
|
|
|
|