@nxgt/material-core 0.11.1 → 0.13.0

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.
Files changed (114) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +283 -24
  3. package/dist/backgrounds/activity.d.ts +11 -0
  4. package/dist/backgrounds/activity.d.ts.map +1 -0
  5. package/dist/backgrounds/build.d.ts +9 -0
  6. package/dist/backgrounds/build.d.ts.map +1 -0
  7. package/dist/backgrounds/id-prefix.d.ts +8 -0
  8. package/dist/backgrounds/id-prefix.d.ts.map +1 -0
  9. package/dist/backgrounds/index.d.ts +20 -0
  10. package/dist/backgrounds/index.d.ts.map +1 -0
  11. package/dist/backgrounds/index.js +467 -0
  12. package/dist/backgrounds/index.js.map +20 -0
  13. package/dist/backgrounds/noise.d.ts +7 -0
  14. package/dist/backgrounds/noise.d.ts.map +1 -0
  15. package/dist/backgrounds/presets/grain.d.ts +9 -0
  16. package/dist/backgrounds/presets/grain.d.ts.map +1 -0
  17. package/dist/backgrounds/presets.d.ts +16 -0
  18. package/dist/backgrounds/presets.d.ts.map +1 -0
  19. package/dist/backgrounds/primitives.d.ts +22 -0
  20. package/dist/backgrounds/primitives.d.ts.map +1 -0
  21. package/dist/backgrounds/rng.d.ts +12 -0
  22. package/dist/backgrounds/rng.d.ts.map +1 -0
  23. package/dist/backgrounds/scatter.d.ts +25 -0
  24. package/dist/backgrounds/scatter.d.ts.map +1 -0
  25. package/dist/backgrounds/scene.d.ts +21 -0
  26. package/dist/backgrounds/scene.d.ts.map +1 -0
  27. package/dist/backgrounds/tones.d.ts +4 -0
  28. package/dist/backgrounds/tones.d.ts.map +1 -0
  29. package/dist/backgrounds/types.d.ts +53 -0
  30. package/dist/backgrounds/types.d.ts.map +1 -0
  31. package/dist/chunks/index-mw5fa8qa.js +119 -0
  32. package/dist/chunks/index-mw5fa8qa.js.map +12 -0
  33. package/dist/csp/index.d.ts +10 -0
  34. package/dist/csp/index.d.ts.map +1 -0
  35. package/dist/csp/index.js +21 -0
  36. package/dist/csp/index.js.map +9 -0
  37. package/dist/csp/nonce.d.ts +35 -0
  38. package/dist/csp/nonce.d.ts.map +1 -0
  39. package/dist/csp/policy.d.ts +33 -0
  40. package/dist/csp/policy.d.ts.map +1 -0
  41. package/dist/csp/zod-jitless.d.ts +4 -0
  42. package/dist/csp/zod-jitless.d.ts.map +1 -0
  43. package/dist/lib/drawer-room.d.ts +8 -0
  44. package/dist/lib/drawer-room.d.ts.map +1 -0
  45. package/dist/lib/drawer-room.js +17 -0
  46. package/dist/lib/drawer-room.js.map +10 -0
  47. package/dist/lib/escape-forward.d.ts +14 -0
  48. package/dist/lib/escape-forward.d.ts.map +1 -1
  49. package/dist/lib/escape-forward.js +22 -2
  50. package/dist/lib/escape-forward.js.map +3 -3
  51. package/dist/lib/initials.d.ts +12 -0
  52. package/dist/lib/initials.d.ts.map +1 -0
  53. package/dist/lib/initials.js +15 -0
  54. package/dist/lib/initials.js.map +10 -0
  55. package/dist/pdf-viewer/index.d.ts +1 -0
  56. package/dist/pdf-viewer/index.d.ts.map +1 -1
  57. package/dist/pdf-viewer/index.js +68 -38
  58. package/dist/pdf-viewer/index.js.map +6 -5
  59. package/dist/pdf-viewer/pdf-reveal-hit.d.ts +7 -0
  60. package/dist/pdf-viewer/pdf-reveal-hit.d.ts.map +1 -0
  61. package/dist/pdf-viewer/pdf-scroll-spy.d.ts +24 -8
  62. package/dist/pdf-viewer/pdf-scroll-spy.d.ts.map +1 -1
  63. package/dist/states/copy.d.ts +46 -0
  64. package/dist/states/copy.d.ts.map +1 -0
  65. package/dist/states/describe-error.d.ts +18 -0
  66. package/dist/states/describe-error.d.ts.map +1 -0
  67. package/dist/states/illustrations.d.ts +24 -0
  68. package/dist/states/illustrations.d.ts.map +1 -0
  69. package/dist/states/index.d.ts +11 -0
  70. package/dist/states/index.d.ts.map +1 -0
  71. package/dist/states/index.js +253 -0
  72. package/dist/states/index.js.map +13 -0
  73. package/dist/states/kinds.d.ts +28 -0
  74. package/dist/states/kinds.d.ts.map +1 -0
  75. package/dist/vite/csp-dev-header.d.ts +11 -0
  76. package/dist/vite/csp-dev-header.d.ts.map +1 -0
  77. package/dist/vite/csp-hashes.d.ts +23 -0
  78. package/dist/vite/csp-hashes.d.ts.map +1 -0
  79. package/dist/vite/csp-header.d.ts +10 -0
  80. package/dist/vite/csp-header.d.ts.map +1 -0
  81. package/dist/vite/csp-plugin.d.ts +12 -0
  82. package/dist/vite/csp-plugin.d.ts.map +1 -0
  83. package/dist/vite/css-chain.d.ts +13 -0
  84. package/dist/vite/css-chain.d.ts.map +1 -0
  85. package/dist/vite/dependency-closure.d.ts +8 -0
  86. package/dist/vite/dependency-closure.d.ts.map +1 -0
  87. package/dist/vite/fonts-inter.d.ts +15 -0
  88. package/dist/vite/fonts-inter.d.ts.map +1 -0
  89. package/dist/vite/fonts-plugin.d.ts +12 -0
  90. package/dist/vite/fonts-plugin.d.ts.map +1 -0
  91. package/dist/vite/index.d.ts +17 -81
  92. package/dist/vite/index.d.ts.map +1 -1
  93. package/dist/vite/index.js +478 -2
  94. package/dist/vite/index.js.map +18 -4
  95. package/dist/vite/libraries.d.ts +13 -0
  96. package/dist/vite/libraries.d.ts.map +1 -0
  97. package/dist/vite/nxgt-material.d.ts +12 -0
  98. package/dist/vite/nxgt-material.d.ts.map +1 -0
  99. package/dist/vite/options.d.ts +56 -0
  100. package/dist/vite/options.d.ts.map +1 -0
  101. package/dist/vite/pdf-plugin.d.ts +19 -0
  102. package/dist/vite/pdf-plugin.d.ts.map +1 -0
  103. package/dist/vite/pdfkit-standard-fonts.d.ts +74 -0
  104. package/dist/vite/pdfkit-standard-fonts.d.ts.map +1 -0
  105. package/dist/vite/styles-plugin.d.ts +27 -0
  106. package/dist/vite/styles-plugin.d.ts.map +1 -0
  107. package/dist/vite/styles-scan.d.ts +14 -0
  108. package/dist/vite/styles-scan.d.ts.map +1 -0
  109. package/docs/README.md +4 -0
  110. package/docs/backgrounds.md +95 -0
  111. package/docs/roadmap.md +37 -23
  112. package/docs/states.md +85 -0
  113. package/docs/troubleshooting.md +174 -3
  114. package/package.json +40 -4
@@ -262,40 +262,66 @@ function scrollIntoArea(node, block, behavior = "smooth") {
262
262
  top -= (view.height - box.height) / 2;
263
263
  area.scrollTo({ top: Math.max(0, top), behavior });
264
264
  }
265
- function createScrollSpy(root, pages, onPage, idleMs = 150) {
265
+ function pageInView(scroller, pages) {
266
+ const view = scroller.getBoundingClientRect();
267
+ const atEnd = scroller.scrollTop + scroller.clientHeight >= scroller.scrollHeight - 2;
268
+ const boxes = Array.from(pages, ([page, node]) => {
269
+ const { top, bottom } = node.getBoundingClientRect();
270
+ return [page, { top, bottom }];
271
+ });
272
+ return mostVisiblePage({ top: view.top, bottom: view.bottom, atEnd }, boxes);
273
+ }
274
+ var spyOptions = (options) => typeof options === "number" ? { idleMs: options } : options;
275
+ function listenForScroll(onScroll) {
276
+ document.addEventListener("scroll", onScroll, {
277
+ capture: true,
278
+ passive: true
279
+ });
280
+ return () => document.removeEventListener("scroll", onScroll, { capture: true });
281
+ }
282
+ function afterResize(run) {
283
+ let id = requestAnimationFrame(() => {
284
+ id = requestAnimationFrame(run);
285
+ });
286
+ return () => cancelAnimationFrame(id);
287
+ }
288
+ function createScrollSpy(root, pages, onPage, options = {}) {
289
+ const { idleMs = 150, readerPosition = () => true } = spyOptions(options);
266
290
  let frame = 0;
267
291
  let held = false;
292
+ let heldScroll = false;
268
293
  let idle;
269
294
  let scroller = null;
295
+ let cancelCheck = () => {};
296
+ const measure = () => {
297
+ frame = 0;
298
+ const page = scroller && pageInView(scroller, pages());
299
+ if (page)
300
+ onPage(page);
301
+ };
270
302
  const release = () => {
271
303
  clearTimeout(idle);
272
304
  idle = setTimeout(() => {
273
305
  held = false;
306
+ if (heldScroll) {
307
+ cancelCheck = afterResize(() => {
308
+ if (!frame && !readerPosition())
309
+ measure();
310
+ });
311
+ }
312
+ heldScroll = false;
274
313
  }, idleMs);
275
314
  };
276
- const measure = () => {
277
- frame = 0;
278
- if (!scroller)
279
- return;
280
- const view = scroller.getBoundingClientRect();
281
- const atEnd = scroller.scrollTop + scroller.clientHeight >= scroller.scrollHeight - 2;
282
- const boxes = Array.from(pages(), ([page, node]) => {
283
- const { top, bottom } = node.getBoundingClientRect();
284
- return [page, { top, bottom }];
285
- });
286
- const page = mostVisiblePage({ top: view.top, bottom: view.bottom, atEnd }, boxes);
287
- if (page !== null)
288
- onPage(page);
289
- };
290
315
  const onScroll = (event) => {
291
316
  const target = event.target;
292
317
  if (!(target instanceof HTMLElement) || !root()?.contains(target))
293
318
  return;
319
+ scroller = target;
294
320
  if (held) {
321
+ heldScroll = true;
295
322
  release();
296
323
  return;
297
324
  }
298
- scroller = target;
299
325
  if (!frame)
300
326
  frame = requestAnimationFrame(measure);
301
327
  };
@@ -303,45 +329,31 @@ function createScrollSpy(root, pages, onPage, idleMs = 150) {
303
329
  const target = event.target;
304
330
  if (!target || !root()?.contains(target))
305
331
  return;
332
+ if (heldScroll && !frame)
333
+ frame = requestAnimationFrame(measure);
306
334
  held = false;
335
+ heldScroll = false;
307
336
  clearTimeout(idle);
308
337
  };
309
- document.addEventListener("scroll", onScroll, {
310
- capture: true,
311
- passive: true
312
- });
338
+ const stopScroll = listenForScroll(onScroll);
313
339
  const stopInput = listenForUserInput(document, onUserInput);
314
340
  return {
315
341
  hold() {
316
342
  held = true;
343
+ cancelCheck();
317
344
  cancelAnimationFrame(frame);
318
345
  frame = 0;
319
346
  release();
320
347
  },
321
348
  stop() {
322
- document.removeEventListener("scroll", onScroll, { capture: true });
349
+ stopScroll();
323
350
  stopInput();
351
+ cancelCheck();
324
352
  cancelAnimationFrame(frame);
325
353
  clearTimeout(idle);
326
354
  }
327
355
  };
328
356
  }
329
- function revealHit(findPage, hit, beforeScroll = () => {}, timeout = 5000) {
330
- const until = Date.now() + timeout;
331
- let frame = 0;
332
- const look = () => {
333
- const mark = findPage()?.querySelector(`mark[data-hit="${hit}"]`);
334
- if (mark) {
335
- beforeScroll();
336
- scrollIntoArea(mark, "center");
337
- return;
338
- }
339
- if (Date.now() < until)
340
- frame = requestAnimationFrame(look);
341
- };
342
- frame = requestAnimationFrame(look);
343
- return () => cancelAnimationFrame(frame);
344
- }
345
357
 
346
358
  // src/pdf-viewer/pdf-pin-page.ts
347
359
  var VIEWPORT = '[data-slot="scroll-area-viewport"]';
@@ -381,6 +393,23 @@ function pinHolds(node) {
381
393
  const offset = node.getBoundingClientRect().top - area.getBoundingClientRect().top;
382
394
  return atEnd && offset >= -2 || Math.abs(offset) <= 2;
383
395
  }
396
+ // src/pdf-viewer/pdf-reveal-hit.ts
397
+ function revealHit(findPage, hit, beforeScroll = () => {}, timeout = 5000) {
398
+ const until = Date.now() + timeout;
399
+ let frame = 0;
400
+ const look = () => {
401
+ const mark = findPage()?.querySelector(`mark[data-hit="${hit}"]`);
402
+ if (mark) {
403
+ beforeScroll();
404
+ scrollIntoArea(mark, "center");
405
+ return;
406
+ }
407
+ if (Date.now() < until)
408
+ frame = requestAnimationFrame(look);
409
+ };
410
+ frame = requestAnimationFrame(look);
411
+ return () => cancelAnimationFrame(frame);
412
+ }
384
413
  export {
385
414
  DEFAULT_PAGE_SIZE,
386
415
  FIT_PAGES,
@@ -396,6 +425,7 @@ export {
396
425
  loadPageText,
397
426
  mapPdfOutline,
398
427
  mostVisiblePage,
428
+ pageInView,
399
429
  pageRotation,
400
430
  pageTextFromItems,
401
431
  pinHolds,
@@ -411,5 +441,5 @@ export {
411
441
  withPageMatches
412
442
  };
413
443
 
414
- //# debugId=71863DCA45A690D164756E2164756E21
444
+ //# debugId=B919180681EC282C64756E2164756E21
415
445
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/pdf-viewer/pdf-escape.ts", "../src/pdf-viewer/pdf-text-search.ts", "../src/pdf-viewer/pdf-document-search.ts", "../src/pdf-viewer/pdf-page-geometry.ts", "../src/pdf-viewer/pdf-page-sizes.ts", "../src/pdf-viewer/pdf-user-input.ts", "../src/pdf-viewer/pdf-scroll-spy.ts", "../src/pdf-viewer/pdf-pin-page.ts"],
3
+ "sources": ["../src/pdf-viewer/pdf-escape.ts", "../src/pdf-viewer/pdf-text-search.ts", "../src/pdf-viewer/pdf-document-search.ts", "../src/pdf-viewer/pdf-page-geometry.ts", "../src/pdf-viewer/pdf-page-sizes.ts", "../src/pdf-viewer/pdf-user-input.ts", "../src/pdf-viewer/pdf-scroll-spy.ts", "../src/pdf-viewer/pdf-pin-page.ts", "../src/pdf-viewer/pdf-reveal-hit.ts"],
4
4
  "sourcesContent": [
5
5
  "export function escapeHtml(text: string): string {\n\treturn text\n\t\t.replace(/&/g, '&amp;')\n\t\t.replace(/</g, '&lt;')\n\t\t.replace(/>/g, '&gt;')\n\t\t.replace(/\"/g, '&quot;')\n\t\t.replace(/'/g, '&#39;');\n}\n\nexport function mapPdfOutline(items: unknown): {\n\ttitle: string;\n\tdest: unknown;\n\titems: ReturnType<typeof mapPdfOutline>;\n}[] {\n\tif (!Array.isArray(items)) return [];\n\treturn items.map((item) => {\n\t\tconst node = item as {\n\t\t\ttitle?: string;\n\t\t\tdest?: unknown;\n\t\t\titems?: unknown;\n\t\t};\n\t\treturn {\n\t\t\ttitle: String(node.title ?? ''),\n\t\t\tdest: node.dest ?? null,\n\t\t\titems: mapPdfOutline(node.items),\n\t\t};\n\t});\n}\n",
6
6
  "import { escapeHtml } from './pdf-escape';\n\n/** One item of `page.getTextContent()`: marked-content items have no `str`. */\nexport type PdfTextItem = { str?: string; hasEOL?: boolean };\n\n/** A page's text, and where each text item starts in it. */\nexport type PdfPageText = { text: string; starts: number[] };\n\n/** A match in a page's text: `end` is exclusive. */\nexport type PdfTextRange = { start: number; end: number };\n\n/** Joins the items' text, a line break after each item that ends a line. */\nexport function pageTextFromItems(items: readonly PdfTextItem[]): PdfPageText {\n\tlet text = '';\n\tconst starts: number[] = [];\n\tfor (const item of items) {\n\t\tstarts.push(text.length);\n\t\ttext += item.str ?? '';\n\t\tif (item.hasEOL) text += '\\n';\n\t}\n\treturn { text, starts };\n}\n\n/**\n * Lower case, accents and ligatures dropped (`Café` and `fi` match `cafe` and\n * `fi`), every run of white space one space; `origin` maps each folded\n * character back to its index in `text`.\n */\nfunction fold(text: string) {\n\tlet folded = '';\n\tconst origin: number[] = [];\n\tlet space = false;\n\tfor (let index = 0; index < text.length; index += 1) {\n\t\tconst char = text.charAt(index);\n\t\tif (/\\s/.test(char)) {\n\t\t\tif (!space) {\n\t\t\t\tfolded += ' ';\n\t\t\t\torigin.push(index);\n\t\t\t}\n\t\t\tspace = true;\n\t\t\tcontinue;\n\t\t}\n\t\tspace = false;\n\t\tfor (const part of char\n\t\t\t.normalize('NFKD')\n\t\t\t.replace(/\\p{M}/gu, '')\n\t\t\t.toLowerCase()) {\n\t\t\tfolded += part;\n\t\t\torigin.push(index);\n\t\t}\n\t}\n\treturn { folded, origin };\n}\n\n/** Every match of `query` in `text`, ignoring case, accents and spacing. */\nexport function findTextMatches(text: string, query: string): PdfTextRange[] {\n\tconst needle = fold(query.trim()).folded;\n\tif (!needle) return [];\n\tconst { folded, origin } = fold(text);\n\tconst matches: PdfTextRange[] = [];\n\tlet from = 0;\n\tfor (;;) {\n\t\tconst at = folded.indexOf(needle, from);\n\t\tif (at < 0) return matches;\n\t\tconst last = origin[at + needle.length - 1] ?? 0;\n\t\tmatches.push({ start: origin[at] ?? 0, end: last + 1 });\n\t\tfrom = at + needle.length;\n\t}\n}\n\n/**\n * One text item's HTML, its part of each match wrapped in\n * `<mark class=\"pdf-highlight\" data-hit=\"…\">`. A match across items gets a\n * mark in each; the current one also carries `data-current`.\n */\nexport function highlightItemHtml(\n\tstr: string,\n\titemStart: number,\n\tmatches: readonly PdfTextRange[],\n\tcurrent = -1,\n) {\n\tconst itemEnd = itemStart + str.length;\n\tlet html = '';\n\tlet at = itemStart;\n\tmatches.forEach((match, hit) => {\n\t\tif (match.end <= at || match.start >= itemEnd) return;\n\t\tconst start = Math.max(match.start, at);\n\t\tconst end = Math.min(match.end, itemEnd);\n\t\tconst mark = hit === current ? ' data-current=\"true\"' : '';\n\t\thtml += escapeHtml(str.slice(at - itemStart, start - itemStart));\n\t\thtml += `<mark class=\"pdf-highlight\" data-hit=\"${hit}\"${mark}>`;\n\t\thtml += `${escapeHtml(str.slice(start - itemStart, end - itemStart))}</mark>`;\n\t\tat = end;\n\t});\n\treturn html + escapeHtml(str.slice(at - itemStart));\n}\n",
@@ -8,10 +8,11 @@
8
8
  "/**\n * How the reader sizes a page: to the viewport's width, to the whole page, or\n * at a zoom the user chose.\n */\nexport type FitMode = 'width' | 'page' | 'custom';\n\n/**\n * A page's size in PDF points (1/72 inch), before any rotation, and the\n * rotation the page asks for itself (its `/Rotate`, in degrees clockwise).\n */\nexport type PdfPageSize = { width: number; height: number; rotate?: number };\n\n/** Used until a page's own size is known: US Letter. */\nexport const DEFAULT_PAGE_SIZE: PdfPageSize = { width: 612, height: 792 };\n\n/**\n * The fit zoom fits the first pages only, the ones read when the document\n * opens: pages read later never move it. A wider page further on is shown at\n * that zoom (and scrolls sideways in fit width).\n */\nexport const FIT_PAGES = 25;\n\n/** Room kept around the pages: the list's padding on each side. */\nexport const PAGE_PADDING = 32;\n\n// The reader's own MIN_SCALE and MAX_SCALE; kept here so this file stays\n// shared.\nconst MIN_FIT_SCALE = 0.25;\nconst MAX_FIT_SCALE = 5;\n\n/**\n * The rotation a page is drawn at: its own `/Rotate` plus the reader's, from\n * 0 to 270. `undefined` while the page's own is not known and the reader adds\n * none, so the renderer keeps the page's. Once the reader turns the pages, a\n * page whose size is not read yet (past the first chunk) is drawn at the\n * reader's rotation alone until its size arrives, then drawn again.\n */\nexport function pageRotation(\n\tsize: PdfPageSize | undefined,\n\trotation: number,\n): number | undefined {\n\tif (!size && !rotation) return undefined;\n\tconst turn = (size?.rotate ?? 0) + rotation;\n\treturn ((turn % 360) + 360) % 360;\n}\n\n/** The page's size on screen: turned by its own `/Rotate` and `rotation`. */\nexport function rotatedSize(size: PdfPageSize, rotation: number): PdfPageSize {\n\tconst turn = (size.rotate ?? 0) + rotation;\n\tconst quarter = ((turn % 180) + 180) % 180 === 90;\n\treturn quarter\n\t\t? { width: size.height, height: size.width }\n\t\t: { width: size.width, height: size.height };\n}\n\n/**\n * The widest and the tallest of the known pages, rotated. Fitting on it keeps\n * every page inside the box with one scale, so the zoom does not jump while\n * scrolling from an A4 page to a landscape one.\n */\nexport function largestPage(\n\tsizes: readonly (PdfPageSize | undefined)[],\n\trotation: number,\n): PdfPageSize {\n\tlet width = 0;\n\tlet height = 0;\n\tfor (const size of sizes) {\n\t\tif (!size) continue;\n\t\tconst turned = rotatedSize(size, rotation);\n\t\twidth = Math.max(width, turned.width);\n\t\theight = Math.max(height, turned.height);\n\t}\n\treturn width && height\n\t\t? { width, height }\n\t\t: rotatedSize(DEFAULT_PAGE_SIZE, rotation);\n}\n\n/**\n * The scale at which the largest page fits the box's width, or all of it,\n * within the reader's zoom range: a tiny page does not fit to 4000%.\n */\nexport function fitScale(\n\tmode: Exclude<FitMode, 'custom'>,\n\tlargest: PdfPageSize,\n\tbox: { width: number; height: number },\n\tpadding = PAGE_PADDING,\n) {\n\tconst byWidth = (box.width - padding) / largest.width;\n\tconst scale =\n\t\tmode === 'width'\n\t\t\t? byWidth\n\t\t\t: Math.min(byWidth, (box.height - padding) / largest.height);\n\treturn Math.min(MAX_FIT_SCALE, Math.max(MIN_FIT_SCALE, scale));\n}\n\n/**\n * The reader's zoom in fit width or fit page: the largest of the first\n * `FIT_PAGES` pages, rotated, fitted to the box.\n */\nexport function readerFitScale(\n\tmode: Exclude<FitMode, 'custom'>,\n\tsizes: readonly (PdfPageSize | undefined)[],\n\trotation: number,\n\tbox: { width: number; height: number },\n) {\n\treturn fitScale(mode, largestPage(sizes.slice(0, FIT_PAGES), rotation), box);\n}\n\n/** Pixel size of a page's placeholder before it renders. */\nexport function placeholderSize(\n\tsize: PdfPageSize | undefined,\n\tscale: number,\n\trotation: number,\n) {\n\tconst turned = rotatedSize(size ?? DEFAULT_PAGE_SIZE, rotation);\n\treturn {\n\t\twidth: Math.round(turned.width * scale),\n\t\theight: Math.round(turned.height * scale),\n\t};\n}\n",
9
9
  "import { FIT_PAGES, type PdfPageSize } from './pdf-page-geometry';\n\ntype SizedPage = {\n\t/** The page's own `/Rotate`, in degrees (pdf.js `PDFPageProxy.rotate`). */\n\trotate?: number;\n\tgetViewport: (options: { scale: number; rotation: number }) => {\n\t\twidth: number;\n\t\theight: number;\n\t};\n};\n\nexport type PdfSizedDocument = {\n\tnumPages: number;\n\tgetPage: (pageNumber: number) => Promise<SizedPage>;\n};\n\n/** What a load handler receives: `getPage` is optional for older callers. */\nexport type PdfLoadedDocument = Pick<PdfSizedDocument, 'numPages'> &\n\tPartial<Pick<PdfSizedDocument, 'getPage'>>;\n\n/**\n * Reads every page's size, unrotated, and its own `/Rotate`, `chunk` pages\n * at a time (at most `chunk` page objects asked for at once): the first chunk\n * at once, the rest in the background. `onSizes` gets the list known so far\n * after each chunk; the first report holds the pages the fit zoom is computed\n * from (`FIT_PAGES`), so later chunks never move it. `isCancelled` stops the\n * reading when the document changed.\n */\nexport async function readPageSizes(\n\tpdf: PdfSizedDocument,\n\tonSizes: (sizes: PdfPageSize[]) => void,\n\tisCancelled: () => boolean = () => false,\n\tchunk = FIT_PAGES,\n) {\n\tconst sizes: PdfPageSize[] = [];\n\tfor (let next = 1; next <= pdf.numPages; next += chunk) {\n\t\tconst last = Math.min(pdf.numPages, next + chunk - 1);\n\t\tconst pages = await Promise.all(\n\t\t\tArray.from({ length: last - next + 1 }, (_, index) =>\n\t\t\t\tpdf.getPage(next + index),\n\t\t\t),\n\t\t);\n\t\tif (isCancelled()) return;\n\t\tfor (const page of pages) {\n\t\t\tconst { width, height } = page.getViewport({ scale: 1, rotation: 0 });\n\t\t\tconst rotate = (((page.rotate ?? 0) % 360) + 360) % 360;\n\t\t\tsizes.push(rotate ? { width, height, rotate } : { width, height });\n\t\t}\n\t\tonSizes([...sizes]);\n\t}\n}\n\n/**\n * Reads the sizes of the document last loaded. `reset` forgets it when the\n * file changes, so sizes still arriving for it never land. A document\n * without `getPage` keeps the fallback size.\n */\nexport function createPageSizesLoader(onSizes: (sizes: PdfPageSize[]) => void) {\n\tlet generation = 0;\n\treturn {\n\t\treset() {\n\t\t\tgeneration += 1;\n\t\t},\n\t\tload(pdf: PdfLoadedDocument) {\n\t\t\tgeneration += 1;\n\t\t\tif (!pdf.getPage) return Promise.resolve();\n\t\t\tconst current = generation;\n\t\t\t// pdf.js reads `this` in getPage: pass the document itself.\n\t\t\treturn readPageSizes(\n\t\t\t\tpdf as PdfSizedDocument,\n\t\t\t\tonSizes,\n\t\t\t\t() => current !== generation,\n\t\t\t).catch(() => {\n\t\t\t\t/* a page failed or the document was destroyed: the rest keep the\n\t\t\t\t fallback size */\n\t\t\t});\n\t\t},\n\t};\n}\n",
10
10
  "/** What the user does to scroll a page area themselves. */\nconst USER_SCROLL_EVENTS = [\n\t'wheel',\n\t'touchstart',\n\t'pointerdown',\n\t'keydown',\n] as const;\n\n/**\n * Runs `run` on each wheel, touch, pointer or key event that reaches\n * `target`, in the capture phase. Returns a function that stops listening.\n * Internal: not re-exported from the subpath.\n */\nexport function listenForUserInput(\n\ttarget: EventTarget,\n\trun: (event: Event) => void,\n) {\n\tfor (const type of USER_SCROLL_EVENTS) {\n\t\ttarget.addEventListener(type, run, { capture: true, passive: true });\n\t}\n\treturn () => {\n\t\tfor (const type of USER_SCROLL_EVENTS) {\n\t\t\ttarget.removeEventListener(type, run, { capture: true });\n\t\t}\n\t};\n}\n",
11
- "import { listenForUserInput } from './pdf-user-input';\n\n/** A vertical extent on screen, as `getBoundingClientRect` gives it. */\nexport type PdfBox = { top: number; bottom: number };\n\n/**\n * The page with the most of itself on screen, the first one on a tie; once\n * scrolled to the end, the last page on screen, however little of it shows.\n */\nexport function mostVisiblePage(\n\tview: PdfBox & { atEnd: boolean },\n\tpages: Iterable<readonly [number, PdfBox]>,\n): number | null {\n\tlet best: number | null = null;\n\tlet bestSeen = 0;\n\tlet last: number | null = null;\n\tfor (const [page, box] of pages) {\n\t\tconst seen =\n\t\t\tMath.min(box.bottom, view.bottom) - Math.max(box.top, view.top);\n\t\tif (seen <= 0) continue;\n\t\tif (last === null || page > last) last = page;\n\t\tif (\n\t\t\tseen > bestSeen ||\n\t\t\t(seen === bestSeen && best !== null && page < best)\n\t\t) {\n\t\t\tbest = page;\n\t\t\tbestSeen = seen;\n\t\t}\n\t}\n\treturn view.atEnd && last !== null ? last : best;\n}\n\n/**\n * Scrolls the page area around `node`, and nothing else: `scrollIntoView`\n * would scroll the host page too. `block` puts `node` at the area's top or\n * centre.\n */\nexport function scrollIntoArea(\n\tnode: Element,\n\tblock: 'start' | 'center',\n\tbehavior: ScrollBehavior = 'smooth',\n) {\n\tconst area = node.closest<HTMLElement>('[data-slot=\"scroll-area-viewport\"]');\n\tif (!area) return;\n\tconst box = node.getBoundingClientRect();\n\tconst view = area.getBoundingClientRect();\n\tlet top = area.scrollTop + box.top - view.top;\n\tif (block === 'center') top -= (view.height - box.height) / 2;\n\tarea.scrollTo({ top: Math.max(0, top), behavior });\n}\n\n/**\n * Reports the page most on screen as the reader's page area (`root`)\n * scrolls. `hold`\n * ignores scrolling until it has stopped for `idleMs`: the reader calls it\n * before scrolling to a page itself, so the pages it passes on the way are\n * not reported. What the user does in the page area (wheel, touch, pointer,\n * key) ends a hold: the scrolling after it is theirs.\n */\nexport function createScrollSpy(\n\troot: () => HTMLElement | null | undefined,\n\tpages: () => ReadonlyMap<number, HTMLElement>,\n\tonPage: (page: number) => void,\n\tidleMs = 150,\n) {\n\tlet frame = 0;\n\tlet held = false;\n\tlet idle: ReturnType<typeof setTimeout> | undefined;\n\tlet scroller: HTMLElement | null = null;\n\n\tconst release = () => {\n\t\tclearTimeout(idle);\n\t\tidle = setTimeout(() => {\n\t\t\theld = false;\n\t\t}, idleMs);\n\t};\n\n\tconst measure = () => {\n\t\tframe = 0;\n\t\tif (!scroller) return;\n\t\tconst view = scroller.getBoundingClientRect();\n\t\tconst atEnd =\n\t\t\tscroller.scrollTop + scroller.clientHeight >= scroller.scrollHeight - 2;\n\t\tconst boxes = Array.from(pages(), ([page, node]) => {\n\t\t\tconst { top, bottom } = node.getBoundingClientRect();\n\t\t\treturn [page, { top, bottom }] as const;\n\t\t});\n\t\tconst page = mostVisiblePage(\n\t\t\t{ top: view.top, bottom: view.bottom, atEnd },\n\t\t\tboxes,\n\t\t);\n\t\tif (page !== null) onPage(page);\n\t};\n\n\tconst onScroll = (event: Event) => {\n\t\tconst target = event.target;\n\t\tif (!(target instanceof HTMLElement) || !root()?.contains(target)) return;\n\t\t// Scrolling during a hold is not measured again on release: that would\n\t\t// report the page a jump near the end scrolled past.\n\t\tif (held) {\n\t\t\trelease();\n\t\t\treturn;\n\t\t}\n\t\tscroller = target;\n\t\tif (!frame) frame = requestAnimationFrame(measure);\n\t};\n\n\tconst onUserInput = (event: Event) => {\n\t\t// Input on the document lands on a node (an SVG icon too).\n\t\tconst target = event.target as Node | null;\n\t\tif (!target || !root()?.contains(target)) return;\n\t\theld = false;\n\t\tclearTimeout(idle);\n\t};\n\n\t// Scroll events do not bubble: listen in the capture phase, on the\n\t// document, as the page area may be rendered again under the reader.\n\t// Plain DOM rather than react-use or VueUse: this file is shared.\n\tdocument.addEventListener('scroll', onScroll, {\n\t\tcapture: true,\n\t\tpassive: true,\n\t});\n\tconst stopInput = listenForUserInput(document, onUserInput);\n\n\treturn {\n\t\thold() {\n\t\t\theld = true;\n\t\t\tcancelAnimationFrame(frame);\n\t\t\tframe = 0;\n\t\t\trelease();\n\t\t},\n\t\tstop() {\n\t\t\tdocument.removeEventListener('scroll', onScroll, { capture: true });\n\t\t\tstopInput();\n\t\t\tcancelAnimationFrame(frame);\n\t\t\tclearTimeout(idle);\n\t\t},\n\t};\n}\n\n/**\n * Scrolls a page's match to the middle of the page area once the page has\n * drawn its mark, polling each frame for up to `timeout` ms; `beforeScroll`\n * runs first. Returns a function that stops waiting.\n */\nexport function revealHit(\n\tfindPage: () => ParentNode | null | undefined,\n\thit: number,\n\tbeforeScroll: () => void = () => {},\n\ttimeout = 5000,\n) {\n\tconst until = Date.now() + timeout;\n\tlet frame = 0;\n\tconst look = () => {\n\t\tconst mark = findPage()?.querySelector(`mark[data-hit=\"${hit}\"]`);\n\t\tif (mark) {\n\t\t\tbeforeScroll();\n\t\t\tscrollIntoArea(mark, 'center');\n\t\t\treturn;\n\t\t}\n\t\tif (Date.now() < until) frame = requestAnimationFrame(look);\n\t};\n\t// The page marks the match on its next render, not now.\n\tframe = requestAnimationFrame(look);\n\treturn () => cancelAnimationFrame(frame);\n}\n",
12
- "import { scrollIntoArea } from './pdf-scroll-spy';\nimport { listenForUserInput } from './pdf-user-input';\n\nconst VIEWPORT = '[data-slot=\"scroll-area-viewport\"]';\n\n/**\n * Keeps `node` at the top of the page area while the pages above it change\n * size (the zoom fitting to page sizes still arriving), until the user\n * scrolls, taps, clicks or types in the page area, or the returned function\n * is called. `beforeScroll` runs before each correction; `onRelease` once,\n * when the pin lets go (at once when there is nothing to pin).\n */\nexport function pinToPage(\n\tnode: () => Element | null | undefined,\n\tbeforeScroll: () => void,\n\tonRelease: () => void = () => {},\n) {\n\tconst area = node()?.closest(VIEWPORT);\n\tconst content = area?.firstElementChild;\n\tif (!area || !content || typeof ResizeObserver === 'undefined') {\n\t\tonRelease();\n\t\treturn () => {};\n\t}\n\t// The scroll area, not only its viewport: dragging the scrollbar counts.\n\tconst surface = area.closest('[data-slot=\"scroll-area\"]') ?? area;\n\tconst observer = new ResizeObserver(() => {\n\t\tconst target = node();\n\t\tif (!target) return;\n\t\tbeforeScroll();\n\t\tscrollIntoArea(target, 'start', 'auto');\n\t});\n\tobserver.observe(content);\n\tlet pinned = true;\n\t// A scroll event cannot tell the user's scroll from a correction; what\n\t// the user does first can.\n\tconst unpin = () => {\n\t\tif (!pinned) return;\n\t\tpinned = false;\n\t\tobserver.disconnect();\n\t\tstopListening();\n\t\tonRelease();\n\t};\n\tconst stopListening = listenForUserInput(surface, unpin);\n\treturn unpin;\n}\n\n/**\n * Whether the page area still shows `node` where a pin puts it: at the top,\n * or as near as the area can scroll (at its end). A scroll that leaves it\n * elsewhere came with no input the pin hears (find in page, a screen\n * reader's cursor, your own `scrollTop`): it is not the reader's.\n */\nexport function pinHolds(node: Element | null | undefined) {\n\tconst area = node?.closest<HTMLElement>(VIEWPORT);\n\tif (!node || !area) return false;\n\tconst atEnd = area.scrollTop + area.clientHeight >= area.scrollHeight - 2;\n\tconst offset =\n\t\tnode.getBoundingClientRect().top - area.getBoundingClientRect().top;\n\t// At the end, the pinned page may sit below the top (the area can\n\t// scroll no further), never above it: a jump to the last page left it.\n\treturn (atEnd && offset >= -2) || Math.abs(offset) <= 2;\n}\n"
11
+ "import { listenForUserInput } from './pdf-user-input';\n\n/** A vertical extent on screen, as `getBoundingClientRect` gives it. */\nexport type PdfBox = { top: number; bottom: number };\n\n/**\n * The page with the most of itself on screen, the first one on a tie; once\n * scrolled to the end, the last page on screen, however little of it shows.\n */\nexport function mostVisiblePage(\n\tview: PdfBox & { atEnd: boolean },\n\tpages: Iterable<readonly [number, PdfBox]>,\n): number | null {\n\tlet best: number | null = null;\n\tlet bestSeen = 0;\n\tlet last: number | null = null;\n\tfor (const [page, box] of pages) {\n\t\tconst seen =\n\t\t\tMath.min(box.bottom, view.bottom) - Math.max(box.top, view.top);\n\t\tif (seen <= 0) continue;\n\t\tif (last === null || page > last) last = page;\n\t\tif (\n\t\t\tseen > bestSeen ||\n\t\t\t(seen === bestSeen && best !== null && page < best)\n\t\t) {\n\t\t\tbest = page;\n\t\t\tbestSeen = seen;\n\t\t}\n\t}\n\treturn view.atEnd && last !== null ? last : best;\n}\n\n/**\n * Scrolls the page area around `node`, and nothing else: `scrollIntoView`\n * would scroll the host page too. `block` puts `node` at the area's top or\n * centre.\n */\nexport function scrollIntoArea(\n\tnode: Element,\n\tblock: 'start' | 'center',\n\tbehavior: ScrollBehavior = 'smooth',\n) {\n\tconst area = node.closest<HTMLElement>('[data-slot=\"scroll-area-viewport\"]');\n\tif (!area) return;\n\tconst box = node.getBoundingClientRect();\n\tconst view = area.getBoundingClientRect();\n\tlet top = area.scrollTop + box.top - view.top;\n\tif (block === 'center') top -= (view.height - box.height) / 2;\n\tarea.scrollTo({ top: Math.max(0, top), behavior });\n}\n\n/** The page most on screen in `scroller`, as `mostVisiblePage` picks it. */\nexport function pageInView(\n\tscroller: HTMLElement,\n\tpages: ReadonlyMap<number, HTMLElement>,\n) {\n\tconst view = scroller.getBoundingClientRect();\n\tconst atEnd =\n\t\tscroller.scrollTop + scroller.clientHeight >= scroller.scrollHeight - 2;\n\tconst boxes = Array.from(pages, ([page, node]) => {\n\t\tconst { top, bottom } = node.getBoundingClientRect();\n\t\treturn [page, { top, bottom }] as const;\n\t});\n\treturn mostVisiblePage({ top: view.top, bottom: view.bottom, atEnd }, boxes);\n}\n\n/** `createScrollSpy`'s options; a bare number is `idleMs`. */\nexport type ScrollSpyOptions = {\n\t/** How long scrolling must stop before a hold ends (150 ms). */\n\tidleMs?: number;\n\t/** Whether the view is still where the reader put it (always, by default). */\n\treaderPosition?: () => boolean;\n};\n\nconst spyOptions = (options: number | ScrollSpyOptions) =>\n\ttypeof options === 'number' ? { idleMs: options } : options;\n\n/**\n * Scroll events do not bubble: listens in the capture phase, on the\n * document, as the page area may be rendered again under the reader. Plain\n * DOM rather than react-use or VueUse: this file is shared.\n */\nfunction listenForScroll(onScroll: (event: Event) => void) {\n\tdocument.addEventListener('scroll', onScroll, {\n\t\tcapture: true,\n\t\tpassive: true,\n\t});\n\treturn () =>\n\t\tdocument.removeEventListener('scroll', onScroll, { capture: true });\n}\n\n/**\n * Runs `run` on the second frame from now, after the ResizeObserver\n * callbacks of the first. Returns a function that cancels it.\n */\nfunction afterResize(run: () => void) {\n\tlet id = requestAnimationFrame(() => {\n\t\tid = requestAnimationFrame(run);\n\t});\n\treturn () => cancelAnimationFrame(id);\n}\n\n/**\n * Reports the page most on screen as the reader's page area (`root`)\n * scrolls. `hold`\n * ignores scrolling until it has stopped for `idleMs`: the reader calls it\n * before scrolling to a page itself, so the pages it passes on the way are\n * not reported. What the user does in the page area (wheel, touch, pointer,\n * key) ends a hold: the scrolling after it is theirs, and a scroll the hold\n * ignored is measured.\n *\n * `readerPosition` says whether the view is still where the reader put it.\n * When the area scrolled during a hold and, two frames after release (once\n * a resize has had its correction), it is not (a scroll with no input\n * landed within the hold: find in page, a screen reader, a `scrollTop`),\n * the spy measures once. Two frames, as a frame runs before ResizeObserver:\n * the second sees a correction's hold, which cancels the check, rather than\n * the layout the correction is about to fix.\n *\n * Not covered: a second correction within the same hold, after such a\n * scroll, puts the view back where the reader put it, and the scroll is\n * then lost.\n */\nexport function createScrollSpy(\n\troot: () => HTMLElement | null | undefined,\n\tpages: () => ReadonlyMap<number, HTMLElement>,\n\tonPage: (page: number) => void,\n\toptions: number | ScrollSpyOptions = {},\n) {\n\tconst { idleMs = 150, readerPosition = () => true } = spyOptions(options);\n\tlet frame = 0;\n\tlet held = false;\n\tlet heldScroll = false; // the area scrolled during the current hold\n\tlet idle: ReturnType<typeof setTimeout> | undefined;\n\tlet scroller: HTMLElement | null = null;\n\tlet cancelCheck = () => {};\n\n\tconst measure = () => {\n\t\tframe = 0;\n\t\tconst page = scroller && pageInView(scroller, pages());\n\t\tif (page) onPage(page);\n\t};\n\n\tconst release = () => {\n\t\tclearTimeout(idle);\n\t\tidle = setTimeout(() => {\n\t\t\theld = false;\n\t\t\tif (heldScroll) {\n\t\t\t\tcancelCheck = afterResize(() => {\n\t\t\t\t\tif (!frame && !readerPosition()) measure();\n\t\t\t\t});\n\t\t\t}\n\t\t\theldScroll = false;\n\t\t}, idleMs);\n\t};\n\n\tconst onScroll = (event: Event) => {\n\t\tconst target = event.target;\n\t\tif (!(target instanceof HTMLElement) || !root()?.contains(target)) return;\n\t\tscroller = target;\n\t\t// Measured on release only off the reader's position: a jump near\n\t\t// the end would report the last page, which it scrolled past.\n\t\tif (held) {\n\t\t\theldScroll = true;\n\t\t\trelease();\n\t\t\treturn;\n\t\t}\n\t\tif (!frame) frame = requestAnimationFrame(measure);\n\t};\n\n\tconst onUserInput = (event: Event) => {\n\t\t// Input on the document lands on a node (an SVG icon too).\n\t\tconst target = event.target as Node | null;\n\t\tif (!target || !root()?.contains(target)) return;\n\t\tif (heldScroll && !frame) frame = requestAnimationFrame(measure);\n\t\theld = false;\n\t\theldScroll = false;\n\t\tclearTimeout(idle);\n\t};\n\n\tconst stopScroll = listenForScroll(onScroll);\n\tconst stopInput = listenForUserInput(document, onUserInput);\n\n\treturn {\n\t\thold() {\n\t\t\theld = true;\n\t\t\tcancelCheck();\n\t\t\tcancelAnimationFrame(frame);\n\t\t\tframe = 0;\n\t\t\trelease();\n\t\t},\n\t\tstop() {\n\t\t\tstopScroll();\n\t\t\tstopInput();\n\t\t\tcancelCheck();\n\t\t\tcancelAnimationFrame(frame);\n\t\t\tclearTimeout(idle);\n\t\t},\n\t};\n}\n",
12
+ "import { scrollIntoArea } from './pdf-scroll-spy';\nimport { listenForUserInput } from './pdf-user-input';\n\nconst VIEWPORT = '[data-slot=\"scroll-area-viewport\"]';\n\n/**\n * Keeps `node` at the top of the page area while the pages above it change\n * size (the zoom fitting to page sizes still arriving), until the user\n * scrolls, taps, clicks or types in the page area, or the returned function\n * is called. `beforeScroll` runs before each correction; `onRelease` once,\n * when the pin lets go (at once when there is nothing to pin).\n */\nexport function pinToPage(\n\tnode: () => Element | null | undefined,\n\tbeforeScroll: () => void,\n\tonRelease: () => void = () => {},\n) {\n\tconst area = node()?.closest(VIEWPORT);\n\tconst content = area?.firstElementChild;\n\tif (!area || !content || typeof ResizeObserver === 'undefined') {\n\t\tonRelease();\n\t\treturn () => {};\n\t}\n\t// The scroll area, not only its viewport: dragging the scrollbar counts.\n\tconst surface = area.closest('[data-slot=\"scroll-area\"]') ?? area;\n\tconst observer = new ResizeObserver(() => {\n\t\tconst target = node();\n\t\tif (!target) return;\n\t\tbeforeScroll();\n\t\tscrollIntoArea(target, 'start', 'auto');\n\t});\n\tobserver.observe(content);\n\tlet pinned = true;\n\t// A scroll event cannot tell the user's scroll from a correction; what\n\t// the user does first can.\n\tconst unpin = () => {\n\t\tif (!pinned) return;\n\t\tpinned = false;\n\t\tobserver.disconnect();\n\t\tstopListening();\n\t\tonRelease();\n\t};\n\tconst stopListening = listenForUserInput(surface, unpin);\n\treturn unpin;\n}\n\n/**\n * Whether the page area still shows `node` where a pin puts it: at the top,\n * or as near as the area can scroll (at its end). A scroll that leaves it\n * elsewhere came with no input the pin hears (find in page, a screen\n * reader's cursor, your own `scrollTop`): it is not the reader's.\n */\nexport function pinHolds(node: Element | null | undefined) {\n\tconst area = node?.closest<HTMLElement>(VIEWPORT);\n\tif (!node || !area) return false;\n\tconst atEnd = area.scrollTop + area.clientHeight >= area.scrollHeight - 2;\n\tconst offset =\n\t\tnode.getBoundingClientRect().top - area.getBoundingClientRect().top;\n\t// At the end, the pinned page may sit below the top (the area can\n\t// scroll no further), never above it: a jump to the last page left it.\n\treturn (atEnd && offset >= -2) || Math.abs(offset) <= 2;\n}\n",
13
+ "import { scrollIntoArea } from './pdf-scroll-spy';\n\n/**\n * Scrolls a page's match to the middle of the page area once the page has\n * drawn its mark, polling each frame for up to `timeout` ms; `beforeScroll`\n * runs first. Returns a function that stops waiting.\n */\nexport function revealHit(\n\tfindPage: () => ParentNode | null | undefined,\n\thit: number,\n\tbeforeScroll: () => void = () => {},\n\ttimeout = 5000,\n) {\n\tconst until = Date.now() + timeout;\n\tlet frame = 0;\n\tconst look = () => {\n\t\tconst mark = findPage()?.querySelector(`mark[data-hit=\"${hit}\"]`);\n\t\tif (mark) {\n\t\t\tbeforeScroll();\n\t\t\tscrollIntoArea(mark, 'center');\n\t\t\treturn;\n\t\t}\n\t\tif (Date.now() < until) frame = requestAnimationFrame(look);\n\t};\n\t// The page marks the match on its next render, not now.\n\tframe = requestAnimationFrame(look);\n\treturn () => cancelAnimationFrame(frame);\n}\n"
13
14
  ],
14
- "mappings": ";AAAO,SAAS,UAAU,CAAC,MAAsB;AAAA,EAChD,OAAO,KACL,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,QAAQ,EACtB,QAAQ,MAAM,OAAO;AAAA;AAGjB,SAAS,aAAa,CAAC,OAI1B;AAAA,EACH,IAAI,CAAC,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO,CAAC;AAAA,EACnC,OAAO,MAAM,IAAI,CAAC,SAAS;AAAA,IAC1B,MAAM,OAAO;AAAA,IAKb,OAAO;AAAA,MACN,OAAO,OAAO,KAAK,SAAS,EAAE;AAAA,MAC9B,MAAM,KAAK,QAAQ;AAAA,MACnB,OAAO,cAAc,KAAK,KAAK;AAAA,IAChC;AAAA,GACA;AAAA;;;ACdK,SAAS,iBAAiB,CAAC,OAA4C;AAAA,EAC7E,IAAI,OAAO;AAAA,EACX,MAAM,SAAmB,CAAC;AAAA,EAC1B,WAAW,QAAQ,OAAO;AAAA,IACzB,OAAO,KAAK,KAAK,MAAM;AAAA,IACvB,QAAQ,KAAK,OAAO;AAAA,IACpB,IAAI,KAAK;AAAA,MAAQ,QAAQ;AAAA;AAAA,EAC1B;AAAA,EACA,OAAO,EAAE,MAAM,OAAO;AAAA;AAQvB,SAAS,IAAI,CAAC,MAAc;AAAA,EAC3B,IAAI,SAAS;AAAA,EACb,MAAM,SAAmB,CAAC;AAAA,EAC1B,IAAI,QAAQ;AAAA,EACZ,SAAS,QAAQ,EAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;AAAA,IACpD,MAAM,OAAO,KAAK,OAAO,KAAK;AAAA,IAC9B,IAAI,KAAK,KAAK,IAAI,GAAG;AAAA,MACpB,IAAI,CAAC,OAAO;AAAA,QACX,UAAU;AAAA,QACV,OAAO,KAAK,KAAK;AAAA,MAClB;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,IACD;AAAA,IACA,QAAQ;AAAA,IACR,WAAW,QAAQ,KACjB,UAAU,MAAM,EAChB,QAAQ,WAAW,EAAE,EACrB,YAAY,GAAG;AAAA,MAChB,UAAU;AAAA,MACV,OAAO,KAAK,KAAK;AAAA,IAClB;AAAA,EACD;AAAA,EACA,OAAO,EAAE,QAAQ,OAAO;AAAA;AAIlB,SAAS,eAAe,CAAC,MAAc,OAA+B;AAAA,EAC5E,MAAM,SAAS,KAAK,MAAM,KAAK,CAAC,EAAE;AAAA,EAClC,IAAI,CAAC;AAAA,IAAQ,OAAO,CAAC;AAAA,EACrB,QAAQ,QAAQ,WAAW,KAAK,IAAI;AAAA,EACpC,MAAM,UAA0B,CAAC;AAAA,EACjC,IAAI,OAAO;AAAA,EACX,UAAS;AAAA,IACR,MAAM,KAAK,OAAO,QAAQ,QAAQ,IAAI;AAAA,IACtC,IAAI,KAAK;AAAA,MAAG,OAAO;AAAA,IACnB,MAAM,OAAO,OAAO,KAAK,OAAO,SAAS,MAAM;AAAA,IAC/C,QAAQ,KAAK,EAAE,OAAO,OAAO,OAAO,GAAG,KAAK,OAAO,EAAE,CAAC;AAAA,IACtD,OAAO,KAAK,OAAO;AAAA,EACpB;AAAA;AAQM,SAAS,iBAAiB,CAChC,KACA,WACA,SACA,UAAU,IACT;AAAA,EACD,MAAM,UAAU,YAAY,IAAI;AAAA,EAChC,IAAI,OAAO;AAAA,EACX,IAAI,KAAK;AAAA,EACT,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AAAA,IAC/B,IAAI,MAAM,OAAO,MAAM,MAAM,SAAS;AAAA,MAAS;AAAA,IAC/C,MAAM,QAAQ,KAAK,IAAI,MAAM,OAAO,EAAE;AAAA,IACtC,MAAM,MAAM,KAAK,IAAI,MAAM,KAAK,OAAO;AAAA,IACvC,MAAM,OAAO,QAAQ,UAAU,yBAAyB;AAAA,IACxD,QAAQ,WAAW,IAAI,MAAM,KAAK,WAAW,QAAQ,SAAS,CAAC;AAAA,IAC/D,QAAQ,yCAAyC,OAAO;AAAA,IACxD,QAAQ,GAAG,WAAW,IAAI,MAAM,QAAQ,WAAW,MAAM,SAAS,CAAC;AAAA,IACnE,KAAK;AAAA,GACL;AAAA,EACD,OAAO,OAAO,WAAW,IAAI,MAAM,KAAK,SAAS,CAAC;AAAA;;;AC5EnD,IAAM,QAAQ,IAAI;AAGX,SAAS,YAAY,CAAC,KAAoB,YAAoB;AAAA,EACpE,IAAI,QAAQ,MAAM,IAAI,GAAG;AAAA,EACzB,IAAI,CAAC,OAAO;AAAA,IACX,QAAQ,IAAI;AAAA,IACZ,MAAM,IAAI,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,OAAO,MAAM,IAAI,UAAU;AAAA,EAC/B,IAAI,CAAC,MAAM;AAAA,IACV,MAAM,QAAQ;AAAA,IAEd,OAAO,IACL,QAAQ,UAAU,EAClB,KAAK,CAAC,SAAS,KAAK,eAAe,CAAC,EACpC,KAAK,GAAG,YAAY,kBAAkB,KAAsB,CAAC;AAAA,IAE/D,KAAK,MAAM,MAAM,MAAM,OAAO,UAAU,CAAC;AAAA,IACzC,MAAM,IAAI,YAAY,IAAI;AAAA,EAC3B;AAAA,EACA,OAAO;AAAA;AAgBR,eAAsB,cAAc,CACnC,KACA,OACA,SACA,cAA6B,MAAM,OACnC,QAAQ,IACP;AAAA,EACD,IAAI,QAA0B,CAAC;AAAA,EAC/B,SAAS,OAAO,EAAG,QAAQ,IAAI,UAAU,QAAQ,GAAG;AAAA,IACnD,MAAM,OAAO,MAAM,aAAa,KAAK,IAAI;AAAA,IACzC,IAAI,YAAY;AAAA,MAAG;AAAA,IACnB,MAAM,KAAK,EAAE,MAAM,MAAM,SAAS,gBAAgB,KAAK,MAAM,KAAK,EAAE,CAAC;AAAA,IACrE,IAAI,SAAS,KAAK,MAAM,UAAU,SAAS,SAAS,IAAI,UAAU;AAAA,MACjE,QAAQ,KAAK;AAAA,MACb,QAAQ,CAAC;AAAA,IACV;AAAA,EACD;AAAA;AAUM,SAAS,eAAe,CAC9B,OACA,OACqB;AAAA,EACrB,MAAM,QAAQ,CAAC,GAAG,MAAM,KAAK;AAAA,EAC7B,MAAM,UAAU,CAAC,GAAG,MAAM,OAAO;AAAA,EACjC,aAAa,MAAM,MAAM,SAAS,YAAY,OAAO;AAAA,IACpD,MAAM,OAAO,KAAK;AAAA,IAClB,QAAQ,OAAO,KAAK;AAAA,EACrB;AAAA,EACA,OAAO,EAAE,OAAO,QAAQ;AAAA;AAOlB,SAAS,OAAO,CAAC,MAAc,OAAe,OAAe;AAAA,EACnE,IAAI,SAAS;AAAA,IAAG,OAAO;AAAA,EACvB,IAAI,OAAO;AAAA,IAAG,OAAO,QAAQ,IAAI,IAAI,QAAQ;AAAA,EAC7C,SAAU,OAAO,SAAS,QAAS,SAAS;AAAA;AAItC,SAAS,KAAK,CACpB,QACA,OACsB;AAAA,EACtB,IAAI,OAAO;AAAA,EACX,SAAS,OAAO,EAAG,OAAO,OAAO,QAAQ,QAAQ,GAAG;AAAA,IACnD,MAAM,QAAQ,OAAO,SAAS;AAAA,IAC9B,IAAI,OAAO;AAAA,MAAO,OAAO,EAAE,MAAM,OAAO,GAAG,KAAK,KAAK;AAAA,IACrD,QAAQ;AAAA,EACT;AAAA,EACA,OAAO;AAAA;;ACtGD,IAAM,oBAAiC,EAAE,OAAO,KAAK,QAAQ,IAAI;AAOjE,IAAM,YAAY;AAGlB,IAAM,eAAe;AAI5B,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AASf,SAAS,YAAY,CAC3B,MACA,UACqB;AAAA,EACrB,IAAI,CAAC,QAAQ,CAAC;AAAA,IAAU;AAAA,EACxB,MAAM,QAAQ,MAAM,UAAU,KAAK;AAAA,EACnC,QAAS,OAAO,MAAO,OAAO;AAAA;AAIxB,SAAS,WAAW,CAAC,MAAmB,UAA+B;AAAA,EAC7E,MAAM,QAAQ,KAAK,UAAU,KAAK;AAAA,EAClC,MAAM,WAAY,OAAO,MAAO,OAAO,QAAQ;AAAA,EAC/C,OAAO,UACJ,EAAE,OAAO,KAAK,QAAQ,QAAQ,KAAK,MAAM,IACzC,EAAE,OAAO,KAAK,OAAO,QAAQ,KAAK,OAAO;AAAA;AAQtC,SAAS,WAAW,CAC1B,OACA,UACc;AAAA,EACd,IAAI,QAAQ;AAAA,EACZ,IAAI,SAAS;AAAA,EACb,WAAW,QAAQ,OAAO;AAAA,IACzB,IAAI,CAAC;AAAA,MAAM;AAAA,IACX,MAAM,SAAS,YAAY,MAAM,QAAQ;AAAA,IACzC,QAAQ,KAAK,IAAI,OAAO,OAAO,KAAK;AAAA,IACpC,SAAS,KAAK,IAAI,QAAQ,OAAO,MAAM;AAAA,EACxC;AAAA,EACA,OAAO,SAAS,SACb,EAAE,OAAO,OAAO,IAChB,YAAY,mBAAmB,QAAQ;AAAA;AAOpC,SAAS,QAAQ,CACvB,MACA,SACA,KACA,UAAU,cACT;AAAA,EACD,MAAM,WAAW,IAAI,QAAQ,WAAW,QAAQ;AAAA,EAChD,MAAM,QACL,SAAS,UACN,UACA,KAAK,IAAI,UAAU,IAAI,SAAS,WAAW,QAAQ,MAAM;AAAA,EAC7D,OAAO,KAAK,IAAI,eAAe,KAAK,IAAI,eAAe,KAAK,CAAC;AAAA;AAOvD,SAAS,cAAc,CAC7B,MACA,OACA,UACA,KACC;AAAA,EACD,OAAO,SAAS,MAAM,YAAY,MAAM,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,GAAG;AAAA;AAIrE,SAAS,eAAe,CAC9B,MACA,OACA,UACC;AAAA,EACD,MAAM,SAAS,YAAY,QAAQ,mBAAmB,QAAQ;AAAA,EAC9D,OAAO;AAAA,IACN,OAAO,KAAK,MAAM,OAAO,QAAQ,KAAK;AAAA,IACtC,QAAQ,KAAK,MAAM,OAAO,SAAS,KAAK;AAAA,EACzC;AAAA;;AC1FD,eAAsB,aAAa,CAClC,KACA,SACA,cAA6B,MAAM,OACnC,QAAQ,WACP;AAAA,EACD,MAAM,QAAuB,CAAC;AAAA,EAC9B,SAAS,OAAO,EAAG,QAAQ,IAAI,UAAU,QAAQ,OAAO;AAAA,IACvD,MAAM,OAAO,KAAK,IAAI,IAAI,UAAU,OAAO,QAAQ,CAAC;AAAA,IACpD,MAAM,QAAQ,MAAM,QAAQ,IAC3B,MAAM,KAAK,EAAE,QAAQ,OAAO,OAAO,EAAE,GAAG,CAAC,GAAG,UAC3C,IAAI,QAAQ,OAAO,KAAK,CACzB,CACD;AAAA,IACA,IAAI,YAAY;AAAA,MAAG;AAAA,IACnB,WAAW,QAAQ,OAAO;AAAA,MACzB,QAAQ,OAAO,WAAW,KAAK,YAAY,EAAE,OAAO,GAAG,UAAU,EAAE,CAAC;AAAA,MACpE,MAAM,WAAY,KAAK,UAAU,KAAK,MAAO,OAAO;AAAA,MACpD,MAAM,KAAK,SAAS,EAAE,OAAO,QAAQ,OAAO,IAAI,EAAE,OAAO,OAAO,CAAC;AAAA,IAClE;AAAA,IACA,QAAQ,CAAC,GAAG,KAAK,CAAC;AAAA,EACnB;AAAA;AAQM,SAAS,qBAAqB,CAAC,SAAyC;AAAA,EAC9E,IAAI,aAAa;AAAA,EACjB,OAAO;AAAA,IACN,KAAK,GAAG;AAAA,MACP,cAAc;AAAA;AAAA,IAEf,IAAI,CAAC,KAAwB;AAAA,MAC5B,cAAc;AAAA,MACd,IAAI,CAAC,IAAI;AAAA,QAAS,OAAO,QAAQ,QAAQ;AAAA,MACzC,MAAM,UAAU;AAAA,MAEhB,OAAO,cACN,KACA,SACA,MAAM,YAAY,UACnB,EAAE,MAAM,MAAM,EAGb;AAAA;AAAA,EAEH;AAAA;;AC5ED,IAAM,qBAAqB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAOO,SAAS,kBAAkB,CACjC,QACA,KACC;AAAA,EACD,WAAW,QAAQ,oBAAoB;AAAA,IACtC,OAAO,iBAAiB,MAAM,KAAK,EAAE,SAAS,MAAM,SAAS,KAAK,CAAC;AAAA,EACpE;AAAA,EACA,OAAO,MAAM;AAAA,IACZ,WAAW,QAAQ,oBAAoB;AAAA,MACtC,OAAO,oBAAoB,MAAM,KAAK,EAAE,SAAS,KAAK,CAAC;AAAA,IACxD;AAAA;AAAA;;;ACdK,SAAS,eAAe,CAC9B,MACA,OACgB;AAAA,EAChB,IAAI,OAAsB;AAAA,EAC1B,IAAI,WAAW;AAAA,EACf,IAAI,OAAsB;AAAA,EAC1B,YAAY,MAAM,QAAQ,OAAO;AAAA,IAChC,MAAM,OACL,KAAK,IAAI,IAAI,QAAQ,KAAK,MAAM,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,GAAG;AAAA,IAC/D,IAAI,QAAQ;AAAA,MAAG;AAAA,IACf,IAAI,SAAS,QAAQ,OAAO;AAAA,MAAM,OAAO;AAAA,IACzC,IACC,OAAO,YACN,SAAS,YAAY,SAAS,QAAQ,OAAO,MAC7C;AAAA,MACD,OAAO;AAAA,MACP,WAAW;AAAA,IACZ;AAAA,EACD;AAAA,EACA,OAAO,KAAK,SAAS,SAAS,OAAO,OAAO;AAAA;AAQtC,SAAS,cAAc,CAC7B,MACA,OACA,WAA2B,UAC1B;AAAA,EACD,MAAM,OAAO,KAAK,QAAqB,oCAAoC;AAAA,EAC3E,IAAI,CAAC;AAAA,IAAM;AAAA,EACX,MAAM,MAAM,KAAK,sBAAsB;AAAA,EACvC,MAAM,OAAO,KAAK,sBAAsB;AAAA,EACxC,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK;AAAA,EAC1C,IAAI,UAAU;AAAA,IAAU,QAAQ,KAAK,SAAS,IAAI,UAAU;AAAA,EAC5D,KAAK,SAAS,EAAE,KAAK,KAAK,IAAI,GAAG,GAAG,GAAG,SAAS,CAAC;AAAA;AAW3C,SAAS,eAAe,CAC9B,MACA,OACA,QACA,SAAS,KACR;AAAA,EACD,IAAI,QAAQ;AAAA,EACZ,IAAI,OAAO;AAAA,EACX,IAAI;AAAA,EACJ,IAAI,WAA+B;AAAA,EAEnC,MAAM,UAAU,MAAM;AAAA,IACrB,aAAa,IAAI;AAAA,IACjB,OAAO,WAAW,MAAM;AAAA,MACvB,OAAO;AAAA,OACL,MAAM;AAAA;AAAA,EAGV,MAAM,UAAU,MAAM;AAAA,IACrB,QAAQ;AAAA,IACR,IAAI,CAAC;AAAA,MAAU;AAAA,IACf,MAAM,OAAO,SAAS,sBAAsB;AAAA,IAC5C,MAAM,QACL,SAAS,YAAY,SAAS,gBAAgB,SAAS,eAAe;AAAA,IACvE,MAAM,QAAQ,MAAM,KAAK,MAAM,GAAG,EAAE,MAAM,UAAU;AAAA,MACnD,QAAQ,KAAK,WAAW,KAAK,sBAAsB;AAAA,MACnD,OAAO,CAAC,MAAM,EAAE,KAAK,OAAO,CAAC;AAAA,KAC7B;AAAA,IACD,MAAM,OAAO,gBACZ,EAAE,KAAK,KAAK,KAAK,QAAQ,KAAK,QAAQ,MAAM,GAC5C,KACD;AAAA,IACA,IAAI,SAAS;AAAA,MAAM,OAAO,IAAI;AAAA;AAAA,EAG/B,MAAM,WAAW,CAAC,UAAiB;AAAA,IAClC,MAAM,SAAS,MAAM;AAAA,IACrB,IAAI,EAAE,kBAAkB,gBAAgB,CAAC,KAAK,GAAG,SAAS,MAAM;AAAA,MAAG;AAAA,IAGnE,IAAI,MAAM;AAAA,MACT,QAAQ;AAAA,MACR;AAAA,IACD;AAAA,IACA,WAAW;AAAA,IACX,IAAI,CAAC;AAAA,MAAO,QAAQ,sBAAsB,OAAO;AAAA;AAAA,EAGlD,MAAM,cAAc,CAAC,UAAiB;AAAA,IAErC,MAAM,SAAS,MAAM;AAAA,IACrB,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,SAAS,MAAM;AAAA,MAAG;AAAA,IAC1C,OAAO;AAAA,IACP,aAAa,IAAI;AAAA;AAAA,EAMlB,SAAS,iBAAiB,UAAU,UAAU;AAAA,IAC7C,SAAS;AAAA,IACT,SAAS;AAAA,EACV,CAAC;AAAA,EACD,MAAM,YAAY,mBAAmB,UAAU,WAAW;AAAA,EAE1D,OAAO;AAAA,IACN,IAAI,GAAG;AAAA,MACN,OAAO;AAAA,MACP,qBAAqB,KAAK;AAAA,MAC1B,QAAQ;AAAA,MACR,QAAQ;AAAA;AAAA,IAET,IAAI,GAAG;AAAA,MACN,SAAS,oBAAoB,UAAU,UAAU,EAAE,SAAS,KAAK,CAAC;AAAA,MAClE,UAAU;AAAA,MACV,qBAAqB,KAAK;AAAA,MAC1B,aAAa,IAAI;AAAA;AAAA,EAEnB;AAAA;AAQM,SAAS,SAAS,CACxB,UACA,KACA,eAA2B,MAAM,IACjC,UAAU,MACT;AAAA,EACD,MAAM,QAAQ,KAAK,IAAI,IAAI;AAAA,EAC3B,IAAI,QAAQ;AAAA,EACZ,MAAM,OAAO,MAAM;AAAA,IAClB,MAAM,OAAO,SAAS,GAAG,cAAc,kBAAkB,OAAO;AAAA,IAChE,IAAI,MAAM;AAAA,MACT,aAAa;AAAA,MACb,eAAe,MAAM,QAAQ;AAAA,MAC7B;AAAA,IACD;AAAA,IACA,IAAI,KAAK,IAAI,IAAI;AAAA,MAAO,QAAQ,sBAAsB,IAAI;AAAA;AAAA,EAG3D,QAAQ,sBAAsB,IAAI;AAAA,EAClC,OAAO,MAAM,qBAAqB,KAAK;AAAA;;;ACjKxC,IAAM,WAAW;AASV,SAAS,SAAS,CACxB,MACA,cACA,YAAwB,MAAM,IAC7B;AAAA,EACD,MAAM,OAAO,KAAK,GAAG,QAAQ,QAAQ;AAAA,EACrC,MAAM,UAAU,MAAM;AAAA,EACtB,IAAI,CAAC,QAAQ,CAAC,WAAW,OAAO,mBAAmB,aAAa;AAAA,IAC/D,UAAU;AAAA,IACV,OAAO,MAAM;AAAA,EACd;AAAA,EAEA,MAAM,UAAU,KAAK,QAAQ,2BAA2B,KAAK;AAAA,EAC7D,MAAM,WAAW,IAAI,eAAe,MAAM;AAAA,IACzC,MAAM,SAAS,KAAK;AAAA,IACpB,IAAI,CAAC;AAAA,MAAQ;AAAA,IACb,aAAa;AAAA,IACb,eAAe,QAAQ,SAAS,MAAM;AAAA,GACtC;AAAA,EACD,SAAS,QAAQ,OAAO;AAAA,EACxB,IAAI,SAAS;AAAA,EAGb,MAAM,QAAQ,MAAM;AAAA,IACnB,IAAI,CAAC;AAAA,MAAQ;AAAA,IACb,SAAS;AAAA,IACT,SAAS,WAAW;AAAA,IACpB,cAAc;AAAA,IACd,UAAU;AAAA;AAAA,EAEX,MAAM,gBAAgB,mBAAmB,SAAS,KAAK;AAAA,EACvD,OAAO;AAAA;AASD,SAAS,QAAQ,CAAC,MAAkC;AAAA,EAC1D,MAAM,OAAO,MAAM,QAAqB,QAAQ;AAAA,EAChD,IAAI,CAAC,QAAQ,CAAC;AAAA,IAAM,OAAO;AAAA,EAC3B,MAAM,QAAQ,KAAK,YAAY,KAAK,gBAAgB,KAAK,eAAe;AAAA,EACxE,MAAM,SACL,KAAK,sBAAsB,EAAE,MAAM,KAAK,sBAAsB,EAAE;AAAA,EAGjE,OAAQ,SAAS,UAAU,MAAO,KAAK,IAAI,MAAM,KAAK;AAAA;",
15
- "debugId": "71863DCA45A690D164756E2164756E21",
15
+ "mappings": ";AAAO,SAAS,UAAU,CAAC,MAAsB;AAAA,EAChD,OAAO,KACL,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,QAAQ,EACtB,QAAQ,MAAM,OAAO;AAAA;AAGjB,SAAS,aAAa,CAAC,OAI1B;AAAA,EACH,IAAI,CAAC,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO,CAAC;AAAA,EACnC,OAAO,MAAM,IAAI,CAAC,SAAS;AAAA,IAC1B,MAAM,OAAO;AAAA,IAKb,OAAO;AAAA,MACN,OAAO,OAAO,KAAK,SAAS,EAAE;AAAA,MAC9B,MAAM,KAAK,QAAQ;AAAA,MACnB,OAAO,cAAc,KAAK,KAAK;AAAA,IAChC;AAAA,GACA;AAAA;;;ACdK,SAAS,iBAAiB,CAAC,OAA4C;AAAA,EAC7E,IAAI,OAAO;AAAA,EACX,MAAM,SAAmB,CAAC;AAAA,EAC1B,WAAW,QAAQ,OAAO;AAAA,IACzB,OAAO,KAAK,KAAK,MAAM;AAAA,IACvB,QAAQ,KAAK,OAAO;AAAA,IACpB,IAAI,KAAK;AAAA,MAAQ,QAAQ;AAAA;AAAA,EAC1B;AAAA,EACA,OAAO,EAAE,MAAM,OAAO;AAAA;AAQvB,SAAS,IAAI,CAAC,MAAc;AAAA,EAC3B,IAAI,SAAS;AAAA,EACb,MAAM,SAAmB,CAAC;AAAA,EAC1B,IAAI,QAAQ;AAAA,EACZ,SAAS,QAAQ,EAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;AAAA,IACpD,MAAM,OAAO,KAAK,OAAO,KAAK;AAAA,IAC9B,IAAI,KAAK,KAAK,IAAI,GAAG;AAAA,MACpB,IAAI,CAAC,OAAO;AAAA,QACX,UAAU;AAAA,QACV,OAAO,KAAK,KAAK;AAAA,MAClB;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,IACD;AAAA,IACA,QAAQ;AAAA,IACR,WAAW,QAAQ,KACjB,UAAU,MAAM,EAChB,QAAQ,WAAW,EAAE,EACrB,YAAY,GAAG;AAAA,MAChB,UAAU;AAAA,MACV,OAAO,KAAK,KAAK;AAAA,IAClB;AAAA,EACD;AAAA,EACA,OAAO,EAAE,QAAQ,OAAO;AAAA;AAIlB,SAAS,eAAe,CAAC,MAAc,OAA+B;AAAA,EAC5E,MAAM,SAAS,KAAK,MAAM,KAAK,CAAC,EAAE;AAAA,EAClC,IAAI,CAAC;AAAA,IAAQ,OAAO,CAAC;AAAA,EACrB,QAAQ,QAAQ,WAAW,KAAK,IAAI;AAAA,EACpC,MAAM,UAA0B,CAAC;AAAA,EACjC,IAAI,OAAO;AAAA,EACX,UAAS;AAAA,IACR,MAAM,KAAK,OAAO,QAAQ,QAAQ,IAAI;AAAA,IACtC,IAAI,KAAK;AAAA,MAAG,OAAO;AAAA,IACnB,MAAM,OAAO,OAAO,KAAK,OAAO,SAAS,MAAM;AAAA,IAC/C,QAAQ,KAAK,EAAE,OAAO,OAAO,OAAO,GAAG,KAAK,OAAO,EAAE,CAAC;AAAA,IACtD,OAAO,KAAK,OAAO;AAAA,EACpB;AAAA;AAQM,SAAS,iBAAiB,CAChC,KACA,WACA,SACA,UAAU,IACT;AAAA,EACD,MAAM,UAAU,YAAY,IAAI;AAAA,EAChC,IAAI,OAAO;AAAA,EACX,IAAI,KAAK;AAAA,EACT,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AAAA,IAC/B,IAAI,MAAM,OAAO,MAAM,MAAM,SAAS;AAAA,MAAS;AAAA,IAC/C,MAAM,QAAQ,KAAK,IAAI,MAAM,OAAO,EAAE;AAAA,IACtC,MAAM,MAAM,KAAK,IAAI,MAAM,KAAK,OAAO;AAAA,IACvC,MAAM,OAAO,QAAQ,UAAU,yBAAyB;AAAA,IACxD,QAAQ,WAAW,IAAI,MAAM,KAAK,WAAW,QAAQ,SAAS,CAAC;AAAA,IAC/D,QAAQ,yCAAyC,OAAO;AAAA,IACxD,QAAQ,GAAG,WAAW,IAAI,MAAM,QAAQ,WAAW,MAAM,SAAS,CAAC;AAAA,IACnE,KAAK;AAAA,GACL;AAAA,EACD,OAAO,OAAO,WAAW,IAAI,MAAM,KAAK,SAAS,CAAC;AAAA;;;AC5EnD,IAAM,QAAQ,IAAI;AAGX,SAAS,YAAY,CAAC,KAAoB,YAAoB;AAAA,EACpE,IAAI,QAAQ,MAAM,IAAI,GAAG;AAAA,EACzB,IAAI,CAAC,OAAO;AAAA,IACX,QAAQ,IAAI;AAAA,IACZ,MAAM,IAAI,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,OAAO,MAAM,IAAI,UAAU;AAAA,EAC/B,IAAI,CAAC,MAAM;AAAA,IACV,MAAM,QAAQ;AAAA,IAEd,OAAO,IACL,QAAQ,UAAU,EAClB,KAAK,CAAC,SAAS,KAAK,eAAe,CAAC,EACpC,KAAK,GAAG,YAAY,kBAAkB,KAAsB,CAAC;AAAA,IAE/D,KAAK,MAAM,MAAM,MAAM,OAAO,UAAU,CAAC;AAAA,IACzC,MAAM,IAAI,YAAY,IAAI;AAAA,EAC3B;AAAA,EACA,OAAO;AAAA;AAgBR,eAAsB,cAAc,CACnC,KACA,OACA,SACA,cAA6B,MAAM,OACnC,QAAQ,IACP;AAAA,EACD,IAAI,QAA0B,CAAC;AAAA,EAC/B,SAAS,OAAO,EAAG,QAAQ,IAAI,UAAU,QAAQ,GAAG;AAAA,IACnD,MAAM,OAAO,MAAM,aAAa,KAAK,IAAI;AAAA,IACzC,IAAI,YAAY;AAAA,MAAG;AAAA,IACnB,MAAM,KAAK,EAAE,MAAM,MAAM,SAAS,gBAAgB,KAAK,MAAM,KAAK,EAAE,CAAC;AAAA,IACrE,IAAI,SAAS,KAAK,MAAM,UAAU,SAAS,SAAS,IAAI,UAAU;AAAA,MACjE,QAAQ,KAAK;AAAA,MACb,QAAQ,CAAC;AAAA,IACV;AAAA,EACD;AAAA;AAUM,SAAS,eAAe,CAC9B,OACA,OACqB;AAAA,EACrB,MAAM,QAAQ,CAAC,GAAG,MAAM,KAAK;AAAA,EAC7B,MAAM,UAAU,CAAC,GAAG,MAAM,OAAO;AAAA,EACjC,aAAa,MAAM,MAAM,SAAS,YAAY,OAAO;AAAA,IACpD,MAAM,OAAO,KAAK;AAAA,IAClB,QAAQ,OAAO,KAAK;AAAA,EACrB;AAAA,EACA,OAAO,EAAE,OAAO,QAAQ;AAAA;AAOlB,SAAS,OAAO,CAAC,MAAc,OAAe,OAAe;AAAA,EACnE,IAAI,SAAS;AAAA,IAAG,OAAO;AAAA,EACvB,IAAI,OAAO;AAAA,IAAG,OAAO,QAAQ,IAAI,IAAI,QAAQ;AAAA,EAC7C,SAAU,OAAO,SAAS,QAAS,SAAS;AAAA;AAItC,SAAS,KAAK,CACpB,QACA,OACsB;AAAA,EACtB,IAAI,OAAO;AAAA,EACX,SAAS,OAAO,EAAG,OAAO,OAAO,QAAQ,QAAQ,GAAG;AAAA,IACnD,MAAM,QAAQ,OAAO,SAAS;AAAA,IAC9B,IAAI,OAAO;AAAA,MAAO,OAAO,EAAE,MAAM,OAAO,GAAG,KAAK,KAAK;AAAA,IACrD,QAAQ;AAAA,EACT;AAAA,EACA,OAAO;AAAA;;ACtGD,IAAM,oBAAiC,EAAE,OAAO,KAAK,QAAQ,IAAI;AAOjE,IAAM,YAAY;AAGlB,IAAM,eAAe;AAI5B,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AASf,SAAS,YAAY,CAC3B,MACA,UACqB;AAAA,EACrB,IAAI,CAAC,QAAQ,CAAC;AAAA,IAAU;AAAA,EACxB,MAAM,QAAQ,MAAM,UAAU,KAAK;AAAA,EACnC,QAAS,OAAO,MAAO,OAAO;AAAA;AAIxB,SAAS,WAAW,CAAC,MAAmB,UAA+B;AAAA,EAC7E,MAAM,QAAQ,KAAK,UAAU,KAAK;AAAA,EAClC,MAAM,WAAY,OAAO,MAAO,OAAO,QAAQ;AAAA,EAC/C,OAAO,UACJ,EAAE,OAAO,KAAK,QAAQ,QAAQ,KAAK,MAAM,IACzC,EAAE,OAAO,KAAK,OAAO,QAAQ,KAAK,OAAO;AAAA;AAQtC,SAAS,WAAW,CAC1B,OACA,UACc;AAAA,EACd,IAAI,QAAQ;AAAA,EACZ,IAAI,SAAS;AAAA,EACb,WAAW,QAAQ,OAAO;AAAA,IACzB,IAAI,CAAC;AAAA,MAAM;AAAA,IACX,MAAM,SAAS,YAAY,MAAM,QAAQ;AAAA,IACzC,QAAQ,KAAK,IAAI,OAAO,OAAO,KAAK;AAAA,IACpC,SAAS,KAAK,IAAI,QAAQ,OAAO,MAAM;AAAA,EACxC;AAAA,EACA,OAAO,SAAS,SACb,EAAE,OAAO,OAAO,IAChB,YAAY,mBAAmB,QAAQ;AAAA;AAOpC,SAAS,QAAQ,CACvB,MACA,SACA,KACA,UAAU,cACT;AAAA,EACD,MAAM,WAAW,IAAI,QAAQ,WAAW,QAAQ;AAAA,EAChD,MAAM,QACL,SAAS,UACN,UACA,KAAK,IAAI,UAAU,IAAI,SAAS,WAAW,QAAQ,MAAM;AAAA,EAC7D,OAAO,KAAK,IAAI,eAAe,KAAK,IAAI,eAAe,KAAK,CAAC;AAAA;AAOvD,SAAS,cAAc,CAC7B,MACA,OACA,UACA,KACC;AAAA,EACD,OAAO,SAAS,MAAM,YAAY,MAAM,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,GAAG;AAAA;AAIrE,SAAS,eAAe,CAC9B,MACA,OACA,UACC;AAAA,EACD,MAAM,SAAS,YAAY,QAAQ,mBAAmB,QAAQ;AAAA,EAC9D,OAAO;AAAA,IACN,OAAO,KAAK,MAAM,OAAO,QAAQ,KAAK;AAAA,IACtC,QAAQ,KAAK,MAAM,OAAO,SAAS,KAAK;AAAA,EACzC;AAAA;;AC1FD,eAAsB,aAAa,CAClC,KACA,SACA,cAA6B,MAAM,OACnC,QAAQ,WACP;AAAA,EACD,MAAM,QAAuB,CAAC;AAAA,EAC9B,SAAS,OAAO,EAAG,QAAQ,IAAI,UAAU,QAAQ,OAAO;AAAA,IACvD,MAAM,OAAO,KAAK,IAAI,IAAI,UAAU,OAAO,QAAQ,CAAC;AAAA,IACpD,MAAM,QAAQ,MAAM,QAAQ,IAC3B,MAAM,KAAK,EAAE,QAAQ,OAAO,OAAO,EAAE,GAAG,CAAC,GAAG,UAC3C,IAAI,QAAQ,OAAO,KAAK,CACzB,CACD;AAAA,IACA,IAAI,YAAY;AAAA,MAAG;AAAA,IACnB,WAAW,QAAQ,OAAO;AAAA,MACzB,QAAQ,OAAO,WAAW,KAAK,YAAY,EAAE,OAAO,GAAG,UAAU,EAAE,CAAC;AAAA,MACpE,MAAM,WAAY,KAAK,UAAU,KAAK,MAAO,OAAO;AAAA,MACpD,MAAM,KAAK,SAAS,EAAE,OAAO,QAAQ,OAAO,IAAI,EAAE,OAAO,OAAO,CAAC;AAAA,IAClE;AAAA,IACA,QAAQ,CAAC,GAAG,KAAK,CAAC;AAAA,EACnB;AAAA;AAQM,SAAS,qBAAqB,CAAC,SAAyC;AAAA,EAC9E,IAAI,aAAa;AAAA,EACjB,OAAO;AAAA,IACN,KAAK,GAAG;AAAA,MACP,cAAc;AAAA;AAAA,IAEf,IAAI,CAAC,KAAwB;AAAA,MAC5B,cAAc;AAAA,MACd,IAAI,CAAC,IAAI;AAAA,QAAS,OAAO,QAAQ,QAAQ;AAAA,MACzC,MAAM,UAAU;AAAA,MAEhB,OAAO,cACN,KACA,SACA,MAAM,YAAY,UACnB,EAAE,MAAM,MAAM,EAGb;AAAA;AAAA,EAEH;AAAA;;AC5ED,IAAM,qBAAqB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAOO,SAAS,kBAAkB,CACjC,QACA,KACC;AAAA,EACD,WAAW,QAAQ,oBAAoB;AAAA,IACtC,OAAO,iBAAiB,MAAM,KAAK,EAAE,SAAS,MAAM,SAAS,KAAK,CAAC;AAAA,EACpE;AAAA,EACA,OAAO,MAAM;AAAA,IACZ,WAAW,QAAQ,oBAAoB;AAAA,MACtC,OAAO,oBAAoB,MAAM,KAAK,EAAE,SAAS,KAAK,CAAC;AAAA,IACxD;AAAA;AAAA;;;ACdK,SAAS,eAAe,CAC9B,MACA,OACgB;AAAA,EAChB,IAAI,OAAsB;AAAA,EAC1B,IAAI,WAAW;AAAA,EACf,IAAI,OAAsB;AAAA,EAC1B,YAAY,MAAM,QAAQ,OAAO;AAAA,IAChC,MAAM,OACL,KAAK,IAAI,IAAI,QAAQ,KAAK,MAAM,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,GAAG;AAAA,IAC/D,IAAI,QAAQ;AAAA,MAAG;AAAA,IACf,IAAI,SAAS,QAAQ,OAAO;AAAA,MAAM,OAAO;AAAA,IACzC,IACC,OAAO,YACN,SAAS,YAAY,SAAS,QAAQ,OAAO,MAC7C;AAAA,MACD,OAAO;AAAA,MACP,WAAW;AAAA,IACZ;AAAA,EACD;AAAA,EACA,OAAO,KAAK,SAAS,SAAS,OAAO,OAAO;AAAA;AAQtC,SAAS,cAAc,CAC7B,MACA,OACA,WAA2B,UAC1B;AAAA,EACD,MAAM,OAAO,KAAK,QAAqB,oCAAoC;AAAA,EAC3E,IAAI,CAAC;AAAA,IAAM;AAAA,EACX,MAAM,MAAM,KAAK,sBAAsB;AAAA,EACvC,MAAM,OAAO,KAAK,sBAAsB;AAAA,EACxC,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK;AAAA,EAC1C,IAAI,UAAU;AAAA,IAAU,QAAQ,KAAK,SAAS,IAAI,UAAU;AAAA,EAC5D,KAAK,SAAS,EAAE,KAAK,KAAK,IAAI,GAAG,GAAG,GAAG,SAAS,CAAC;AAAA;AAI3C,SAAS,UAAU,CACzB,UACA,OACC;AAAA,EACD,MAAM,OAAO,SAAS,sBAAsB;AAAA,EAC5C,MAAM,QACL,SAAS,YAAY,SAAS,gBAAgB,SAAS,eAAe;AAAA,EACvE,MAAM,QAAQ,MAAM,KAAK,OAAO,EAAE,MAAM,UAAU;AAAA,IACjD,QAAQ,KAAK,WAAW,KAAK,sBAAsB;AAAA,IACnD,OAAO,CAAC,MAAM,EAAE,KAAK,OAAO,CAAC;AAAA,GAC7B;AAAA,EACD,OAAO,gBAAgB,EAAE,KAAK,KAAK,KAAK,QAAQ,KAAK,QAAQ,MAAM,GAAG,KAAK;AAAA;AAW5E,IAAM,aAAa,CAAC,YACnB,OAAO,YAAY,WAAW,EAAE,QAAQ,QAAQ,IAAI;AAOrD,SAAS,eAAe,CAAC,UAAkC;AAAA,EAC1D,SAAS,iBAAiB,UAAU,UAAU;AAAA,IAC7C,SAAS;AAAA,IACT,SAAS;AAAA,EACV,CAAC;AAAA,EACD,OAAO,MACN,SAAS,oBAAoB,UAAU,UAAU,EAAE,SAAS,KAAK,CAAC;AAAA;AAOpE,SAAS,WAAW,CAAC,KAAiB;AAAA,EACrC,IAAI,KAAK,sBAAsB,MAAM;AAAA,IACpC,KAAK,sBAAsB,GAAG;AAAA,GAC9B;AAAA,EACD,OAAO,MAAM,qBAAqB,EAAE;AAAA;AAwB9B,SAAS,eAAe,CAC9B,MACA,OACA,QACA,UAAqC,CAAC,GACrC;AAAA,EACD,QAAQ,SAAS,KAAK,iBAAiB,MAAM,SAAS,WAAW,OAAO;AAAA,EACxE,IAAI,QAAQ;AAAA,EACZ,IAAI,OAAO;AAAA,EACX,IAAI,aAAa;AAAA,EACjB,IAAI;AAAA,EACJ,IAAI,WAA+B;AAAA,EACnC,IAAI,cAAc,MAAM;AAAA,EAExB,MAAM,UAAU,MAAM;AAAA,IACrB,QAAQ;AAAA,IACR,MAAM,OAAO,YAAY,WAAW,UAAU,MAAM,CAAC;AAAA,IACrD,IAAI;AAAA,MAAM,OAAO,IAAI;AAAA;AAAA,EAGtB,MAAM,UAAU,MAAM;AAAA,IACrB,aAAa,IAAI;AAAA,IACjB,OAAO,WAAW,MAAM;AAAA,MACvB,OAAO;AAAA,MACP,IAAI,YAAY;AAAA,QACf,cAAc,YAAY,MAAM;AAAA,UAC/B,IAAI,CAAC,SAAS,CAAC,eAAe;AAAA,YAAG,QAAQ;AAAA,SACzC;AAAA,MACF;AAAA,MACA,aAAa;AAAA,OACX,MAAM;AAAA;AAAA,EAGV,MAAM,WAAW,CAAC,UAAiB;AAAA,IAClC,MAAM,SAAS,MAAM;AAAA,IACrB,IAAI,EAAE,kBAAkB,gBAAgB,CAAC,KAAK,GAAG,SAAS,MAAM;AAAA,MAAG;AAAA,IACnE,WAAW;AAAA,IAGX,IAAI,MAAM;AAAA,MACT,aAAa;AAAA,MACb,QAAQ;AAAA,MACR;AAAA,IACD;AAAA,IACA,IAAI,CAAC;AAAA,MAAO,QAAQ,sBAAsB,OAAO;AAAA;AAAA,EAGlD,MAAM,cAAc,CAAC,UAAiB;AAAA,IAErC,MAAM,SAAS,MAAM;AAAA,IACrB,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,SAAS,MAAM;AAAA,MAAG;AAAA,IAC1C,IAAI,cAAc,CAAC;AAAA,MAAO,QAAQ,sBAAsB,OAAO;AAAA,IAC/D,OAAO;AAAA,IACP,aAAa;AAAA,IACb,aAAa,IAAI;AAAA;AAAA,EAGlB,MAAM,aAAa,gBAAgB,QAAQ;AAAA,EAC3C,MAAM,YAAY,mBAAmB,UAAU,WAAW;AAAA,EAE1D,OAAO;AAAA,IACN,IAAI,GAAG;AAAA,MACN,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,qBAAqB,KAAK;AAAA,MAC1B,QAAQ;AAAA,MACR,QAAQ;AAAA;AAAA,IAET,IAAI,GAAG;AAAA,MACN,WAAW;AAAA,MACX,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,qBAAqB,KAAK;AAAA,MAC1B,aAAa,IAAI;AAAA;AAAA,EAEnB;AAAA;;;ACnMD,IAAM,WAAW;AASV,SAAS,SAAS,CACxB,MACA,cACA,YAAwB,MAAM,IAC7B;AAAA,EACD,MAAM,OAAO,KAAK,GAAG,QAAQ,QAAQ;AAAA,EACrC,MAAM,UAAU,MAAM;AAAA,EACtB,IAAI,CAAC,QAAQ,CAAC,WAAW,OAAO,mBAAmB,aAAa;AAAA,IAC/D,UAAU;AAAA,IACV,OAAO,MAAM;AAAA,EACd;AAAA,EAEA,MAAM,UAAU,KAAK,QAAQ,2BAA2B,KAAK;AAAA,EAC7D,MAAM,WAAW,IAAI,eAAe,MAAM;AAAA,IACzC,MAAM,SAAS,KAAK;AAAA,IACpB,IAAI,CAAC;AAAA,MAAQ;AAAA,IACb,aAAa;AAAA,IACb,eAAe,QAAQ,SAAS,MAAM;AAAA,GACtC;AAAA,EACD,SAAS,QAAQ,OAAO;AAAA,EACxB,IAAI,SAAS;AAAA,EAGb,MAAM,QAAQ,MAAM;AAAA,IACnB,IAAI,CAAC;AAAA,MAAQ;AAAA,IACb,SAAS;AAAA,IACT,SAAS,WAAW;AAAA,IACpB,cAAc;AAAA,IACd,UAAU;AAAA;AAAA,EAEX,MAAM,gBAAgB,mBAAmB,SAAS,KAAK;AAAA,EACvD,OAAO;AAAA;AASD,SAAS,QAAQ,CAAC,MAAkC;AAAA,EAC1D,MAAM,OAAO,MAAM,QAAqB,QAAQ;AAAA,EAChD,IAAI,CAAC,QAAQ,CAAC;AAAA,IAAM,OAAO;AAAA,EAC3B,MAAM,QAAQ,KAAK,YAAY,KAAK,gBAAgB,KAAK,eAAe;AAAA,EACxE,MAAM,SACL,KAAK,sBAAsB,EAAE,MAAM,KAAK,sBAAsB,EAAE;AAAA,EAGjE,OAAQ,SAAS,UAAU,MAAO,KAAK,IAAI,MAAM,KAAK;AAAA;;ACrDhD,SAAS,SAAS,CACxB,UACA,KACA,eAA2B,MAAM,IACjC,UAAU,MACT;AAAA,EACD,MAAM,QAAQ,KAAK,IAAI,IAAI;AAAA,EAC3B,IAAI,QAAQ;AAAA,EACZ,MAAM,OAAO,MAAM;AAAA,IAClB,MAAM,OAAO,SAAS,GAAG,cAAc,kBAAkB,OAAO;AAAA,IAChE,IAAI,MAAM;AAAA,MACT,aAAa;AAAA,MACb,eAAe,MAAM,QAAQ;AAAA,MAC7B;AAAA,IACD;AAAA,IACA,IAAI,KAAK,IAAI,IAAI;AAAA,MAAO,QAAQ,sBAAsB,IAAI;AAAA;AAAA,EAG3D,QAAQ,sBAAsB,IAAI;AAAA,EAClC,OAAO,MAAM,qBAAqB,KAAK;AAAA;",
16
+ "debugId": "B919180681EC282C64756E2164756E21",
16
17
  "names": []
17
18
  }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Scrolls a page's match to the middle of the page area once the page has
3
+ * drawn its mark, polling each frame for up to `timeout` ms; `beforeScroll`
4
+ * runs first. Returns a function that stops waiting.
5
+ */
6
+ export declare function revealHit(findPage: () => ParentNode | null | undefined, hit: number, beforeScroll?: () => void, timeout?: number): () => void;
7
+ //# sourceMappingURL=pdf-reveal-hit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf-reveal-hit.d.ts","sourceRoot":"","sources":["../../src/pdf-viewer/pdf-reveal-hit.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,SAAS,CACxB,QAAQ,EAAE,MAAM,UAAU,GAAG,IAAI,GAAG,SAAS,EAC7C,GAAG,EAAE,MAAM,EACX,YAAY,GAAE,MAAM,IAAe,EACnC,OAAO,SAAO,cAgBd"}
@@ -16,22 +16,38 @@ export declare function mostVisiblePage(view: PdfBox & {
16
16
  * centre.
17
17
  */
18
18
  export declare function scrollIntoArea(node: Element, block: 'start' | 'center', behavior?: ScrollBehavior): void;
19
+ /** The page most on screen in `scroller`, as `mostVisiblePage` picks it. */
20
+ export declare function pageInView(scroller: HTMLElement, pages: ReadonlyMap<number, HTMLElement>): number | null;
21
+ /** `createScrollSpy`'s options; a bare number is `idleMs`. */
22
+ export type ScrollSpyOptions = {
23
+ /** How long scrolling must stop before a hold ends (150 ms). */
24
+ idleMs?: number;
25
+ /** Whether the view is still where the reader put it (always, by default). */
26
+ readerPosition?: () => boolean;
27
+ };
19
28
  /**
20
29
  * Reports the page most on screen as the reader's page area (`root`)
21
30
  * scrolls. `hold`
22
31
  * ignores scrolling until it has stopped for `idleMs`: the reader calls it
23
32
  * before scrolling to a page itself, so the pages it passes on the way are
24
33
  * not reported. What the user does in the page area (wheel, touch, pointer,
25
- * key) ends a hold: the scrolling after it is theirs.
34
+ * key) ends a hold: the scrolling after it is theirs, and a scroll the hold
35
+ * ignored is measured.
36
+ *
37
+ * `readerPosition` says whether the view is still where the reader put it.
38
+ * When the area scrolled during a hold and, two frames after release (once
39
+ * a resize has had its correction), it is not (a scroll with no input
40
+ * landed within the hold: find in page, a screen reader, a `scrollTop`),
41
+ * the spy measures once. Two frames, as a frame runs before ResizeObserver:
42
+ * the second sees a correction's hold, which cancels the check, rather than
43
+ * the layout the correction is about to fix.
44
+ *
45
+ * Not covered: a second correction within the same hold, after such a
46
+ * scroll, puts the view back where the reader put it, and the scroll is
47
+ * then lost.
26
48
  */
27
- export declare function createScrollSpy(root: () => HTMLElement | null | undefined, pages: () => ReadonlyMap<number, HTMLElement>, onPage: (page: number) => void, idleMs?: number): {
49
+ export declare function createScrollSpy(root: () => HTMLElement | null | undefined, pages: () => ReadonlyMap<number, HTMLElement>, onPage: (page: number) => void, options?: number | ScrollSpyOptions): {
28
50
  hold(): void;
29
51
  stop(): void;
30
52
  };
31
- /**
32
- * Scrolls a page's match to the middle of the page area once the page has
33
- * drawn its mark, polling each frame for up to `timeout` ms; `beforeScroll`
34
- * runs first. Returns a function that stops waiting.
35
- */
36
- export declare function revealHit(findPage: () => ParentNode | null | undefined, hit: number, beforeScroll?: () => void, timeout?: number): () => void;
37
53
  //# sourceMappingURL=pdf-scroll-spy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pdf-scroll-spy.d.ts","sourceRoot":"","sources":["../../src/pdf-viewer/pdf-scroll-spy.ts"],"names":[],"mappings":"AAEA,wEAAwE;AACxE,MAAM,MAAM,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD;;;GAGG;AACH,wBAAgB,eAAe,CAC9B,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,EACjC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACxC,MAAM,GAAG,IAAI,CAkBf;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC7B,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,OAAO,GAAG,QAAQ,EACzB,QAAQ,GAAE,cAAyB,QASnC;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC9B,IAAI,EAAE,MAAM,WAAW,GAAG,IAAI,GAAG,SAAS,EAC1C,KAAK,EAAE,MAAM,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,EAC7C,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC9B,MAAM,SAAM;;;EA2EZ;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACxB,QAAQ,EAAE,MAAM,UAAU,GAAG,IAAI,GAAG,SAAS,EAC7C,GAAG,EAAE,MAAM,EACX,YAAY,GAAE,MAAM,IAAe,EACnC,OAAO,SAAO,cAgBd"}
1
+ {"version":3,"file":"pdf-scroll-spy.d.ts","sourceRoot":"","sources":["../../src/pdf-viewer/pdf-scroll-spy.ts"],"names":[],"mappings":"AAEA,wEAAwE;AACxE,MAAM,MAAM,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD;;;GAGG;AACH,wBAAgB,eAAe,CAC9B,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,EACjC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACxC,MAAM,GAAG,IAAI,CAkBf;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC7B,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,OAAO,GAAG,QAAQ,EACzB,QAAQ,GAAE,cAAyB,QASnC;AAED,4EAA4E;AAC5E,wBAAgB,UAAU,CACzB,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,iBAUvC;AAED,8DAA8D;AAC9D,MAAM,MAAM,gBAAgB,GAAG;IAC9B,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC;CAC/B,CAAC;AA8BF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAC9B,IAAI,EAAE,MAAM,WAAW,GAAG,IAAI,GAAG,SAAS,EAC1C,KAAK,EAAE,MAAM,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,EAC7C,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC9B,OAAO,GAAE,MAAM,GAAG,gBAAqB;;;EAwEvC"}
@@ -0,0 +1,46 @@
1
+ import { type StateKind } from './kinds';
2
+ /**
3
+ * Which i18n namespace a state's copy lives in. `EmptyState` reads
4
+ * `material.empty-state.*` (its seven legacy variants included, so an app's
5
+ * overrides keep working); `ErrorState` reads `material.error-state.*`.
6
+ */
7
+ export type StateFamily = 'empty-state' | 'error-state';
8
+ export type StateCopy = {
9
+ titleKey: string;
10
+ descriptionKey: string;
11
+ /** The English title, the fallback of `titleKey`. */
12
+ title: string;
13
+ /** The English description, the fallback of `descriptionKey`. */
14
+ description: string;
15
+ };
16
+ /**
17
+ * The i18n keys and English fallbacks of a state's title and description.
18
+ * `'error-state'` applies to the error kinds only; any other kind reads
19
+ * `material.empty-state.<kind>.*`, which is where an `EmptyState` given a
20
+ * legacy error `variant` looks too.
21
+ */
22
+ export declare function stateCopy(kind: StateKind, family: StateFamily): StateCopy;
23
+ /** The i18n keys and English fallbacks of `ErrorState`'s actions and details. */
24
+ export declare const STATE_ACTION_KEYS: {
25
+ readonly retry: {
26
+ readonly key: "material.error-state.retry";
27
+ readonly fallback: "Retry";
28
+ };
29
+ readonly details: {
30
+ readonly key: "material.error-state.details";
31
+ readonly fallback: "Technical details";
32
+ };
33
+ readonly detailsName: {
34
+ readonly key: "material.error-state.details-name";
35
+ readonly fallback: "Name";
36
+ };
37
+ readonly detailsMessage: {
38
+ readonly key: "material.error-state.details-message";
39
+ readonly fallback: "Message";
40
+ };
41
+ readonly detailsCause: {
42
+ readonly key: "material.error-state.details-cause";
43
+ readonly fallback: "Cause";
44
+ };
45
+ };
46
+ //# sourceMappingURL=copy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../src/states/copy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAEtD;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,aAAa,CAAC;AAExD,MAAM,MAAM,SAAS,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;CACpB,CAAC;AAkCF;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,SAAS,CAQzE;AAED,iFAAiF;AACjF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;CAepB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /** One link of an error's chain, safe to show: never a stack. */
2
+ export type ErrorDetail = {
3
+ name: string;
4
+ message: string;
5
+ };
6
+ /**
7
+ * What an `ErrorState` may show of a thrown value: its name and message, then
8
+ * those of its `cause`, and so on, at most `maxDepth` entries (3 by default).
9
+ * It takes an `Error`, a `{ message }` object, a string or any primitive, and
10
+ * stops at a cycle. `null` and `undefined` describe nothing (`[]`).
11
+ *
12
+ * It **never reads `.stack`**: a stack names files and paths, which an
13
+ * interface must not print.
14
+ */
15
+ export declare function describeError(error: unknown, options?: {
16
+ maxDepth?: number;
17
+ }): ErrorDetail[];
18
+ //# sourceMappingURL=describe-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"describe-error.d.ts","sourceRoot":"","sources":["../../src/states/describe-error.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AA0B5D;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC5B,KAAK,EAAE,OAAO,EACd,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GACjC,WAAW,EAAE,CAgBf"}
@@ -0,0 +1,24 @@
1
+ import type { StateKind } from './kinds';
2
+ /**
3
+ * How a shape is painted. The libraries map a tone (and the kind's accent) to
4
+ * theme-token classes, so no colour is written here and no inline style is
5
+ * needed (CSP-safe).
6
+ */
7
+ export type IllustrationTone = 'surface' | 'outline' | 'accent' | 'accent-soft' | 'muted';
8
+ /** SVG attributes with single-word names (`d`, `cx`, `rx`, `transform`…). */
9
+ export type IllustrationShape = {
10
+ el: 'path' | 'circle' | 'rect' | 'ellipse' | 'line';
11
+ tone: IllustrationTone;
12
+ attrs: Readonly<Record<string, string | number>>;
13
+ };
14
+ export type StateIllustration = {
15
+ viewBox: string;
16
+ shapes: readonly IllustrationShape[];
17
+ };
18
+ export type StateAccent = 'primary' | 'error' | 'warning' | 'info' | 'neutral';
19
+ /** The lucide icon (kebab-case name) each library maps to its own component. */
20
+ export type StateIconName = 'package-open' | 'search' | 'file-question' | 'shield-alert' | 'alert-circle' | 'wifi-off' | 'construction';
21
+ export declare const STATE_ACCENT: Record<StateKind, StateAccent>;
22
+ export declare const STATE_ICON: Record<StateKind, StateIconName>;
23
+ export declare const STATE_ILLUSTRATIONS: Record<StateKind, StateIllustration>;
24
+ //# sourceMappingURL=illustrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"illustrations.d.ts","sourceRoot":"","sources":["../../src/states/illustrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GACzB,SAAS,GACT,SAAS,GACT,QAAQ,GACR,aAAa,GACb,OAAO,CAAC;AAEX,6EAA6E;AAC7E,MAAM,MAAM,iBAAiB,GAAG;IAC/B,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IACpD,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAE/E,gFAAgF;AAChF,MAAM,MAAM,aAAa,GACtB,cAAc,GACd,QAAQ,GACR,eAAe,GACf,cAAc,GACd,cAAc,GACd,UAAU,GACV,cAAc,CAAC;AAElB,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,CAQvD,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,aAAa,CAQvD,CAAC;AAyBF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,SAAS,EAAE,iBAAiB,CA8GpE,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The framework-free half of `EmptyState` and `ErrorState`: the kinds of
3
+ * state, their i18n keys and English fallbacks, what of an error may be shown
4
+ * (`describeError`) and the geometry of their illustrations. Safe on a server:
5
+ * nothing runs at import.
6
+ */
7
+ export { STATE_ACTION_KEYS, type StateCopy, type StateFamily, stateCopy, } from './copy';
8
+ export { describeError, type ErrorDetail } from './describe-error';
9
+ export { type IllustrationShape, type IllustrationTone, STATE_ACCENT, STATE_ICON, STATE_ILLUSTRATIONS, type StateAccent, type StateIconName, type StateIllustration, } from './illustrations';
10
+ export { EMPTY_STATE_KINDS, type EmptyStateKind, ERROR_STATE_KINDS, type ErrorStateKind, isErrorKind, type LegacyEmptyStateVariant, resolveEmptyStateKind, type StateKind, } from './kinds';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/states/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACN,iBAAiB,EACjB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,SAAS,GACT,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EACN,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,iBAAiB,EACjB,KAAK,cAAc,EACnB,iBAAiB,EACjB,KAAK,cAAc,EACnB,WAAW,EACX,KAAK,uBAAuB,EAC5B,qBAAqB,EACrB,KAAK,SAAS,GACd,MAAM,SAAS,CAAC"}