@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
@@ -1,20 +1,66 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { arrangeAllows, arrangeable, formatArrangement } from "@graview/core/arrange";
3
- import { dayAsRead, labelOf, valueWords, } from "@graview/core";
3
+ import { dayAsRead, labelOf, } from "@graview/core";
4
+ import { valueWords } from "@graview/core/words";
4
5
  import { retryingImport } from "@graview/core/retry";
5
6
  import { lazyModule, POPOVER_STYLE, usePopover } from "@graview/react/provider";
6
- import { useEffect, useRef } from "react";
7
+ import { Suspense, useEffect, useRef } from "react";
7
8
  import { VISUALLY_HIDDEN } from "./primitives/measure.js";
8
9
  export { arrangementOf, withArrangement } from "./arrangement.js";
10
+ import "./frame.js"; // A door: tied to what the page drew first (TIED DOORS, packages/primitives/src/frame.ts).
11
+ /*
12
+ * WHAT A LIST OFFERS TO FILTER BY AS AN APP GROWS. Here, beside the line
13
+ * that asks it, rather than with the arranging a lens in the scene carries.
14
+ */
15
+ /** From how many records at a relation's far end it is found by typing a few letters rather than listed whole. */
16
+ export const TYPED_FROM = 9;
17
+ /** From how many records at a relation's far end a list leaves it out of its filters unless the declaration names it. */
18
+ export const MANY_AT_THE_FAR_END = 40;
19
+ /** The choice fields a list shows as chips when the declaration names none: the first two it offers. */
20
+ export const CHIP_FIELDS = 2;
21
+ /** How many records each kind holds, for the far ends of a kind's relations. */
22
+ export function farCounts(graph) {
23
+ const counts = new Map();
24
+ for (const node of graph.allNodes())
25
+ counts.set(node.kind, (counts.get(node.kind) ?? 0) + 1);
26
+ return counts;
27
+ }
28
+ /** How many records stand at an offer's far end: every record of its far kinds. */
29
+ export const farCount = (offer, counts) => (offer.far ?? []).reduce((sum, kind) => sum + (counts.get(kind) ?? 0), 0);
30
+ /**
31
+ * WHAT A LIST OFFERS TO FILTER BY, AS AN APP GROWS.
32
+ *
33
+ * Every way the declaration allows is too many once a relation's far end
34
+ * holds ninety features: the menu listed every one of them. `named` — a
35
+ * declaration's `pages.lists.<kind>.filters` — is what the list offers, in
36
+ * that order. Unsaid, every way but a relation to a kind with many records
37
+ * (`MANY_AT_THE_FAR_END`), which is offered instead by what its far end is
38
+ * (a choice field over the edge, `about: "via"`); a via offer is not
39
+ * offered otherwise — the relation itself says it.
40
+ */
41
+ export function offeredFilters(offers, graph, named) {
42
+ if (named)
43
+ return named.flatMap((key) => offers.filters.filter((offer) => offer.key === key));
44
+ const counts = farCounts(graph);
45
+ const many = new Set(offers.filters.filter((offer) => offer.about === "edge" && farCount(offer, counts) > MANY_AT_THE_FAR_END).map((offer) => offer.key));
46
+ return offers.filters.filter((offer) => (offer.about === "edge" ? !many.has(offer.key) : offer.about === "via" ? many.has(offer.key.split(".")[0]) : true));
47
+ }
48
+ /** The choice fields of what a list offers that it shows as chips: the ones named, else the first `CHIP_FIELDS`. */
49
+ export function chipOffers(offered, named) {
50
+ const choices = offered.filter((offer) => offer.about === "field" && offer.type === "choice" && (offer.options?.length ?? 0) > 0);
51
+ return named ? choices : choices.slice(0, CHIP_FIELDS);
52
+ }
9
53
  /** Below this width of its own the line is a phone's: the count and one "Arrange". */
10
54
  export const ARRANGE_NARROW = 520;
11
- /** A condition in words: "Due before 1 Oct 2026", "The list it is on: Today", "Past". */
55
+ /** A condition in words: "Due before Oct 1, 2026", "The list it is on: Today", "Past". */
12
56
  export function sayCondition(schema, graph, offers, condition) {
13
57
  const offer = offers.filters.find((candidate) => candidate.key === condition.key);
14
58
  if (!offer)
15
59
  return `${condition.key}: ${condition.value}`;
16
60
  if (offer.about === "is")
17
61
  return condition.value.charAt(0).toUpperCase() + condition.value.slice(1);
62
+ if (offer.about === "via")
63
+ return `${offer.label}: ${valueWords(schema.tryDefinition(offer.far?.[0] ?? ""), offer.key.split(".")[1], condition.value)}`;
18
64
  if (offer.about === "edge") {
19
65
  if (condition.value === "*")
20
66
  return `${offer.label}: anything`;
@@ -25,7 +71,7 @@ export function sayCondition(schema, graph, offers, condition) {
25
71
  }
26
72
  if (offer.type === "date") {
27
73
  const [op, date] = condition.value.split(":");
28
- // The day as a person reads it ("Due before 1 Sep 2026"), as the chip's card says it.
74
+ // The day as a person reads it ("Due before Sep 1, 2026" in en-US), as the chip's card says it.
29
75
  return `${offer.label} ${op} ${date ? dayAsRead(date) : ""}`.trim();
30
76
  }
31
77
  if (offer.type === "boolean")
@@ -58,17 +104,27 @@ export function directionWords(offer) {
58
104
  /** The lists the line opens, fetched when first wanted (`arrange-lists.tsx`). */
59
105
  const LISTS = lazyModule(retryingImport(() => import("./arrange-lists.js")));
60
106
  const Lists = LISTS.part((module, props) => _jsx(module.ArrangeLists, { ...props }), { what: "This list", quiet: true });
107
+ const Chips = LISTS.part((module, props) => _jsx(module.ArrangeChips, { ...props }), { what: "This list", quiet: true });
61
108
  /** The lists, fetched now: for a test, or a page that knows a list is about to open. */
62
109
  export const preloadArrangeLists = () => LISTS.load();
63
110
  /** What each bar last sent, by its test id and kind (see `ArrangeBar`). */
64
111
  const SENT = new Map();
65
112
  export function ArrangeBar(props) {
66
113
  const { schema, graph, kind, arrangement: given, onChange } = props;
67
- const offers = arrangeable(schema, kind);
114
+ // A list hands its own (through its relations to their far ends, `throughEdges`); a lens's are its kind's.
115
+ const offers = props.offers ?? arrangeable(schema, kind);
68
116
  const id = props.testId ?? "arrange";
69
117
  const canSort = arrangeAllows(props.allow, "sort") && offers.sorts.length > 1;
70
118
  const canGroup = arrangeAllows(props.allow, "group") && offers.groups.length > 0;
71
- const canFilter = arrangeAllows(props.allow, "filter") && offers.filters.length > 0;
119
+ /*
120
+ * WHAT IS OFFERED, AS THE APP GROWS: the ways the declaration names, or
121
+ * all but a relation to many records; its choice fields stand as chips
122
+ * when the list hands its records, and Filter holds the rest.
123
+ */
124
+ const offered = arrangeAllows(props.allow, "filter") ? offeredFilters(offers, graph, props.filters) : [];
125
+ const chipped = props.chips ? chipOffers(offered, props.filters) : [];
126
+ const menu = offered.filter((offer) => !chipped.includes(offer));
127
+ const canFilter = menu.length > 0;
72
128
  const words = props.query !== false && props.allow !== false;
73
129
  const count = countWords(props.noun, props.kept);
74
130
  if (!canSort && !canGroup && !canFilter && !words && !count)
@@ -123,14 +179,20 @@ export function ArrangeBar(props) {
123
179
  const groupOffer = arrangement.group ? offers.groups.find((offer) => offer.key === arrangement.group.by) : undefined;
124
180
  const ways = directionWords(sortOffer);
125
181
  // The lists themselves come when one is first opened (`ArrangeLists`): the line is all a page carries up front.
126
- const listProps = { schema, graph, offers, arrangement, set, toggle, has, testId: id };
182
+ const listProps = { schema, graph, offers: { ...offers, filters: menu }, arrangement, set, toggle, has, testId: id };
183
+ // A chip keeps one value of its field: pressed again it lets go; another of the same field takes its place.
184
+ const choose = (key, value) => has({ key, value })
185
+ ? without(conditions.findIndex((c) => c.key === key && c.value === value))
186
+ : set({ filter: [...conditions.filter((c) => c.key !== key), { key, value }] });
127
187
  const sortTrigger = arrangement.sort ? (_jsxs(_Fragment, { children: ["Sorted by ", inSentence(sortOffer?.label ?? arrangement.sort.by), _jsx("span", { "aria-hidden": "true", children: arrangement.sort.direction === "desc" ? " ↓" : " ↑" })] })) : ("Sort");
128
188
  const bucket = arrangement.group?.bucket && groupOffer?.buckets ? `, a ${arrangement.group.bucket} each` : "";
129
189
  const groupTrigger = arrangement.group ? `Grouped by ${inSentence(groupOffer?.label ?? arrangement.group.by)}${bucket}` : "Group";
130
- return (_jsxs("div", { "data-testid": `${id}-bar`, role: "group", "aria-label": "Arrange", className: "graview-arrange", style: props.style, onPointerEnter: LISTS.prefetch, onFocus: LISTS.prefetch, children: [_jsx("style", { children: ARRANGE_CSS }), _jsxs("div", { className: "graview-arrange-line", children: [count ? (_jsxs("span", { className: "graview-arrange-count", "data-testid": `${id}-count`, children: [count.kept ? _jsx("span", { "data-testid": `${id}-kept`, children: count.kept }) : null, count.words] })) : null, canSort ? (_jsx("span", { className: "graview-arrange-part graview-arrange-one", children: _jsx(Choice, { testId: `${id}-sort`, value: arrangement.sort?.by ?? "", set: arrangement.sort !== undefined, label: "Sort", name: arrangement.sort ? `Sorted by ${inSentence(sortOffer?.label ?? arrangement.sort.by)}, ${ways[arrangement.sort.direction].toLowerCase()}` : "Sort", list: (done) => _jsx(Lists, { which: "sort", done: done, ...listProps }), children: sortTrigger }) })) : null, canGroup ? (_jsx("span", { className: "graview-arrange-part graview-arrange-one", children: _jsx(Choice, { testId: `${id}-group`, value: arrangement.group?.by ?? "", set: arrangement.group !== undefined, label: "Group", name: groupTrigger, list: (done) => _jsx(Lists, { which: "group", done: done, ...listProps }), children: groupTrigger }) })) : null, canFilter ? (_jsx("span", { className: "graview-arrange-part graview-arrange-one", children: _jsx(Choice, { testId: `${id}-add`, value: "", set: false, label: "Filter", name: conditions.length > 0 ? `Filter — ${conditions.length} on` : "Filter", list: (done) => _jsx(Lists, { which: "filter", done: done, ...listProps }), children: "Filter" }) })) : null, canSort || canGroup || canFilter ? (_jsx("span", { className: "graview-arrange-part graview-arrange-all", children: _jsx(Choice, { testId: `${id}-all`, value: "", set: false, label: "Arrange", name: "Arrange: sort, group and filter", list: (done) => _jsx(Lists, { which: "all", done: done, parts: { sort: canSort, group: canGroup, filter: canFilter }, ...listProps }), children: "Arrange" }) })) : null, conditions.map((condition, at) => {
190
+ return (_jsxs("div", { "data-testid": `${id}-bar`, role: "group", "aria-label": "Arrange", className: "graview-arrange", style: props.style, onPointerEnter: LISTS.prefetch, onFocus: LISTS.prefetch, children: [_jsx("style", { children: ARRANGE_CSS }), _jsxs("div", { className: "graview-arrange-line", children: [count ? (_jsxs("span", { className: "graview-arrange-count", "data-testid": `${id}-count`, children: [count.kept ? _jsx("span", { "data-testid": `${id}-kept`, children: count.kept }) : null, count.words] })) : null, conditions.map((condition, at) => {
131
191
  const words = sayCondition(schema, graph, offers, condition);
132
192
  return (_jsxs("span", { className: "graview-arrange-token", "data-testid": `${id}-condition`, children: [words, _jsx("button", { type: "button", "aria-label": `Remove: ${words}`, title: "Remove", onClick: () => without(at), children: "\u00D7" })] }, `${condition.key}:${condition.value}`));
133
- }), words ? (_jsxs("label", { className: "graview-arrange-words-at", children: [_jsx("span", { style: VISUALLY_HIDDEN, children: "Find" }), _jsx("input", { type: "search", className: "graview-arrange-words", "data-testid": `${id}-query`, value: arrangement.query ?? "", placeholder: "Find\u2026", onChange: (event) => set({ query: event.target.value.length > 0 ? event.target.value : undefined }) })] })) : null] })] }));
193
+ }), canSort ? (_jsx("span", { className: "graview-arrange-part graview-arrange-one", children: _jsx(Choice, { testId: `${id}-sort`, value: arrangement.sort?.by ?? "", set: arrangement.sort !== undefined, label: "Sort", name: arrangement.sort ? `Sorted by ${inSentence(sortOffer?.label ?? arrangement.sort.by)}, ${ways[arrangement.sort.direction].toLowerCase()}` : "Sort", list: (done) => _jsx(Lists, { which: "sort", done: done, ...listProps }), children: sortTrigger }) })) : null, canGroup ? (_jsx("span", { className: "graview-arrange-part graview-arrange-one", children: _jsx(Choice, { testId: `${id}-group`, value: arrangement.group?.by ?? "", set: arrangement.group !== undefined, label: "Group", name: groupTrigger, list: (done) => _jsx(Lists, { which: "group", done: done, ...listProps }), children: groupTrigger }) })) : null, canFilter ? (_jsx("span", { className: "graview-arrange-part", children: _jsx(Choice, { testId: `${id}-add`, value: "", set: false, label: "Filter", name: conditions.length > 0 ? `Filter — ${conditions.length} on` : "Filter", list: (done) => _jsx(Lists, { which: "filter", done: done, ...listProps }), children: "Filter" }) })) : null, canSort || canGroup ? (_jsx("span", { className: "graview-arrange-part graview-arrange-all", children: _jsx(Choice, { testId: `${id}-all`, value: "", set: false, label: "Arrange", name: "Arrange: sort and group", list: (done) => _jsx(Lists, { which: "all", done: done, parts: { sort: canSort, group: canGroup, filter: false }, ...listProps }), children: "Arrange" }) })) : null, words ? (_jsxs("label", { className: "graview-arrange-words-at", children: [_jsx("span", { style: VISUALLY_HIDDEN, children: "Find" }), _jsx("input", { type: "search", className: "graview-arrange-words", "data-testid": `${id}-query`, value: arrangement.query ?? "", placeholder: "Find\u2026", onChange: (event) => set({ query: event.target.value.length > 0 ? event.target.value : undefined }) })] })) : null, chipped.length > 0 && props.chips ? (
194
+ // The chips come with the lists' module, fetched as the list is first drawn: a lens's line never carries them.
195
+ _jsx(Suspense, { fallback: null, children: _jsx(Chips, { offers: chipped, chips: props.chips, schema: schema, graph: graph, kind: kind, arrangement: arrangement, has: has, choose: choose, testId: id }) })) : null] })] }));
134
196
  }
135
197
  /** The count in words, and the part of it that says what the arrangement kept when it kept fewer. */
136
198
  function countWords(noun, kept) {
@@ -173,7 +235,7 @@ function walk(event) {
173
235
  return;
174
236
  const at = stops.indexOf(document.activeElement);
175
237
  // A date box keeps its own arrows: they change the day.
176
- if (document.activeElement instanceof HTMLInputElement && (event.key === "ArrowUp" || event.key === "ArrowDown"))
238
+ if (document.activeElement instanceof HTMLInputElement && document.activeElement.type === "date" && (event.key === "ArrowUp" || event.key === "ArrowDown"))
177
239
  return;
178
240
  event.preventDefault();
179
241
  const next = event.key === "Home" ? 0 : event.key === "End" ? stops.length - 1 : event.key === "ArrowDown" ? (at + 1) % stops.length : (at - 1 + stops.length) % stops.length;
@@ -202,7 +264,7 @@ const ARRANGE_CSS = `
202
264
  .graview-arrange :focus-visible,.graview-arrange-list :focus-visible{outline:2px solid var(--graview-accent);outline-offset:1px}
203
265
  .graview-arrange-all{display:none}
204
266
  @container (max-width: ${ARRANGE_NARROW - 1}px){.graview-arrange-one{display:none}.graview-arrange-all{display:inline-flex}}
205
- .graview-arrange-token{display:inline-flex;align-items:center;gap:0;min-width:0;padding-left:6px;color:var(--graview-ink);overflow-wrap:anywhere}
267
+ .graview-arrange-token{display:inline-flex;align-items:center;gap:0;min-width:0;min-height:26px;box-sizing:border-box;padding:0 2px 0 10px;border:1px solid var(--graview-edge);border-radius:999px;background:var(--graview-panel);color:var(--graview-ink);overflow-wrap:anywhere}
206
268
  .graview-arrange-token button{display:inline-flex;align-items:center;justify-content:center;min-width:24px;min-height:24px;margin:0;padding:0;border:0;border-radius:6px;background:none;font:inherit;line-height:1;color:var(--graview-ink-muted);cursor:pointer}
207
269
  .graview-arrange-token button:hover{color:var(--graview-ink);background:color-mix(in srgb,var(--graview-ink) 7%,transparent)}
208
270
  .graview-arrange-words-at{display:inline-flex;min-width:0;max-width:100%}
@@ -1 +1 @@
1
- {"version":3,"file":"arrange-bar.js","sourceRoot":"","sources":["../src/arrange-bar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"arrange-bar.js","sourceRoot":"","sources":["../src/arrange-bar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EACL,SAAS,EACT,OAAO,GASR,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAA0D,MAAM,OAAO,CAAC;AAC5G,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,YAAY,CAAC,CAAC,2FAA2F;AA0DhH;;;GAGG;AAEH,kHAAkH;AAClH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAE5B,yHAAyH;AACzH,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAEtC,wGAAwG;AACxG,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAE7B,gFAAgF;AAChF,MAAM,UAAU,SAAS,CAAC,KAAmB;IAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE;QAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7F,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,mFAAmF;AACnF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAmB,EAAE,MAAmC,EAAU,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAExK;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAAC,MAAmB,EAAE,KAAmB,EAAE,KAAyB;IAChG,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;IAC9F,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1J,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/J,CAAC;AAED,oHAAoH;AACpH,MAAM,UAAU,UAAU,CAAC,OAAgC,EAAE,KAAyB;IACpF,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClI,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AACzD,CAAC;AAED,sFAAsF;AACtF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAElC,0FAA0F;AAC1F,MAAM,UAAU,YAAY,CAAC,MAAiB,EAAE,KAAmB,EAAE,MAAmB,EAAE,SAAoB;IAC5G,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,CAAC,CAAC;IAClF,IAAI,CAAC,KAAK;QAAE,OAAO,GAAG,SAAS,CAAC,GAAG,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;IAC1D,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpG,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK;QAAE,OAAO,GAAG,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;IACzJ,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;QAC3B,IAAI,SAAS,CAAC,KAAK,KAAK,GAAG;YAAE,OAAO,GAAG,KAAK,CAAC,KAAK,YAAY,CAAC;QAC/D,IAAI,SAAS,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,GAAG,KAAK,CAAC,KAAK,WAAW,CAAC;QACjE,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC5C,OAAO,GAAG,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACtG,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9C,gGAAgG;QAChG,OAAO,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IACtE,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACpG,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACrD,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,UAAU,EAAE,CAAC;YAC1C,OAAO,GAAG,KAAK,CAAC,KAAK,KAAK,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3K,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;IACvE,OAAO,GAAG,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;AACxG,CAAC;AAED,kHAAkH;AAClH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAE1I,qEAAqE;AACrE,MAAM,UAAU,cAAc,CAAC,KAA+B;IAC5D,IAAI,KAAK,EAAE,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;IACnF,IAAI,KAAK,EAAE,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;IACpF,IAAI,KAAK,EAAE,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC7E,IAAI,KAAK,EAAE,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;IACzF,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC3C,CAAC;AAED,iFAAiF;AACjF,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAC7E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,MAA2C,EAAE,KAA8C,EAAE,EAAE,CAAC,KAAC,MAAM,CAAC,YAAY,OAAK,KAAK,GAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAClM,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,MAA2C,EAAE,KAA8C,EAAE,EAAE,CAAC,KAAC,MAAM,CAAC,YAAY,OAAK,KAAK,GAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAClM,wFAAwF;AACxF,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAqB,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAExE,2EAA2E;AAC3E,MAAM,IAAI,GAAG,IAAI,GAAG,EAA0E,CAAC;AAE/F,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACpE,2GAA2G;IAC3G,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzD,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,IAAI,SAAS,CAAC;IACrC,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9E,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACjF;;;;OAIG;IACH,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzG,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC;IAC7D,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAEzE;;;;;;;;OAQG;IACH,MAAM,IAAI,GAAG,CAAC,GAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1E;;;;;OAKG;IACH,MAAM,MAAM,GAAG,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,EAAU,EAAE,MAAM,EAAE,IAA0B,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;IACtH,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACvG,IAAI,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,iFAAiF;IACjF,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;IACjD,MAAM,GAAG,GAAG,CAAC,KAA2B,EAAE,EAAE;QAC1C,qFAAqF;QACrF,MAAM,IAAI,GAA4B,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;QACtF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACnF,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAmB,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAmB,CAAC,CAAC,CAAC;QAClD,QAAQ,CAAC,IAAmB,CAAC,CAAC;IAChC,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,IAAI,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG,CAAC,EAAU,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,CAAC,SAAoB,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC;IACrH,0FAA0F;IAC1F,MAAM,MAAM,GAAG,CAAC,SAAoB,EAAE,EAAE,CACtC,GAAG,CAAC,SAAS,CAAC;QACZ,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9F,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAElD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC,IAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClH,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC,KAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtH,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IACvC,gHAAgH;IAChH,MAAM,SAAS,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACrH,4GAA4G;IAC5G,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE,CAC5C,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QACjB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QAC1E,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACpF,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CACrC,4CACa,UAAU,CAAC,SAAS,EAAE,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,EAC9D,8BAAkB,MAAM,YAAE,WAAW,CAAC,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAQ,IACpF,CACJ,CAAC,CAAC,CAAC,CACF,MAAM,CACP,CAAC;IACF,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,WAAW,CAAC,KAAK,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9G,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,UAAU,CAAC,UAAU,EAAE,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAElI,OAAO,CACL,8BAAkB,GAAG,EAAE,MAAM,EAAE,IAAI,EAAC,OAAO,gBAAY,SAAS,EAAC,SAAS,EAAC,iBAAiB,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,aACtK,0BAAQ,WAAW,GAAS,EAC5B,eAAK,SAAS,EAAC,sBAAsB,aAClC,KAAK,CAAC,CAAC,CAAC,CACP,gBAAM,SAAS,EAAC,uBAAuB,iBAAc,GAAG,EAAE,QAAQ,aAC/D,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,8BAAmB,GAAG,EAAE,OAAO,YAAG,KAAK,CAAC,IAAI,GAAQ,CAAC,CAAC,CAAC,IAAI,EACxE,KAAK,CAAC,KAAK,IACP,CACR,CAAC,CAAC,CAAC,IAAI,EAEP,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE;wBAChC,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;wBAC7D,OAAO,CACL,gBAAkD,SAAS,EAAC,uBAAuB,iBAAc,GAAG,EAAE,YAAY,aAC/G,KAAK,EACN,iBAAQ,IAAI,EAAC,QAAQ,gBAAa,WAAW,KAAK,EAAE,EAAE,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,uBAEtF,KAJA,GAAG,SAAS,CAAC,GAAG,IAAI,SAAS,CAAC,KAAK,EAAE,CAKzC,CACR,CAAC;oBACJ,CAAC,CAAC,EACD,OAAO,CAAC,CAAC,CAAC,CACT,eAAM,SAAS,EAAC,0CAA0C,YACxD,KAAC,MAAM,IACL,MAAM,EAAE,GAAG,EAAE,OAAO,EACpB,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EACjC,GAAG,EAAE,WAAW,CAAC,IAAI,KAAK,SAAS,EACnC,KAAK,EAAC,MAAM,EACZ,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,UAAU,CAAC,SAAS,EAAE,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EACvJ,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAC,KAAK,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,EAAE,IAAI,KAAM,SAAS,GAAI,YAEhE,WAAW,GACL,GACJ,CACR,CAAC,CAAC,CAAC,IAAI,EACP,QAAQ,CAAC,CAAC,CAAC,CACV,eAAM,SAAS,EAAC,0CAA0C,YACxD,KAAC,MAAM,IAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE,KAAK,EAAC,OAAO,EAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAC,KAAK,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,EAAE,IAAI,KAAM,SAAS,GAAI,YAC1M,YAAY,GACN,GACJ,CACR,CAAC,CAAC,CAAC,IAAI,EACP,SAAS,CAAC,CAAC,CAAC,CACX,eAAM,SAAS,EAAC,sBAAsB,YACpC,KAAC,MAAM,IAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAC,EAAE,EAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAC,KAAK,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAE,IAAI,KAAM,SAAS,GAAI,uBAExM,GACJ,CACR,CAAC,CAAC,CAAC,IAAI,EACP,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,CACrB,eAAM,SAAS,EAAC,0CAA0C,YACxD,KAAC,MAAM,IACL,MAAM,EAAE,GAAG,EAAE,MAAM,EACnB,KAAK,EAAC,EAAE,EACR,GAAG,EAAE,KAAK,EACV,KAAK,EAAC,SAAS,EACf,IAAI,EAAC,yBAAyB,EAC9B,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAC,KAAK,IAAC,KAAK,EAAC,KAAK,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAM,SAAS,GAAI,wBAGnH,GACJ,CACR,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,CAAC,CAAC,CACP,iBAAO,SAAS,EAAC,0BAA0B,aACzC,eAAM,KAAK,EAAE,eAAe,qBAAa,EACzC,gBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,uBAAuB,iBACpB,GAAG,EAAE,QAAQ,EAC1B,KAAK,EAAE,WAAW,CAAC,KAAK,IAAI,EAAE,EAC9B,WAAW,EAAC,YAAO,EACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,GACnG,IACI,CACT,CAAC,CAAC,CAAC,IAAI,EAEP,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;oBACnC,+GAA+G;oBAC/G,KAAC,QAAQ,IAAC,QAAQ,EAAE,IAAI,YACtB,KAAC,KAAK,IAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAI,GAC/I,CACZ,CAAC,CAAC,CAAC,IAAI,IACJ,IACF,CACP,CAAC;AACJ,CAAC;AAED,qGAAqG;AACrG,SAAS,UAAU,CACjB,IAA6B,EAC7B,IAA6B;IAE7B,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC;IACxC,IAAI,CAAC,IAAI;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACvF,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAClD,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;AACjH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,MAAM,CAAC,EACd,MAAM,EACN,KAAK,EACL,GAAG,EACH,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,QAAQ,GAaT;IACC,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IACjD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,CAAC,IAAI;YAAE,OAAO;QAC1B,kGAAkG;QAClG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAc,uBAAuB,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACpG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACnB,OAAO,CACL,8BACE,kBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,sBAAsB,iBACnB,MAAM,cACT,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAC9B,KAAK,EAAE,KAAK,gBACA,IAAI,KACZ,OAAO,CAAC,OAAO,EACnB,OAAO,EAAE,OAAO,CAAC,MAAM,aAEtB,QAAQ,EACT,KAAC,OAAO,KAAG,IACJ,EACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CACd,iBACM,OAAO,CAAC,IAAI,EAChB,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE;oBACf,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;gBACzB,CAAC,EACD,IAAI,EAAC,OAAO,gBACA,KAAK,iBACL,cAAc,kBACZ,MAAM,EACpB,SAAS,EAAC,sBAAsB,EAChC,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,IAAI,YAEd,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAC/B,CACP,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,SAAS,IAAI,CAAC,KAAoC;IAChD,IAAI,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;QAAE,OAAO;IACzE,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAc,+BAA+B,CAAC,CAAC,CAAC;IACtG,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC/B,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,aAA4B,CAAC,CAAC;IAChE,wDAAwD;IACxD,IAAI,QAAQ,CAAC,aAAa,YAAY,gBAAgB,IAAI,QAAQ,CAAC,aAAa,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC;QAAE,OAAO;IACnK,KAAK,CAAC,cAAc,EAAE,CAAC;IACvB,MAAM,IAAI,GACR,KAAK,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACnK,KAAK,CAAC,IAAI,CAAE,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC;AAGD,4EAA4E;AAC5E,SAAS,OAAO;IACd,OAAO,CACL,cAAK,KAAK,EAAC,GAAG,EAAC,MAAM,EAAC,GAAG,EAAC,OAAO,EAAC,WAAW,iBAAa,MAAM,EAAC,SAAS,EAAC,OAAO,EAAC,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,YAC1H,eAAM,CAAC,EAAC,sBAAsB,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,KAAK,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,GAAG,GAC9H,CACP,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,GAAG;;;;;;;;;;;yBAWK,cAAc,GAAG,CAAC;;;;;;;CAO1C,CAAC;AAGF,4FAA4F;AAC5F,MAAM,UAAU,kBAAkB,CAAC,WAAwB;IACzD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,WAAW,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC;IAC5D,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,aAAa,WAAW,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAClI,IAAI,WAAW,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAChE,IAAI,WAAW,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,aAAa,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACrE,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC"}
@@ -1,4 +1,5 @@
1
- import { type AnySchema, type Arrangeable, type Arrangement, type ArrangeGraph, type Condition } from "@graview/core";
1
+ import { type AnySchema, type Arrangeable, type ArrangeOffer, type Arrangement, type ArrangeGraph, type ArrangeNode, type Condition } from "@graview/core";
2
+ import "./frame.js";
2
3
  /**
3
4
  * THE ARRANGING LINE'S LISTS: what "Sort", "Group", "Filter" and "Arrange"
4
5
  * open. Fetched when a list is first opened, or when the pointer or the
@@ -20,6 +21,8 @@ export interface FilterEntry {
20
21
  readonly label: string;
21
22
  /** The offer it is under: its heading in the list. */
22
23
  readonly group: string;
24
+ /** The offer's key. */
25
+ readonly key?: string;
23
26
  readonly condition?: Condition;
24
27
  readonly ask?: {
25
28
  readonly key: string;
@@ -34,6 +37,37 @@ export interface FilterEntry {
34
37
  * day, so it is offered as "before…", "after…" and "on…", which ask for it.
35
38
  */
36
39
  export declare function filterEntries(schema: AnySchema, graph: ArrangeGraph, offers: Arrangeable): readonly FilterEntry[];
40
+ /** One heading of the Filter list: its offer, what it lists, and — for a relation with many records at its far end — every one of them, found by typing. */
41
+ export interface FilterSection {
42
+ readonly key: string;
43
+ readonly label: string;
44
+ readonly entries: readonly FilterEntry[];
45
+ readonly typed?: readonly {
46
+ readonly id: string;
47
+ readonly label: string;
48
+ }[];
49
+ }
50
+ /**
51
+ * THE FILTER LIST'S SECTIONS. A relation with more than a handful of
52
+ * records at its far end (`TYPED_FROM`) lists only "anything" and
53
+ * "nothing"; its records are found by typing a few letters of a name, and
54
+ * at most eight are listed — ninety feature names in one menu was a list
55
+ * nobody could read.
56
+ */
57
+ export declare function filterSections(schema: AnySchema, graph: ArrangeGraph, offers: Arrangeable): readonly FilterSection[];
58
+ /** At most this many records a typed relation lists for what was typed. */
59
+ export declare const TYPED_MATCHES = 8;
60
+ /** The far records whose names hold what was typed, those that begin with it first, at most `TYPED_MATCHES`. */
61
+ export declare function typedMatches(far: readonly {
62
+ readonly id: string;
63
+ readonly label: string;
64
+ }[], typed: string): {
65
+ readonly shown: readonly {
66
+ readonly id: string;
67
+ readonly label: string;
68
+ }[];
69
+ readonly more: number;
70
+ };
37
71
  export interface ListsProps {
38
72
  readonly which: "sort" | "group" | "filter" | "all";
39
73
  readonly parts?: {
@@ -53,4 +87,27 @@ export interface ListsProps {
53
87
  }
54
88
  /** One list, or on a narrow line all three; the keyboard to the choice made once it is drawn. */
55
89
  export declare function ArrangeLists(props: ListsProps): import("react").JSX.Element;
90
+ /**
91
+ * A CHOICE FIELD AS CHIPS, ALWAYS IN VIEW: each value with how many records
92
+ * it would keep among the rest of what is asked — "Open 12", "Building 4" —
93
+ * so a status filter is one press, not a menu, a heading and an entry. A
94
+ * value no record would keep is left off, unless it is the one pressed.
95
+ */
96
+ export declare function ArrangeChips({ offers, chips, schema, graph, kind, arrangement, has, choose, testId }: ChipsProps): import("react").JSX.Element;
97
+ /** What the chips are handed: the offers they stand for, the records they count, and the line's own ways to say what is on. */
98
+ export interface ChipsProps {
99
+ readonly offers: readonly ArrangeOffer[];
100
+ readonly chips: {
101
+ readonly nodes: readonly ArrangeNode[];
102
+ readonly flagged?: ReadonlySet<string>;
103
+ readonly today?: string;
104
+ };
105
+ readonly schema: AnySchema;
106
+ readonly graph: ArrangeGraph;
107
+ readonly kind: string;
108
+ readonly arrangement: Arrangement;
109
+ readonly has: (condition: Condition) => boolean;
110
+ readonly choose: (key: string, value: string) => void;
111
+ readonly testId: string;
112
+ }
56
113
  //# sourceMappingURL=arrange-lists.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"arrange-lists.d.ts","sourceRoot":"","sources":["../src/arrange-lists.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,WAAW,EAEhB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,SAAS,EAEf,MAAM,eAAe,CAAC;AAIvB;;;;GAIG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,KAAK,CAAC;AAU3B,6GAA6G;AAC7G,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE,CAUvE;AAsBD,8GAA8G;AAC9G,MAAM,WAAW,WAAW;IAC1B,iGAAiG;IACjG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACtF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,GAAG,SAAS,WAAW,EAAE,CAkCjH;AAID,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAC/F,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACpD,QAAQ,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,iGAAiG;AACjG,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,+BA6E7C"}
1
+ {"version":3,"file":"arrange-lists.d.ts","sourceRoot":"","sources":["../src/arrange-lists.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { labelOf, valueWords, } from "@graview/core";
2
+ import { labelOf, LOCAL_LAYERS, } from "@graview/core";
3
+ import { valueWords } from "@graview/core/words";
4
+ import { conditionHolds, matches } from "@graview/core/arrange";
3
5
  import { useEffect, useRef, useState } from "react";
4
- import { directionWords, inSentence } from "./arrange-bar.js";
6
+ import { directionWords, inSentence, TYPED_FROM } from "./arrange-bar.js";
7
+ import "./frame.js"; // A door: tied to what the page drew first (TIED DOORS, packages/primitives/src/frame.ts).
5
8
  /**
6
9
  * THE ARRANGING LINE'S LISTS: what "Sort", "Group", "Filter" and "Arrange"
7
10
  * open. Fetched when a list is first opened, or when the pointer or the
@@ -34,16 +37,17 @@ export function roundSteps(values) {
34
37
  const round = (value) => Math.round(value / step) * step;
35
38
  return [...new Set([0.2, 0.4, 0.6, 0.8].map((at) => round(sorted[Math.floor(at * (sorted.length - 1))])))].filter((value) => value > 0);
36
39
  }
37
- function farEndsOf(schema, graph, offer) {
38
- const kinds = offer.far ?? [];
40
+ /** Every record at an offer's far end, by name. */
41
+ function everyFarEnd(schema, graph, offer) {
42
+ const wanted = new Set(offer.far ?? []);
39
43
  const seen = new Map();
40
- const wanted = new Set(kinds);
41
- for (const node of graph.allNodes()) {
42
- if (!wanted.has(node.kind))
43
- continue;
44
- seen.set(node.id, labelOf(schema.tryDefinition(node.kind), node));
45
- }
46
- const ends = [...seen.entries()].map(([id, text]) => ({ id, label: text }));
44
+ for (const node of graph.allNodes())
45
+ if (wanted.has(node.kind))
46
+ seen.set(node.id, labelOf(schema.tryDefinition(node.kind), node));
47
+ return [...seen.entries()].map(([id, text]) => ({ id, label: text }));
48
+ }
49
+ function farEndsOf(schema, graph, offer) {
50
+ const ends = everyFarEnd(schema, graph, offer);
47
51
  const kept = ends.length <= FAR_ENDS
48
52
  ? ends
49
53
  : ends
@@ -62,6 +66,7 @@ function farEndsOf(schema, graph, offer) {
62
66
  export function filterEntries(schema, graph, offers) {
63
67
  const entries = [];
64
68
  for (const offer of offers.filters) {
69
+ const from = entries.length;
65
70
  if (offer.about === "is") {
66
71
  for (const word of offer.options ?? [])
67
72
  entries.push({ value: `is:${word}`, label: word, group: offer.label, condition: { key: "is", value: word } });
@@ -98,13 +103,53 @@ export function filterEntries(schema, graph, offers) {
98
103
  entries.push({ value: `${offer.key}:true`, label: "yes", group: offer.label, condition: { key: offer.key, value: "true" } });
99
104
  entries.push({ value: `${offer.key}:false`, label: "no", group: offer.label, condition: { key: offer.key, value: "false" } });
100
105
  }
106
+ else if (offer.about === "via") {
107
+ // A choice at the far end, in the words its own kind says it in.
108
+ const far = schema.tryDefinition(offer.far?.[0] ?? "");
109
+ for (const option of offer.options ?? [])
110
+ entries.push({ value: `${offer.key}:${option}`, label: valueWords(far, offer.key.split(".")[1], option), group: offer.label, condition: { key: offer.key, value: option } });
111
+ }
101
112
  else {
102
113
  for (const option of offer.options ?? [])
103
114
  entries.push({ value: `${offer.key}:${option}`, label: valueWords(schema.tryDefinition(offers.kind), offer.key, option), group: offer.label, condition: { key: offer.key, value: option } });
104
115
  }
116
+ for (let at = from; at < entries.length; at++)
117
+ entries[at] = { ...entries[at], key: offer.key };
105
118
  }
106
119
  return entries;
107
120
  }
121
+ /**
122
+ * THE FILTER LIST'S SECTIONS. A relation with more than a handful of
123
+ * records at its far end (`TYPED_FROM`) lists only "anything" and
124
+ * "nothing"; its records are found by typing a few letters of a name, and
125
+ * at most eight are listed — ninety feature names in one menu was a list
126
+ * nobody could read.
127
+ */
128
+ export function filterSections(schema, graph, offers) {
129
+ const entries = filterEntries(schema, graph, offers);
130
+ return offers.filters.flatMap((offer) => {
131
+ const own = entries.filter((entry) => entry.key === offer.key);
132
+ if (own.length === 0)
133
+ return [];
134
+ if (offer.about !== "edge")
135
+ return [{ key: offer.key, label: offer.label, entries: own }];
136
+ const far = everyFarEnd(schema, graph, offer);
137
+ if (far.length < TYPED_FROM)
138
+ return [{ key: offer.key, label: offer.label, entries: own }];
139
+ return [{ key: offer.key, label: offer.label, entries: own.filter((entry) => entry.value === `${offer.key}:*` || entry.value === `${offer.key}:none`), typed: [...far].sort((a, b) => a.label.localeCompare(b.label)) }];
140
+ });
141
+ }
142
+ /** At most this many records a typed relation lists for what was typed. */
143
+ export const TYPED_MATCHES = 8;
144
+ /** The far records whose names hold what was typed, those that begin with it first, at most `TYPED_MATCHES`. */
145
+ export function typedMatches(far, typed) {
146
+ const words = typed.trim().toLocaleLowerCase();
147
+ if (!words)
148
+ return { shown: [], more: 0 };
149
+ const found = far.filter((end) => end.label.toLocaleLowerCase().includes(words));
150
+ const ranked = [...found].sort((a, b) => Number(!a.label.toLocaleLowerCase().startsWith(words)) - Number(!b.label.toLocaleLowerCase().startsWith(words)));
151
+ return { shown: ranked.slice(0, TYPED_MATCHES), more: Math.max(0, ranked.length - TYPED_MATCHES) };
152
+ }
108
153
  const BUCKETS = ["day", "week", "month", "year", "decade"];
109
154
  /** One list, or on a narrow line all three; the keyboard to the choice made once it is drawn. */
110
155
  export function ArrangeLists(props) {
@@ -122,10 +167,10 @@ export function ArrangeLists(props) {
122
167
  const groupOffer = arrangement.group ? offers.groups.find((offer) => offer.key === arrangement.group.by) : undefined;
123
168
  const ways = directionWords(sortOffer);
124
169
  const natural = offers.natural ? offers.sorts.find((offer) => offer.key === offers.natural.by) : undefined;
125
- const entries = which === "filter" || (which === "all" && props.parts?.filter) ? filterEntries(schema, graph, offers) : [];
170
+ const sections = which === "filter" || (which === "all" && props.parts?.filter) ? filterSections(schema, graph, offers) : [];
126
171
  const sortList = (done) => (_jsxs(_Fragment, { children: [_jsx("p", { children: "Sort by" }), _jsx(Item, { testId: `${id}-sort-default`, value: "", on: !arrangement.sort, onPress: () => (set({ sort: undefined }), done()), children: natural ? `As declared (${inSentence(natural.label)})` : "As they were added" }), offers.sorts.map((offer) => (_jsx(Item, { value: offer.key, on: arrangement.sort?.by === offer.key, onPress: () => (set({ sort: { by: offer.key, direction: arrangement.sort?.direction ?? "asc" } }), done()), children: offer.label }, offer.key))), arrangement.sort ? (_jsxs("div", { role: "group", "aria-label": "Order", "data-testid": `${id}-direction`, children: [_jsx("p", { "aria-hidden": "true", children: "Order" }), ["asc", "desc"].map((direction) => (_jsx(Item, { testId: `${id}-direction-${direction}`, value: direction, on: arrangement.sort.direction === direction, onPress: () => (set({ sort: { by: arrangement.sort.by, direction } }), done()), children: ways[direction] }, direction)))] })) : null] }));
127
172
  const groupList = (done) => (_jsxs(_Fragment, { children: [_jsx("p", { children: "Group by" }), _jsx(Item, { testId: `${id}-group-none`, value: "", on: !arrangement.group, onPress: () => (set({ group: undefined }), done()), children: "Not grouped" }), offers.groups.map((offer) => (_jsx(Item, { value: offer.key, on: arrangement.group?.by === offer.key, onPress: () => (set({ group: { by: offer.key } }), done()), children: offer.label }, offer.key))), arrangement.group && groupOffer?.buckets ? (_jsxs("div", { role: "group", "aria-label": "How wide a group is", "data-testid": `${id}-bucket`, children: [_jsx("p", { "aria-hidden": "true", children: "Each group" }), BUCKETS.map((bucket) => (_jsx(Item, { testId: `${id}-bucket-${bucket}`, value: bucket, on: (arrangement.group.bucket ?? "day") === bucket, onPress: () => (set({ group: { by: arrangement.group.by, bucket } }), done()), children: `A ${bucket}` }, bucket)))] })) : null] }));
128
- const filterList = (done) => _jsx(FilterList, { entries: entries, has: has, testId: id, onToggle: (condition) => (toggle(condition), done()) });
173
+ const filterList = (done) => _jsx(FilterList, { sections: sections, has: has, testId: id, onToggle: (condition) => (toggle(condition), done()) });
129
174
  const parts = props.parts ?? { sort: true, group: true, filter: true };
130
175
  return (_jsxs("div", { ref: here, style: { display: "contents" }, children: [_jsx("style", { children: LIST_CSS }), which === "sort" ? sortList(done) : which === "group" ? groupList(done) : which === "filter" ? filterList(done) : (_jsxs(_Fragment, { children: [parts.sort ? _jsx("div", { role: "group", "aria-label": "Sort", children: sortList(done) }) : null, parts.group ? _jsx("div", { role: "group", "aria-label": "Group", children: groupList(done) }) : null, parts.filter ? _jsx("div", { role: "group", "aria-label": "Filter", children: filterList(done) }) : null] }))] }));
131
176
  }
@@ -134,20 +179,46 @@ function Item({ value, on, onPress, testId, children }) {
134
179
  return (_jsx("button", { type: "button", className: "graview-arrange-item", value: value, "data-value": value, "aria-pressed": on, onClick: onPress, ...(testId ? { "data-testid": testId } : {}), children: children }));
135
180
  }
136
181
  /**
137
- * THE WAYS TO NARROW, under their offers' names. A condition already on is
138
- * pressed, and pressing it takes it off. A date's "before…" asks for its
139
- * day in the list itself, with the browser's own date control — added by
140
- * Enter or "Add", let go by Escape or "Never mind".
182
+ * THE WAYS TO NARROW, under their offers' names — each a heading that
183
+ * opens it, so the list opens short however much the app holds; a box at
184
+ * the top, which stays as the list scrolls, finds any of them, and any
185
+ * record at a relation's far end, by a few letters. A condition already on
186
+ * is pressed, and pressing it takes it off; a heading says how many of its
187
+ * own are on. A date's "before…" asks for its day in the list itself, with
188
+ * the browser's own date control — added by Enter or "Add", let go by
189
+ * Escape or "Never mind".
141
190
  */
142
- function FilterList({ entries, has, testId, onToggle }) {
191
+ function FilterList({ sections, has, testId, onToggle }) {
143
192
  const [asking, setAsking] = useState(null);
193
+ const [find, setFind] = useState("");
194
+ // One heading is opened already: there is nothing to choose between.
195
+ const [open, setOpen] = useState(() => new Set(sections.length === 1 ? [sections[0].key] : []));
196
+ const [typed, setTyped] = useState({});
144
197
  if (asking) {
145
198
  return _jsx(AskDay, { ask: asking, testId: testId, onDay: (day) => onToggle({ key: asking.key, value: `${asking.op}:${day}` }), onCancel: () => setAsking(null) });
146
199
  }
147
- const groups = [...new Set(entries.map((entry) => entry.group))];
148
- return (_jsx(_Fragment, { children: groups.map((group) => (_jsxs("div", { role: "group", "aria-label": group, children: [_jsx("p", { "aria-hidden": "true", children: group }), entries
149
- .filter((entry) => entry.group === group)
150
- .map((entry) => (_jsx(Item, { value: entry.value, on: entry.condition ? has(entry.condition) : false, onPress: () => (entry.condition ? onToggle(entry.condition) : setAsking(entry.ask)), children: entry.label }, entry.value)))] }, group))) }));
200
+ const item = (entry) => (_jsx(Item, { value: entry.value, on: entry.condition ? has(entry.condition) : false, onPress: () => (entry.condition ? onToggle(entry.condition) : setAsking(entry.ask)), children: entry.label }, entry.value));
201
+ const far = (section, words) => {
202
+ const on = (section.typed ?? []).filter((end) => has({ key: section.key, value: end.id }));
203
+ const found = typedMatches(section.typed ?? [], words);
204
+ const shown = [...on, ...found.shown.filter((end) => !on.includes(end))];
205
+ return (_jsxs(_Fragment, { children: [shown.map((end) => item({ value: `${section.key}:${end.id}`, label: end.label, group: section.label, key: section.key, condition: { key: section.key, value: end.id } })), words.trim() && found.shown.length === 0 ? _jsx("span", { className: "graview-arrange-none", children: "None is called that." }) : null, found.more > 0 ? _jsx("span", { className: "graview-arrange-none", children: `${found.more} more — type more of the name` }) : null] }));
206
+ };
207
+ const looking = find.trim().toLocaleLowerCase();
208
+ return (_jsxs(_Fragment, { children: [_jsxs("label", { className: "graview-arrange-find", children: [_jsx("span", { style: { position: "absolute", width: 1, height: 1, overflow: "hidden", clip: "rect(0 0 0 0)" }, children: "Find a filter" }), _jsx("input", { type: "search", "data-testid": `${testId}-filter-find`, value: find, placeholder: "Find a filter or a name\u2026", onChange: (event) => setFind(event.target.value) })] }), sections.map((section) => {
209
+ const on = section.entries.filter((entry) => entry.condition && has(entry.condition)).length + (section.typed ?? []).filter((end) => has({ key: section.key, value: end.id })).length;
210
+ if (looking) {
211
+ // What was typed, across every heading: the heading's own entries whose words hold it, or all of them when the heading's does.
212
+ const whole = section.label.toLocaleLowerCase().includes(looking);
213
+ const entries = whole ? section.entries : section.entries.filter((entry) => entry.label.toLocaleLowerCase().includes(looking));
214
+ const ends = section.typed ? typedMatches(section.typed, looking) : { shown: [], more: 0 };
215
+ if (entries.length === 0 && ends.shown.length === 0)
216
+ return null;
217
+ return (_jsxs("div", { role: "group", "aria-label": section.label, "data-section": section.key, children: [_jsx("p", { "aria-hidden": "true", children: section.label }), entries.map(item), section.typed ? far(section, looking) : null] }, section.key));
218
+ }
219
+ const opened = open.has(section.key);
220
+ return (_jsxs("div", { role: "group", "aria-label": section.label, "data-section": section.key, children: [_jsxs("button", { type: "button", className: "graview-arrange-section", "data-testid": `${testId}-section`, "data-key": section.key, "aria-expanded": opened, onClick: () => setOpen((was) => (was.has(section.key) ? new Set([...was].filter((key) => key !== section.key)) : new Set([...was, section.key]))), children: [_jsx("span", { children: section.label }), on > 0 ? _jsx("span", { className: "graview-arrange-on", children: `${on} on` }) : null] }), opened ? (_jsxs(_Fragment, { children: [section.typed ? (_jsx("input", { type: "search", className: "graview-arrange-far", "data-testid": `${testId}-far-find`, "data-key": section.key, "aria-label": `${section.label}: type a name`, placeholder: `Type a name (${section.typed.length})…`, autoFocus: true, value: typed[section.key] ?? "", onChange: (event) => setTyped({ ...typed, [section.key]: event.target.value }) })) : null, section.entries.map(item), section.typed ? far(section, typed[section.key] ?? "") : null] })) : null] }, section.key));
221
+ })] }));
151
222
  }
152
223
  /*
153
224
  * WHICH DAY, ASKED IN THE FILTER ITSELF. "Due before…" opened the browser's
@@ -177,8 +248,26 @@ function AskDay({ ask, testId, onDay, onCancel }) {
177
248
  }
178
249
  } }), _jsxs("span", { children: [_jsx("button", { type: "button", "data-testid": `${testId}-day-add`, disabled: !valid, onClick: add, children: "Add" }), _jsx("button", { type: "button", onClick: onCancel, children: "Never mind" })] })] }));
179
250
  }
251
+ /*
252
+ * OPAQUE, HELD TO THE WINDOW, A SHEET ON A PHONE. The list is laid over the
253
+ * panel's own color, so a brand's translucent float never lets the records
254
+ * show through; it stops at most 520 pixels tall and scrolls inside itself,
255
+ * its box to find a filter standing at its top; on a phone it is a sheet
256
+ * along the window's foot, the width of the window.
257
+ */
180
258
  const LIST_CSS = `
181
- .graview-arrange-list{display:grid;align-content:start;width:min(300px,calc(100vw - 24px));height:auto;max-height:min(70vh,520px);overflow:auto;margin:0;padding:6px;border-radius:10px;border:1px solid var(--graview-edge);background:var(--graview-float);box-shadow:var(--graview-lift-high);color:var(--graview-ink);font-size:.875rem;line-height:1.3}
259
+ .graview-arrange-list{display:grid;align-content:start;width:min(300px,calc(100vw - 24px));height:auto;max-height:min(70vh,520px);overflow:auto;overscroll-behavior:contain;margin:0;padding:0 6px 6px;border-radius:10px;border:1px solid var(--graview-edge);background:linear-gradient(var(--graview-float),var(--graview-float)),var(--graview-panel);box-shadow:var(--graview-lift-high);color:var(--graview-ink);font-size:.875rem;line-height:1.3}
260
+ .graview-arrange-list>*:first-child:not(.graview-arrange-find){margin-top:6px}
261
+ @media (max-width:519px){.graview-arrange-list{left:0!important;right:0!important;top:auto!important;bottom:0!important;width:100%!important;max-height:min(80dvh,560px)!important;border-radius:14px 14px 0 0;padding-bottom:calc(10px + env(safe-area-inset-bottom))}}
262
+ .graview-arrange-find{position:sticky;top:0;z-index:${LOCAL_LAYERS.raised};display:block;margin:0 -6px 2px;padding:6px;background:linear-gradient(var(--graview-float),var(--graview-float)),var(--graview-panel);border-bottom:1px solid var(--graview-edge)}
263
+ .graview-arrange-find input,.graview-arrange-far{box-sizing:border-box;width:100%;min-height:32px;margin:0;padding:0 8px;border:1px solid var(--graview-edge);border-radius:7px;background:var(--graview-panel);font:inherit;color:var(--graview-ink)}
264
+ .graview-arrange-far{width:calc(100% - 16px);margin:2px 8px 4px}
265
+ .graview-arrange-section{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;min-height:32px;margin:0;padding:6px 8px;border:0;border-radius:7px;background:none;font:inherit;font-weight:600;text-align:left;color:var(--graview-ink);cursor:pointer}
266
+ .graview-arrange-section::after{content:"";flex:0 0 7px;height:7px;margin-left:auto;border:solid var(--graview-ink-muted);border-width:0 1.5px 1.5px 0;transform:rotate(-45deg)}
267
+ .graview-arrange-section[aria-expanded=true]::after{transform:rotate(45deg)}
268
+ .graview-arrange-section:hover{background:color-mix(in srgb,var(--graview-ink) 7%,transparent)}
269
+ .graview-arrange-on{font-weight:400;color:var(--graview-accent)}
270
+ .graview-arrange-none{display:block;padding:4px 8px 6px 28px;color:var(--graview-ink-muted)}
182
271
  .graview-arrange-list [role=group]{display:grid}
183
272
  .graview-arrange-list p{margin:8px 8px 2px;font-size:.6875rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--graview-ink-muted)}
184
273
  .graview-arrange-item{display:flex;align-items:flex-start;gap:8px;width:100%;min-height:30px;margin:0;padding:6px 8px;border:0;border-radius:7px;background:none;font:inherit;text-align:left;color:var(--graview-ink);cursor:pointer;overflow-wrap:anywhere}
@@ -193,4 +282,44 @@ const LIST_CSS = `
193
282
  .graview-arrange-ask button{min-height:30px;padding:0 12px;border:1px solid var(--graview-edge);border-radius:7px;background:var(--graview-panel);font:inherit;color:var(--graview-ink);cursor:pointer}
194
283
  .graview-arrange-ask button:disabled{opacity:.5;cursor:default}
195
284
  `;
285
+ /**
286
+ * A CHOICE FIELD AS CHIPS, ALWAYS IN VIEW: each value with how many records
287
+ * it would keep among the rest of what is asked — "Open 12", "Building 4" —
288
+ * so a status filter is one press, not a menu, a heading and an entry. A
289
+ * value no record would keep is left off, unless it is the one pressed.
290
+ */
291
+ export function ArrangeChips({ offers, chips, schema, graph, kind, arrangement, has, choose, testId }) {
292
+ return (_jsxs(_Fragment, { children: [_jsx("style", { children: CHIP_CSS }), _jsx(ChipRows, { offers: offers, chips: chips, schema: schema, graph: graph, kind: kind, arrangement: arrangement, has: has, choose: choose, testId: testId })] }));
293
+ }
294
+ function ChipRows({ offers, chips, schema, graph, kind, arrangement, has, choose, testId }) {
295
+ const ctx = { schema, graph, ...(chips.flagged ? { flagged: chips.flagged } : {}), ...(chips.today ? { today: chips.today } : {}) };
296
+ const definition = schema.tryDefinition(kind);
297
+ const asked = chips.nodes.filter((node) => !arrangement.query || matches(ctx, node, arrangement.query));
298
+ return (_jsx("div", { className: "graview-arrange-chips", "data-testid": `${testId}-chips`, children: offers.map((offer) => {
299
+ const others = (arrangement.filter ?? []).filter((condition) => condition.key !== offer.key);
300
+ const counts = new Map();
301
+ for (const node of asked) {
302
+ if (!others.every((condition) => conditionHolds(ctx, node, condition)))
303
+ continue;
304
+ const value = String(node[offer.key]);
305
+ counts.set(value, (counts.get(value) ?? 0) + 1);
306
+ }
307
+ return (_jsxs("div", { role: "group", "aria-label": offer.label, className: "graview-arrange-chip-row", "data-field": offer.key, children: [_jsx("span", { className: "graview-arrange-chip-label", "aria-hidden": "true", children: offer.label }), (offer.options ?? [])
308
+ .filter((option) => (counts.get(option) ?? 0) > 0 || has({ key: offer.key, value: option }))
309
+ .map((option) => {
310
+ const words = valueWords(definition, offer.key, option);
311
+ const many = counts.get(option) ?? 0;
312
+ return (_jsxs("button", { type: "button", className: "graview-arrange-chip", "data-testid": `${testId}-chip`, "data-value": `${offer.key}:${option}`, "aria-pressed": has({ key: offer.key, value: option }), "aria-label": `${offer.label}: ${words}, ${many}`, onClick: () => choose(offer.key, option), children: [words, _jsx("span", { className: "graview-arrange-chip-count", "aria-hidden": "true", children: many })] }, option));
313
+ })] }, offer.key));
314
+ }) }));
315
+ }
316
+ const CHIP_CSS = `
317
+ .graview-arrange-chips,.graview-arrange-chip-row{display:contents}
318
+ @container (max-width:519px){.graview-arrange-chips{display:flex;flex:1 1 10rem;align-items:center;gap:6px;min-width:0;overflow-x:auto;scrollbar-width:none}.graview-arrange-chip-label{margin:0}.graview-arrange-chip{flex:0 0 auto;white-space:nowrap}}
319
+ .graview-arrange-chip-label{margin:0 0 0 8px;font-size:.8125rem;color:var(--graview-ink-muted)}
320
+ .graview-arrange-chip{display:inline-flex;align-items:center;gap:6px;min-height:28px;max-width:100%;box-sizing:border-box;margin:0;padding:0 10px;border:1px solid var(--graview-edge);border-radius:999px;background:var(--graview-panel);font:inherit;font-size:.8125rem;line-height:1.2;color:var(--graview-ink);cursor:pointer;overflow-wrap:anywhere;text-align:left}
321
+ .graview-arrange-chip:hover{border-color:var(--graview-edge-bright,var(--graview-edge))}
322
+ .graview-arrange-chip[aria-pressed=true]{border-color:var(--graview-accent);background:color-mix(in srgb,var(--graview-accent) 12%,var(--graview-panel));font-weight:600}
323
+ .graview-arrange-chip-count{color:var(--graview-ink-muted);font-variant-numeric:tabular-nums;font-weight:400}
324
+ `;
196
325
  //# sourceMappingURL=arrange-lists.js.map