@graview/core 0.1.9 → 0.1.12

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 (200) hide show
  1. package/README.md +19 -8
  2. package/dist/app.d.ts +41 -2
  3. package/dist/app.d.ts.map +1 -1
  4. package/dist/app.js.map +1 -1
  5. package/dist/blocks.d.ts +5 -0
  6. package/dist/blocks.d.ts.map +1 -0
  7. package/dist/blocks.js +14 -0
  8. package/dist/blocks.js.map +1 -0
  9. package/dist/capabilities.js +1 -1
  10. package/dist/capabilities.js.map +1 -1
  11. package/dist/check.d.ts +8 -0
  12. package/dist/check.d.ts.map +1 -0
  13. package/dist/check.js +19 -0
  14. package/dist/check.js.map +1 -0
  15. package/dist/cli/check/arrangement.d.ts.map +1 -1
  16. package/dist/cli/check/arrangement.js +3 -2
  17. package/dist/cli/check/arrangement.js.map +1 -1
  18. package/dist/cli/check/brand.d.ts.map +1 -1
  19. package/dist/cli/check/brand.js +21 -0
  20. package/dist/cli/check/brand.js.map +1 -1
  21. package/dist/cli/check/computed.d.ts +14 -0
  22. package/dist/cli/check/computed.d.ts.map +1 -0
  23. package/dist/cli/check/computed.js +34 -0
  24. package/dist/cli/check/computed.js.map +1 -0
  25. package/dist/cli/check/hidden-reads.d.ts +4 -0
  26. package/dist/cli/check/hidden-reads.d.ts.map +1 -0
  27. package/dist/cli/check/hidden-reads.js +152 -0
  28. package/dist/cli/check/hidden-reads.js.map +1 -0
  29. package/dist/cli/check/index.d.ts +2 -0
  30. package/dist/cli/check/index.d.ts.map +1 -1
  31. package/dist/cli/check/index.js +2 -0
  32. package/dist/cli/check/index.js.map +1 -1
  33. package/dist/cli/check/lenses.d.ts +10 -0
  34. package/dist/cli/check/lenses.d.ts.map +1 -1
  35. package/dist/cli/check/lenses.js +37 -19
  36. package/dist/cli/check/lenses.js.map +1 -1
  37. package/dist/cli/check/relations.d.ts.map +1 -1
  38. package/dist/cli/check/relations.js +2 -1
  39. package/dist/cli/check/relations.js.map +1 -1
  40. package/dist/cli/check/views.d.ts.map +1 -1
  41. package/dist/cli/check/views.js +13 -3
  42. package/dist/cli/check/views.js.map +1 -1
  43. package/dist/cli/check.d.ts.map +1 -1
  44. package/dist/cli/check.js +5 -1
  45. package/dist/cli/check.js.map +1 -1
  46. package/dist/cli/create.d.ts.map +1 -1
  47. package/dist/cli/create.js +1 -1
  48. package/dist/cli/create.js.map +1 -1
  49. package/dist/cli/describe.d.ts.map +1 -1
  50. package/dist/cli/describe.js +66 -1
  51. package/dist/cli/describe.js.map +1 -1
  52. package/dist/cli/index.d.ts +2 -2
  53. package/dist/cli/index.d.ts.map +1 -1
  54. package/dist/cli/index.js +23 -2
  55. package/dist/cli/index.js.map +1 -1
  56. package/dist/columns.d.ts +73 -0
  57. package/dist/columns.d.ts.map +1 -0
  58. package/dist/columns.js +100 -0
  59. package/dist/columns.js.map +1 -0
  60. package/dist/conformance/index.js +1 -1
  61. package/dist/conformance/index.js.map +1 -1
  62. package/dist/describe.d.ts +5 -0
  63. package/dist/describe.d.ts.map +1 -0
  64. package/dist/describe.js +19 -0
  65. package/dist/describe.js.map +1 -0
  66. package/dist/document/blocks.d.ts +187 -0
  67. package/dist/document/blocks.d.ts.map +1 -0
  68. package/dist/document/blocks.js +372 -0
  69. package/dist/document/blocks.js.map +1 -0
  70. package/dist/document/compile-checked.d.ts +8 -0
  71. package/dist/document/compile-checked.d.ts.map +1 -0
  72. package/dist/document/compile-checked.js +36 -0
  73. package/dist/document/compile-checked.js.map +1 -0
  74. package/dist/document/compile.d.ts +8 -6
  75. package/dist/document/compile.d.ts.map +1 -1
  76. package/dist/document/compile.js +68 -46
  77. package/dist/document/compile.js.map +1 -1
  78. package/dist/document/computed-values.d.ts +33 -0
  79. package/dist/document/computed-values.d.ts.map +1 -0
  80. package/dist/document/computed-values.js +60 -0
  81. package/dist/document/computed-values.js.map +1 -0
  82. package/dist/document/computed.d.ts +42 -0
  83. package/dist/document/computed.d.ts.map +1 -0
  84. package/dist/document/computed.js +173 -0
  85. package/dist/document/computed.js.map +1 -0
  86. package/dist/document/describe-place.d.ts +95 -0
  87. package/dist/document/describe-place.d.ts.map +1 -0
  88. package/dist/document/describe-place.js +286 -0
  89. package/dist/document/describe-place.js.map +1 -0
  90. package/dist/document/diff.d.ts.map +1 -1
  91. package/dist/document/diff.js +78 -4
  92. package/dist/document/diff.js.map +1 -1
  93. package/dist/document/edit.d.ts +1 -1
  94. package/dist/document/edit.d.ts.map +1 -1
  95. package/dist/document/edit.js +908 -107
  96. package/dist/document/edit.js.map +1 -1
  97. package/dist/document/expr/analyze.d.ts +22 -0
  98. package/dist/document/expr/analyze.d.ts.map +1 -1
  99. package/dist/document/expr/analyze.js +51 -4
  100. package/dist/document/expr/analyze.js.map +1 -1
  101. package/dist/document/expr/evaluate.d.ts +7 -1
  102. package/dist/document/expr/evaluate.d.ts.map +1 -1
  103. package/dist/document/expr/evaluate.js +121 -8
  104. package/dist/document/expr/evaluate.js.map +1 -1
  105. package/dist/document/expr/index.d.ts +1 -1
  106. package/dist/document/expr/index.d.ts.map +1 -1
  107. package/dist/document/expr/index.js +1 -1
  108. package/dist/document/expr/index.js.map +1 -1
  109. package/dist/document/expr/parse.d.ts +2 -1
  110. package/dist/document/expr/parse.d.ts.map +1 -1
  111. package/dist/document/expr/parse.js +6 -3
  112. package/dist/document/expr/parse.js.map +1 -1
  113. package/dist/document/expr/print.d.ts.map +1 -1
  114. package/dist/document/expr/print.js +4 -2
  115. package/dist/document/expr/print.js.map +1 -1
  116. package/dist/document/graview-template.d.ts +20 -12
  117. package/dist/document/graview-template.d.ts.map +1 -1
  118. package/dist/document/graview-template.js +5 -44
  119. package/dist/document/graview-template.js.map +1 -1
  120. package/dist/document/index.d.ts +8 -8
  121. package/dist/document/index.d.ts.map +1 -1
  122. package/dist/document/index.js +5 -5
  123. package/dist/document/index.js.map +1 -1
  124. package/dist/document/instantiate-template.d.ts +14 -0
  125. package/dist/document/instantiate-template.d.ts.map +1 -0
  126. package/dist/document/instantiate-template.js +46 -0
  127. package/dist/document/instantiate-template.js.map +1 -0
  128. package/dist/document/rules.d.ts +2 -1
  129. package/dist/document/rules.d.ts.map +1 -1
  130. package/dist/document/rules.js +5 -1
  131. package/dist/document/rules.js.map +1 -1
  132. package/dist/document/schema.d.ts +46 -5
  133. package/dist/document/schema.d.ts.map +1 -1
  134. package/dist/document/schema.js +31 -3
  135. package/dist/document/schema.js.map +1 -1
  136. package/dist/document/template.d.ts +33 -2
  137. package/dist/document/template.d.ts.map +1 -1
  138. package/dist/document/template.js +156 -18
  139. package/dist/document/template.js.map +1 -1
  140. package/dist/document/thumbnail.d.ts +5 -4
  141. package/dist/document/thumbnail.d.ts.map +1 -1
  142. package/dist/document/thumbnail.js +29 -21
  143. package/dist/document/thumbnail.js.map +1 -1
  144. package/dist/document/to-document.d.ts.map +1 -1
  145. package/dist/document/to-document.js +6 -1
  146. package/dist/document/to-document.js.map +1 -1
  147. package/dist/document/views.d.ts +58 -3
  148. package/dist/document/views.d.ts.map +1 -1
  149. package/dist/document/views.js +356 -24
  150. package/dist/document/views.js.map +1 -1
  151. package/dist/figures.d.ts +3 -0
  152. package/dist/figures.d.ts.map +1 -0
  153. package/dist/figures.js +14 -0
  154. package/dist/figures.js.map +1 -0
  155. package/dist/index.d.ts +3 -12
  156. package/dist/index.d.ts.map +1 -1
  157. package/dist/index.js +2 -7
  158. package/dist/index.js.map +1 -1
  159. package/dist/mutations/types.d.ts +12 -0
  160. package/dist/mutations/types.d.ts.map +1 -1
  161. package/dist/places.d.ts +197 -0
  162. package/dist/places.d.ts.map +1 -0
  163. package/dist/places.js +376 -0
  164. package/dist/places.js.map +1 -0
  165. package/dist/scaffold/domain.js +1 -1
  166. package/dist/scaffold/from-template.d.ts.map +1 -1
  167. package/dist/scaffold/from-template.js +3 -3
  168. package/dist/scaffold/from-template.js.map +1 -1
  169. package/dist/scaffold/project.d.ts.map +1 -1
  170. package/dist/scaffold/project.js +13 -0
  171. package/dist/scaffold/project.js.map +1 -1
  172. package/dist/scaffold/ui.d.ts.map +1 -1
  173. package/dist/scaffold/ui.js +13 -10
  174. package/dist/scaffold/ui.js.map +1 -1
  175. package/dist/scene-districts.d.ts +5 -1
  176. package/dist/scene-districts.d.ts.map +1 -1
  177. package/dist/scene-districts.js +11 -4
  178. package/dist/scene-districts.js.map +1 -1
  179. package/dist/scene.d.ts +7 -0
  180. package/dist/scene.d.ts.map +1 -0
  181. package/dist/scene.js +16 -0
  182. package/dist/scene.js.map +1 -0
  183. package/dist/schema/define-node.d.ts +3 -0
  184. package/dist/schema/define-node.d.ts.map +1 -1
  185. package/dist/schema/define-node.js +3 -1
  186. package/dist/schema/define-node.js.map +1 -1
  187. package/dist/schema/types.d.ts +17 -0
  188. package/dist/schema/types.d.ts.map +1 -1
  189. package/dist/theme/types.d.ts +9 -0
  190. package/dist/theme/types.d.ts.map +1 -1
  191. package/dist/theme/types.js.map +1 -1
  192. package/dist/version.d.ts +1 -1
  193. package/dist/version.d.ts.map +1 -1
  194. package/dist/version.js +1 -1
  195. package/dist/version.js.map +1 -1
  196. package/dist/views/types.d.ts +19 -0
  197. package/dist/views/types.d.ts.map +1 -1
  198. package/dist/views/types.js +14 -0
  199. package/dist/views/types.js.map +1 -1
  200. package/package.json +21 -1
@@ -69,6 +69,8 @@ export const EdgeSpec = z.strictObject({
69
69
  /** The name this relation had in the previous version: its links move. */
70
70
  renamedFrom: z.optional(z.string()),
71
71
  });
72
+ /** A computed field: its expression, or the expression with the words it is shown by (FR-83). */
73
+ export const ComputedSpec = z.union([expression, z.strictObject({ expr: expression, label: z.optional(str(1, 60)), description: z.optional(sentence) })]);
72
74
  export const KindSpec = z.strictObject({
73
75
  noun: z.optional(str(1, 40)),
74
76
  plural: z.optional(str(1, 40)),
@@ -81,6 +83,12 @@ export const KindSpec = z.strictObject({
81
83
  /** What a glance at one says — a card, a row, a hit in Find — first, in this order: the definition's `display.glance` (FR-39). */
82
84
  glance: z.optional(some(fieldName, 1, 20)),
83
85
  edges: z.optional(z.record(edgeName, EdgeSpec)),
86
+ /**
87
+ * Values worked out, not stored (FR-83): a name and a rule-language
88
+ * expression read like a field — `"net": "sum(out('includes'), list * units)"` —
89
+ * or `{ expr, label?, description? }`. Never written by an act.
90
+ */
91
+ computed: z.optional(z.record(z.string(), ComputedSpec).check(z.refine((c) => Object.keys(c).length <= 20, "a kind works out at most 20 computed fields"))),
84
92
  /** The name this kind had in the previous version: its records move. */
85
93
  renamedFrom: z.optional(z.string().check(z.regex(NAME))),
86
94
  });
@@ -149,9 +157,17 @@ export const PolicySpec = z.strictObject({
149
157
  grants: z.array(GrantSpec),
150
158
  sees: z.optional(z.array(SightSpec)),
151
159
  });
160
+ /**
161
+ * The installation's look and its money: an accent colour the palette is
162
+ * derived from, and the currency and locale a sum is said in wherever a
163
+ * block names none (FR-100). Any of them may stand alone.
164
+ */
152
165
  export const BrandSpec = z.strictObject({
153
- accent: z.string().check(z.regex(/^#[0-9a-fA-F]{6}$/, 'an accent is a colour like "#c2577a"')),
166
+ accent: z.optional(z.string().check(z.regex(/^#[0-9a-fA-F]{6}$/, 'an accent is a colour like "#c2577a"'))),
154
167
  name: z.optional(str(1, 60)),
168
+ currency: z.optional(z.string().check(z.regex(/^[A-Z]{3}$/, 'a currency is its three-letter code, like "USD" or "EUR"'))),
169
+ // A language tag ("en-US", "de-DE"); `graview check` says when it is none (`brand-locale`).
170
+ locale: z.optional(str(2, 35)),
155
171
  });
156
172
  const loose = z.record(z.string(), z.unknown());
157
173
  /** A kind's view specs: which slots it fills. The blocks are checked in views.ts, sentence by sentence. */
@@ -160,6 +176,17 @@ const ViewSpecsSpec = z.strictObject({
160
176
  row: z.optional(z.array(z.unknown())),
161
177
  page: z.optional(z.array(z.unknown())),
162
178
  });
179
+ /**
180
+ * THE ARRANGEMENT (FR-80): the kinds in order, the kinds the home leaves
181
+ * off, the place the app opens on. Loose enough that a document which
182
+ * carried anything else under `pages` before FR-80 — when it was accepted
183
+ * and ignored — still parses; `graview check` says what it cannot honour.
184
+ */
185
+ export const PagesSpec = z.looseObject({
186
+ order: z.optional(z.array(z.string())),
187
+ hide: z.optional(z.array(z.string())),
188
+ first: z.optional(z.string()),
189
+ });
163
190
  export const DocumentSpec = z.strictObject({
164
191
  format: z.literal(FORMAT),
165
192
  formatVersion: z.literal(FORMAT_VERSION),
@@ -175,8 +202,9 @@ export const DocumentSpec = z.strictObject({
175
202
  policy: z.optional(PolicySpec),
176
203
  modules: z.optional(loose),
177
204
  lenses: z.optional(z.array(loose)),
178
- pages: z.optional(loose),
179
- views: z.optional(z.record(z.string(), ViewSpecsSpec)),
205
+ pages: z.optional(PagesSpec),
206
+ /** Each kind's views by kind, and `home`: the home view, a list of blocks about no one record (FR-81). */
207
+ views: z.optional(z.record(z.string(), z.union([ViewSpecsSpec, z.array(z.unknown())]))),
180
208
  brand: z.optional(BrandSpec),
181
209
  settings: z.optional(z.array(loose)),
182
210
  migrations: z.optional(z.array(loose)),
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/document/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/document/schema.ts"],"names":[],"mappings":"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"}
@@ -1,27 +1,58 @@
1
1
  import type { AnyGraphNode, GraphReader } from "../index.js";
2
2
  import { type KindShape, type Value } from "./expr/evaluate.js";
3
3
  import { type Expr } from "./expr/parse.js";
4
- export declare const FORMATTERS: readonly ["money", "percent", "date", "relative", "upper", "lower", "count"];
4
+ export declare const FORMATTERS: readonly ["money", "percent", "date", "relative", "upper", "lower", "count", "words", "and", "plural"];
5
5
  export type Formatter = (typeof FORMATTERS)[number];
6
6
  export interface TemplatePart {
7
7
  readonly text?: string;
8
8
  readonly expr?: Expr;
9
9
  readonly source?: string;
10
10
  readonly format?: Formatter;
11
+ /** What the formatter is told: `plural`'s noun, and its plural where English does not make it. */
12
+ readonly formatArgs?: readonly string[];
11
13
  }
14
+ /** Where the formatter begins: the last bar that is not inside quotes or brackets — `count(a | b)` joins two sets (FR-101) — and not half of `||`. */
15
+ export declare function filterBar(inner: string): number;
12
16
  export declare class TemplateError extends Error {
13
17
  readonly sentence: string;
14
18
  constructor(sentence: string);
15
19
  }
20
+ /**
21
+ * The braces of a template, in order: each `{…}` as written, with where its
22
+ * formatter begins inside it — so a rewrite can change an expression and
23
+ * keep what was said after the bar, spaces and quoted words included.
24
+ */
25
+ export declare function templateBraces(template: string): readonly {
26
+ readonly inner: string;
27
+ readonly bar: number;
28
+ }[];
16
29
  export declare function parseTemplate(template: string): readonly TemplatePart[];
30
+ /** A graph with nothing in it: what an expression walks when it is handed none. */
31
+ export declare const EMPTY_GRAPH: GraphReader;
17
32
  /** A value as words, through a formatter: the one place templates and view specs say a value. */
18
- export declare function formatValue(value: Value, format: Formatter | undefined, today: string): string;
33
+ export declare function formatValue(value: Value, format: Formatter | undefined, today: string, args?: readonly string[], money?: Money): string;
34
+ /**
35
+ * HOW AN APP SAYS MONEY (FR-100): the currency a sum is in when a block
36
+ * names none, and the locale its figures are written for — the app's
37
+ * `brand.currency` and `brand.locale`. Without a currency a sum is a
38
+ * number in figures, as it always was.
39
+ */
40
+ export interface Money {
41
+ readonly currency?: string;
42
+ readonly locale?: string;
43
+ }
44
+ /** A sum of money in words: "$21,000", "21.000 €" — whole sums without cents, others with two. */
45
+ export declare function formatMoney(value: number, money?: Money): string;
19
46
  export interface RenderContext {
20
47
  readonly node: AnyGraphNode | null;
21
48
  readonly kinds: ReadonlyMap<string, KindShape>;
22
49
  readonly graph?: GraphReader;
23
50
  readonly bindings?: Readonly<Record<string, Value>>;
24
51
  readonly today?: string;
52
+ /** The steps each part may take; 500 unless the surface says (a home sweeps whole kinds). */
53
+ readonly budget?: number;
54
+ /** The app's currency and locale, for `{x | money}` (FR-100). */
55
+ readonly money?: Money;
25
56
  }
26
57
  /** Render a parsed template. A part that cannot be judged renders as "—" rather than failing the whole sentence. */
27
58
  export declare function renderTemplate(parts: readonly TemplatePart[], ctx: RenderContext): string;
@@ -1 +1 @@
1
- {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/document/template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAwC,KAAK,SAAS,EAAE,KAAK,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACtG,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAWvD,eAAO,MAAM,UAAU,8EAA+E,CAAC;AACvG,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;CAC7B;AAED,qBAAa,aAAc,SAAQ,KAAK;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,EAAE,MAAM;CAGtC;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,YAAY,EAAE,CAuBvE;AAcD,iGAAiG;AACjG,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9F;AA6BD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC/C,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,oHAAoH;AACpH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,CAqBzF"}
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/document/template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAwC,KAAK,SAAS,EAAE,KAAK,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACtG,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAkBvD,eAAO,MAAM,UAAU,wGAAyG,CAAC;AACjI,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B,kGAAkG;IAClG,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,sJAAsJ;AACtJ,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAoB/C;AA8BD,qBAAa,aAAc,SAAQ,KAAK;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,EAAE,MAAM;CAGtC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,CAa5G;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,YAAY,EAAE,CAyBvE;AAED,mFAAmF;AACnF,eAAO,MAAM,WAAW,EAAE,WAUzB,CAAC;AAEF,iGAAiG;AACjG,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,SAAS,MAAM,EAAO,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAE3I;AAED;;;;;GAKG;AACH,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,kGAAkG;AAClG,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,KAAU,GAAG,MAAM,CASpE;AAiED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC/C,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,6FAA6F;IAC7F,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACxB;AAED,oHAAoH;AACpH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,CAqBzF"}
@@ -7,8 +7,74 @@ import { parseExpr } from "./expr/parse.js";
7
7
  * formatter from a closed set. A label has no graph to walk (the framework
8
8
  * hands a label function only the node), so labels may only name fields;
9
9
  * a rule's sentence has the graph and may walk an edge.
10
+ *
11
+ * Three formatters say things the way a page does (FR-83): `words` spells a
12
+ * whole number ("three"), `and` joins a set or a list ("A, B and C"), and
13
+ * `plural: 'offer'` is the noun for a count ("offer", "offers"), with the
14
+ * plural given where English does not make it: `plural: 'person', 'people'`.
15
+ *
16
+ * "Answers {count(out('answers')) | words} of the {count(all('note')) | words} {count(all('note')) | plural: 'thing'} we heard"
10
17
  */
11
- export const FORMATTERS = ["money", "percent", "date", "relative", "upper", "lower", "count"];
18
+ export const FORMATTERS = ["money", "percent", "date", "relative", "upper", "lower", "count", "words", "and", "plural"];
19
+ /** Where the formatter begins: the last bar that is not inside quotes or brackets — `count(a | b)` joins two sets (FR-101) — and not half of `||`. */
20
+ export function filterBar(inner) {
21
+ let quote;
22
+ let bar = -1;
23
+ let depth = 0;
24
+ for (let i = 0; i < inner.length; i++) {
25
+ const c = inner[i];
26
+ if (quote) {
27
+ if (c === "\\")
28
+ i++;
29
+ else if (c === quote)
30
+ quote = undefined;
31
+ continue;
32
+ }
33
+ if (c === "'" || c === '"')
34
+ quote = c;
35
+ else if (c === "(" || c === "[")
36
+ depth++;
37
+ else if (c === ")" || c === "]")
38
+ depth--;
39
+ else if (c === "|" && depth === 0) {
40
+ if (inner[i + 1] === "|")
41
+ i++;
42
+ else
43
+ bar = i;
44
+ }
45
+ }
46
+ return bar;
47
+ }
48
+ /** One quoted word, then a comma or the end. */
49
+ const QUOTED = /\s*(?:'((?:[^'\\]|\\.)*)'|"((?:[^"\\]|\\.)*)")\s*(,|$)/y;
50
+ /** A formatter and what it is told: `money`, `plural: 'person', 'people'`. */
51
+ function readFormatter(text) {
52
+ const colon = text.indexOf(":");
53
+ const name = (colon >= 0 ? text.slice(0, colon) : text).trim();
54
+ if (!FORMATTERS.includes(name))
55
+ throw new TemplateError(`"${name}" is not a formatter; use one of ${FORMATTERS.join(", ")}`);
56
+ const args = [];
57
+ if (colon >= 0) {
58
+ const rest = text.slice(colon + 1);
59
+ let at = 0;
60
+ while (at < rest.length) {
61
+ QUOTED.lastIndex = at;
62
+ const m = QUOTED.exec(rest);
63
+ if (!m)
64
+ throw new TemplateError(`"${name}" is told quoted words, like ${name}: 'offer'`);
65
+ args.push((m[1] ?? m[2] ?? "").replace(/\\(.)/g, "$1"));
66
+ at = QUOTED.lastIndex;
67
+ if (m[3] === "")
68
+ break;
69
+ }
70
+ }
71
+ if (name === "plural" && (args.length < 1 || args.length > 2)) {
72
+ throw new TemplateError("plural is told its noun, like {count | plural: 'offer'}, and its plural where English does not make it: plural: 'person', 'people'");
73
+ }
74
+ if (name !== "plural" && args.length > 0)
75
+ throw new TemplateError(`"${name}" takes nothing after it`);
76
+ return { format: name, args };
77
+ }
12
78
  export class TemplateError extends Error {
13
79
  sentence;
14
80
  constructor(sentence) {
@@ -16,6 +82,27 @@ export class TemplateError extends Error {
16
82
  this.sentence = sentence;
17
83
  }
18
84
  }
85
+ /**
86
+ * The braces of a template, in order: each `{…}` as written, with where its
87
+ * formatter begins inside it — so a rewrite can change an expression and
88
+ * keep what was said after the bar, spaces and quoted words included.
89
+ */
90
+ export function templateBraces(template) {
91
+ const out = [];
92
+ let i = 0;
93
+ while (i < template.length) {
94
+ const open = template.indexOf("{", i);
95
+ if (open < 0)
96
+ break;
97
+ const close = template.indexOf("}", open);
98
+ if (close < 0)
99
+ break;
100
+ const inner = template.slice(open + 1, close);
101
+ out.push({ inner, bar: filterBar(inner) });
102
+ i = close + 1;
103
+ }
104
+ return out;
105
+ }
19
106
  export function parseTemplate(template) {
20
107
  const parts = [];
21
108
  let i = 0;
@@ -31,18 +118,21 @@ export function parseTemplate(template) {
31
118
  if (close < 0)
32
119
  throw new TemplateError(`a "{" at character ${open + 1} is never closed`);
33
120
  const inner = template.slice(open + 1, close);
34
- const bar = inner.lastIndexOf("|");
121
+ const bar = filterBar(inner);
35
122
  const source = (bar >= 0 ? inner.slice(0, bar) : inner).trim();
36
- const format = bar >= 0 ? inner.slice(bar + 1).trim() : undefined;
37
- if (format !== undefined && !FORMATTERS.includes(format)) {
38
- throw new TemplateError(`"${format}" is not a formatter; use one of ${FORMATTERS.join(", ")}`);
39
- }
40
- parts.push({ expr: parseExpr(source), source, ...(format ? { format: format } : {}) });
123
+ const formatter = bar >= 0 ? readFormatter(inner.slice(bar + 1)) : undefined;
124
+ parts.push({
125
+ expr: parseExpr(source),
126
+ source,
127
+ ...(formatter ? { format: formatter.format } : {}),
128
+ ...(formatter && formatter.args.length > 0 ? { formatArgs: formatter.args } : {}),
129
+ });
41
130
  i = close + 1;
42
131
  }
43
132
  return parts;
44
133
  }
45
- const EMPTY_GRAPH = {
134
+ /** A graph with nothing in it: what an expression walks when it is handed none. */
135
+ export const EMPTY_GRAPH = {
46
136
  getNode: () => undefined,
47
137
  allNodes: () => [],
48
138
  allEdges: () => [],
@@ -54,21 +144,69 @@ const EMPTY_GRAPH = {
54
144
  has: () => false,
55
145
  };
56
146
  /** A value as words, through a formatter: the one place templates and view specs say a value. */
57
- export function formatValue(value, format, today) {
58
- return show(value, format, today);
147
+ export function formatValue(value, format, today, args = [], money) {
148
+ return show(value, format, today, args, money);
59
149
  }
60
- function show(value, format, today) {
150
+ /** A sum of money in words: "$21,000", "21.000 €" — whole sums without cents, others with two. */
151
+ export function formatMoney(value, money = {}) {
152
+ const whole = Number.isInteger(value);
153
+ const digits = { maximumFractionDigits: whole ? 0 : 2, minimumFractionDigits: whole ? 0 : 2 };
154
+ try {
155
+ return new Intl.NumberFormat(money.locale ?? "en-US", money.currency ? { style: "currency", currency: money.currency, ...digits } : digits).format(value);
156
+ }
157
+ catch {
158
+ // A currency or locale the runtime does not know is said as a plain number, never a thrown page.
159
+ return value.toLocaleString("en-US", digits);
160
+ }
161
+ }
162
+ const ONES = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"];
163
+ const TENS = ["", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"];
164
+ /** A whole number from zero to ninety-nine in words; anything else in figures. */
165
+ function inWords(n) {
166
+ if (!Number.isInteger(n) || n < 0 || n > 99)
167
+ return n.toLocaleString("en-US", { maximumFractionDigits: 2 });
168
+ if (n < 20)
169
+ return ONES[n];
170
+ return n % 10 === 0 ? TENS[n / 10] : `${TENS[Math.floor(n / 10)]}-${ONES[n % 10]}`;
171
+ }
172
+ /** "A", "A and B", "A, B and C". */
173
+ function joined(items) {
174
+ return items.length <= 1 ? (items[0] ?? "") : `${items.slice(0, -1).join(", ")} and ${items[items.length - 1]}`;
175
+ }
176
+ /** The plural English makes of a noun: offers, parties, boxes. */
177
+ function pluralOf(noun) {
178
+ if (/[^aeiou]y$/i.test(noun))
179
+ return `${noun.slice(0, -1)}ies`;
180
+ if (/(s|x|z|ch|sh)$/i.test(noun))
181
+ return `${noun}es`;
182
+ return `${noun}s`;
183
+ }
184
+ /** What a record is called in a sentence: its name, title or label, else its id. */
185
+ const called = (n) => String(n["name"] ?? n["title"] ?? n["label"] ?? n.id);
186
+ function show(value, format, today, args = [], money) {
187
+ if (format === "plural") {
188
+ const count = value instanceof NodeSet ? value.nodes.length : Array.isArray(value) ? value.length : typeof value === "number" ? value : null;
189
+ if (count === null || args[0] === undefined)
190
+ return "—";
191
+ return count === 1 ? args[0] : (args[1] ?? pluralOf(args[0]));
192
+ }
61
193
  if (value === null)
62
194
  return "—";
63
195
  if (value instanceof NodeSet)
64
- return format === "count" ? String(value.nodes.length) : value.nodes.map((n) => String(n["name"] ?? n["title"] ?? n.id)).join(", ");
65
- if (Array.isArray(value))
66
- return format === "count" ? String(value.length) : value.map((v) => show(v, undefined, today)).join(", ");
196
+ return format === "count" ? String(value.nodes.length) : format === "and" ? joined(value.nodes.map(called)) : value.nodes.map(called).join(", ");
197
+ if (Array.isArray(value)) {
198
+ if (format === "count")
199
+ return String(value.length);
200
+ const each = value.map((v) => show(v, undefined, today, [], money));
201
+ return format === "and" ? joined(each) : each.join(", ");
202
+ }
67
203
  if (typeof value === "object")
68
- return String(value["name"] ?? value["title"] ?? value.id);
204
+ return called(value);
69
205
  switch (format) {
206
+ case "words":
207
+ return typeof value === "number" ? inWords(value) : String(value);
70
208
  case "money":
71
- return typeof value === "number" ? value.toLocaleString("en-US", { maximumFractionDigits: 2, minimumFractionDigits: Number.isInteger(value) ? 0 : 2 }) : String(value);
209
+ return typeof value === "number" ? formatMoney(value, money) : String(value);
72
210
  case "percent":
73
211
  return typeof value === "number" ? `${Math.round(value * 100)}%` : String(value);
74
212
  case "upper":
@@ -101,10 +239,10 @@ export function renderTemplate(parts, ctx) {
101
239
  subject: ctx.node,
102
240
  kinds: ctx.kinds,
103
241
  today,
104
- budget: 500,
242
+ budget: ctx.budget ?? 500,
105
243
  ...(ctx.bindings ? { bindings: ctx.bindings } : {}),
106
244
  });
107
- return show(value, part.format, today);
245
+ return show(value, part.format, today, part.formatArgs, ctx.money);
108
246
  }
109
247
  catch (error) {
110
248
  if (error instanceof ExprEvalError)
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/document/template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/document/template.ts"],"names":[],"mappings":"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"}
@@ -8,10 +8,11 @@ export interface SceneThumbnailOptions {
8
8
  readonly width?: number;
9
9
  readonly height?: number;
10
10
  /**
11
- * How many of each kind stand today, from a snapshot. A district with
12
- * members draws its village, one building each up to what the plot holds;
13
- * one without draws a single block. Counts move a plot's size, never its
14
- * corner, exactly as in the Scene.
11
+ * How many of each kind stand today, from a snapshot. Each district is
12
+ * sized as the live Scene sizes it (FR-103): its plot's side from its
13
+ * count, and its village, one building per member up to what the plot
14
+ * holds, where the Scene's plots stand them. One without members draws a
15
+ * single block. Counts move a plot's size, never its corner.
15
16
  */
16
17
  readonly counts?: Readonly<Record<string, number>>;
17
18
  /** Fill the picture with the scheme's ground. Default true; false leaves it transparent for a host's own surface. */
@@ -1 +1 @@
1
- {"version":3,"file":"thumbnail.d.ts","sourceRoot":"","sources":["../../src/document/thumbnail.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAM5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAuBnD,MAAM,WAAW,qBAAqB;IACpC,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,qHAAqH;IACrH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,sEAAsE;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,oIAAoI;AACpI,MAAM,MAAM,eAAe,GAAG,eAAe,GAAG,UAAU,GAAG,MAAM,CAAC;AAuGpE;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,GAAE,qBAA0B,GAAG,MAAM,CA0EnG"}
1
+ {"version":3,"file":"thumbnail.d.ts","sourceRoot":"","sources":["../../src/document/thumbnail.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAM5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAwBnD,MAAM,WAAW,qBAAqB;IACpC,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,qHAAqH;IACrH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,sEAAsE;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,oIAAoI;AACpI,MAAM,MAAM,eAAe,GAAG,eAAe,GAAG,UAAU,GAAG,MAAM,CAAC;AA+GpE;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,GAAE,qBAA0B,GAAG,MAAM,CA0EnG"}
@@ -1,4 +1,4 @@
1
- import { toIso, villageCap, villageOf } from "../city.js";
1
+ import { toIso } from "../city.js";
2
2
  import { sceneDistricts } from "../scene-districts.js";
3
3
  import { coloursIn, hsl } from "../theme/contrast.js";
4
4
  import { isoShade } from "../theme/look.js";
@@ -32,43 +32,51 @@ function block(col, row, footprint, height, hue, scheme) {
32
32
  const shade = isoShade(scheme);
33
33
  const half = footprint / 2;
34
34
  const rise = footprint * CELL * 0.5 * height;
35
+ /*
36
+ * Whole units, a fortieth of a cell: under a third of a pixel at the
37
+ * smallest scale a village is drawn at, and half the bytes of a tenth.
38
+ * Rounded before the faces are written, so each face closes exactly.
39
+ */
35
40
  const at = (c, r, lift = 0) => {
36
41
  const p = toIso(c, r, CELL);
37
- return { x: p.x, y: p.y - lift };
42
+ return { x: Math.round(p.x), y: Math.round(p.y - lift) };
38
43
  };
39
44
  const back = at(col - half, row - half, rise);
40
45
  const right = at(col + half, row - half, rise);
41
46
  const front = at(col + half, row + half, rise);
42
47
  const left = at(col - half, row + half, rise);
43
- const frontFoot = at(col + half, row + half);
44
- const leftFoot = at(col - half, row + half);
45
- const rightFoot = at(col + half, row - half);
46
48
  const edge = coloursIn(shade.roofEdge)[0];
49
+ /*
50
+ * Each face a path from one corner, the rest relative: a wall is two
51
+ * corners of the roof and the drop to the ground, a roof the diamond.
52
+ * A village is hundreds of these, so a corner is written once.
53
+ */
54
+ const to = (a, b) => `${fmt(b.x - a.x)} ${fmt(b.y - a.y)}`;
55
+ const from = (p) => `M${fmt(p.x)} ${fmt(p.y)}`;
56
+ const fall = Math.round(rise);
57
+ const drop = `v${fall}`;
47
58
  return {
48
- svg: `<polygon fill="${face(hue, shade.left)}" points="${points([left, front, frontFoot, leftFoot])}"/>` +
49
- `<polygon fill="${face(hue, shade.right)}" points="${points([front, right, rightFoot, frontFoot])}"/>` +
50
- `<polygon fill="${face(hue, shade.roof)}" stroke="${hex(edge)}" points="${points([back, right, front, left])}"/>`,
51
- reach: [back, right, left, frontFoot, leftFoot, rightFoot],
59
+ svg: `<path fill="${face(hue, shade.left)}" d="${from(left)}l${to(left, front)}${drop}l${to(front, left)}z"/>` +
60
+ `<path fill="${face(hue, shade.right)}" d="${from(front)}l${to(front, right)}${drop}l${to(right, front)}z"/>` +
61
+ `<path fill="${face(hue, shade.roof)}" stroke="${hex(edge)}" d="${from(back)}l${to(back, right)}l${to(right, front)}l${to(front, left)}z"/>`,
62
+ reach: [back, right, left, { x: front.x, y: front.y + fall }, { x: left.x, y: left.y + fall }, { x: right.x, y: right.y + fall }],
52
63
  };
53
64
  }
54
65
  /*
55
66
  * HOW MUCH VILLAGE A THUMBNAIL CAN SHOW. The Scene stands one building per
56
- * member; at a card's size a big app's buildings are a pixel across and
57
- * hundreds of them are only bytes. So a village is drawn while a building
58
- * is still a few pixels wide and the picture holds at most this many; past
59
- * either, each populated district stands as one block, taller for more —
60
- * the same district on the same plot, seen from further away.
67
+ * member, and so does the picture, while a building is still a few pixels
68
+ * wide and the picture holds at most this many: twelve districts each as
69
+ * full as a plot holds (12 × 24), in about 50 KB. Past either, each
70
+ * populated district stands as one block, taller for more — the same
71
+ * district on the same plot, seen from further away.
61
72
  */
62
73
  const VILLAGE_MIN_PX = 4;
63
- const MOST_BUILDINGS = 160;
74
+ const MOST_BUILDINGS = 300;
64
75
  /** What stands on one district: its village when it has members and room to show them, else one block for the district itself. */
65
76
  function standing(district, scheme, village) {
66
- const { plot, hue, kind, count } = district;
77
+ const { plot, hue, count } = district;
67
78
  if (count > 0 && village) {
68
- const shown = Math.min(count, villageCap(plot.side));
69
- // Ids for the members are the kind and an ordinal: a snapshot's counts carry no ids, and the same count must draw the same village.
70
- const { buildings } = villageOf(plot, Array.from({ length: shown }, (_, i) => `${kind}#${i}`));
71
- return buildings.map((b) => ({ depth: b.col + b.row, ...block(b.col, b.row, b.footprint, b.height, hue, scheme) }));
79
+ return district.village.map((b) => ({ depth: b.col + b.row, ...block(b.col, b.row, b.footprint, b.height, hue, scheme) }));
72
80
  }
73
81
  const centre = { col: plot.col + plot.side / 2, row: plot.row + plot.side / 2 };
74
82
  const height = 1.25 + Math.min(1.25, Math.log2(1 + count) * 0.2);
@@ -119,7 +127,7 @@ export function sceneThumbnail(source, options = {}) {
119
127
  /* Whether the villages are drawn: a building a few pixels wide at the scale the plots alone are fitted at, and not too many of them. */
120
128
  const ground0 = bounds(all);
121
129
  const scale = Math.min(width / (ground0.maxX - ground0.minX + CELL * 1.2), height / (ground0.maxY - ground0.minY + CELL * 1.8));
122
- const buildings = districts.reduce((sum, d) => sum + Math.min(d.count, villageCap(d.plot.side)), 0);
130
+ const buildings = districts.reduce((sum, d) => sum + d.village.length, 0);
123
131
  const smallest = Math.min(Infinity, ...districts.filter((d) => d.count > 0).map((d) => (d.plot.side / (d.plot.side + 1)) * 0.62 * CELL * scale));
124
132
  const village = buildings <= MOST_BUILDINGS && smallest >= VILLAGE_MIN_PX;
125
133
  const stands = districts.flatMap((district) => standing(district, scheme, village));