@graview/primitives 0.1.29 → 0.1.32
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 +46 -9
- package/dist/app-bar.js.map +1 -1
- package/dist/app-link.d.ts.map +1 -1
- package/dist/app-link.js +5 -2
- package/dist/app-link.js.map +1 -1
- package/dist/app-title.d.ts +1 -1
- package/dist/app-title.d.ts.map +1 -1
- package/dist/app-title.js +7 -3
- package/dist/app-title.js.map +1 -1
- package/dist/arrange-bar.d.ts +10 -0
- package/dist/arrange-bar.d.ts.map +1 -1
- package/dist/arrange-bar.js +25 -4
- package/dist/arrange-bar.js.map +1 -1
- package/dist/arrange-lists.d.ts +4 -0
- package/dist/arrange-lists.d.ts.map +1 -1
- package/dist/arrange-lists.js +30 -2
- package/dist/arrange-lists.js.map +1 -1
- package/dist/bar-panes.d.ts +1 -1
- package/dist/bar-panes.d.ts.map +1 -1
- package/dist/bar-panes.js +1 -1
- package/dist/bar-panes.js.map +1 -1
- package/dist/bar-suggested.d.ts +2 -0
- package/dist/bar-suggested.d.ts.map +1 -0
- package/dist/bar-suggested.js +22 -0
- package/dist/bar-suggested.js.map +1 -0
- 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/connections.d.ts +1 -1
- package/dist/connections.d.ts.map +1 -1
- package/dist/connections.js +39 -4
- package/dist/connections.js.map +1 -1
- package/dist/declared-lens-doors.d.ts.map +1 -1
- package/dist/declared-lens-doors.js +4 -1
- package/dist/declared-lens-doors.js.map +1 -1
- package/dist/default-views.d.ts.map +1 -1
- package/dist/default-views.js +60 -17
- 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 +8 -1
- package/dist/editable.d.ts.map +1 -1
- package/dist/editable.js +58 -15
- package/dist/editable.js.map +1 -1
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +29 -5
- package/dist/files.js.map +1 -1
- package/dist/find.d.ts.map +1 -1
- package/dist/find.js +110 -11
- package/dist/find.js.map +1 -1
- package/dist/first-look-door.d.ts +71 -0
- package/dist/first-look-door.d.ts.map +1 -0
- package/dist/first-look-door.js +95 -0
- package/dist/first-look-door.js.map +1 -0
- package/dist/first-look.d.ts +12 -0
- package/dist/first-look.d.ts.map +1 -0
- package/dist/first-look.js +265 -0
- package/dist/first-look.js.map +1 -0
- package/dist/frame.d.ts +3 -0
- package/dist/frame.d.ts.map +1 -1
- package/dist/frame.js +4 -0
- package/dist/frame.js.map +1 -1
- package/dist/here.d.ts +24 -1
- package/dist/here.d.ts.map +1 -1
- package/dist/here.js +36 -1
- package/dist/here.js.map +1 -1
- package/dist/index.d.ts +19 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -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/kind-stop.d.ts +3 -1
- package/dist/kind-stop.d.ts.map +1 -1
- package/dist/kind-stop.js +3 -2
- package/dist/kind-stop.js.map +1 -1
- package/dist/lens/arranging.d.ts.map +1 -1
- package/dist/lens/arranging.js +9 -1
- package/dist/lens/arranging.js.map +1 -1
- 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-drawing.d.ts.map +1 -1
- package/dist/lens/calendar-drawing.js +6 -2
- package/dist/lens/calendar-drawing.js.map +1 -1
- package/dist/lens/calendar-options.d.ts +10 -1
- package/dist/lens/calendar-options.d.ts.map +1 -1
- package/dist/lens/calendar-options.js.map +1 -1
- package/dist/lens/calendar-spans.d.ts +5 -0
- package/dist/lens/calendar-spans.d.ts.map +1 -1
- package/dist/lens/calendar-spans.js +13 -2
- package/dist/lens/calendar-spans.js.map +1 -1
- package/dist/lens/calendar-view.d.ts.map +1 -1
- package/dist/lens/calendar-view.js +16 -2
- package/dist/lens/calendar-view.js.map +1 -1
- package/dist/lens/columns.d.ts +3 -1
- package/dist/lens/columns.d.ts.map +1 -1
- package/dist/lens/columns.js +6 -5
- package/dist/lens/columns.js.map +1 -1
- package/dist/lens/coverage.d.ts +8 -2
- package/dist/lens/coverage.d.ts.map +1 -1
- package/dist/lens/coverage.js +36 -10
- package/dist/lens/coverage.js.map +1 -1
- package/dist/lens-keeping.js +2 -3
- package/dist/lens-keeping.js.map +1 -1
- package/dist/linked-record-door.d.ts +4 -0
- package/dist/linked-record-door.d.ts.map +1 -0
- package/dist/linked-record-door.js +12 -0
- package/dist/linked-record-door.js.map +1 -0
- package/dist/linked-record.d.ts +34 -0
- package/dist/linked-record.d.ts.map +1 -0
- package/dist/linked-record.js +142 -0
- package/dist/linked-record.js.map +1 -0
- package/dist/map-panel.js +52 -3
- 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 +23 -4
- package/dist/pages.d.ts.map +1 -1
- package/dist/pages.js +24 -4
- package/dist/pages.js.map +1 -1
- package/dist/past-bar.d.ts +13 -0
- package/dist/past-bar.d.ts.map +1 -0
- package/dist/past-bar.js +26 -0
- package/dist/past-bar.js.map +1 -0
- package/dist/places.d.ts.map +1 -1
- package/dist/places.js +3 -2
- package/dist/places.js.map +1 -1
- package/dist/primitives/index.d.ts +8 -0
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/index.js +67 -29
- package/dist/primitives/index.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-bar.d.ts.map +1 -1
- package/dist/scene-bar.js +5 -2
- package/dist/scene-bar.js.map +1 -1
- package/dist/scene-css.d.ts.map +1 -1
- package/dist/scene-css.js +79 -8
- package/dist/scene-css.js.map +1 -1
- package/dist/scene-way-back-door.d.ts.map +1 -1
- package/dist/scene-way-back-door.js +9 -0
- package/dist/scene-way-back-door.js.map +1 -1
- package/dist/scene.d.ts +11 -2
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +10 -1
- package/dist/scene.js.map +1 -1
- package/dist/shell.d.ts +23 -24
- package/dist/shell.d.ts.map +1 -1
- package/dist/shell.js +9 -3
- package/dist/shell.js.map +1 -1
- package/dist/spec-css.d.ts.map +1 -1
- package/dist/spec-css.js +22 -2
- package/dist/spec-css.js.map +1 -1
- package/dist/spec-views.d.ts +6 -1
- package/dist/spec-views.d.ts.map +1 -1
- package/dist/spec-views.js +82 -16
- 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/suggested.d.ts +13 -0
- package/dist/suggested.d.ts.map +1 -0
- package/dist/suggested.js +82 -0
- package/dist/suggested.js.map +1 -0
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +25 -28
- package/dist/theme.js.map +1 -1
- package/dist/timeline.d.ts +6 -0
- package/dist/timeline.d.ts.map +1 -0
- package/dist/timeline.js +150 -0
- package/dist/timeline.js.map +1 -0
- package/dist/way-back.d.ts.map +1 -1
- package/dist/way-back.js +3 -0
- package/dist/way-back.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 +24 -0
- package/dist/workbench/activity.d.ts.map +1 -1
- package/dist/workbench/activity.js +159 -33
- 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 +87 -10
- package/dist/workbench/answer-args.js.map +1 -1
- package/dist/workbench/back-out.d.ts.map +1 -1
- package/dist/workbench/back-out.js +7 -2
- package/dist/workbench/back-out.js.map +1 -1
- package/dist/workbench/inspector-door.d.ts +3 -1
- package/dist/workbench/inspector-door.d.ts.map +1 -1
- package/dist/workbench/inspector-door.js +7 -6
- package/dist/workbench/inspector-door.js.map +1 -1
- package/dist/workbench/inspector.d.ts +2 -1
- package/dist/workbench/inspector.d.ts.map +1 -1
- package/dist/workbench/inspector.js +94 -17
- package/dist/workbench/inspector.js.map +1 -1
- package/dist/workbench/trail.d.ts.map +1 -1
- package/dist/workbench/trail.js +10 -2
- package/dist/workbench/trail.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 -183
- 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
package/dist/seat-field.js
DELETED
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { layer } from "@graview/core";
|
|
3
|
-
import { retryingImport } from "@graview/core/retry";
|
|
4
|
-
import { lazyModule, useGraview, useSeatTalkState } from "@graview/react/provider";
|
|
5
|
-
import { Suspense, useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
6
|
-
import { FOOT_MOVED } from "./notice-place.js";
|
|
7
|
-
import { VISUALLY_HIDDEN } from "./primitives/measure.js";
|
|
8
|
-
/** The field's width on a desk, and the gap between it and the picture's edges. */
|
|
9
|
-
export const SEAT_WIDTH = 336;
|
|
10
|
-
const GAP = 16;
|
|
11
|
-
/** Narrower than this the seat is a field across the foot, and a bottom sheet when open. */
|
|
12
|
-
export const SEAT_PHONE_BELOW = 640;
|
|
13
|
-
const panelModule = lazyModule(retryingImport(() => import("./seat-panel.js")));
|
|
14
|
-
const Panel = panelModule.part((module, props) => {
|
|
15
|
-
const Drawn = module.SeatPanel;
|
|
16
|
-
return _jsx(Drawn, { ...props });
|
|
17
|
-
}, { what: "The conversation" });
|
|
18
|
-
/**
|
|
19
|
-
* The seat, at the foot of the box it is drawn in — the scene's picture, or
|
|
20
|
-
* on Pages a box the routed face lays over the window (or its embed).
|
|
21
|
-
*/
|
|
22
|
-
export function SeatField({ respond, onCall, onPick, start = "field", onMove, place, onDraft }) {
|
|
23
|
-
const { brand, seatTalk } = useGraview();
|
|
24
|
-
const talk = useSeatTalkState(seatTalk);
|
|
25
|
-
const name = brand?.name?.trim() || "this app";
|
|
26
|
-
const region = useRef(null);
|
|
27
|
-
const field = useRef(null);
|
|
28
|
-
const [draft, setDraft] = useState("");
|
|
29
|
-
const [phone, setPhone] = useState(false);
|
|
30
|
-
/* Where the keyboard was before it came into the seat: where Escape puts it back. */
|
|
31
|
-
const cameFrom = useRef(null);
|
|
32
|
-
const hidden = start === "hidden";
|
|
33
|
-
const open = talk.open && !hidden;
|
|
34
|
-
/* Drawn: Find offers "Ask:" where a seat is. */
|
|
35
|
-
useEffect(() => (hidden ? undefined : seatTalk.drawn()), [seatTalk, hidden]);
|
|
36
|
-
/* A PHONE'S SEAT is a field across the foot, measured from the box it is drawn in, not the window. */
|
|
37
|
-
useLayoutEffect(() => {
|
|
38
|
-
const box = region.current?.parentElement;
|
|
39
|
-
if (!box)
|
|
40
|
-
return;
|
|
41
|
-
const measure = () => setPhone(box.getBoundingClientRect().width < SEAT_PHONE_BELOW);
|
|
42
|
-
measure();
|
|
43
|
-
if (typeof ResizeObserver === "undefined")
|
|
44
|
-
return;
|
|
45
|
-
const watch = new ResizeObserver(measure);
|
|
46
|
-
watch.observe(box);
|
|
47
|
-
return () => watch.disconnect();
|
|
48
|
-
}, [hidden]);
|
|
49
|
-
/* What stands above the foot — a notice — places itself again when the seat grows, shrinks or moves. */
|
|
50
|
-
useEffect(() => {
|
|
51
|
-
if (typeof window !== "undefined")
|
|
52
|
-
window.dispatchEvent(new Event(FOOT_MOVED));
|
|
53
|
-
}, [open, talk.side, phone]);
|
|
54
|
-
/*
|
|
55
|
-
* THE END OF A PAGE SCROLLS CLEAR OF THE FIELD. The field stands over the
|
|
56
|
-
* page's foot, and on a phone it covered a list's last row however far
|
|
57
|
-
* the page scrolled. Closed, it says how much room it takes from the
|
|
58
|
-
* bottom — its height, where it stands, and a gutter — as
|
|
59
|
-
* `--graview-foot-room` on the embed (or the page), and a page that ends
|
|
60
|
-
* under it pads its end by that much (`PageMain`, an app's own main).
|
|
61
|
-
*/
|
|
62
|
-
useEffect(() => {
|
|
63
|
-
const element = region.current;
|
|
64
|
-
if (hidden || open || !element || typeof window === "undefined")
|
|
65
|
-
return;
|
|
66
|
-
const holder = (element.closest("[data-graview-embed]") ?? document.documentElement).style;
|
|
67
|
-
const measure = () => {
|
|
68
|
-
const box = element.getBoundingClientRect();
|
|
69
|
-
const frame = element.offsetParent?.getBoundingClientRect();
|
|
70
|
-
const from = frame ? frame.bottom - box.top : box.height + GAP;
|
|
71
|
-
holder.setProperty("--graview-foot-room", `${Math.max(0, Math.round(from + GAP))}px`);
|
|
72
|
-
};
|
|
73
|
-
measure();
|
|
74
|
-
const watch = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(measure);
|
|
75
|
-
watch?.observe(element);
|
|
76
|
-
return () => {
|
|
77
|
-
watch?.disconnect();
|
|
78
|
-
holder.removeProperty("--graview-foot-room");
|
|
79
|
-
};
|
|
80
|
-
}, [hidden, open, phone, talk.side]);
|
|
81
|
-
/* ASKED FROM ELSEWHERE (Find's "Ask:" row): the keyboard comes to the field, so the reader can go on. */
|
|
82
|
-
useEffect(() => {
|
|
83
|
-
if (!open || talk.pending === null)
|
|
84
|
-
return;
|
|
85
|
-
remember();
|
|
86
|
-
field.current?.focus({ preventScroll: true });
|
|
87
|
-
}, [open, talk.pending]);
|
|
88
|
-
const remember = () => {
|
|
89
|
-
const at = typeof document === "undefined" ? null : document.activeElement;
|
|
90
|
-
if (at instanceof HTMLElement && at !== document.body && !region.current?.contains(at))
|
|
91
|
-
cameFrom.current = at;
|
|
92
|
-
};
|
|
93
|
-
const openIt = () => {
|
|
94
|
-
remember();
|
|
95
|
-
panelModule.prefetch();
|
|
96
|
-
seatTalk.setOpen(true);
|
|
97
|
-
};
|
|
98
|
-
/*
|
|
99
|
-
* CLOSED ON A PHONE, THE ON-SCREEN KEYBOARD GOES DOWN (FR-164). Put back
|
|
100
|
-
* in the field, it kept the keyboard up and the next letter opened the
|
|
101
|
-
* sheet again: a tap on the grab seemed to do nothing. On a phone the
|
|
102
|
-
* keyboard goes back to where it was only if that is no field, and
|
|
103
|
-
* otherwise to the seat's region itself — never a field, never <body>.
|
|
104
|
-
*/
|
|
105
|
-
const close = () => {
|
|
106
|
-
seatTalk.setOpen(false);
|
|
107
|
-
const back = cameFrom.current;
|
|
108
|
-
cameFrom.current = null;
|
|
109
|
-
if (back?.isConnected && !(phone && back instanceof HTMLInputElement))
|
|
110
|
-
back.focus({ preventScroll: true });
|
|
111
|
-
// Gone, or no longer something the keyboard can stand on (a view drawn over it): the field keeps it, or on a phone the region.
|
|
112
|
-
if (document.activeElement !== back)
|
|
113
|
-
(phone ? region : field).current?.focus({ preventScroll: true });
|
|
114
|
-
};
|
|
115
|
-
if (hidden)
|
|
116
|
-
return null;
|
|
117
|
-
const right = !phone && talk.side === "right";
|
|
118
|
-
const style = phone
|
|
119
|
-
? open
|
|
120
|
-
? { left: 0, right: 0, bottom: 0, padding: `8px 12px calc(12px + env(safe-area-inset-bottom, 0px))`, borderRadius: "12px 12px 0 0", ...OPEN_BOX }
|
|
121
|
-
: { left: GAP, right: GAP, bottom: `calc(${GAP}px + env(safe-area-inset-bottom, 0px))` }
|
|
122
|
-
: open
|
|
123
|
-
? /* The box around the field, so the field itself stays where it stood: its padding and hairline outside it. */
|
|
124
|
-
{ [right ? "right" : "left"]: right ? `calc(${GAP / 2 - 1}px + var(--graview-dock, 0px))` : GAP / 2 - 1, bottom: GAP / 2 - 1, width: SEAT_WIDTH + GAP + 2, padding: GAP / 2, borderRadius: 12, ...OPEN_BOX }
|
|
125
|
-
: { [right ? "right" : "left"]: right ? `calc(${GAP}px + var(--graview-dock, 0px))` : GAP, bottom: GAP, width: SEAT_WIDTH };
|
|
126
|
-
return (_jsxs("section", { ref: region, role: "region", "aria-label": `Ask ${name}`,
|
|
127
|
-
// Where a phone's keyboard goes when the sheet is put away: here, not into the field.
|
|
128
|
-
tabIndex: -1, "data-testid": "seat", "data-graview-seat": open ? "open" : "closed", "data-graview-seat-side": right ? "right" : "left", "data-graview-seat-shape": phone ? "phone" : "desk", "data-graview-foot": "", "data-graview-offstage": "", onMouseDown: (event) => event.stopPropagation(), onKeyDown: (event) => {
|
|
129
|
-
if (event.key !== "Escape" || !open)
|
|
130
|
-
return;
|
|
131
|
-
// The seat's Escape is the seat's: the scene's back-out does not hear it too.
|
|
132
|
-
event.preventDefault();
|
|
133
|
-
event.stopPropagation();
|
|
134
|
-
close();
|
|
135
|
-
}, style: {
|
|
136
|
-
position: "absolute",
|
|
137
|
-
zIndex: layer("rail"),
|
|
138
|
-
boxSizing: "border-box",
|
|
139
|
-
display: "flex",
|
|
140
|
-
flexDirection: "column",
|
|
141
|
-
gap: 8,
|
|
142
|
-
pointerEvents: "auto",
|
|
143
|
-
// A landing place for the keyboard, never in the tab order: no ring around the whole seat.
|
|
144
|
-
outline: "none",
|
|
145
|
-
...style,
|
|
146
|
-
}, children: [_jsxs("h2", { style: { ...VISUALLY_HIDDEN, margin: 0 }, children: ["Ask ", name] }), open ? (_jsx(Suspense, { fallback: null, children: _jsx(Panel, { phone: phone, side: right ? "right" : "left", name: name, onClose: close, ...(respond ? { respond: respond } : {}), ...(onCall ? { onCall } : {}), ...(onPick ? { onPick } : {}), ...(onMove ? { onMove } : {}), ...(place ? { place } : {}), ...(onDraft ? { onDraft } : {}) }) })) : null, _jsx("form", { onSubmit: (event) => {
|
|
147
|
-
event.preventDefault();
|
|
148
|
-
const asked = draft.trim();
|
|
149
|
-
if (!open)
|
|
150
|
-
openIt();
|
|
151
|
-
if (!asked || talk.busy)
|
|
152
|
-
return;
|
|
153
|
-
seatTalk.ask(asked);
|
|
154
|
-
setDraft("");
|
|
155
|
-
}, style: { display: "flex", margin: 0 }, children: _jsx("input", { ref: field, "data-testid": "seat-field", type: "text", enterKeyHint: "send", autoComplete: "off", value: draft, placeholder: `Ask ${name}…`, "aria-label": `Ask ${name}`, onPointerEnter: () => panelModule.prefetch(), onFocus: () => panelModule.prefetch(), onClick: () => {
|
|
156
|
-
if (!open)
|
|
157
|
-
openIt();
|
|
158
|
-
}, onChange: (event) => {
|
|
159
|
-
setDraft(event.target.value);
|
|
160
|
-
if (!open)
|
|
161
|
-
openIt();
|
|
162
|
-
}, style: {
|
|
163
|
-
flex: "1 1 auto",
|
|
164
|
-
minWidth: 0,
|
|
165
|
-
boxSizing: "border-box",
|
|
166
|
-
height: 38,
|
|
167
|
-
padding: "0 12px",
|
|
168
|
-
font: "inherit",
|
|
169
|
-
// Never under 16px: smaller, iOS Safari zooms the page when the field is focused (FR-164).
|
|
170
|
-
fontSize: "max(1rem,16px)",
|
|
171
|
-
color: "var(--graview-ink)",
|
|
172
|
-
background: "var(--graview-panel)",
|
|
173
|
-
border: "1px solid var(--graview-edge)",
|
|
174
|
-
borderRadius: 8,
|
|
175
|
-
} }) })] }));
|
|
176
|
-
}
|
|
177
|
-
/** The open seat: the floating panel's ground, a hairline, and the lift that says it is over the picture. */
|
|
178
|
-
const OPEN_BOX = {
|
|
179
|
-
background: "var(--graview-float)",
|
|
180
|
-
border: "1px solid var(--graview-edge)",
|
|
181
|
-
boxShadow: "var(--graview-lift-high)",
|
|
182
|
-
};
|
|
183
|
-
//# sourceMappingURL=seat-field.js.map
|
package/dist/seat-field.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"seat-field.js","sourceRoot":"","sources":["../src/seat-field.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAkB,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEnF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAA0C,MAAM,OAAO,CAAC;AACvH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAmD1D,mFAAmF;AACnF,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAC;AAC9B,MAAM,GAAG,GAAG,EAAE,CAAC;AACf,4FAA4F;AAC5F,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAChF,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAC5B,CAAC,MAAM,EAAE,KAAqB,EAAE,EAAE;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,SAA0C,CAAC;IAChE,OAAO,KAAC,KAAK,OAAK,KAAK,GAAI,CAAC;AAC9B,CAAC,EACD,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAC7B,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAsB,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,GAAG,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAqB;IACpI,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,UAAU,EAAK,CAAC;IAC5C,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,MAAM,CAA0B,IAAI,CAAC,CAAC;IACpD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1C,qFAAqF;IACrF,MAAM,QAAQ,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,KAAK,KAAK,QAAQ,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC;IAElC,gDAAgD;IAChD,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAE7E,sGAAsG;IACtG,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC;QAC1C,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,gBAAgB,CAAC,CAAC;QACrF,OAAO,EAAE,CAAC;QACV,IAAI,OAAO,cAAc,KAAK,WAAW;YAAE,OAAO;QAClD,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;QAC1C,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,wGAAwG;IACxG,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IACjF,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAE7B;;;;;;;OAOG;IACH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QACxE,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAc,sBAAsB,CAAC,IAAI,QAAQ,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC;QACxG,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,MAAM,GAAG,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,EAAE,qBAAqB,EAAE,CAAC;YAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;YAC/D,MAAM,CAAC,WAAW,CAAC,qBAAqB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACxF,CAAC,CAAC;QACF,OAAO,EAAE,CAAC;QACV,MAAM,KAAK,GAAG,OAAO,cAAc,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;QACzF,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACxB,OAAO,GAAG,EAAE;YACV,KAAK,EAAE,UAAU,EAAE,CAAC;YACpB,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAC/C,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAErC,yGAAyG;IACzG,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;YAAE,OAAO;QAC3C,QAAQ,EAAE,CAAC;QACX,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAEzB,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,MAAM,EAAE,GAAG,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC3E,IAAI,EAAE,YAAY,WAAW,IAAI,EAAE,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;YAAE,QAAQ,CAAC,OAAO,GAAG,EAAE,CAAC;IAChH,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,QAAQ,EAAE,CAAC;QACX,WAAW,CAAC,QAAQ,EAAE,CAAC;QACvB,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC,CAAC;IACF;;;;;;OAMG;IACH,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC9B,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB,IAAI,IAAI,EAAE,WAAW,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,YAAY,gBAAgB,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3G,+HAA+H;QAC/H,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI;YAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACxG,CAAC,CAAC;IAEF,IAAI,MAAM;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;IAC9C,MAAM,KAAK,GAAkB,KAAK;QAChC,CAAC,CAAC,IAAI;YACJ,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,wDAAwD,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,QAAQ,EAAE;YACjJ,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,GAAG,wCAAwC,EAAE;QAC1F,CAAC,CAAC,IAAI;YACJ,CAAC,CAAC,8GAA8G;gBAC9G,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,UAAU,GAAG,GAAG,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,GAAG,QAAQ,EAAE;YAC9M,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,GAAG,gCAAgC,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAChI,OAAO,CACL,mBACE,GAAG,EAAE,MAAM,EACX,IAAI,EAAC,QAAQ,gBACD,OAAO,IAAI,EAAE;QACzB,sFAAsF;QACtF,QAAQ,EAAE,CAAC,CAAC,iBACA,MAAM,uBACC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,4BACnB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,6BACvB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,uBAE/B,EAAE,2BAEE,EAAE,EACxB,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,EAC/C,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACnB,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,IAAI;gBAAE,OAAO;YAC5C,8EAA8E;YAC9E,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,KAAK,EAAE,CAAC;QACV,CAAC,EACD,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACrB,SAAS,EAAE,YAAY;YACvB,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,GAAG,EAAE,CAAC;YACN,aAAa,EAAE,MAAM;YACrB,2FAA2F;YAC3F,OAAO,EAAE,MAAM;YACf,GAAG,KAAK;SACT,aAGD,cAAI,KAAK,EAAE,EAAE,GAAG,eAAe,EAAE,MAAM,EAAE,CAAC,EAAE,qBAAO,IAAI,IAAM,EAC5D,IAAI,CAAC,CAAC,CAAC,CACN,KAAC,QAAQ,IAAC,QAAQ,EAAE,IAAI,YACtB,KAAC,KAAK,IACJ,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAC9B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,KAAK,KACV,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAA+C,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC7E,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC1B,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC1B,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC1B,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACxB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAChC,GACO,CACZ,CAAC,CAAC,CAAC,IAAI,EACR,eACE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oBAClB,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;oBAC3B,IAAI,CAAC,IAAI;wBAAE,MAAM,EAAE,CAAC;oBACpB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI;wBAAE,OAAO;oBAChC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACpB,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACf,CAAC,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,YAErC,gBACE,GAAG,EAAE,KAAK,iBACE,YAAY,EACxB,IAAI,EAAC,MAAM,EACX,YAAY,EAAC,MAAM,EACnB,YAAY,EAAC,KAAK,EAClB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,OAAO,IAAI,GAAG,gBACf,OAAO,IAAI,EAAE,EACzB,cAAc,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,EAC5C,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,EACrC,OAAO,EAAE,GAAG,EAAE;wBACZ,IAAI,CAAC,IAAI;4BAAE,MAAM,EAAE,CAAC;oBACtB,CAAC,EACD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBAC7B,IAAI,CAAC,IAAI;4BAAE,MAAM,EAAE,CAAC;oBACtB,CAAC,EACD,KAAK,EAAE;wBACL,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE,CAAC;wBACX,SAAS,EAAE,YAAY;wBACvB,MAAM,EAAE,EAAE;wBACV,OAAO,EAAE,QAAQ;wBACjB,IAAI,EAAE,SAAS;wBACf,2FAA2F;wBAC3F,QAAQ,EAAE,gBAAgB;wBAC1B,KAAK,EAAE,oBAAoB;wBAC3B,UAAU,EAAE,sBAAsB;wBAClC,MAAM,EAAE,+BAA+B;wBACvC,YAAY,EAAE,CAAC;qBAChB,GACD,GACG,IACC,CACX,CAAC;AACJ,CAAC;AAED,6GAA6G;AAC7G,MAAM,QAAQ,GAAkB;IAC9B,UAAU,EAAE,sBAAsB;IAClC,MAAM,EAAE,+BAA+B;IACvC,SAAS,EAAE,0BAA0B;CACtC,CAAC"}
|
package/dist/seat-panel.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { type AnySchema } from "@graview/core";
|
|
2
|
-
import { type Responder, type SeatMove, type ToolCall } from "@graview/tools";
|
|
3
|
-
import "./frame.js";
|
|
4
|
-
/**
|
|
5
|
-
* THE OPEN SEAT — fetched when the seat is first opened (`seat-field.tsx`).
|
|
6
|
-
*
|
|
7
|
-
* A row of two quiet controls (the other foot, and close; on a phone a
|
|
8
|
-
* grab line to tap or pull down, and close), then — with nothing asked yet — one plain line about
|
|
9
|
-
* where the reader is, at most three things to ask and at most three acts,
|
|
10
|
-
* and the conversation. No heading over it saying what it is about, no
|
|
11
|
-
* stack of acts, no stars, no filter: the rest is one question away.
|
|
12
|
-
*/
|
|
13
|
-
export interface SeatPanelProps {
|
|
14
|
-
readonly phone: boolean;
|
|
15
|
-
readonly side: "left" | "right";
|
|
16
|
-
/** The app's name, as the field says it: "Ask Things". */
|
|
17
|
-
readonly name: string;
|
|
18
|
-
readonly onClose: () => void;
|
|
19
|
-
readonly respond?: Responder<AnySchema>;
|
|
20
|
-
readonly onCall?: (call: ToolCall) => void;
|
|
21
|
-
readonly onPick?: (id: string) => void;
|
|
22
|
-
/** Where an answer takes the app: the router on Pages; the scene's own stops when unsaid. */
|
|
23
|
-
readonly onMove?: (move: SeatMove) => void;
|
|
24
|
-
/** The place the reader stands in, by its slug, as the face knows it. */
|
|
25
|
-
readonly place?: string;
|
|
26
|
-
/** A view was drawn: the face shows it (Pages goes to `/~draft`). */
|
|
27
|
-
readonly onDraft?: () => void;
|
|
28
|
-
}
|
|
29
|
-
export declare function SeatPanel({ phone, side, name, onClose, respond, onCall, onPick, onMove, place, onDraft }: SeatPanelProps): import("react").JSX.Element;
|
|
30
|
-
/**
|
|
31
|
-
* WHERE A NAME IN AN ANSWER TAKES THE READER — the one place the seat moves
|
|
32
|
-
* the app. A face that knows its own way (Pages: the record's page) says so
|
|
33
|
-
* with `onPick`; on the scene the thing is chosen and flown to. When the
|
|
34
|
-
* seat's answers carry moves of their own (a place, a list narrowed by a
|
|
35
|
-
* date), they are applied here too, so both faces move the same way.
|
|
36
|
-
*/
|
|
37
|
-
export declare function useSeatGo(onPick?: (id: string) => void): (id: string) => void;
|
|
38
|
-
//# sourceMappingURL=seat-panel.d.ts.map
|
package/dist/seat-panel.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"seat-panel.d.ts","sourceRoot":"","sources":["../src/seat-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAK9D,OAAO,EAA6B,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAQzG,OAAO,YAAY,CAAC;AAEpB;;;;;;;;GAQG;AAEH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,6FAA6F;IAC7F,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC3C,yEAAyE;IACzE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,cAAc,+BAuGxH;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAM7E"}
|
package/dist/seat-panel.js
DELETED
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { onePerPicture } from "@graview/core";
|
|
3
|
-
import { failureWords } from "@graview/core/words";
|
|
4
|
-
import { withFocus, withOverview, withSelection } from "@graview/layout/view";
|
|
5
|
-
import { useAffordances, useApplyAffordance, useGraview, useSeatTalkState, useViolations } from "@graview/react";
|
|
6
|
-
import { problemLine, useLined } from "./rule-line.js";
|
|
7
|
-
import { loadPins } from "@graview/tools";
|
|
8
|
-
// Its own entry: a bundler places a file in every chunk that can reach it, and only the open seat uses this.
|
|
9
|
-
import { offeredActs, suggestionsFor, whereLine } from "@graview/tools/suggest";
|
|
10
|
-
import { useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
11
|
-
import { ChatPanel, LINK, QUIET_BUTTON } from "./chat.js";
|
|
12
|
-
import { useSubject } from "./subject.js";
|
|
13
|
-
import { VISUALLY_HIDDEN } from "./primitives/index.js";
|
|
14
|
-
import { AnswerArgs } from "./workbench/index.js";
|
|
15
|
-
import "./frame.js"; // A door: tied to what the page drew first (TIED DOORS, packages/primitives/src/frame.ts).
|
|
16
|
-
export function SeatPanel({ phone, side, name, onClose, respond, onCall, onPick, onMove, place, onDraft }) {
|
|
17
|
-
const { seatTalk } = useGraview();
|
|
18
|
-
const talk = useSeatTalkState(seatTalk);
|
|
19
|
-
const go = useSeatGo(onPick);
|
|
20
|
-
const latest = [...talk.turns].reverse().find((turn) => turn.role === "seat");
|
|
21
|
-
/*
|
|
22
|
-
* A PHONE'S SHEET YIELDS TO A DRAWN VIEW. Asked for a board, the sheet
|
|
23
|
-
* stood over most of it until it was put away: with a draft in place it
|
|
24
|
-
* keeps only the latest answer's lines above the field (the rest of the
|
|
25
|
-
* talk scrolls behind them), so the view is what the reader looks at.
|
|
26
|
-
*/
|
|
27
|
-
const yielding = phone && talk.draft !== null;
|
|
28
|
-
/*
|
|
29
|
-
* THE LATEST ANSWER IN SIGHT: the panel scrolls to its foot as a turn
|
|
30
|
-
* arrives. Opened again with nothing new said, it stands where the reader
|
|
31
|
-
* left it (FR-164): put away to look at the page, the talk is not lost.
|
|
32
|
-
*/
|
|
33
|
-
const body = useRef(null);
|
|
34
|
-
const opened = useRef(true);
|
|
35
|
-
useLayoutEffect(() => {
|
|
36
|
-
const at = body.current;
|
|
37
|
-
if (!at)
|
|
38
|
-
return;
|
|
39
|
-
// Yielding, the sheet is exactly as tall as the latest answer (up to its cap): no half a line of the turn before it.
|
|
40
|
-
const last = yielding ? [...at.querySelectorAll("ol > li")].pop() : undefined;
|
|
41
|
-
if (last) {
|
|
42
|
-
// From the answer's top to the end of the talk (what follows it is the list's own foot).
|
|
43
|
-
const from = last.getBoundingClientRect().top - at.getBoundingClientRect().top + at.scrollTop;
|
|
44
|
-
at.style.maxHeight = `min(${Math.ceil(at.scrollHeight - from)}px, ${YIELDED})`;
|
|
45
|
-
}
|
|
46
|
-
const left = opened.current ? SCROLLED.get(seatTalk) : undefined;
|
|
47
|
-
opened.current = false;
|
|
48
|
-
at.scrollTop = left && left.turns === talk.turns.length && !talk.busy ? left.top : at.scrollHeight;
|
|
49
|
-
}, [talk.turns.length, talk.busy, yielding]);
|
|
50
|
-
return (_jsxs("div", { "data-testid": "seat-panel", ...(yielding ? { "data-graview-seat-yields": "" } : {}), style: { display: "grid", gridTemplateRows: "auto minmax(0, 1fr)", gap: 4, minHeight: 0 }, children: [_jsxs("div", { "data-testid": "seat-top", ...(phone ? { onPointerDown: (event) => pullDown(event, onClose) } : {}),
|
|
51
|
-
// On a phone the top row is the sheet's handle: a drag down on it is the sheet's, never the page's scroll.
|
|
52
|
-
style: { display: "flex", alignItems: "center", justifyContent: phone ? "center" : "flex-end", gap: 2, position: "relative", minHeight: 28, ...(phone ? { touchAction: "none" } : {}) }, children: [phone ? (
|
|
53
|
-
/* A GRAB LINE, the sheet's own way away: a real button the width of a thumb, tapped or pulled down. */
|
|
54
|
-
_jsx("button", { type: "button", "data-testid": "seat-grab", "aria-label": `Close Ask ${name}`, title: "Close", onClick: onClose, style: { ...ICON, width: 64 }, children: _jsx("span", { "aria-hidden": "true", style: { display: "block", width: 36, height: 4, margin: "0 auto", borderRadius: 2, background: "var(--graview-edge-strong, var(--graview-ink-faint))" } }) })) : (_jsx("button", { type: "button", "data-testid": "seat-side", "aria-label": side === "left" ? "Move to the right" : "Move to the left", title: side === "left" ? "Move to the right" : "Move to the left", onClick: () => seatTalk.setSide(side === "left" ? "right" : "left"), style: ICON, children: _jsx("span", { "aria-hidden": "true", children: "\u21C4" }) })), _jsx("button", { type: "button", "data-testid": "seat-close", "aria-label": `Close Ask ${name}`, title: "Close", onClick: onClose, style: phone ? { ...ICON, position: "absolute", top: 0, right: 0 } : ICON, children: _jsx("span", { "aria-hidden": "true", children: "\u2715" }) })] }), _jsx("div", { ref: body, "data-testid": "seat-body",
|
|
55
|
-
// Where the reader had scrolled to, for the sheet opened again.
|
|
56
|
-
onScroll: (event) => void SCROLLED.set(seatTalk, { top: event.currentTarget.scrollTop, turns: talk.turns.length }), style: {
|
|
57
|
-
minHeight: 0,
|
|
58
|
-
// A drawn view on a phone: the sheet yields to it, keeping the latest answer's lines over the field.
|
|
59
|
-
maxHeight: yielding ? YIELDED : phone ? "calc(70cqh - 96px)" : "min(520px, calc(100cqh - 112px))",
|
|
60
|
-
overflowY: "auto",
|
|
61
|
-
overflowX: "hidden",
|
|
62
|
-
padding: "0 4px",
|
|
63
|
-
}, children: _jsx(ChatPanel, { shared: true, composer: false, testId: "seat", onPick: go, ...(onMove ? { onMove } : {}), ...(place ? { place } : {}), ...(onDraft ? { onDraft } : {}), empty: _jsx(SeatHere, { ...(place ? { here: place } : {}) }), ...(respond ? { respond } : {}), ...(onCall ? { onCall } : {}) }) }), _jsx("p", { "aria-live": "polite", "data-testid": "seat-said", style: VISUALLY_HIDDEN, children: talk.busy ? "" : (latest?.text ?? "") })] }));
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* WHERE A NAME IN AN ANSWER TAKES THE READER — the one place the seat moves
|
|
67
|
-
* the app. A face that knows its own way (Pages: the record's page) says so
|
|
68
|
-
* with `onPick`; on the scene the thing is chosen and flown to. When the
|
|
69
|
-
* seat's answers carry moves of their own (a place, a list narrowed by a
|
|
70
|
-
* date), they are applied here too, so both faces move the same way.
|
|
71
|
-
*/
|
|
72
|
-
export function useSeatGo(onPick) {
|
|
73
|
-
const { setView } = useGraview();
|
|
74
|
-
return useCallback((id) => (onPick ? onPick(id) : setView((stop) => withSelection(withFocus(withOverview(stop, false), id), [id]))), [onPick, setView]);
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* WITH NOTHING ASKED: one line about where the reader is, a few things to
|
|
78
|
-
* ask, and at most three acts — the repairs a broken rule names for this
|
|
79
|
-
* thing, and the ones the reader pinned.
|
|
80
|
-
*/
|
|
81
|
-
function SeatHere({ here }) {
|
|
82
|
-
const { store, views, view, seatTalk } = useGraview();
|
|
83
|
-
const subject = useSubject({ hover: false });
|
|
84
|
-
// Each with its rule's line, so the line about where the reader is says the shape and the record's values.
|
|
85
|
-
const lined = useLined(store, useViolations());
|
|
86
|
-
const violations = useMemo(() => lined.map((violation) => (violation.line ? { ...violation, message: problemLine(violation) } : violation)), [lined]);
|
|
87
|
-
const record = subject.id ? store.graph.getNode(subject.id) : undefined;
|
|
88
|
-
const standing = here ?? view.within?.["view"];
|
|
89
|
-
const place = subject.because === "place" && subject.id === null
|
|
90
|
-
? views.places().find((one) => one.title === subject.name)
|
|
91
|
-
: standing
|
|
92
|
-
? views.places().find((one) => one.as === standing)
|
|
93
|
-
: undefined;
|
|
94
|
-
const today = store.today();
|
|
95
|
-
const input = {
|
|
96
|
-
store,
|
|
97
|
-
subject: { id: subject.id, name: subject.name },
|
|
98
|
-
violations,
|
|
99
|
-
place: place ? { title: place.title, kind: place.kind } : null,
|
|
100
|
-
// Each picture once, however many kinds it is over.
|
|
101
|
-
places: onePerPicture(views.places()).map((one) => ({ title: one.title, kind: one.kind, picture: true })),
|
|
102
|
-
...(today ? { today } : {}),
|
|
103
|
-
};
|
|
104
|
-
const line = whereLine(input);
|
|
105
|
-
const suggestions = suggestionsFor(input);
|
|
106
|
-
const options = useMemo(() => ({ pins: loadPins(), ...(record ? { focus: record.id, about: [record.id] } : {}) }), [record?.id]);
|
|
107
|
-
const { affordances } = useAffordances(options);
|
|
108
|
-
const acts = record ? offeredActs(affordances, { store, subject: { id: subject.id, name: subject.name } }) : [];
|
|
109
|
-
const { apply, preview } = useApplyAffordance();
|
|
110
|
-
const [asking, setAsking] = useState(null);
|
|
111
|
-
const [said, setSaid] = useState(null);
|
|
112
|
-
const act = (affordance, args) => {
|
|
113
|
-
try {
|
|
114
|
-
preview(affordance, args);
|
|
115
|
-
apply(affordance, args);
|
|
116
|
-
setSaid(null);
|
|
117
|
-
return true;
|
|
118
|
-
}
|
|
119
|
-
catch (error) {
|
|
120
|
-
setSaid(failureWords(store.schema, store.allMutations(), error));
|
|
121
|
-
return false;
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
return (_jsxs("div", { "data-testid": "seat-here", style: { display: "grid", gap: 10, padding: "2px 2px 6px" }, children: [_jsx("p", { "data-testid": "seat-where", style: { margin: 0, fontSize: "0.9375rem", lineHeight: 1.45, color: "var(--graview-ink)" }, children: line }), acts.length > 0 ? (_jsx("ul", { "aria-label": "What you can do", style: { margin: 0, padding: 0, listStyle: "none", display: "flex", flexWrap: "wrap", gap: 6 }, children: acts.map(({ affordance, label }) => (_jsx("li", { children: _jsx("button", { type: "button", "data-testid": "seat-act", "data-affordance": affordance.id, "aria-pressed": asking?.id === affordance.id, title: affordance.why, onClick: () => (affordance.open.length > 0 ? setAsking((was) => (was?.id === affordance.id ? null : affordance)) : void act(affordance)), style: { ...QUIET_BUTTON, minHeight: 30, textAlign: "start", ...(affordance.destructive ? { color: "var(--graview-warn)" } : {}) }, children: label }) }, affordance.id))) })) : null, asking ? (_jsx(AnswerArgs, { affordance: asking, onApply: (args) => {
|
|
125
|
-
if (act(asking, args))
|
|
126
|
-
setAsking(null);
|
|
127
|
-
}, onCancel: () => setAsking(null) })) : null, said ? (_jsx("p", { "data-testid": "seat-refused", style: { margin: 0, fontSize: "0.8125rem", color: "var(--graview-warn)" }, children: said })) : null, suggestions.length > 0 ? (_jsx("ul", { "aria-label": "Things to ask", style: { margin: 0, padding: 0, listStyle: "none", display: "grid", gap: 2, justifyItems: "start" }, children: suggestions.map((suggestion) => (_jsx("li", { children: _jsx("button", { type: "button", "data-testid": "seat-suggestion", "data-graview-why": suggestion.why, onClick: () => seatTalk.ask(suggestion.ask), style: LINK, children: suggestion.ask }) }, suggestion.ask))) })) : null] }));
|
|
128
|
-
}
|
|
129
|
-
/** How much of the talk a phone's sheet keeps over a drawn view: the latest answer's lines. */
|
|
130
|
-
const YIELDED = "min(5.5em, 22cqh)";
|
|
131
|
-
/** Where each conversation's talk was scrolled to, and how many turns it had then: the sheet opened again stands there. */
|
|
132
|
-
const SCROLLED = new WeakMap();
|
|
133
|
-
/**
|
|
134
|
-
* HOW FAR A PULL PUTS A PHONE'S SHEET AWAY (FR-164). Its grab line read as
|
|
135
|
-
* something to pull down, and nothing followed the finger. Now the sheet
|
|
136
|
-
* does, from anywhere on its top row: let go `far` pixels down, or flicked
|
|
137
|
-
* down at `flick` pixels a millisecond over at least `least`, and it is put
|
|
138
|
-
* away; short of both it settles back. Moved more than `tap`, it was a drag,
|
|
139
|
-
* and the click the engine may send after it is not a tap on the grab.
|
|
140
|
-
*/
|
|
141
|
-
const PULL = { far: 64, flick: 0.5, least: 16, tap: 6 };
|
|
142
|
-
function pullDown(event, close) {
|
|
143
|
-
if (event.button !== 0)
|
|
144
|
-
return;
|
|
145
|
-
const handle = event.currentTarget;
|
|
146
|
-
const sheet = handle.closest('[data-testid="seat"]');
|
|
147
|
-
if (!sheet)
|
|
148
|
-
return;
|
|
149
|
-
const id = event.pointerId;
|
|
150
|
-
const from = event.clientY;
|
|
151
|
-
let last = { y: from, at: event.timeStamp };
|
|
152
|
-
let speed = 0;
|
|
153
|
-
let moved = 0;
|
|
154
|
-
try {
|
|
155
|
-
handle.setPointerCapture(id);
|
|
156
|
-
}
|
|
157
|
-
catch {
|
|
158
|
-
// A pointer the engine no longer holds: the moves still reach the handle while the finger is on it.
|
|
159
|
-
}
|
|
160
|
-
const move = (now) => {
|
|
161
|
-
if (now.pointerId !== id)
|
|
162
|
-
return;
|
|
163
|
-
moved = Math.max(0, now.clientY - from);
|
|
164
|
-
const took = now.timeStamp - last.at;
|
|
165
|
-
if (took > 0)
|
|
166
|
-
speed = (now.clientY - last.y) / took;
|
|
167
|
-
last = { y: now.clientY, at: now.timeStamp };
|
|
168
|
-
sheet.style.transition = "none";
|
|
169
|
-
sheet.style.transform = moved > 0 ? `translateY(${moved}px)` : "";
|
|
170
|
-
};
|
|
171
|
-
const end = (now) => {
|
|
172
|
-
if (now.pointerId !== id)
|
|
173
|
-
return;
|
|
174
|
-
handle.removeEventListener("pointermove", move);
|
|
175
|
-
handle.removeEventListener("pointerup", end);
|
|
176
|
-
handle.removeEventListener("pointercancel", end);
|
|
177
|
-
const away = now.type === "pointerup" && (moved >= PULL.far || (moved >= PULL.least && speed >= PULL.flick));
|
|
178
|
-
sheet.style.transition = away ? "" : "transform 160ms ease-out";
|
|
179
|
-
sheet.style.transform = "";
|
|
180
|
-
if (moved > PULL.tap) {
|
|
181
|
-
const swallow = (click) => {
|
|
182
|
-
click.preventDefault();
|
|
183
|
-
click.stopPropagation();
|
|
184
|
-
};
|
|
185
|
-
handle.addEventListener("click", swallow, { capture: true, once: true });
|
|
186
|
-
setTimeout(() => handle.removeEventListener("click", swallow, { capture: true }), 0);
|
|
187
|
-
}
|
|
188
|
-
if (away)
|
|
189
|
-
close();
|
|
190
|
-
};
|
|
191
|
-
handle.addEventListener("pointermove", move);
|
|
192
|
-
handle.addEventListener("pointerup", end);
|
|
193
|
-
handle.addEventListener("pointercancel", end);
|
|
194
|
-
}
|
|
195
|
-
/** A small square control in the panel's top row: a glyph, its name said to the screen reader. */
|
|
196
|
-
const ICON = {
|
|
197
|
-
display: "inline-grid",
|
|
198
|
-
placeItems: "center",
|
|
199
|
-
width: 28,
|
|
200
|
-
height: 28,
|
|
201
|
-
padding: 0,
|
|
202
|
-
font: "inherit",
|
|
203
|
-
fontSize: "0.875rem",
|
|
204
|
-
lineHeight: 1,
|
|
205
|
-
color: "var(--graview-ink-muted)",
|
|
206
|
-
background: "transparent",
|
|
207
|
-
border: "1px solid transparent",
|
|
208
|
-
borderRadius: 6,
|
|
209
|
-
boxShadow: "none",
|
|
210
|
-
cursor: "pointer",
|
|
211
|
-
};
|
|
212
|
-
//# sourceMappingURL=seat-panel.js.map
|
package/dist/seat-panel.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"seat-panel.js","sourceRoot":"","sources":["../src/seat-panel.tsx"],"names":[],"mappings":"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"}
|