@mosaicajs/components 0.2.0 → 0.4.0

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 (52) hide show
  1. package/README.md +2 -0
  2. package/dist/aggregate.d.ts +4 -10
  3. package/dist/aggregate.js +7 -13
  4. package/dist/artifact-card.d.ts +21 -7
  5. package/dist/artifact-card.js +136 -79
  6. package/dist/base.d.ts +44 -5
  7. package/dist/base.js +54 -5
  8. package/dist/cluster-filter.d.ts +29 -25
  9. package/dist/cluster-filter.js +123 -106
  10. package/dist/colour-editor.d.ts +15 -4
  11. package/dist/colour-editor.js +107 -34
  12. package/dist/colour-picker.d.ts +12 -5
  13. package/dist/colour-picker.js +119 -32
  14. package/dist/display.js +77 -9
  15. package/dist/events.d.ts +21 -7
  16. package/dist/explorer.d.ts +118 -37
  17. package/dist/explorer.js +487 -212
  18. package/dist/field-card.d.ts +304 -48
  19. package/dist/field-card.js +1364 -244
  20. package/dist/filter-panel.d.ts +54 -10
  21. package/dist/filter-panel.js +242 -42
  22. package/dist/filter.d.ts +22 -4
  23. package/dist/filter.js +113 -34
  24. package/dist/hierarchy.d.ts +68 -45
  25. package/dist/hierarchy.js +320 -243
  26. package/dist/item-card.d.ts +62 -14
  27. package/dist/item-card.js +310 -110
  28. package/dist/key-picker.d.ts +2 -1
  29. package/dist/key-picker.js +4 -3
  30. package/dist/layer-picker.d.ts +4 -2
  31. package/dist/layer-picker.js +16 -7
  32. package/dist/lineage.d.ts +132 -0
  33. package/dist/lineage.js +307 -0
  34. package/dist/map.d.ts +135 -24
  35. package/dist/map.js +387 -117
  36. package/dist/mosaica-components.js +1848 -832
  37. package/dist/mosaica-components.js.sri +1 -1
  38. package/dist/mosaica-components.json +2 -2
  39. package/dist/parts.d.ts +4 -4
  40. package/dist/parts.js +18 -4
  41. package/dist/paths.d.ts +34 -12
  42. package/dist/paths.js +84 -46
  43. package/dist/selection.d.ts +22 -3
  44. package/dist/selection.js +125 -59
  45. package/dist/states.d.ts +72 -0
  46. package/dist/states.js +135 -26
  47. package/dist/status.d.ts +63 -5
  48. package/dist/status.js +215 -36
  49. package/dist/tokens.d.ts +8 -4
  50. package/dist/tokens.js +144 -14
  51. package/dist/view-picker.js +5 -0
  52. package/package.json +4 -3
@@ -1 +1 @@
1
- sha384-6EQhQsMgHJEiAjNNj1/HvEuFRrHLIEDd7N47ufKkXI3Zupi3ISVLqPzMNRZTn3ar
1
+ sha384-pA1hzsfbruonlvsvA6of9R0WEX1tWRvy8k5/KB6GJUoHlGUKGJ9dyezet7X6Qoow
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "file": "mosaica-components.js",
3
- "bytes": 1955994,
4
- "integrity": "sha384-6EQhQsMgHJEiAjNNj1/HvEuFRrHLIEDd7N47ufKkXI3Zupi3ISVLqPzMNRZTn3ar"
3
+ "bytes": 2042305,
4
+ "integrity": "sha384-pA1hzsfbruonlvsvA6of9R0WEX1tWRvy8k5/KB6GJUoHlGUKGJ9dyezet7X6Qoow"
5
5
  }
package/dist/parts.d.ts CHANGED
@@ -11,18 +11,18 @@
11
11
  */
12
12
  export declare const PARTS: {
13
13
  readonly map: readonly ["attribution", "canvas", "controls", "density-key", "note", "overlay", "region-tag", "tooltip", ...string[]];
14
- readonly status: readonly ["card", "strip", "count-shown", "count-matched", "count-highlighted", "count-of", "count-visible", ...string[]];
14
+ readonly status: readonly ["cancel", "card", "spinner", "strip", "count-shown", "count-matched", "count-highlighted", "count-of", "count-visible", ...string[]];
15
15
  readonly 'view-picker': readonly ["field", "select"];
16
16
  readonly 'key-picker': readonly ["entry", "field", "label", "select", "step"];
17
17
  readonly 'layer-picker': readonly ["entry", "name", "note", "title", ...string[]];
18
- readonly filter: readonly ["bar", "entry", "mode", "more", "operator", "operators", "refusal", "tick", "value-count", "values"];
18
+ readonly filter: readonly ["bar", "entry", "mode", "more", "operator", "operators", "refusal", "spinner", "tick", "value-count", "values"];
19
19
  readonly 'cluster-filter': readonly ["entry", "more", "name", "option", "path", "refusal", "value-count", "values"];
20
20
  readonly 'filter-panel': readonly ["add", "add-list", "add-note", "add-option", "add-search", "all", "all-count", "card", "chip", "chips", "clear", "clear-highlight", "edit", "subject", "subject-count", "subject-key", "subject-name", ...string[]];
21
- readonly 'field-card': readonly ["axis", "band", "bar-match", "bar-subject", "bin", "brush", "brush-filter", "brush-highlight", "choice", "colour-popover", "count", "filter", "fold", "head", "hex", "highlight", "hue", "level-select", "more", "name", "paint", "path", "plot", "ramp", "reset", "row", "rows", "spark", "sub", "sv", "swatch", "title", "verbs"];
21
+ readonly 'field-card': readonly ["also", "axis", "band", "bar-match", "bar-subject", "bin", "brush", "brush-filter", "brush-from", "brush-highlight", "brush-to", "chip", "chip-name", "chip-remove", "chips", "choice", "colour-popover", "count", "crumb", "crumb-name", "crumbs", "filter", "fold", "head", "hex", "highlight", "hue", "level", "level-select", "more", "name", "paint", "plot", "ramp", "range", "refusal", "remainder", "reset", "row", "rows", "spark", "step", "sub", "sv", "swatch", "title", "verbs"];
22
22
  readonly 'colour-editor': readonly ["changed", "check", "choice", "close", "colour-popover", "columns", "count", "deselect", "dialog", "done", "hex", "hue", "name", "path", "reset", "reset-all", "row", "rows", "selected", "set-colour", "sub", "sv", "swatch", "title"];
23
23
  readonly hierarchy: readonly ["actions", "also", "children", "count-masked", "count-matched", "counts", "dismiss", "expander", "filter", "fit", "highlight", "layer", "more", "name", "row", "search", "title", "tree", ...string[]];
24
24
  readonly selection: readonly ["action", "actions", "count-matched", "count-served", "count-visible", "counts", "item", "items", "label", "reason", "refusal", "retry", "state", "title"];
25
- readonly 'item-card': readonly ["close", "copy", "field", "headline", "key", "label", "open", "scoped", "show-all", "subtitle", "title", "value", "view-chip", ...string[]];
25
+ readonly 'item-card': readonly ["close", "copy", "field", "headline", "image", "key", "label", "more", "open", "scoped", "show-all", "subtitle", "title", "value", "view-chip", ...string[]];
26
26
  readonly 'artifact-card': readonly ["child", "children", "close", "content", "count", "filter", "fit", "headline", "highlight", "label", "name", "outside", "parent", "parents", "shape", "title", "value", "verbs", ...string[]];
27
27
  };
28
28
  /** An element name `PARTS` lists: `map`, `status`, `item-card`, and so on. */
package/dist/parts.js CHANGED
@@ -13,14 +13,15 @@ const STATE = ['state', 'refusal', 'reason', 'refresh', 'retry', 'reauthorise'];
13
13
  */
14
14
  export const PARTS = {
15
15
  map: ['attribution', 'canvas', 'controls', 'density-key', 'note', 'overlay', 'region-tag', 'tooltip', ...STATE],
16
- status: ['card', 'strip', 'count-shown', 'count-matched', 'count-highlighted', 'count-of', 'count-visible', ...STATE],
16
+ status: ['cancel', 'card', 'spinner', 'strip', 'count-shown', 'count-matched', 'count-highlighted', 'count-of', 'count-visible', ...STATE],
17
17
  'view-picker': ['field', 'select'],
18
18
  'key-picker': ['entry', 'field', 'label', 'select', 'step'],
19
19
  'layer-picker': ['entry', 'name', 'note', 'title', ...STATE],
20
- filter: ['bar', 'entry', 'mode', 'more', 'operator', 'operators', 'refusal', 'tick', 'value-count', 'values'],
20
+ filter: ['bar', 'entry', 'mode', 'more', 'operator', 'operators', 'refusal', 'spinner', 'tick', 'value-count', 'values'],
21
21
  'cluster-filter': ['entry', 'more', 'name', 'option', 'path', 'refusal', 'value-count', 'values'],
22
22
  'filter-panel': ['add', 'add-list', 'add-note', 'add-option', 'add-search', 'all', 'all-count', 'card', 'chip', 'chips', 'clear', 'clear-highlight', 'edit', 'subject', 'subject-count', 'subject-key', 'subject-name', ...STATE],
23
23
  'field-card': [
24
+ 'also',
24
25
  'axis',
25
26
  'band',
26
27
  'bar-match',
@@ -28,27 +29,40 @@ export const PARTS = {
28
29
  'bin',
29
30
  'brush',
30
31
  'brush-filter',
32
+ 'brush-from',
31
33
  'brush-highlight',
34
+ 'brush-to',
35
+ 'chip',
36
+ 'chip-name',
37
+ 'chip-remove',
38
+ 'chips',
32
39
  'choice',
33
40
  'colour-popover',
34
41
  'count',
42
+ 'crumb',
43
+ 'crumb-name',
44
+ 'crumbs',
35
45
  'filter',
36
46
  'fold',
37
47
  'head',
38
48
  'hex',
39
49
  'highlight',
40
50
  'hue',
51
+ 'level',
41
52
  'level-select',
42
53
  'more',
43
54
  'name',
44
55
  'paint',
45
- 'path',
46
56
  'plot',
47
57
  'ramp',
58
+ 'range',
59
+ 'refusal',
60
+ 'remainder',
48
61
  'reset',
49
62
  'row',
50
63
  'rows',
51
64
  'spark',
65
+ 'step',
52
66
  'sub',
53
67
  'sv',
54
68
  'swatch',
@@ -58,7 +72,7 @@ export const PARTS = {
58
72
  'colour-editor': ['changed', 'check', 'choice', 'close', 'colour-popover', 'columns', 'count', 'deselect', 'dialog', 'done', 'hex', 'hue', 'name', 'path', 'reset', 'reset-all', 'row', 'rows', 'selected', 'set-colour', 'sub', 'sv', 'swatch', 'title'],
59
73
  hierarchy: ['actions', 'also', 'children', 'count-masked', 'count-matched', 'counts', 'dismiss', 'expander', 'filter', 'fit', 'highlight', 'layer', 'more', 'name', 'row', 'search', 'title', 'tree', ...STATE],
60
74
  selection: ['action', 'actions', 'count-matched', 'count-served', 'count-visible', 'counts', 'item', 'items', 'label', 'reason', 'refusal', 'retry', 'state', 'title'],
61
- 'item-card': ['close', 'copy', 'field', 'headline', 'key', 'label', 'open', 'scoped', 'show-all', 'subtitle', 'title', 'value', 'view-chip', ...STATE],
75
+ 'item-card': ['close', 'copy', 'field', 'headline', 'image', 'key', 'label', 'more', 'open', 'scoped', 'show-all', 'subtitle', 'title', 'value', 'view-chip', ...STATE],
62
76
  'artifact-card': ['child', 'children', 'close', 'content', 'count', 'filter', 'fit', 'headline', 'highlight', 'label', 'name', 'outside', 'parent', 'parents', 'shape', 'title', 'value', 'verbs', ...STATE]
63
77
  };
64
78
  /**
package/dist/paths.d.ts CHANGED
@@ -1,24 +1,46 @@
1
- import { type Layer, type Store } from '@mosaicajs/client';
1
+ import { type BrowseRow, type Layer, type Store } from '@mosaicajs/client';
2
+ import { type Called } from './base.js';
3
+ /** A cluster's path of what its parents are called, nearest last, and whether parents above the first step are left out. */
4
+ export type Path = {
5
+ steps: string[];
6
+ beyond: boolean;
7
+ };
2
8
  /**
3
- * The names of clusters' parents on a `nested` or `dag` layer, learnt from browse pages: for each
4
- * cluster asked about, a page of its served parents, and then one of its first parent's. Each is
5
- * asked for once until {@link reset}, which also drops an answer still loading.
9
+ * The names and parents of clusters on a layer with parent edges, learnt from browse pages. For
10
+ * each cluster asked about, the children form of the cluster names its served parents, and the
11
+ * walk goes on up from the first of them as each answer lands. A cluster is asked about once until
12
+ * {@link reset}, which also drops an answer still loading.
6
13
  */
7
14
  export declare class ClusterPaths {
8
15
  private readonly changed;
9
- /** Every cluster met on a browse page. */
16
+ /** Every cluster a page has served. */
10
17
  private readonly met;
11
- /** Each cluster's served parents, once asked for. */
12
- private readonly parentsOf;
18
+ /** Each cluster's served parents, as the children form gave them. */
19
+ private readonly parentsGiven;
13
20
  private readonly asked;
21
+ /** The clusters whose children form has been answered or refused. */
22
+ private readonly done;
23
+ /** How many steps up each cluster asked about is walked. */
24
+ private readonly walks;
14
25
  private epoch;
15
26
  /** `changed` is called as each page lands. */
16
27
  constructor(changed: () => void);
17
28
  reset(): void;
18
- /** The rung a cluster was met at, where a page has named it. */
19
- rungOf(id: bigint): number | undefined;
20
- /** Ask for the parents of each of `ids` and of its first parent, on a `nested` or `dag` layer. */
21
- ask(store: Store, layer: Layer, ids: readonly bigint[]): void;
22
- /** A cluster's two nearest parents' names, nearest last, as far up as the pages have named them. */
29
+ /** Note the rows a page served, whose names and parents are then known. */
30
+ meet(rows: Iterable<BrowseRow>): void;
31
+ /** What a cluster is called from the row a page served, or `null` where no page has met it. */
32
+ nameOf(id: bigint): Called | null;
33
+ private parentsOf;
34
+ /** Walk `depth` steps up from each of `ids` on a layer with parent edges, asking for each step's parents not yet met. */
35
+ ask(store: Store, layer: Layer, ids: readonly bigint[], depth?: number): void;
36
+ private walk;
37
+ private fetch;
38
+ /**
39
+ * A cluster's path of parents up to `depth` steps, nearest last, as far up as the pages have
40
+ * named them; `null` while a step's parents are on their way. A step names every served parent
41
+ * of the step below it, and the step above is taken from the first of them.
42
+ */
43
+ path(id: bigint, depth: number): Path | null;
44
+ /** A cluster's path two steps up as one line, as far as it is known. */
23
45
  pathOf(id: bigint): string;
24
46
  }
package/dist/paths.js CHANGED
@@ -1,18 +1,22 @@
1
- import { artifactName } from '@mosaicajs/client';
2
- import { isTree } from './aggregate.js';
3
- import { UNNAMED } from './base.js';
1
+ import { isLinked } from './aggregate.js';
2
+ import { called } from './base.js';
4
3
  /**
5
- * The names of clusters' parents on a `nested` or `dag` layer, learnt from browse pages: for each
6
- * cluster asked about, a page of its served parents, and then one of its first parent's. Each is
7
- * asked for once until {@link reset}, which also drops an answer still loading.
4
+ * The names and parents of clusters on a layer with parent edges, learnt from browse pages. For
5
+ * each cluster asked about, the children form of the cluster names its served parents, and the
6
+ * walk goes on up from the first of them as each answer lands. A cluster is asked about once until
7
+ * {@link reset}, which also drops an answer still loading.
8
8
  */
9
9
  export class ClusterPaths {
10
10
  changed;
11
- /** Every cluster met on a browse page. */
11
+ /** Every cluster a page has served. */
12
12
  met = new Map();
13
- /** Each cluster's served parents, once asked for. */
14
- parentsOf = new Map();
13
+ /** Each cluster's served parents, as the children form gave them. */
14
+ parentsGiven = new Map();
15
15
  asked = new Set();
16
+ /** The clusters whose children form has been answered or refused. */
17
+ done = new Set();
18
+ /** How many steps up each cluster asked about is walked. */
19
+ walks = new Map();
16
20
  epoch = 0;
17
21
  /** `changed` is called as each page lands. */
18
22
  constructor(changed) {
@@ -21,52 +25,86 @@ export class ClusterPaths {
21
25
  reset() {
22
26
  this.epoch += 1;
23
27
  this.met.clear();
24
- this.parentsOf.clear();
28
+ this.parentsGiven.clear();
25
29
  this.asked.clear();
30
+ this.done.clear();
31
+ this.walks.clear();
26
32
  }
27
- /** The rung a cluster was met at, where a page has named it. */
28
- rungOf(id) {
29
- return this.met.get(id)?.rung;
33
+ /** Note the rows a page served, whose names and parents are then known. */
34
+ meet(rows) {
35
+ for (const r of rows)
36
+ this.met.set(r.mosaicaId, r);
30
37
  }
31
- /** Ask for the parents of each of `ids` and of its first parent, on a `nested` or `dag` layer. */
32
- ask(store, layer, ids) {
33
- if (!isTree(layer))
38
+ /** What a cluster is called from the row a page served, or `null` where no page has met it. */
39
+ nameOf(id) {
40
+ const row = this.met.get(id);
41
+ return row ? called(row.name, row.key) : null;
42
+ }
43
+ parentsOf(id) {
44
+ return this.parentsGiven.get(id) ?? this.met.get(id)?.parentIds;
45
+ }
46
+ /** Walk `depth` steps up from each of `ids` on a layer with parent edges, asking for each step's parents not yet met. */
47
+ ask(store, layer, ids, depth = 2) {
48
+ if (!isLinked(layer))
49
+ return;
50
+ for (const id of ids)
51
+ this.walks.set(id, Math.max(depth, this.walks.get(id) ?? 0));
52
+ this.walk(store, layer, ids);
53
+ }
54
+ walk(store, layer, ids) {
55
+ for (const id of ids) {
56
+ let at = id;
57
+ for (let i = 0; i < (this.walks.get(id) ?? 0) && at !== undefined; i++) {
58
+ const parents = this.parentsOf(at);
59
+ if (parents === undefined || parents.some((p) => !this.met.has(p))) {
60
+ this.fetch(store, layer, at);
61
+ break;
62
+ }
63
+ at = parents[0];
64
+ }
65
+ }
66
+ }
67
+ fetch(store, layer, id) {
68
+ if (this.asked.has(id))
34
69
  return;
70
+ this.asked.add(id);
35
71
  const epoch = this.epoch;
36
- const ask = (id) => {
37
- if (this.asked.has(id))
72
+ const landed = (parents) => {
73
+ if (epoch !== this.epoch)
38
74
  return;
39
- this.asked.add(id);
40
- void store
41
- .browse({ layer: layer.name, filters: null, parent: id, limit: 1 })
42
- .then((p) => {
43
- if (epoch !== this.epoch)
44
- return;
45
- for (const r of p.parents)
46
- this.met.set(r.mosaicaId, r);
47
- this.parentsOf.set(id, p.parents.map((r) => r.mosaicaId));
48
- this.changed();
49
- })
50
- .catch(() => undefined);
75
+ this.done.add(id);
76
+ if (parents) {
77
+ this.meet(parents);
78
+ this.parentsGiven.set(id, parents.map((r) => r.mosaicaId));
79
+ }
80
+ this.walk(store, layer, [...this.walks.keys()]);
81
+ this.changed();
51
82
  };
52
- for (const id of ids) {
53
- ask(id);
54
- const first = this.parentsOf.get(id)?.[0];
55
- if (first !== undefined)
56
- ask(first);
57
- }
83
+ store.browse({ layer: layer.name, filters: null, parent: id, limit: 1 }).then((p) => landed(p.parents), () => landed(null));
58
84
  }
59
- /** A cluster's two nearest parents' names, nearest last, as far up as the pages have named them. */
60
- pathOf(id) {
61
- const names = [];
62
- let parents = this.parentsOf.get(id) ?? this.met.get(id)?.parentIds ?? [];
63
- for (let i = 0; i < 2 && parents.length > 0; i++) {
64
- const at = this.met.get(parents[0]);
65
- if (!at)
85
+ /**
86
+ * A cluster's path of parents up to `depth` steps, nearest last, as far up as the pages have
87
+ * named them; `null` while a step's parents are on their way. A step names every served parent
88
+ * of the step below it, and the step above is taken from the first of them.
89
+ */
90
+ path(id, depth) {
91
+ const steps = [];
92
+ let parents = this.parentsOf(id) ?? [];
93
+ let at = id;
94
+ for (let i = 0; i < depth && parents.length > 0; i++) {
95
+ const named = parents.flatMap((p) => this.met.get(p) ?? []);
96
+ if (named.length < parents.length && this.asked.has(at) && !this.done.has(at))
97
+ return null;
98
+ if (named.length === 0)
66
99
  break;
67
- names.unshift(artifactName(at) ?? UNNAMED);
68
- parents = this.parentsOf.get(at.mosaicaId) ?? at.parentIds;
100
+ steps.unshift(named.map((r) => called(r.name, r.key).text).join(', '));
101
+ at = named[0].mosaicaId;
102
+ parents = this.parentsOf(at) ?? [];
69
103
  }
70
- return names.join(' › ');
104
+ return { steps, beyond: parents.length > 0 };
105
+ }
106
+ /** A cluster's path two steps up as one line, as far as it is known. */
107
+ pathOf(id) {
108
+ return this.path(id, 2)?.steps.join(' › ') ?? '';
71
109
  }
72
110
  }
@@ -1,4 +1,4 @@
1
- import { nothing, type TemplateResult } from 'lit';
1
+ import { nothing, type PropertyValues, type TemplateResult } from 'lit';
2
2
  import { type RegionProjection } from '@mosaicajs/client';
3
3
  import { MosaicaElement } from './base.js';
4
4
  import './count.js';
@@ -6,7 +6,7 @@ import './count.js';
6
6
  * Use the selection card beside a map so that viewers can see what is inside the region they have
7
7
  * drawn. It reads the store's selected region, or the `region` you set. It counts the items inside
8
8
  * that the filters match, the items the viewer may see there and the marks drawn there. The drawn
9
- * marks are listed below the counts, and clicking one picks it.
9
+ * marks are listed below the counts, each a button that picks it.
10
10
  *
11
11
  * The region acts as a filter, which means the map and every other count narrow to it once it
12
12
  * settles. Outside flips it to everything outside the shape, and Clear removes it. The counts are
@@ -14,6 +14,12 @@ import './count.js';
14
14
  * says when that is so. Export and Save as artifact are shown disabled because they are not
15
15
  * available yet.
16
16
  *
17
+ * Screen readers announce the state line as it changes: that the selection is being counted, a
18
+ * refusal, and, once, when the query has finished loading, the matched and visible counts with
19
+ * whether they are exact for the shape. The counts and that verdict are read out and not drawn on
20
+ * the line, since the figures are below it. With `quiet`, the card shows the same and announces
21
+ * nothing.
22
+ *
17
23
  * @summary A card showing the counts and marks inside the selected region.
18
24
  * @tagname mosaica-selection
19
25
  * @category Elements
@@ -32,7 +38,7 @@ import './count.js';
32
38
  * @csspart count-visible - The `<mosaica-count>` of items the viewer may see inside (or outside).
33
39
  * @csspart label - The heading above the list.
34
40
  * @csspart items - The list of drawn marks inside.
35
- * @csspart item - One drawn mark, by `mosaica_id`.
41
+ * @csspart item - One drawn mark's row, holding a button named by its `mosaica_id`.
36
42
  * @csspart actions - The action buttons.
37
43
  * @csspart action - One action button.
38
44
  */
@@ -40,7 +46,20 @@ export declare class MosaicaSelection extends MosaicaElement {
40
46
  static styles: import("lit").CSSResult[];
41
47
  /** A region to show instead of the store's `region` projection. */
42
48
  accessor region: RegionProjection | null;
49
+ /**
50
+ * Announces nothing: the state line and the counts are still shown, and none is put in a live
51
+ * region. Set it when another element on the page says the same things.
52
+ */
53
+ accessor quiet: boolean;
43
54
  private get shown();
55
+ private readonly actionFocus;
56
+ protected willUpdate(changed: PropertyValues<this>): void;
57
+ protected updated(): void;
58
+ /**
59
+ * The state and its line for a region: what the server said of its count, or how the count
60
+ * stands. Once it is counted, `verdict` says whether the counts are exact for the shape.
61
+ */
62
+ private stateOfRegion;
44
63
  render(): TemplateResult | typeof nothing;
45
64
  }
46
65
  declare global {