@graview/primitives 0.1.30 → 0.1.33
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.
- package/dist/app-bar.d.ts +2 -0
- package/dist/app-bar.d.ts.map +1 -1
- package/dist/app-bar.js +9 -2
- package/dist/app-bar.js.map +1 -1
- package/dist/chat.d.ts +8 -6
- package/dist/chat.d.ts.map +1 -1
- package/dist/chat.js +6 -3
- package/dist/chat.js.map +1 -1
- package/dist/default-views.d.ts.map +1 -1
- package/dist/default-views.js +24 -4
- package/dist/default-views.js.map +1 -1
- package/dist/draft-frame.d.ts.map +1 -1
- package/dist/draft-frame.js +29 -2
- package/dist/draft-frame.js.map +1 -1
- package/dist/editable.d.ts.map +1 -1
- package/dist/editable.js +42 -9
- package/dist/editable.js.map +1 -1
- package/dist/find.d.ts.map +1 -1
- package/dist/find.js +7 -6
- package/dist/find.js.map +1 -1
- package/dist/first-look-door.d.ts +2 -2
- package/dist/first-look-door.js +2 -2
- package/dist/first-look.d.ts.map +1 -1
- package/dist/first-look.js +7 -4
- package/dist/first-look.js.map +1 -1
- package/dist/frame.d.ts +1 -0
- package/dist/frame.d.ts.map +1 -1
- package/dist/frame.js +2 -0
- package/dist/frame.js.map +1 -1
- package/dist/index.d.ts +13 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -2
- package/dist/index.js.map +1 -1
- package/dist/inline-ai-door.d.ts +15 -0
- package/dist/inline-ai-door.d.ts.map +1 -0
- package/dist/inline-ai-door.js +54 -0
- package/dist/inline-ai-door.js.map +1 -0
- package/dist/inline-ai-env.d.ts +29 -0
- package/dist/inline-ai-env.d.ts.map +1 -0
- package/dist/inline-ai-env.js +22 -0
- package/dist/inline-ai-env.js.map +1 -0
- package/dist/inline-ai-menu.d.ts +58 -0
- package/dist/inline-ai-menu.d.ts.map +1 -0
- package/dist/inline-ai-menu.js +297 -0
- package/dist/inline-ai-menu.js.map +1 -0
- package/dist/lens/calendar-dates.d.ts.map +1 -1
- package/dist/lens/calendar-dates.js +12 -0
- package/dist/lens/calendar-dates.js.map +1 -1
- package/dist/lens/calendar-options.d.ts +1 -1
- package/dist/lens-keeping.js +2 -3
- package/dist/lens-keeping.js.map +1 -1
- package/dist/map-panel.js +51 -2
- package/dist/map-panel.js.map +1 -1
- package/dist/notice-place.d.ts +2 -2
- package/dist/notice-place.js +2 -2
- package/dist/notify-door.d.ts +57 -0
- package/dist/notify-door.d.ts.map +1 -0
- package/dist/notify-door.js +136 -0
- package/dist/notify-door.js.map +1 -0
- package/dist/notify-sheet.d.ts +27 -0
- package/dist/notify-sheet.d.ts.map +1 -0
- package/dist/notify-sheet.js +102 -0
- package/dist/notify-sheet.js.map +1 -0
- package/dist/pages.d.ts +15 -4
- package/dist/pages.d.ts.map +1 -1
- package/dist/pages.js +15 -4
- package/dist/pages.js.map +1 -1
- package/dist/primitives/measure.d.ts +10 -0
- package/dist/primitives/measure.d.ts.map +1 -1
- package/dist/primitives/measure.js +27 -7
- package/dist/primitives/measure.js.map +1 -1
- package/dist/quick-ask-desk.d.ts +38 -0
- package/dist/quick-ask-desk.d.ts.map +1 -0
- package/dist/quick-ask-desk.js +36 -0
- package/dist/quick-ask-desk.js.map +1 -0
- package/dist/quick-ask-door.d.ts +33 -0
- package/dist/quick-ask-door.d.ts.map +1 -0
- package/dist/quick-ask-door.js +70 -0
- package/dist/quick-ask-door.js.map +1 -0
- package/dist/quick-ask-setting.d.ts +9 -0
- package/dist/quick-ask-setting.d.ts.map +1 -0
- package/dist/quick-ask-setting.js +11 -0
- package/dist/quick-ask-setting.js.map +1 -0
- package/dist/quick-ask.d.ts +23 -0
- package/dist/quick-ask.d.ts.map +1 -0
- package/dist/quick-ask.js +327 -0
- package/dist/quick-ask.js.map +1 -0
- package/dist/record-interactions-door.d.ts +8 -0
- package/dist/record-interactions-door.d.ts.map +1 -0
- package/dist/record-interactions-door.js +42 -0
- package/dist/record-interactions-door.js.map +1 -0
- package/dist/record-interactions.d.ts +13 -0
- package/dist/record-interactions.d.ts.map +1 -0
- package/dist/record-interactions.js +9 -0
- package/dist/record-interactions.js.map +1 -0
- package/dist/scene-css.d.ts.map +1 -1
- package/dist/scene-css.js +47 -13
- package/dist/scene-css.js.map +1 -1
- package/dist/scene.d.ts +9 -2
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +8 -1
- package/dist/scene.js.map +1 -1
- package/dist/shell.d.ts +14 -25
- package/dist/shell.d.ts.map +1 -1
- package/dist/shell.js +5 -3
- package/dist/shell.js.map +1 -1
- package/dist/spec-views.d.ts.map +1 -1
- package/dist/spec-views.js +6 -3
- package/dist/spec-views.js.map +1 -1
- package/dist/stretched-link.d.ts +18 -0
- package/dist/stretched-link.d.ts.map +1 -0
- package/dist/stretched-link.js +47 -0
- package/dist/stretched-link.js.map +1 -0
- package/dist/timeline.d.ts.map +1 -1
- package/dist/timeline.js +23 -2
- package/dist/timeline.js.map +1 -1
- package/dist/when-input-door.d.ts +8 -0
- package/dist/when-input-door.d.ts.map +1 -0
- package/dist/when-input-door.js +19 -0
- package/dist/when-input-door.js.map +1 -0
- package/dist/when-input.d.ts +34 -0
- package/dist/when-input.d.ts.map +1 -0
- package/dist/when-input.js +122 -0
- package/dist/when-input.js.map +1 -0
- package/dist/when-picker-door.d.ts +6 -0
- package/dist/when-picker-door.d.ts.map +1 -0
- package/dist/when-picker-door.js +15 -0
- package/dist/when-picker-door.js.map +1 -0
- package/dist/when-picker.d.ts +16 -0
- package/dist/when-picker.d.ts.map +1 -0
- package/dist/when-picker.js +108 -0
- package/dist/when-picker.js.map +1 -0
- package/dist/workbench/activity.d.ts +4 -0
- package/dist/workbench/activity.d.ts.map +1 -1
- package/dist/workbench/activity.js +41 -12
- package/dist/workbench/activity.js.map +1 -1
- package/dist/workbench/agent-seat.d.ts.map +1 -1
- package/dist/workbench/agent-seat.js +5 -2
- package/dist/workbench/agent-seat.js.map +1 -1
- package/dist/workbench/ai-entries.d.ts +22 -0
- package/dist/workbench/ai-entries.d.ts.map +1 -0
- package/dist/workbench/ai-entries.js +75 -0
- package/dist/workbench/ai-entries.js.map +1 -0
- package/dist/workbench/ai-feed.d.ts +12 -0
- package/dist/workbench/ai-feed.d.ts.map +1 -0
- package/dist/workbench/ai-feed.js +14 -0
- package/dist/workbench/ai-feed.js.map +1 -0
- package/dist/workbench/answer-args.d.ts.map +1 -1
- package/dist/workbench/answer-args.js +23 -5
- package/dist/workbench/answer-args.js.map +1 -1
- package/dist/workbench/inspector.js +1 -1
- package/dist/workbench/inspector.js.map +1 -1
- package/package.json +6 -6
- package/dist/seat-field.d.ts +0 -58
- package/dist/seat-field.d.ts.map +0 -1
- package/dist/seat-field.js +0 -185
- package/dist/seat-field.js.map +0 -1
- package/dist/seat-panel.d.ts +0 -38
- package/dist/seat-panel.d.ts.map +0 -1
- package/dist/seat-panel.js +0 -212
- package/dist/seat-panel.js.map +0 -1
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { layer } from "@graview/core";
|
|
3
|
+
import { aiTargetOf, catalogOf } from "@graview/core/catalog";
|
|
4
|
+
import { useAiDeskState, useGraview, useLiveStore } from "@graview/react/provider";
|
|
5
|
+
import { deriveAffordances } from "@graview/tools/derive";
|
|
6
|
+
import { acceptedEntry, acceptGhost, dismissedEntry, fillHere, ghostOf, interactionId, panelHere, proposalOf, recordHere, suggestHere, thinkingOf } from "@graview/tools/inline-ai";
|
|
7
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
8
|
+
import { useInlineEnv } from "./inline-ai-env.js";
|
|
9
|
+
import { openQuickAsk } from "./quick-ask-desk.js";
|
|
10
|
+
import "./frame.js"; // A door: tied to what the page drew first (TIED DOORS, packages/primitives/src/frame.ts).
|
|
11
|
+
/**
|
|
12
|
+
* THE INLINE AI, AS THE FACES DRAW IT (Roadmap f-ai-candidate-catalog) —
|
|
13
|
+
* fetched with the first menu that shows it (`inline-ai-door.tsx`).
|
|
14
|
+
*
|
|
15
|
+
* In the context menu, on what it was opened on: the Fast model's few
|
|
16
|
+
* suggestions, picked from the catalog (a value to fill, an act that asks
|
|
17
|
+
* nothing, a panel, a place, a record), each taken with one press; "Fill
|
|
18
|
+
* in" for a record whose fields the catalog has values for; "Draw a panel"
|
|
19
|
+
* for whatever has a kind. A proposed change is a ghost, waiting on the
|
|
20
|
+
* tray (`GhostTray`) for Accept, Accept some or Dismiss, and then for its
|
|
21
|
+
* one undo; a panel is drawn where the seat draws a view, where "Keep as a
|
|
22
|
+
* lens" makes it a real one. Every interaction the person takes up is an
|
|
23
|
+
* entry Activity draws (`aiDesk.record`), and its host keeps.
|
|
24
|
+
*
|
|
25
|
+
* The runner (`inlineEnv`, `askInline`, `takeOffer`, `drawPanel`,
|
|
26
|
+
* `askAgain`) takes plain values, not hooks, so Activity's "Ask again" and
|
|
27
|
+
* "Show the panel" and the quick ask's card (`quick-ask.tsx`) reach the
|
|
28
|
+
* same code. "Ask about this…" opens the quick ask's bar on the target.
|
|
29
|
+
*/
|
|
30
|
+
/** One ask of the inline AI, as the engine takes it: the acts the derivation offers this viewer there, the places, where they are. */
|
|
31
|
+
export function askOf(env, target, said) {
|
|
32
|
+
const about = target.on === "selection" ? target.ids : target.on === "record" || target.on === "field" ? [target.id] : [];
|
|
33
|
+
const acts = about.length > 0
|
|
34
|
+
? deriveAffordances(env.store, about, { principal: env.principal, ...(about.length === 1 ? { focus: about[0] } : {}) }).affordances.map((affordance) => ({
|
|
35
|
+
mutation: affordance.mutation,
|
|
36
|
+
label: affordance.label,
|
|
37
|
+
args: affordance.args,
|
|
38
|
+
open: affordance.open,
|
|
39
|
+
why: affordance.why,
|
|
40
|
+
...(affordance.destructive ? { destructive: true } : {}),
|
|
41
|
+
}))
|
|
42
|
+
: undefined;
|
|
43
|
+
return {
|
|
44
|
+
store: env.store,
|
|
45
|
+
target,
|
|
46
|
+
principal: env.principal,
|
|
47
|
+
interaction: interactionId(),
|
|
48
|
+
places: env.places,
|
|
49
|
+
selection: env.selection,
|
|
50
|
+
...(acts ? { acts } : {}),
|
|
51
|
+
...(env.place ? { place: env.place } : {}),
|
|
52
|
+
...(said ? { said } : {}),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/** DRAWN WHERE THE SEAT DRAWS A VIEW, from its recipe: "Keep as a lens" there makes it a real lens. Answers a sentence when it cannot be drawn. */
|
|
56
|
+
export async function drawPanel(env, panel) {
|
|
57
|
+
const engine = await import("@graview/tools/draft");
|
|
58
|
+
const drafted = engine.recipeDraft(panel.recipe, { app: env.app, sight: engine.draftSight(env.app, env.principal) });
|
|
59
|
+
if (engine.isDraftFailure(drafted))
|
|
60
|
+
return drafted.failed;
|
|
61
|
+
env.seatTalk.setDraft(drafted, null);
|
|
62
|
+
env.goTo.draft?.();
|
|
63
|
+
keyboardToTheDraft();
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
/*
|
|
67
|
+
* THE KEYBOARD GOES TO THE PANEL. The menu row that asked for it is gone,
|
|
68
|
+
* and over the scene the panel stands in place of the picture, which is
|
|
69
|
+
* made inert under it: a keyboard left behind would land on <body>. Once
|
|
70
|
+
* the frame is drawn — fetched, the first time, so for up to three seconds
|
|
71
|
+
* of frames — "Keep as a lens" takes it, unless the reader has already put
|
|
72
|
+
* the keyboard somewhere of their own.
|
|
73
|
+
*/
|
|
74
|
+
function keyboardToTheDraft(tries = 180) {
|
|
75
|
+
if (typeof document === "undefined")
|
|
76
|
+
return;
|
|
77
|
+
const keep = document.querySelector('[data-testid="draft-keep"]');
|
|
78
|
+
const active = document.activeElement;
|
|
79
|
+
const nowhere = !active || active === document.body || active.closest?.("[inert]") !== null;
|
|
80
|
+
if (keep) {
|
|
81
|
+
if (nowhere)
|
|
82
|
+
keep.focus();
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (tries > 0)
|
|
86
|
+
requestAnimationFrame(() => keyboardToTheDraft(tries - 1));
|
|
87
|
+
}
|
|
88
|
+
/** A ghost of these proposals, waiting on the tray, its entry kept. */
|
|
89
|
+
function holdGhost(env, entry, result) {
|
|
90
|
+
if (!result.ghost || result.ghost.proposals.length === 0)
|
|
91
|
+
return;
|
|
92
|
+
env.desk.setGhost({ ghost: result.ghost });
|
|
93
|
+
env.desk.record(entry);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* ASK THE INLINE AI: a suggestion (answered, not yet kept — the menu shows
|
|
97
|
+
* it), fills (a ghost on the tray, its entry kept), or a panel (drawn, its
|
|
98
|
+
* entry kept). A failure is kept too, said in its entry.
|
|
99
|
+
*/
|
|
100
|
+
export async function askInline(env, kind, target, said) {
|
|
101
|
+
const ask = askOf(env, target, said);
|
|
102
|
+
const result = kind === "suggest" ? await suggestHere(env.ai, ask) : kind === "fill" ? await fillHere(env.ai, ask) : kind === "record" ? await recordHere(env.ai, ask) : await panelHere(env.ai, ask);
|
|
103
|
+
if (result.interaction.outcome === "failed") {
|
|
104
|
+
if (kind !== "suggest")
|
|
105
|
+
env.desk.record(result.interaction);
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
if (kind === "fill" || kind === "record") {
|
|
109
|
+
if (result.ghost)
|
|
110
|
+
holdGhost(env, result.interaction, result);
|
|
111
|
+
else
|
|
112
|
+
env.desk.record({ ...result.interaction, outcome: "failed", failed: "Nothing here could be filled in." });
|
|
113
|
+
}
|
|
114
|
+
if (kind === "panel" && result.panel) {
|
|
115
|
+
const failed = await drawPanel(env, result.panel);
|
|
116
|
+
env.desk.record(failed ? { ...result.interaction, outcome: "failed", failed } : result.interaction);
|
|
117
|
+
}
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
/** TAKE ONE OF A SUGGESTION'S OFFERS: a change waits as a ghost; a panel is drawn; a place or a record is gone to. Its entry is kept. */
|
|
121
|
+
export async function takeOffer(env, result, offer) {
|
|
122
|
+
const entry = result.interaction;
|
|
123
|
+
const proposal = proposalOf(offer);
|
|
124
|
+
if (proposal) {
|
|
125
|
+
const model = entry.usage?.at(-1)?.model;
|
|
126
|
+
const confidence = entry.offered.find((one) => one.id === offer.id)?.confidence;
|
|
127
|
+
const ghost = ghostOf(env.store, { interaction: entry.id, target: entry.target, basis: `${entry.ask.said}: ${offer.label}`, ...(model ? { model } : {}), proposals: [{ ...proposal, ...(confidence !== undefined ? { confidence } : {}) }] }, env.principal);
|
|
128
|
+
if (ghost.proposals.length === 0) {
|
|
129
|
+
env.desk.record({ ...entry, outcome: "failed", failed: "That can't be done now." });
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
env.desk.setGhost({ ghost });
|
|
133
|
+
env.desk.record(entry);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
if (offer.type === "panel") {
|
|
137
|
+
const title = offer.label;
|
|
138
|
+
const panel = { title, recipe: { ...offer.panel, title } };
|
|
139
|
+
const failed = await drawPanel(env, panel);
|
|
140
|
+
env.desk.record(failed ? { ...entry, outcome: "failed", failed } : { ...entry, outcome: "drawn", accepted: [offer.id], panel });
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (offer.type === "place")
|
|
144
|
+
env.goTo.place(offer.place);
|
|
145
|
+
else if (offer.type === "record")
|
|
146
|
+
env.goTo.record(offer.record);
|
|
147
|
+
env.desk.record({ ...entry, outcome: "accepted", accepted: [offer.id] });
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* ASK AGAIN, from an entry in Activity: the same ask, on the same target, as
|
|
151
|
+
* a new interaction. A suggestion asked again is a fill; words asked of the
|
|
152
|
+
* quick ask are asked again on its card, beside the target.
|
|
153
|
+
*/
|
|
154
|
+
export async function askAgain(env, entry) {
|
|
155
|
+
if (entry.ask.kind === "ask") {
|
|
156
|
+
openQuickAsk(env.desk, { target: entry.target, asked: entry.ask.said });
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
const kind = entry.ask.kind === "panel" || entry.ask.kind === "record" ? entry.ask.kind : "fill";
|
|
160
|
+
return askInline(env, kind, entry.target, entry.ask.said);
|
|
161
|
+
}
|
|
162
|
+
const ROW = { padding: "5px 10px", fontSize: "0.875rem", borderRadius: 8, width: "100%", textAlign: "left", borderWidth: 1, borderStyle: "solid", borderColor: "transparent", background: "none", boxShadow: "none" };
|
|
163
|
+
const QUIET = { margin: 0, padding: "4px 10px", fontSize: "0.8125rem", color: "var(--graview-ink-muted)" };
|
|
164
|
+
/** The menu's AI section: the suggestions as they arrive, then the asks this target supports. */
|
|
165
|
+
export function InlineAiMenu({ target: menu, close }) {
|
|
166
|
+
const env = useInlineEnv();
|
|
167
|
+
const target = useMemo(() => aiTargetOf(menu, (id) => env.store.graph.has(id)), [menu, env.store]);
|
|
168
|
+
// What the target supports at all, read once: a fill only where there are values, a panel only where there is a kind.
|
|
169
|
+
const catalog = useMemo(() => {
|
|
170
|
+
const ask = askOf(env, target);
|
|
171
|
+
return catalogOf(env.store, target, { principal: env.principal, places: env.places, ...(ask.acts ? { acts: ask.acts } : {}) });
|
|
172
|
+
}, [env, target]);
|
|
173
|
+
const fills = catalog.candidates.some((candidate) => candidate.type === "fill");
|
|
174
|
+
const panels = catalog.candidates.some((candidate) => candidate.type === "panel");
|
|
175
|
+
// A record made by an act that asks for words, where a thinking model can write them.
|
|
176
|
+
const makes = useMemo(() => new Set(env.store.allMutations().filter((mutation) => (mutation.creates ?? []).length > 0).map((mutation) => mutation.name)), [env.store]);
|
|
177
|
+
const records = thinkingOf(env.ai) !== undefined && catalog.candidates.some((candidate) => candidate.type === "act" && candidate.asks.length > 0 && makes.has(candidate.mutation));
|
|
178
|
+
const [suggested, setSuggested] = useState(null);
|
|
179
|
+
const [busy, setBusy] = useState(true);
|
|
180
|
+
const [failed, setFailed] = useState(null);
|
|
181
|
+
useEffect(() => {
|
|
182
|
+
let live = true;
|
|
183
|
+
setBusy(true);
|
|
184
|
+
void askInline(env, "suggest", target).then((result) => {
|
|
185
|
+
if (!live)
|
|
186
|
+
return;
|
|
187
|
+
setSuggested(result);
|
|
188
|
+
setBusy(false);
|
|
189
|
+
if (result.interaction.outcome === "failed")
|
|
190
|
+
setFailed(result.interaction.failed ?? "The AI could not suggest anything here.");
|
|
191
|
+
});
|
|
192
|
+
return () => {
|
|
193
|
+
live = false;
|
|
194
|
+
};
|
|
195
|
+
// Asked once per target: the menu is drawn again as the graph moves, and the suggestion stands.
|
|
196
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
197
|
+
}, [target]);
|
|
198
|
+
const run = (work) => {
|
|
199
|
+
close();
|
|
200
|
+
void work();
|
|
201
|
+
};
|
|
202
|
+
return (_jsxs("div", { "data-testid": "inline-ai", style: { display: "grid", gap: 2 }, children: [busy ? (_jsx("p", { role: "status", "data-testid": "inline-ai-thinking", style: QUIET, children: "Thinking\u2026" })) : failed ? (_jsx("p", { role: "status", style: QUIET, children: failed })) : null, _jsxs("ul", { style: { margin: 0, padding: 0, listStyle: "none", display: "flex", flexDirection: "column", gap: 2 }, children: [(suggested?.offers ?? []).map((offer) => (_jsx("li", { children: _jsxs("button", { type: "button", "data-menu-item": `ai-offer:${offer.id}`, "data-ai-offer": offer.id, "data-ai-offer-type": offer.type, onClick: () => run(() => takeOffer(env, suggested, offer)), style: ROW, children: [offer.label, _jsxs("span", { style: { color: "var(--graview-ink-faint)" }, children: [" \u00B7 ", offer.type === "panel" ? "a panel" : offer.type === "place" ? "go there" : offer.type === "record" ? "open it" : "suggested"] })] }) }, offer.id))), fills ? (_jsx("li", { children: _jsx("button", { type: "button", "data-menu-item": "ai-fill", onClick: () => run(() => askInline(env, "fill", target, "Fill in")), style: ROW, children: "Fill in with AI" }) })) : null, records ? (_jsx("li", { children: _jsx("button", { type: "button", "data-menu-item": "ai-record", onClick: () => run(() => askInline(env, "record", target, "Add one")), style: ROW, children: "Add one with AI" }) })) : null, panels ? (_jsx("li", { children: _jsx("button", { type: "button", "data-menu-item": "ai-panel", onClick: () => run(() => askInline(env, "panel", target, "Draw a panel")), style: ROW, children: "Draw a panel" }) })) : null, _jsx("li", { children: _jsx("button", { type: "button", "data-menu-item": "ai-ask", onClick: () => {
|
|
203
|
+
const back = document.activeElement;
|
|
204
|
+
close();
|
|
205
|
+
openQuickAsk(env.desk, { target, returnTo: back instanceof HTMLElement && back !== document.body ? back : null });
|
|
206
|
+
}, style: ROW, children: "Ask about this\u2026" }) })] })] }));
|
|
207
|
+
}
|
|
208
|
+
const LINK = { display: "inline-flex", alignItems: "center", minHeight: 28, padding: "2px 10px", fontSize: "0.8125rem", borderRadius: 8 };
|
|
209
|
+
/**
|
|
210
|
+
* THE GHOST: changes the AI proposed and has not made, each in the act's
|
|
211
|
+
* own sentence and how sure the model was, with a box to keep it or leave
|
|
212
|
+
* it out. Accept takes the ones ticked as one batch; Dismiss puts it away;
|
|
213
|
+
* once taken, Undo takes the batch back.
|
|
214
|
+
*/
|
|
215
|
+
export function GhostTray({ placement = "picture" }) {
|
|
216
|
+
const { store: shown, principal, aiDesk } = useGraview();
|
|
217
|
+
const store = useLiveStore(shown, principal);
|
|
218
|
+
const { ghost: held, entries } = useAiDeskState(aiDesk);
|
|
219
|
+
const [off, setOff] = useState(new Set());
|
|
220
|
+
useEffect(() => setOff(new Set()), [held?.ghost.interaction]);
|
|
221
|
+
const tray = useRef(null);
|
|
222
|
+
const undoing = useRef(null);
|
|
223
|
+
/* Accepted, the keyboard goes to the way back: the buttons it pressed are gone. */
|
|
224
|
+
const batch = held?.batch;
|
|
225
|
+
useEffect(() => {
|
|
226
|
+
if (batch !== undefined)
|
|
227
|
+
undoing.current?.focus();
|
|
228
|
+
}, [batch]);
|
|
229
|
+
if (!held)
|
|
230
|
+
return null;
|
|
231
|
+
const { ghost } = held;
|
|
232
|
+
const entry = entries.find((one) => one.id === ghost.interaction);
|
|
233
|
+
/*
|
|
234
|
+
* PUT AWAY, THE KEYBOARD GOES BACK TO WHAT IT WAS ABOUT: the record's card
|
|
235
|
+
* or its page's heading, else the picture or the page — never <body>.
|
|
236
|
+
*/
|
|
237
|
+
const putAway = () => {
|
|
238
|
+
const id = ghost.target.on === "record" || ghost.target.on === "field" ? ghost.target.id : undefined;
|
|
239
|
+
const root = tray.current?.closest("[data-graview-face], main")?.parentElement ?? document;
|
|
240
|
+
const home = (id ? root.querySelector(`[data-graview-view="${CSS.escape(id)}"][tabindex]`) : null) ??
|
|
241
|
+
document.querySelector("[data-graview-page-title]") ??
|
|
242
|
+
tray.current?.closest("main") ??
|
|
243
|
+
document.querySelector("main");
|
|
244
|
+
if (home && !home.hasAttribute("tabindex"))
|
|
245
|
+
home.setAttribute("tabindex", "-1");
|
|
246
|
+
home?.focus({ preventScroll: true });
|
|
247
|
+
aiDesk.setGhost(null);
|
|
248
|
+
};
|
|
249
|
+
const chosen = ghost.proposals.filter((proposal) => !off.has(proposal.id)).map((proposal) => proposal.id);
|
|
250
|
+
const accept = () => {
|
|
251
|
+
const kept = acceptGhost(store, ghost, { author: principal, ids: chosen });
|
|
252
|
+
if (!kept.ok) {
|
|
253
|
+
aiDesk.setGhost({ ...held, refused: kept.refused });
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
if (entry)
|
|
257
|
+
aiDesk.record(acceptedEntry(entry, kept.accepted, kept.batch));
|
|
258
|
+
aiDesk.setGhost({ ghost, batch: kept.batch, took: kept.accepted.length, ...(held.onCard ? { onCard: true } : {}) });
|
|
259
|
+
};
|
|
260
|
+
const dismiss = () => {
|
|
261
|
+
if (entry && held.batch === undefined)
|
|
262
|
+
aiDesk.record(dismissedEntry(entry));
|
|
263
|
+
putAway();
|
|
264
|
+
};
|
|
265
|
+
const undo = () => {
|
|
266
|
+
if (held.batch === undefined)
|
|
267
|
+
return;
|
|
268
|
+
try {
|
|
269
|
+
store.undo(held.batch, { author: principal });
|
|
270
|
+
putAway();
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
aiDesk.setGhost({ ...held, refused: error instanceof Error ? error.message : String(error) });
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
return (_jsxs("section", { ref: tray, "data-testid": "ai-ghost", "data-interaction": ghost.interaction, "aria-label": "Proposed by AI", style: {
|
|
277
|
+
// Over the picture it stands in; on a page, over the window; on the quick ask's card, in its flow.
|
|
278
|
+
...(placement === "card"
|
|
279
|
+
? { position: "static" }
|
|
280
|
+
: { position: placement === "page" ? "fixed" : "absolute", insetInline: "max(12px, calc(50% - 220px))", bottom: "calc(var(--graview-foot-room, 0px) + 72px)", zIndex: layer("toast"), boxShadow: "var(--graview-lift-high)" }),
|
|
281
|
+
display: "grid",
|
|
282
|
+
gap: 8,
|
|
283
|
+
padding: 12,
|
|
284
|
+
borderRadius: 12,
|
|
285
|
+
border: "1px dashed var(--graview-accent)",
|
|
286
|
+
background: "var(--graview-float)",
|
|
287
|
+
fontSize: "0.875rem",
|
|
288
|
+
}, children: [_jsx("p", { style: { margin: 0, color: "var(--graview-ink-muted)" }, children: held.batch !== undefined ? `Done: ${held.took === 1 ? "one change" : `${held.took} changes`}, as one.` : `Proposed by AI · ${ghost.basis}` }), held.batch === undefined ? (_jsx("ul", { style: { margin: 0, padding: 0, listStyle: "none", display: "grid", gap: 4 }, children: ghost.proposals.map((proposal) => (_jsx("li", { "data-ghost-proposal": proposal.id, children: _jsxs("label", { style: { display: "flex", alignItems: "baseline", gap: 8, cursor: "pointer" }, children: [_jsx("input", { type: "checkbox", checked: !off.has(proposal.id), onChange: (event) => {
|
|
289
|
+
const next = new Set(off);
|
|
290
|
+
if (event.target.checked)
|
|
291
|
+
next.delete(proposal.id);
|
|
292
|
+
else
|
|
293
|
+
next.add(proposal.id);
|
|
294
|
+
setOff(next);
|
|
295
|
+
} }), _jsx("span", { style: { fontStyle: "italic", color: "var(--graview-ink)" }, children: proposal.said }), proposal.confidence !== undefined ? _jsxs("span", { style: { color: "var(--graview-ink-faint)" }, children: [Math.round(proposal.confidence * 100), "% sure"] }) : null] }) }, proposal.id))) })) : null, held.refused ? (_jsx("p", { role: "alert", style: { margin: 0, color: "var(--graview-warn)" }, children: held.refused })) : null, _jsx("div", { style: { display: "flex", flexWrap: "wrap", gap: 6 }, children: held.batch === undefined ? (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", "data-testid": "ghost-accept", disabled: chosen.length === 0, onClick: accept, style: LINK, children: chosen.length === ghost.proposals.length ? "Accept" : `Accept ${chosen.length} of ${ghost.proposals.length}` }), _jsx("button", { type: "button", "data-testid": "ghost-dismiss", onClick: dismiss, style: LINK, children: "Dismiss" })] })) : (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", ref: undoing, "data-testid": "ghost-undo", onClick: undo, style: LINK, children: "Undo" }), _jsx("button", { type: "button", "data-testid": "ghost-close", onClick: putAway, style: LINK, children: "Close" })] })) })] }));
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=inline-ai-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-ai-menu.js","sourceRoot":"","sources":["../src/inline-ai-menu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar-dates.d.ts","sourceRoot":"","sources":["../../src/lens/calendar-dates.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"calendar-dates.d.ts","sourceRoot":"","sources":["../../src/lens/calendar-dates.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,GAAG,WAAa,CAAC;AAU9B,uEAAuE;AACvE,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAKnD;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAKvD;AAGD,eAAO,MAAM,GAAG,GAAI,OAAO,MAAM,KAAG,MAAoD,CAAC;AAEzF,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ5D;AAED,8CAA8C;AAC9C,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,KAAG,MAAwC,CAAC;AAEjF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,SAAI,GAAG,MAAM,CAGjE;AAED,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,MAAiC,CAAC;AAE7E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,+CAA+C;AAC/C,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAE9D;AAQD,wDAAwD;AACxD,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,MAAuC,CAAC;AAEvF,+EAA+E;AAC/E,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,KAAG,MAAkD,CAAC;AAEzF,4DAA4D;AAC5D,eAAO,MAAM,KAAK,GAAI,SAAS,MAAM,KAAG,MAAgC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { minutesAsRead, weekdayAsRead, weekdayName } from "@graview/core";
|
|
2
|
+
import { namesInstant, wallOfStored } from "@graview/core/words";
|
|
2
3
|
/*
|
|
3
4
|
* DATE ARITHMETIC ON STRINGS, in UTC, and nowhere near a local `Date`.
|
|
4
5
|
*
|
|
@@ -8,10 +9,19 @@ import { minutesAsRead, weekdayAsRead, weekdayName } from "@graview/core";
|
|
|
8
9
|
* through `Date.UTC`, so the picture is the same in Auckland and in Lima.
|
|
9
10
|
*/
|
|
10
11
|
export const DAY = 86_400_000;
|
|
12
|
+
/*
|
|
13
|
+
* AN INSTANT IS ON THE READER'S CLOCK. A moment kept with its zone
|
|
14
|
+
* ("2026-10-17T19:00:00Z") is a meeting at 3 PM in New York: its day and
|
|
15
|
+
* time are where the reader is, not the day and hour of UTC, which put an
|
|
16
|
+
* evening's meeting on the next day (Roadmap f-date-inputs). This is the one
|
|
17
|
+
* place here a local clock is read, and only for such a moment.
|
|
18
|
+
*/
|
|
11
19
|
/** The ISO day a value names, or null when it names no date at all. */
|
|
12
20
|
export function dayOf(value) {
|
|
13
21
|
if (typeof value !== "string")
|
|
14
22
|
return null;
|
|
23
|
+
if (namesInstant(value))
|
|
24
|
+
return wallOfStored(value)?.day ?? null;
|
|
15
25
|
const match = /^(\d{4}-\d{2}-\d{2})/.exec(value);
|
|
16
26
|
return match ? match[1] : null;
|
|
17
27
|
}
|
|
@@ -19,6 +29,8 @@ export function dayOf(value) {
|
|
|
19
29
|
export function minutesOf(value) {
|
|
20
30
|
if (typeof value !== "string")
|
|
21
31
|
return null;
|
|
32
|
+
if (namesInstant(value))
|
|
33
|
+
return wallOfStored(value)?.minutes ?? null;
|
|
22
34
|
const match = /^\d{4}-\d{2}-\d{2}[T ](\d{2}):(\d{2})/.exec(value);
|
|
23
35
|
return match ? Number(match[1]) * 60 + Number(match[2]) : null;
|
|
24
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar-dates.js","sourceRoot":"","sources":["../../src/lens/calendar-dates.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"calendar-dates.js","sourceRoot":"","sources":["../../src/lens/calendar-dates.ts"],"names":[],"mappings":"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"}
|
|
@@ -78,7 +78,7 @@ export interface CalendarOptions {
|
|
|
78
78
|
* morning, and no harness could photograph it twice.
|
|
79
79
|
*
|
|
80
80
|
* Unsaid, the store's own day (`Store.today()`, the day its rules are
|
|
81
|
-
* judged on) — so a calendar kept from
|
|
81
|
+
* judged on) — so a calendar kept from a drawn panel, or declared without
|
|
82
82
|
* a day, opens on the same day the app's late and due-this-week mean —
|
|
83
83
|
* and only where the store names none, the reader's own.
|
|
84
84
|
*/
|
package/dist/lens-keeping.js
CHANGED
|
@@ -116,9 +116,8 @@ export function useLensKeeping(go) {
|
|
|
116
116
|
const kept = { edit, written };
|
|
117
117
|
seatTalk.setDraft(null);
|
|
118
118
|
seatTalk.setTurns((turns) => [...turns, { role: "seat", text: sentence, kept }]);
|
|
119
|
-
// Said
|
|
120
|
-
|
|
121
|
-
board?.notify({ kind: "toast", id: `kept:${title}`, sentence, timeout: 10_000, action: { label: "Take back", onSelect: () => void takeBack(kept) } });
|
|
119
|
+
// Said in a notice (FR-133) with its Take back, that goes when the way back on a face does, after `WAY_BACK_MS` (FR-152; the number, not the module, which would come with it); and in the conversation, where a product draws one.
|
|
120
|
+
board?.notify({ kind: "toast", id: `kept:${title}`, sentence, timeout: 10_000, action: { label: "Take back", onSelect: () => void takeBack(kept) } });
|
|
122
121
|
if (place)
|
|
123
122
|
go({ to: "picture", kind: place.kind, as: place.as, title, address: placePath(place.as, sharesItsName(place, places) ? kindPath(store.schema, place.kind).slice(1) : undefined), said: `Went to ${title}.` });
|
|
124
123
|
};
|
package/dist/lens-keeping.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lens-keeping.js","sourceRoot":"","sources":["../src/lens-keeping.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"lens-keeping.js","sourceRoot":"","sources":["../src/lens-keeping.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAkB,MAAM,eAAe,CAAC;AAC3G,OAAO,EAAE,UAAU,EAAsC,MAAM,yBAAyB,CAAC;AAGzF,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAiB,MAAM,oBAAoB,CAAC;AAG5F;;;;;;;;;;;;;;;;;GAiBG;AAEH,SAAS,KAAK,CAAC,GAAW,EAAE,MAA2B;IACrD,IAAI,CAAC;QACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;;YAClE,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,uEAAuE;IACzE,CAAC;AACH,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,IAAc;IACxD,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACrF,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,KAAa;IACvD,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,0DAA0D;AAC1D,SAAS,eAAe,CAAC,QAAsC,EAAE,KAAa;IAC5E,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC;QAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;AACtH,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,MAAsB,EAAyD,EAAE,CAChG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAE9L,MAAM,MAAM,GAAG,CAAC,IAAiB,EAAY,EAAE,CAAC,CAAC;IAC/C,KAAK,EAAE,IAAI,CAAC,KAAK;IACjB,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,EAAE,EAAE,IAAI,CAAC,EAAE;IACX,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CACnD,CAAC,CAAC;AAEH,uEAAuE;AACvE,SAAS,SAAS,CAAC,KAAa,EAAE,KAAiE;IACjG,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACxG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAI,CAAC,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC;YAAE,OAAO,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC;AAC5E,CAAC;AASD,qGAAqG;AACrG,MAAM,UAAU,cAAc,CAAC,EAA4B;IACzD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,UAAU,EAAa,CAAC;IAC9E,MAAM,KAAK,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAAG,KAAK,EAAE,IAAc,EAAiB,EAAE;QACvD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QACtB,IAAI,IAAI,CAAC,OAAO,IAAI,UAAU,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1E,CAAC;YAAC,MAAM,CAAC;gBACP,0FAA0F;YAC5F,CAAC;QACH,CAAC;QACD,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,eAAe,CAAC,KAAgD,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9E,KAAK,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACrC,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YAC3B,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACxJ,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,SAAS,IAAI,CAAC,KAAK,2BAA2B,EAAE;SAChF,CAAC,CAAC;QACH,sGAAsG;QACtG,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACjD,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,KAAK,GAAG,EAAE,CAAC,CAAC;IAChH,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,KAAK,EAAE,KAAgB,EAAiB,EAAE;QACrD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAgB,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;QACnD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,IAAwB,CAAC;QAC7B,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO;YAAE,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAChD,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QACxD,MAAM,QAAQ,GACZ,IAAI;YACJ,CAAC,OAAO;gBACN,CAAC,CAAC,SAAS,KAAK,uCAAuC;gBACvD,CAAC,CAAC,UAAU;oBACV,CAAC,CAAC,SAAS,KAAK,4DAA4D;oBAC5E,CAAC,CAAC,SAAS,KAAK,qBAAqB,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAa,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACzC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,EAAE,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1F,oOAAoO;QACpO,KAAK,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACtJ,IAAI,KAAK;YAAE,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,KAAK,GAAG,EAAE,CAAC,CAAC;IAC3N,CAAC,CAAC;IAEF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC"}
|
package/dist/map-panel.js
CHANGED
|
@@ -101,7 +101,7 @@ function PanelFrame({ label, wide, testId, head, onClose, children, sheetHeight,
|
|
|
101
101
|
}, []);
|
|
102
102
|
return (_jsxs("section", { ref: region, "aria-label": label, "data-testid": testId, "data-graview-map-panel": sheet ? "sheet" : "dock", "data-graview-overlay": "", "data-graview-offstage": "", className: "graview-map-panel", style: {
|
|
103
103
|
position: "absolute",
|
|
104
|
-
// On the rail's rung
|
|
104
|
+
// On the rail's rung: a sheet stands over what is at the foot rather than being cut through by it.
|
|
105
105
|
zIndex: layer("rail"),
|
|
106
106
|
boxSizing: "border-box",
|
|
107
107
|
display: "flex",
|
|
@@ -158,6 +158,52 @@ function ActsButton({ on, about }) {
|
|
|
158
158
|
}
|
|
159
159
|
/** Going to a record from the panel: the same stop a double-click on it in the scene makes, on the ground. */
|
|
160
160
|
const travelTo = (view, id) => ({ ...withFocus(withOverview(view, false), id), relation: null });
|
|
161
|
+
/**
|
|
162
|
+
* THE KEYBOARD GOES WHERE "GO TO IT" WENT. The press takes the panel, and
|
|
163
|
+
* the button in it, away with the map; the keyboard fell to <body> until
|
|
164
|
+
* the Shell's rescue found something, and on a slow machine that was
|
|
165
|
+
* seconds, or a record that was not this one. It goes to the record's
|
|
166
|
+
* card on the ground as soon as the card is drawn — unless a person put it
|
|
167
|
+
* somewhere meanwhile, which ends the wait.
|
|
168
|
+
*
|
|
169
|
+
* AND IT IS NEVER ON NOTHING MEANWHILE. Waiting for the card left the
|
|
170
|
+
* keyboard on <body> for as long as the scene took to draw it, which on the
|
|
171
|
+
* nightly's loaded runner was longer than the watch waits. So at the press
|
|
172
|
+
* it moves to the scene's ground — the one thing the press does not take
|
|
173
|
+
* away — and waits there: a stop of its own only while it holds the
|
|
174
|
+
* keyboard, handed on to the card once the card is drawn.
|
|
175
|
+
*/
|
|
176
|
+
function handTheKeyboardTo(id, pressed) {
|
|
177
|
+
const wanted = `[data-graview-stage] [data-graview-view="${CSS.escape(id)}"][tabindex]`;
|
|
178
|
+
// The ground of this scene: the nearest one around the press, for a page with more than one app on it.
|
|
179
|
+
let ground = null;
|
|
180
|
+
for (let at = pressed?.parentElement ?? null; at && !ground; at = at.parentElement)
|
|
181
|
+
ground = at.querySelector(".graview-ground");
|
|
182
|
+
ground ??= document.querySelector(".graview-ground");
|
|
183
|
+
const holding = ground !== null && !ground.hasAttribute("tabindex");
|
|
184
|
+
if (ground && holding) {
|
|
185
|
+
ground.setAttribute("tabindex", "-1");
|
|
186
|
+
// Once the keyboard leaves it, by the card or by a person, the ground is not a stop.
|
|
187
|
+
ground.addEventListener("focusout", (event) => {
|
|
188
|
+
if (event.target === ground)
|
|
189
|
+
ground.removeAttribute("tabindex");
|
|
190
|
+
}, { once: true });
|
|
191
|
+
}
|
|
192
|
+
ground?.focus({ preventScroll: true });
|
|
193
|
+
const until = performance.now() + 5000;
|
|
194
|
+
const land = () => {
|
|
195
|
+
const at = document.activeElement;
|
|
196
|
+
const free = at === null || at === document.body || at === document.documentElement || at === pressed || at === ground;
|
|
197
|
+
if (!free)
|
|
198
|
+
return;
|
|
199
|
+
const card = document.querySelector(wanted);
|
|
200
|
+
if (card && card.isConnected && !card.closest("[inert]"))
|
|
201
|
+
return card.focus({ preventScroll: true });
|
|
202
|
+
if (performance.now() < until)
|
|
203
|
+
requestAnimationFrame(land);
|
|
204
|
+
};
|
|
205
|
+
requestAnimationFrame(land);
|
|
206
|
+
}
|
|
161
207
|
/* -------------------------------------------------------------- the lens */
|
|
162
208
|
/**
|
|
163
209
|
* A LENS, AT FULL SIZE, BESIDE THE MAP. The same component the place draws,
|
|
@@ -270,7 +316,10 @@ function RecordPanel({ id }) {
|
|
|
270
316
|
const ownCard = Card !== undefined && !isDefaultView(Card);
|
|
271
317
|
/* A record risen from (in focus, not chosen) is put away by leaving it, as a lens is. */
|
|
272
318
|
const close = () => (view.focusId === id ? go({ ...withFocus(view, null), selection: [] }) : setSelection([]));
|
|
273
|
-
return (_jsxs(PanelFrame, { label: `${name(id)}: its links`, testId: "record-panel", wide: ownCard ? "min(max(440px, 46%), 760px)" : "min(360px, 40%)", sheetHeight: "52%", onClose: close, head: _jsxs(_Fragment, { children: [_jsx("div", { style: eyebrow, children: noun }), _jsx("h2", { style: title, "data-testid": "record-panel-title", children: name(id) }), _jsxs("div", { style: { display: "flex", gap: 8, flexWrap: "wrap", marginTop: 10 }, children: [_jsx("button", { type: "button", "data-testid": "record-panel-go", style: pressStyle, onClick: () =>
|
|
319
|
+
return (_jsxs(PanelFrame, { label: `${name(id)}: its links`, testId: "record-panel", wide: ownCard ? "min(max(440px, 46%), 760px)" : "min(360px, 40%)", sheetHeight: "52%", onClose: close, head: _jsxs(_Fragment, { children: [_jsx("div", { style: eyebrow, children: noun }), _jsx("h2", { style: title, "data-testid": "record-panel-title", children: name(id) }), _jsxs("div", { style: { display: "flex", gap: 8, flexWrap: "wrap", marginTop: 10 }, children: [_jsx("button", { type: "button", "data-testid": "record-panel-go", style: pressStyle, onClick: (event) => {
|
|
320
|
+
go(travelTo(view, id));
|
|
321
|
+
handTheKeyboardTo(id, event.currentTarget);
|
|
322
|
+
}, children: "Go to it" }), _jsx(ActsButton, { on: id, about: name(id) }), _jsxs("button", { type: "button", "data-testid": "record-panel-district", style: pressStyle, onClick: () => setSelection([kindCardId(kind)]), children: ["All ", pluralLabel(store.schema, kind).toLowerCase()] })] })] }), children: [_jsx("div", { "data-graview-record-card": id, style: { padding: "8px 18px 0" }, children: ownCard ? (_jsx(ViewBoundary, { kind: kind, children: _jsx(Card, { node: node, fidelity: "full", cardinality: "one", mode: "fullscreen", selected: false }) })) : (_jsx(Fields, { id: id, shown: [name(id)] })) }), groups.length === 0 ? _jsx("p", { style: { ...quiet, margin: "14px 18px" }, children: "No links yet." }) : null, groups.map((group) => (_jsxs("section", { "aria-label": group.words, "data-graview-links": group.edge, children: [_jsxs("h3", { style: heading, children: [group.words.charAt(0).toUpperCase() + group.words.slice(1), " ", _jsxs("span", { style: { fontWeight: 400, color: "var(--graview-ink-faint)" }, children: ["\u00B7 ", group.others.length] })] }), _jsx("ul", { style: listStyle, children: group.others.map((other) => (_jsx("li", { children: _jsxs("button", { type: "button", className: "graview-map-panel-row", "data-graview-record": other, style: rowStyle, onClick: () => setSelection([other]),
|
|
274
323
|
// Its acts, as on the map: a right-click (or a long press) opens the menu about it, here.
|
|
275
324
|
onContextMenu: (event) => actsAt(event, other), children: [_jsx("span", { style: { flex: "1 1 auto", minWidth: 0, overflowWrap: "anywhere" }, children: name(other) }), group.kind !== kind ? null : _jsx("span", { style: { fontSize: "0.75rem", color: "var(--graview-ink-faint)" }, children: noun })] }) }, other))) })] }, group.key)))] }));
|
|
276
325
|
}
|