@bongos/core 1.21.38 → 1.21.40

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.
@@ -1,5 +1,5 @@
1
1
  {
2
- "_": "THE MATTER CARD THAT ACTS (task 1004528, goal 1000125) on the street page, through modules/ui-design/kit/render.js. Kept beside street.states.json rather than inside it, so the street and its interiors (task 1004526) and the card each own their states. The populated card needs the hall-preview harness, whose government__docket.json puts the review-seat amendment on the board source (board:47) and whose government__board__items.json carries its ballot (item 47), with a canned answer for a vote:\n\n node scripts/hall-preview/server.js --port 4625 --fixture-me\n node modules/ui-design/kit/render.js --states modules/hall-ui/public/street-card.states.json --base-in http://localhost:4625 --base-out http://localhost:4625\n\nAgainst the kit stub there is no docket and no pin, so these states are for the harness.",
2
+ "_": "THE MATTER CARD THAT ACTS (task 1004528, goal 1000125) on the street page, through modules/ui-design/kit/render.js. Kept beside street.states.json rather than inside it, so the street and its interiors (task 1004526) and the card each own their states. The populated card needs the hall-preview harness, whose government__docket.json puts the review-seat amendment on the board source (board:47) and whose government__board__items.json carries its ballot (item 47), with a canned answer for a vote:\n\n node scripts/hall-preview/server.js --port 4625 --fixture-me\n node modules/ui-design/kit/render.js --states modules/hall-ui/public/street-card.states.json --base-in http://localhost:4625 --base-out http://localhost:4625\n\nTask 1004566 adds a card per kind the docket carries (blocker, red-team report, core update, module re-check, a Full Idea and the review queue), each compact and with \"more\" open; the harness fixture carries them. Against the kit stub there is no docket and no pin, so these states are for the harness.",
3
3
  "page": "/builders/street",
4
4
  "surface": "hall-ui",
5
5
  "stub": {
@@ -31,6 +31,14 @@
31
31
  "wait",
32
32
  900
33
33
  ],
34
+ [
35
+ "clickIfVisible",
36
+ "[data-craft-close]"
37
+ ],
38
+ [
39
+ "wait",
40
+ 300
41
+ ],
34
42
  [
35
43
  "click",
36
44
  ".street-pin[data-matter=\"board:47\"]"
@@ -52,19 +60,27 @@
52
60
  },
53
61
  "object": {
54
62
  "auth": true,
55
- "_": "object pressed: the reason (on the record) and the part it objects to.",
63
+ "_": "no pressed: the desk row's one-tap reasons stand open under it (task 1004566).",
56
64
  "actions": [
57
65
  [
58
66
  "wait",
59
67
  900
60
68
  ],
61
69
  [
62
- "click",
70
+ "clickIfVisible",
71
+ "[data-craft-close]"
72
+ ],
73
+ [
74
+ "wait",
75
+ 300
76
+ ],
77
+ [
78
+ "dispatchClick",
63
79
  ".street-pin[data-matter=\"board:47\"]"
64
80
  ],
65
81
  [
66
82
  "wait",
67
- 700
83
+ 600
68
84
  ],
69
85
  [
70
86
  "click",
@@ -77,9 +93,8 @@
77
93
  ],
78
94
  "expect": {
79
95
  "visible": [
80
- "#mcardReason",
81
- "#mcardSection",
82
- "[data-act=\"object-send\"]"
96
+ ".mcard-chips",
97
+ "[data-act=\"chip-scope\"]"
83
98
  ]
84
99
  }
85
100
  },
@@ -91,6 +106,14 @@
91
106
  "wait",
92
107
  900
93
108
  ],
109
+ [
110
+ "clickIfVisible",
111
+ "[data-craft-close]"
112
+ ],
113
+ [
114
+ "wait",
115
+ 300
116
+ ],
94
117
  [
95
118
  "click",
96
119
  ".street-pin[data-matter=\"board:47\"]"
@@ -123,6 +146,14 @@
123
146
  "wait",
124
147
  900
125
148
  ],
149
+ [
150
+ "clickIfVisible",
151
+ "[data-craft-close]"
152
+ ],
153
+ [
154
+ "wait",
155
+ 300
156
+ ],
126
157
  [
127
158
  "click",
128
159
  ".street-pin[data-matter=\"access_requests:7\"]"
@@ -147,6 +178,14 @@
147
178
  "wait",
148
179
  900
149
180
  ],
181
+ [
182
+ "clickIfVisible",
183
+ "[data-craft-close]"
184
+ ],
185
+ [
186
+ "wait",
187
+ 300
188
+ ],
150
189
  [
151
190
  "click",
152
191
  ".street-pin[data-matter=\"override_requests:9\"]"
@@ -161,6 +200,455 @@
161
200
  "#streetCard"
162
201
  ]
163
202
  }
203
+ },
204
+ "blocker": {
205
+ "auth": true,
206
+ "_": "a blocker: decide by one of its options, which stand open (task 1004566), compact.",
207
+ "actions": [
208
+ [
209
+ "wait",
210
+ 900
211
+ ],
212
+ [
213
+ "clickIfVisible",
214
+ "[data-craft-close]"
215
+ ],
216
+ [
217
+ "wait",
218
+ 300
219
+ ],
220
+ [
221
+ "dispatchClick",
222
+ ".street-pin[data-matter=\"blockers:11\"]"
223
+ ],
224
+ [
225
+ "wait",
226
+ 600
227
+ ]
228
+ ],
229
+ "expect": {
230
+ "visible": [
231
+ "#streetCard",
232
+ "[data-act=\"decide\"]",
233
+ ".mcard-chips"
234
+ ],
235
+ "hidden": [
236
+ "#mcardMore"
237
+ ]
238
+ }
239
+ },
240
+ "blocker-more": {
241
+ "auth": true,
242
+ "_": "a blocker: decide by one of its options, which stand open (task 1004566), with more open in place: the full text, who and when, the record.",
243
+ "actions": [
244
+ [
245
+ "wait",
246
+ 900
247
+ ],
248
+ [
249
+ "clickIfVisible",
250
+ "[data-craft-close]"
251
+ ],
252
+ [
253
+ "wait",
254
+ 300
255
+ ],
256
+ [
257
+ "dispatchClick",
258
+ ".street-pin[data-matter=\"blockers:11\"]"
259
+ ],
260
+ [
261
+ "wait",
262
+ 600
263
+ ],
264
+ [
265
+ "click",
266
+ "[data-act=\"more\"]"
267
+ ],
268
+ [
269
+ "wait",
270
+ 300
271
+ ]
272
+ ],
273
+ "expect": {
274
+ "visible": [
275
+ "#mcardMore"
276
+ ]
277
+ }
278
+ },
279
+ "report": {
280
+ "auth": true,
281
+ "_": "a red-team report: confirm or dispute (task 1004566), compact.",
282
+ "actions": [
283
+ [
284
+ "wait",
285
+ 900
286
+ ],
287
+ [
288
+ "clickIfVisible",
289
+ "[data-craft-close]"
290
+ ],
291
+ [
292
+ "wait",
293
+ 300
294
+ ],
295
+ [
296
+ "dispatchClick",
297
+ ".street-pin[data-matter=\"redteam_reports:4\"]"
298
+ ],
299
+ [
300
+ "wait",
301
+ 600
302
+ ]
303
+ ],
304
+ "expect": {
305
+ "visible": [
306
+ "#streetCard",
307
+ "[data-act=\"confirm\"]",
308
+ "[data-act=\"dispute\"]"
309
+ ],
310
+ "hidden": [
311
+ "#mcardMore"
312
+ ]
313
+ }
314
+ },
315
+ "report-more": {
316
+ "auth": true,
317
+ "_": "a red-team report: confirm or dispute (task 1004566), with more open in place: the full text, who and when, the record.",
318
+ "actions": [
319
+ [
320
+ "wait",
321
+ 900
322
+ ],
323
+ [
324
+ "clickIfVisible",
325
+ "[data-craft-close]"
326
+ ],
327
+ [
328
+ "wait",
329
+ 300
330
+ ],
331
+ [
332
+ "dispatchClick",
333
+ ".street-pin[data-matter=\"redteam_reports:4\"]"
334
+ ],
335
+ [
336
+ "wait",
337
+ 600
338
+ ],
339
+ [
340
+ "click",
341
+ "[data-act=\"more\"]"
342
+ ],
343
+ [
344
+ "wait",
345
+ 300
346
+ ]
347
+ ],
348
+ "expect": {
349
+ "visible": [
350
+ "#mcardMore"
351
+ ]
352
+ }
353
+ },
354
+ "core": {
355
+ "auth": true,
356
+ "_": "the core update: the Release desk's core row, check then take (task 1004566), compact.",
357
+ "actions": [
358
+ [
359
+ "wait",
360
+ 900
361
+ ],
362
+ [
363
+ "clickIfVisible",
364
+ "[data-craft-close]"
365
+ ],
366
+ [
367
+ "wait",
368
+ 300
369
+ ],
370
+ [
371
+ "dispatchClick",
372
+ ".street-pin[data-matter=\"core_update:1.21.20\"]"
373
+ ],
374
+ [
375
+ "wait",
376
+ 600
377
+ ]
378
+ ],
379
+ "expect": {
380
+ "visible": [
381
+ "#streetCard",
382
+ "[data-act=\"take\"]",
383
+ "[data-act=\"check\"]"
384
+ ],
385
+ "hidden": [
386
+ "#mcardMore"
387
+ ]
388
+ }
389
+ },
390
+ "core-more": {
391
+ "auth": true,
392
+ "_": "the core update: the Release desk's core row, check then take (task 1004566), with more open in place: the full text, who and when, the record.",
393
+ "actions": [
394
+ [
395
+ "wait",
396
+ 900
397
+ ],
398
+ [
399
+ "clickIfVisible",
400
+ "[data-craft-close]"
401
+ ],
402
+ [
403
+ "wait",
404
+ 300
405
+ ],
406
+ [
407
+ "dispatchClick",
408
+ ".street-pin[data-matter=\"core_update:1.21.20\"]"
409
+ ],
410
+ [
411
+ "wait",
412
+ 600
413
+ ],
414
+ [
415
+ "click",
416
+ "[data-act=\"more\"]"
417
+ ],
418
+ [
419
+ "wait",
420
+ 300
421
+ ]
422
+ ],
423
+ "expect": {
424
+ "visible": [
425
+ "#mcardMore"
426
+ ]
427
+ }
428
+ },
429
+ "recheck": {
430
+ "auth": true,
431
+ "_": "a module version that failed its security check: check it again, with a one-tap reason (task 1004566), compact.",
432
+ "actions": [
433
+ [
434
+ "wait",
435
+ 900
436
+ ],
437
+ [
438
+ "clickIfVisible",
439
+ "[data-craft-close]"
440
+ ],
441
+ [
442
+ "wait",
443
+ 300
444
+ ],
445
+ [
446
+ "dispatchClick",
447
+ ".street-pin[data-matter=\"module_rechecks:7\"]"
448
+ ],
449
+ [
450
+ "wait",
451
+ 600
452
+ ]
453
+ ],
454
+ "expect": {
455
+ "visible": [
456
+ "#streetCard",
457
+ "[data-act=\"recheck\"]"
458
+ ],
459
+ "hidden": [
460
+ "#mcardMore"
461
+ ]
462
+ }
463
+ },
464
+ "recheck-more": {
465
+ "auth": true,
466
+ "_": "a module version that failed its security check: check it again, with a one-tap reason (task 1004566), with more open in place: the full text, who and when, the record.",
467
+ "actions": [
468
+ [
469
+ "wait",
470
+ 900
471
+ ],
472
+ [
473
+ "clickIfVisible",
474
+ "[data-craft-close]"
475
+ ],
476
+ [
477
+ "wait",
478
+ 300
479
+ ],
480
+ [
481
+ "dispatchClick",
482
+ ".street-pin[data-matter=\"module_rechecks:7\"]"
483
+ ],
484
+ [
485
+ "wait",
486
+ 600
487
+ ],
488
+ [
489
+ "click",
490
+ "[data-act=\"more\"]"
491
+ ],
492
+ [
493
+ "wait",
494
+ 300
495
+ ]
496
+ ],
497
+ "expect": {
498
+ "visible": [
499
+ "#mcardMore"
500
+ ]
501
+ }
502
+ },
503
+ "idea": {
504
+ "auth": true,
505
+ "_": "a Full Idea: vote yes or no here; its sections are under more (task 1004566), compact.",
506
+ "actions": [
507
+ [
508
+ "wait",
509
+ 900
510
+ ],
511
+ [
512
+ "clickIfVisible",
513
+ "[data-craft-close]"
514
+ ],
515
+ [
516
+ "wait",
517
+ 300
518
+ ],
519
+ [
520
+ "dispatchClick",
521
+ ".street-pin[data-matter=\"board:41\"]"
522
+ ],
523
+ [
524
+ "wait",
525
+ 600
526
+ ]
527
+ ],
528
+ "expect": {
529
+ "visible": [
530
+ "#streetCard",
531
+ "[data-act=\"for\"]",
532
+ "[data-act=\"object\"]"
533
+ ],
534
+ "hidden": [
535
+ "#mcardMore"
536
+ ]
537
+ }
538
+ },
539
+ "idea-more": {
540
+ "auth": true,
541
+ "_": "a Full Idea: vote yes or no here; its sections are under more (task 1004566), with more open in place: the full text, who and when, the record.",
542
+ "actions": [
543
+ [
544
+ "wait",
545
+ 900
546
+ ],
547
+ [
548
+ "clickIfVisible",
549
+ "[data-craft-close]"
550
+ ],
551
+ [
552
+ "wait",
553
+ 300
554
+ ],
555
+ [
556
+ "dispatchClick",
557
+ ".street-pin[data-matter=\"board:41\"]"
558
+ ],
559
+ [
560
+ "wait",
561
+ 600
562
+ ],
563
+ [
564
+ "click",
565
+ "[data-act=\"more\"]"
566
+ ],
567
+ [
568
+ "wait",
569
+ 300
570
+ ]
571
+ ],
572
+ "expect": {
573
+ "visible": [
574
+ "#mcardMore"
575
+ ]
576
+ }
577
+ },
578
+ "queue": {
579
+ "auth": true,
580
+ "_": "the review queue: its first piece of work, signed off here (task 1004566), compact.",
581
+ "actions": [
582
+ [
583
+ "wait",
584
+ 900
585
+ ],
586
+ [
587
+ "clickIfVisible",
588
+ "[data-craft-close]"
589
+ ],
590
+ [
591
+ "wait",
592
+ 300
593
+ ],
594
+ [
595
+ "dispatchClick",
596
+ ".street-pin[data-matter=\"queue\"]"
597
+ ],
598
+ [
599
+ "wait",
600
+ 600
601
+ ]
602
+ ],
603
+ "expect": {
604
+ "visible": [
605
+ "#streetCard",
606
+ "[data-act=\"signoff\"]",
607
+ "[data-act=\"force\"]"
608
+ ],
609
+ "hidden": [
610
+ "#mcardMore"
611
+ ]
612
+ }
613
+ },
614
+ "queue-more": {
615
+ "auth": true,
616
+ "_": "the review queue: its first piece of work, signed off here (task 1004566), with more open in place: the full text, who and when, the record.",
617
+ "actions": [
618
+ [
619
+ "wait",
620
+ 900
621
+ ],
622
+ [
623
+ "clickIfVisible",
624
+ "[data-craft-close]"
625
+ ],
626
+ [
627
+ "wait",
628
+ 300
629
+ ],
630
+ [
631
+ "dispatchClick",
632
+ ".street-pin[data-matter=\"queue\"]"
633
+ ],
634
+ [
635
+ "wait",
636
+ 600
637
+ ],
638
+ [
639
+ "click",
640
+ "[data-act=\"more\"]"
641
+ ],
642
+ [
643
+ "wait",
644
+ 300
645
+ ]
646
+ ],
647
+ "expect": {
648
+ "visible": [
649
+ "#mcardMore"
650
+ ]
651
+ }
164
652
  }
165
653
  },
166
654
  "reducedMotion": {
@@ -121,9 +121,11 @@
121
121
  budget: 'set limit', unsign: 'undo',
122
122
  // task 1004564: the proposer takes back their own sitting before any vote
123
123
  withdraw: 'withdraw',
124
+ // task 1004566: a module version flagged by its security check, checked again
125
+ recheck: 'check again',
124
126
  });
125
127
  // What a row's chips ask, per act (a reason or an option is one tap, never text).
126
- const ASKS = Object.freeze({ budget: 'monthly limit', unsign: 'why', decide: 'pick one', ratify_goal: 'which version', check: 'check', take_core: 'move to', rot: 'stale after', module_off: 'sure', invite: 'their GitHub name', object: 'why', force: 'why', switch_off: 'why', pause: 'why', deactivate: 'why', signoff: 'confirm', allow: 'which goal', tier: 'which tier', give: 'to whom', take: 'from whom' });
128
+ const ASKS = Object.freeze({ recheck: 'why', budget: 'monthly limit', unsign: 'why', decide: 'pick one', ratify_goal: 'which version', check: 'check', take_core: 'move to', rot: 'stale after', module_off: 'sure', invite: 'their GitHub name', object: 'why', force: 'why', switch_off: 'why', pause: 'why', deactivate: 'why', signoff: 'confirm', allow: 'which goal', tier: 'which tier', give: 'to whom', take: 'from whom' });
127
129
  // How a floor counts rows nobody is waiting on (desk rows), by its desk.
128
130
  const DESK_NOUNS = Object.freeze({
129
131
  'people.builders': 'builders', 'people.ranks': 'ranks', 'disputes.confirmed': 'to fix',
@@ -314,6 +316,49 @@
314
316
  .sort((a, b) => (b.needs - a.needs) || ((Date.parse(a.opened || 0) || 0) - (Date.parse(b.opened || 0) || 0)));
315
317
  }
316
318
 
319
+ // ---------- the street's card (task 1004566) ----------
320
+ // The card a pin opens, with the SAME acts as the desk row for the same item:
321
+ // the matter's row (rowOf), or the desk row that stands in for its source
322
+ // (`over`: the Release desk's core row, check then take). `row` goes on the
323
+ // card model, and the card draws its buttons and chips (street-card.js
324
+ // render) and sends each act with the row's own card. ONE action model: a
325
+ // card never offers what the desk does not, nor the other way round.
326
+ // The review queue's pin opens its first piece of work (needs-you first, then
327
+ // oldest); ctx.pick opens another of the queue in the same card.
328
+ // ctx { room, constitution, now, viewerId, goals (open), pick }
329
+ function standIn(docket, m) {
330
+ if (!docket || !Array.isArray(docket.desks)) return null;
331
+ for (const d of docket.desks) {
332
+ if (!d || d.status !== 'live' || !Array.isArray(d.rows)) continue;
333
+ const hit = d.rows.find((r) => r && r.over === m.source && r.building === m.building);
334
+ if (hit) return hit;
335
+ }
336
+ return null;
337
+ }
338
+ function cardFor(key, docket, ctx) {
339
+ const c = Object.assign({ docket: docket }, ctx || {});
340
+ let k = str(key);
341
+ let queue = null;
342
+ const all = docket && Array.isArray(docket.matters) ? docket.matters : [];
343
+ if (k === 'queue') {
344
+ const q = all.filter((m) => m && m.building === 'review' && stateOf(m) !== 'settled')
345
+ .sort((a, b) => ((stateOf(b) === 'needs') - (stateOf(a) === 'needs')) || ((Date.parse(a.opened_at || 0) || 0) - (Date.parse(b.opened_at || 0) || 0)));
346
+ if (!q.length) return null;
347
+ const pick = q.find((m) => str(m.id) === str(c.pick)) || q[0];
348
+ queue = { n: q.length, others: q.filter((m) => m !== pick).slice(0, LIMITS.chips).map((m) => ({ key: str(m.id), title: fit(m.title || m.short, LIMITS.fact) })) };
349
+ k = str(pick.id);
350
+ }
351
+ const cv = C && C.model ? C.model({ docket: docket, key: k, room: c.room, constitution: c.constitution, now: c.now || 0, viewerId: c.viewerId }) : null;
352
+ if (!cv) return null;
353
+ cv.queue = queue;
354
+ const m = all.find((x) => x && str(x.id) === k);
355
+ if (!m || cv.loading) return cv;
356
+ const over = standIn(docket, m);
357
+ const row = over ? deskRowOf(over, c) : rowOf(m, c);
358
+ if (row.actions.length) { cv.row = row; cv.readOnly = false; }
359
+ return cv;
360
+ }
361
+
317
362
  // ---------- the whole desk ----------
318
363
  // input { key, floor (index), docket, goals (open), now, room, constitution,
319
364
  // viewerId, done {matterId: true}, mine [what you did here, newest
@@ -474,7 +519,7 @@
474
519
 
475
520
  const api = {
476
521
  LIMITS: LIMITS, ACT_WORDS: ACT_WORDS, ASKS: ASKS, DESK_NOUNS: DESK_NOUNS, CHIPS: CHIPS, NOUNS: NOUNS, CLEAR: CLEAR,
477
- fit: fit, ageWord: ageWord, floorMatters: floorMatters, firstNeeds: firstNeeds, rowsFor: rowsFor, deskModel: deskModel, breaks: breaks, todayPips: todayPips, moved: moved,
522
+ fit: fit, ageWord: ageWord, floorMatters: floorMatters, firstNeeds: firstNeeds, rowsFor: rowsFor, cardFor: cardFor, deskModel: deskModel, breaks: breaks, todayPips: todayPips, moved: moved,
478
523
  };
479
524
  root.GovDesk = api;
480
525
  if (typeof module !== 'undefined' && module.exports) module.exports = api;
@@ -34,8 +34,6 @@
34
34
  // the seat is drawn empty and says so, and the rule is the building's own
35
35
  // matters' rule, else the design's default, named as the default
36
36
  // (holderOf()).
37
- // * On the table here: the docket's matters at this building. Each row opens
38
- // the short card (GovStreet.cardFor(); task 1004528 makes it act).
39
37
  // * The record: the building's history (docket.history: rulings, amendments,
40
38
  // sign-offs, releases, payouts) and its matters, filed by month, one drawer
41
39
  // a month, newest first.
@@ -176,7 +174,7 @@
176
174
  // key one of the nine civic keys
177
175
  // b the building, in civicInfo()'s shape: { group, name, holds, seats,
178
176
  // who, rule, how, cap, growth, floors: [{ name, line, count, status,
179
- // lines }], record: [{ label, items }], onFile, table: [rows], annex }
177
+ // lines }], record: [{ label, items }], onFile, annex }
180
178
  // st { floor, drawer, picks, vacant, reviewHeld, evening }
181
179
  // Everything the prototype's template binds, as data, plus `selFloor` and
182
180
  // `selDrawer`. The geometry is the prototype's to the pixel.
@@ -261,7 +259,6 @@
261
259
  : { key: s, init: s, bg: T.seatFor.bg, fg: T.seatFor.fg, border: 'none' };
262
260
  const g = City.glyph(b.rule, 9, 9, 16);
263
261
  const pct = Math.round(occ / cap * 100);
264
- const table = Array.isArray(b.table) ? b.table : [];
265
262
  const f = b.floors[selFloor];
266
263
  const quietWord = f && QUIET[f.status] !== undefined ? ' · ' + (f.status === 'proposed' ? 'proposed' : QUIET[f.status]) : '';
267
264
  return {
@@ -269,7 +266,6 @@
269
266
  seats: b.seats.map(seatOf), whoText: b.who, gf: g.fill, gl: g.line, howText: b.how,
270
267
  fill: pct, fillColor: pct >= 80 ? '#fb9569' : T.line,
271
268
  growth: (vacant ? 'Not built yet. ' : occ + ' of ' + cap + ' floors in use. ') + b.growth,
272
- hasTable: table.length > 0, table: table,
273
269
  openKicker: 'floor ' + (selFloor + 1) + (f && f.status === 'pending' ? ' · being decided' : quietWord),
274
270
  sym: f ? Object.assign(symbolPath(floorSymbol(f.name)), { c: '#fb9569' }) : { d: '', f: '', c: 'none' },
275
271
  flipA: ((st.picks || 0) % 2) === 0, flipB: ((st.picks || 0) % 2) === 1,
@@ -528,11 +524,6 @@
528
524
  if (!vacant && spec[2] && spec[2].held) fl.name = spec[2].held;
529
525
  return fl;
530
526
  });
531
- const order = { needs: 0, moving: 1, settled: 2 };
532
- const table = matters.slice().sort((a, b) => order[stateOf(a)] - order[stateOf(b)]).map((m) => {
533
- const s = stateOf(m), when = S.whenWord(m.deadline, c.now);
534
- return { key: String(m.id), matter: String(m.id), label: String(m.title || m.short || ''), status: s === 'needs' ? 'needs you' + (when ? ' · ' + when : '') : s === 'moving' ? 'moving' + (when ? ' · ' + when : '') : (when || 'settled'), state: s, color: s === 'needs' ? 'accent' : 'ink' };
535
- });
536
527
  const history = docket && Array.isArray(docket.history) ? docket.history.filter((x) => x && x.building === key) : [];
537
528
  const record = recordOf(matters, c.now, history);
538
529
  return {
@@ -541,7 +532,7 @@
541
532
  growth: vacant ? plan.vacantGrowth : plan.growth,
542
533
  floors: floors, record: record,
543
534
  onFile: !docket ? 'the docket could not be read just now' : matters.length ? matters.length + (matters.length === 1 ? ' matter' : ' matters') + ' on the docket' + (history.length ? ' · ' + history.length + ' on the record' : '') : history.length ? history.length + ' on the record' : 'nothing on file yet',
544
- table: table, annex: !vacant && floors.length >= plan.cap ? plan.annex : null, vacant: vacant,
535
+ annex: !vacant && floors.length >= plan.cap ? plan.annex : null, vacant: vacant,
545
536
  };
546
537
  }
547
538
 
@@ -558,9 +549,8 @@
558
549
  const docket = o.docket && Array.isArray(o.docket.matters) ? o.docket : null;
559
550
  const evening = !!docket && !(docket.counts && Number(docket.counts.needs) > 0);
560
551
  const bv = buildingView(T, o.key, b, { floor: o.floor, drawer: o.drawer, picks: o.picks, vacant: b.vacant, reviewHeld: !b.vacant, evening: evening, cleared: o.cleared });
561
- bv.table = bv.table.map((r) => Object.assign({}, r, { color: r.color === 'accent' ? T.accentText : T.ink }));
562
552
  bv.key = o.key; bv.mode = mode; bv.vacant = b.vacant;
563
- bv.label = b.name + ' in section: ' + b.floors.length + ' of ' + bv.cap + ' floors in use' + (bv.hasTable ? ', ' + bv.table.length + ' on the table' : '') + '.';
553
+ bv.label = b.name + ' in section: ' + b.floors.length + ' of ' + bv.cap + ' floors in use.';
564
554
  return bv;
565
555
  }
566
556