@graview/core 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 (501) hide show
  1. package/README.md +17 -0
  2. package/dist/amount-input.d.ts +21 -0
  3. package/dist/amount-input.d.ts.map +1 -0
  4. package/dist/amount-input.js +96 -0
  5. package/dist/amount-input.js.map +1 -0
  6. package/dist/answer-seen.d.ts +38 -0
  7. package/dist/answer-seen.d.ts.map +1 -0
  8. package/dist/answer-seen.js +122 -0
  9. package/dist/answer-seen.js.map +1 -0
  10. package/dist/app-places.d.ts +56 -0
  11. package/dist/app-places.d.ts.map +1 -0
  12. package/dist/app-places.js +153 -0
  13. package/dist/app-places.js.map +1 -0
  14. package/dist/arrange.d.ts +2 -2
  15. package/dist/arrange.d.ts.map +1 -1
  16. package/dist/arrange.js +2 -2
  17. package/dist/arrange.js.map +1 -1
  18. package/dist/arrangement-words.d.ts +3 -0
  19. package/dist/arrangement-words.d.ts.map +1 -0
  20. package/dist/arrangement-words.js +50 -0
  21. package/dist/arrangement-words.js.map +1 -0
  22. package/dist/arrangement.d.ts +25 -3
  23. package/dist/arrangement.d.ts.map +1 -1
  24. package/dist/arrangement.js +36 -32
  25. package/dist/arrangement.js.map +1 -1
  26. package/dist/arranging.d.ts.map +1 -1
  27. package/dist/arranging.js +19 -8
  28. package/dist/arranging.js.map +1 -1
  29. package/dist/bind.d.ts +3 -0
  30. package/dist/bind.d.ts.map +1 -1
  31. package/dist/bind.js.map +1 -1
  32. package/dist/capabilities.js +1 -1
  33. package/dist/capabilities.js.map +1 -1
  34. package/dist/check.d.ts +3 -0
  35. package/dist/check.d.ts.map +1 -1
  36. package/dist/check.js +3 -0
  37. package/dist/check.js.map +1 -1
  38. package/dist/city.d.ts +58 -50
  39. package/dist/city.d.ts.map +1 -1
  40. package/dist/city.js +160 -147
  41. package/dist/city.js.map +1 -1
  42. package/dist/cli/check/brand.js +1 -1
  43. package/dist/cli/check/brand.js.map +1 -1
  44. package/dist/cli/check/clock-rules.d.ts +4 -0
  45. package/dist/cli/check/clock-rules.d.ts.map +1 -0
  46. package/dist/cli/check/clock-rules.js +26 -0
  47. package/dist/cli/check/clock-rules.js.map +1 -0
  48. package/dist/cli/check/field-sight.d.ts +11 -0
  49. package/dist/cli/check/field-sight.d.ts.map +1 -0
  50. package/dist/cli/check/field-sight.js +113 -0
  51. package/dist/cli/check/field-sight.js.map +1 -0
  52. package/dist/cli/check/index.d.ts +2 -0
  53. package/dist/cli/check/index.d.ts.map +1 -1
  54. package/dist/cli/check/index.js +2 -0
  55. package/dist/cli/check/index.js.map +1 -1
  56. package/dist/cli/check/lenses.d.ts +1 -1
  57. package/dist/cli/check/lenses.d.ts.map +1 -1
  58. package/dist/cli/check/lenses.js +43 -2
  59. package/dist/cli/check/lenses.js.map +1 -1
  60. package/dist/cli/check/relations.d.ts.map +1 -1
  61. package/dist/cli/check/relations.js +2 -1
  62. package/dist/cli/check/relations.js.map +1 -1
  63. package/dist/cli/check.d.ts.map +1 -1
  64. package/dist/cli/check.js +7 -4
  65. package/dist/cli/check.js.map +1 -1
  66. package/dist/cli/describe.d.ts.map +1 -1
  67. package/dist/cli/describe.js +44 -3
  68. package/dist/cli/describe.js.map +1 -1
  69. package/dist/cli/docs.d.ts.map +1 -1
  70. package/dist/cli/docs.js +4 -3
  71. package/dist/cli/docs.js.map +1 -1
  72. package/dist/cli/types.d.ts.map +1 -1
  73. package/dist/cli/types.js +10 -1
  74. package/dist/cli/types.js.map +1 -1
  75. package/dist/clock-readers.d.ts +18 -0
  76. package/dist/clock-readers.d.ts.map +1 -0
  77. package/dist/clock-readers.js +70 -0
  78. package/dist/clock-readers.js.map +1 -0
  79. package/dist/clock.d.ts +30 -0
  80. package/dist/clock.d.ts.map +1 -0
  81. package/dist/clock.js +41 -0
  82. package/dist/clock.js.map +1 -0
  83. package/dist/columns.d.ts.map +1 -1
  84. package/dist/columns.js +2 -1
  85. package/dist/columns.js.map +1 -1
  86. package/dist/conformance/fixtures.d.ts.map +1 -1
  87. package/dist/conformance/fixtures.js +326 -43
  88. package/dist/conformance/fixtures.js.map +1 -1
  89. package/dist/days.d.ts +53 -4
  90. package/dist/days.d.ts.map +1 -1
  91. package/dist/days.js +136 -16
  92. package/dist/days.js.map +1 -1
  93. package/dist/describe.d.ts +1 -0
  94. package/dist/describe.d.ts.map +1 -1
  95. package/dist/describe.js +1 -0
  96. package/dist/describe.js.map +1 -1
  97. package/dist/document/act-findings.d.ts.map +1 -1
  98. package/dist/document/act-findings.js +13 -3
  99. package/dist/document/act-findings.js.map +1 -1
  100. package/dist/document/amount.d.ts +4 -0
  101. package/dist/document/amount.d.ts.map +1 -0
  102. package/dist/document/amount.js +22 -0
  103. package/dist/document/amount.js.map +1 -0
  104. package/dist/document/block-context.d.ts.map +1 -1
  105. package/dist/document/block-context.js +1 -0
  106. package/dist/document/block-context.js.map +1 -1
  107. package/dist/document/blocks.d.ts +13 -3
  108. package/dist/document/blocks.d.ts.map +1 -1
  109. package/dist/document/blocks.js +56 -12
  110. package/dist/document/blocks.js.map +1 -1
  111. package/dist/document/compile-checked.d.ts.map +1 -1
  112. package/dist/document/compile-checked.js +3 -2
  113. package/dist/document/compile-checked.js.map +1 -1
  114. package/dist/document/compile.d.ts.map +1 -1
  115. package/dist/document/compile.js +30 -7
  116. package/dist/document/compile.js.map +1 -1
  117. package/dist/document/compiled.d.ts +4 -2
  118. package/dist/document/compiled.d.ts.map +1 -1
  119. package/dist/document/compiled.js +50 -19
  120. package/dist/document/compiled.js.map +1 -1
  121. package/dist/document/describe-coverage.d.ts.map +1 -1
  122. package/dist/document/describe-coverage.js +2 -1
  123. package/dist/document/describe-coverage.js.map +1 -1
  124. package/dist/document/describe-place.d.ts +6 -2
  125. package/dist/document/describe-place.d.ts.map +1 -1
  126. package/dist/document/describe-place.js +14 -8
  127. package/dist/document/describe-place.js.map +1 -1
  128. package/dist/document/diff.d.ts +2 -0
  129. package/dist/document/diff.d.ts.map +1 -1
  130. package/dist/document/diff.js +34 -6
  131. package/dist/document/diff.js.map +1 -1
  132. package/dist/document/durations.d.ts +8 -0
  133. package/dist/document/durations.d.ts.map +1 -0
  134. package/dist/document/durations.js +82 -0
  135. package/dist/document/durations.js.map +1 -0
  136. package/dist/document/edit.d.ts +1 -1
  137. package/dist/document/edit.d.ts.map +1 -1
  138. package/dist/document/edit.js +195 -22
  139. package/dist/document/edit.js.map +1 -1
  140. package/dist/document/expr/evaluate.d.ts +1 -1
  141. package/dist/document/expr/evaluate.d.ts.map +1 -1
  142. package/dist/document/expr/evaluate.js +17 -4
  143. package/dist/document/expr/evaluate.js.map +1 -1
  144. package/dist/document/field-spec.d.ts.map +1 -1
  145. package/dist/document/field-spec.js +15 -1
  146. package/dist/document/field-spec.js.map +1 -1
  147. package/dist/document/format-findings.d.ts +4 -0
  148. package/dist/document/format-findings.d.ts.map +1 -0
  149. package/dist/document/format-findings.js +39 -0
  150. package/dist/document/format-findings.js.map +1 -0
  151. package/dist/document/format-rules.d.ts +8 -0
  152. package/dist/document/format-rules.d.ts.map +1 -0
  153. package/dist/document/format-rules.js +19 -0
  154. package/dist/document/format-rules.js.map +1 -0
  155. package/dist/document/format-words.d.ts +9 -0
  156. package/dist/document/format-words.d.ts.map +1 -0
  157. package/dist/document/format-words.js +29 -0
  158. package/dist/document/format-words.js.map +1 -0
  159. package/dist/document/graview-template.d.ts +2 -2
  160. package/dist/document/migrate.d.ts +1 -0
  161. package/dist/document/migrate.d.ts.map +1 -1
  162. package/dist/document/migrate.js +45 -1
  163. package/dist/document/migrate.js.map +1 -1
  164. package/dist/document/money.d.ts +14 -0
  165. package/dist/document/money.d.ts.map +1 -0
  166. package/dist/document/money.js +14 -0
  167. package/dist/document/money.js.map +1 -0
  168. package/dist/document/policy-words.d.ts +2 -0
  169. package/dist/document/policy-words.d.ts.map +1 -1
  170. package/dist/document/policy-words.js +19 -4
  171. package/dist/document/policy-words.js.map +1 -1
  172. package/dist/document/rule-line.d.ts.map +1 -1
  173. package/dist/document/rule-line.js +16 -12
  174. package/dist/document/rule-line.js.map +1 -1
  175. package/dist/document/rules.d.ts.map +1 -1
  176. package/dist/document/rules.js +6 -5
  177. package/dist/document/rules.js.map +1 -1
  178. package/dist/document/schema.d.ts +62 -19
  179. package/dist/document/schema.d.ts.map +1 -1
  180. package/dist/document/schema.js +30 -4
  181. package/dist/document/schema.js.map +1 -1
  182. package/dist/document/template-parse.d.ts.map +1 -1
  183. package/dist/document/template-parse.js +9 -2
  184. package/dist/document/template-parse.js.map +1 -1
  185. package/dist/document/template.d.ts +3 -13
  186. package/dist/document/template.d.ts.map +1 -1
  187. package/dist/document/template.js +24 -22
  188. package/dist/document/template.js.map +1 -1
  189. package/dist/document/thumbnail.d.ts.map +1 -1
  190. package/dist/document/thumbnail.js +4 -3
  191. package/dist/document/thumbnail.js.map +1 -1
  192. package/dist/document/to-document.d.ts +0 -1
  193. package/dist/document/to-document.d.ts.map +1 -1
  194. package/dist/document/to-document.js +19 -2
  195. package/dist/document/to-document.js.map +1 -1
  196. package/dist/document/view-specs.d.ts.map +1 -1
  197. package/dist/document/view-specs.js +3 -0
  198. package/dist/document/view-specs.js.map +1 -1
  199. package/dist/document/views.d.ts +2 -0
  200. package/dist/document/views.d.ts.map +1 -1
  201. package/dist/document/views.js +18 -6
  202. package/dist/document/views.js.map +1 -1
  203. package/dist/document.schema.json +63 -6
  204. package/dist/excerpt-of.d.ts +14 -0
  205. package/dist/excerpt-of.d.ts.map +1 -0
  206. package/dist/excerpt-of.js +120 -0
  207. package/dist/excerpt-of.js.map +1 -0
  208. package/dist/excerpt.d.ts +9 -0
  209. package/dist/excerpt.d.ts.map +1 -0
  210. package/dist/excerpt.js +43 -0
  211. package/dist/excerpt.js.map +1 -0
  212. package/dist/field-sight.d.ts +33 -0
  213. package/dist/field-sight.d.ts.map +1 -0
  214. package/dist/field-sight.js +313 -0
  215. package/dist/field-sight.js.map +1 -0
  216. package/dist/forms.d.ts +1 -0
  217. package/dist/forms.d.ts.map +1 -1
  218. package/dist/forms.js +1 -0
  219. package/dist/forms.js.map +1 -1
  220. package/dist/graph/archived.d.ts +25 -0
  221. package/dist/graph/archived.d.ts.map +1 -0
  222. package/dist/graph/archived.js +16 -0
  223. package/dist/graph/archived.js.map +1 -0
  224. package/dist/graph/diff.d.ts.map +1 -1
  225. package/dist/graph/diff.js +2 -1
  226. package/dist/graph/diff.js.map +1 -1
  227. package/dist/graph/graph.d.ts +37 -13
  228. package/dist/graph/graph.d.ts.map +1 -1
  229. package/dist/graph/graph.js +86 -40
  230. package/dist/graph/graph.js.map +1 -1
  231. package/dist/graph/tracked.d.ts +8 -8
  232. package/dist/graph/tracked.d.ts.map +1 -1
  233. package/dist/graph/tracked.js +15 -20
  234. package/dist/graph/tracked.js.map +1 -1
  235. package/dist/graph/types.d.ts +16 -8
  236. package/dist/graph/types.d.ts.map +1 -1
  237. package/dist/graph/types.js.map +1 -1
  238. package/dist/import/coerce.d.ts +45 -0
  239. package/dist/import/coerce.d.ts.map +1 -0
  240. package/dist/import/coerce.js +252 -0
  241. package/dist/import/coerce.js.map +1 -0
  242. package/dist/import/csv.d.ts +16 -0
  243. package/dist/import/csv.d.ts.map +1 -0
  244. package/dist/import/csv.js +77 -0
  245. package/dist/import/csv.js.map +1 -0
  246. package/dist/import/index.d.ts +17 -0
  247. package/dist/import/index.d.ts.map +1 -0
  248. package/dist/import/index.js +13 -0
  249. package/dist/import/index.js.map +1 -0
  250. package/dist/import/mapping.d.ts +99 -0
  251. package/dist/import/mapping.d.ts.map +1 -0
  252. package/dist/import/mapping.js +182 -0
  253. package/dist/import/mapping.js.map +1 -0
  254. package/dist/import/rows.d.ts +116 -0
  255. package/dist/import/rows.d.ts.map +1 -0
  256. package/dist/import/rows.js +584 -0
  257. package/dist/import/rows.js.map +1 -0
  258. package/dist/index.d.ts +38 -21
  259. package/dist/index.d.ts.map +1 -1
  260. package/dist/index.js +27 -16
  261. package/dist/index.js.map +1 -1
  262. package/dist/invariants/engine.d.ts +5 -1
  263. package/dist/invariants/engine.d.ts.map +1 -1
  264. package/dist/invariants/engine.js +4 -3
  265. package/dist/invariants/engine.js.map +1 -1
  266. package/dist/invariants/types.d.ts +18 -3
  267. package/dist/invariants/types.d.ts.map +1 -1
  268. package/dist/json-schema.d.ts +1 -0
  269. package/dist/json-schema.d.ts.map +1 -1
  270. package/dist/json-schema.js +2 -0
  271. package/dist/json-schema.js.map +1 -1
  272. package/dist/labels.d.ts.map +1 -1
  273. package/dist/labels.js +2 -1
  274. package/dist/labels.js.map +1 -1
  275. package/dist/lines.d.ts +1 -0
  276. package/dist/lines.d.ts.map +1 -1
  277. package/dist/lines.js +5 -3
  278. package/dist/lines.js.map +1 -1
  279. package/dist/markdown.d.ts +102 -0
  280. package/dist/markdown.d.ts.map +1 -0
  281. package/dist/markdown.js +460 -0
  282. package/dist/markdown.js.map +1 -0
  283. package/dist/mutations/arg-shape.d.ts +95 -0
  284. package/dist/mutations/arg-shape.d.ts.map +1 -0
  285. package/dist/mutations/arg-shape.js +101 -0
  286. package/dist/mutations/arg-shape.js.map +1 -0
  287. package/dist/mutations/define-mutation.d.ts +48 -2
  288. package/dist/mutations/define-mutation.d.ts.map +1 -1
  289. package/dist/mutations/define-mutation.js +103 -36
  290. package/dist/mutations/define-mutation.js.map +1 -1
  291. package/dist/mutations/derive-edits.d.ts +16 -1
  292. package/dist/mutations/derive-edits.d.ts.map +1 -1
  293. package/dist/mutations/derive-edits.js +67 -28
  294. package/dist/mutations/derive-edits.js.map +1 -1
  295. package/dist/mutations/derive-repeats.d.ts +8 -0
  296. package/dist/mutations/derive-repeats.d.ts.map +1 -0
  297. package/dist/mutations/derive-repeats.js +118 -0
  298. package/dist/mutations/derive-repeats.js.map +1 -0
  299. package/dist/mutations/derived-names.d.ts +20 -0
  300. package/dist/mutations/derived-names.d.ts.map +1 -0
  301. package/dist/mutations/derived-names.js +19 -0
  302. package/dist/mutations/derived-names.js.map +1 -0
  303. package/dist/mutations/form.d.ts +21 -1
  304. package/dist/mutations/form.d.ts.map +1 -1
  305. package/dist/mutations/form.js +19 -2
  306. package/dist/mutations/form.js.map +1 -1
  307. package/dist/mutations/invalid-arguments.d.ts +14 -0
  308. package/dist/mutations/invalid-arguments.d.ts.map +1 -0
  309. package/dist/mutations/invalid-arguments.js +18 -0
  310. package/dist/mutations/invalid-arguments.js.map +1 -0
  311. package/dist/mutations/keep-link.d.ts +27 -0
  312. package/dist/mutations/keep-link.d.ts.map +1 -0
  313. package/dist/mutations/keep-link.js +56 -0
  314. package/dist/mutations/keep-link.js.map +1 -0
  315. package/dist/mutations/kept-arguments.d.ts +26 -0
  316. package/dist/mutations/kept-arguments.d.ts.map +1 -0
  317. package/dist/mutations/kept-arguments.js +77 -0
  318. package/dist/mutations/kept-arguments.js.map +1 -0
  319. package/dist/mutations/node-ref.d.ts +0 -80
  320. package/dist/mutations/node-ref.d.ts.map +1 -1
  321. package/dist/mutations/node-ref.js +0 -93
  322. package/dist/mutations/node-ref.js.map +1 -1
  323. package/dist/mutations/types.d.ts +17 -1
  324. package/dist/mutations/types.d.ts.map +1 -1
  325. package/dist/mutations/words.d.ts +0 -13
  326. package/dist/mutations/words.d.ts.map +1 -1
  327. package/dist/mutations/words.js +1 -12
  328. package/dist/mutations/words.js.map +1 -1
  329. package/dist/ops/kept-fields.d.ts +7 -0
  330. package/dist/ops/kept-fields.d.ts.map +1 -0
  331. package/dist/ops/kept-fields.js +24 -0
  332. package/dist/ops/kept-fields.js.map +1 -0
  333. package/dist/ops/lineage.d.ts +37 -0
  334. package/dist/ops/lineage.d.ts.map +1 -0
  335. package/dist/ops/lineage.js +26 -0
  336. package/dist/ops/lineage.js.map +1 -0
  337. package/dist/ops/log.d.ts.map +1 -1
  338. package/dist/ops/log.js +1 -0
  339. package/dist/ops/log.js.map +1 -1
  340. package/dist/ops/provenance.d.ts +68 -0
  341. package/dist/ops/provenance.d.ts.map +1 -0
  342. package/dist/ops/provenance.js +83 -0
  343. package/dist/ops/provenance.js.map +1 -0
  344. package/dist/ops/types.d.ts +25 -0
  345. package/dist/ops/types.d.ts.map +1 -1
  346. package/dist/ops/withheld.d.ts +25 -2
  347. package/dist/ops/withheld.d.ts.map +1 -1
  348. package/dist/ops/withheld.js +6 -15
  349. package/dist/ops/withheld.js.map +1 -1
  350. package/dist/permissions/policy.d.ts +6 -1
  351. package/dist/permissions/policy.d.ts.map +1 -1
  352. package/dist/permissions/policy.js +29 -9
  353. package/dist/permissions/policy.js.map +1 -1
  354. package/dist/permissions/sight.d.ts +40 -2
  355. package/dist/permissions/sight.d.ts.map +1 -1
  356. package/dist/permissions/sight.js +25 -2
  357. package/dist/permissions/sight.js.map +1 -1
  358. package/dist/permissions/types.d.ts +21 -0
  359. package/dist/permissions/types.d.ts.map +1 -1
  360. package/dist/permissions/types.js.map +1 -1
  361. package/dist/places.d.ts +0 -49
  362. package/dist/places.d.ts.map +1 -1
  363. package/dist/places.js +2 -141
  364. package/dist/places.js.map +1 -1
  365. package/dist/provenance.d.ts +14 -0
  366. package/dist/provenance.d.ts.map +1 -0
  367. package/dist/provenance.js +13 -0
  368. package/dist/provenance.js.map +1 -0
  369. package/dist/repeat-words.d.ts +13 -0
  370. package/dist/repeat-words.d.ts.map +1 -0
  371. package/dist/repeat-words.js +56 -0
  372. package/dist/repeat-words.js.map +1 -0
  373. package/dist/repeat.d.ts +59 -0
  374. package/dist/repeat.d.ts.map +1 -0
  375. package/dist/repeat.js +155 -0
  376. package/dist/repeat.js.map +1 -0
  377. package/dist/scaffold/project.d.ts.map +1 -1
  378. package/dist/scaffold/project.js +13 -0
  379. package/dist/scaffold/project.js.map +1 -1
  380. package/dist/scaffold/ui.js +2 -2
  381. package/dist/scene-districts.d.ts +2 -1
  382. package/dist/scene-districts.d.ts.map +1 -1
  383. package/dist/scene-districts.js +2 -1
  384. package/dist/scene-districts.js.map +1 -1
  385. package/dist/scene.d.ts +4 -2
  386. package/dist/scene.d.ts.map +1 -1
  387. package/dist/scene.js +2 -1
  388. package/dist/scene.js.map +1 -1
  389. package/dist/schema/amount-mark.d.ts +13 -0
  390. package/dist/schema/amount-mark.d.ts.map +1 -0
  391. package/dist/schema/amount-mark.js +20 -0
  392. package/dist/schema/amount-mark.js.map +1 -0
  393. package/dist/schema/amount-words.d.ts +12 -0
  394. package/dist/schema/amount-words.d.ts.map +1 -0
  395. package/dist/schema/amount-words.js +31 -0
  396. package/dist/schema/amount-words.js.map +1 -0
  397. package/dist/schema/app-link-field.d.ts +4 -0
  398. package/dist/schema/app-link-field.d.ts.map +1 -0
  399. package/dist/schema/app-link-field.js +19 -0
  400. package/dist/schema/app-link-field.js.map +1 -0
  401. package/dist/schema/app-link.d.ts +41 -0
  402. package/dist/schema/app-link.d.ts.map +1 -0
  403. package/dist/schema/app-link.js +40 -0
  404. package/dist/schema/app-link.js.map +1 -0
  405. package/dist/schema/define-node.d.ts +25 -94
  406. package/dist/schema/define-node.d.ts.map +1 -1
  407. package/dist/schema/define-node.js +3 -247
  408. package/dist/schema/define-node.js.map +1 -1
  409. package/dist/schema/field-words.d.ts +45 -0
  410. package/dist/schema/field-words.d.ts.map +1 -0
  411. package/dist/schema/field-words.js +124 -0
  412. package/dist/schema/field-words.js.map +1 -0
  413. package/dist/schema/json-schema.d.ts +6 -1
  414. package/dist/schema/json-schema.d.ts.map +1 -1
  415. package/dist/schema/json-schema.js +83 -2
  416. package/dist/schema/json-schema.js.map +1 -1
  417. package/dist/schema/markdown-field.d.ts +4 -0
  418. package/dist/schema/markdown-field.d.ts.map +1 -0
  419. package/dist/schema/markdown-field.js +20 -0
  420. package/dist/schema/markdown-field.js.map +1 -0
  421. package/dist/schema/markdown.d.ts +6 -0
  422. package/dist/schema/markdown.d.ts.map +1 -0
  423. package/dist/schema/markdown.js +27 -0
  424. package/dist/schema/markdown.js.map +1 -0
  425. package/dist/schema/reading.d.ts +86 -0
  426. package/dist/schema/reading.d.ts.map +1 -0
  427. package/dist/schema/reading.js +270 -0
  428. package/dist/schema/reading.js.map +1 -0
  429. package/dist/schema/repeat-field.d.ts +5 -0
  430. package/dist/schema/repeat-field.d.ts.map +1 -0
  431. package/dist/schema/repeat-field.js +20 -0
  432. package/dist/schema/repeat-field.js.map +1 -0
  433. package/dist/schema/schema.d.ts.map +1 -1
  434. package/dist/schema/schema.js +5 -1
  435. package/dist/schema/schema.js.map +1 -1
  436. package/dist/schema/to-json-schema.d.ts +14 -0
  437. package/dist/schema/to-json-schema.d.ts.map +1 -0
  438. package/dist/schema/to-json-schema.js +616 -0
  439. package/dist/schema/to-json-schema.js.map +1 -0
  440. package/dist/schema/typed-field-builders.d.ts +8 -0
  441. package/dist/schema/typed-field-builders.d.ts.map +1 -0
  442. package/dist/schema/typed-field-builders.js +30 -0
  443. package/dist/schema/typed-field-builders.js.map +1 -0
  444. package/dist/schema/typed-field-of.d.ts +4 -0
  445. package/dist/schema/typed-field-of.d.ts.map +1 -0
  446. package/dist/schema/typed-field-of.js +14 -0
  447. package/dist/schema/typed-field-of.js.map +1 -0
  448. package/dist/schema/typed-fields.d.ts +11 -0
  449. package/dist/schema/typed-fields.d.ts.map +1 -0
  450. package/dist/schema/typed-fields.js +16 -0
  451. package/dist/schema/typed-fields.js.map +1 -0
  452. package/dist/schema/types.d.ts +14 -0
  453. package/dist/schema/types.d.ts.map +1 -1
  454. package/dist/schema/value-words.d.ts +21 -0
  455. package/dist/schema/value-words.d.ts.map +1 -0
  456. package/dist/schema/value-words.js +32 -0
  457. package/dist/schema/value-words.js.map +1 -0
  458. package/dist/search.d.ts +91 -4
  459. package/dist/search.d.ts.map +1 -1
  460. package/dist/search.js +288 -53
  461. package/dist/search.js.map +1 -1
  462. package/dist/seat.d.ts +19 -0
  463. package/dist/seat.d.ts.map +1 -0
  464. package/dist/seat.js +19 -0
  465. package/dist/seat.js.map +1 -0
  466. package/dist/seen.d.ts +15 -33
  467. package/dist/seen.d.ts.map +1 -1
  468. package/dist/seen.js +44 -135
  469. package/dist/seen.js.map +1 -1
  470. package/dist/store.d.ts +46 -1
  471. package/dist/store.d.ts.map +1 -1
  472. package/dist/store.js +121 -22
  473. package/dist/store.js.map +1 -1
  474. package/dist/theme/types.d.ts +7 -1
  475. package/dist/theme/types.d.ts.map +1 -1
  476. package/dist/theme/types.js.map +1 -1
  477. package/dist/typed.d.ts +12 -3
  478. package/dist/typed.d.ts.map +1 -1
  479. package/dist/typed.js.map +1 -1
  480. package/dist/validate-graph.d.ts.map +1 -1
  481. package/dist/validate-graph.js +3 -10
  482. package/dist/validate-graph.js.map +1 -1
  483. package/dist/version.d.ts +1 -1
  484. package/dist/version.js +1 -1
  485. package/dist/views/types.d.ts +57 -8
  486. package/dist/views/types.d.ts.map +1 -1
  487. package/dist/views/types.js +22 -3
  488. package/dist/views/types.js.map +1 -1
  489. package/dist/village.d.ts +63 -0
  490. package/dist/village.d.ts.map +1 -0
  491. package/dist/village.js +143 -0
  492. package/dist/village.js.map +1 -0
  493. package/dist/watched.d.ts +12 -45
  494. package/dist/watched.d.ts.map +1 -1
  495. package/dist/watched.js +7 -119
  496. package/dist/watched.js.map +1 -1
  497. package/dist/words.d.ts +33 -0
  498. package/dist/words.d.ts.map +1 -0
  499. package/dist/words.js +36 -0
  500. package/dist/words.js.map +1 -0
  501. package/package.json +37 -2
package/README.md CHANGED
@@ -93,6 +93,12 @@ Everything a Graview app declares, and the checker that verifies it.
93
93
  (`readonly`, refused here with their `because`), links seeded from a
94
94
  version field, and transports for Google Calendar and for a tool server
95
95
  over MCP (`mcpClient`, `mcpDoor`, `doorClient`, `mcpRemote`).
96
+ - **A spreadsheet brought in** — `@graview/core/import`: `importRows(store,
97
+ kind, rows, mapping, { by })` reads each cell by its field's type, links a
98
+ cell to a record by its name, keeps every row that fits as one undoable
99
+ batch `via: "import"`, and says each refused row in words;
100
+ `previewImport` keeps nothing, `proposeMapping` offers a mapping from the
101
+ header row, and `parseCsv` reads a CSV or a paste (`docs/import.md`).
96
102
  - **The city** — `@graview/core/scene`: `sceneThumbnail` draws a document
97
103
  (or an app) as the Scene draws it from altitude — the same districts on
98
104
  the same map, in their hues — as one SVG string, with no DOM, for a host
@@ -106,6 +112,17 @@ Everything a Graview app declares, and the checker that verifies it.
106
112
  district on its block in its hue with one block on it, readable at 16
107
113
  pixels and about a kilobyte — a standalone SVG to serve as a favicon. A kind's
108
114
  figures are `@graview/core/figures`.
115
+ - **What is said, matched and listed after a page draws** (FR-179) —
116
+ `@graview/core/search`: the one matcher (`search`, `actsOn`,
117
+ `touchWeights`, `parseQuery`, `matchNode`), fetched when somebody first
118
+ searches. `@graview/core/words`: a record read as a person reads it
119
+ (`readableFields`, `pageSections`, `isLongText`, `describeNode`,
120
+ `tellApart`), what an argument asks for (`argShape`, `describeArg`), an
121
+ argument and a refusal in the record's words (`argumentWords`,
122
+ `failureWords`) and `viaSaid`. `@graview/core/seat`: an act's answer as
123
+ its seat may see it (`answerSeenBy`), every place an app has (`placesOf`,
124
+ `placesFrom`) and the order things are made in (`beginning`). Judging the
125
+ arrangement (`arrangementFindings`) is `@graview/core/check`'s.
109
126
  - **What a page loads first** — `@graview/core` and `@graview/core/document`
110
127
  hold only what a page draws with. The checker, the city, the figures and
111
128
  the block resolver are on the subpaths above because a bundler places a
@@ -0,0 +1,21 @@
1
+ import type { AmountMark } from "./schema/amount-mark.js";
2
+ /** What a box for an amount shows: the symbol before it, the unit after it, and what the empty box suggests. */
3
+ export interface AmountBox {
4
+ readonly prefix?: string;
5
+ readonly suffix?: string;
6
+ readonly placeholder: string;
7
+ /** The amount in words, for a label a screen reader reads: "in US dollars", "as a percent". */
8
+ readonly hint: string;
9
+ }
10
+ /** The box an amount is typed into: "$" before "1,250.00", "%" after "15", "min" after "90". */
11
+ export declare function amountBox(mark: AmountMark): AmountBox;
12
+ /** The text a held amount is edited as: "1,250.50" for $1,250.50, "15" for 15%, "1 h 30 min" for ninety minutes. */
13
+ export declare function amountInBox(value: number | undefined, mark: AmountMark): string;
14
+ /**
15
+ * THE NUMBER A PERSON'S TEXT MEANS for an amount: "$1,250.50" is 1250.5;
16
+ * "15%" of a percent is 0.15.
17
+ * Its currency's symbol or code, spaces and group separators are let be;
18
+ * `undefined` where it is no number at all, for the form to say so.
19
+ */
20
+ export declare function readAmount(text: string, mark: AmountMark | undefined): number | undefined;
21
+ //# sourceMappingURL=amount-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amount-input.d.ts","sourceRoot":"","sources":["../src/amount-input.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAY1D,gHAAgH;AAChH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,+FAA+F;IAC/F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAmBD,gGAAgG;AAChG,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,CASrD;AAED,oHAAoH;AACpH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAK/E;AAyBD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAczF"}
@@ -0,0 +1,96 @@
1
+ import { localeFor, numberAsRead } from "./days.js";
2
+ const currencyParts = (mark) => {
3
+ if (!mark.currency)
4
+ return { before: true };
5
+ try {
6
+ const locale = localeFor(mark.locale);
7
+ const parts = new Intl.NumberFormat(locale, { style: "currency", currency: mark.currency }).formatToParts(1);
8
+ const at = parts.findIndex((part) => part.type === "currency");
9
+ const integer = parts.findIndex((part) => part.type === "integer");
10
+ let name;
11
+ try {
12
+ name = new Intl.DisplayNames([locale], { type: "currency" }).of(mark.currency);
13
+ }
14
+ catch { }
15
+ return { ...(at >= 0 ? { symbol: parts[at].value } : {}), before: at < integer, ...(name ? { name } : {}) };
16
+ }
17
+ catch {
18
+ return { symbol: mark.currency, before: true };
19
+ }
20
+ };
21
+ /** The box an amount is typed into: "$" before "1,250.00", "%" after "15", "min" after "90". */
22
+ export function amountBox(mark) {
23
+ const locale = mark.locale;
24
+ if (mark.format === "money") {
25
+ const { symbol, before, name } = currencyParts(mark);
26
+ const placeholder = numberAsRead(1250, locale, { minimumFractionDigits: 2, maximumFractionDigits: 2 });
27
+ return { ...(symbol ? (before ? { prefix: symbol } : { suffix: symbol }) : {}), placeholder, hint: name ? `in ${name}` : mark.currency ? `in ${mark.currency}` : "an amount of money" };
28
+ }
29
+ if (mark.format === "percent")
30
+ return { suffix: "%", placeholder: numberAsRead(15, locale), hint: "as a percent" };
31
+ return { ...(mark.unit ? { suffix: mark.unit } : {}), placeholder: "", hint: mark.unit ? `in ${mark.unit}` : "a number" };
32
+ }
33
+ /** The text a held amount is edited as: "1,250.50" for $1,250.50, "15" for 15%, "1 h 30 min" for ninety minutes. */
34
+ export function amountInBox(value, mark) {
35
+ if (value === undefined || !Number.isFinite(value))
36
+ return "";
37
+ if (mark.format === "money")
38
+ return numberAsRead(value, mark.locale, Number.isInteger(value) ? { maximumFractionDigits: 0 } : { minimumFractionDigits: 2, maximumFractionDigits: 2 });
39
+ if (mark.format === "percent")
40
+ return numberAsRead(value * 100, mark.locale, { maximumFractionDigits: 4 });
41
+ return numberAsRead(value, mark.locale, { maximumFractionDigits: 6 });
42
+ }
43
+ /** The separators a locale writes numbers with: "," and "." in en-US, "." and "," in de-DE. */
44
+ function separators(locale) {
45
+ try {
46
+ const parts = new Intl.NumberFormat(localeFor(locale)).formatToParts(12345.6);
47
+ return { group: parts.find((part) => part.type === "group")?.value ?? ",", decimal: parts.find((part) => part.type === "decimal")?.value ?? "." };
48
+ }
49
+ catch {
50
+ return { group: ",", decimal: "." };
51
+ }
52
+ }
53
+ /** A plain number in a person's writing, in a locale: "1,250.50", "1.250,50", "1 250,5", "-3". */
54
+ function plainNumber(text, locale) {
55
+ const { group, decimal } = separators(locale);
56
+ let t = text.replace(/[\s  ']/g, "").replace(/[−–]/g, "-");
57
+ // A decimal point where the locale writes a comma, typed as most keyboards do ("12.5" in de-DE), is read as a point.
58
+ if (decimal !== "." && !t.includes(decimal) && /^-?\d+\.\d{1,2}$/.test(t))
59
+ return Number(t);
60
+ if (group)
61
+ t = t.split(group).join("");
62
+ if (decimal !== ".")
63
+ t = t.replace(decimal, ".");
64
+ if (!/^-?(\d+\.?\d*|\.\d+)$/.test(t))
65
+ return undefined;
66
+ const n = Number(t);
67
+ return Number.isFinite(n) ? n : undefined;
68
+ }
69
+ /**
70
+ * THE NUMBER A PERSON'S TEXT MEANS for an amount: "$1,250.50" is 1250.5;
71
+ * "15%" of a percent is 0.15.
72
+ * Its currency's symbol or code, spaces and group separators are let be;
73
+ * `undefined` where it is no number at all, for the form to say so.
74
+ */
75
+ export function readAmount(text, mark) {
76
+ const raw = text.trim();
77
+ if (raw === "")
78
+ return undefined;
79
+ const symbol = mark?.format === "money" && mark.currency ? currencyParts(mark).symbol : undefined;
80
+ let t = raw;
81
+ if (symbol)
82
+ t = t.split(symbol).join("");
83
+ if (mark?.currency)
84
+ t = t.replace(new RegExp(mark.currency, "gi"), "");
85
+ t = t.replace(/^[$€£¥₹]|[$€£¥₹]$/g, "");
86
+ const percent = /%\s*$/.test(t);
87
+ if (percent)
88
+ t = t.replace(/%\s*$/, "");
89
+ if (mark?.unit && mark.format !== "money")
90
+ t = t.replace(new RegExp(`\\s*${mark.unit.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\s*$`), "");
91
+ const n = plainNumber(t, mark?.locale);
92
+ if (n === undefined)
93
+ return undefined;
94
+ return mark?.format === "percent" ? n / 100 : n;
95
+ }
96
+ //# sourceMappingURL=amount-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amount-input.js","sourceRoot":"","sources":["../src/amount-input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { GraphDiff } from "./graph/diff.js";
2
+ import type { Primitive } from "./graph/primitives.js";
3
+ import type { GraphNodeBase } from "./graph/types.js";
4
+ import type { InvariantDefinition, Violation } from "./invariants/types.js";
5
+ import type { Operation } from "./ops/types.js";
6
+ import type { Principal } from "./permissions/types.js";
7
+ import type { AnySchema } from "./schema/schema.js";
8
+ import { type Judged } from "./seen.js";
9
+ import type { Store } from "./store.js";
10
+ /**
11
+ * A CHANGE'S ANSWER AS ONE SEAT MAY BE TOLD IT (FR-55) — the diff, the
12
+ * primitives, the ops and the rules it would break or mend of a preview,
13
+ * an apply or an undo, for a surface that hands a seat what its own act
14
+ * did: an act may touch what its own seat may not see. Records and edges
15
+ * it is not served go, a field naming one it may not see is cleared as
16
+ * the view clears it, the ops are redacted as its log is, and a sentence
17
+ * that names what it may not see says only that a change it cannot see
18
+ * happened. With nothing kept from the seat, the answer as it is.
19
+ */
20
+ export declare function answerSeenBy<A extends {
21
+ readonly diff?: GraphDiff<GraphNodeBase>;
22
+ readonly primitives?: readonly unknown[];
23
+ readonly reads?: readonly string[];
24
+ readonly writes?: readonly string[];
25
+ readonly intent?: string;
26
+ readonly introduces?: readonly Violation[];
27
+ readonly resolves?: readonly Violation[];
28
+ readonly violationsAfter?: readonly Violation[];
29
+ readonly ops?: readonly Operation[];
30
+ }>(store: Judged & {
31
+ allInvariants(): readonly InvariantDefinition[];
32
+ }, principal: Principal, answer: A): A;
33
+ /** A change's problems as a seat judges them over its own world: `@graview/core/lines` hands it over as it loads. */
34
+ type SeatJudged = (store: Store<AnySchema>, seat: Store<AnySchema>, made: boolean, served: readonly Primitive[]) => Record<"introduces" | "resolves" | "violationsAfter", Violation[]>;
35
+ /** Hands `answerSeenBy` what judges a change's problems over a seat's world. */
36
+ export declare const answersJudgedWith: (judge: SeatJudged) => void;
37
+ export {};
38
+ //# sourceMappingURL=answer-seen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"answer-seen.d.ts","sourceRoot":"","sources":["../src/answer-seen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAA2B,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAOhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAA+B,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAQxC;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,CAAC,SAAS;IACR,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IACzC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IACzC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IAC3C,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IACzC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IAChD,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;CACrC,EACD,KAAK,EAAE,MAAM,GAAG;IAAE,aAAa,IAAI,SAAS,mBAAmB,EAAE,CAAA;CAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAwFzG;AAED,qHAAqH;AACrH,KAAK,UAAU,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,SAAS,EAAE,KAAK,MAAM,CAAC,YAAY,GAAG,UAAU,GAAG,iBAAiB,EAAE,SAAS,EAAE,CAAC,CAAC;AAGvL,gFAAgF;AAChF,eAAO,MAAM,iBAAiB,GAAI,OAAO,UAAU,KAAG,IAAqC,CAAC"}
@@ -0,0 +1,122 @@
1
+ import { servePrimitives } from "./ops/served.js";
2
+ import { writersOf } from "./ops/writers.js";
3
+ import { withoutKeptFields } from "./ops/kept-fields.js";
4
+ import { namesUnseen, redact, WITHHELD_INTENT } from "./ops/withheld.js";
5
+ import { actingAs } from "./permissions/policy.js";
6
+ import { recordsOf } from "./permissions/sight.js";
7
+ import { hidesFrom, seatLens, seenBy } from "./seen.js";
8
+ /*
9
+ * A file of its own (FR-179): what a seat's tools hand back after an act is
10
+ * fetched with those tools (`@graview/core/seat`), and a page that only
11
+ * draws what its seat sees (`./seen.ts`) carries none of it up front.
12
+ */
13
+ /**
14
+ * A CHANGE'S ANSWER AS ONE SEAT MAY BE TOLD IT (FR-55) — the diff, the
15
+ * primitives, the ops and the rules it would break or mend of a preview,
16
+ * an apply or an undo, for a surface that hands a seat what its own act
17
+ * did: an act may touch what its own seat may not see. Records and edges
18
+ * it is not served go, a field naming one it may not see is cleared as
19
+ * the view clears it, the ops are redacted as its log is, and a sentence
20
+ * that names what it may not see says only that a change it cannot see
21
+ * happened. With nothing kept from the seat, the answer as it is.
22
+ */
23
+ export function answerSeenBy(store, principal, answer) {
24
+ if (!hidesFrom(store, principal))
25
+ return answer;
26
+ const lens = seatLens(store, principal);
27
+ const has = (id) => store.graph.getNode(id) !== undefined || recordsOf(store.log).kindOf(id) !== undefined;
28
+ const out = { ...answer };
29
+ if (answer.diff) {
30
+ const diff = answer.diff;
31
+ /*
32
+ * EACH SIDE AS WHO WROTE IT THEN (FR-55): the seat's own words are served
33
+ * as written, and the words a change replaced were somebody's before it.
34
+ * Before is judged as of the first op the answer made (now, for a
35
+ * preview); after as of now — and, for a preview, what it would write
36
+ * is the caller's.
37
+ */
38
+ const writers = writersOf(store.log);
39
+ const end = store.log.length ?? store.log.all().length;
40
+ const first = answer.ops?.[0]?.seq ?? end;
41
+ const actor = actingAs(principal).id;
42
+ const wroteAt = (id, seq) => (field) => writers.writerAt(id, field, seq);
43
+ const node = (one, writer) => (lens.shows(one.id) ? lens.servedWith(one, writer) : undefined);
44
+ const nodes = (all, writer) => all.flatMap((one) => node(one, writer(one.id)) ?? []);
45
+ const edge = (one) => lens.shows(one.from) && lens.shows(one.to) && !namesUnseen(one, lens.sees);
46
+ const madeBy = (id, fields) => answer.ops ? wroteAt(id, end) : (field) => (fields === undefined || fields.includes(field) ? actor : writers.writerAt(id, field, end));
47
+ const changed = diff.changedNodes.flatMap((change) => {
48
+ const before = node(change.before, wroteAt(change.before.id, first));
49
+ const after = node(change.after, madeBy(change.after.id, change.fields));
50
+ return before && after ? [{ before, after, fields: change.fields.filter((field) => field in before || field in after) }] : [];
51
+ });
52
+ /*
53
+ * A WRITE THAT CHANGED NOTHING BUT WHOSE WORDS THEY ARE. A seat that
54
+ * wrote the value a field already held, naming what it may not see, made
55
+ * those words its own (FR-55): the store's graph did not move, and the
56
+ * seat's view of the record did. Said as a change, so the answer reads
57
+ * as it would had the field held anything else.
58
+ */
59
+ const listed = new Set(diff.changedNodes.map((change) => change.after.id));
60
+ const patched = new Map();
61
+ for (const primitive of (answer.ops?.flatMap((op) => op.primitives) ?? answer.primitives ?? [])) {
62
+ if (primitive.op !== "patch-node" || listed.has(primitive.id))
63
+ continue;
64
+ patched.set(primitive.id, [...(patched.get(primitive.id) ?? []), ...Object.keys(primitive.after)]);
65
+ }
66
+ const kept = () => [...patched].flatMap(([id, fields]) => {
67
+ const held = store.graph.getNode(id);
68
+ if (!held)
69
+ return [];
70
+ const before = node(held, wroteAt(id, first));
71
+ const after = node(held, madeBy(id, fields));
72
+ return before && after && JSON.stringify(before) !== JSON.stringify(after) ? [{ before, after, fields }] : [];
73
+ });
74
+ const madeTheirs = kept();
75
+ out["diff"] = {
76
+ addedNodes: nodes(diff.addedNodes, (id) => madeBy(id)),
77
+ removedNodes: nodes(diff.removedNodes, (id) => wroteAt(id, first)),
78
+ changedNodes: [...changed, ...madeTheirs],
79
+ addedEdges: diff.addedEdges.filter(edge),
80
+ removedEdges: diff.removedEdges.filter(edge),
81
+ touched: [...diff.touched.filter(lens.shows), ...[...patched.keys()].filter((id) => lens.shows(id) && !diff.touched.includes(id))],
82
+ };
83
+ }
84
+ if (answer.ops)
85
+ out["ops"] = redact(answer.ops, lens);
86
+ if (answer.primitives) {
87
+ // An apply's primitives are its ops'; a preview's are not in the log yet, and are judged from the graph as it stands.
88
+ const ops = out["ops"];
89
+ out["primitives"] = ops
90
+ ? ops.flatMap((op) => op.primitives)
91
+ : lens.timeline
92
+ ? servePrimitives(answer.primitives, lens.timeline, { served: (node, writer) => lens.servedWith(node, writer), edgeClean: (edge) => !namesUnseen(edge, lens.sees), sees: lens.sees }, actingAs(principal).id)
93
+ : redact([{ id: "", seq: 0, batch: "", author: { kind: "system" }, intent: "", mutation: null, primitives: answer.primitives, inverse: [], reads: [], writes: [], at: "" }], lens)[0].primitives;
94
+ }
95
+ // What a change wrote of a field the seat may not see is no part of what it is told (Roadmap f-field-sight).
96
+ if (lens.kept && out["primitives"])
97
+ out["primitives"] = withoutKeptFields(out["primitives"], lens);
98
+ // Records the seat is served, and no id that names nothing: a hidden record and an absent one are left out alike (FR-55).
99
+ if (answer.reads)
100
+ out["reads"] = answer.reads.filter((id) => lens.shows(id) && has(id));
101
+ if (answer.writes)
102
+ out["writes"] = answer.writes.filter(lens.shows);
103
+ if (answer.intent !== undefined && namesUnseen(answer.intent, lens.sees))
104
+ out["intent"] = WITHHELD_INTENT;
105
+ /*
106
+ * THE RULES IT BROKE OR MENDED, AS THE SEAT JUDGES THEM (FR-55). Judged
107
+ * over the whole graph, whether a rule that counts, sweeps or walks was
108
+ * broken or mended depends on records this seat may not see, and its
109
+ * title alone says so. So they are judged again over the seat's own
110
+ * world: what it is served now, and that world with the change it is
111
+ * served taken back — or, for a preview, put on. The judging is
112
+ * `@graview/core/lines`', which a seat's tools load before they answer;
113
+ * without it, nothing judged over the whole graph is said.
114
+ */
115
+ if (answer.violationsAfter)
116
+ Object.assign(out, judgedForASeat ? judgedForASeat(store, seenBy(store, principal), !!answer.ops, (out["primitives"] ?? [])) : { introduces: [], resolves: [], violationsAfter: [] });
117
+ return out;
118
+ }
119
+ let judgedForASeat;
120
+ /** Hands `answerSeenBy` what judges a change's problems over a seat's world. */
121
+ export const answersJudgedWith = (judge) => void (judgedForASeat = judge);
122
+ //# sourceMappingURL=answer-seen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"answer-seen.js","sourceRoot":"","sources":["../src/answer-seen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { GraviewApp } from "./app.js";
2
+ import { type PlaceFinding, type ShippedLensName } from "./places.js";
3
+ import type { AnySchema } from "./schema/schema.js";
4
+ import { type PagesArrangement, type Place } from "./views/types.js";
5
+ /** What the arrangement asks that the declaration cannot honor: kinds and places that do not exist. */
6
+ export declare function arrangementFindings<S extends AnySchema>(app: GraviewApp<S>, places?: readonly Place[]): readonly PlaceFinding[];
7
+ /**
8
+ * ONE OF AN APP'S NAMED PLACES, as a host lists them (FR-79, FR-80): what it
9
+ * is called, what it is over, and its address on each face — `address` on
10
+ * the routed face, `stop` in the scene's fragment.
11
+ */
12
+ export interface AppPlace {
13
+ /** The address word: a place's `as`, a kind's plural, or `home`. */
14
+ readonly slug: string;
15
+ readonly title: string;
16
+ /** The kind it is over; null for the home. A picture over several kinds is listed once, under the first. */
17
+ readonly kind: string | null;
18
+ /** Every kind a picture over several is over — the timetable of talks and workshops — each one's district going in to it. */
19
+ readonly over?: readonly string[];
20
+ readonly cardinality: "many";
21
+ /** Its path on the routed face: `/`, `/<plural>`, `/places/<as>`. */
22
+ readonly address: string;
23
+ /** Its stop in the scene: `#view=<as>`, `#focus=aggregate:<kind>`, or `#`. */
24
+ readonly stop: string;
25
+ /** Which shipped lens draws it, when a declared lens does. */
26
+ readonly lens?: ShippedLensName;
27
+ /** Left off the home by `pages.hide`; still reachable at its address. */
28
+ readonly hidden?: boolean;
29
+ /** Where the app opens (`pages.first`). */
30
+ readonly first?: boolean;
31
+ }
32
+ /**
33
+ * EVERY PLACE AN APP HAS, by name: the home, each declared lens that draws
34
+ * (and each place its registered views name, when the app carries them),
35
+ * and each kind — in the arrangement's order. What Graview Cloud's
36
+ * connector lists when an app is opened, and what a chat can send somebody
37
+ * to.
38
+ */
39
+ export declare function placesOf<S extends AnySchema>(app: GraviewApp<S>): readonly AppPlace[];
40
+ /**
41
+ * THE SAME LIST FROM WHAT A FACE HOLDS: the schema, the places its view
42
+ * registry names, and the arrangement — what `placesOf` makes from the
43
+ * declaration, for a seat handed a store and its views rather than the app.
44
+ * One builder, so the two can never name, address or order a place
45
+ * differently.
46
+ */
47
+ export declare function placesFrom(schema: AnySchema, lensPlaces: readonly Place[], options?: {
48
+ readonly pages?: PagesArrangement;
49
+ readonly lenses?: readonly {
50
+ readonly as: string;
51
+ readonly kinds: readonly string[];
52
+ readonly lens: ShippedLensName;
53
+ }[];
54
+ readonly home?: boolean;
55
+ }): readonly AppPlace[];
56
+ //# sourceMappingURL=app-places.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-places.d.ts","sourceRoot":"","sources":["../src/app-places.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAA8G,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAClL,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAqD,KAAK,gBAAgB,EAAE,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAYxH,uGAAuG;AACvG,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,GAAE,SAAS,KAAK,EAAwB,GAAG,SAAS,YAAY,EAAE,CAiEpJ;AAeD;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,4GAA4G;IAC5G,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,6HAA6H;IAC7H,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC;IAChC,yEAAyE;IACzE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,QAAQ,EAAE,CAErF;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,SAAS,KAAK,EAAE,EAC5B,OAAO,GAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;KAAE,EAAE,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GACpM,SAAS,QAAQ,EAAE,CA0CrB"}
@@ -0,0 +1,153 @@
1
+ import { declaredLenses, MOST_STANDING, openingOf, orderKinds, OVERVIEW_PATH, OVERVIEW_SLUG, pagesTitle, sceneTitle } from "./places.js";
2
+ import { pluralLabel } from "./schema/define-node.js";
3
+ import { kindPath, onePerPicture, placePath, sharesItsName } from "./views/types.js";
4
+ /*
5
+ * EVERY PLACE AN APP HAS, AND WHAT ITS ARRANGEMENT ASKS THAT IT CANNOT
6
+ * HONOR. A file of its own (FR-179): the seat lists the places an ask can
7
+ * go to, a host lists them when an app is opened and the checker judges
8
+ * the arrangement — none of it before a page draws its bar, which reads
9
+ * the places that stand from `./places.ts` (`@graview/core/seat`,
10
+ * `@graview/core/check`).
11
+ */
12
+ /** What the arrangement asks that the declaration cannot honor: kinds and places that do not exist. */
13
+ export function arrangementFindings(app, places = placesOfLenses(app)) {
14
+ const pages = app.pages;
15
+ const findings = [];
16
+ const taken = places.find((place) => place.as === OVERVIEW_SLUG);
17
+ if (taken) {
18
+ findings.push({
19
+ severity: "warning",
20
+ code: "pages-overview-taken",
21
+ path: "pages",
22
+ message: `The place "${taken.title}" has the address the scene keeps (${OVERVIEW_PATH}), so the bar's "${sceneTitle(pages)}" and it cannot both be reached there.`,
23
+ fix: `Give "${taken.title}" another title (or another "as"): the scene keeps ${OVERVIEW_PATH} whatever the declaration calls it.`,
24
+ });
25
+ }
26
+ if (!pages)
27
+ return findings;
28
+ if (sceneTitle(pages).toLowerCase() === pagesTitle(pages).toLowerCase()) {
29
+ findings.push({
30
+ severity: "warning",
31
+ code: "pages-faces-alike",
32
+ path: "pages",
33
+ message: `The bar's switch would call both the scene and the pages "${sceneTitle(pages)}", so a reader could not tell its two buttons apart.`,
34
+ fix: `Give pages.scene and pages.pages two different words (unsaid, they are "Scene" and "Pages").`,
35
+ });
36
+ }
37
+ const kinds = app.schema.kinds;
38
+ for (const part of ["order", "hide"]) {
39
+ (pages[part] ?? []).forEach((kind, index) => {
40
+ if (!kinds.includes(kind)) {
41
+ findings.push({ severity: "warning", code: "pages-kind-unknown", path: `pages.${part}.${index}`, message: `pages.${part} names "${kind}", which is not a kind, so it is passed over.`, fix: `Use one of: ${kinds.join(", ")}.` });
42
+ }
43
+ });
44
+ }
45
+ (pages.primary ?? []).forEach((word, index) => {
46
+ const opening = openingOf(word, app.schema, places);
47
+ if (opening === undefined || opening.to === "home") {
48
+ findings.push({
49
+ severity: "warning",
50
+ code: "pages-primary-unknown",
51
+ path: `pages.primary.${index}`,
52
+ message: opening?.to === "home"
53
+ ? `pages.primary names "${word}", but Home always stands on the bar, so it is passed over.`
54
+ : `pages.primary names "${word}", which is not a kind or a place, so it is passed over.`,
55
+ fix: `Name a kind (${kinds.join(", ")}) or a place (${places.map((place) => `"${place.title}"`).join(", ") || "none is declared"}).`,
56
+ });
57
+ }
58
+ });
59
+ if ((pages.primary?.length ?? 0) > MOST_STANDING - 1) {
60
+ findings.push({
61
+ severity: "warning",
62
+ code: "pages-primary-many",
63
+ path: "pages.primary",
64
+ message: `pages.primary names ${pages.primary.length} places, and at most ${MOST_STANDING - 1} stand beside Home: the rest fold into "More" anyway.`,
65
+ fix: `Name the ${MOST_STANDING - 1} a person reaches for most.`,
66
+ });
67
+ }
68
+ if (pages.first !== undefined && openingOf(pages.first, app.schema, places) === undefined) {
69
+ findings.push({
70
+ severity: "warning",
71
+ code: "pages-first-unknown",
72
+ path: "pages.first",
73
+ message: `pages.first is "${pages.first}", which is not a place, a kind or "home", so the app opens at its home.`,
74
+ fix: `Name a place (${places.map((place) => `"${place.title}"`).join(", ") || "none is declared"}), a kind, or "home".`,
75
+ });
76
+ }
77
+ return findings;
78
+ }
79
+ /** The places a declaration's lenses make, with any its registered views name. */
80
+ function placesOfLenses(app) {
81
+ const out = [];
82
+ for (const lens of declaredLenses(app).drawn) {
83
+ // One picture over several kinds is a place on each, and says so (`over`): every list names it once.
84
+ for (const kind of lens.kinds)
85
+ out.push({ kind, title: lens.title, as: lens.as, ...(lens.across ? { across: lens.across } : {}), ...(lens.kinds.length > 1 ? { over: lens.kinds } : {}) });
86
+ }
87
+ for (const place of app.views?.places?.() ?? []) {
88
+ if (!out.some((held) => held.kind === place.kind && held.as === place.as))
89
+ out.push(place);
90
+ }
91
+ return out;
92
+ }
93
+ /**
94
+ * EVERY PLACE AN APP HAS, by name: the home, each declared lens that draws
95
+ * (and each place its registered views name, when the app carries them),
96
+ * and each kind — in the arrangement's order. What Graview Cloud's
97
+ * connector lists when an app is opened, and what a chat can send somebody
98
+ * to.
99
+ */
100
+ export function placesOf(app) {
101
+ return placesFrom(app.schema, placesOfLenses(app), { ...(app.pages ? { pages: app.pages } : {}), lenses: declaredLenses(app).drawn, home: (app.home?.length ?? 0) > 0 });
102
+ }
103
+ /**
104
+ * THE SAME LIST FROM WHAT A FACE HOLDS: the schema, the places its view
105
+ * registry names, and the arrangement — what `placesOf` makes from the
106
+ * declaration, for a seat handed a store and its views rather than the app.
107
+ * One builder, so the two can never name, address or order a place
108
+ * differently.
109
+ */
110
+ export function placesFrom(schema, lensPlaces, options = {}) {
111
+ const { pages } = options;
112
+ const kindsDeclared = schema.kinds;
113
+ const places = lensPlaces.filter((place) => kindsDeclared.includes(place.kind));
114
+ const opening = openingOf(pages?.first, schema, places);
115
+ const hidden = new Set(pages?.hide ?? []);
116
+ const kinds = orderKinds(kindsDeclared, pages?.order);
117
+ const out = [
118
+ { slug: "home", title: "Home", kind: null, cardinality: "many", address: "/", stop: "#", ...(opening?.to === "home" || (opening === undefined && options.home) ? { first: true } : {}) },
119
+ // The scene, a place like the others (FR-132): its stop rides on its address.
120
+ { slug: OVERVIEW_SLUG, title: sceneTitle(pages), kind: null, cardinality: "many", address: OVERVIEW_PATH, stop: "#" },
121
+ ];
122
+ // A picture over several kinds once, under the first of them in the arrangement's order.
123
+ const byKind = onePerPicture([...places].sort((a, b) => kinds.indexOf(a.kind) - kinds.indexOf(b.kind)));
124
+ for (const place of byKind) {
125
+ const lens = options.lenses?.find((one) => one.as === place.as && one.kinds.includes(place.kind));
126
+ const shared = sharesItsName(place, places);
127
+ out.push({
128
+ slug: place.as,
129
+ title: place.title,
130
+ kind: place.kind,
131
+ ...(place.over ? { over: place.over.filter((kind) => kindsDeclared.includes(kind)) } : {}),
132
+ cardinality: "many",
133
+ address: placePath(place.as, shared ? kindPath(schema, place.kind).slice(1) : undefined),
134
+ stop: shared ? `#focus=aggregate:${place.kind}&in.view=${encodeURIComponent(place.as)}` : `#view=${encodeURIComponent(place.as)}`,
135
+ ...(lens ? { lens: lens.lens } : {}),
136
+ ...(opening?.to === "place" && opening.place.as === place.as && (opening.place.kind === place.kind || place.over?.includes(opening.place.kind)) ? { first: true } : {}),
137
+ });
138
+ }
139
+ for (const kind of kinds) {
140
+ out.push({
141
+ slug: kindPath(schema, kind).slice(1),
142
+ title: pluralLabel(schema, kind),
143
+ kind,
144
+ cardinality: "many",
145
+ address: kindPath(schema, kind),
146
+ stop: `#focus=aggregate:${kind}`,
147
+ ...(hidden.has(kind) ? { hidden: true } : {}),
148
+ ...(opening?.to === "kind" && opening.kind === kind ? { first: true } : {}),
149
+ });
150
+ }
151
+ return out;
152
+ }
153
+ //# sourceMappingURL=app-places.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-places.js","sourceRoot":"","sources":["../src/app-places.ts"],"names":[],"mappings":"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"}
package/dist/arrange.d.ts CHANGED
@@ -10,7 +10,7 @@
10
10
  * arranging. The types stay on `@graview/core`, where a declaration names
11
11
  * them.
12
12
  */
13
- export { arrangeable, asksForThePast, conditionHolds, edgesOf, NO_ARRANGEMENT, parseArrangement } from "./arrangement.js";
14
- export { admitArrangement, arrange, arrangeAllows, bucketStart, formatArrangement, matches } from "./arranging.js";
13
+ export { arrangeable, asksForThePast, conditionHolds, edgesOf, NO_ARRANGEMENT, parseArrangement, throughEdges } from "./arrangement.js";
14
+ export { admitArrangement, arrange, arrangeAllows, bucketStart, formatArrangement, matches, } from "./arranging.js";
15
15
  export type { Arrangeable, ArrangeContext, Arranged, ArrangeGraph, ArrangedGroup, Arrangement, ArrangementWords, ArrangeNode, ArrangeOffer, ArrangeOption, Condition, DateBucket, Grouping, OfferType, Sort, SortDirection, } from "./arrangement.js";
16
16
  //# sourceMappingURL=arrange.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"arrange.d.ts","sourceRoot":"","sources":["../src/arrange.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC1H,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACnH,YAAY,EACV,WAAW,EACX,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,SAAS,EACT,UAAU,EACV,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,aAAa,GACd,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"arrange.d.ts","sourceRoot":"","sources":["../src/arrange.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACxI,OAAO,EACL,gBAAgB,EAChB,OAAO,EACP,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,OAAO,GACR,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,WAAW,EACX,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,SAAS,EACT,UAAU,EACV,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,aAAa,GACd,MAAM,kBAAkB,CAAC"}
package/dist/arrange.js CHANGED
@@ -10,6 +10,6 @@
10
10
  * arranging. The types stay on `@graview/core`, where a declaration names
11
11
  * them.
12
12
  */
13
- export { arrangeable, asksForThePast, conditionHolds, edgesOf, NO_ARRANGEMENT, parseArrangement } from "./arrangement.js";
14
- export { admitArrangement, arrange, arrangeAllows, bucketStart, formatArrangement, matches } from "./arranging.js";
13
+ export { arrangeable, asksForThePast, conditionHolds, edgesOf, NO_ARRANGEMENT, parseArrangement, throughEdges } from "./arrangement.js";
14
+ export { admitArrangement, arrange, arrangeAllows, bucketStart, formatArrangement, matches, } from "./arranging.js";
15
15
  //# sourceMappingURL=arrange.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"arrange.js","sourceRoot":"","sources":["../src/arrange.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC1H,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"arrange.js","sourceRoot":"","sources":["../src/arrange.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACxI,OAAO,EACL,gBAAgB,EAChB,OAAO,EACP,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,OAAO,GACR,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Arrangement, ArrangementWords } from "./arrangement.js";
2
+ export declare function parseArrangement(words: ArrangementWords): Arrangement;
3
+ //# sourceMappingURL=arrangement-words.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrangement-words.d.ts","sourceRoot":"","sources":["../src/arrangement-words.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAyC,MAAM,kBAAkB,CAAC;AAqB7G,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,WAAW,CAwBrE"}