@graview/core 0.1.64 → 0.1.66

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 (142) hide show
  1. package/dist/archived-seen.js +2 -2
  2. package/dist/archived-seen.js.map +1 -1
  3. package/dist/capital.d.ts +8 -0
  4. package/dist/capital.d.ts.map +1 -1
  5. package/dist/capital.js +8 -0
  6. package/dist/capital.js.map +1 -1
  7. package/dist/catalog.d.ts +32 -2
  8. package/dist/catalog.d.ts.map +1 -1
  9. package/dist/catalog.js +1 -0
  10. package/dist/catalog.js.map +1 -1
  11. package/dist/columns.js +2 -2
  12. package/dist/columns.js.map +1 -1
  13. package/dist/compose.d.ts +25 -1
  14. package/dist/compose.d.ts.map +1 -1
  15. package/dist/compose.js +56 -0
  16. package/dist/compose.js.map +1 -1
  17. package/dist/conformance/index.d.ts +8 -0
  18. package/dist/conformance/index.d.ts.map +1 -1
  19. package/dist/conformance/index.js +4 -0
  20. package/dist/conformance/index.js.map +1 -1
  21. package/dist/conformance/plan-host.d.ts +73 -0
  22. package/dist/conformance/plan-host.d.ts.map +1 -0
  23. package/dist/conformance/plan-host.js +64 -0
  24. package/dist/conformance/plan-host.js.map +1 -0
  25. package/dist/conformance/told-host.d.ts +40 -0
  26. package/dist/conformance/told-host.d.ts.map +1 -0
  27. package/dist/conformance/told-host.js +57 -0
  28. package/dist/conformance/told-host.js.map +1 -0
  29. package/dist/conformance/view-fork-host.d.ts +26 -0
  30. package/dist/conformance/view-fork-host.d.ts.map +1 -0
  31. package/dist/conformance/view-fork-host.js +47 -0
  32. package/dist/conformance/view-fork-host.js.map +1 -0
  33. package/dist/conformance/view-revision-host.d.ts +36 -0
  34. package/dist/conformance/view-revision-host.d.ts.map +1 -0
  35. package/dist/conformance/view-revision-host.js +42 -0
  36. package/dist/conformance/view-revision-host.js.map +1 -0
  37. package/dist/css/tables.d.ts.map +1 -1
  38. package/dist/css/tables.js +5 -1
  39. package/dist/css/tables.js.map +1 -1
  40. package/dist/document/compile.d.ts.map +1 -1
  41. package/dist/document/compile.js +6 -2
  42. package/dist/document/compile.js.map +1 -1
  43. package/dist/document.schema.json +2 -2
  44. package/dist/friction-record.d.ts +2 -1
  45. package/dist/friction-record.d.ts.map +1 -1
  46. package/dist/friction.d.ts +4 -0
  47. package/dist/friction.d.ts.map +1 -1
  48. package/dist/friction.js +5 -4
  49. package/dist/friction.js.map +1 -1
  50. package/dist/graph/graph.d.ts.map +1 -1
  51. package/dist/graph/graph.js +3 -3
  52. package/dist/graph/graph.js.map +1 -1
  53. package/dist/index.d.ts +4 -3
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +3 -2
  56. package/dist/index.js.map +1 -1
  57. package/dist/intelligence-bridge.d.ts +9 -0
  58. package/dist/intelligence-bridge.d.ts.map +1 -1
  59. package/dist/mutations/derive-edits.d.ts.map +1 -1
  60. package/dist/mutations/derive-edits.js +3 -5
  61. package/dist/mutations/derive-edits.js.map +1 -1
  62. package/dist/ops/declines.d.ts +41 -0
  63. package/dist/ops/declines.d.ts.map +1 -0
  64. package/dist/ops/declines.js +118 -0
  65. package/dist/ops/declines.js.map +1 -0
  66. package/dist/ops/log.d.ts +12 -0
  67. package/dist/ops/log.d.ts.map +1 -1
  68. package/dist/ops/log.js.map +1 -1
  69. package/dist/ops/provenance.js +2 -2
  70. package/dist/ops/provenance.js.map +1 -1
  71. package/dist/ops/tidying.d.ts +23 -17
  72. package/dist/ops/tidying.d.ts.map +1 -1
  73. package/dist/ops/tidying.js +1 -76
  74. package/dist/ops/tidying.js.map +1 -1
  75. package/dist/plan-edits.d.ts +55 -0
  76. package/dist/plan-edits.d.ts.map +1 -0
  77. package/dist/plan-edits.js +84 -0
  78. package/dist/plan-edits.js.map +1 -0
  79. package/dist/presence.d.ts +10 -0
  80. package/dist/presence.d.ts.map +1 -1
  81. package/dist/presence.js.map +1 -1
  82. package/dist/revisions/beyond.d.ts +56 -0
  83. package/dist/revisions/beyond.d.ts.map +1 -0
  84. package/dist/revisions/beyond.js +112 -0
  85. package/dist/revisions/beyond.js.map +1 -0
  86. package/dist/revisions/pictured.d.ts +52 -0
  87. package/dist/revisions/pictured.d.ts.map +1 -0
  88. package/dist/revisions/pictured.js +85 -0
  89. package/dist/revisions/pictured.js.map +1 -0
  90. package/dist/revisions/pinned-dates.d.ts +30 -0
  91. package/dist/revisions/pinned-dates.d.ts.map +1 -0
  92. package/dist/revisions/pinned-dates.js +120 -0
  93. package/dist/revisions/pinned-dates.js.map +1 -0
  94. package/dist/revisions/problems.d.ts +57 -0
  95. package/dist/revisions/problems.d.ts.map +1 -0
  96. package/dist/revisions/problems.js +51 -0
  97. package/dist/revisions/problems.js.map +1 -0
  98. package/dist/revisions/sections.d.ts +18 -0
  99. package/dist/revisions/sections.d.ts.map +1 -0
  100. package/dist/revisions/sections.js +91 -0
  101. package/dist/revisions/sections.js.map +1 -0
  102. package/dist/revisions/touched.d.ts +59 -0
  103. package/dist/revisions/touched.d.ts.map +1 -0
  104. package/dist/revisions/touched.js +72 -0
  105. package/dist/revisions/touched.js.map +1 -0
  106. package/dist/revisions/view.d.ts +71 -0
  107. package/dist/revisions/view.d.ts.map +1 -0
  108. package/dist/revisions/view.js +338 -0
  109. package/dist/revisions/view.js.map +1 -0
  110. package/dist/revisions.d.ts +15 -0
  111. package/dist/revisions.d.ts.map +1 -0
  112. package/dist/revisions.js +24 -0
  113. package/dist/revisions.js.map +1 -0
  114. package/dist/scaffold/ui.d.ts.map +1 -1
  115. package/dist/scaffold/ui.js +30 -44
  116. package/dist/scaffold/ui.js.map +1 -1
  117. package/dist/schema/define-node.d.ts +7 -0
  118. package/dist/schema/define-node.d.ts.map +1 -1
  119. package/dist/schema/define-node.js +8 -1
  120. package/dist/schema/define-node.js.map +1 -1
  121. package/dist/seen.js +1 -1
  122. package/dist/seen.js.map +1 -1
  123. package/dist/store.d.ts +5 -1
  124. package/dist/store.d.ts.map +1 -1
  125. package/dist/store.js +12 -4
  126. package/dist/store.js.map +1 -1
  127. package/dist/tidying.d.ts +5 -2
  128. package/dist/tidying.d.ts.map +1 -1
  129. package/dist/tidying.js +12 -3
  130. package/dist/tidying.js.map +1 -1
  131. package/dist/told.d.ts +306 -0
  132. package/dist/told.d.ts.map +1 -0
  133. package/dist/told.js +409 -0
  134. package/dist/told.js.map +1 -0
  135. package/dist/version.d.ts +1 -1
  136. package/dist/version.js +1 -1
  137. package/dist/views/kept.d.ts +96 -0
  138. package/dist/views/kept.d.ts.map +1 -1
  139. package/dist/views/kept.js +75 -0
  140. package/dist/views/kept.js.map +1 -1
  141. package/dist/workflows/step-classify.js +1 -1
  142. package/package.json +9 -1
@@ -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,15 @@
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 { datesPinned } from "./revisions/pinned-dates.js";
10
+ export type { DatesPinnedOptions, PinnedDate } from "./revisions/pinned-dates.js";
11
+ export { placesTouched } from "./revisions/touched.js";
12
+ export type { PlacesTouched, PlacesTouchedOptions, TouchedPlace, TouchedView } from "./revisions/touched.js";
13
+ export { beyondAsked } from "./revisions/beyond.js";
14
+ export type { ActReach, BeyondAskedOptions, BeyondChange } from "./revisions/beyond.js";
15
+ //# sourceMappingURL=revisions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revisions.d.ts","sourceRoot":"","sources":["../src/revisions.ts"],"names":[],"mappings":"AAgBA,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,6BAA6B,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC7G,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,YAAY,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,24 @@
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`); what a
13
+ * view's source pins a day to (`datesPinned`), and the places that draw
14
+ * what a commit touched, with the views to look at (`placesTouched`). Each is
15
+ * pure, judges nothing on its own, and is a host's: no page imports it.
16
+ */
17
+ export { compareViewRevision, namesInSelector, selectorsOfStylesheet, stringsOfSource } from "./revisions/view.js";
18
+ export { sectionsOfDrawing } from "./revisions/sections.js";
19
+ export { MEASURE_PICTURED_PAGE, picturedCoverage } from "./revisions/pictured.js";
20
+ export { problemsMade, viewProblemKey } from "./revisions/problems.js";
21
+ export { datesPinned } from "./revisions/pinned-dates.js";
22
+ export { placesTouched } from "./revisions/touched.js";
23
+ export { beyondAsked } from "./revisions/beyond.js";
24
+ //# sourceMappingURL=revisions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revisions.js","sourceRoot":"","sources":["../src/revisions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;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,6BAA6B,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/scaffold/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAA0D,MAAM,YAAY,CAAC;AAO9F,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAgB1C;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAyC1C;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAyBzC;AAID,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAyBzC;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAqHzC;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CA2OzC;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAsGxC"}
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/scaffold/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAA0D,MAAM,YAAY,CAAC;AAO9F,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAgB1C;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAyC1C;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAyBzC;AAID,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAyBzC;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAqHzC;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CA6NzC;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAsGxC"}
@@ -244,21 +244,24 @@ export function pagesTsx(ids) {
244
244
  import { Begin, EditableValue } from "@graview/primitives";
245
245
  import { useGraviewIfAny } from "@graview/react";
246
246
  import {
247
+ actsBeyondFacts,
248
+ blankWritable,
247
249
  createPageRegistry,
248
250
  DefaultHomePage,
249
251
  DerivedForm,
252
+ FactSheet,
250
253
  PageMain,
251
254
  pageStyles,
252
255
  recordFacts,
253
- recordPath,
254
- RecordField,
256
+ relationFacts,
255
257
  Repairs,
256
258
  spatialHref,
259
+ titleFieldOf,
257
260
  useStoreTick,
258
261
  type PageComponent,
259
262
  type PageContext,
260
263
  } from "@graview/pages";
261
- import { Link, useParams } from "react-router-dom";
264
+ import { useParams } from "react-router-dom";
262
265
  import { ${ids.schemaVar}, type ${ids.SchemaType} } from "../domain/schema.js";
263
266
 
264
267
  type S = ${ids.SchemaType};
@@ -282,6 +285,8 @@ function ${ids.KindPascal}Page({ context }: { context: PageContext<S> }) {
282
285
  const facts = recordFacts(store, id, {
283
286
  ...(principal ? { principal } : {}),
284
287
  ...(invariantContext ? { context: invariantContext } : {}),
288
+ // A blank this seat may fill says how to fill it ("Pick a day"), where values are changed in place.
289
+ ...(inPlace ? { blanks: blankWritable(store, id, principal) } : {}),
285
290
  });
286
291
  const node = store.graph.getNode(id);
287
292
  if (!facts || !node) {
@@ -301,6 +306,11 @@ function ${ids.KindPascal}Page({ context }: { context: PageContext<S> }) {
301
306
  * edge, which is the first thing every project does.
302
307
  */
303
308
  const ties = facts.links;
309
+ // Each relation as a row of the facts, with the act that ties and unties it.
310
+ const relations = relationFacts(store, id, facts);
311
+ // The name is the heading's: the field that holds it, where this seat may change it, is changed there and not said again.
312
+ const titleField = inPlace ? titleFieldOf(store, id, facts.label, principal) : undefined;
313
+ const fields = facts.fields.filter((field) => field.key !== titleField);
304
314
  /*
305
315
  * THE ACTS AS THE DERIVATION OFFERS THEM, not as the declaration lists
306
316
  * them. Reaching for a mutation by name gets an act that is always there;
@@ -316,7 +326,13 @@ function ${ids.KindPascal}Page({ context }: { context: PageContext<S> }) {
316
326
  * what takes the record away comes last.
317
327
  */
318
328
  const away = (affordance: { destructive?: boolean; setsAside?: boolean }) => (affordance.destructive || affordance.setsAside ? 1 : 0);
319
- const offered = facts.actions.affordances.filter((affordance) => affordance.provider !== "invariant").sort((a, b) => away(a) - away(b));
329
+ /*
330
+ * AND NOT ONE A FACT ALREADY DOES: an act whose whole effect is one field
331
+ * or one relation drawn above — a switch, a date, the heading, a chip —
332
+ * is done there (\`actsBeyondFacts\`), where values are changed in place.
333
+ */
334
+ const beyond = inPlace ? actsBeyondFacts(store, id, facts.actions, { fields: [...fields.map((field) => field.key), ...(titleField ? [titleField] : [])], relations, ...(principal ? { principal } : {}) }) : facts.actions;
335
+ const offered = beyond.affordances.filter((affordance) => affordance.provider !== "invariant").sort((a, b) => away(a) - away(b));
320
336
 
321
337
  return (
322
338
  <PageMain context={context} data-testid="${ids.kind}-page">
@@ -328,7 +344,7 @@ function ${ids.KindPascal}Page({ context }: { context: PageContext<S> }) {
328
344
  */}
329
345
  <p style={pageStyles.eyebrow}>{withArticle(nounOf(store.schema.tryDefinition(node.kind), node.kind)).replace(/^./, (first) => first.toUpperCase())} in ${escapeJsxText(ids.name)}</p>
330
346
  {/* The name, pressed, is the field that changes it — as on the derived page. */}
331
- <h1 style={pageStyles.h1}>{inPlace && node["label"] === facts.label ? <EditableValue<S> nodeId={id} field="label" value={facts.label} said={facts.label} /> : facts.label}</h1>
347
+ <h1 style={pageStyles.h1}>{titleField ? <EditableValue<S> nodeId={id} field={titleField} value={facts.label} said={facts.label} /> : facts.label}</h1>
332
348
  {/*
333
349
  * WHERE IT IS ON THE HORIZON, asked of the declaration's own
334
350
  * lifecycle rather than of a status word written here: rename the
@@ -360,46 +376,16 @@ function ${ids.KindPascal}Page({ context }: { context: PageContext<S> }) {
360
376
  ) : null}
361
377
  {/*
362
378
  * THE FACTS, as the derivation reads them — every field that is not
363
- * the name, formatted as the declaration says. A page that dropped
364
- * them looked finished on the one-kind scaffold, where the only
365
- * field is the name, and hid the price of every vehicle a day later.
366
- * Each is drawn as the derived record page draws it (\`RecordField\`):
367
- * a picture or a video plays, prose keeps its paragraphs, a date is
368
- * changed by the date editor where it stands. Drawn here as text, a
369
- * trailer was a file name and a time took "Change" (the twelfth walk).
379
+ * the name, formatted as the declaration says, and every relation as
380
+ * a row of chips. A page that dropped them looked finished on the
381
+ * one-kind scaffold, where the only field is the name, and hid the
382
+ * price of every vehicle a day later. Drawn as the derived record page
383
+ * draws them (\`FactSheet\`): a yes or no is a switch, a date is said
384
+ * with its weekday and changed by the date editor, a choice is its
385
+ * options, a relation's chip opens its record and its picker changes
386
+ * it — each through the act the declaration says does it.
370
387
  */}
371
- {facts.fields.length > 0 ? (
372
- <dl style={{ ...pageStyles.rule, margin: 0, display: "grid", gridTemplateColumns: "repeat(auto-fill, minmax(200px, 1fr))", gap: "14px 24px" }} data-testid="record-fields">
373
- {facts.fields.map((field) => (
374
- <RecordField<S> key={field.key} nodeId={id} node={node} field={field} inPlace={inPlace} />
375
- ))}
376
- </dl>
377
- ) : null}
378
- {ties.length > 0 ? (
379
- <section style={{ ...pageStyles.rule, display: "grid", gap: 14 }} data-testid="record-ties">
380
- {ties.map((group) => (
381
- <div key={\`\${group.edgeKind}|\${group.direction}\`} style={{ display: "grid", gap: 6 }}>
382
- {/* The edge's own words for THIS end — its description read
383
- from the end that declared it, its inverse read from the
384
- other. */}
385
- <h2 style={pageStyles.h2}>
386
- {(group.description ?? group.edgeKind).replace(/^./, (first) => first.toUpperCase())}
387
- </h2>
388
- {/* Each a link, and two of one name told apart (\`apart\`): a list of words cannot be followed. */}
389
- <ul style={{ margin: 0, padding: 0, listStyle: "none", display: "grid", gap: 4 }}>
390
- {group.targets.map((target) => (
391
- <li key={target.id}>
392
- <Link to={recordPath(${ids.schemaVar}, target.kind, target.id)} style={pageStyles.link}>
393
- {target.label}
394
- {target.apart ? <span style={pageStyles.quiet}> · {target.apart}</span> : null}
395
- </Link>
396
- </li>
397
- ))}
398
- </ul>
399
- </div>
400
- ))}
401
- </section>
402
- ) : null}
388
+ <FactSheet<S> context={context} id={id} facts={facts} fields={fields} relations={relations} inPlace={inPlace} style={pageStyles.rule} />
403
389
  {/*
404
390
  * WITHHELD, NOT HIDDEN. The affordances above are what this seat may
405
391
  * do; an act the policy refuses is in withheld, carrying the policy's
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/scaffold/ui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/scaffold/ui.ts"],"names":[],"mappings":"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"}
@@ -179,6 +179,13 @@ export declare function fieldWords(definition: {
179
179
  readonly label?: string;
180
180
  }>>;
181
181
  } | undefined, key: string): string;
182
+ /**
183
+ * A FIELD AS A SENTENCE NAMES IT IN PASSING — "Changed the apple music of
184
+ * Blue", "the Apple Music of Blue" where the app labels it so: its words
185
+ * (`fieldWords`), lowered as a word is unless written as a name
186
+ * (`nameInPassing`), never half lowered ("apple Music").
187
+ */
188
+ export declare const fieldInPassing: (definition: Parameters<typeof fieldWords>[0], key: string) => string;
182
189
  /** "a" or "an", by how the word SOUNDS. */
183
190
  export declare function article(word: string): "a" | "an";
184
191
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"define-node.d.ts","sourceRoot":"","sources":["../../src/schema/define-node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"define-node.d.ts","sourceRoot":"","sources":["../../src/schema/define-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAG7B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,KAAK,EACV,iBAAiB,EACjB,OAAO,EACP,YAAY,EACZ,cAAc,EACd,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,KAAK,CAAC,CAAC,SAAS,MAAM,EACtB,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EACpC,KAAK,CAAC,CAAC,SAAS,OAAO,GAAG,YAAY,EACtC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAMlE;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CACvB,UAAU,EAAE,iBAAiB,GAAG,SAAS,EACzC,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5D,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAWT;AAED,4EAA4E;AAC5E,wBAAgB,OAAO,CACrB,UAAU,EAAE,iBAAiB,GAAG,SAAS,EACzC,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3D,MAAM,CAMR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAK,GAAG,MAAM,CAOxD;AAED,sCAAsC;AACtC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC;;;;OAIG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,eAAe,EAAE,CAAA;KAAE,CAAC;IACnG;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;IACtB,oIAAoI;IACpI,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;CAC1B;AAED,+EAA+E;AAC/E;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAExF;AAGD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;AAExC;;;;;;GAMG;AACH;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE;IAAE,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAA;CAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAItK;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE;IAAE,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAA;CAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhI;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE;IAAE,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAA;CAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnI;AAED,qHAAqH;AACrH,wBAAgB,QAAQ,CAAC,MAAM,EAAE;IAAE,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAA;CAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIhI;AAED,wBAAgB,UAAU,CACxB,UAAU,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;KAAE,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAA;CAAE,GAAG,SAAS,EACzL,GAAG,EAAE,MAAM,GACV,MAAM,CAKR;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,YAAY,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,KAAG,MAAoD,CAAC;AAmBhJ,2CAA2C;AAC3C,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAKhD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,UAAU,EAAE;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/F"}
@@ -1,5 +1,5 @@
1
1
  import { isoToday, numberAsRead } from "../days.js";
2
- import { capitalize } from "../capital.js";
2
+ import { capitalize, nameInPassing } from "../capital.js";
3
3
  import { humanizeField, humanizeValue } from "./humanize.js";
4
4
  /**
5
5
  * The single declaration everything else derives from. Views, agent tool
@@ -123,6 +123,13 @@ export function fieldWords(definition, key) {
123
123
  // A kind's `label` is its name: the log said "Change Woodworking: label → …" of a shelf renamed (W-184).
124
124
  return definition?.display?.labels?.[key] ?? (typeof computed === "object" ? computed.label : undefined) ?? (key === "label" ? "Name" : humanizeField(key));
125
125
  }
126
+ /**
127
+ * A FIELD AS A SENTENCE NAMES IT IN PASSING — "Changed the apple music of
128
+ * Blue", "the Apple Music of Blue" where the app labels it so: its words
129
+ * (`fieldWords`), lowered as a word is unless written as a name
130
+ * (`nameInPassing`), never half lowered ("apple Music").
131
+ */
132
+ export const fieldInPassing = (definition, key) => nameInPassing(fieldWords(definition, key));
126
133
  /*
127
134
  * "a item" is the sound of generated prose.
128
135
  *