@graview/primitives 0.1.28 → 0.1.29

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 (271) hide show
  1. package/dist/app-bar.d.ts.map +1 -1
  2. package/dist/app-bar.js +9 -9
  3. package/dist/app-bar.js.map +1 -1
  4. package/dist/app-link-door.d.ts +3 -0
  5. package/dist/app-link-door.d.ts.map +1 -0
  6. package/dist/app-link-door.js +11 -0
  7. package/dist/app-link-door.js.map +1 -0
  8. package/dist/app-link.d.ts +20 -0
  9. package/dist/app-link.d.ts.map +1 -0
  10. package/dist/app-link.js +131 -0
  11. package/dist/app-link.js.map +1 -0
  12. package/dist/arrange-bar.d.ts +47 -4
  13. package/dist/arrange-bar.d.ts.map +1 -1
  14. package/dist/arrange-bar.js +73 -11
  15. package/dist/arrange-bar.js.map +1 -1
  16. package/dist/arrange-lists.d.ts +58 -1
  17. package/dist/arrange-lists.d.ts.map +1 -1
  18. package/dist/arrange-lists.js +152 -23
  19. package/dist/arrange-lists.js.map +1 -1
  20. package/dist/arrangement.d.ts.map +1 -1
  21. package/dist/arrangement.js +3 -1
  22. package/dist/arrangement.js.map +1 -1
  23. package/dist/bar-panes.d.ts +1 -0
  24. package/dist/bar-panes.d.ts.map +1 -1
  25. package/dist/bar-panes.js +1 -0
  26. package/dist/bar-panes.js.map +1 -1
  27. package/dist/chat.d.ts.map +1 -1
  28. package/dist/chat.js +3 -1
  29. package/dist/chat.js.map +1 -1
  30. package/dist/choosing.d.ts +36 -0
  31. package/dist/choosing.d.ts.map +1 -0
  32. package/dist/choosing.js +224 -0
  33. package/dist/choosing.js.map +1 -0
  34. package/dist/connections.d.ts.map +1 -1
  35. package/dist/connections.js +2 -1
  36. package/dist/connections.js.map +1 -1
  37. package/dist/declared-lens-doors.d.ts.map +1 -1
  38. package/dist/declared-lens-doors.js +5 -1
  39. package/dist/declared-lens-doors.js.map +1 -1
  40. package/dist/declared-lenses.d.ts +3 -2
  41. package/dist/declared-lenses.d.ts.map +1 -1
  42. package/dist/declared-lenses.js +5 -4
  43. package/dist/declared-lenses.js.map +1 -1
  44. package/dist/default-views.d.ts.map +1 -1
  45. package/dist/default-views.js +74 -18
  46. package/dist/default-views.js.map +1 -1
  47. package/dist/draft-frame.d.ts +1 -0
  48. package/dist/draft-frame.d.ts.map +1 -1
  49. package/dist/draft-frame.js +1 -0
  50. package/dist/draft-frame.js.map +1 -1
  51. package/dist/editable.d.ts +19 -1
  52. package/dist/editable.d.ts.map +1 -1
  53. package/dist/editable.js +62 -34
  54. package/dist/editable.js.map +1 -1
  55. package/dist/files.d.ts +1 -0
  56. package/dist/files.d.ts.map +1 -1
  57. package/dist/files.js +1 -0
  58. package/dist/files.js.map +1 -1
  59. package/dist/find.d.ts.map +1 -1
  60. package/dist/find.js +13 -6
  61. package/dist/find.js.map +1 -1
  62. package/dist/frame.d.ts +1 -2
  63. package/dist/frame.d.ts.map +1 -1
  64. package/dist/frame.js +19 -2
  65. package/dist/frame.js.map +1 -1
  66. package/dist/framework-views.d.ts +1 -0
  67. package/dist/framework-views.d.ts.map +1 -1
  68. package/dist/framework-views.js +1 -0
  69. package/dist/framework-views.js.map +1 -1
  70. package/dist/home-view.d.ts +1 -0
  71. package/dist/home-view.d.ts.map +1 -1
  72. package/dist/home-view.js +1 -0
  73. package/dist/home-view.js.map +1 -1
  74. package/dist/index.d.ts +14 -4
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +11 -4
  77. package/dist/index.js.map +1 -1
  78. package/dist/installation.js +1 -1
  79. package/dist/installation.js.map +1 -1
  80. package/dist/kind-shape.d.ts +130 -0
  81. package/dist/kind-shape.d.ts.map +1 -0
  82. package/dist/kind-shape.js +299 -0
  83. package/dist/kind-shape.js.map +1 -0
  84. package/dist/kind-stop.d.ts +16 -0
  85. package/dist/kind-stop.d.ts.map +1 -0
  86. package/dist/kind-stop.js +377 -0
  87. package/dist/kind-stop.js.map +1 -0
  88. package/dist/lens/arranging.d.ts.map +1 -1
  89. package/dist/lens/arranging.js +13 -4
  90. package/dist/lens/arranging.js.map +1 -1
  91. package/dist/lens/calendar-dates.d.ts +4 -3
  92. package/dist/lens/calendar-dates.d.ts.map +1 -1
  93. package/dist/lens/calendar-dates.js +12 -5
  94. package/dist/lens/calendar-dates.js.map +1 -1
  95. package/dist/lens/calendar-drawing.js +8 -8
  96. package/dist/lens/calendar-drawing.js.map +1 -1
  97. package/dist/lens/calendar-options.d.ts +2 -0
  98. package/dist/lens/calendar-options.d.ts.map +1 -1
  99. package/dist/lens/calendar-options.js.map +1 -1
  100. package/dist/lens/calendar-placing.d.ts +13 -0
  101. package/dist/lens/calendar-placing.d.ts.map +1 -1
  102. package/dist/lens/calendar-placing.js +23 -2
  103. package/dist/lens/calendar-placing.js.map +1 -1
  104. package/dist/lens/calendar-spans.d.ts.map +1 -1
  105. package/dist/lens/calendar-spans.js +5 -4
  106. package/dist/lens/calendar-spans.js.map +1 -1
  107. package/dist/lens/calendar-view.js +9 -5
  108. package/dist/lens/calendar-view.js.map +1 -1
  109. package/dist/lens/columns.d.ts.map +1 -1
  110. package/dist/lens/columns.js +35 -7
  111. package/dist/lens/columns.js.map +1 -1
  112. package/dist/lens/timeline.d.ts +1 -1
  113. package/dist/lens/timeline.d.ts.map +1 -1
  114. package/dist/lens/timeline.js +126 -16
  115. package/dist/lens/timeline.js.map +1 -1
  116. package/dist/lines-key.d.ts.map +1 -1
  117. package/dist/lines-key.js +11 -5
  118. package/dist/lines-key.js.map +1 -1
  119. package/dist/map-asks.d.ts +10 -0
  120. package/dist/map-asks.d.ts.map +1 -0
  121. package/dist/map-asks.js +17 -0
  122. package/dist/map-asks.js.map +1 -0
  123. package/dist/map-key.d.ts +3 -0
  124. package/dist/map-key.d.ts.map +1 -0
  125. package/dist/map-key.js +35 -0
  126. package/dist/map-key.js.map +1 -0
  127. package/dist/map-panel-door.d.ts +26 -0
  128. package/dist/map-panel-door.d.ts.map +1 -0
  129. package/dist/map-panel-door.js +42 -0
  130. package/dist/map-panel-door.js.map +1 -0
  131. package/dist/map-panel.d.ts +8 -0
  132. package/dist/map-panel.d.ts.map +1 -0
  133. package/dist/map-panel.js +351 -0
  134. package/dist/map-panel.js.map +1 -0
  135. package/dist/markdown-body.d.ts +11 -0
  136. package/dist/markdown-body.d.ts.map +1 -0
  137. package/dist/markdown-body.js +89 -0
  138. package/dist/markdown-body.js.map +1 -0
  139. package/dist/notice-stacks.d.ts +13 -0
  140. package/dist/notice-stacks.d.ts.map +1 -0
  141. package/dist/notice-stacks.js +141 -0
  142. package/dist/notice-stacks.js.map +1 -0
  143. package/dist/notices.d.ts +2 -0
  144. package/dist/notices.d.ts.map +1 -1
  145. package/dist/notices.js +30 -132
  146. package/dist/notices.js.map +1 -1
  147. package/dist/pages.d.ts +9 -1
  148. package/dist/pages.d.ts.map +1 -1
  149. package/dist/pages.js +8 -1
  150. package/dist/pages.js.map +1 -1
  151. package/dist/places.d.ts +1 -1
  152. package/dist/places.d.ts.map +1 -1
  153. package/dist/places.js +9 -5
  154. package/dist/places.js.map +1 -1
  155. package/dist/primitives/index.d.ts +11 -1
  156. package/dist/primitives/index.d.ts.map +1 -1
  157. package/dist/primitives/index.js +15 -4
  158. package/dist/primitives/index.js.map +1 -1
  159. package/dist/problem-count.d.ts +18 -0
  160. package/dist/problem-count.d.ts.map +1 -0
  161. package/dist/problem-count.js +46 -0
  162. package/dist/problem-count.js.map +1 -0
  163. package/dist/prose-editor.d.ts +4 -1
  164. package/dist/prose-editor.d.ts.map +1 -1
  165. package/dist/prose-editor.js +13 -6
  166. package/dist/prose-editor.js.map +1 -1
  167. package/dist/relation-key.d.ts +3 -1
  168. package/dist/relation-key.d.ts.map +1 -1
  169. package/dist/relation-key.js +23 -6
  170. package/dist/relation-key.js.map +1 -1
  171. package/dist/repeat-picker-door.d.ts +10 -0
  172. package/dist/repeat-picker-door.d.ts.map +1 -0
  173. package/dist/repeat-picker-door.js +13 -0
  174. package/dist/repeat-picker-door.js.map +1 -0
  175. package/dist/repeat-picker.d.ts +29 -0
  176. package/dist/repeat-picker.d.ts.map +1 -0
  177. package/dist/repeat-picker.js +64 -0
  178. package/dist/repeat-picker.js.map +1 -0
  179. package/dist/resolve-app-context.d.ts +3 -0
  180. package/dist/resolve-app-context.d.ts.map +1 -0
  181. package/dist/resolve-app-context.js +10 -0
  182. package/dist/resolve-app-context.js.map +1 -0
  183. package/dist/rule-line.d.ts.map +1 -1
  184. package/dist/rule-line.js +2 -1
  185. package/dist/rule-line.js.map +1 -1
  186. package/dist/scene-bar.js +2 -2
  187. package/dist/scene-bar.js.map +1 -1
  188. package/dist/scene-css.d.ts.map +1 -1
  189. package/dist/scene-css.js +224 -213
  190. package/dist/scene-css.js.map +1 -1
  191. package/dist/scene-places.d.ts +6 -0
  192. package/dist/scene-places.d.ts.map +1 -1
  193. package/dist/scene-places.js +14 -14
  194. package/dist/scene-places.js.map +1 -1
  195. package/dist/scene-way-back-door.d.ts +1 -0
  196. package/dist/scene-way-back-door.d.ts.map +1 -1
  197. package/dist/scene-way-back-door.js +1 -0
  198. package/dist/scene-way-back-door.js.map +1 -1
  199. package/dist/scene.d.ts +3 -1
  200. package/dist/scene.d.ts.map +1 -1
  201. package/dist/scene.js +3 -1
  202. package/dist/scene.js.map +1 -1
  203. package/dist/seat-field.js +2 -2
  204. package/dist/seat-field.js.map +1 -1
  205. package/dist/seat-panel.d.ts +1 -0
  206. package/dist/seat-panel.d.ts.map +1 -1
  207. package/dist/seat-panel.js +5 -2
  208. package/dist/seat-panel.js.map +1 -1
  209. package/dist/seeding.d.ts.map +1 -1
  210. package/dist/seeding.js +2 -1
  211. package/dist/seeding.js.map +1 -1
  212. package/dist/several-bar.d.ts +23 -0
  213. package/dist/several-bar.d.ts.map +1 -0
  214. package/dist/several-bar.js +158 -0
  215. package/dist/several-bar.js.map +1 -0
  216. package/dist/several-door.d.ts +7 -0
  217. package/dist/several-door.d.ts.map +1 -0
  218. package/dist/several-door.js +20 -0
  219. package/dist/several-door.js.map +1 -0
  220. package/dist/shell.d.ts +10 -2
  221. package/dist/shell.d.ts.map +1 -1
  222. package/dist/shell.js +15 -12
  223. package/dist/shell.js.map +1 -1
  224. package/dist/spec-css.d.ts.map +1 -1
  225. package/dist/spec-css.js +70 -55
  226. package/dist/spec-css.js.map +1 -1
  227. package/dist/spec-views.d.ts +8 -0
  228. package/dist/spec-views.d.ts.map +1 -1
  229. package/dist/spec-views.js +16 -5
  230. package/dist/spec-views.js.map +1 -1
  231. package/dist/states-bar.d.ts +15 -0
  232. package/dist/states-bar.d.ts.map +1 -0
  233. package/dist/states-bar.js +36 -0
  234. package/dist/states-bar.js.map +1 -0
  235. package/dist/text-body.d.ts +7 -3
  236. package/dist/text-body.d.ts.map +1 -1
  237. package/dist/text-body.js +10 -2
  238. package/dist/text-body.js.map +1 -1
  239. package/dist/theme.d.ts.map +1 -1
  240. package/dist/theme.js +11 -4
  241. package/dist/theme.js.map +1 -1
  242. package/dist/workbench/activity.d.ts +2 -0
  243. package/dist/workbench/activity.d.ts.map +1 -1
  244. package/dist/workbench/activity.js +5 -2
  245. package/dist/workbench/activity.js.map +1 -1
  246. package/dist/workbench/agent-seat.d.ts.map +1 -1
  247. package/dist/workbench/agent-seat.js +3 -2
  248. package/dist/workbench/agent-seat.js.map +1 -1
  249. package/dist/workbench/answer-args.d.ts +3 -1
  250. package/dist/workbench/answer-args.d.ts.map +1 -1
  251. package/dist/workbench/answer-args.js +18 -7
  252. package/dist/workbench/answer-args.js.map +1 -1
  253. package/dist/workbench/back-out.d.ts.map +1 -1
  254. package/dist/workbench/back-out.js +12 -4
  255. package/dist/workbench/back-out.js.map +1 -1
  256. package/dist/workbench/index.d.ts +1 -1
  257. package/dist/workbench/index.d.ts.map +1 -1
  258. package/dist/workbench/index.js +1 -1
  259. package/dist/workbench/index.js.map +1 -1
  260. package/dist/workbench/inspector-door.d.ts +34 -0
  261. package/dist/workbench/inspector-door.d.ts.map +1 -0
  262. package/dist/workbench/inspector-door.js +96 -0
  263. package/dist/workbench/inspector-door.js.map +1 -0
  264. package/dist/workbench/inspector.d.ts +8 -27
  265. package/dist/workbench/inspector.d.ts.map +1 -1
  266. package/dist/workbench/inspector.js +15 -28
  267. package/dist/workbench/inspector.js.map +1 -1
  268. package/dist/workbench/trail.d.ts.map +1 -1
  269. package/dist/workbench/trail.js +3 -2
  270. package/dist/workbench/trail.js.map +1 -1
  271. package/package.json +6 -6
@@ -0,0 +1,42 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { retryingImport } from "@graview/core/retry";
3
+ // The door stands with the scene, whose face has fetched `@graview/react` already.
4
+ import { mapChoice } from "@graview/react";
5
+ import { lazyModule, useGraph, useGraview } from "@graview/react/provider";
6
+ import { Suspense } from "react";
7
+ /** What the panel shows for this stop and selection, if anything: the one decision, so a test can ask it. */
8
+ export function mapPanelShows(choice) {
9
+ if (choice.lens !== null)
10
+ return { what: "lens", kind: choice.lens };
11
+ if (choice.records.length === 1 && choice.districts.length === 0)
12
+ return { what: "record", id: choice.records[0] };
13
+ if (choice.districts.length === 1 && choice.records.length === 0)
14
+ return { what: "district", kind: choice.districts[0] };
15
+ return null;
16
+ }
17
+ /*
18
+ * THE PANEL ITSELF, fetched when it is first drawn: a page whose reader
19
+ * never chooses anything from altitude carries none of it.
20
+ */
21
+ const panelModule = /* @__PURE__ */ lazyModule(retryingImport(() => import("./map-panel.js")));
22
+ const Panel = /* @__PURE__ */ panelModule.part((module, props) => _jsx(module.MapPanelFor, { showing: props.showing }), { what: "This panel", quiet: true });
23
+ /**
24
+ * BESIDE THE MAP, AT A SIZE A PERSON READS (see `map-panel.tsx`): from
25
+ * altitude, a lens pressed on a district's marquee, a chosen record's links
26
+ * or a chosen district's records, docked beside the map on a desk and a
27
+ * sheet from the foot on a phone. Nothing on the ground.
28
+ */
29
+ export function MapPanel() {
30
+ const { store, view, selection, hiddenKinds } = useGraview();
31
+ useGraph();
32
+ if (!view.overview)
33
+ return null;
34
+ const showing = mapPanelShows(mapChoice(selection, { ...view, beside: true }, (id) => store.graph.getNode(id)?.kind));
35
+ if (!showing)
36
+ return null;
37
+ // A district the declaration has not got — an address from another app, a kind since removed — has nothing to list.
38
+ if (showing.what !== "record" && (hiddenKinds.has(showing.kind) || !store.schema.kinds.includes(showing.kind)))
39
+ return null;
40
+ return (_jsx(Suspense, { fallback: null, children: _jsx(Panel, { showing: showing }) }));
41
+ }
42
+ //# sourceMappingURL=map-panel-door.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-panel-door.js","sourceRoot":"","sources":["../src/map-panel-door.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,mFAAmF;AACnF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAKjC,6GAA6G;AAC7G,MAAM,UAAU,aAAa,CAAC,MAAoH;IAChJ,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IACrE,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,EAAE,CAAC;IACpH,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAE,EAAE,CAAC;IAC1H,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,WAAW,GAAG,eAAe,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC/F,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAA4C,EAAE,EAAE,CAAC,KAAC,MAAM,CAAC,WAAW,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,GAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAE9L;;;;;GAKG;AACH,MAAM,UAAU,QAAQ;IACtB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,UAAU,EAAK,CAAC;IAChE,QAAQ,EAAK,CAAC;IACd,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,IAA0B,CAAC,CAAC,CAAC;IAC5I,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,oHAAoH;IACpH,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAE,KAAK,CAAC,MAAM,CAAC,KAA2B,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnJ,OAAO,CACL,KAAC,QAAQ,IAAC,QAAQ,EAAE,IAAI,YACtB,KAAC,KAAK,IAAC,OAAO,EAAE,OAAO,GAAI,GAClB,CACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type AnySchema } from "@graview/core";
2
+ import type { MapPanelShowing } from "./map-panel-door.js";
3
+ import "./frame.js";
4
+ /** The panel for what is chosen, drawn by `MapPanel` (map-panel-door.tsx) once it has decided there is one. */
5
+ export declare function MapPanelFor<S extends AnySchema>({ showing }: {
6
+ readonly showing: MapPanelShowing;
7
+ }): import("react").JSX.Element;
8
+ //# sourceMappingURL=map-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-panel.d.ts","sourceRoot":"","sources":["../src/map-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyE,KAAK,SAAS,EAAqB,MAAM,eAAe,CAAC;AAMzI,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAQ3D,OAAO,YAAY,CAAC;AAmCpB,+GAA+G;AAC/G,wBAAgB,WAAW,CAAC,CAAC,SAAS,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;CAAE,+BAIlG"}
@@ -0,0 +1,351 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { counted, isCurrent, labelOf, layer, nounOf, numberAsRead, pluralLabel } from "@graview/core";
3
+ import { edgeWords } from "@graview/core/words";
4
+ import { aggregateId, kindCardId, withFocus, withOverview, withPicture, withWithin } from "@graview/layout/view";
5
+ // Drawn only with the scene, whose face has fetched `@graview/react` already.
6
+ import { pickedFrom, ribbonsOf, ribbonSentence } from "@graview/react";
7
+ import { useFlagged, useKit, ViewBoundary } from "@graview/react/drawing";
8
+ import { NamedAbove } from "./primitives/index.js";
9
+ import { Fields } from "./editable.js";
10
+ import { isDefaultView, useGraph, useGraview, useNavigation, useViolations, ViewModeProvider } from "@graview/react/provider";
11
+ import { Suspense, useEffect, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
12
+ import { barPanes } from "./bar-panes-door.js";
13
+ import { problemsNamed } from "./problem-count.js";
14
+ import { problemsAsked, putDownProblemsAsked, subscribeToProblemsAsked } from "./map-asks.js";
15
+ import "./frame.js"; // A door: tied to what the page drew first (TIED DOORS, packages/primitives/src/frame.ts).
16
+ const ProblemRows = barPanes.part((panes, props) => _jsx(panes.ProblemRows, { ...props }), { what: "The problems", as: "li" });
17
+ /*
18
+ * BESIDE THE MAP, AT A SIZE A PERSON READS.
19
+ *
20
+ * Two things used to float over the city at its own scale. A lens pressed on
21
+ * a district's marquee stood on the plot as a billboard — the lens drawn at
22
+ * a seventeenth of its size, eight-pixel text over the districts, unreadable
23
+ * until it was opened. And a district opened to say which record was which
24
+ * became a card of chips floating over its neighbors: "1 of 14 tied",
25
+ * "close", "+10 more — double-click to go in".
26
+ *
27
+ * Both are a panel now, docked beside the map on a desk — the city lays
28
+ * itself out in the room that is left — and a sheet from the foot on a
29
+ * phone. What it holds follows what is chosen from altitude:
30
+ *
31
+ * - a LENS pressed on a district's marquee (the same stop as before: the
32
+ * kind's group in focus, `in.view`): the lens itself, at full size, with
33
+ * the way into its own place; the map recedes but for its district;
34
+ * - a RECORD: its links, a list per relation in its kind's words, each
35
+ * record a press that chooses it — the list the floating card was;
36
+ * - a DISTRICT: its relations, with how many each joins, and every record
37
+ * in it, none of them "+10 more".
38
+ */
39
+ /** How far the panel floats in from the edges of the picture and from the map: the app's gap. */
40
+ const PANEL_GAP = "var(--graview-gap, 8px)";
41
+ /** Narrower than this, the panel is a sheet from the foot rather than a column beside the map. */
42
+ const MAP_PANEL_SHEET_BELOW = 720;
43
+ /** The panel for what is chosen, drawn by `MapPanel` (map-panel-door.tsx) once it has decided there is one. */
44
+ export function MapPanelFor({ showing }) {
45
+ if (showing.what === "lens")
46
+ return _jsx(LensPanel, { kind: showing.kind }, `lens:${showing.kind}`);
47
+ if (showing.what === "record")
48
+ return _jsx(RecordPanel, { id: showing.id }, `record:${showing.id}`);
49
+ return _jsx(DistrictPanel, { kind: showing.kind }, `district:${showing.kind}`);
50
+ }
51
+ /* ------------------------------------------------------------- the frame */
52
+ function PanelFrame({ label, wide, testId, head, onClose, children, sheetHeight, }) {
53
+ const region = useRef(null);
54
+ const [sheet, setSheet] = useState(false);
55
+ /* A PHONE'S PANEL is a sheet, decided by the box it is drawn in, not the window. */
56
+ useLayoutEffect(() => {
57
+ const box = region.current?.parentElement;
58
+ if (!box)
59
+ return;
60
+ const measure = () => setSheet(box.getBoundingClientRect().width < MAP_PANEL_SHEET_BELOW);
61
+ measure();
62
+ if (typeof ResizeObserver === "undefined")
63
+ return;
64
+ const watch = new ResizeObserver(measure);
65
+ watch.observe(box);
66
+ return () => watch.disconnect();
67
+ }, []);
68
+ /* ESCAPE CLOSES IT: it is the outermost thing over the picture, so the scene's ladder waits (`data-graview-overlay`). */
69
+ const close = useRef(onClose);
70
+ close.current = onClose;
71
+ useEffect(() => {
72
+ const onKey = (event) => {
73
+ if (event.key !== "Escape" || event.defaultPrevented)
74
+ return;
75
+ const active = document.activeElement;
76
+ if (active instanceof HTMLInputElement || active instanceof HTMLTextAreaElement)
77
+ return;
78
+ // A popover over the panel closes first.
79
+ if (document.querySelector("[data-graview-popover]:popover-open"))
80
+ return;
81
+ // Following somebody, the press stops following first: their stop is what the panel is showing.
82
+ if (following)
83
+ return;
84
+ close.current();
85
+ };
86
+ /*
87
+ * Whether somebody was being followed WHEN the key went down: the
88
+ * following's own listener may have put it down already, and React
89
+ * drawn that, by the time this one hears the same press.
90
+ */
91
+ let following = false;
92
+ const before = () => {
93
+ following = document.querySelector('[data-testid="following-who"]') !== null;
94
+ };
95
+ window.addEventListener("keydown", before, true);
96
+ document.addEventListener("keydown", onKey);
97
+ return () => {
98
+ window.removeEventListener("keydown", before, true);
99
+ document.removeEventListener("keydown", onKey);
100
+ };
101
+ }, []);
102
+ return (_jsxs("section", { ref: region, "aria-label": label, "data-testid": testId, "data-graview-map-panel": sheet ? "sheet" : "dock", "data-graview-overlay": "", "data-graview-offstage": "", className: "graview-map-panel", style: {
103
+ position: "absolute",
104
+ // On the rail's rung, drawn after the ask field: a sheet stands over the field rather than being cut through by it.
105
+ zIndex: layer("rail"),
106
+ boxSizing: "border-box",
107
+ display: "flex",
108
+ flexDirection: "column",
109
+ background: "var(--graview-panel)",
110
+ color: "var(--graview-ink)",
111
+ /*
112
+ * A SURFACE OVER THE SCENE, NOT A COLUMN BESIDE IT: inset from the
113
+ * right, the top (under the bar) and the foot by the app's gap, with
114
+ * the app's own radius on every corner, its own edge and the real
115
+ * elevation, so it reads as lying on the map. What it holds is
116
+ * clipped to the radius, its scrollbar inside the box.
117
+ */
118
+ overflow: "hidden",
119
+ border: "1px solid var(--graview-edge)",
120
+ borderRadius: "var(--graview-radius, 12px)",
121
+ boxShadow: "var(--graview-lift-high)",
122
+ ...(sheet
123
+ ? { left: PANEL_GAP, right: PANEL_GAP, bottom: `calc(${PANEL_GAP} + env(safe-area-inset-bottom, 0px))`, height: sheetHeight }
124
+ : { top: PANEL_GAP, right: PANEL_GAP, bottom: PANEL_GAP, width: wide }),
125
+ }, children: [sheet ? (_jsx("style", { children: `:has(> [data-graview-map-panel="sheet"]) { --graview-sheet: calc(${sheetHeight} + 2 * ${PANEL_GAP} + env(safe-area-inset-bottom, 0px)); }` })) : (_jsx("style", { children: `:has(> [data-graview-map-panel="dock"]) { --graview-dock: calc(${wide} + 2 * ${PANEL_GAP}); }` })), _jsxs("header", { style: { display: "flex", alignItems: "flex-start", gap: 10, padding: "14px 14px 10px 18px", borderBottom: "1px solid var(--graview-edge)" }, children: [_jsx("div", { style: { flex: "1 1 auto", minWidth: 0 }, children: head }), _jsx("button", { type: "button", "data-testid": "map-panel-close", "aria-label": "Close", title: "Close (Escape)", onClick: onClose, style: { flex: "0 0 auto", minWidth: 32, height: 32, borderRadius: 8, fontSize: "1.1rem", lineHeight: 1 }, children: "\u00D7" })] }), _jsx("div", { style: { flex: "1 1 auto", minHeight: 0, overflow: "auto" }, children: children })] }));
126
+ }
127
+ const eyebrow = { fontSize: "0.75rem", letterSpacing: "0.09em", textTransform: "uppercase", color: "var(--graview-ink-faint)" };
128
+ const title = { margin: "2px 0 0", fontSize: "1.125rem", fontWeight: 600, lineHeight: 1.3, overflowWrap: "anywhere" };
129
+ const quiet = { margin: "4px 0 0", fontSize: "0.875rem", color: "var(--graview-ink-muted)" };
130
+ const heading = { margin: "14px 18px 6px", fontSize: "0.8125rem", fontWeight: 600, color: "var(--graview-ink-muted)" };
131
+ const listStyle = { listStyle: "none", margin: 0, padding: "0 10px 6px" };
132
+ const rowStyle = { all: "unset", outline: "revert-layer", boxSizing: "border-box", display: "flex", alignItems: "baseline", gap: 8, width: "100%", padding: "6px 8px", borderRadius: 6, cursor: "pointer", fontSize: "0.875rem" };
133
+ const pressStyle = { minHeight: 30, padding: "0 12px", borderRadius: 8, fontSize: "0.8125rem" };
134
+ /** A record's acts, at the pointer: it is chosen, and the menu a right-click opens on the map opens here about it. */
135
+ function useActsAt() {
136
+ const { setSelection, setMenuAt } = useGraview();
137
+ return (event, id) => {
138
+ event.preventDefault();
139
+ setSelection([id]);
140
+ setMenuAt({ x: event.clientX, y: event.clientY, on: id });
141
+ };
142
+ }
143
+ /*
144
+ * ITS ACTS, A PRESS AWAY (the ninth walk, W-195). On a phone the panel is a
145
+ * sheet over the foot of the map, standing on the district or the record it
146
+ * is about, so the right-click that opened their menu had nothing left to
147
+ * land on, and a finger has no right button: "Add a hive" was on no screen
148
+ * of a phone. The panel's head says it in a button that opens the same menu,
149
+ * under the button, about what the panel is about.
150
+ */
151
+ function ActsButton({ on, about }) {
152
+ const { setSelection, setMenuAt } = useGraview();
153
+ return (_jsx("button", { type: "button", "data-testid": "map-panel-acts", "aria-label": `What can be done with ${about}`, "aria-haspopup": "menu", style: pressStyle, onClick: (event) => {
154
+ const box = event.currentTarget.getBoundingClientRect();
155
+ setSelection([on]);
156
+ setMenuAt({ x: Math.round(box.left), y: Math.round(box.bottom + 4), on });
157
+ }, children: "Acts\u2026" }));
158
+ }
159
+ /** Going to a record from the panel: the same stop a double-click on it in the scene makes, on the ground. */
160
+ const travelTo = (view, id) => ({ ...withFocus(withOverview(view, false), id), relation: null });
161
+ /* -------------------------------------------------------------- the lens */
162
+ /**
163
+ * A LENS, AT FULL SIZE, BESIDE THE MAP. The same component the place draws,
164
+ * over the kind's current members, in the mode a lens already draws a
165
+ * page in — nothing here is a copy of a lens. A press on a record in it
166
+ * chooses that record; a double press goes to it.
167
+ */
168
+ function LensPanel({ kind }) {
169
+ const actsAt = useActsAt();
170
+ const { store, views, view, selection, setSelection } = useGraview();
171
+ const { go } = useNavigation();
172
+ const graph = useGraph();
173
+ const asked = view.within?.["view"];
174
+ const places = views.places().filter((place) => place.kind === kind);
175
+ const place = (asked !== undefined ? places.find((one) => one.as === asked) : undefined) ?? places.at(-1);
176
+ const registration = views.resolve(kind, { cardinality: "many", fidelity: "full" }, place?.as ?? asked);
177
+ const View = registration?.view;
178
+ const definition = store.schema.tryDefinition(kind);
179
+ const members = useMemo(() => store.graph.nodesOfKind(kind).filter((node) => view.past === true || isCurrent(definition, node)), [store, kind, graph, view.past, definition]);
180
+ const named = registration?.title ?? place?.title ?? pluralLabel(store.schema, kind);
181
+ // A kind with no picture of its own draws its stop here, which heads itself: the panel says nothing over it.
182
+ const derived = View !== undefined && isDefaultView(View);
183
+ const chosen = selection.filter((id) => store.graph.getNode(id) !== undefined);
184
+ // What a rule names, marked in the lens where it stands, as its own place marks it.
185
+ const flagged = useFlagged();
186
+ const close = () => go(withWithin(withFocus(view, null), "view", null));
187
+ return (_jsxs(PanelFrame, { label: named, testId: "lens-panel", wide: "min(max(440px, 46%), 760px)", sheetHeight: "60%", onClose: close, head: derived ? null : _jsxs(_Fragment, { children: [_jsx("div", { style: eyebrow, children: pluralLabel(store.schema, kind) }), _jsx("h2", { style: title, "data-testid": "lens-panel-title", children: named }), _jsxs("p", { style: quiet, children: [counted(store.schema, kind, members.length), definition?.description ? ` · ${definition.description}` : ""] }), place ? (_jsx("div", { style: { marginTop: 10 }, children: _jsx("button", { type: "button", "data-testid": "lens-panel-open", style: pressStyle, title: `Open ${named} on its own`, onClick: () => go(withPicture(view, kind, place.as)), children: "Open \u2197" }) })) : null] }), children: [_jsx("style", { children: `.graview-ground[data-graview-altitude] .graview-plot:not([data-graview-plot="${kindCardId(kind)}"]) { opacity: 0.35; }
188
+ .graview-ground[data-graview-altitude] [data-graview-view^="kind:"]:not([data-graview-view="${kindCardId(kind)}"]) { opacity: 0.4; }` }), _jsx("div", { "data-graview-lens": place?.as ?? "",
189
+ /*
190
+ * THE LENS TAKES THE PANEL'S REMAINING HEIGHT. A grid whose one row
191
+ * is the room left under the head, and grows past it with what it
192
+ * holds: a lens that fills its box (the week, a timetable) is given
193
+ * a box as tall as the panel, rather than a height of "auto" its
194
+ * percentages came to nothing against; a lens taller than that grows
195
+ * and the panel's own body scrolls — never a second scroll inside it.
196
+ * One column no wider than the panel, so nothing pushes it sideways.
197
+ */
198
+ style: { padding: "8px 12px 16px", minHeight: "100%", boxSizing: "border-box", display: "grid", gridTemplateRows: "1fr", gridTemplateColumns: "minmax(0, 1fr)", alignItems: "start" }, onClick: (event) => {
199
+ const id = pickedFrom(event.target);
200
+ if (!id || store.graph.getNode(id) === undefined)
201
+ return;
202
+ const control = event.target.closest("button, a, input, select, textarea, [contenteditable='true']");
203
+ if (control && !control.hasAttribute("data-graview-pick"))
204
+ return;
205
+ setSelection([id]);
206
+ }, onDoubleClick: (event) => {
207
+ const id = pickedFrom(event.target);
208
+ if (!id || store.graph.getNode(id) === undefined)
209
+ return;
210
+ go(travelTo(view, id));
211
+ },
212
+ // A right-click on a record in it opens that record's acts, as it does on the map.
213
+ onContextMenu: (event) => {
214
+ const id = pickedFrom(event.target);
215
+ if (!id || store.graph.getNode(id) === undefined)
216
+ return;
217
+ actsAt(event, id);
218
+ }, children: View ? (
219
+ /* The head names it; the lens's own panel does not say it again under it. */
220
+ _jsx(NamedAbove.Provider, { value: named, children: _jsx(ViewModeProvider, { mode: "fullscreen", children: _jsx(ViewBoundary, { kind: kind, ...(registration?.title ? { view: registration.title } : {}), children: _jsx(View, { nodes: members, label: named, fidelity: "full", cardinality: "many", mode: "fullscreen", selected: false, ...(chosen.length > 0 ? { implicated: chosen } : {}), ...(flagged.length > 0 ? { flagged } : {}) }) }) }) })) : null })] }));
221
+ }
222
+ /* ------------------------------------------------------------ a record */
223
+ /** A record's links, a group per relation and direction, each in the words of the record's kind. */
224
+ function linkGroups(schema, edges, id, kindOf) {
225
+ const self = kindOf(id);
226
+ const groups = new Map();
227
+ for (const edge of edges) {
228
+ const out = edge.from === id;
229
+ if (!out && edge.to !== id)
230
+ continue;
231
+ const other = out ? edge.to : edge.from;
232
+ const kind = kindOf(other);
233
+ if (kind === undefined || self === undefined)
234
+ continue;
235
+ const key = `${edge.kind}|${out ? "out" : "in"}|${kind}`;
236
+ const held = groups.get(key);
237
+ if (held) {
238
+ if (!held.others.includes(other))
239
+ held.others.push(other);
240
+ continue;
241
+ }
242
+ groups.set(key, { key, edge: edge.kind, words: edgeWords(schema, out ? self : kind, edge.kind, out ? "out" : "in"), kind, others: [other] });
243
+ }
244
+ return [...groups.values()];
245
+ }
246
+ function RecordPanel({ id }) {
247
+ const actsAt = useActsAt();
248
+ const { store, views, view, setSelection } = useGraview();
249
+ const { go } = useNavigation();
250
+ const graph = useGraph();
251
+ const node = store.graph.getNode(id);
252
+ const kindOf = (other) => store.graph.getNode(other)?.kind;
253
+ const groups = useMemo(() => linkGroups(store.schema, store.graph.allEdges(), id, kindOf), [store, id, graph]); // eslint-disable-line react-hooks/exhaustive-deps
254
+ if (!node)
255
+ return null;
256
+ const kind = node.kind;
257
+ const name = (of) => {
258
+ const other = store.graph.getNode(of);
259
+ return other ? labelOf(store.schema.tryDefinition(other.kind), other) : of;
260
+ };
261
+ const noun = nounOf(store.schema.tryDefinition(kind), kind);
262
+ /*
263
+ * ITS CARD, AT A SIZE A PERSON READS: the kind's own card where the app
264
+ * drew one, and otherwise what the framework's card says of it beyond
265
+ * its name and its links — its fields, editable where an act writes
266
+ * them. Its links are the list under it.
267
+ */
268
+ const registration = views.resolve(kind, { cardinality: "one", fidelity: "full" });
269
+ const Card = registration?.view;
270
+ const ownCard = Card !== undefined && !isDefaultView(Card);
271
+ /* A record risen from (in focus, not chosen) is put away by leaving it, as a lens is. */
272
+ const close = () => (view.focusId === id ? go({ ...withFocus(view, null), selection: [] }) : setSelection([]));
273
+ return (_jsxs(PanelFrame, { label: `${name(id)}: its links`, testId: "record-panel", wide: ownCard ? "min(max(440px, 46%), 760px)" : "min(360px, 40%)", sheetHeight: "52%", onClose: close, head: _jsxs(_Fragment, { children: [_jsx("div", { style: eyebrow, children: noun }), _jsx("h2", { style: title, "data-testid": "record-panel-title", children: name(id) }), _jsxs("div", { style: { display: "flex", gap: 8, flexWrap: "wrap", marginTop: 10 }, children: [_jsx("button", { type: "button", "data-testid": "record-panel-go", style: pressStyle, onClick: () => go(travelTo(view, id)), children: "Go to it" }), _jsx(ActsButton, { on: id, about: name(id) }), _jsxs("button", { type: "button", "data-testid": "record-panel-district", style: pressStyle, onClick: () => setSelection([kindCardId(kind)]), children: ["All ", pluralLabel(store.schema, kind).toLowerCase()] })] })] }), children: [_jsx("div", { "data-graview-record-card": id, style: { padding: "8px 18px 0" }, children: ownCard ? (_jsx(ViewBoundary, { kind: kind, children: _jsx(Card, { node: node, fidelity: "full", cardinality: "one", mode: "fullscreen", selected: false }) })) : (_jsx(Fields, { id: id, shown: [name(id)] })) }), groups.length === 0 ? _jsx("p", { style: { ...quiet, margin: "14px 18px" }, children: "No links yet." }) : null, groups.map((group) => (_jsxs("section", { "aria-label": group.words, "data-graview-links": group.edge, children: [_jsxs("h3", { style: heading, children: [group.words.charAt(0).toUpperCase() + group.words.slice(1), " ", _jsxs("span", { style: { fontWeight: 400, color: "var(--graview-ink-faint)" }, children: ["\u00B7 ", group.others.length] })] }), _jsx("ul", { style: listStyle, children: group.others.map((other) => (_jsx("li", { children: _jsxs("button", { type: "button", className: "graview-map-panel-row", "data-graview-record": other, style: rowStyle, onClick: () => setSelection([other]),
274
+ // Its acts, as on the map: a right-click (or a long press) opens the menu about it, here.
275
+ onContextMenu: (event) => actsAt(event, other), children: [_jsx("span", { style: { flex: "1 1 auto", minWidth: 0, overflowWrap: "anywhere" }, children: name(other) }), group.kind !== kind ? null : _jsx("span", { style: { fontSize: "0.75rem", color: "var(--graview-ink-faint)" }, children: noun })] }) }, other))) })] }, group.key)))] }));
276
+ }
277
+ /* ----------------------------------------------------------- a district */
278
+ /** Past this many, a district's list carries a field to narrow it by name. */
279
+ const NARROW_PAST = 24;
280
+ function DistrictPanel({ kind }) {
281
+ const actsAt = useActsAt();
282
+ const { store, view, setSelection, setEmphasis } = useGraview();
283
+ const { go } = useNavigation();
284
+ const graph = useGraph();
285
+ const [narrow, setNarrow] = useState("");
286
+ const definition = store.schema.tryDefinition(kind);
287
+ const members = useMemo(() => store.graph
288
+ .nodesOfKind(kind)
289
+ .filter((node) => view.past === true || isCurrent(definition, node))
290
+ .map((node) => ({ id: node.id, name: labelOf(definition, node) }))
291
+ .sort((a, b) => a.name.localeCompare(b.name)), [store, kind, graph, view.past, definition]);
292
+ /*
293
+ * Counted over the records the district counts (W-198): its head says
294
+ * "280 hives", the ones on this side of the horizon, so its relations do
295
+ * not say "299 hives → 14 apiaries" of the same district.
296
+ */
297
+ const relations = useMemo(() => {
298
+ const current = (id) => {
299
+ const node = store.graph.getNode(id);
300
+ return node !== undefined && (view.past === true || isCurrent(store.schema.tryDefinition(node.kind), node));
301
+ };
302
+ const edges = store.graph.allEdges().filter((edge) => current(edge.from) && current(edge.to));
303
+ return ribbonsOf(edges, (id) => store.graph.getNode(id)?.kind).filter((ribbon) => ribbon.from === kind || ribbon.to === kind);
304
+ }, [store, kind, graph, view.past]);
305
+ // A district that stops being asked about takes its question with it.
306
+ useEffect(() => () => setEmphasis(null), [setEmphasis]);
307
+ /*
308
+ * ITS PROBLEMS, the same rows the bar's problems list draws: the broken
309
+ * rules that name one of this district's records. The "⚠ N" on its name
310
+ * counts these, and presses to here.
311
+ */
312
+ const everyProblem = useViolations();
313
+ const flag = useKit().marks.flag;
314
+ const problems = useMemo(() => {
315
+ const ids = new Set(members.map((member) => member.id));
316
+ return everyProblem.filter((violation) => violation.nodeIds.some((id) => ids.has(id)));
317
+ }, [everyProblem, members]);
318
+ const lit = useMemo(() => [...new Set(problems.flatMap((violation) => violation.nodeIds))].filter((id) => store.graph.getNode(id)?.kind === kind).slice(0, 300), [problems, store, kind]);
319
+ const problemsHead = useRef(null);
320
+ const asked = useSyncExternalStore(subscribeToProblemsAsked, problemsAsked, problemsAsked);
321
+ // Asked for from the district's name: brought into view, and the keyboard moved to it.
322
+ useEffect(() => {
323
+ if (asked?.kind !== kind || problems.length === 0)
324
+ return;
325
+ problemsHead.current?.scrollIntoView?.({ block: "start" });
326
+ problemsHead.current?.focus({ preventScroll: true });
327
+ }, [asked?.n, asked?.kind, kind, problems.length > 0]); // eslint-disable-line react-hooks/exhaustive-deps
328
+ /* Closed, the keyboard goes back to what opened it — the problem count if there is one, else the district — never to the page. */
329
+ useEffect(() => () => {
330
+ putDownProblemsAsked();
331
+ setTimeout(() => {
332
+ const active = document.activeElement;
333
+ if (active && active !== document.body)
334
+ return;
335
+ const escaped = CSS.escape(kind);
336
+ document.querySelector(`[data-testid="district-problems-${escaped}"]`)?.focus({ preventScroll: true }) ??
337
+ document.querySelector(`[data-graview-view="${kindCardId(kind).replace(/["\\]/g, "\\$&")}"]`)?.focus({ preventScroll: true });
338
+ }, 0);
339
+ }, [kind]);
340
+ const plural = pluralLabel(store.schema, kind);
341
+ const words = narrow.trim().toLowerCase();
342
+ const shown = words ? members.filter((member) => member.name.toLowerCase().includes(words)) : members;
343
+ return (_jsxs(PanelFrame, { label: plural, testId: "district-panel", wide: "min(360px, 40%)", sheetHeight: "52%", onClose: () => setSelection([]), head: _jsxs(_Fragment, { children: [_jsx("div", { style: eyebrow, children: "District" }), _jsx("h2", { style: title, "data-testid": "district-panel-title", children: plural }), _jsxs("p", { style: quiet, children: [counted(store.schema, kind, members.length), definition?.description ? ` · ${definition.description}` : ""] }), _jsxs("div", { style: { display: "flex", gap: 8, flexWrap: "wrap", marginTop: 10 }, children: [_jsx("button", { type: "button", "data-testid": "district-panel-go", style: pressStyle, onClick: () => go({ ...withFocus(withOverview(view, false), aggregateId(kind)), relation: null }), children: "Go in" }), _jsx(ActsButton, { on: kindCardId(kind), about: `the ${plural.toLowerCase()}` })] })] }), children: [problems.length > 0 ? (_jsxs("section", { "aria-label": "Problems", "data-testid": "district-problems", "data-graview-problems": problems.length, children: [_jsx("style", { children: `${lit.map((id) => `.graview-ground[data-graview-altitude] .graview-building[data-graview-building="${CSS.escape(id)}"] polygon`).join(",\n")} { stroke: var(--graview-accent); stroke-width: 2.2; stroke-opacity: 1; }` }), _jsxs("h3", { ref: problemsHead, tabIndex: -1, "data-testid": "district-problems-heading", style: { display: "flex", alignItems: "baseline", gap: 8, margin: 0, padding: "14px 18px 8px", fontSize: "0.9375rem", fontWeight: 600, color: "var(--graview-warn)", borderTop: "1px solid var(--graview-edge)", scrollMarginTop: 0, outlineOffset: -2 }, children: [_jsx("span", { "aria-hidden": "true", children: flag }), _jsx("span", { style: { color: "var(--graview-ink)" }, children: problemsNamed(problems.length, plural) })] }), _jsx("ol", { style: listStyle, "data-testid": "district-problem-rows", children: _jsx(Suspense, { fallback: null, children: _jsx(ProblemRows, { violations: problems, pick: (violation) => {
344
+ const id = violation.subjectId ?? violation.nodeIds[0];
345
+ if (id !== undefined)
346
+ setSelection([id]);
347
+ } }) }) })] })) : null, relations.length > 0 ? (_jsxs("section", { "aria-label": "Relations", children: [_jsx("h3", { style: heading, children: "Relations" }), _jsx("ul", { style: listStyle, children: relations.map((ribbon) => (_jsx("li", { children: _jsxs("div", { "data-graview-relation-said": ribbon.edge, tabIndex: 0, style: { ...rowStyle, cursor: "default" }, onPointerEnter: () => setEmphasis(ribbon.edge), onPointerLeave: () => setEmphasis(null), onFocus: () => setEmphasis(ribbon.edge), onBlur: () => setEmphasis(null), children: [_jsx("span", { style: { flex: "1 1 auto", minWidth: 0 }, children: ribbonSentence(store.schema, ribbon) }), _jsx("span", { style: { fontSize: "0.75rem", color: "var(--graview-ink-faint)", fontVariantNumeric: "tabular-nums" }, title: `${numberAsRead(ribbon.links)} links`, children: numberAsRead(ribbon.links) })] }) }, ribbon.key))) })] })) : null, _jsxs("section", { "aria-label": plural, children: [_jsxs("h3", { style: heading, children: [plural, " ", _jsxs("span", { style: { fontWeight: 400, color: "var(--graview-ink-faint)" }, children: ["\u00B7 ", members.length] })] }), members.length > NARROW_PAST ? (_jsx("div", { style: { padding: "0 18px 6px" }, children: _jsx("input", { type: "search", "data-testid": "district-panel-narrow", "aria-label": `Narrow the ${plural.toLowerCase()} by name`, placeholder: "Narrow by name", value: narrow, onChange: (event) => setNarrow(event.target.value), style: { width: "100%", boxSizing: "border-box", minHeight: 32 } }) })) : null, _jsx("ul", { style: listStyle, children: shown.map((member) => (_jsx("li", { children: _jsx("button", { type: "button", className: "graview-map-panel-row", "data-graview-record": member.id, style: rowStyle, onClick: () => setSelection([member.id]),
348
+ // Its acts, as on the map: a right-click (or a long press) opens the menu about it, here.
349
+ onContextMenu: (event) => actsAt(event, member.id), children: _jsx("span", { style: { flex: "1 1 auto", minWidth: 0, overflowWrap: "anywhere" }, children: member.name }) }) }, member.id))) })] })] }));
350
+ }
351
+ //# sourceMappingURL=map-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-panel.js","sourceRoot":"","sources":["../src/map-panel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { CSSProperties } from "react";
2
+ import "./frame.js";
3
+ /** A Markdown text drawn as prose: headings from `headingsFrom` (3), links opening in `target` (a new tab). */
4
+ export default function MarkdownBody({ text, className, style, headingsFrom, target, }: {
5
+ readonly text: string;
6
+ readonly className?: string;
7
+ readonly style?: CSSProperties;
8
+ readonly headingsFrom?: number;
9
+ readonly target?: "_blank" | "_self";
10
+ }): import("react").JSX.Element;
11
+ //# sourceMappingURL=markdown-body.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-body.d.ts","sourceRoot":"","sources":["../src/markdown-body.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,OAAO,CAAC;AAEtD,OAAO,YAAY,CAAC;AAoJpB,+GAA+G;AAC/G,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,IAAI,EACJ,SAAS,EACT,KAAK,EACL,YAAgB,EAChB,MAAiB,GAClB,EAAE;IACD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CACtC,+BAMA"}
@@ -0,0 +1,89 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { headingLevel, markdownBlocks } from "@graview/core/markdown";
3
+ import "./frame.js"; // A door: tied to what the page drew first (TIED DOORS, packages/primitives/src/frame.ts).
4
+ /*
5
+ * PROSE WRITTEN IN MARKDOWN, DRAWN (FR-180): fetched the first time a record
6
+ * draws a text field its declaration says is Markdown — a page's first load
7
+ * carries none of it.
8
+ *
9
+ * `@graview/core/markdown` reads the text into blocks and runs of words;
10
+ * this draws each as the element it is. Every word is a text node React
11
+ * writes, a link's address is one of the web's or mail's (anything else is
12
+ * its words), a picture is its words, and no HTML passes through: whatever
13
+ * a value holds, it never becomes markup, a script or a handler.
14
+ *
15
+ * Headings are demoted under the page's own (a Markdown "#" is drawn one
16
+ * level below the section it is in); a long line of code or a wide table
17
+ * scrolls in its own box, never the page.
18
+ */
19
+ const BODY = { display: "grid", gap: "0.7em", minWidth: 0, overflowWrap: "anywhere" };
20
+ const BLOCK = { margin: 0 };
21
+ // A list says its marks whatever a page's own reset says of lists.
22
+ const LIST = { margin: 0, paddingInlineStart: "1.6em", display: "grid", gap: "0.3em" };
23
+ const ITEM_BLOCKS = { display: "grid", gap: "0.3em", minWidth: 0 };
24
+ const HEADING = { margin: "0.4em 0 0", fontSize: "1em", fontWeight: 650, lineHeight: 1.35, color: "var(--graview-ink)" };
25
+ const CODE = { fontSize: "0.9em", background: "var(--graview-panel-muted)", borderRadius: 4, padding: "0.1em 0.3em" };
26
+ const PRE = { margin: 0, padding: "0.7em 0.9em", overflowX: "auto", maxWidth: "100%", background: "var(--graview-panel-muted)", borderRadius: "var(--graview-radius-sm, 8px)", fontSize: "0.875em", lineHeight: 1.5, whiteSpace: "pre", overflowWrap: "normal" };
27
+ const QUOTE = { margin: 0, paddingInlineStart: "0.9em", borderInlineStart: "3px solid var(--graview-edge)", color: "var(--graview-ink-muted)", display: "grid", gap: "0.6em" };
28
+ const RULE = { border: 0, borderTop: "1px solid var(--graview-edge)", margin: "0.3em 0", width: "100%" };
29
+ const TABLE_BOX = { overflowX: "auto", maxWidth: "100%" };
30
+ const TABLE = { borderCollapse: "collapse", fontSize: "0.9375em", minWidth: "50%" };
31
+ const CELL = { padding: "0.35em 0.7em", borderBottom: "1px solid var(--graview-edge)", textAlign: "start", verticalAlign: "top", overflowWrap: "normal" };
32
+ // A link in prose is a target a finger can take: its padding grows the box it is pressed in, not the line it stands in.
33
+ const LINK = { color: "var(--graview-accent)", paddingBlock: "0.2em" };
34
+ function inline(parts, target) {
35
+ return parts.map((part, at) => {
36
+ switch (part.t) {
37
+ case "text":
38
+ return part.text;
39
+ case "br":
40
+ return _jsx("br", {}, at);
41
+ case "code":
42
+ return (_jsx("code", { style: CODE, children: part.text }, at));
43
+ case "strong":
44
+ return _jsx("strong", { children: inline(part.children, target) }, at);
45
+ case "em":
46
+ return _jsx("em", { children: inline(part.children, target) }, at);
47
+ case "del":
48
+ return _jsx("del", { children: inline(part.children, target) }, at);
49
+ case "link": {
50
+ const blank = target === "_blank" && !/^mailto:/i.test(part.href);
51
+ return (_jsx("a", { href: part.href, rel: "noopener noreferrer nofollow", ...(blank ? { target: "_blank" } : {}), style: LINK, onClick: (event) => event.stopPropagation(), children: inline(part.children, target) }, at));
52
+ }
53
+ }
54
+ });
55
+ }
56
+ function blocks(list, from, target) {
57
+ return list.map((block, at) => {
58
+ switch (block.t) {
59
+ case "heading": {
60
+ const Tag = `h${headingLevel(block.level, from)}`;
61
+ return (_jsx(Tag, { style: HEADING, children: inline(block.children, target) }, at));
62
+ }
63
+ case "p":
64
+ return (_jsx("p", { style: BLOCK, children: inline(block.children, target) }, at));
65
+ case "list": {
66
+ const items = block.items.map((item, index) => {
67
+ // A task's box stands in for the bullet.
68
+ const first = item[0]?.t === "p" ? item[0].children[0] : undefined;
69
+ const task = first?.t === "text" && /^[☐☑] /.test(first.text);
70
+ return (_jsx("li", { style: { display: "list-item", minWidth: 0, ...(task ? { listStyle: "none" } : {}) }, children: item.length === 1 && item[0].t === "p" ? inline(item[0].children, target) : _jsx("div", { style: ITEM_BLOCKS, children: blocks(item, from, target) }) }, index));
71
+ });
72
+ return block.ordered ? (_jsx("ol", { start: block.start, style: { ...LIST, listStyle: "decimal" }, children: items }, at)) : (_jsx("ul", { style: { ...LIST, listStyle: "disc" }, children: items }, at));
73
+ }
74
+ case "quote":
75
+ return (_jsx("blockquote", { style: QUOTE, children: blocks(block.blocks, from, target) }, at));
76
+ case "code":
77
+ return (_jsx("pre", { style: PRE, tabIndex: 0, children: _jsx("code", { children: block.text }) }, at));
78
+ case "rule":
79
+ return _jsx("hr", { style: RULE }, at);
80
+ case "table":
81
+ return (_jsx("div", { style: TABLE_BOX, "data-graview-md-table": "", children: _jsxs("table", { style: TABLE, children: [_jsx("thead", { children: _jsx("tr", { children: block.head.map((cell, index) => (_jsx("th", { style: { ...CELL, fontWeight: 600, ...(block.align[index] ? { textAlign: block.align[index] } : {}) }, children: inline(cell, target) }, index))) }) }), _jsx("tbody", { children: block.rows.map((row, index) => (_jsx("tr", { children: row.map((cell, column) => (_jsx("td", { style: { ...CELL, ...(block.align[column] ? { textAlign: block.align[column] } : {}) }, children: inline(cell, target) }, column))) }, index))) })] }) }, at));
82
+ }
83
+ });
84
+ }
85
+ /** A Markdown text drawn as prose: headings from `headingsFrom` (3), links opening in `target` (a new tab). */
86
+ export default function MarkdownBody({ text, className, style, headingsFrom = 3, target = "_blank", }) {
87
+ return (_jsx("div", { "data-graview-text-body": "", "data-graview-markdown": "", ...(className ? { className } : {}), style: { ...BODY, ...style }, children: blocks(markdownBlocks(text), headingsFrom, target) }));
88
+ }
89
+ //# sourceMappingURL=markdown-body.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-body.js","sourceRoot":"","sources":["../src/markdown-body.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import "./frame.js";
2
+ import type { HeldNotice, NoticeBoard } from "./notices.js";
3
+ /**
4
+ * THE NOTICES, DRAWN (FR-75, FR-133): banners at the top of the picture they
5
+ * are about, toasts at its foot, in the top layer. Fetched with the first
6
+ * notice a page holds (`Notices`, in `notices.tsx`, says each aloud).
7
+ */
8
+ export declare function NoticeStacks({ notices, anchor, board }: {
9
+ readonly notices: readonly HeldNotice[];
10
+ readonly anchor: () => HTMLElement | null;
11
+ readonly board: NoticeBoard;
12
+ }): import("react").JSX.Element;
13
+ //# sourceMappingURL=notice-stacks.d.ts.map