@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
package/dist/chat.js ADDED
@@ -0,0 +1,343 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useAttention, useGraview, useSelection } from "@graview/react";
3
+ import { kindCardId, withFocus, withOverview, withSelection } from "@graview/layout";
4
+ import { configuredResponder, createToolRuntime, describeIntelligence, describeProposal, loadPins, resolveProposal, stillNeeded, } from "@graview/tools";
5
+ import { useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
6
+ import { useSubject } from "./companion.js";
7
+ import { describeSource, proposalKey, SeatComposer, SeatHeader, SeatSettings, SeatThread, Settled, useSeatConversation } from "./seat.js";
8
+ import { AnswerArgs } from "./workbench/index.js";
9
+ import { closeToTrigger } from "./popover.js";
10
+ export function ChatPanel({ inside = false, offer, respond, onCall, onPick, testId = "chat", }) {
11
+ const { store, views, principal, setView, seatWho, noteSeat, session, intelligence: config, registerHostAnswers } = useGraview();
12
+ const { selection } = useSelection();
13
+ const subject = useSubject();
14
+ /* The chat writes as the tab's seat when one has sat down, so the two are one robot — in this tab's own session. */
15
+ const who = seatWho ?? "chat";
16
+ const author = useMemo(() => ({ kind: "agent", id: who, session }), [who, session]);
17
+ const [shown, setOpen] = useState(false);
18
+ // Inside the rail there is nothing to open: the rail is what opens.
19
+ const open = inside || shown;
20
+ const [settings, setSettings] = useState(false);
21
+ /*
22
+ * THE LADDER IS A SETTING — the provider's, chosen in the profile pane
23
+ * beside text size and scheme, and read here. There is no gear on the
24
+ * chat: the profile is on the same bar. "Let a model read it" shows the
25
+ * same setting in place. A host that passes `respond` has decided.
26
+ */
27
+ const [warmth, setWarmth] = useState(null);
28
+ useEffect(() => setWarmth(null), [config]);
29
+ // A host that passes `respond` has decided which rung answers; the profile's ladder steps aside.
30
+ useEffect(() => {
31
+ registerHostAnswers(respond !== undefined);
32
+ return () => registerHostAnswers(false);
33
+ }, [respond, registerHostAnswers]);
34
+ const anchor = useRef(null);
35
+ const runtime = useMemo(() => createToolRuntime(store, {
36
+ author: {
37
+ ...author,
38
+ ...(principal.roles ? { roles: principal.roles } : {}),
39
+ },
40
+ // The person's pins reach this seat too — read per call, so a pin
41
+ // toggled in the menu reorders the chat's tool list without a
42
+ // rebuild. No surface may disagree with another about the acts.
43
+ derive: () => ({ pins: loadPins() }),
44
+ places: () => views.places(),
45
+ }), [store, principal, author, views]);
46
+ const statusToken = useRef(0);
47
+ /*
48
+ * The setting as it is NOW, for a turn that started before it changed:
49
+ * the answer says which rung made it and which the person has moved to,
50
+ * rather than finishing silently on a rung they left.
51
+ */
52
+ const configNow = useRef(config);
53
+ configNow.current = config;
54
+ const answer = useMemo(() => {
55
+ // A replaced responder must not keep narrating: only the current
56
+ // build's status reaches the header.
57
+ const token = ++statusToken.current;
58
+ return (respond ??
59
+ configuredResponder(config, {
60
+ onStatus: (status) => {
61
+ if (token === statusToken.current)
62
+ setWarmth(status);
63
+ },
64
+ current: () => configNow.current,
65
+ }));
66
+ }, [respond, config]);
67
+ useEffect(() => (onCall ? runtime.onCall(onCall) : undefined), [runtime, onCall]);
68
+ // What the conversation looked at reaches the picture, like any seat's reads.
69
+ useAttention(runtime);
70
+ /*
71
+ * NO BUBBLE, NO ANCHOR. The panel used to be drawn beside the robot's
72
+ * body while it followed the pointer; the seat has no body now and the
73
+ * companion on the frame is where it speaks.
74
+ */
75
+ // Escape and click-away close it — it floats over the scene.
76
+ useEffect(() => {
77
+ if (!open)
78
+ return;
79
+ const away = (event) => {
80
+ if (!anchor.current?.contains(event.target))
81
+ setOpen(false);
82
+ };
83
+ const key = (event) => {
84
+ if (event.key === "Escape")
85
+ closeToTrigger(anchor.current, () => setOpen(false));
86
+ };
87
+ document.addEventListener("mousedown", away);
88
+ document.addEventListener("keydown", key);
89
+ return () => {
90
+ document.removeEventListener("mousedown", away);
91
+ document.removeEventListener("keydown", key);
92
+ };
93
+ }, [open]);
94
+ const conversation = useSeatConversation({
95
+ /*
96
+ * "THIS" IS THE COMPANION'S SUBJECT: the selection, else what the
97
+ * pointer has settled on, else where you are. One answer for the whole
98
+ * frame, so the panel and the header above it cannot disagree.
99
+ */
100
+ answer: (text, context) => answer(store, text, {
101
+ ...context,
102
+ selection: subject.id ? [subject.id] : selection,
103
+ principal: { ...author, ...(principal.roles ? { roles: principal.roles } : {}) },
104
+ }),
105
+ onReply: (reply) => {
106
+ /*
107
+ * SAID FROM THE BODY TOO. The reply — prose, the graph's answer, or a
108
+ * typed answer with the rung's own honesty sentence — is the robot's
109
+ * bubble; a question for the person stands it on the node's doorstep.
110
+ */
111
+ const asked = reply.questions?.[0];
112
+ if (asked) {
113
+ noteSeat({ type: "asking", author, where: asked.nodeId ?? null, say: `${asked.nodeLabel ? `${asked.nodeLabel}: ` : ""}${asked.asks}`, confidence: asked.confidence });
114
+ }
115
+ else {
116
+ noteSeat({ type: "said", author, say: reply.say });
117
+ }
118
+ /* A proposal the policy withholds is a refusal said at the gate of the kind it acts on. */
119
+ const withheld = reply.proposals.find((proposal) => !permitted(proposal));
120
+ if (withheld) {
121
+ const verdict = store.permits({ name: withheld.mutation, args: { ...withheld.args } }, seatAs);
122
+ if (!verdict.ok)
123
+ noteSeat({ type: "refused", author, where: gateOf(withheld.mutation), say: verdict.refusal.message });
124
+ }
125
+ },
126
+ });
127
+ const { outcomes, settle } = conversation;
128
+ /*
129
+ * ASKED AS THE SEAT THAT WILL APPLY IT — the agent, with the person's
130
+ * roles — which is what the runtime applies as. Asked as the person, a
131
+ * proposal the agent's declared `may` excludes was offered and refused on
132
+ * press.
133
+ */
134
+ const seatAs = { ...author, ...(principal.roles ? { roles: principal.roles } : {}) };
135
+ const permitted = (proposal) => store.permits({ name: proposal.mutation, args: { ...proposal.args } }, seatAs).ok;
136
+ const gateOf = (mutation) => {
137
+ const kinds = store.allMutations().find((m) => m.name === mutation)?.subject?.kinds;
138
+ return Array.isArray(kinds) && kinds[0] ? kindCardId(kinds[0]) : null;
139
+ };
140
+ /*
141
+ * A PROPOSAL THE ACT'S OWN ARGUMENTS ARE NOT SATISFIED BY IS AN ASK, NOT
142
+ * A REFUSAL.
143
+ *
144
+ * The seat already refuses to OFFER what the policy withholds, for the
145
+ * reason written above the proposal list: the responder proposes from the
146
+ * graph and knows nothing of the policy. It knows just as little about
147
+ * what an act NEEDS. A model told "add a shift called soup kitchen"
148
+ * answers `add-shift` with a label and none of the day, the place or the
149
+ * hours — and pressing it handed the person the validator talking to
150
+ * itself, six clauses of "expected string, received undefined".
151
+ *
152
+ * The act was never impossible, only under-specified, and this framework
153
+ * already knows what to do with an under-specified act: a person pressing
154
+ * "Add a shift" from the menu is asked for each missing argument in turn,
155
+ * with the graph's own candidates offered for anything that names a node.
156
+ * The seat's proposals go the same way now — the same component, the same
157
+ * questions, the model's own answers already filled in.
158
+ */
159
+ const [answering, setAnswering] = useState(null);
160
+ const apply = async (offered, key) => {
161
+ /*
162
+ * Resolved AT THE PRESS, not when it was offered: a sowing proposed in
163
+ * the same breath as its plot names a plot that exists only once the
164
+ * first press has landed.
165
+ */
166
+ const proposal = resolveProposal(store, offered);
167
+ const said = describeProposal(store, proposal);
168
+ /*
169
+ * The runtime RESOLVES refusals rather than throwing them — a policy
170
+ * denial, a validation failure — so the flag must be read. Skipping it
171
+ * had the chat saying "Done" over a change the store had refused, which
172
+ * is the one lie a seat must never tell.
173
+ */
174
+ const result = await runtime.call(proposal.mutation, { ...proposal.args });
175
+ if (!result.ok) {
176
+ settle(key, { state: "refused", error: result.error });
177
+ noteSeat({ type: "refused", author, where: gateOf(proposal.mutation), say: result.error });
178
+ return false;
179
+ }
180
+ settle(key, { state: "applied", said });
181
+ return true;
182
+ };
183
+ /*
184
+ * ONE REQUEST, ONE PRESS. "Add a plot and put a sunflower in it" is two
185
+ * proposals and one intention; applied in order, each resolved after the
186
+ * one before it has landed, stopping at the first that still needs an
187
+ * answer (asked, as ever) or is refused.
188
+ */
189
+ const applyAll = async (turn, proposals) => {
190
+ for (const [at, proposal] of proposals.entries()) {
191
+ const key = proposalKey(turn, at);
192
+ if (outcomes.get(key)?.state === "applied" || !permitted(proposal))
193
+ continue;
194
+ const owed = stillNeeded(store, proposal);
195
+ if (owed.length > 0) {
196
+ setAnswering({ proposal, open: owed, key });
197
+ return;
198
+ }
199
+ if (!(await apply(proposal, key)))
200
+ return;
201
+ }
202
+ };
203
+ /*
204
+ * THE KEYBOARD OUTLIVES THE PROPOSAL IT PRESSED. Applied, a proposal's
205
+ * button becomes a line saying it was done, and the element the keyboard
206
+ * was on left the document for <body>. It goes on to the next proposal
207
+ * still to press, else back to the words.
208
+ */
209
+ const panel = useRef(null);
210
+ const kept = useRef(null);
211
+ useLayoutEffect(() => {
212
+ const was = kept.current;
213
+ if (!was || was.isConnected || document.activeElement !== document.body)
214
+ return;
215
+ kept.current = null;
216
+ const next = panel.current?.querySelector(`[data-testid="${testId}-apply"]:not([disabled])`) ??
217
+ panel.current?.querySelector(`[data-testid="${testId}-draft"]`);
218
+ next?.focus();
219
+ });
220
+ const offerOne = (turnIndex, at, proposal, key) => {
221
+ /*
222
+ * WITHHELD, NOT OFFERED — the same rule as the strip. The responder
223
+ * proposes from the graph and knows nothing of the policy, so the seat
224
+ * was handed "Add an item" with an apply button and refused on press.
225
+ * The store's own verdict, asked as the person at the keyboard, decides
226
+ * whether a proposal is a press or a struck line with the policy's
227
+ * reason beside it.
228
+ */
229
+ const verdict = store.permits({ name: proposal.mutation, args: { ...proposal.args } }, seatAs);
230
+ if (!verdict.ok) {
231
+ return (_jsxs("span", { "data-testid": `${testId}-withheld`, style: { fontSize: "0.8125rem", color: "var(--graview-ink-muted)" }, children: [_jsx("s", { children: describeProposal(store, proposal) }), " \u2014 ", verdict.refusal.message] }));
232
+ }
233
+ // The same question asked of the ACT rather than of the policy: has the responder said what this needs?
234
+ const owed = stillNeeded(store, proposal);
235
+ /*
236
+ * WAITING, NOT MISSING. A thing named by an earlier proposal in this
237
+ * same reply — the plot it stakes out — is an answer that has not
238
+ * landed yet, so the press waits for that one rather than asking again.
239
+ */
240
+ const before = (conversation.turns[turnIndex]?.proposals ?? [])
241
+ .slice(0, at)
242
+ .filter((_, was) => outcomes.get(proposalKey(turnIndex, was))?.state !== "applied")
243
+ .find((earlier) => owed.some((one) => one.kinds && typeof proposal.args[one.name] === "string" && earlier.args["label"] === proposal.args[one.name]));
244
+ return (_jsxs("button", { type: "button", "data-testid": `${testId}-apply`, "data-graview-asks": owed.length > 0 ? owed.length : undefined, disabled: before !== undefined, onClick: () => (owed.length > 0 ? setAnswering({ proposal, open: owed, key }) : void apply(proposal, key)), title: before
245
+ ? `After “${describeProposal(store, before)}”`
246
+ : owed.length > 0
247
+ ? `${proposal.why ?? "Apply this change"} — needs ${owed.map((one) => one.name).join(", ")}`
248
+ : (proposal.why ?? "Apply this change"), style: { fontSize: "0.8125rem", textAlign: "start" }, children: [describeProposal(store, proposal), owed.length > 0 && !before ? " …" : ""] }));
249
+ };
250
+ return (_jsxs("div", { ref: anchor, style: inside
251
+ ? /*
252
+ * ONE LAYER FEWER IN THE RAIL. The wrapper exists to anchor a
253
+ * panel that hangs off a pill; in the rail there is no pill and
254
+ * nothing hangs, and a second box between the column and the
255
+ * conversation is a second chance for the two to disagree about
256
+ * how tall it is. It passes its own row straight through.
257
+ */
258
+ { display: "grid", gridTemplateRows: "min-content", gridTemplateColumns: "minmax(0, 1fr)", minWidth: 0, minHeight: "min-content" }
259
+ : { position: "relative" }, children: [inside ? null : (_jsxs("button", { type: "button", "data-testid": testId, "aria-expanded": open, onClick: () => setOpen((current) => !current), title: "Talk to the seat: ask about anything here, or say a change in words", style: { display: "inline-flex", alignItems: "center", gap: 6, fontSize: "0.875rem" }, children: [_jsx("span", { "aria-hidden": "true", children: "\u25C6" }), "Ask"] })), open ? (_jsxs("div", { ref: panel, onFocus: (event) => {
260
+ kept.current = event.target;
261
+ }, "data-testid": `${testId}-panel`, ...(inside ? {} : { "data-graview-offstage": "", "data-graview-overlay": "" }), "data-graview-anchor": inside ? "rail" : "bar", style: {
262
+ ...(inside
263
+ ? {
264
+ position: "static",
265
+ width: "auto",
266
+ /*
267
+ * SIZED BY WHAT IS IN IT, in the rail. The log carries its
268
+ * own floor and ceiling, scrolling; everything else is as
269
+ * tall as it needs to be, and the rail's own column
270
+ * scrolls. A fixed box painted the field and the chips
271
+ * over the relation key below.
272
+ */
273
+ gridTemplateRows: "auto auto auto auto",
274
+ minHeight: "min-content",
275
+ }
276
+ : {
277
+ position: "absolute",
278
+ top: "calc(100% + 6px)",
279
+ right: 0,
280
+ zIndex: 30,
281
+ width: 320,
282
+ borderRadius: 10,
283
+ border: "1px solid var(--graview-edge)",
284
+ background: "var(--graview-float)",
285
+ boxShadow: "var(--graview-lift-high)",
286
+ }),
287
+ display: "grid",
288
+ /*
289
+ * ONE COLUMN THAT TAKES THE PANE'S WIDTH, no more. A grid column
290
+ * sizes to its content by default, and an input's own idea of
291
+ * its width is about 180px: in a pane the rail's share of a
292
+ * 1000px scene made 220px wide, the conversation ran fifty
293
+ * pixels past the edge and was clipped mid-word.
294
+ */
295
+ gridTemplateColumns: "minmax(0, 1fr)",
296
+ minWidth: 0,
297
+ ...(inside ? {} : { gridTemplateRows: "auto 1fr auto" }),
298
+ /*
299
+ * CLIPPED, EVEN IN THE RAIL: across engines, a squeezed box
300
+ * painting its field over the section below is the ugly
301
+ * failure; clipped, the worst case is a section that scrolls in
302
+ * a rail that already scrolls.
303
+ */
304
+ overflow: "hidden",
305
+ }, children: [inside ? null : (_jsx(SeatHeader, { label: "Seat", testId: testId, source: respond ? "app-provided" : describeSource(describeIntelligence(config), warmth), ...(warmth?.state === "failed" && warmth.detail ? { sourceTitle: warmth.detail } : {}) })), settings && !respond ? (_jsx(SeatSettings, { testId: testId, onDone: () => setSettings(false) })) : (_jsx(SeatThread, { turns: conversation.turns, outcomes: outcomes, busy: conversation.busy, testId: testId, minHeight: inside ? 0 : 120, empty: inside ? null : (_jsxs(_Fragment, { children: ["Ask what's wrong, ask about anything by name, or say a change in its own words.", selection.length > 0 ? " “This” means what you have selected." : ""] })), renderProposal: (proposal, { key, turn, at }) => offerOne(turn, at, proposal, key), ready: (proposal) => permitted(proposal), onApplyAll: (turn, proposals) => void applyAll(turn, proposals), ...(respond || config.source !== "graph" ? {} : { onChooseModel: () => setSettings(true) }), renderAfter: (turn, index) => [
306
+ /*
307
+ * WHAT THE WORDS FOUND, each a press that goes there — the
308
+ * Find box's strip, answered in the thread.
309
+ */
310
+ ...(turn.picks?.length
311
+ ? [
312
+ _jsx("div", { "data-testid": `${testId}-picks`, style: { display: "flex", flexWrap: "wrap", gap: 4, justifySelf: "start" }, children: turn.picks.map((hit) => (_jsx("button", { type: "button", "data-testid": `${testId}-pick`, "data-chat-pick": hit.id, title: hit.why.field === "label" ? `Go to ${hit.label}` : `${hit.why.reading}: ${hit.why.fragment}`, onClick: () => onPick ? onPick(hit.id) : setView((stop) => withSelection(withFocus(withOverview(stop, false), hit.id), [hit.id])), style: { fontSize: "0.8125rem", minHeight: 28 }, children: hit.label }, hit.id))) }, `${index}:picks`),
313
+ ]
314
+ : []),
315
+ ...(turn.questions ?? []).map((asked) => {
316
+ const key = `${index}:q:${asked.id}`;
317
+ const outcome = outcomes.get(key);
318
+ /*
319
+ * A QUESTION STANDS AT ITS NODE. The seat was not sure
320
+ * enough to propose — a split, or a shrug — so it asks,
321
+ * naming the node, with each option as a press that lands
322
+ * through the same path a proposal does.
323
+ */
324
+ return (_jsxs("div", { "data-testid": `${testId}-question`, "data-chat-question-node": asked.nodeId, style: { display: "grid", gap: 4, justifySelf: "start", maxWidth: 260 }, children: [_jsxs("span", { style: { fontSize: "0.8125rem", color: "var(--graview-ink-muted)" }, children: [asked.nodeLabel ? _jsxs("strong", { children: [asked.nodeLabel, ": "] }) : null, asked.asks, asked.because === "split" ? " (it could be either)" : " (it was not sure)"] }), _jsx("div", { style: { display: "flex", flexWrap: "wrap", gap: 4 }, children: asked.options.map((option) => (_jsxs("button", { type: "button", "data-testid": `${testId}-option`, disabled: !option.call, title: option.call ? option.call.why ?? "Take this answer" : "Nothing to do for this answer", onClick: () => (option.call ? void apply(option.call, key) : undefined), style: { fontSize: "0.8125rem" }, children: [option.value, " ", Math.round(option.probability * 100), "%"] }, option.value))) }), outcome ? _jsx(Settled, { outcome: outcome, testId: testId }) : null] }, asked.id));
325
+ }),
326
+ ] })), answering ? (_jsx("div", { "data-testid": `${testId}-asking`, style: { padding: "0 8px 6px" }, children: _jsx(AnswerArgs, { affordance: {
327
+ id: `chat:${answering.proposal.mutation}`,
328
+ mutation: answering.proposal.mutation,
329
+ label: describeProposal(store, answering.proposal),
330
+ // What it is, honestly: a responder's suggestion.
331
+ provider: "llm",
332
+ why: answering.proposal.why ?? "The seat suggested this.",
333
+ nodeIds: [],
334
+ args: answering.proposal.args,
335
+ open: answering.open,
336
+ score: 0,
337
+ }, onApply: (args) => {
338
+ const proposal = { ...answering.proposal, args: { ...answering.proposal.args, ...args } };
339
+ setAnswering(null);
340
+ void apply(proposal, answering.key);
341
+ }, onCancel: () => setAnswering(null) }) })) : null, (offer ?? []).length > 0 && conversation.turns.length === 0 ? (_jsx("div", { "data-testid": `${testId}-offers`, style: { display: "flex", flexWrap: "wrap", gap: 4, padding: "0 8px 6px" }, children: (offer ?? []).slice(0, 3).map((question) => (_jsx("button", { type: "button", "data-testid": `${testId}-offer`, disabled: conversation.busy, onClick: () => void conversation.send(question), style: { font: "inherit", fontSize: "0.75rem", minHeight: 24, padding: "0 8px", borderRadius: 999 }, children: question }, question))) })) : null, _jsx(SeatComposer, { busy: conversation.busy, placeholder: inside && selection.length > 0 ? "Ask about this…" : "Ask, or say a change…", ariaLabel: "Message the seat", testId: testId, onSend: (text) => void conversation.send(text) }), inside ? (_jsx(SeatHeader, { foot: true, label: "Seat", testId: testId, source: respond ? "app-provided" : describeSource(describeIntelligence(config), warmth), ...(warmth?.state === "failed" && warmth.detail ? { sourceTitle: warmth.detail } : {}), ...(!respond ? { settings, onSettings: () => setSettings((was) => !was) } : {}) })) : null] })) : null] }));
342
+ }
343
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../src/chat.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { type AnySchema } from "@graview/core";
2
+ import { ChatPanel } from "./chat.js";
3
+ /**
4
+ * THE SEAT IS A COMPANION ATTACHED TO THE VIEWFRAME.
5
+ *
6
+ * The scene used to say the current subject four times over: the inspector
7
+ * listed its acts (and was the context menu at the pointer), the quick
8
+ * relations offered its relations, the relation key named the lines, and a
9
+ * robot figure walked the ground with the chat panel anchored beside it as
10
+ * a bubble. Four panels, one subject — and the figure had no place at all
11
+ * inside a full-screen lens, where there is no ground to walk on.
12
+ *
13
+ * One construct instead, on the left, where the scene already reserves a
14
+ * rail: a subject header, the acts, the relations, the conversation, and
15
+ * the key at the foot. It is fixed to the frame, so it is the same at
16
+ * altitude, on the ground, flying closer and inside a lens. Right-click
17
+ * still opens the acts at the pointer — the same pane, from the same
18
+ * derivation — so the context menu and the assistant are one thing.
19
+ */
20
+ /** What the companion is about, and how it came to be about it. */
21
+ export interface Subject {
22
+ readonly id: string | null;
23
+ readonly name: string;
24
+ /** Chosen, pointed at, or simply where you are. */
25
+ readonly because: "selection" | "hover" | "place";
26
+ }
27
+ /**
28
+ * WHAT "THIS" MEANS, without a gesture to turn it on.
29
+ *
30
+ * The selection when there is one — something chosen outranks something
31
+ * glanced at. Otherwise what the pointer has settled on. Otherwise where
32
+ * you are: the focused place, district or record, or the whole thing.
33
+ */
34
+ export declare function useSubject<S extends AnySchema>(): Subject;
35
+ /**
36
+ * The key a card answers with its acts. A letter, and only on the card that
37
+ * has the keyboard — a character key bound to focus is not one a voice
38
+ * user's dictation sets off by accident (WCAG 2.1.4).
39
+ */
40
+ export declare const ACTS_KEY = "A";
41
+ export interface CompanionProps<S extends AnySchema> {
42
+ /** How the seat answers; passed through to the conversation. */
43
+ readonly respond?: Parameters<typeof ChatPanel<S>>[0]["respond"];
44
+ readonly onCall?: Parameters<typeof ChatPanel<S>>[0]["onCall"];
45
+ /** Where a pick in the conversation goes; the scene's own travel when unsaid. */
46
+ readonly onPick?: Parameters<typeof ChatPanel<S>>[0]["onPick"];
47
+ /** Whether a conversation is offered at all. An app with no seat still gets the acts and the relations. */
48
+ readonly chat?: boolean;
49
+ /**
50
+ * Already given a box of its own — a drawer on the routed face — rather
51
+ * than floating over a picture. Framed, it fills what it was given,
52
+ * stays open, and never collapses itself for want of room: the host
53
+ * decided how much room there is before it mounted.
54
+ */
55
+ readonly framed?: boolean;
56
+ }
57
+ export declare function Companion<S extends AnySchema>({ respond, onCall, onPick, chat, framed }?: CompanionProps<S>): import("react").JSX.Element;
58
+ //# sourceMappingURL=companion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"companion.d.ts","sourceRoot":"","sources":["../src/companion.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAKnE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAKtC;;;;;;;;;;;;;;;;GAgBG;AAEH,mEAAmE;AACnE,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC;CACnD;AAyBD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,SAAS,KAAK,OAAO,CA0GzD;AAED;;;;GAIG;AACH,eAAO,MAAM,QAAQ,MAAM,CAAC;AAkB5B,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,SAAS;IACjD,gEAAgE;IAChE,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACjE,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/D,iFAAiF;IACjF,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/D,2GAA2G;IAC3G,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAW,EAAE,MAAc,EAAE,GAAE,cAAc,CAAC,CAAC,CAAM,+BAga9H"}