@graview/core 0.1.64 → 0.1.65

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 (73) hide show
  1. package/dist/catalog.d.ts +32 -2
  2. package/dist/catalog.d.ts.map +1 -1
  3. package/dist/catalog.js +1 -0
  4. package/dist/catalog.js.map +1 -1
  5. package/dist/compose.d.ts +25 -1
  6. package/dist/compose.d.ts.map +1 -1
  7. package/dist/compose.js +56 -0
  8. package/dist/compose.js.map +1 -1
  9. package/dist/conformance/index.d.ts +6 -0
  10. package/dist/conformance/index.d.ts.map +1 -1
  11. package/dist/conformance/index.js +3 -0
  12. package/dist/conformance/index.js.map +1 -1
  13. package/dist/conformance/plan-host.d.ts +73 -0
  14. package/dist/conformance/plan-host.d.ts.map +1 -0
  15. package/dist/conformance/plan-host.js +64 -0
  16. package/dist/conformance/plan-host.js.map +1 -0
  17. package/dist/conformance/told-host.d.ts +40 -0
  18. package/dist/conformance/told-host.d.ts.map +1 -0
  19. package/dist/conformance/told-host.js +57 -0
  20. package/dist/conformance/told-host.js.map +1 -0
  21. package/dist/conformance/view-revision-host.d.ts +36 -0
  22. package/dist/conformance/view-revision-host.d.ts.map +1 -0
  23. package/dist/conformance/view-revision-host.js +42 -0
  24. package/dist/conformance/view-revision-host.js.map +1 -0
  25. package/dist/document.schema.json +2 -2
  26. package/dist/index.d.ts +2 -2
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +1 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/intelligence-bridge.d.ts +2 -0
  31. package/dist/intelligence-bridge.d.ts.map +1 -1
  32. package/dist/plan-edits.d.ts +55 -0
  33. package/dist/plan-edits.d.ts.map +1 -0
  34. package/dist/plan-edits.js +84 -0
  35. package/dist/plan-edits.js.map +1 -0
  36. package/dist/presence.d.ts +10 -0
  37. package/dist/presence.d.ts.map +1 -1
  38. package/dist/presence.js.map +1 -1
  39. package/dist/revisions/beyond.d.ts +56 -0
  40. package/dist/revisions/beyond.d.ts.map +1 -0
  41. package/dist/revisions/beyond.js +112 -0
  42. package/dist/revisions/beyond.js.map +1 -0
  43. package/dist/revisions/pictured.d.ts +52 -0
  44. package/dist/revisions/pictured.d.ts.map +1 -0
  45. package/dist/revisions/pictured.js +85 -0
  46. package/dist/revisions/pictured.js.map +1 -0
  47. package/dist/revisions/problems.d.ts +57 -0
  48. package/dist/revisions/problems.d.ts.map +1 -0
  49. package/dist/revisions/problems.js +51 -0
  50. package/dist/revisions/problems.js.map +1 -0
  51. package/dist/revisions/sections.d.ts +18 -0
  52. package/dist/revisions/sections.d.ts.map +1 -0
  53. package/dist/revisions/sections.js +91 -0
  54. package/dist/revisions/sections.js.map +1 -0
  55. package/dist/revisions/view.d.ts +71 -0
  56. package/dist/revisions/view.d.ts.map +1 -0
  57. package/dist/revisions/view.js +338 -0
  58. package/dist/revisions/view.js.map +1 -0
  59. package/dist/revisions.d.ts +11 -0
  60. package/dist/revisions.d.ts.map +1 -0
  61. package/dist/revisions.js +20 -0
  62. package/dist/revisions.js.map +1 -0
  63. package/dist/told.d.ts +306 -0
  64. package/dist/told.d.ts.map +1 -0
  65. package/dist/told.js +409 -0
  66. package/dist/told.js.map +1 -0
  67. package/dist/version.d.ts +1 -1
  68. package/dist/version.js +1 -1
  69. package/dist/views/kept.d.ts +44 -0
  70. package/dist/views/kept.d.ts.map +1 -1
  71. package/dist/views/kept.js +30 -0
  72. package/dist/views/kept.js.map +1 -1
  73. package/package.json +9 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"problems.js","sourceRoot":"","sources":["../../src/revisions/problems.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAyCvE,4DAA4D;AAC5D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAoB,EAAU,EAAE,CAAC,QAAQ,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;AAE3H,qIAAqI;AACrI,MAAM,MAAM,GAAG,CAAC,CAAY,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC;AAEnF,MAAM,QAAQ,GAAG,CAAC,MAA0B,EAAE,EAAE,CAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAE9M,SAAS,SAAS,CAAC,CAAY,EAAE,MAA2B;IAC1D,OAAO,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;AAC7L,CAAC;AAED,SAAS,UAAU,CAAC,OAAuB;IACzC,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,aAAa,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC;IACtJ,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACpL,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC;AAC3D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAAkB,EAAE,KAAiB,EAAE,UAAuF,EAAE;IAC3J,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5G,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,CAAC,OAAoB,EAAkB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAChM,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAClK,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAClK,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,mBAAmB,KAAK,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,mBAAmB,CAAC,CAAC;IACpO,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,WAAW,KAAK,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1J,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,uCAAuC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;AACjK,CAAC"}
@@ -0,0 +1,18 @@
1
+ /** Anything that reads like an element: a DOM `Element`, or a headless run's `TreeElement`. */
2
+ export interface ElementLike {
3
+ readonly localName?: string;
4
+ readonly nodeType?: number;
5
+ getAttribute(name: string): string | null;
6
+ readonly childNodes: ArrayLike<unknown>;
7
+ readonly textContent: string | null;
8
+ }
9
+ /** One section of a drawing: what a person would call it, and what it is (`heading`, `section`, `nav` …). */
10
+ export interface DrawnSection {
11
+ readonly name: string;
12
+ readonly as: string;
13
+ }
14
+ /** Every element under `root`, `root` first, in document order. */
15
+ export declare function elementsOf(root: ElementLike): Generator<ElementLike>;
16
+ /** The sections a drawing has, each once by name, in document order. */
17
+ export declare function sectionsOfDrawing(root: ElementLike): DrawnSection[];
18
+ //# sourceMappingURL=sections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sections.d.ts","sourceRoot":"","sources":["../../src/revisions/sections.ts"],"names":[],"mappings":"AAcA,+FAA+F;AAC/F,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,6GAA6G;AAC7G,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAwBD,mEAAmE;AACnE,wBAAiB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,CAGrE;AAYD,wEAAwE;AACxE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,EAAE,CAmCnE"}
@@ -0,0 +1,91 @@
1
+ /*
2
+ * THE SECTIONS OF A DRAWING, BY NAME (Roadmap f-revisions-say-what-broke).
3
+ *
4
+ * What a person would call a part of a page: a heading's words, and a
5
+ * landmark — a `<section>` or a `role="region"` named by its `aria-label`,
6
+ * its `aria-labelledby` or its own first heading; a `<nav>`, a `<main>`, a
7
+ * header, a footer or an aside, by its name or by what it is. A worker
8
+ * view's host draws a landmark's element as a `<div>` that says what it was
9
+ * asked to be (`data-graview-as`), and that is read as the landmark.
10
+ *
11
+ * Read from anything shaped like an element — a page's DOM, a headless
12
+ * run's tree (`@graview/guest/headless`) — and nothing is laid out here.
13
+ */
14
+ const HEADING = /^h([1-6])$/;
15
+ /** The landmarks a page is read by, and what one with no name of its own is called. */
16
+ const LANDMARKS = {
17
+ section: null,
18
+ article: null,
19
+ form: null,
20
+ region: null,
21
+ nav: "navigation",
22
+ navigation: "navigation",
23
+ main: "main content",
24
+ header: "header",
25
+ banner: "header",
26
+ footer: "footer",
27
+ contentinfo: "footer",
28
+ aside: "aside",
29
+ complementary: "aside",
30
+ search: "search",
31
+ };
32
+ const isElement = (node) => typeof node === "object" && node !== null && typeof node.getAttribute === "function" && (node.nodeType === undefined || node.nodeType === 1);
33
+ const said = (text) => (text ?? "").replace(/\s+/g, " ").trim();
34
+ /** Every element under `root`, `root` first, in document order. */
35
+ export function* elementsOf(root) {
36
+ yield root;
37
+ for (const child of Array.from(root.childNodes))
38
+ if (isElement(child))
39
+ yield* elementsOf(child);
40
+ }
41
+ /** What an element is asked to be: the landmark a host drew as a `<div>`, else its own name. */
42
+ const tagOf = (element) => (element.getAttribute("data-graview-as") ?? element.localName ?? "").toLowerCase();
43
+ /** The heading level an element is, if it is one. */
44
+ function headingLevel(element) {
45
+ const tag = HEADING.exec(tagOf(element));
46
+ if (tag)
47
+ return Number(tag[1]);
48
+ return element.getAttribute("role") === "heading" ? Number(element.getAttribute("aria-level") ?? 2) : undefined;
49
+ }
50
+ /** The sections a drawing has, each once by name, in document order. */
51
+ export function sectionsOfDrawing(root) {
52
+ const all = [...elementsOf(root)];
53
+ const byId = new Map();
54
+ for (const element of all) {
55
+ const id = element.getAttribute("id");
56
+ if (id)
57
+ byId.set(id, element);
58
+ }
59
+ const out = [];
60
+ const seen = new Set();
61
+ const add = (name, as) => {
62
+ const key = name.toLowerCase();
63
+ if (!name || seen.has(key))
64
+ return;
65
+ seen.add(key);
66
+ out.push({ name: name.length > 80 ? `${name.slice(0, 79)}…` : name, as });
67
+ };
68
+ for (const element of all) {
69
+ if (element.getAttribute("aria-hidden") === "true" || element.getAttribute("hidden") !== null)
70
+ continue;
71
+ const level = headingLevel(element);
72
+ if (level !== undefined) {
73
+ add(said(element.textContent), "heading");
74
+ continue;
75
+ }
76
+ const tag = tagOf(element);
77
+ const role = (element.getAttribute("role") ?? "").toLowerCase();
78
+ const what = role in LANDMARKS ? role : tag in LANDMARKS ? tag : undefined;
79
+ if (!what)
80
+ continue;
81
+ const namedBy = (element.getAttribute("aria-labelledby") ?? "")
82
+ .split(/\s+/)
83
+ .flatMap((id) => (byId.get(id) ? [said(byId.get(id).textContent)] : []))
84
+ .join(" ");
85
+ const heading = [...elementsOf(element)].find((one) => one !== element && headingLevel(one) !== undefined);
86
+ const name = said(element.getAttribute("aria-label")) || namedBy || (heading ? said(heading.textContent) : "") || LANDMARKS[what] || "";
87
+ add(name, what === "region" ? "section" : what);
88
+ }
89
+ return out;
90
+ }
91
+ //# sourceMappingURL=sections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sections.js","sourceRoot":"","sources":["../../src/revisions/sections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { type DrawnSection, type ElementLike } from "./sections.js";
2
+ /** One side of a revision: the view's source, and what a run of it drew where the host has it. */
3
+ export interface ViewRevisionSide {
4
+ /** The view's whole source. */
5
+ readonly source: string;
6
+ /** The stylesheet it drew with (`HeadlessDescribed.css`, or the page's): read from the source's strings when left out. */
7
+ readonly css?: string;
8
+ /** What it drew (`HeadlessDescribed.drawing.root`, or a page's element): its classes and sections are read from it. */
9
+ readonly drawing?: ElementLike;
10
+ /** The classes its drawing uses, where the host has a list and no tree. */
11
+ readonly classes?: readonly string[];
12
+ /** How tall the page it is drawn on is, in CSS pixels, where the host measured it. */
13
+ readonly height?: number;
14
+ }
15
+ /** A class the revision still draws that a rule styled before and none styles now. */
16
+ export interface UnstyledClass {
17
+ readonly class: string;
18
+ /** The selectors that styled it before. */
19
+ readonly styledBy: readonly string[];
20
+ }
21
+ /** A selector the revision took out, while the markup it matched is still drawn. */
22
+ export interface RemovedSelector {
23
+ readonly selector: string;
24
+ /** The classes (`.name`) and ids (`#name`) in it, each still drawn. */
25
+ readonly names: readonly string[];
26
+ }
27
+ export interface HeightChange {
28
+ readonly before: number;
29
+ readonly after: number;
30
+ /** `after - before`, in CSS pixels. */
31
+ readonly change: number;
32
+ /** The change as a part of `before`: -0.5 is half as tall. */
33
+ readonly ratio: number;
34
+ }
35
+ /** What a revision broke, as entries and in words. */
36
+ export interface ViewRevision {
37
+ /** True when anything below was found; a height that moved less than a tenth is not. */
38
+ readonly regressed: boolean;
39
+ readonly unstyled: readonly UnstyledClass[];
40
+ readonly selectorsRemoved: readonly RemovedSelector[];
41
+ /** Sections drawn before and not now, by name. */
42
+ readonly sectionsMissing: readonly DrawnSection[];
43
+ readonly height?: HeightChange;
44
+ /** Where each side was read from: its drawing and stylesheet, or its source alone. */
45
+ readonly read: {
46
+ readonly before: "drawing" | "source";
47
+ readonly after: "drawing" | "source";
48
+ };
49
+ /** One sentence per finding. */
50
+ readonly said: readonly string[];
51
+ /** The sentences together, or one saying nothing was lost. */
52
+ readonly text: string;
53
+ }
54
+ /**
55
+ * THE STRINGS A SCRIPT SAYS: each quoted string and template's text, an
56
+ * interpolation left as a hole. Comments and regular expressions are passed
57
+ * over; nothing is run.
58
+ */
59
+ export declare function stringsOfSource(source: string): string[];
60
+ /** Every style rule's selector in a stylesheet, each once, in order. A keyframe's steps and a font's face are not selectors. */
61
+ export declare function selectorsOfStylesheet(css: string): string[];
62
+ /** The classes and ids a selector names, as `.name` and `#name`; what is inside `[…]` and strings is not read. */
63
+ export declare function namesInSelector(selector: string): string[];
64
+ /**
65
+ * WHAT A REVISION OF A VIEW BROKE, against the version it replaces: the
66
+ * classes it still draws that lost every rule styling them, the selectors
67
+ * taken out while the markup they matched is still drawn, the sections
68
+ * drawn before and not now, and how the page's height moved.
69
+ */
70
+ export declare function compareViewRevision(before: ViewRevisionSide, after: ViewRevisionSide): ViewRevision;
71
+ //# sourceMappingURL=view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/revisions/view.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAiC,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAEnG,kGAAkG;AAClG,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,0HAA0H;IAC1H,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,uHAAuH;IACvH,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;IAC/B,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,sFAAsF;IACtF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,sFAAsF;AACtF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,oFAAoF;AACpF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,uCAAuC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,sDAAsD;AACtD,MAAM,WAAW,YAAY;IAC3B,wFAAwF;IACxF,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,QAAQ,CAAC,gBAAgB,EAAE,SAAS,eAAe,EAAE,CAAC;IACtD,kDAAkD;IAClD,QAAQ,CAAC,eAAe,EAAE,SAAS,YAAY,EAAE,CAAC;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;IAC/B,sFAAsF;IACtF,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAA;KAAE,CAAC;IAC/F,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAKD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAoFxD;AA8BD,gIAAgI;AAChI,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAwD3D;AAED,kHAAkH;AAClH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAG1D;AA6DD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,GAAG,YAAY,CAgDnG"}
@@ -0,0 +1,338 @@
1
+ /*
2
+ * A VIEW'S REVISION, COMPARED WITH WHAT IT REPLACES (Roadmap
3
+ * f-revisions-say-what-broke).
4
+ *
5
+ * Homeflow's home view was rewritten whole by a chat: the "This week"
6
+ * section's markup stayed and the stylesheet that laid it out (`.hf-week`,
7
+ * `.hf-wk-*`) did not, and the first screen it was pictured by looked as it
8
+ * had. Nothing said so. This says it: the classes the new drawing still uses
9
+ * that some rule styled before and none styles now, the selectors taken out
10
+ * whose markup is still drawn, the sections drawn before and not now, and
11
+ * how the page's height moved — each in a sentence and as an entry.
12
+ *
13
+ * A class that was never styled — a hook for `graview.on`, a utility a
14
+ * view draws for its own reading — is never said: only "styled before,
15
+ * unstyled now". What a side is read from is the best it was handed: the
16
+ * stylesheet a run drew with and the tree it drew (a headless run's `css`
17
+ * and `drawing`, or a page's), else what its source's strings say.
18
+ */
19
+ import { elementsOf, sectionsOfDrawing } from "./sections.js";
20
+ /** Where an interpolation stood in a template's text: never part of a class or a selector. */
21
+ const HOLE = "\u0000";
22
+ /**
23
+ * THE STRINGS A SCRIPT SAYS: each quoted string and template's text, an
24
+ * interpolation left as a hole. Comments and regular expressions are passed
25
+ * over; nothing is run.
26
+ */
27
+ export function stringsOfSource(source) {
28
+ const out = [];
29
+ const n = source.length;
30
+ let i = 0;
31
+ let last = "";
32
+ const unescape = (text) => text.replace(/\\(u\{[0-9a-fA-F]+\}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{2}|.)/gs, (_, e) => (e === "n" ? "\n" : e === "t" ? "\t" : e[0] === "u" || e[0] === "x" ? String.fromCodePoint(parseInt(e.replace(/[ux{}]/g, ""), 16)) : e));
33
+ const quoted = (quote) => {
34
+ const start = ++i;
35
+ while (i < n && source[i] !== quote && source[i] !== "\n")
36
+ i += source[i] === "\\" ? 2 : 1;
37
+ const text = source.slice(start, i);
38
+ i++;
39
+ return unescape(text);
40
+ };
41
+ const regex = () => {
42
+ i++;
43
+ let inClass = false;
44
+ while (i < n && source[i] !== "\n") {
45
+ const c = source[i];
46
+ if (c === "\\")
47
+ i += 2;
48
+ else if (c === "[")
49
+ (inClass = true), i++;
50
+ else if (c === "]")
51
+ (inClass = false), i++;
52
+ else if (c === "/" && !inClass)
53
+ break;
54
+ else
55
+ i++;
56
+ }
57
+ i++;
58
+ while (i < n && /[a-z]/i.test(source[i]))
59
+ i++;
60
+ };
61
+ const template = () => {
62
+ i++;
63
+ let text = "";
64
+ while (i < n) {
65
+ const c = source[i];
66
+ if (c === "\\") {
67
+ text += unescape(source.slice(i, i + 2));
68
+ i += 2;
69
+ }
70
+ else if (c === "`") {
71
+ i++;
72
+ return text;
73
+ }
74
+ else if (c === "$" && source[i + 1] === "{") {
75
+ i += 2;
76
+ code(true);
77
+ text += HOLE;
78
+ }
79
+ else {
80
+ text += c;
81
+ i++;
82
+ }
83
+ }
84
+ return text;
85
+ };
86
+ function code(inHole) {
87
+ let depth = 0;
88
+ while (i < n) {
89
+ const c = source[i];
90
+ if (c === "/" && source[i + 1] === "/") {
91
+ const end = source.indexOf("\n", i);
92
+ i = end < 0 ? n : end;
93
+ }
94
+ else if (c === "/" && source[i + 1] === "*") {
95
+ const end = source.indexOf("*/", i + 2);
96
+ i = end < 0 ? n : end + 2;
97
+ }
98
+ else if (c === '"' || c === "'") {
99
+ out.push(quoted(c));
100
+ last = "a";
101
+ }
102
+ else if (c === "`") {
103
+ out.push(template());
104
+ last = "a";
105
+ }
106
+ else if (c === "/" && (last === "" || "(,=:[!&|?{};+-*%<>~^".includes(last))) {
107
+ regex();
108
+ last = "a";
109
+ }
110
+ else {
111
+ if (c === "{")
112
+ depth++;
113
+ if (c === "}") {
114
+ if (inHole && depth === 0) {
115
+ i++;
116
+ return;
117
+ }
118
+ depth--;
119
+ }
120
+ if (!/\s/.test(c))
121
+ last = c;
122
+ i++;
123
+ }
124
+ }
125
+ }
126
+ code(false);
127
+ return out;
128
+ }
129
+ /** A selector as it is compared: its whitespace and its combinators' spacing made one. */
130
+ const normalSelector = (selector) => selector
131
+ .replace(/\s+/g, " ")
132
+ .replace(/\s*([>+~,])\s*/g, "$1")
133
+ .trim();
134
+ /** Splits a selector list on its top-level commas. */
135
+ function splitList(list) {
136
+ const out = [];
137
+ let depth = 0;
138
+ let from = 0;
139
+ for (let at = 0; at < list.length; at++) {
140
+ const c = list[at];
141
+ if (c === "(" || c === "[")
142
+ depth++;
143
+ else if (c === ")" || c === "]")
144
+ depth--;
145
+ else if (c === "," && depth === 0) {
146
+ out.push(list.slice(from, at));
147
+ from = at + 1;
148
+ }
149
+ }
150
+ out.push(list.slice(from));
151
+ return out.map(normalSelector).filter(Boolean);
152
+ }
153
+ /** The at-rules whose blocks hold style rules of their own. */
154
+ const GROUPING = new Set(["media", "supports", "container", "layer", "scope", "document"]);
155
+ /** Every style rule's selector in a stylesheet, each once, in order. A keyframe's steps and a font's face are not selectors. */
156
+ export function selectorsOfStylesheet(css) {
157
+ const text = css.replace(/\/\*[\s\S]*?\*\//g, "");
158
+ const out = [];
159
+ const skipString = (at) => {
160
+ const quote = text[at];
161
+ let i = at + 1;
162
+ while (i < text.length && text[i] !== quote)
163
+ i += text[i] === "\\" ? 2 : 1;
164
+ return i + 1;
165
+ };
166
+ const skipBlock = (at) => {
167
+ let depth = 1;
168
+ let i = at;
169
+ while (i < text.length && depth > 0) {
170
+ const c = text[i];
171
+ if (c === '"' || c === "'") {
172
+ i = skipString(i);
173
+ continue;
174
+ }
175
+ if (c === "{")
176
+ depth++;
177
+ else if (c === "}")
178
+ depth--;
179
+ i++;
180
+ }
181
+ return i;
182
+ };
183
+ const rules = (from) => {
184
+ let prelude = "";
185
+ let at = from;
186
+ while (at < text.length) {
187
+ const c = text[at];
188
+ if (c === '"' || c === "'") {
189
+ const end = skipString(at);
190
+ prelude += text.slice(at, end);
191
+ at = end;
192
+ }
193
+ else if (c === "}")
194
+ return at + 1;
195
+ else if (c === ";") {
196
+ prelude = "";
197
+ at++;
198
+ }
199
+ else if (c === "{") {
200
+ const head = prelude.trim();
201
+ prelude = "";
202
+ if (head.startsWith("@")) {
203
+ const name = (/^@([\w-]+)/.exec(head)?.[1] ?? "").toLowerCase();
204
+ at = GROUPING.has(name) ? rules(at + 1) : skipBlock(at + 1);
205
+ }
206
+ else {
207
+ out.push(...splitList(head));
208
+ at = skipBlock(at + 1);
209
+ }
210
+ }
211
+ else {
212
+ prelude += c;
213
+ at++;
214
+ }
215
+ }
216
+ return at;
217
+ };
218
+ rules(0);
219
+ return [...new Set(out)];
220
+ }
221
+ /** The classes and ids a selector names, as `.name` and `#name`; what is inside `[…]` and strings is not read. */
222
+ export function namesInSelector(selector) {
223
+ const plain = selector.replace(/\[[^\]]*\]/g, "").replace(/"[^"]*"|'[^']*'/g, "");
224
+ return [...new Set([...plain.matchAll(/([.#])(-?[_a-zA-Z -￿][\w -￿-]*)/g)].map((m) => `${m[1]}${m[2]}`))];
225
+ }
226
+ /** A selector a string of a script could hold, and not the words or the markup a string also holds. */
227
+ const looksLikeSelector = (selector) => !selector.includes(HOLE) && selector.length < 300 && !/[<;!@]|=>|^\d/.test(selector) && /^[\w\s.#:>+~*()[\]="'^$|,\\%-]+$/u.test(selector);
228
+ const CLASS_ATTRIBUTE = /\b(?:class|className)\s*=\s*(?:"([^"]*)"|'([^']*)')/g;
229
+ const ID_ATTRIBUTE = /\bid\s*=\s*(?:"([^"]*)"|'([^']*)')/g;
230
+ const HEADING_MARKUP = /<h([1-6])\b[^>]*>([\s\S]*?)<\/h\1\s*>/gi;
231
+ const NAMED_LANDMARK = /<(section|nav|main|aside|header|footer|article|form)\b[^>]*?\baria-label\s*=\s*(?:"([^"]*)"|'([^']*)')/gi;
232
+ function readSide(side) {
233
+ const strings = side.css === undefined || (side.drawing === undefined && side.classes === undefined) ? stringsOfSource(side.source) : [];
234
+ const selectors = side.css !== undefined
235
+ ? selectorsOfStylesheet(side.css)
236
+ : [...new Set(strings.filter((one) => one.includes("{") && one.includes("}")).flatMap((one) => selectorsOfStylesheet(one)).filter(looksLikeSelector))];
237
+ const drawn = new Set();
238
+ let sections;
239
+ if (side.drawing) {
240
+ for (const element of elementsOf(side.drawing)) {
241
+ for (const one of (element.getAttribute("class") ?? "").split(/\s+/))
242
+ if (one)
243
+ drawn.add(`.${one}`);
244
+ const id = element.getAttribute("id");
245
+ if (id)
246
+ drawn.add(`#${id}`);
247
+ }
248
+ sections = sectionsOfDrawing(side.drawing);
249
+ }
250
+ else {
251
+ const tokens = (match) => (match[1] ?? match[2] ?? "").split(/\s+/).filter((one) => one && !one.includes(HOLE));
252
+ for (const text of strings) {
253
+ for (const match of text.matchAll(CLASS_ATTRIBUTE))
254
+ for (const one of tokens(match))
255
+ drawn.add(`.${one}`);
256
+ for (const match of text.matchAll(ID_ATTRIBUTE))
257
+ for (const one of tokens(match))
258
+ drawn.add(`#${one}`);
259
+ }
260
+ const seen = new Set();
261
+ sections = [];
262
+ const add = (name, as) => {
263
+ const clean = name.replace(/\s+/g, " ").trim();
264
+ if (!clean || clean.includes(HOLE) || seen.has(clean.toLowerCase()))
265
+ return;
266
+ seen.add(clean.toLowerCase());
267
+ sections.push({ name: clean, as });
268
+ };
269
+ for (const text of strings) {
270
+ for (const match of text.matchAll(NAMED_LANDMARK))
271
+ add(match[2] ?? match[3] ?? "", match[1].toLowerCase());
272
+ for (const match of text.matchAll(HEADING_MARKUP))
273
+ add(match[2].replace(/<[^>]*>/g, ""), "heading");
274
+ }
275
+ }
276
+ for (const one of side.classes ?? [])
277
+ drawn.add(`.${one}`);
278
+ return { from: side.drawing || side.classes ? "drawing" : "source", selectors, drawn, sections };
279
+ }
280
+ const MOST_NAMED = 8;
281
+ const listed = (names) => (names.length <= MOST_NAMED ? names.join(", ") : `${names.slice(0, MOST_NAMED).join(", ")} and ${names.length - MOST_NAMED} more`);
282
+ const px = (n) => `${Math.round(n).toLocaleString("en-US")}px`;
283
+ /**
284
+ * WHAT A REVISION OF A VIEW BROKE, against the version it replaces: the
285
+ * classes it still draws that lost every rule styling them, the selectors
286
+ * taken out while the markup they matched is still drawn, the sections
287
+ * drawn before and not now, and how the page's height moved.
288
+ */
289
+ export function compareViewRevision(before, after) {
290
+ const was = readSide(before);
291
+ const now = readSide(after);
292
+ const styledNow = new Set(now.selectors.flatMap(namesInSelector));
293
+ const styledBefore = new Map();
294
+ for (const selector of was.selectors)
295
+ for (const name of namesInSelector(selector))
296
+ if (name.startsWith("."))
297
+ styledBefore.set(name, [...(styledBefore.get(name) ?? []), selector]);
298
+ const unstyled = [...styledBefore]
299
+ .filter(([name]) => now.drawn.has(name) && !styledNow.has(name))
300
+ .map(([name, styledBy]) => ({ class: name.slice(1), styledBy }));
301
+ const unstyledNames = new Set(unstyled.map((one) => `.${one.class}`));
302
+ const kept = new Set(now.selectors);
303
+ const selectorsRemoved = was.selectors
304
+ .filter((selector) => !kept.has(selector))
305
+ .map((selector) => ({ selector, names: namesInSelector(selector) }))
306
+ .filter((one) => one.names.length > 0 && one.names.every((name) => now.drawn.has(name) && (was.from === "source" || was.drawn.has(name))));
307
+ const present = new Set(now.sections.map((one) => one.name.toLowerCase()));
308
+ const sectionsMissing = was.sections.filter((one) => !present.has(one.name.toLowerCase()));
309
+ const height = before.height !== undefined && after.height !== undefined && before.height > 0
310
+ ? { before: before.height, after: after.height, change: after.height - before.height, ratio: Math.round(((after.height - before.height) / before.height) * 1000) / 1000 }
311
+ : undefined;
312
+ const heightMoved = height !== undefined && Math.abs(height.ratio) >= 0.1 && Math.abs(height.change) >= 50;
313
+ const said = [];
314
+ if (unstyled.length > 0) {
315
+ const names = unstyled.map((one) => `.${one.class}`);
316
+ said.push(`${unstyled.length === 1 ? "A class" : `${unstyled.length} classes`} it still draws lost every rule that styled ${unstyled.length === 1 ? "it" : "them"} before: ${listed(names)}. Put back the rules for ${unstyled.length === 1 ? "it" : "them"}, or stop drawing ${unstyled.length === 1 ? "it" : "them"}.`);
317
+ }
318
+ /* A rule whose loss a class already said explains is not said again. */
319
+ const notSaid = selectorsRemoved.filter((one) => !one.names.some((name) => unstyledNames.has(name)));
320
+ if (notSaid.length > 0)
321
+ said.push(`${notSaid.length === 1 ? "A rule was" : `${notSaid.length} rules were`} taken out while the markup ${notSaid.length === 1 ? "it" : "they"} styled is still drawn: ${listed(notSaid.map((one) => `"${one.selector}"`))}.`);
322
+ if (sectionsMissing.length > 0)
323
+ said.push(`${sectionsMissing.length === 1 ? "A section" : `${sectionsMissing.length} sections`} drawn before ${sectionsMissing.length === 1 ? "is" : "are"} not drawn now: ${listed(sectionsMissing.map((one) => `"${one.name}"`))}.`);
324
+ if (height && heightMoved)
325
+ said.push(`The page is ${px(height.after)} tall, ${height.change < 0 ? "down" : "up"} from ${px(height.before)} (${height.change < 0 ? "−" : "+"}${Math.round(Math.abs(height.ratio) * 100)}%).`);
326
+ const regressed = said.length > 0;
327
+ return {
328
+ regressed,
329
+ unstyled,
330
+ selectorsRemoved,
331
+ sectionsMissing,
332
+ ...(height ? { height } : {}),
333
+ read: { before: was.from, after: now.from },
334
+ said,
335
+ text: regressed ? said.join(" ") : `Nothing it drew before lost its style, and no section it drew is gone${height ? "; the page is about as tall" : ""}.`,
336
+ };
337
+ }
338
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/revisions/view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export { compareViewRevision, namesInSelector, selectorsOfStylesheet, stringsOfSource } from "./revisions/view.js";
2
+ export type { HeightChange, RemovedSelector, UnstyledClass, ViewRevision, ViewRevisionSide } from "./revisions/view.js";
3
+ export { sectionsOfDrawing } from "./revisions/sections.js";
4
+ export type { DrawnSection, ElementLike } from "./revisions/sections.js";
5
+ export { MEASURE_PICTURED_PAGE, picturedCoverage } from "./revisions/pictured.js";
6
+ export type { PageMeasure, PictureCoverage, PlacedSection } from "./revisions/pictured.js";
7
+ export { problemsMade, viewProblemKey } from "./revisions/problems.js";
8
+ export type { ChangedProblem, ProblemSet, ProblemsMade, ViewProblem } from "./revisions/problems.js";
9
+ export { beyondAsked } from "./revisions/beyond.js";
10
+ export type { ActReach, BeyondAskedOptions, BeyondChange } from "./revisions/beyond.js";
11
+ //# sourceMappingURL=revisions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revisions.d.ts","sourceRoot":"","sources":["../src/revisions.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACnH,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACxH,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAClF,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACrG,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,YAAY,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /*
2
+ * `@graview/core/revisions` — WHAT A CHANGE BROKE, SAID WITH THE CHANGE
3
+ * (Roadmap f-revisions-say-what-broke).
4
+ *
5
+ * A host that applies a revised view or runs an act tells whoever asked
6
+ * what it broke, in the same answer: a view's classes still drawn and no
7
+ * longer styled, its rules taken out from under markup still drawn, its
8
+ * sections gone, its height moved (`compareViewRevision`); how much of a
9
+ * page a picture held and the sections it left out (`MEASURE_PICTURED_PAGE`,
10
+ * `picturedCoverage`); the rules that held and fail, and the view problems
11
+ * new, with the act that repairs each (`problemsMade`); and the records and
12
+ * links an act changed beyond what it was asked (`beyondAsked`). Each is
13
+ * pure, judges nothing on its own, and is a host's: no page imports it.
14
+ */
15
+ export { compareViewRevision, namesInSelector, selectorsOfStylesheet, stringsOfSource } from "./revisions/view.js";
16
+ export { sectionsOfDrawing } from "./revisions/sections.js";
17
+ export { MEASURE_PICTURED_PAGE, picturedCoverage } from "./revisions/pictured.js";
18
+ export { problemsMade, viewProblemKey } from "./revisions/problems.js";
19
+ export { beyondAsked } from "./revisions/beyond.js";
20
+ //# sourceMappingURL=revisions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revisions.js","sourceRoot":"","sources":["../src/revisions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEnH,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAElF,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEvE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC"}