Files
wehub-resource-sync adf0d17497
publish / version_or_publish (push) Waiting to run
storybook-build / changes (push) Waiting to run
storybook-build / :storybook-build (push) Blocked by required conditions
Sync Gradio Skills to Hugging Face / sync-skills (push) Waiting to run
functional / changes (push) Waiting to run
functional / build-frontend (push) Blocked by required conditions
functional / functional-test-SSR=false (push) Blocked by required conditions
functional / functional-reload (push) Blocked by required conditions
functional / functional-test-SSR=true (push) Blocked by required conditions
hygiene / hygiene-test (push) Waiting to run
python / changes (push) Waiting to run
python / build (push) Blocked by required conditions
python / test-ubuntu-latest-flaky (push) Blocked by required conditions
python / test-ubuntu-latest-not-flaky (push) Blocked by required conditions
python / test-windows-latest-flaky (push) Blocked by required conditions
python / test-windows-latest-not-flaky (push) Blocked by required conditions
js / changes (push) Waiting to run
js / js-test (push) Blocked by required conditions
docs-build / changes (push) Waiting to run
docs-build / docs-build (push) Blocked by required conditions
docs-build / website-build (push) Blocked by required conditions
chore: import upstream snapshot with attribution
2026-07-13 13:17:32 +08:00

28 lines
978 B
TypeScript

export const get_coordinates_of_clicked_image = (
evt: MouseEvent
): [number, number] | null => {
let image;
if (evt.currentTarget instanceof Element) {
image = evt.currentTarget.querySelector("img") as HTMLImageElement;
} else {
return [NaN, NaN];
}
const imageRect = image.getBoundingClientRect();
// The image is rendered with `object-fit: scale-down`: centered, never
// scaled above its natural size, so empty space can appear on both axes.
const scale = Math.min(
imageRect.width / image.naturalWidth,
imageRect.height / image.naturalHeight,
1
);
const x_offset = (imageRect.width - image.naturalWidth * scale) / 2;
const y_offset = (imageRect.height - image.naturalHeight * scale) / 2;
const x = Math.round((evt.clientX - imageRect.left - x_offset) / scale);
const y = Math.round((evt.clientY - imageRect.top - y_offset) / scale);
if (x < 0 || x >= image.naturalWidth || y < 0 || y >= image.naturalHeight) {
return null;
}
return [x, y];
};