@graview/primitives 0.1.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 (207) hide show
  1. package/LICENSE +96 -0
  2. package/README.md +25 -0
  3. package/dist/arrange-bar.d.ts +49 -0
  4. package/dist/arrange-bar.d.ts.map +1 -0
  5. package/dist/arrange-bar.js +264 -0
  6. package/dist/arrange-bar.js.map +1 -0
  7. package/dist/chat.d.ts +46 -0
  8. package/dist/chat.d.ts.map +1 -0
  9. package/dist/chat.js +343 -0
  10. package/dist/chat.js.map +1 -0
  11. package/dist/companion.d.ts +58 -0
  12. package/dist/companion.d.ts.map +1 -0
  13. package/dist/companion.js +433 -0
  14. package/dist/companion.js.map +1 -0
  15. package/dist/connections.d.ts +23 -0
  16. package/dist/connections.d.ts.map +1 -0
  17. package/dist/connections.js +100 -0
  18. package/dist/connections.js.map +1 -0
  19. package/dist/default-views.d.ts +35 -0
  20. package/dist/default-views.d.ts.map +1 -0
  21. package/dist/default-views.js +605 -0
  22. package/dist/default-views.js.map +1 -0
  23. package/dist/editable.d.ts +71 -0
  24. package/dist/editable.d.ts.map +1 -0
  25. package/dist/editable.js +225 -0
  26. package/dist/editable.js.map +1 -0
  27. package/dist/figure.d.ts +30 -0
  28. package/dist/figure.d.ts.map +1 -0
  29. package/dist/figure.js +66 -0
  30. package/dist/figure.js.map +1 -0
  31. package/dist/find.d.ts +5 -0
  32. package/dist/find.d.ts.map +1 -0
  33. package/dist/find.js +252 -0
  34. package/dist/find.js.map +1 -0
  35. package/dist/index.d.ts +51 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +44 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/installation.d.ts +17 -0
  40. package/dist/installation.d.ts.map +1 -0
  41. package/dist/installation.js +37 -0
  42. package/dist/installation.js.map +1 -0
  43. package/dist/ladder.d.ts +2 -0
  44. package/dist/ladder.d.ts.map +1 -0
  45. package/dist/ladder.js +53 -0
  46. package/dist/ladder.js.map +1 -0
  47. package/dist/lens/arranging.d.ts +41 -0
  48. package/dist/lens/arranging.d.ts.map +1 -0
  49. package/dist/lens/arranging.js +38 -0
  50. package/dist/lens/arranging.js.map +1 -0
  51. package/dist/lens/board.d.ts +146 -0
  52. package/dist/lens/board.d.ts.map +1 -0
  53. package/dist/lens/board.js +658 -0
  54. package/dist/lens/board.js.map +1 -0
  55. package/dist/lens/calendar-dates.d.ts +19 -0
  56. package/dist/lens/calendar-dates.d.ts.map +1 -0
  57. package/dist/lens/calendar-dates.js +55 -0
  58. package/dist/lens/calendar-dates.js.map +1 -0
  59. package/dist/lens/calendar-drawing.d.ts +59 -0
  60. package/dist/lens/calendar-drawing.d.ts.map +1 -0
  61. package/dist/lens/calendar-drawing.js +229 -0
  62. package/dist/lens/calendar-drawing.js.map +1 -0
  63. package/dist/lens/calendar-options.d.ts +107 -0
  64. package/dist/lens/calendar-options.d.ts.map +1 -0
  65. package/dist/lens/calendar-options.js +19 -0
  66. package/dist/lens/calendar-options.js.map +1 -0
  67. package/dist/lens/calendar-placing.d.ts +35 -0
  68. package/dist/lens/calendar-placing.d.ts.map +1 -0
  69. package/dist/lens/calendar-placing.js +113 -0
  70. package/dist/lens/calendar-placing.js.map +1 -0
  71. package/dist/lens/calendar-spans.d.ts +48 -0
  72. package/dist/lens/calendar-spans.d.ts.map +1 -0
  73. package/dist/lens/calendar-spans.js +146 -0
  74. package/dist/lens/calendar-spans.js.map +1 -0
  75. package/dist/lens/calendar-view.d.ts +34 -0
  76. package/dist/lens/calendar-view.d.ts.map +1 -0
  77. package/dist/lens/calendar-view.js +228 -0
  78. package/dist/lens/calendar-view.js.map +1 -0
  79. package/dist/lens/calendar.d.ts +43 -0
  80. package/dist/lens/calendar.d.ts.map +1 -0
  81. package/dist/lens/calendar.js +43 -0
  82. package/dist/lens/calendar.js.map +1 -0
  83. package/dist/lens/coverage.d.ts +183 -0
  84. package/dist/lens/coverage.d.ts.map +1 -0
  85. package/dist/lens/coverage.js +732 -0
  86. package/dist/lens/coverage.js.map +1 -0
  87. package/dist/lens/horizon.d.ts +14 -0
  88. package/dist/lens/horizon.d.ts.map +1 -0
  89. package/dist/lens/horizon.js +20 -0
  90. package/dist/lens/horizon.js.map +1 -0
  91. package/dist/lens/more.d.ts +16 -0
  92. package/dist/lens/more.d.ts.map +1 -0
  93. package/dist/lens/more.js +17 -0
  94. package/dist/lens/more.js.map +1 -0
  95. package/dist/lens/plan-lens.d.ts +17 -0
  96. package/dist/lens/plan-lens.d.ts.map +1 -0
  97. package/dist/lens/plan-lens.js +24 -0
  98. package/dist/lens/plan-lens.js.map +1 -0
  99. package/dist/lens/plan-state.d.ts +122 -0
  100. package/dist/lens/plan-state.d.ts.map +1 -0
  101. package/dist/lens/plan-state.js +152 -0
  102. package/dist/lens/plan-state.js.map +1 -0
  103. package/dist/lens/plan-view.d.ts +10 -0
  104. package/dist/lens/plan-view.d.ts.map +1 -0
  105. package/dist/lens/plan-view.js +576 -0
  106. package/dist/lens/plan-view.js.map +1 -0
  107. package/dist/lens/plan.d.ts +25 -0
  108. package/dist/lens/plan.d.ts.map +1 -0
  109. package/dist/lens/plan.js +25 -0
  110. package/dist/lens/plan.js.map +1 -0
  111. package/dist/lens/reach.d.ts +47 -0
  112. package/dist/lens/reach.d.ts.map +1 -0
  113. package/dist/lens/reach.js +67 -0
  114. package/dist/lens/reach.js.map +1 -0
  115. package/dist/lens/timeline.d.ts +137 -0
  116. package/dist/lens/timeline.d.ts.map +1 -0
  117. package/dist/lens/timeline.js +426 -0
  118. package/dist/lens/timeline.js.map +1 -0
  119. package/dist/markup.d.ts +23 -0
  120. package/dist/markup.d.ts.map +1 -0
  121. package/dist/markup.js +24 -0
  122. package/dist/markup.js.map +1 -0
  123. package/dist/places.d.ts +24 -0
  124. package/dist/places.d.ts.map +1 -0
  125. package/dist/places.js +227 -0
  126. package/dist/places.js.map +1 -0
  127. package/dist/popover.d.ts +28 -0
  128. package/dist/popover.d.ts.map +1 -0
  129. package/dist/popover.js +59 -0
  130. package/dist/popover.js.map +1 -0
  131. package/dist/primitives/index.d.ts +214 -0
  132. package/dist/primitives/index.d.ts.map +1 -0
  133. package/dist/primitives/index.js +381 -0
  134. package/dist/primitives/index.js.map +1 -0
  135. package/dist/profile.d.ts +65 -0
  136. package/dist/profile.d.ts.map +1 -0
  137. package/dist/profile.js +233 -0
  138. package/dist/profile.js.map +1 -0
  139. package/dist/quick-relations.d.ts +16 -0
  140. package/dist/quick-relations.d.ts.map +1 -0
  141. package/dist/quick-relations.js +183 -0
  142. package/dist/quick-relations.js.map +1 -0
  143. package/dist/relation-key.d.ts +44 -0
  144. package/dist/relation-key.d.ts.map +1 -0
  145. package/dist/relation-key.js +196 -0
  146. package/dist/relation-key.js.map +1 -0
  147. package/dist/seat.d.ts +137 -0
  148. package/dist/seat.d.ts.map +1 -0
  149. package/dist/seat.js +162 -0
  150. package/dist/seat.js.map +1 -0
  151. package/dist/seats.d.ts +21 -0
  152. package/dist/seats.d.ts.map +1 -0
  153. package/dist/seats.js +62 -0
  154. package/dist/seats.js.map +1 -0
  155. package/dist/seeding.d.ts +150 -0
  156. package/dist/seeding.d.ts.map +1 -0
  157. package/dist/seeding.js +538 -0
  158. package/dist/seeding.js.map +1 -0
  159. package/dist/shell.d.ts +74 -0
  160. package/dist/shell.d.ts.map +1 -0
  161. package/dist/shell.js +86 -0
  162. package/dist/shell.js.map +1 -0
  163. package/dist/theme.d.ts +50 -0
  164. package/dist/theme.d.ts.map +1 -0
  165. package/dist/theme.js +1692 -0
  166. package/dist/theme.js.map +1 -0
  167. package/dist/wordmark.d.ts +15 -0
  168. package/dist/wordmark.d.ts.map +1 -0
  169. package/dist/wordmark.js +55 -0
  170. package/dist/wordmark.js.map +1 -0
  171. package/dist/workbench/activity.d.ts +75 -0
  172. package/dist/workbench/activity.d.ts.map +1 -0
  173. package/dist/workbench/activity.js +259 -0
  174. package/dist/workbench/activity.js.map +1 -0
  175. package/dist/workbench/agent-seat.d.ts +51 -0
  176. package/dist/workbench/agent-seat.d.ts.map +1 -0
  177. package/dist/workbench/agent-seat.js +112 -0
  178. package/dist/workbench/agent-seat.js.map +1 -0
  179. package/dist/workbench/answer-args.d.ts +31 -0
  180. package/dist/workbench/answer-args.d.ts.map +1 -0
  181. package/dist/workbench/answer-args.js +257 -0
  182. package/dist/workbench/answer-args.js.map +1 -0
  183. package/dist/workbench/back-out.d.ts +71 -0
  184. package/dist/workbench/back-out.d.ts.map +1 -0
  185. package/dist/workbench/back-out.js +238 -0
  186. package/dist/workbench/back-out.js.map +1 -0
  187. package/dist/workbench/following.d.ts +7 -0
  188. package/dist/workbench/following.d.ts.map +1 -0
  189. package/dist/workbench/following.js +26 -0
  190. package/dist/workbench/following.js.map +1 -0
  191. package/dist/workbench/index.d.ts +23 -0
  192. package/dist/workbench/index.d.ts.map +1 -0
  193. package/dist/workbench/index.js +23 -0
  194. package/dist/workbench/index.js.map +1 -0
  195. package/dist/workbench/inspector.d.ts +27 -0
  196. package/dist/workbench/inspector.d.ts.map +1 -0
  197. package/dist/workbench/inspector.js +745 -0
  198. package/dist/workbench/inspector.js.map +1 -0
  199. package/dist/workbench/standing.d.ts +16 -0
  200. package/dist/workbench/standing.d.ts.map +1 -0
  201. package/dist/workbench/standing.js +102 -0
  202. package/dist/workbench/standing.js.map +1 -0
  203. package/dist/workbench/trail.d.ts +35 -0
  204. package/dist/workbench/trail.d.ts.map +1 -0
  205. package/dist/workbench/trail.js +150 -0
  206. package/dist/workbench/trail.js.map +1 -0
  207. package/package.json +62 -0
@@ -0,0 +1,538 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { beginning, providerCan } from "@graview/core";
3
+ import { kindCardId } from "@graview/layout";
4
+ import { createViews, GraviewProvider, useApplyAffordance, useGraph, useGraview, useGraviewIfAny, useLocalIntelligence, } from "@graview/react";
5
+ import { applyPlan, dependentsOf, deriveAffordances, firstJsonObject, validateProposals, without, } from "@graview/tools";
6
+ import { useLayoutEffect, useMemo, useRef, useState } from "react";
7
+ import { AnswerArgs } from "./workbench/index.js";
8
+ import { MUTED_TEXT, Panel } from "./primitives/index.js";
9
+ /**
10
+ * THE SURFACES A BLANK GRAPH NEEDS, derived like every other surface.
11
+ *
12
+ * The framework derives a home, a list per kind, a record per node, a form
13
+ * per act and a problems page. It did not derive THE WAY IN — the one state
14
+ * every product ships in and the one its author never sees, because their own
15
+ * graph has had data in it since the first afternoon.
16
+ *
17
+ * Three surfaces, and all three read the same thing: `beginning()`, the chain
18
+ * the declaration already states.
19
+ */
20
+ /** The kinds, in the order a blank installation can fill them. */
21
+ function chainOf(store) {
22
+ return beginning({
23
+ name: "",
24
+ schema: store.schema,
25
+ mutations: store.allMutations(),
26
+ });
27
+ }
28
+ /**
29
+ * THE WAY IN, derived.
30
+ *
31
+ * A ten-kind app on an empty graph has one door and nine silent districts.
32
+ * This is the door, the order behind it, and — for the kinds that are not
33
+ * ready yet — what they are waiting for, in the declaration's own words.
34
+ *
35
+ * Nothing here is configured. The chain comes from `creates` and the acts'
36
+ * own node references; the acts come from the same derivation the actions
37
+ * strip reads, so an act offered here is an act that can actually run, with
38
+ * its open questions asked by the same walk that asks them anywhere else.
39
+ */
40
+ /**
41
+ * THE WAY IN BELONGS ON BOTH FACES, and only one of them has a provider.
42
+ *
43
+ * The scene is always inside a `GraviewProvider`; the routed face carries
44
+ * its store in a `PageContext` instead. Everything these surfaces are made
45
+ * of — the affordance derivation, the walk that asks an act's open
46
+ * questions, applying a plan as one turn — reads the provider, so rather
47
+ * than teach each of them a second way to find a store, this puts one up
48
+ * when there is none. The registry is empty because nothing here draws a
49
+ * view.
50
+ *
51
+ * The SEAT comes with it. A surface handed a guarded store and no principal
52
+ * is refused everything, which draws as a page with no way in and no reason
53
+ * given — the exact wall these surfaces exist to take down.
54
+ */
55
+ function Lifted({ store, principal, what, children, }) {
56
+ const provided = useGraviewIfAny();
57
+ if (provided !== null)
58
+ return _jsx(_Fragment, { children: children });
59
+ if (!store)
60
+ throw new Error(`<${what}> needs a store: pass one, or put it inside a <GraviewProvider>.`);
61
+ return (_jsx(GraviewProvider, { store: store, views: createViews(store.schema), ...(principal ? { principal } : {}), children: children }));
62
+ }
63
+ export function Begin(props = {}) {
64
+ return (_jsx(Lifted, { what: "Begin", ...(props.store ? { store: props.store } : {}), ...(props.principal ? { principal: props.principal } : {}), children: _jsx(BeginInside, { ...props }) }));
65
+ }
66
+ function BeginInside({ whenFull, frame, title = "Begin", heading = frame ? 1 : undefined }) {
67
+ const { store, principal } = useGraview();
68
+ const nodes = useGraph();
69
+ const chain = useMemo(() => chainOf(store), [store]);
70
+ const counts = useMemo(() => {
71
+ const found = {};
72
+ for (const entry of chain.order)
73
+ found[entry.kind] = store.graph.nodesOfKind(entry.kind).length;
74
+ return found;
75
+ }, [chain, store, nodes]);
76
+ /*
77
+ * Derived once, here, rather than inside each row — because whether this
78
+ * surface should be on screen AT ALL depends on the answer.
79
+ */
80
+ const ways = useMemo(() => {
81
+ const found = {};
82
+ for (const entry of chain.order) {
83
+ if ((counts[entry.kind] ?? 0) > 0)
84
+ continue;
85
+ if (!entry.needs.every((needed) => (counts[needed] ?? 0) > 0))
86
+ continue;
87
+ found[entry.kind] = deriveAffordances(store, [kindCardId(entry.kind)], {
88
+ kindSelection: [entry.kind],
89
+ ...(principal ? { principal } : {}),
90
+ });
91
+ }
92
+ return found;
93
+ }, [store, principal, chain, counts, nodes]);
94
+ const empty = chain.order.filter((entry) => (counts[entry.kind] ?? 0) === 0);
95
+ const startable = Object.values(ways).some((way) => way.affordances.length > 0);
96
+ const standing = chain.order.some((entry) => (counts[entry.kind] ?? 0) > 0);
97
+ /*
98
+ * WHEN TO STAND DOWN — and the answer is not "when every kind has one".
99
+ *
100
+ * A working property found this: Maple Street is planted, tended and
101
+ * inspected, and this panel was still on its front page, headed "what has
102
+ * to exist before the rest of it can", because two kinds were empty —
103
+ * invitations and people — and the seat reading the page was a keeper,
104
+ * who may not invite anybody. Nothing on the list was anything that
105
+ * reader could do, so the list was a chore board of other people's work.
106
+ *
107
+ * So: stand down when nothing here is startable BY THIS SEAT and the
108
+ * graph is standing anyway. The empty graph keeps the opposite rule —
109
+ * there, "you may not, and here is who may" is the single most useful
110
+ * sentence on the screen, and hiding it would put a person in front of a
111
+ * blank page with no explanation, which is the wall this exists to end.
112
+ */
113
+ /*
114
+ * THE KEYBOARD OUTLIVES THE DOOR IT WENT THROUGH.
115
+ *
116
+ * Answering "Add a song" from the keyboard made the first song — and the
117
+ * row that asked went away with it, or the whole door did, standing down
118
+ * for the home it hands back to. Either way the element the keyboard was
119
+ * on left the document and took focus to <body>. So the door remembers
120
+ * where the keyboard was, and when that is gone it lands on the next way
121
+ * in, else on the heading of whatever now stands here.
122
+ */
123
+ const box = useRef(null);
124
+ const kept = useRef(null);
125
+ useLayoutEffect(() => {
126
+ const was = kept.current;
127
+ if (!was || was.isConnected || document.activeElement !== document.body)
128
+ return;
129
+ kept.current = null;
130
+ const next = box.current?.querySelector('[data-testid^="begin-"]:is(button, a):not([disabled])') ??
131
+ box.current?.querySelector("h1, h2, h3");
132
+ if (!next)
133
+ return;
134
+ if (!next.matches("button, a, input, select, textarea, [tabindex]"))
135
+ next.tabIndex = -1;
136
+ next.focus();
137
+ });
138
+ const held = (children) => (_jsx("div", { ref: box, style: { display: "contents" }, onFocus: (event) => {
139
+ kept.current = event.target;
140
+ }, children: children }));
141
+ if (empty.length === 0 || (!startable && standing))
142
+ return whenFull === undefined ? null : held(whenFull);
143
+ const door = (_jsx(Panel, { title: title, subtitle: "What has to exist before the rest of it can.", fit: true, ...(heading ? { heading } : {}), children: _jsx("ol", { "data-testid": "begin", style: { margin: 0, paddingLeft: "1.25rem", display: "grid", gap: 10 }, children: chain.order.map((entry) => {
144
+ const has = counts[entry.kind] ?? 0;
145
+ const plural = store.schema.tryDefinition(entry.kind)?.plural ?? entry.kind;
146
+ const ready = entry.needs.every((needed) => (counts[needed] ?? 0) > 0);
147
+ return (_jsxs("li", { "data-begin-kind": entry.kind, "data-begin-ready": ready || undefined, children: [_jsx("strong", { children: plural }), " ", _jsx("span", { style: { fontVariantNumeric: "tabular-nums", ...MUTED_TEXT }, children: has === 0 ? "none yet" : has }), entry.depth === null ? (_jsxs("div", { style: { fontSize: "0.875rem", ...MUTED_TEXT }, children: ["Nothing here makes ", plural.toLowerCase(), " \u2014 they arrive with the data."] })) : has > 0 ? null : ready ? (_jsx(BeginHere, { kind: entry.kind, derived: ways[entry.kind] })) : (_jsxs("div", { style: { fontSize: "0.875rem", ...MUTED_TEXT }, children: ["Waiting for ", entry.needs.map((kind) => store.schema.tryDefinition(kind)?.plural ?? kind).join(" and "), "."] }))] }, entry.kind));
148
+ }) }) }));
149
+ return held(frame ? frame(door) : door);
150
+ }
151
+ function BeginHere({ kind, derived }) {
152
+ const { affordances, withheld } = derived;
153
+ const { apply } = useApplyAffordance();
154
+ const [asking, setAsking] = useState(null);
155
+ /*
156
+ * WITHHELD, NOT HIDDEN — the same honesty the actions strip gives.
157
+ *
158
+ * A guarded store answers an unroled seat by refusing everything, and a
159
+ * first screen that responds to that by drawing nothing is the exact
160
+ * failure this surface exists to end: a person looking at a page with no
161
+ * way in and no reason given. Say who could instead.
162
+ */
163
+ if (affordances.length === 0 && withheld.length > 0) {
164
+ return (_jsx("div", { "data-testid": `begin-withheld-${kind}`, style: { fontSize: "0.875rem", marginTop: 4, ...MUTED_TEXT }, children: withheld[0].refusal.message }));
165
+ }
166
+ if (affordances.length === 0)
167
+ return null;
168
+ if (asking) {
169
+ return (_jsx(AnswerArgs, { affordance: asking, onApply: (args) => {
170
+ apply(asking, args);
171
+ setAsking(null);
172
+ }, onCancel: () => setAsking(null) }));
173
+ }
174
+ return (_jsx("div", { style: { display: "flex", flexWrap: "wrap", gap: 6, marginTop: 4 }, children: affordances.map((affordance) => (_jsx("button", { type: "button", "data-testid": `begin-${affordance.mutation}`, onClick: () => (affordance.open.length === 0 ? apply(affordance, {}) : setAsking(affordance)), style: { minHeight: "max(1.5rem, 24px)", padding: "2px 10px", fontSize: "0.875rem" }, children: affordance.label }, affordance.id))) }));
175
+ }
176
+ function rowsOf(plan, about) {
177
+ const rows = [];
178
+ const byOwner = new Map();
179
+ for (const entry of plan.entries) {
180
+ const made = entry.call.as;
181
+ const { subjectArg, makes } = about(entry.call.mutation);
182
+ /*
183
+ * A call that MAKES something is always its own row, named or not — the
184
+ * oak stands in the lawn and depends on it, but nobody thinks of the oak
185
+ * as a detail of the lawn. Only a call that modifies or connects belongs
186
+ * to the thing it is about.
187
+ */
188
+ if (made !== undefined || makes) {
189
+ if (made !== undefined)
190
+ byOwner.set(made, rows.length);
191
+ rows.push({ key: made ?? `${entry.call.mutation}:${entry.at}`, ...(made ? { name: made } : {}), entries: [entry] });
192
+ continue;
193
+ }
194
+ /*
195
+ * What it acts on is either something this plan is making — a
196
+ * `{ $plan: name }` — or something already in the graph, in which case
197
+ * the id is the owner. A plan that outlines an area and then places a
198
+ * tree on it is two things; one that outlines an area and marks a
199
+ * position on the SAME area is one.
200
+ */
201
+ const raw = subjectArg === undefined ? undefined : entry.call.args[subjectArg];
202
+ const planned = planRefName(raw);
203
+ const standing = typeof raw === "string" ? raw : undefined;
204
+ const owner = planned ?? standing ?? entry.dependsOn[0];
205
+ const at = owner === undefined ? undefined : byOwner.get(owner);
206
+ if (at !== undefined) {
207
+ rows[at] = { ...rows[at], entries: [...rows[at].entries, entry] };
208
+ continue;
209
+ }
210
+ const key = owner ?? `${entry.call.mutation}:${entry.at}`;
211
+ byOwner.set(key, rows.length);
212
+ rows.push({
213
+ key,
214
+ ...(planned !== undefined ? { name: planned } : {}),
215
+ ...(standing !== undefined ? { about: standing } : {}),
216
+ entries: [entry],
217
+ });
218
+ }
219
+ return rows;
220
+ }
221
+ /**
222
+ * What to call a row — the THING, wherever its name can be found.
223
+ *
224
+ * A call that makes something carries the name in its arguments. A call that
225
+ * acts on something already standing does not, and asking it to would be
226
+ * asking a plan to repeat what the graph already knows: the node is right
227
+ * there with a label on it. Only when neither holds a name does the row fall
228
+ * back to reading as the act, which is the case where the act IS the only
229
+ * thing there is to say.
230
+ */
231
+ function labelOf(row, titleOf, labelIn) {
232
+ const first = row.entries[0];
233
+ const label = first.call.args["label"];
234
+ if (typeof label === "string" && label.length > 0)
235
+ return { text: label, named: true };
236
+ const standing = row.about === undefined ? undefined : labelIn(row.about);
237
+ if (standing !== undefined && standing.length > 0)
238
+ return { text: standing, named: true };
239
+ return { text: titleOf(first.call.mutation)?.title ?? first.call.mutation, named: false };
240
+ }
241
+ const planRefName = (value) => typeof value === "object" && value !== null && typeof value.$plan === "string"
242
+ ? value.$plan
243
+ : undefined;
244
+ /**
245
+ * WHAT A MODEL WANTS TO DO, BEFORE IT DOES IT.
246
+ *
247
+ * In the order it will run, with what it makes counted, and the refusals
248
+ * struck through with their reason rather than dropped — the same honesty
249
+ * the actions strip gives a seat that may not act. Applying is one press and
250
+ * one turn, so taking it back is one press too.
251
+ */
252
+ export function PlanReview(props) {
253
+ return (_jsx(Lifted, { what: "PlanReview", ...(props.store ? { store: props.store } : {}), ...(props.principal ? { principal: props.principal } : {}), children: _jsx(PlanReviewInside, { ...props }) }));
254
+ }
255
+ function PlanReviewInside({ plan, onApplied, onDiscard, title = "What this would do", declinable = false, options, also, header, bare = false, batch, }) {
256
+ const { store, principal, noteSeat } = useGraview();
257
+ const [done, setDone] = useState(null);
258
+ const [declined, setDeclined] = useState([]);
259
+ /* What is left after the declines, ordered and judged like any other plan. */
260
+ const kept = declined.length === 0 ? plan : without(store, plan, declined, options ?? {});
261
+ const titleOf = (mutation) => store.allMutations().find((m) => m.name === mutation);
262
+ const rows = rowsOf(plan, (mutation) => {
263
+ const declared = titleOf(mutation);
264
+ return {
265
+ ...(declared?.subject?.arg ? { subjectArg: declared.subject.arg } : {}),
266
+ makes: (declared?.creates?.length ?? 0) > 0,
267
+ };
268
+ });
269
+ const named = (id) => store.graph.getNode(id)?.label;
270
+ const shown = new Map(rows.map((row) => [row.key, labelOf(row, titleOf, named)]));
271
+ /*
272
+ * THE LEAST SURE FIRST. A plan whose calls carry a confidence is read in
273
+ * that order — the row a model was least sure of is the one a person
274
+ * should read first, and the survey's review already knew it. A plan
275
+ * that carries none keeps the order it will run in. Display only: the
276
+ * press applies the plan in its own order regardless.
277
+ */
278
+ const sureOf = (row) => {
279
+ const held = row.entries.map((entry) => entry.call.confidence).filter((c) => typeof c === "number");
280
+ return held.length > 0 ? Math.min(...held) : undefined;
281
+ };
282
+ const anySure = rows.some((row) => sureOf(row) !== undefined);
283
+ const ordered = anySure
284
+ ? [...rows].sort((a, b) => (sureOf(a) ?? 1) - (sureOf(b) ?? 1))
285
+ : rows;
286
+ const names = new Map(rows.flatMap((row) => (row.name === undefined ? [] : [[row.name, shown.get(row.key).text]])));
287
+ /* "1 zone, 2 features" — the kind's own word when there is one of it. */
288
+ const makes = Object.entries(kept.makes)
289
+ .map(([kind, count]) => `${count} ${count === 1 ? kind : (store.schema.tryDefinition(kind)?.plural ?? `${kind}s`).toLowerCase()}`)
290
+ .join(", ");
291
+ /*
292
+ * WHAT CARRIED IT OUT. A row struck through because something it points
293
+ * at was declined says which one, by name: "goes with Back Lawn". A count
294
+ * on the parent is only useful while the parent is on screen, and the
295
+ * thing a person is looking at when they wonder is the child.
296
+ */
297
+ const carriedBy = new Map();
298
+ for (const name of declined) {
299
+ for (const entry of dependentsOf(plan, name)) {
300
+ const row = rows.find((one) => one.entries.includes(entry));
301
+ if (row === undefined || row.name === name)
302
+ continue;
303
+ if (row.name !== undefined && declined.includes(row.name))
304
+ continue;
305
+ if (!carriedBy.has(row.key))
306
+ carriedBy.set(row.key, name);
307
+ }
308
+ }
309
+ const live = rows.filter((row) => !row.entries.some((entry) => entry.refusal !== undefined) &&
310
+ !(row.name !== undefined && declined.includes(row.name)) &&
311
+ row.entries.some((entry) => kept.entries.some((other) => other.call === entry.call))).length;
312
+ const Frame = bare
313
+ ? ({ children }) => (_jsxs("div", { children: [_jsx("p", { style: { margin: "0 0 .4rem", fontSize: "0.875rem", ...MUTED_TEXT }, children: `${live} of ${rows.length} to run${makes ? `, making ${makes}` : ""}.` }), children] }))
314
+ : ({ children }) => (_jsx(Panel, { title: title, subtitle: `${live} of ${rows.length} to run${makes ? `, making ${makes}` : ""}.`, fit: true, children: children }));
315
+ return (_jsxs(Frame, { children: [header, anySure ? (_jsx("p", { "data-testid": "plan-least-sure", style: { margin: "0 0 .4rem", fontSize: "0.8125rem", ...MUTED_TEXT }, children: "Least sure first." })) : null, _jsx("ol", { "data-testid": "plan", style: { margin: 0, paddingLeft: "1.25rem", display: "grid", gap: 6 }, children: ordered.map((row) => {
316
+ const sure = sureOf(row);
317
+ const first = row.entries[0];
318
+ const refused = row.entries.find((entry) => entry.refusal !== undefined);
319
+ const name = row.name;
320
+ const out = refused !== undefined ||
321
+ (name !== undefined && declined.includes(name)) ||
322
+ !kept.entries.some((other) => other.call === first.call);
323
+ /* What would go with it, said before the press rather than after. */
324
+ const goesWith = name === undefined
325
+ ? []
326
+ : [...dependentsOf(plan, name)].filter((entry) => !row.entries.includes(entry));
327
+ /*
328
+ * The follow-ups, in the product's words where it has any. When
329
+ * the row is named by the thing, the FIRST act is a follow-up too
330
+ * — "Back Lawn / drawn with 4 corners". When it is named by the
331
+ * act, the first one has already been said.
332
+ */
333
+ const rest = row.entries
334
+ .slice(shown.get(row.key).named ? 0 : 1)
335
+ .map((entry) => also?.(entry, names) ?? titleOf(entry.call.mutation)?.title ?? entry.call.mutation)
336
+ .filter((part) => Boolean(part))
337
+ .join(" · ");
338
+ return (_jsxs("li", { "data-plan-row": row.key, "data-plan-refused": refused ? "" : undefined, "data-plan-declined": out && !refused ? "" : undefined, style: out ? { textDecoration: "line-through", opacity: 0.6 } : undefined, children: [_jsx("span", { children: shown.get(row.key).text }), first.call.why ? _jsxs("span", { style: { ...MUTED_TEXT }, children: [" \u2014 ", first.call.why] }) : null, sure !== undefined ? (_jsxs("span", { "data-testid": "plan-sure", "data-plan-sure": sure.toFixed(2), title: "How sure the proposer was", style: { marginLeft: 6, fontSize: "0.75rem", color: sure < 0.5 ? "var(--graview-warn)" : "var(--graview-ink-faint)" }, children: [Math.round(sure * 100), "% sure"] })) : null, declinable && !refused && name !== undefined && !done ? (_jsx("button", { type: "button", "data-testid": `plan-decline-${name}`, title: goesWith.length > 0
339
+ ? `Declining this also drops ${goesWith.length} that point at it`
340
+ : "Drop this one", onClick: () => setDeclined((current) => current.includes(name) ? current.filter((one) => one !== name) : [...current, name]), style: {
341
+ marginLeft: 8,
342
+ minHeight: "max(1.5rem, 24px)",
343
+ padding: "0 8px",
344
+ fontSize: "0.8125rem",
345
+ textDecoration: "none",
346
+ }, children: declined.includes(name) ? "Keep it" : "Not this" })) : null, rest ? (_jsx("div", { "data-testid": `plan-also-${row.key}`, style: { fontSize: "0.8125rem", textDecoration: "none", ...MUTED_TEXT }, children: rest })) : null, declinable && carriedBy.has(row.key) ? (_jsxs("div", { "data-testid": `plan-carried-${row.key}`, style: { fontSize: "0.8125rem", textDecoration: "none", ...MUTED_TEXT }, children: ["goes with ", names.get(carriedBy.get(row.key)) ?? carriedBy.get(row.key)] })) : null, declinable && goesWith.length > 0 && !refused ? (_jsxs("div", { "data-testid": "plan-goes-with", style: { fontSize: "0.8125rem", textDecoration: "none", ...MUTED_TEXT }, children: [goesWith.length, " ", goesWith.length === 1 ? "other goes" : "others go", " with it."] })) : null, refused ? (_jsx("div", { "data-testid": "plan-refusal", style: { fontSize: "0.8125rem", color: "var(--graview-warn)", textDecoration: "none" }, children: refused.refusal.message })) : null] }, row.key));
347
+ }) }), done ? (_jsx("p", { "data-testid": "plan-done", style: { margin: 0, fontSize: "0.875rem", ...MUTED_TEXT }, children: done.why
348
+ ? `Stopped after ${done.applied}: ${done.why}`
349
+ : `Done — ${done.applied} applied as one turn.` })) : (_jsxs("div", { style: { display: "flex", gap: 8 }, children: [_jsxs("button", { type: "button", "data-testid": "plan-apply", disabled: kept.ready.length === 0, onClick: () => {
350
+ const result = applyPlan(store, kept, {
351
+ ...(principal ? { author: principal } : {}),
352
+ ...(batch ? { batch } : {}),
353
+ /*
354
+ * The seat's body walks to each target BEFORE the op lands,
355
+ * in the plan's order: cause and effect co-located, and the
356
+ * mark then lights where it is standing.
357
+ */
358
+ before: (entry, args) => {
359
+ if (!principal || principal.kind !== "agent")
360
+ return;
361
+ const subject = store.allMutations().find((m) => m.name === entry.call.mutation)?.subject?.arg;
362
+ const target = subject ? args[subject] : undefined;
363
+ noteSeat({ type: "about-to-write", author: principal, ids: typeof target === "string" ? [target] : [] });
364
+ },
365
+ });
366
+ setDone({
367
+ batch: result.batch,
368
+ applied: result.applied,
369
+ ...(result.stoppedAt ? { why: result.stoppedAt.why } : {}),
370
+ });
371
+ onApplied?.(result.batch, result.applied);
372
+ }, style: { minHeight: "max(1.5rem, 24px)", padding: "2px 12px" }, children: ["Apply ", kept.ready.length === 1 ? "it" : "all"] }), onDiscard ? (_jsx("button", { type: "button", "data-testid": "plan-discard", onClick: onDiscard, style: { minHeight: "max(1.5rem, 24px)", padding: "2px 12px" }, children: "Discard" })) : null] }))] }));
373
+ }
374
+ /** The long edge, in pixels. Enough to see a blockage, not a print. */
375
+ export const PHOTO_MAX_EDGE = 1280;
376
+ /** JPEG quality. What a model is asked to look at is texture, not a print. */
377
+ export const PHOTO_QUALITY = 0.7;
378
+ /**
379
+ * A file from a camera or the filesystem, down to something sendable.
380
+ *
381
+ * Browser-only: it is the one part of the photograph path that needs a
382
+ * canvas. It ALWAYS re-encodes, even when the original is small, so what
383
+ * comes out is one known format rather than whatever the phone produced —
384
+ * HEIC and 12-bit PNGs both arrive here and neither belongs in a snapshot
385
+ * or on the wire.
386
+ *
387
+ * Every product that lets a model look at something wrote this, and the one
388
+ * that did not sent six megabytes per frame and wondered why it was slow.
389
+ */
390
+ export async function downscale(file, maxEdge = PHOTO_MAX_EDGE, quality = PHOTO_QUALITY) {
391
+ const bitmap = await createImageBitmap(file);
392
+ try {
393
+ const scale = Math.min(1, maxEdge / Math.max(bitmap.width, bitmap.height));
394
+ const width = Math.max(1, Math.round(bitmap.width * scale));
395
+ const height = Math.max(1, Math.round(bitmap.height * scale));
396
+ const canvas = document.createElement("canvas");
397
+ canvas.width = width;
398
+ canvas.height = height;
399
+ const context = canvas.getContext("2d");
400
+ if (context === null)
401
+ throw new Error("This browser will not give us a canvas to resize with.");
402
+ context.drawImage(bitmap, 0, 0, width, height);
403
+ return canvas.toDataURL("image/jpeg", quality);
404
+ }
405
+ finally {
406
+ bitmap.close();
407
+ }
408
+ }
409
+ /**
410
+ * PHOTOGRAPHS IN. A drop zone and a file input over one handler, because a
411
+ * product that lets a model look at something has to get the something in,
412
+ * and every one of them wrote this — including the downscaling, which is
413
+ * not a detail: a phone photograph is three to six megabytes, and a dozen
414
+ * of them at full size will exhaust a browser's whole storage quota and
415
+ * lose the graph along with them.
416
+ *
417
+ * It says what it does, every time, because "and none is kept" is the
418
+ * sentence a person actually wants before they hand over pictures of their
419
+ * house.
420
+ */
421
+ export function Intake({ onPhotos, accept = "image/*", label = "Photographs", most, chosen = 0, maxEdge, quality, onTrouble, }) {
422
+ const [over, setOver] = useState(false);
423
+ const take = async (files) => {
424
+ if (!files || files.length === 0)
425
+ return;
426
+ const offered = [...files];
427
+ const room = most === undefined ? offered.length : most - chosen;
428
+ if (room <= 0) {
429
+ onTrouble?.(`There is room for no more — ${most} is the most one ask may carry. Send the rest as a second ask.`);
430
+ return;
431
+ }
432
+ if (offered.length > room) {
433
+ onTrouble?.(`That is ${offered.length} photographs and there is room for ${room} more — ${most} is the most one ask ` +
434
+ `may carry. The first ${room} were kept; send the rest as a second ask.`);
435
+ }
436
+ try {
437
+ const read = [];
438
+ for (const file of offered.slice(0, room))
439
+ read.push(await downscale(file, maxEdge, quality));
440
+ onPhotos(read);
441
+ }
442
+ catch (error) {
443
+ onTrouble?.(error instanceof Error ? error.message : String(error));
444
+ }
445
+ };
446
+ return (_jsxs("label", { "data-testid": "intake", "data-intake-over": over || undefined, onDragOver: (event) => {
447
+ event.preventDefault();
448
+ setOver(true);
449
+ }, onDragLeave: () => setOver(false), onDrop: (event) => {
450
+ event.preventDefault();
451
+ setOver(false);
452
+ void take(event.dataTransfer?.files ?? null);
453
+ }, style: {
454
+ position: "relative",
455
+ display: "flex",
456
+ flexDirection: "column",
457
+ alignItems: "center",
458
+ justifyContent: "center",
459
+ gap: 2,
460
+ minHeight: "4rem",
461
+ padding: "var(--graview-pad-sm, 8px)",
462
+ border: `1px dashed ${over ? "var(--graview-accent)" : "var(--graview-edge)"}`,
463
+ borderRadius: "var(--graview-radius-sm, 8px)",
464
+ color: "var(--graview-ink-muted)",
465
+ fontSize: "0.875rem",
466
+ cursor: "pointer",
467
+ }, children: [_jsxs("span", { children: [label, " \u2014 drop them here, or choose"] }), _jsxs("span", { "data-testid": "intake-terms", style: { fontSize: "0.8125rem" }, children: [most === undefined ? "" : `${chosen} of ${most} chosen — `, "each is made smaller before it is sent, and none is kept"] }), _jsx("input", { type: "file", multiple: true, accept: accept, onChange: (event) => void take(event.target.files), "data-testid": "intake-files",
468
+ /*
469
+ * TRANSPARENT AND FULL-BLEED, not visually hidden.
470
+ *
471
+ * The obvious way to hide a file input is the visually-hidden
472
+ * pattern, and a product's own accessibility audit caught what that
473
+ * costs: the input is still focusable and still a control, so it is
474
+ * a 1x1 target with a 1x1 focus ring, and a keyboard lands on
475
+ * something nobody can see. Stretching it over the whole box
476
+ * instead keeps the native picker, keeps the drop zone, and makes
477
+ * the target the size the box already is.
478
+ */
479
+ style: {
480
+ position: "absolute",
481
+ inset: 0,
482
+ width: "100%",
483
+ height: "100%",
484
+ opacity: 0,
485
+ cursor: "pointer",
486
+ } })] }));
487
+ }
488
+ /**
489
+ * THE DOORS A PROVIDER DECLARED, drawn.
490
+ *
491
+ * `reach: ["paste", "local"]` is the declaration; this is what it looks like.
492
+ * Paste is the floor and works everywhere — a prompt to copy out, an answer
493
+ * to paste back — and needs no key, no network and no permission. `local` is
494
+ * the machine under the dev server, offered only when something is actually
495
+ * answering there. A door the provider did not declare is not drawn.
496
+ */
497
+ export function Door({ provider, prompt, photos = [], onProposals }) {
498
+ const { store } = useGraview();
499
+ const declared = store.intelligence.find((candidate) => candidate.name === provider);
500
+ const reach = declared?.reach ?? [];
501
+ const local = useLocalIntelligence(declared?.bridge);
502
+ const [pasted, setPasted] = useState("");
503
+ const [said, setSaid] = useState(null);
504
+ const read = (text) => {
505
+ const answer = firstJsonObject(text);
506
+ const proposals = Array.isArray(answer?.proposals) ? answer.proposals : [];
507
+ const kept = validateProposals(store, proposals, declared?.may);
508
+ if (kept.length === 0) {
509
+ setSaid("Nothing in that answer was a call this app knows, so nothing was taken from it.");
510
+ return;
511
+ }
512
+ setSaid(null);
513
+ onProposals(
514
+ /* `as` and `why` are the model's own and survive validation. */
515
+ kept.map((call, index) => ({ ...call, ...(proposals[index]?.as ? { as: proposals[index].as } : {}) })));
516
+ };
517
+ if (!declared)
518
+ return null;
519
+ /*
520
+ * A DOOR IS FOR PROSE. Every door here carries words out and words back
521
+ * — a prompt copied, an answer pasted, a process asked on this machine —
522
+ * and a decision provider has none to give: it answers typed questions
523
+ * with typed answers, through the questions the declaration derives, not
524
+ * through a prompt. Drawing it a door would be offering a chat to a
525
+ * thing that cannot talk.
526
+ */
527
+ if (!providerCan(declared, "prose"))
528
+ return null;
529
+ return (_jsxs("div", { "data-testid": "door", "data-door-reach": reach.join(","), style: { display: "grid", gap: 8 }, children: [reach.includes("local") ? (_jsxs("div", { children: [_jsx("button", { type: "button", "data-testid": "door-local", disabled: local.state !== "open", onClick: () => {
530
+ if (local.state !== "open")
531
+ return;
532
+ void local
533
+ .ask(prompt, photos)
534
+ .then(read)
535
+ .catch((error) => setSaid(error instanceof Error ? error.message : String(error)));
536
+ }, style: { minHeight: "max(1.5rem, 24px)", padding: "2px 12px" }, children: local.state === "open" ? `Ask ${provider} on this machine` : "Nothing running on this machine" }), local.state === "closed" ? (_jsx("div", { style: { fontSize: "0.8125rem", ...MUTED_TEXT }, children: local.reason })) : null] })) : null, reach.includes("paste") ? (_jsxs("div", { style: { display: "grid", gap: 6 }, children: [_jsx("button", { type: "button", "data-testid": "door-copy", onClick: () => void navigator.clipboard?.writeText?.(prompt), style: { minHeight: "max(1.5rem, 24px)", padding: "2px 12px" }, children: "Copy the prompt" }), _jsxs("label", { style: { display: "grid", gap: 4, fontSize: "0.875rem", ...MUTED_TEXT }, children: ["Paste the answer", _jsx("textarea", { "data-testid": "door-paste", value: pasted, onChange: (event) => setPasted(event.target.value), rows: 4, style: { font: "var(--graview-font-mono, 12px ui-monospace)", padding: 6 } })] }), _jsx("button", { type: "button", "data-testid": "door-read", disabled: pasted.trim().length === 0, onClick: () => read(pasted), style: { minHeight: "max(1.5rem, 24px)", padding: "2px 12px" }, children: "Read it" })] })) : null, said ? (_jsx("p", { "data-testid": "door-said", style: { margin: 0, fontSize: "0.8125rem", color: "var(--graview-warn)" }, children: said })) : null] }));
537
+ }
538
+ //# sourceMappingURL=seeding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seeding.js","sourceRoot":"","sources":["../src/seeding.tsx"],"names":[],"mappings":"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"}