@graview/primitives 0.1.64 → 0.1.65
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/README.md +1 -1
- package/dist/app-bar.js +1 -1
- package/dist/app-bar.js.map +1 -1
- package/dist/chat.js +1 -1
- package/dist/chat.js.map +1 -1
- package/dist/find.js +3 -3
- package/dist/find.js.map +1 -1
- package/dist/first-look.js +1 -1
- package/dist/first-look.js.map +1 -1
- package/dist/here.d.ts +1 -1
- package/dist/here.js +2 -2
- package/dist/here.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/inline-ai-menu.d.ts +4 -2
- package/dist/inline-ai-menu.d.ts.map +1 -1
- package/dist/inline-ai-menu.js +34 -8
- package/dist/inline-ai-menu.js.map +1 -1
- package/dist/kind-stop.d.ts.map +1 -1
- package/dist/kind-stop.js +204 -21
- package/dist/kind-stop.js.map +1 -1
- package/dist/lines-key.d.ts.map +1 -1
- package/dist/lines-key.js +22 -2
- package/dist/lines-key.js.map +1 -1
- package/dist/map-panel.js +98 -6
- package/dist/map-panel.js.map +1 -1
- package/dist/menu-rank.d.ts +25 -0
- package/dist/menu-rank.d.ts.map +1 -0
- package/dist/menu-rank.js +56 -0
- package/dist/menu-rank.js.map +1 -0
- package/dist/menu-told-door.d.ts +17 -0
- package/dist/menu-told-door.d.ts.map +1 -0
- package/dist/menu-told-door.js +49 -0
- package/dist/menu-told-door.js.map +1 -0
- package/dist/menu-told.d.ts +37 -0
- package/dist/menu-told.d.ts.map +1 -0
- package/dist/menu-told.js +66 -0
- package/dist/menu-told.js.map +1 -0
- package/dist/menu-words.d.ts +15 -0
- package/dist/menu-words.d.ts.map +1 -0
- package/dist/menu-words.js +28 -0
- package/dist/menu-words.js.map +1 -0
- package/dist/pages.d.ts +2 -0
- package/dist/pages.d.ts.map +1 -1
- package/dist/pages.js +2 -0
- package/dist/pages.js.map +1 -1
- package/dist/quick-ask-desk.d.ts +16 -0
- package/dist/quick-ask-desk.d.ts.map +1 -1
- package/dist/quick-ask-desk.js +20 -0
- package/dist/quick-ask-desk.js.map +1 -1
- package/dist/quick-ask-door.d.ts.map +1 -1
- package/dist/quick-ask-door.js +5 -0
- package/dist/quick-ask-door.js.map +1 -1
- package/dist/quick-ask-plan.d.ts +52 -0
- package/dist/quick-ask-plan.d.ts.map +1 -0
- package/dist/quick-ask-plan.js +112 -0
- package/dist/quick-ask-plan.js.map +1 -0
- package/dist/quick-ask.d.ts.map +1 -1
- package/dist/quick-ask.js +341 -19
- package/dist/quick-ask.js.map +1 -1
- package/dist/scene-css.d.ts.map +1 -1
- package/dist/scene-css.js +16 -6
- package/dist/scene-css.js.map +1 -1
- package/dist/scene-places.d.ts +3 -2
- package/dist/scene-places.d.ts.map +1 -1
- package/dist/scene-places.js +47 -8
- package/dist/scene-places.js.map +1 -1
- package/dist/scene.d.ts +2 -0
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +2 -0
- package/dist/scene.js.map +1 -1
- package/dist/section-better.d.ts +38 -0
- package/dist/section-better.d.ts.map +1 -0
- package/dist/section-better.js +411 -0
- package/dist/section-better.js.map +1 -0
- package/dist/section-door.d.ts +32 -0
- package/dist/section-door.d.ts.map +1 -0
- package/dist/section-door.js +32 -0
- package/dist/section-door.js.map +1 -0
- package/dist/section-menu.d.ts +18 -0
- package/dist/section-menu.d.ts.map +1 -0
- package/dist/section-menu.js +76 -0
- package/dist/section-menu.js.map +1 -0
- package/dist/section-outline.d.ts +8 -0
- package/dist/section-outline.d.ts.map +1 -0
- package/dist/section-outline.js +48 -0
- package/dist/section-outline.js.map +1 -0
- package/dist/section-words.d.ts +24 -0
- package/dist/section-words.d.ts.map +1 -0
- package/dist/section-words.js +91 -0
- package/dist/section-words.js.map +1 -0
- package/dist/shell.d.ts.map +1 -1
- package/dist/shell.js +2 -1
- package/dist/shell.js.map +1 -1
- package/dist/subject.js +2 -2
- package/dist/subject.js.map +1 -1
- package/dist/told-card.d.ts +66 -0
- package/dist/told-card.d.ts.map +1 -0
- package/dist/told-card.js +197 -0
- package/dist/told-card.js.map +1 -0
- package/dist/told-listed.d.ts +14 -0
- package/dist/told-listed.d.ts.map +1 -0
- package/dist/told-listed.js +46 -0
- package/dist/told-listed.js.map +1 -0
- package/dist/told-panel-door.d.ts +17 -0
- package/dist/told-panel-door.d.ts.map +1 -0
- package/dist/told-panel-door.js +6 -0
- package/dist/told-panel-door.js.map +1 -0
- package/dist/told-panel.d.ts +19 -0
- package/dist/told-panel.d.ts.map +1 -0
- package/dist/told-panel.js +83 -0
- package/dist/told-panel.js.map +1 -0
- package/dist/told-ui.d.ts +5 -0
- package/dist/told-ui.d.ts.map +1 -0
- package/dist/told-ui.js +12 -0
- package/dist/told-ui.js.map +1 -0
- package/dist/workbench/ai-entries.d.ts.map +1 -1
- package/dist/workbench/ai-entries.js +23 -2
- package/dist/workbench/ai-entries.js.map +1 -1
- package/dist/workbench/back-out.js +1 -1
- package/dist/workbench/back-out.js.map +1 -1
- package/dist/workbench/inspector.d.ts.map +1 -1
- package/dist/workbench/inspector.js +218 -18
- package/dist/workbench/inspector.js.map +1 -1
- package/package.json +6 -6
|
@@ -190,7 +190,7 @@ export function OverviewButton() {
|
|
|
190
190
|
*/
|
|
191
191
|
const label = overview ? "Close the map" : "Up";
|
|
192
192
|
const said = overview && landing ? `Close the map, down to ${landing}` : label;
|
|
193
|
-
return (_jsxs("button", { type: "button", "data-testid": "overview", className: "graview-altitude-control", "aria-pressed": overview, "aria-label": said, title: overview ? said : "Up —
|
|
193
|
+
return (_jsxs("button", { type: "button", "data-testid": "overview", className: "graview-altitude-control", "aria-pressed": overview, "aria-label": said, title: overview ? said : "Up — everything, from above",
|
|
194
194
|
// A view state, so it is a URL, the back button works, and the cards
|
|
195
195
|
// already on screen fly out into the ring rather than being replaced.
|
|
196
196
|
onClick: () => (overview ? descend() : go(withOverview(view, true))),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"back-out.js","sourceRoot":"","sources":["../../src/workbench/back-out.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAAC,OAAoB,EAAE,IAAmB,EAAE,KAAK,GAAG,EAAE;IACnF,MAAM,OAAO,GAAG,CAAC,SAAiB,EAAE,EAAE;QACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC;QACtC,MAAM,SAAS,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,QAAQ,CAAC,IAAI,IAAI,MAAM,KAAK,OAAO,CAAC;QACpF,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,IAAI,SAAS,GAAG,CAAC;gBAAE,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACtE,MAAM,MAAM,GACV,CAAC,OAAO,KAAK,IAAI;YACf,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAc,uBAAuB,OAAO,IAAI,CAAC;gBACxE,QAAQ,CAAC,aAAa,CAAc,uBAAuB,OAAO,IAAI,CAAC,EAAE,OAAO,CAAc,qBAAqB,CAAC,CAAC,CAAC;YAC1H,QAAQ,CAAC,aAAa,CAAc,+BAA+B,CAAC,CAAC;QACvE,MAAM,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC;IACF,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC;AAGD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,OAAO,CAAC,EAAE,IAAI,EAAoC;IAChE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,aAAa,EAAE,CAAC;IAClD,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,EAAE,CAAC;IAClC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,CAAC;IAC5C,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,SAAS,EAAE,CAAC;IACzC,wEAAwE;IACxE,6BAA6B;IAC7B,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC;IAExE,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,CAAC,KAAoB,EAAE,EAAE;YACrC,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;gBAAE,OAAO;YACnC,wDAAwD;YACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC;YACtC,IAAI,MAAM,YAAY,gBAAgB,IAAI,MAAM,YAAY,mBAAmB;gBAAE,OAAO;YACxF;;;;;;;;;;;;;eAaG;YACH,sFAAsF;YACtF,IAAI,QAAQ,CAAC,aAAa,CAAC,sCAAsC,CAAC;gBAAE,OAAO;YAC3E,0EAA0E;YAC1E,MAAM,OAAO,GACX,MAAM,YAAY,WAAW,IAAI,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YAClG,IAAI,OAAO;gBAAE,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;YAC5D;;;;;;;;eAQG;YACH,IAAI,UAAU;gBAAE,IAAI,EAAE,CAAC;YACvB,oEAAoE;YACpE,oDAAoD;iBAC/C,IAAI,IAAI,CAAC,CAAC;gBAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YACzC,qEAAqE;YACrE,iEAAiE;iBAC5D,IAAI,QAAQ;gBAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;iBAC5C,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,EAAE,CAAC;YACvC,uEAAuE;YACvE,oCAAoC;iBAC/B,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;YACzB,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ;gBAAE,IAAI,CAAC,IAAI,CAAC,CAAC;iBAChC,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAChD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAClE,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;IAEhF,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,MAAM,UAAU,cAAc;IAC5B,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,aAAa,EAAE,CAAC;IACrC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,UAAU,EAAE,CAAC;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC;IACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACpG,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,KAA0B,EAAE,QAAQ,CAAC,CAAC;IACtF,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC;IACF;;;;;OAKG;IACH,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;QACpB,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC;;;;;WAKG;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,KAAK,GACT,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACxE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAChF,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,KAAK,CAAC;QAC9B,IAAI,IAAI;YAAE,OAAO,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACjD,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC;IACpD,CAAC,CAAC,EAAE,CAAC;IACL;;;;OAIG;IACH,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;IAChD,MAAM,IAAI,GAAG,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/E,OAAO,CACL,kBACE,IAAI,EAAC,QAAQ,iBACD,UAAU,EACtB,SAAS,EAAC,0BAA0B,kBACtB,QAAQ,gBACV,IAAI,EAChB,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"back-out.js","sourceRoot":"","sources":["../../src/workbench/back-out.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/workbench/inspector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4E,KAAK,SAAS,EAAE,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAKrI,OAAO,EAAgI,KAAK,gBAAgB,EAAoB,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/workbench/inspector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4E,KAAK,SAAS,EAAE,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAKrI,OAAO,EAAgI,KAAK,gBAAgB,EAAoB,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAUxN,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,aAAa,CAAC;AAErB;;;;;;GAMG;AACH;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,OAAO,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,SAAS,CAAC,GAAG,IAAI,CAGvI;AAED,wBAAgB,aAAa,CAAC,EAAE,SAAmB,EAAE,MAAa,EAAE,GAAE;IAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,sCAKhJ"}
|
|
@@ -10,6 +10,10 @@ import { Fragment, useEffect, useLayoutEffect, useMemo, useRef, useState } from
|
|
|
10
10
|
import { AnswerArgs, nameOf } from "./answer-args.js";
|
|
11
11
|
import { VISUALLY_HIDDEN } from "../primitives/index.js";
|
|
12
12
|
import { ROVING_ITEM, useRoving } from "../roving.js";
|
|
13
|
+
import { menuMatches } from "../menu-words.js";
|
|
14
|
+
import { MENU_RANK_FLOOR, useFastRank } from "../menu-rank.js";
|
|
15
|
+
import { TOLD_SUGGESTED_MOST, useToldSuggestions } from "../menu-told-door.js";
|
|
16
|
+
import { openQuickAsk, preloadQuickAsk, useQuickAskDrawn, whereMenuStands } from "../quick-ask-desk.js";
|
|
13
17
|
import "../frame.js"; // A door: tied to what the page drew first (TIED DOORS, packages/primitives/src/frame.ts).
|
|
14
18
|
/**
|
|
15
19
|
* The pane itself (`Inspector` in `./inspector-door.tsx` draws it): what is
|
|
@@ -44,19 +48,29 @@ export function InspectorPane({ placement = "float", chosen = true } = {}) {
|
|
|
44
48
|
* "Acts…", which opens the same menu. Measured from the scene's box, so it
|
|
45
49
|
* stands in the box it is drawn in; under Up and the key, in the picture's
|
|
46
50
|
* column of controls, because at the picture's foot a notice stood over it.
|
|
51
|
+
* On a phone's ground Up and the Key share a row above the picture, and a
|
|
52
|
+
* card under it takes the width: "Acts…" stands in that row too, to the
|
|
53
|
+
* left of them, where it covers no card's "Open".
|
|
47
54
|
*/
|
|
48
55
|
function ChosenActs() {
|
|
49
56
|
const { store, setMenuAt, view } = useGraview();
|
|
50
57
|
const { selection } = useSelection();
|
|
51
58
|
const mark = useRef(null);
|
|
52
59
|
const [width, setWidth] = useState(null);
|
|
60
|
+
// How far from the right the row's leftmost control (the Key, else Up) stands: "Acts…" goes to its left.
|
|
61
|
+
const [rowRight, setRowRight] = useState(null);
|
|
53
62
|
useLayoutEffect(() => {
|
|
54
63
|
const parent = mark.current?.offsetParent ?? mark.current?.parentElement;
|
|
55
64
|
if (!parent)
|
|
56
65
|
return;
|
|
57
|
-
const
|
|
66
|
+
const box = parent.getBoundingClientRect();
|
|
67
|
+
const measured = Math.round(box.width);
|
|
58
68
|
if (measured !== width)
|
|
59
69
|
setWidth(measured);
|
|
70
|
+
const row = [...parent.querySelectorAll('[data-testid="lines-key"][data-graview-up-row], [data-testid="overview"]')].map((one) => one.getBoundingClientRect()).filter((one) => one.width > 0 && one.top - box.top < 40);
|
|
71
|
+
const right = row.length > 0 ? Math.round(box.right - Math.min(...row.map((one) => one.left)) + 8) : null;
|
|
72
|
+
if (right !== rowRight)
|
|
73
|
+
setRowRight(right);
|
|
60
74
|
});
|
|
61
75
|
const one = selection.length === 1 && !view.overview ? store.graph.getNode(selection[0]) : undefined;
|
|
62
76
|
if (!one || width === null || width >= RAIL_NEEDS)
|
|
@@ -64,12 +78,12 @@ function ChosenActs() {
|
|
|
64
78
|
return (_jsx("button", { type: "button", ref: mark, "data-testid": "chosen-acts", "aria-label": `What can be done with ${nameOf(store, one.id)}`, "aria-haspopup": "menu", onClick: (event) => {
|
|
65
79
|
const at = event.currentTarget.getBoundingClientRect();
|
|
66
80
|
setMenuAt({ x: Math.round(at.right), y: Math.round(at.bottom + 4), on: one.id });
|
|
67
|
-
}, style: { position: "absolute", right: "calc(14px + var(--graview-dock, 0px))", top: 98, zIndex: "var(--graview-layer-overview, 10)", minHeight: 30, padding: "0 12px", borderRadius: 8, fontSize: "0.8125rem", background: "var(--graview-float)", boxShadow: "var(--graview-lift-low)" }, children: "Acts\u2026" }));
|
|
81
|
+
}, style: { position: "absolute", ...(rowRight !== null ? { right: rowRight, top: 14, minHeight: 38 } : { right: "calc(14px + var(--graview-dock, 0px))", top: 98 }), zIndex: "var(--graview-layer-overview, 10)", ...(rowRight === null ? { minHeight: 30 } : {}), padding: "0 12px", borderRadius: 8, fontSize: "0.8125rem", background: "var(--graview-float)", boxShadow: "var(--graview-lift-low)" }, children: "Acts\u2026" }));
|
|
68
82
|
}
|
|
69
83
|
/** Whether the picture has room for a rail beside it: the scene's own box, not the window's. */
|
|
70
84
|
const RAIL_NEEDS = 14 + 236 + 14 + 300;
|
|
71
85
|
function Pane({ placement }) {
|
|
72
|
-
const { store, menuAt, setMenuAt, view, signIn } = useGraview();
|
|
86
|
+
const { store, menuAt, setMenuAt, view, signIn, aiDesk, ai, principal } = useGraview();
|
|
73
87
|
/*
|
|
74
88
|
* The pane is positioned within the SCENE'S BOX, not the window. It was
|
|
75
89
|
* fixed to the viewport, which put it at the page's edge when the scene
|
|
@@ -222,7 +236,7 @@ function Pane({ placement }) {
|
|
|
222
236
|
*/
|
|
223
237
|
const target = menuAt === null
|
|
224
238
|
? null
|
|
225
|
-
: { face: menuAt.face ?? "scene", on: menuAt.on, about: selection, field: menuAt.field, place: menuAt.place, href: menuAt.href, act: menuAt.act, column: menuAt.column, element: menuAt.returnTo };
|
|
239
|
+
: { face: menuAt.face ?? "scene", on: menuAt.on, about: selection, field: menuAt.field, place: menuAt.place, href: menuAt.href, act: menuAt.act, column: menuAt.column, ...(menuAt.section ? { section: menuAt.section } : {}), element: menuAt.returnTo };
|
|
226
240
|
const beside = useMenuSections(target);
|
|
227
241
|
/*
|
|
228
242
|
* Whether the derivation is withholding a creating act for want of the
|
|
@@ -249,7 +263,48 @@ function Pane({ placement }) {
|
|
|
249
263
|
* and the eleventh act of a menu was twenty-one Tabs from the key that
|
|
250
264
|
* opened it (walks XI and XII).
|
|
251
265
|
*/
|
|
252
|
-
|
|
266
|
+
/*
|
|
267
|
+
* In the menu a letter is typed into the menu's own field instead (Roadmap
|
|
268
|
+
* f-menu-type-anything), so the menu's list takes no letters: only the
|
|
269
|
+
* strip keeps the type-ahead.
|
|
270
|
+
*/
|
|
271
|
+
const roving = useRoving({ letters: menuAt === null });
|
|
272
|
+
/*
|
|
273
|
+
* WHAT IS TYPED IN THE MENU (Roadmap f-menu-type-anything): every row —
|
|
274
|
+
* the acts, the withheld, Open, Copy link, Show, Inspect — narrowed to
|
|
275
|
+
* those whose words begin with it (`menuMatches`), Enter running the one
|
|
276
|
+
* lit; and, where the host lent the app a model, the words asked of it
|
|
277
|
+
* about what the menu was opened on, as the last row. A new menu starts
|
|
278
|
+
* with nothing typed.
|
|
279
|
+
*/
|
|
280
|
+
const [typed, setTyped] = useState("");
|
|
281
|
+
const typeField = useRef(null);
|
|
282
|
+
useEffect(() => setTyped(""), [menuAt]);
|
|
283
|
+
/* Asked where the quick ask is drawn at all: a host's model, AI not off, the app's setting on. */
|
|
284
|
+
const asks = useQuickAskDrawn(aiDesk);
|
|
285
|
+
/* What worked before, like the words typed here (Roadmap f-menu-learns): kept tellings re-aimed at what the menu is on, ranked with the rows. */
|
|
286
|
+
const toldLike = useToldSuggestions(asks ? ai : undefined, store, principal, menuAt === null ? "" : typed, menuAt?.on, menuAt);
|
|
287
|
+
/* The Fast slot's ranking of every row the menu could show, for the words typed, once the typing rests (`useFastRank`). */
|
|
288
|
+
const rankRows = useMemo(() => menuAt === null
|
|
289
|
+
? []
|
|
290
|
+
: [
|
|
291
|
+
...beside.start.flatMap((section) => (section.items ?? []).map((item) => ({ key: `item:${item.id}`, label: item.label }))),
|
|
292
|
+
...affordances.map((affordance) => ({ key: `act:${affordance.id}`, label: affordance.label })),
|
|
293
|
+
...beside.end.flatMap((section) => (section.items ?? []).map((item) => ({ key: `item:${item.id}`, label: item.label }))),
|
|
294
|
+
...toldLike.map((one) => ({ key: one.key, label: one.label })),
|
|
295
|
+
], [menuAt, beside, affordances, toldLike]);
|
|
296
|
+
const fastRanked = useFastRank(ai, menuAt === null ? "" : typed, rankRows);
|
|
297
|
+
/*
|
|
298
|
+
* NOTHING MOVES UNDER A POINTER ON A ROW: while it rests on one, a ranking
|
|
299
|
+
* that arrives is held, and the rows stay as they were drawn; it applies
|
|
300
|
+
* once the pointer is off the rows. What the person types still narrows
|
|
301
|
+
* at once — that is theirs.
|
|
302
|
+
*/
|
|
303
|
+
const [onRow, setOnRow] = useState(false);
|
|
304
|
+
const heldRank = useRef({ words: "", rank: null });
|
|
305
|
+
if (!onRow)
|
|
306
|
+
heldRank.current = { words: typed.trim(), rank: fastRanked };
|
|
307
|
+
const fastRank = onRow ? (heldRank.current.words === typed.trim() ? heldRank.current.rank : null) : fastRanked;
|
|
253
308
|
/*
|
|
254
309
|
* A REFUSAL IS A RESULT, said where the button was pressed.
|
|
255
310
|
*
|
|
@@ -469,8 +524,102 @@ function Pane({ placement }) {
|
|
|
469
524
|
const matched = searchable && trimmedQuery.length > 0
|
|
470
525
|
? arranged.filter((entry) => `${entry.label} ${entry.why}`.toLowerCase().includes(trimmedQuery))
|
|
471
526
|
: null;
|
|
472
|
-
|
|
473
|
-
const
|
|
527
|
+
/* Typed in the menu: its words, and whether a row's label begins with them. */
|
|
528
|
+
const words = atPointer ? typed.trim() : "";
|
|
529
|
+
/* A row fits what is typed when its words begin with it, or when the Fast slot finds it likely enough. */
|
|
530
|
+
const fitsTyped = (key, label) => words === "" || menuMatches(label, words) || (fastRank?.get(key) ?? 0) >= MENU_RANK_FLOOR;
|
|
531
|
+
const shown = (matched ?? (expanded || atPointer ? arranged : arranged.slice(0, fits))).filter((entry) => fitsTyped(`act:${entry.id}`, entry.label));
|
|
532
|
+
const hidden = matched || words ? 0 : arranged.length - shown.length;
|
|
533
|
+
const withheldShown = words ? withheld.filter((action) => fitsTyped(`act:${action.id}`, action.label)) : withheld;
|
|
534
|
+
/* A section's rows narrowed to what is typed; one drawn in place of rows (the AI's) stands down while words are typed, the Ask row below standing for it. */
|
|
535
|
+
const narrowed = (list) => words === ""
|
|
536
|
+
? list
|
|
537
|
+
: list.flatMap((section) => {
|
|
538
|
+
const items = (section.items ?? []).filter((item) => fitsTyped(`item:${item.id}`, item.label));
|
|
539
|
+
return items.length > 0 ? [{ id: section.id, ...(section.heading ? { heading: section.heading } : {}), items }] : [];
|
|
540
|
+
});
|
|
541
|
+
const startSections = narrowed(beside.start);
|
|
542
|
+
const endSections = narrowed(beside.end);
|
|
543
|
+
/* What the words are asked about, said in the Ask row: the menu's title, the one record, else "this". */
|
|
544
|
+
const askedAbout = menuAt?.title ?? (selection.length === 1 ? nameOf(store, selection[0]) : selection.length > 1 ? `${selection.length} selected` : "this");
|
|
545
|
+
const askRow = atPointer && words !== "" && asks;
|
|
546
|
+
/* Up to two that worked before, the Fast slot's likeliest first once it has answered. */
|
|
547
|
+
const toldShown = atPointer && words !== "" ? (fastRank === null ? toldLike : [...toldLike].sort((a, b) => (fastRank.get(b.key) ?? 0) - (fastRank.get(a.key) ?? 0))).slice(0, TOLD_SUGGESTED_MOST) : [];
|
|
548
|
+
/*
|
|
549
|
+
* THE ROW ENTER RUNS FROM THE FIELD, lit: the first that fits the words
|
|
550
|
+
* — never one that cannot be taken back, which keeps its aimed press —
|
|
551
|
+
* else the Ask row. Nothing is lit with nothing typed.
|
|
552
|
+
*/
|
|
553
|
+
/* The Fast slot's best among the rows shown, when it has answered for these words. */
|
|
554
|
+
const shownKeys = [
|
|
555
|
+
...startSections.flatMap((section) => (section.items ?? []).map((item) => `item:${item.id}`)),
|
|
556
|
+
...shown.filter((entry) => !entry.destructive).map((entry) => `act:${entry.id}`),
|
|
557
|
+
...endSections.flatMap((section) => (section.items ?? []).map((item) => `item:${item.id}`)),
|
|
558
|
+
...toldShown.map((one) => one.key),
|
|
559
|
+
];
|
|
560
|
+
const ranked = fastRank === null ? undefined : [...shownKeys].sort((a, b) => (fastRank.get(b) ?? 0) - (fastRank.get(a) ?? 0)).find((key) => (fastRank.get(key) ?? 0) >= MENU_RANK_FLOOR);
|
|
561
|
+
const lit = words === ""
|
|
562
|
+
? null
|
|
563
|
+
: (ranked ??
|
|
564
|
+
startSections.flatMap((section) => (section.items ?? []).map((item) => `item:${item.id}`))[0] ??
|
|
565
|
+
shown.filter((entry) => !entry.destructive).map((entry) => `act:${entry.id}`)[0] ??
|
|
566
|
+
endSections.flatMap((section) => (section.items ?? []).map((item) => `item:${item.id}`))[0] ??
|
|
567
|
+
(askRow ? "ask" : null));
|
|
568
|
+
const ask = () => {
|
|
569
|
+
if (!menuAt)
|
|
570
|
+
return;
|
|
571
|
+
const asked = words;
|
|
572
|
+
const back = menuAt.returnTo ?? null;
|
|
573
|
+
// The card opens where the menu stood, read before the menu goes.
|
|
574
|
+
const from = whereMenuStands(asideRef.current);
|
|
575
|
+
setMenuAt(null);
|
|
576
|
+
// The quick ask's card, where the menu stood, answering the words at once: its thinking marked on the thing itself.
|
|
577
|
+
openQuickAsk(aiDesk, { pointed: { on: menuAt.on, about: selection, field: menuAt.field, place: menuAt.place }, asked, returnTo: back, ...(from ? { from } : {}) });
|
|
578
|
+
};
|
|
579
|
+
/* A suggestion taken: its words asked on the card, about what the menu is on, previewed like any plan — never applied from the menu. */
|
|
580
|
+
const takeTold = (one) => {
|
|
581
|
+
if (!menuAt)
|
|
582
|
+
return;
|
|
583
|
+
const back = menuAt.returnTo ?? null;
|
|
584
|
+
const from = whereMenuStands(asideRef.current);
|
|
585
|
+
setMenuAt(null);
|
|
586
|
+
// Asked as the plain act the row says, where the menu stood: where it came from is the Studio's to say, never the card's.
|
|
587
|
+
openQuickAsk(aiDesk, { pointed: { on: menuAt.on, about: selection, field: menuAt.field, place: menuAt.place }, asked: one.label, suggested: one.telling.id, returnTo: back, ...(from ? { from } : {}) });
|
|
588
|
+
};
|
|
589
|
+
/* The menu's rows the keyboard walks, in the order they are drawn: not a disabled one, nor a field of a form an act opened. */
|
|
590
|
+
const walkable = () => [...(asideRef.current?.querySelectorAll("[data-affordance]:not([disabled]), [data-menu-item]") ?? [])].filter((row) => row.closest("[data-graview-asking], [hidden]") === null);
|
|
591
|
+
const litRow = () => asideRef.current?.querySelector("[data-menu-lit]") ?? null;
|
|
592
|
+
/*
|
|
593
|
+
* A LETTER TYPED ANYWHERE IN THE MENU GOES INTO ITS FIELD, the keyboard
|
|
594
|
+
* with it: the menu opens with the keyboard on its first row, so the
|
|
595
|
+
* arrows walk the rows as they always did, and on a phone no keyboard
|
|
596
|
+
* rises until the field is tapped. Space still presses the row it is on;
|
|
597
|
+
* a form an act opened in the menu types its own answers; the arrow up
|
|
598
|
+
* from the first row goes back to the field.
|
|
599
|
+
*/
|
|
600
|
+
const typeInto = (event) => {
|
|
601
|
+
const target = event.target;
|
|
602
|
+
const field = typeField.current;
|
|
603
|
+
if (!field || target === field || event.metaKey || event.ctrlKey || event.altKey)
|
|
604
|
+
return;
|
|
605
|
+
if (target.closest("[data-graview-asking]") || typingIn(target))
|
|
606
|
+
return;
|
|
607
|
+
const typing = event.key.length === 1 && event.key !== " ";
|
|
608
|
+
if (typing || (event.key === "Backspace" && typed !== "")) {
|
|
609
|
+
event.preventDefault();
|
|
610
|
+
event.stopPropagation();
|
|
611
|
+
if (typing && typed === "" && aiDesk)
|
|
612
|
+
preloadQuickAsk(aiDesk);
|
|
613
|
+
setTyped((was) => (typing ? was + event.key : was.slice(0, -1)));
|
|
614
|
+
field.focus({ preventScroll: true });
|
|
615
|
+
return;
|
|
616
|
+
}
|
|
617
|
+
if (event.key === "ArrowUp" && walkable()[0] === target) {
|
|
618
|
+
event.preventDefault();
|
|
619
|
+
event.stopPropagation();
|
|
620
|
+
field.focus({ preventScroll: true });
|
|
621
|
+
}
|
|
622
|
+
};
|
|
474
623
|
/*
|
|
475
624
|
* GROUPED BY WHAT THEY ANSWER. A repair arrives carrying the violation
|
|
476
625
|
* that produced it, and without that sentence over it, "Cut X from
|
|
@@ -547,7 +696,13 @@ function Pane({ placement }) {
|
|
|
547
696
|
// Somewhere else to go means they went there on purpose.
|
|
548
697
|
if (event.relatedTarget !== null)
|
|
549
698
|
keptFocus.current = null;
|
|
550
|
-
}, onMouseDown: (event) => event.stopPropagation(),
|
|
699
|
+
}, onMouseDown: (event) => event.stopPropagation(), onKeyDownCapture: atPointer ? (event) => typeInto(event) : undefined, onPointerMove: atPointer
|
|
700
|
+
? (event) => {
|
|
701
|
+
const row = event.target.closest?.("[data-menu-item], [data-affordance]") != null;
|
|
702
|
+
if (row !== onRow)
|
|
703
|
+
setOnRow(row);
|
|
704
|
+
}
|
|
705
|
+
: undefined, onPointerLeave: atPointer && onRow ? () => setOnRow(false) : undefined, style: {
|
|
551
706
|
/*
|
|
552
707
|
* Above the jacked-in page, not only above the scene.
|
|
553
708
|
*
|
|
@@ -666,7 +821,41 @@ function Pane({ placement }) {
|
|
|
666
821
|
fontSize: "0.8125rem",
|
|
667
822
|
lineHeight: 1.45,
|
|
668
823
|
color: "var(--graview-ink-muted)",
|
|
669
|
-
}, children: [observation.text, observation === said[1] && said.length > 2 ? (_jsxs("span", { style: { color: "var(--graview-ink-faint)" }, children: [" +", said.length - 2] })) : null] }, observation.id))) })) : null, atPointer ?
|
|
824
|
+
}, children: [observation.text, observation === said[1] && said.length > 2 ? (_jsxs("span", { style: { color: "var(--graview-ink-faint)" }, children: [" +", said.length - 2] })) : null] }, observation.id))) })) : null, atPointer ? (_jsx("input", { ref: typeField, type: "text", "data-testid": "menu-type", "data-graview-not-first": "", value: typed, onChange: (event) => {
|
|
825
|
+
// The first letter fetches what Enter will need; the filter itself never waits on it.
|
|
826
|
+
if (typed === "" && event.target.value !== "" && aiDesk)
|
|
827
|
+
preloadQuickAsk(aiDesk);
|
|
828
|
+
setTyped(event.target.value);
|
|
829
|
+
}, onKeyDown: (event) => {
|
|
830
|
+
if (event.key === "Enter") {
|
|
831
|
+
event.preventDefault();
|
|
832
|
+
// As Enter on the row itself: the keyboard on it first, so a form the act opens takes the keyboard from it.
|
|
833
|
+
const row = litRow();
|
|
834
|
+
row?.focus({ preventScroll: true });
|
|
835
|
+
row?.click();
|
|
836
|
+
}
|
|
837
|
+
else if (event.key === "ArrowDown") {
|
|
838
|
+
event.preventDefault();
|
|
839
|
+
(litRow() ?? walkable()[0])?.focus();
|
|
840
|
+
}
|
|
841
|
+
else if (event.key === "Escape" && typed !== "") {
|
|
842
|
+
// The words go first; the next Escape puts the menu away.
|
|
843
|
+
event.preventDefault();
|
|
844
|
+
event.stopPropagation();
|
|
845
|
+
setTyped("");
|
|
846
|
+
}
|
|
847
|
+
}, placeholder: asks ? "Type to filter, or tell Graview…" : "Type to filter…", "aria-label": asks ? `Filter what can be done here, or tell Graview what to do about ${askedAbout}` : "Filter what can be done here", autoComplete: "off", autoCorrect: "off", spellCheck: false, enterKeyHint: "go", style: {
|
|
848
|
+
boxSizing: "border-box",
|
|
849
|
+
width: "100%",
|
|
850
|
+
font: "inherit",
|
|
851
|
+
// A phone zooms into a field set under 16px.
|
|
852
|
+
fontSize: "max(1rem, 16px)",
|
|
853
|
+
padding: "5px 9px",
|
|
854
|
+
borderRadius: 8,
|
|
855
|
+
border: "1px solid var(--graview-edge)",
|
|
856
|
+
background: "var(--graview-panel)",
|
|
857
|
+
color: "var(--graview-ink)",
|
|
858
|
+
} })) : null, atPointer ? startSections.map((section) => _jsx(SectionDrawn, { section: section, lit: lit, close: () => setMenuAt(null) }, section.id)) : null, failed ? (_jsx("p", { "data-testid": "refused", style: { margin: 0, fontSize: "0.8125rem", lineHeight: 1.45, color: "var(--graview-warn)" }, children: failed })) : null, searchable ? (_jsx("input", { "data-testid": "action-filter", value: query, onChange: (event) => setQuery(event.target.value), placeholder: `Filter ${arranged.length} actions…`, "aria-label": "Filter actions", onKeyDown: (event) => {
|
|
670
859
|
if (event.key === "Escape") {
|
|
671
860
|
// Clearing the filter must not also clear the selection —
|
|
672
861
|
// the document-level Escape stays out of it either way.
|
|
@@ -698,7 +887,7 @@ function Pane({ placement }) {
|
|
|
698
887
|
border: "1px solid var(--graview-edge)",
|
|
699
888
|
background: "var(--graview-panel)",
|
|
700
889
|
color: "var(--graview-ink)",
|
|
701
|
-
} })) : null, matched !== null && matched.length === 0 ? (_jsxs("p", { "data-testid": "no-matches", style: { margin: 0, fontSize: "0.8125rem", lineHeight: 1.45, color: "var(--graview-ink-muted)" }, children: ["Nothing offered here matches \u201C", query.trim(), "\u201D."] })) : null, gain && affordances.length === 0 ? null : affordances.length === 0 && !waiting && selection.length === 0 ? null : affordances.length === 0 && !waiting ? (
|
|
890
|
+
} })) : null, matched !== null && matched.length === 0 ? (_jsxs("p", { "data-testid": "no-matches", style: { margin: 0, fontSize: "0.8125rem", lineHeight: 1.45, color: "var(--graview-ink-muted)" }, children: ["Nothing offered here matches \u201C", query.trim(), "\u201D."] })) : null, (words !== "" && shown.length === 0) || (gain && affordances.length === 0) ? null : affordances.length === 0 && !waiting && selection.length === 0 ? null : affordances.length === 0 && !waiting ? (
|
|
702
891
|
/*
|
|
703
892
|
* An empty action list is a RESULT, not a blank space. Saying which
|
|
704
893
|
* kind has no mutations declaring it as a subject is the same honesty
|
|
@@ -759,7 +948,7 @@ function Pane({ placement }) {
|
|
|
759
948
|
event.preventDefault();
|
|
760
949
|
event.stopPropagation();
|
|
761
950
|
to.focus();
|
|
762
|
-
}, children: [_jsxs("button", { type: "button", [ROVING_ITEM]: "", "data-affordance": affordance.id, "data-rank": affordance.rank, "data-graview-destructive": affordance.destructive || undefined, "aria-pressed": pending === affordance.id, title: affordance.why, style: {
|
|
951
|
+
}, children: [_jsxs("button", { type: "button", [ROVING_ITEM]: "", "data-affordance": affordance.id, "data-rank": affordance.rank, "data-graview-destructive": affordance.destructive || undefined, "data-menu-lit": lit === `act:${affordance.id}` || undefined, "aria-pressed": pending === affordance.id, title: affordance.why, style: {
|
|
763
952
|
padding: "5px 10px",
|
|
764
953
|
fontSize: "0.875rem",
|
|
765
954
|
borderRadius: 8,
|
|
@@ -789,13 +978,14 @@ function Pane({ placement }) {
|
|
|
789
978
|
// pressed — and the ranking has already put it last.
|
|
790
979
|
...(affordance.destructive ? { color: "var(--graview-warn)" } : {}),
|
|
791
980
|
...(pending === affordance.id ? { color: "var(--graview-accent)" } : {}),
|
|
981
|
+
...(lit === `act:${affordance.id}` ? LIT_STYLE : {}),
|
|
792
982
|
}, onClick: () => {
|
|
793
983
|
if (affordance.open.length > 0) {
|
|
794
984
|
setPending(pending === affordance.id ? null : affordance.id);
|
|
795
985
|
return;
|
|
796
986
|
}
|
|
797
987
|
act(affordance);
|
|
798
|
-
}, children: [affordance.label, affordance.open.length > 0 ? (_jsx("span", { style: { color: "var(--graview-ink-faint)" }, children: " \u2026" })) : null, matched?.length === 1 &&
|
|
988
|
+
}, children: [affordance.label, affordance.open.length > 0 ? (_jsx("span", { style: { color: "var(--graview-ink-faint)" }, children: " \u2026" })) : null, lit === `act:${affordance.id}` ? ENTER_MARK : null, matched?.length === 1 &&
|
|
799
989
|
matched[0]?.id === affordance.id &&
|
|
800
990
|
!affordance.destructive ? (
|
|
801
991
|
// The searcher's promise, made visible exactly when
|
|
@@ -838,7 +1028,7 @@ function Pane({ placement }) {
|
|
|
838
1028
|
title: `Show all ${affordances.length} actions`, style: { padding: "4px 10px", fontSize: "0.875rem", borderRadius: 8 }, children: ["Show ", hidden, " more"] }) })) : null] })), gain ? (_jsx("button", { type: "button", "data-testid": "sign-in", onClick: () => {
|
|
839
1029
|
setMenuAt(null);
|
|
840
1030
|
gain.run();
|
|
841
|
-
}, style: { padding: "5px 10px", fontSize: "0.875rem", borderRadius: 8, width: "100%", textAlign: "left" }, children: gain.label })) : null,
|
|
1031
|
+
}, style: { padding: "5px 10px", fontSize: "0.875rem", borderRadius: 8, width: "100%", textAlign: "left" }, children: gain.label })) : null, withheldShown.length > 0 ? (_jsxs("ul", { "data-testid": "withheld", style: {
|
|
842
1032
|
margin: 0,
|
|
843
1033
|
padding: 0,
|
|
844
1034
|
listStyle: "none",
|
|
@@ -846,7 +1036,7 @@ function Pane({ placement }) {
|
|
|
846
1036
|
flexDirection: "column",
|
|
847
1037
|
flexWrap: "nowrap",
|
|
848
1038
|
gap: 2,
|
|
849
|
-
}, children: [
|
|
1039
|
+
}, children: [withheldShown.slice(0, atPointer || allWithheld ? withheldShown.length : 3).map((action) => (_jsxs("li", { style: { display: "grid", gap: 2 }, children: [_jsx("button", { type: "button", disabled: true, "data-affordance": action.id, "data-rank": action.rank, "data-withheld": action.refusal.wouldNeed.join(",") || "nobody", style: {
|
|
850
1040
|
padding: "4px 10px",
|
|
851
1041
|
fontSize: "0.875rem",
|
|
852
1042
|
borderRadius: 8,
|
|
@@ -859,7 +1049,7 @@ function Pane({ placement }) {
|
|
|
859
1049
|
lineHeight: 1.4,
|
|
860
1050
|
color: "var(--graview-ink-muted)",
|
|
861
1051
|
padding: "0 10px",
|
|
862
|
-
}, children: action.refusal.message })] }, action.id))), !atPointer && !allWithheld && withheld.length > 3 ? (_jsx("li", { children: _jsxs("button", { type: "button", "data-testid": "withheld-more", onClick: () => setAllWithheld(true), title: `Show all ${withheld.length} actions this seat may not take`, style: { padding: "4px 10px", fontSize: "0.875rem", borderRadius: 8 }, children: ["Show ", withheld.length - 3, " more withheld"] }) })) : null] })) : null, atPointer ?
|
|
1052
|
+
}, children: action.refusal.message })] }, action.id))), !atPointer && !allWithheld && withheld.length > 3 ? (_jsx("li", { children: _jsxs("button", { type: "button", "data-testid": "withheld-more", onClick: () => setAllWithheld(true), title: `Show all ${withheld.length} actions this seat may not take`, style: { padding: "4px 10px", fontSize: "0.875rem", borderRadius: 8 }, children: ["Show ", withheld.length - 3, " more withheld"] }) })) : null] })) : null, atPointer ? endSections.map((section) => _jsx(SectionDrawn, { section: section, lit: lit, close: () => setMenuAt(null) }, section.id)) : null, toldShown.length > 0 ? (_jsx("div", { "data-menu-section": "told", role: "group", "aria-label": "Suggested", style: { display: "grid", gap: 2, borderTop: "1px solid var(--graview-edge)", paddingTop: 5 }, children: toldShown.map((one) => (_jsxs("button", { type: "button", "data-menu-item": one.key, "data-told-suggestion": one.telling.id, "data-menu-lit": lit === one.key || undefined, onClick: () => takeTold(one), style: { ...ROW_STYLE, ...(lit === one.key ? LIT_STYLE : {}) }, children: [one.label, lit === one.key ? ENTER_MARK : null] }, one.key))) })) : null, askRow ? (_jsx("div", { "data-menu-section": "ask", style: { display: "grid", gap: 2, borderTop: "1px solid var(--graview-edge)", paddingTop: 5 }, children: _jsxs("button", { type: "button", "data-menu-item": "ask-typed", "data-menu-lit": lit === "ask" || undefined, onClick: ask, style: { ...ROW_STYLE, ...(lit === "ask" ? LIT_STYLE : {}) }, children: ["Tell Graview ", _jsxs("span", { style: { fontWeight: 600 }, children: ["\u201C", words, "\u201D"] }), lit === "ask" ? ENTER_MARK : null] }) })) : null, atPointer && words !== "" && !askRow && lit === null && shown.length === 0 && withheldShown.length === 0 ? (_jsxs("p", { "data-testid": "menu-no-match", style: { margin: 0, fontSize: "0.8125rem", lineHeight: 1.45, color: "var(--graview-ink-muted)" }, children: ["Nothing here matches \u201C", words, "\u201D."] })) : null, open ? (_jsx(AnswerArgs, { affordance: open,
|
|
863
1053
|
// On a refusal the prompt stays put with the reason beside it, so
|
|
864
1054
|
// a rejected answer can be corrected rather than retyped blind.
|
|
865
1055
|
onApply: (args) => {
|
|
@@ -869,6 +1059,16 @@ function Pane({ placement }) {
|
|
|
869
1059
|
return refusedArgs.current;
|
|
870
1060
|
}, onCancel: () => setPending(null) })) : null] }));
|
|
871
1061
|
}
|
|
1062
|
+
/** Whether this is somewhere a person types: a field, a box of text. */
|
|
1063
|
+
function typingIn(element) {
|
|
1064
|
+
if (element.isContentEditable || element instanceof HTMLTextAreaElement || element instanceof HTMLSelectElement)
|
|
1065
|
+
return true;
|
|
1066
|
+
return element instanceof HTMLInputElement && !["button", "submit", "reset", "checkbox", "radio", "image", "file", "color", "range"].includes(element.type);
|
|
1067
|
+
}
|
|
1068
|
+
/** A menu's row, and the one Enter runs from the field, lit, with the key that runs it said. */
|
|
1069
|
+
const ROW_STYLE = { padding: "5px 10px", fontSize: "0.875rem", borderRadius: 8, width: "100%", textAlign: "left", borderWidth: 1, borderStyle: "solid", borderColor: "transparent", background: "none", boxShadow: "none" };
|
|
1070
|
+
const LIT_STYLE = { background: "var(--graview-panel-muted)" };
|
|
1071
|
+
const ENTER_MARK = (_jsx("span", { "aria-hidden": "true", title: "Enter runs it", style: { float: "right", color: "var(--graview-ink-faint)", fontSize: "0.75rem" }, children: "\u21B5" }));
|
|
872
1072
|
/** One shared empty, for a visitor told the way in instead. */
|
|
873
1073
|
const NOTHING_WITHHELD = [];
|
|
874
1074
|
/**
|
|
@@ -876,10 +1076,10 @@ const NOTHING_WITHHELD = [];
|
|
|
876
1076
|
* each pressed to close the menu and run, or what it draws itself. Rows of
|
|
877
1077
|
* the acts' own look, so the menu reads as one list.
|
|
878
1078
|
*/
|
|
879
|
-
function SectionDrawn({ section, close }) {
|
|
880
|
-
return (_jsxs("div", { "data-menu-section": section.id, ...(section.heading ? { role: "group", "aria-label": section.heading } : {}), style: { display: "grid", gap: 2, borderTop: "1px solid var(--graview-edge)", paddingTop: 5 }, children: [section.heading ? (_jsx("p", { "aria-hidden": "true", style: { margin: 0, padding: "2px 2px 1px", fontSize: "0.75rem", lineHeight: 1.4, letterSpacing: "0.12em", textTransform: "uppercase", color: "var(--graview-ink-faint)" }, children: section.heading })) : null, section.items && section.items.length > 0 ? (_jsx("ul", { style: { margin: 0, padding: 0, listStyle: "none", display: "flex", flexDirection: "column", gap: 2 }, children: section.items.map((item) => (_jsx("li", { children: _jsxs("button", { type: "button", "data-menu-item": item.id, onClick: () => {
|
|
1079
|
+
function SectionDrawn({ section, lit = null, close }) {
|
|
1080
|
+
return (_jsxs("div", { "data-menu-section": section.id, ...(section.heading ? { role: "group", "aria-label": section.heading } : {}), style: { display: "grid", gap: 2, borderTop: "1px solid var(--graview-edge)", paddingTop: 5 }, children: [section.heading ? (_jsx("p", { "aria-hidden": "true", style: { margin: 0, padding: "2px 2px 1px", fontSize: "0.75rem", lineHeight: 1.4, letterSpacing: "0.12em", textTransform: "uppercase", color: "var(--graview-ink-faint)" }, children: section.heading })) : null, section.items && section.items.length > 0 ? (_jsx("ul", { style: { margin: 0, padding: 0, listStyle: "none", display: "flex", flexDirection: "column", gap: 2 }, children: section.items.map((item) => (_jsx("li", { children: _jsxs("button", { type: "button", "data-menu-item": item.id, "data-menu-lit": lit === `item:${item.id}` || undefined, onClick: () => {
|
|
881
1081
|
close();
|
|
882
1082
|
item.run();
|
|
883
|
-
}, style: {
|
|
1083
|
+
}, style: { ...ROW_STYLE, ...(lit === `item:${item.id}` ? LIT_STYLE : {}) }, children: [item.label, item.hint ? _jsxs("span", { style: { color: "var(--graview-ink-faint)" }, children: [" \u00B7 ", item.hint] }) : null, lit === `item:${item.id}` ? ENTER_MARK : null] }) }, item.id))) })) : null, section.render?.(close)] }));
|
|
884
1084
|
}
|
|
885
1085
|
//# sourceMappingURL=inspector.js.map
|