react-cheminfo 0.39.0 → 0.39.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"SharePreview.d.ts","sourceRoot":"","sources":["../../../src/share/ui/SharePreview.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAuBzD,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,GAAG,EAAE,MAAM,CAAC;IACZ,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,SAAS,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACpD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAgHnE"}
1
+ {"version":3,"file":"SharePreview.d.ts","sourceRoot":"","sources":["../../../src/share/ui/SharePreview.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AA6BzD,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,GAAG,EAAE,MAAM,CAAC;IACZ,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,SAAS,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACpD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAyInE"}
@@ -10,6 +10,10 @@ import { SHARE_REGIONS_REQUEST, readShareRegions, sharePreviewAddress, sharePrev
10
10
  import { SharePreviewDevices } from "./SharePreviewDevices.js";
11
11
  /** Room the window's own bar takes, which the page is not scaled into. */
12
12
  const CHROME_HEIGHT = 26;
13
+ /** How often the framed page is asked again while it has answered nothing. */
14
+ const ASK_INTERVAL = 300;
15
+ /** How many times, so a page with nothing to report is left alone. */
16
+ const ASK_LIMIT = 10;
13
17
  /**
14
18
  * The page as the link hands it out, live, beside the options that write it.
15
19
  *
@@ -65,6 +69,27 @@ export function SharePreview(props) {
65
69
  useEffect(() => {
66
70
  mark.current?.scrollIntoView({ block: 'nearest', inline: 'nearest' });
67
71
  }, [highlight?.part]);
72
+ // The frame's own load says the document is there, never that the page it
73
+ // builds is listening: a React tree mounts in a task of its own, after it.
74
+ // So the question is repeated until it is answered — there is no event on
75
+ // this side to wait for, and a page that answers nothing is a page with no
76
+ // parts to point at, which costs ten messages and stops.
77
+ useEffect(() => {
78
+ if (regions.length > 0)
79
+ return undefined;
80
+ let asked = 0;
81
+ const timer = setInterval(() => {
82
+ asked += 1;
83
+ if (asked > ASK_LIMIT) {
84
+ clearInterval(timer);
85
+ return;
86
+ }
87
+ frame.current?.contentWindow?.postMessage({ type: SHARE_REGIONS_REQUEST }, '*');
88
+ }, ASK_INTERVAL);
89
+ return () => {
90
+ clearInterval(timer);
91
+ };
92
+ }, [regions, src]);
68
93
  return (_jsxs("section", { className: "share-preview", "aria-label": t('share.preview'), children: [_jsxs("header", { className: "share-preview__header", children: [_jsxs(H6, { className: "share-preview__label", children: [_jsx(Icon, { icon: "eye-open", size: 13 }), t('share.preview'), _jsx(HelpIcon, { content: help })] }), _jsx(SharePreviewDevices, { value: device, onChange: setDevice, windowSize: windowSize })] }), _jsx("div", { className: "share-preview__stage", ref: stage, children: _jsxs("div", { className: "share-preview__device", style: { width: page.width * scale }, children: [_jsxs("div", { className: "share-preview__chrome", children: [_jsx(Icon, { icon: "eye-open", size: 11 }), _jsx("span", { className: "share-preview__address", children: sharePreviewAddress(url) }), _jsx("span", { className: "share-preview__size", children: sizeNote(page.width, page.height, scale) })] }), _jsxs("div", { className: "share-preview__page", style: { height: page.height * scale }, children: [_jsx("iframe", { ref: frame, className: "share-preview__frame", src: src, title: title, style: frameStyle(page.width, page.height, scale), onLoad: () => {
69
94
  // What the page before it reported is where its own parts
70
95
  // were, so it is dropped rather than drawn over this one.
@@ -1 +1 @@
1
- {"version":3,"file":"SharePreview.js","sourceRoot":"","sources":["../../../src/share/ui/SharePreview.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA2B,CAAC;AAEhE,0EAA0E;AAC1E,MAAM,aAAa,GAAG,EAAE,CAAC;AAezB;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAC/C,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAwB,QAAQ,CAAC,CAAC;IACtE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAyB,UAAU,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC1C,6EAA6E;IAC7E,gDAAgD;IAChD,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAExC,MAAM,UAAU,GAAG;QACjB,KAAK,EAAE,UAAU,CAAC,UAAU;QAC5B,MAAM,EAAE,UAAU,CAAC,WAAW;KAC/B,CAAC;IACF,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,iBAAiB,CAC7B,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,aAAa,EAAE,EAC1D,IAAI,CACL,CAAC;IACF,MAAM,MAAM,GACV,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IACrE,MAAM,IAAI,GAAgB;QACxB,KAAK,EAAE,CAAC,CAAC,eAAe,CAAC;QACzB,IAAI,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,CAAC;KACvD,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,SAAS,CAAC,KAAmB;YACpC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,EAAE,aAAa;gBAAE,OAAO;YAC1D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9C,IAAI,QAAQ,KAAK,IAAI;gBAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC;QAED,UAAU,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAClD,OAAO,GAAG,EAAE;YACV,UAAU,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACvD,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,4EAA4E;IAC5E,mEAAmE;IACnE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;IAEtB,OAAO,CACL,mBAAS,SAAS,EAAC,eAAe,gBAAa,CAAC,CAAC,eAAe,CAAC,aAC/D,kBAAQ,SAAS,EAAC,uBAAuB,aACvC,MAAC,EAAE,IAAC,SAAS,EAAC,sBAAsB,aAClC,KAAC,IAAI,IAAC,IAAI,EAAC,UAAU,EAAC,IAAI,EAAE,EAAE,GAAI,EACjC,CAAC,CAAC,eAAe,CAAC,EACnB,KAAC,QAAQ,IAAC,OAAO,EAAE,IAAI,GAAI,IACxB,EACL,KAAC,mBAAmB,IAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,SAAS,EACnB,UAAU,EAAE,UAAU,GACtB,IACK,EACT,cAAK,SAAS,EAAC,sBAAsB,EAAC,GAAG,EAAE,KAAK,YAC9C,eACE,SAAS,EAAC,uBAAuB,EACjC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,aAEpC,eAAK,SAAS,EAAC,uBAAuB,aACpC,KAAC,IAAI,IAAC,IAAI,EAAC,UAAU,EAAC,IAAI,EAAE,EAAE,GAAI,EAClC,eAAM,SAAS,EAAC,wBAAwB,YACrC,mBAAmB,CAAC,GAAG,CAAC,GACpB,EACP,eAAM,SAAS,EAAC,qBAAqB,YAClC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,GACpC,IACH,EACN,eACE,SAAS,EAAC,qBAAqB,EAC/B,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,aAEtC,iBACE,GAAG,EAAE,KAAK,EACV,SAAS,EAAC,sBAAsB,EAChC,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACjD,MAAM,EAAE,GAAG,EAAE;wCACX,0DAA0D;wCAC1D,0DAA0D;wCAC1D,UAAU,CAAC,UAAU,CAAC,CAAC;wCACvB,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,CACvC,EAAE,IAAI,EAAE,qBAAqB,EAAE,EAC/B,GAAG,CACJ,CAAC;oCACJ,CAAC,GACD,EACD,MAAM,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACnD,cACE,GAAG,EAAE,IAAI,EACT,SAAS,EAAC,uBAAuB,EACjC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,YAEjC,eAAM,SAAS,EAAC,4BAA4B,YACzC,SAAS,CAAC,KAAK,GACX,GACH,CACP,IACG,IACF,GACF,IACE,CACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAA2B,EAAE,CAAC;AAE9C,SAAS,QAAQ,CACf,OAA+B,EAC/B,IAAY;IAEZ,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC;IAC1C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,MAAmB,EAAE,KAAa;IACrD,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK;QACtB,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK;QACrB,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,KAAK;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,KAAK;KAC9B,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,KAAa,EACb,MAAc,EACd,KAAa;IAEb,OAAO;QACL,KAAK;QACL,MAAM;QACN,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,SAAS,KAAK,GAAG;QAC5B,eAAe,EAAE,UAAU;KAC5B,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,MAAc,EAAE,KAAa;IAC5D,MAAM,IAAI,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;IAClE,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC;AACtE,CAAC"}
1
+ {"version":3,"file":"SharePreview.js","sourceRoot":"","sources":["../../../src/share/ui/SharePreview.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useShareRegionReports.d.ts","sourceRoot":"","sources":["../../../src/share/ui/useShareRegionReports.ts"],"names":[],"mappings":"AAKA;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CA2C1E"}
1
+ {"version":3,"file":"useShareRegionReports.d.ts","sourceRoot":"","sources":["../../../src/share/ui/useShareRegionReports.ts"],"names":[],"mappings":"AAKA;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAiE1E"}
@@ -29,19 +29,46 @@ export function useShareRegionReports(hidden) {
29
29
  if (!marking)
30
30
  return undefined;
31
31
  const host = globalThis.parent;
32
+ let scheduled = 0;
33
+ let reported = '';
32
34
  function report() {
33
- host.postMessage({ type: SHARE_REGIONS_MESSAGE, regions: measureRegions() }, '*');
35
+ scheduled = 0;
36
+ const regions = measureRegions();
37
+ // A page that is drawing — a structure, a result, a chart — mutates many
38
+ // times a second while its boxes stay where they are, and every message
39
+ // sent re-renders the dialog on the other side. Only a move is news.
40
+ const signature = JSON.stringify(regions);
41
+ if (signature === reported)
42
+ return;
43
+ reported = signature;
44
+ host.postMessage({ type: SHARE_REGIONS_MESSAGE, regions }, '*');
45
+ }
46
+ // A search that returns, a structure that draws and a font that lands all
47
+ // move the boxes within a frame of each other, so the page is measured
48
+ // once after them rather than once per notification.
49
+ function schedule() {
50
+ if (scheduled === 0)
51
+ scheduled = requestAnimationFrame(report);
34
52
  }
35
53
  // A chart, a web font or a structure drawn after mount all move the boxes,
36
- // so the page is measured again whenever anything in it resizes rather
37
- // than once, on a deadline it would lose.
38
- const observer = new ResizeObserver(report);
39
- observer.observe(document.documentElement);
40
- globalThis.addEventListener('resize', report);
54
+ // so the page is measured again whenever anything in it changes rather
55
+ // than once, on a deadline it would lose. Watching its size is not enough:
56
+ // a page laid out to the height of the viewport keeps that height while a
57
+ // result appears inside a column of it, and the part nobody measured is
58
+ // the one the reader is pointing at.
59
+ const resizes = new ResizeObserver(schedule);
60
+ resizes.observe(document.documentElement);
61
+ resizes.observe(document.body);
62
+ const mutations = new MutationObserver(schedule);
63
+ mutations.observe(document.body, { childList: true, subtree: true });
64
+ globalThis.addEventListener('resize', schedule);
41
65
  report();
42
66
  return () => {
43
- observer.disconnect();
44
- globalThis.removeEventListener('resize', report);
67
+ if (scheduled !== 0)
68
+ cancelAnimationFrame(scheduled);
69
+ resizes.disconnect();
70
+ mutations.disconnect();
71
+ globalThis.removeEventListener('resize', schedule);
45
72
  };
46
73
  }, [marking, hidden]);
47
74
  return marking;
@@ -60,12 +87,14 @@ function measureRegions() {
60
87
  const box = range.getBoundingClientRect();
61
88
  if (box.width === 0 || box.height === 0)
62
89
  continue;
90
+ // Rounded, so a layout that settles half a pixel to the left is not
91
+ // reported as a part that moved.
63
92
  regions.push({
64
93
  part,
65
- x: box.x + globalThis.scrollX,
66
- y: box.y + globalThis.scrollY,
67
- width: box.width,
68
- height: box.height,
94
+ x: Math.round(box.x + globalThis.scrollX),
95
+ y: Math.round(box.y + globalThis.scrollY),
96
+ width: Math.round(box.width),
97
+ height: Math.round(box.height),
69
98
  });
70
99
  }
71
100
  return regions;
@@ -1 +1 @@
1
- {"version":3,"file":"useShareRegionReports.js","sourceRoot":"","sources":["../../../src/share/ui/useShareRegionReports.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useShareRegionReports.js","sourceRoot":"","sources":["../../../src/share/ui/useShareRegionReports.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-cheminfo",
3
- "version": "0.39.0",
3
+ "version": "0.39.1",
4
4
  "license": "MIT",
5
5
  "description": "React components, hooks and framework-free helpers shared by the cheminfo sites: site chrome, citations, sharing, routing, pedagogy, charts, and the structure, orbital and 3D molecule viewers",
6
6
  "author": "Luc Patiny",
@@ -22,6 +22,12 @@ import { SharePreviewDevices } from './SharePreviewDevices.tsx';
22
22
  /** Room the window's own bar takes, which the page is not scaled into. */
23
23
  const CHROME_HEIGHT = 26;
24
24
 
25
+ /** How often the framed page is asked again while it has answered nothing. */
26
+ const ASK_INTERVAL = 300;
27
+
28
+ /** How many times, so a page with nothing to report is left alone. */
29
+ const ASK_LIMIT = 10;
30
+
25
31
  export interface SharePreviewProps {
26
32
  /** The address the frame loads — the link as it stands. */
27
33
  url: string;
@@ -97,6 +103,31 @@ export function SharePreview(props: SharePreviewProps): ReactElement {
97
103
  mark.current?.scrollIntoView({ block: 'nearest', inline: 'nearest' });
98
104
  }, [highlight?.part]);
99
105
 
106
+ // The frame's own load says the document is there, never that the page it
107
+ // builds is listening: a React tree mounts in a task of its own, after it.
108
+ // So the question is repeated until it is answered — there is no event on
109
+ // this side to wait for, and a page that answers nothing is a page with no
110
+ // parts to point at, which costs ten messages and stops.
111
+ useEffect(() => {
112
+ if (regions.length > 0) return undefined;
113
+ let asked = 0;
114
+ const timer = setInterval(() => {
115
+ asked += 1;
116
+ if (asked > ASK_LIMIT) {
117
+ clearInterval(timer);
118
+ return;
119
+ }
120
+ frame.current?.contentWindow?.postMessage(
121
+ { type: SHARE_REGIONS_REQUEST },
122
+ '*',
123
+ );
124
+ }, ASK_INTERVAL);
125
+
126
+ return () => {
127
+ clearInterval(timer);
128
+ };
129
+ }, [regions, src]);
130
+
100
131
  return (
101
132
  <section className="share-preview" aria-label={t('share.preview')}>
102
133
  <header className="share-preview__header">
@@ -33,25 +33,47 @@ export function useShareRegionReports(hidden: ReadonlySet<string>): boolean {
33
33
  useEffect(() => {
34
34
  if (!marking) return undefined;
35
35
  const host = globalThis.parent;
36
+ let scheduled = 0;
37
+ let reported = '';
36
38
 
37
39
  function report(): void {
38
- host.postMessage(
39
- { type: SHARE_REGIONS_MESSAGE, regions: measureRegions() },
40
- '*',
41
- );
40
+ scheduled = 0;
41
+ const regions = measureRegions();
42
+ // A page that is drawing — a structure, a result, a chart — mutates many
43
+ // times a second while its boxes stay where they are, and every message
44
+ // sent re-renders the dialog on the other side. Only a move is news.
45
+ const signature = JSON.stringify(regions);
46
+ if (signature === reported) return;
47
+ reported = signature;
48
+ host.postMessage({ type: SHARE_REGIONS_MESSAGE, regions }, '*');
49
+ }
50
+
51
+ // A search that returns, a structure that draws and a font that lands all
52
+ // move the boxes within a frame of each other, so the page is measured
53
+ // once after them rather than once per notification.
54
+ function schedule(): void {
55
+ if (scheduled === 0) scheduled = requestAnimationFrame(report);
42
56
  }
43
57
 
44
58
  // A chart, a web font or a structure drawn after mount all move the boxes,
45
- // so the page is measured again whenever anything in it resizes rather
46
- // than once, on a deadline it would lose.
47
- const observer = new ResizeObserver(report);
48
- observer.observe(document.documentElement);
49
- globalThis.addEventListener('resize', report);
59
+ // so the page is measured again whenever anything in it changes rather
60
+ // than once, on a deadline it would lose. Watching its size is not enough:
61
+ // a page laid out to the height of the viewport keeps that height while a
62
+ // result appears inside a column of it, and the part nobody measured is
63
+ // the one the reader is pointing at.
64
+ const resizes = new ResizeObserver(schedule);
65
+ resizes.observe(document.documentElement);
66
+ resizes.observe(document.body);
67
+ const mutations = new MutationObserver(schedule);
68
+ mutations.observe(document.body, { childList: true, subtree: true });
69
+ globalThis.addEventListener('resize', schedule);
50
70
  report();
51
71
 
52
72
  return () => {
53
- observer.disconnect();
54
- globalThis.removeEventListener('resize', report);
73
+ if (scheduled !== 0) cancelAnimationFrame(scheduled);
74
+ resizes.disconnect();
75
+ mutations.disconnect();
76
+ globalThis.removeEventListener('resize', schedule);
55
77
  };
56
78
  }, [marking, hidden]);
57
79
 
@@ -71,12 +93,14 @@ function measureRegions(): ShareRegion[] {
71
93
  range.selectNodeContents(marker);
72
94
  const box = range.getBoundingClientRect();
73
95
  if (box.width === 0 || box.height === 0) continue;
96
+ // Rounded, so a layout that settles half a pixel to the left is not
97
+ // reported as a part that moved.
74
98
  regions.push({
75
99
  part,
76
- x: box.x + globalThis.scrollX,
77
- y: box.y + globalThis.scrollY,
78
- width: box.width,
79
- height: box.height,
100
+ x: Math.round(box.x + globalThis.scrollX),
101
+ y: Math.round(box.y + globalThis.scrollY),
102
+ width: Math.round(box.width),
103
+ height: Math.round(box.height),
80
104
  });
81
105
  }
82
106