@graview/primitives 0.1.30 → 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.
Files changed (161) hide show
  1. package/dist/app-bar.d.ts +2 -0
  2. package/dist/app-bar.d.ts.map +1 -1
  3. package/dist/app-bar.js +9 -2
  4. package/dist/app-bar.js.map +1 -1
  5. package/dist/chat.d.ts +8 -6
  6. package/dist/chat.d.ts.map +1 -1
  7. package/dist/chat.js +6 -3
  8. package/dist/chat.js.map +1 -1
  9. package/dist/default-views.d.ts.map +1 -1
  10. package/dist/default-views.js +24 -4
  11. package/dist/default-views.js.map +1 -1
  12. package/dist/draft-frame.d.ts.map +1 -1
  13. package/dist/draft-frame.js +29 -2
  14. package/dist/draft-frame.js.map +1 -1
  15. package/dist/editable.d.ts.map +1 -1
  16. package/dist/editable.js +42 -9
  17. package/dist/editable.js.map +1 -1
  18. package/dist/find.d.ts.map +1 -1
  19. package/dist/find.js +7 -6
  20. package/dist/find.js.map +1 -1
  21. package/dist/first-look-door.d.ts +2 -2
  22. package/dist/first-look-door.js +2 -2
  23. package/dist/first-look.d.ts.map +1 -1
  24. package/dist/first-look.js +7 -4
  25. package/dist/first-look.js.map +1 -1
  26. package/dist/frame.d.ts +1 -0
  27. package/dist/frame.d.ts.map +1 -1
  28. package/dist/frame.js +2 -0
  29. package/dist/frame.js.map +1 -1
  30. package/dist/index.d.ts +13 -2
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +13 -2
  33. package/dist/index.js.map +1 -1
  34. package/dist/inline-ai-door.d.ts +15 -0
  35. package/dist/inline-ai-door.d.ts.map +1 -0
  36. package/dist/inline-ai-door.js +54 -0
  37. package/dist/inline-ai-door.js.map +1 -0
  38. package/dist/inline-ai-env.d.ts +29 -0
  39. package/dist/inline-ai-env.d.ts.map +1 -0
  40. package/dist/inline-ai-env.js +22 -0
  41. package/dist/inline-ai-env.js.map +1 -0
  42. package/dist/inline-ai-menu.d.ts +58 -0
  43. package/dist/inline-ai-menu.d.ts.map +1 -0
  44. package/dist/inline-ai-menu.js +297 -0
  45. package/dist/inline-ai-menu.js.map +1 -0
  46. package/dist/lens/calendar-dates.d.ts.map +1 -1
  47. package/dist/lens/calendar-dates.js +12 -0
  48. package/dist/lens/calendar-dates.js.map +1 -1
  49. package/dist/lens/calendar-options.d.ts +1 -1
  50. package/dist/lens-keeping.js +2 -3
  51. package/dist/lens-keeping.js.map +1 -1
  52. package/dist/map-panel.js +51 -2
  53. package/dist/map-panel.js.map +1 -1
  54. package/dist/notice-place.d.ts +2 -2
  55. package/dist/notice-place.js +2 -2
  56. package/dist/notify-door.d.ts +57 -0
  57. package/dist/notify-door.d.ts.map +1 -0
  58. package/dist/notify-door.js +136 -0
  59. package/dist/notify-door.js.map +1 -0
  60. package/dist/notify-sheet.d.ts +27 -0
  61. package/dist/notify-sheet.d.ts.map +1 -0
  62. package/dist/notify-sheet.js +102 -0
  63. package/dist/notify-sheet.js.map +1 -0
  64. package/dist/pages.d.ts +15 -4
  65. package/dist/pages.d.ts.map +1 -1
  66. package/dist/pages.js +15 -4
  67. package/dist/pages.js.map +1 -1
  68. package/dist/primitives/measure.d.ts +10 -0
  69. package/dist/primitives/measure.d.ts.map +1 -1
  70. package/dist/primitives/measure.js +27 -7
  71. package/dist/primitives/measure.js.map +1 -1
  72. package/dist/quick-ask-desk.d.ts +38 -0
  73. package/dist/quick-ask-desk.d.ts.map +1 -0
  74. package/dist/quick-ask-desk.js +36 -0
  75. package/dist/quick-ask-desk.js.map +1 -0
  76. package/dist/quick-ask-door.d.ts +33 -0
  77. package/dist/quick-ask-door.d.ts.map +1 -0
  78. package/dist/quick-ask-door.js +70 -0
  79. package/dist/quick-ask-door.js.map +1 -0
  80. package/dist/quick-ask-setting.d.ts +9 -0
  81. package/dist/quick-ask-setting.d.ts.map +1 -0
  82. package/dist/quick-ask-setting.js +11 -0
  83. package/dist/quick-ask-setting.js.map +1 -0
  84. package/dist/quick-ask.d.ts +23 -0
  85. package/dist/quick-ask.d.ts.map +1 -0
  86. package/dist/quick-ask.js +327 -0
  87. package/dist/quick-ask.js.map +1 -0
  88. package/dist/record-interactions-door.d.ts +8 -0
  89. package/dist/record-interactions-door.d.ts.map +1 -0
  90. package/dist/record-interactions-door.js +42 -0
  91. package/dist/record-interactions-door.js.map +1 -0
  92. package/dist/record-interactions.d.ts +13 -0
  93. package/dist/record-interactions.d.ts.map +1 -0
  94. package/dist/record-interactions.js +9 -0
  95. package/dist/record-interactions.js.map +1 -0
  96. package/dist/scene-css.d.ts.map +1 -1
  97. package/dist/scene-css.js +47 -13
  98. package/dist/scene-css.js.map +1 -1
  99. package/dist/scene.d.ts +9 -2
  100. package/dist/scene.d.ts.map +1 -1
  101. package/dist/scene.js +8 -1
  102. package/dist/scene.js.map +1 -1
  103. package/dist/shell.d.ts +14 -25
  104. package/dist/shell.d.ts.map +1 -1
  105. package/dist/shell.js +5 -3
  106. package/dist/shell.js.map +1 -1
  107. package/dist/spec-views.d.ts.map +1 -1
  108. package/dist/spec-views.js +6 -3
  109. package/dist/spec-views.js.map +1 -1
  110. package/dist/stretched-link.d.ts +18 -0
  111. package/dist/stretched-link.d.ts.map +1 -0
  112. package/dist/stretched-link.js +47 -0
  113. package/dist/stretched-link.js.map +1 -0
  114. package/dist/timeline.d.ts.map +1 -1
  115. package/dist/timeline.js +23 -2
  116. package/dist/timeline.js.map +1 -1
  117. package/dist/when-input-door.d.ts +8 -0
  118. package/dist/when-input-door.d.ts.map +1 -0
  119. package/dist/when-input-door.js +19 -0
  120. package/dist/when-input-door.js.map +1 -0
  121. package/dist/when-input.d.ts +34 -0
  122. package/dist/when-input.d.ts.map +1 -0
  123. package/dist/when-input.js +122 -0
  124. package/dist/when-input.js.map +1 -0
  125. package/dist/when-picker-door.d.ts +6 -0
  126. package/dist/when-picker-door.d.ts.map +1 -0
  127. package/dist/when-picker-door.js +15 -0
  128. package/dist/when-picker-door.js.map +1 -0
  129. package/dist/when-picker.d.ts +16 -0
  130. package/dist/when-picker.d.ts.map +1 -0
  131. package/dist/when-picker.js +108 -0
  132. package/dist/when-picker.js.map +1 -0
  133. package/dist/workbench/activity.d.ts +4 -0
  134. package/dist/workbench/activity.d.ts.map +1 -1
  135. package/dist/workbench/activity.js +41 -12
  136. package/dist/workbench/activity.js.map +1 -1
  137. package/dist/workbench/agent-seat.d.ts.map +1 -1
  138. package/dist/workbench/agent-seat.js +5 -2
  139. package/dist/workbench/agent-seat.js.map +1 -1
  140. package/dist/workbench/ai-entries.d.ts +22 -0
  141. package/dist/workbench/ai-entries.d.ts.map +1 -0
  142. package/dist/workbench/ai-entries.js +75 -0
  143. package/dist/workbench/ai-entries.js.map +1 -0
  144. package/dist/workbench/ai-feed.d.ts +12 -0
  145. package/dist/workbench/ai-feed.d.ts.map +1 -0
  146. package/dist/workbench/ai-feed.js +14 -0
  147. package/dist/workbench/ai-feed.js.map +1 -0
  148. package/dist/workbench/answer-args.d.ts.map +1 -1
  149. package/dist/workbench/answer-args.js +23 -5
  150. package/dist/workbench/answer-args.js.map +1 -1
  151. package/dist/workbench/inspector.js +1 -1
  152. package/dist/workbench/inspector.js.map +1 -1
  153. package/package.json +6 -6
  154. package/dist/seat-field.d.ts +0 -58
  155. package/dist/seat-field.d.ts.map +0 -1
  156. package/dist/seat-field.js +0 -185
  157. package/dist/seat-field.js.map +0 -1
  158. package/dist/seat-panel.d.ts +0 -38
  159. package/dist/seat-panel.d.ts.map +0 -1
  160. package/dist/seat-panel.js +0 -212
  161. package/dist/seat-panel.js.map +0 -1
@@ -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
@@ -1 +0,0 @@
1
- {"version":3,"file":"seat-panel.js","sourceRoot":"","sources":["../src/seat-panel.tsx"],"names":[],"mappings":"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"}