@graview/core 0.1.14 → 0.1.16

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 (238) hide show
  1. package/README.md +27 -8
  2. package/dist/app.d.ts +8 -8
  3. package/dist/app.d.ts.map +1 -1
  4. package/dist/arrangement.d.ts +2 -2
  5. package/dist/arrangement.d.ts.map +1 -1
  6. package/dist/arrangement.js +5 -5
  7. package/dist/arranging.js +3 -3
  8. package/dist/capabilities.js +1 -1
  9. package/dist/capabilities.js.map +1 -1
  10. package/dist/city.d.ts +5 -5
  11. package/dist/city.js +3 -3
  12. package/dist/cli/check/beginnings.js +2 -2
  13. package/dist/cli/check/brand.d.ts.map +1 -1
  14. package/dist/cli/check/brand.js +15 -9
  15. package/dist/cli/check/brand.js.map +1 -1
  16. package/dist/cli/check/city.js +1 -1
  17. package/dist/cli/check/context.js +1 -1
  18. package/dist/cli/check/hidden-reads.js +1 -1
  19. package/dist/cli/check/hidden-reads.js.map +1 -1
  20. package/dist/cli/check/relations.js +2 -2
  21. package/dist/cli/check/relations.js.map +1 -1
  22. package/dist/cli/check/settings.js +8 -8
  23. package/dist/cli/check/settings.js.map +1 -1
  24. package/dist/cli/check/views.d.ts +1 -1
  25. package/dist/cli/check/views.js +1 -1
  26. package/dist/cli/create.d.ts +1 -1
  27. package/dist/cli/create.js +5 -5
  28. package/dist/cli/describe.d.ts +1 -1
  29. package/dist/cli/describe.js +2 -2
  30. package/dist/cli/describe.js.map +1 -1
  31. package/dist/cli/index.d.ts +1 -1
  32. package/dist/columns.d.ts +1 -1
  33. package/dist/columns.js +1 -1
  34. package/dist/compiled.d.ts +19 -0
  35. package/dist/compiled.d.ts.map +1 -0
  36. package/dist/compiled.js +60 -0
  37. package/dist/compiled.js.map +1 -0
  38. package/dist/conformance/fixtures.d.ts.map +1 -1
  39. package/dist/conformance/fixtures.js +22 -0
  40. package/dist/conformance/fixtures.js.map +1 -1
  41. package/dist/describe.d.ts +1 -1
  42. package/dist/describe.d.ts.map +1 -1
  43. package/dist/document/blocks.d.ts.map +1 -1
  44. package/dist/document/blocks.js +2 -1
  45. package/dist/document/blocks.js.map +1 -1
  46. package/dist/document/brand-check.d.ts +10 -0
  47. package/dist/document/brand-check.d.ts.map +1 -0
  48. package/dist/document/brand-check.js +33 -0
  49. package/dist/document/brand-check.js.map +1 -0
  50. package/dist/document/brand.d.ts +10 -0
  51. package/dist/document/brand.d.ts.map +1 -0
  52. package/dist/document/brand.js +49 -0
  53. package/dist/document/brand.js.map +1 -0
  54. package/dist/document/compile-checked.d.ts.map +1 -1
  55. package/dist/document/compile-checked.js +6 -2
  56. package/dist/document/compile-checked.js.map +1 -1
  57. package/dist/document/compile.d.ts +10 -29
  58. package/dist/document/compile.d.ts.map +1 -1
  59. package/dist/document/compile.js +74 -393
  60. package/dist/document/compile.js.map +1 -1
  61. package/dist/document/compiled.d.ts +130 -0
  62. package/dist/document/compiled.d.ts.map +1 -0
  63. package/dist/document/compiled.js +467 -0
  64. package/dist/document/compiled.js.map +1 -0
  65. package/dist/document/describe-place.d.ts +16 -0
  66. package/dist/document/describe-place.d.ts.map +1 -1
  67. package/dist/document/describe-place.js +14 -1
  68. package/dist/document/describe-place.js.map +1 -1
  69. package/dist/document/diff.d.ts.map +1 -1
  70. package/dist/document/diff.js +45 -6
  71. package/dist/document/diff.js.map +1 -1
  72. package/dist/document/edit.d.ts +7 -2
  73. package/dist/document/edit.d.ts.map +1 -1
  74. package/dist/document/edit.js +174 -46
  75. package/dist/document/edit.js.map +1 -1
  76. package/dist/document/expr/analyze.d.ts +2 -2
  77. package/dist/document/expr/analyze.js +2 -2
  78. package/dist/document/expr/print.js +1 -1
  79. package/dist/document/index.d.ts +5 -2
  80. package/dist/document/index.d.ts.map +1 -1
  81. package/dist/document/index.js +3 -1
  82. package/dist/document/index.js.map +1 -1
  83. package/dist/document/quote.d.ts +5 -0
  84. package/dist/document/quote.d.ts.map +1 -0
  85. package/dist/document/quote.js +17 -0
  86. package/dist/document/quote.js.map +1 -0
  87. package/dist/document/remembered.d.ts +6 -0
  88. package/dist/document/remembered.d.ts.map +1 -0
  89. package/dist/document/remembered.js +16 -0
  90. package/dist/document/remembered.js.map +1 -0
  91. package/dist/document/rules.d.ts +2 -2
  92. package/dist/document/rules.d.ts.map +1 -1
  93. package/dist/document/rules.js +4 -3
  94. package/dist/document/rules.js.map +1 -1
  95. package/dist/document/schema.d.ts +45 -2
  96. package/dist/document/schema.d.ts.map +1 -1
  97. package/dist/document/schema.js +32 -5
  98. package/dist/document/schema.js.map +1 -1
  99. package/dist/document/template-parse.d.ts +18 -0
  100. package/dist/document/template-parse.d.ts.map +1 -0
  101. package/dist/document/template-parse.js +124 -0
  102. package/dist/document/template-parse.js.map +1 -0
  103. package/dist/document/template.d.ts +1 -17
  104. package/dist/document/template.d.ts.map +1 -1
  105. package/dist/document/template.js +6 -115
  106. package/dist/document/template.js.map +1 -1
  107. package/dist/document/thumbnail.d.ts +13 -1
  108. package/dist/document/thumbnail.d.ts.map +1 -1
  109. package/dist/document/thumbnail.js +106 -16
  110. package/dist/document/thumbnail.js.map +1 -1
  111. package/dist/document/to-document.d.ts +1 -4
  112. package/dist/document/to-document.d.ts.map +1 -1
  113. package/dist/document/to-document.js +7 -14
  114. package/dist/document/to-document.js.map +1 -1
  115. package/dist/document/views.d.ts.map +1 -1
  116. package/dist/document/views.js +1 -1
  117. package/dist/document/views.js.map +1 -1
  118. package/dist/graph/graph.js +3 -3
  119. package/dist/graph/primitives.d.ts +2 -2
  120. package/dist/graph/primitives.js +2 -2
  121. package/dist/index.d.ts +11 -6
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +9 -6
  124. package/dist/index.js.map +1 -1
  125. package/dist/invariants/engine.js +1 -1
  126. package/dist/invariants/types.d.ts +3 -3
  127. package/dist/invariants/types.d.ts.map +1 -1
  128. package/dist/labels.d.ts +1 -1
  129. package/dist/modules.d.ts +1 -1
  130. package/dist/modules.js +1 -1
  131. package/dist/mutations/define-mutation.d.ts +12 -0
  132. package/dist/mutations/define-mutation.d.ts.map +1 -1
  133. package/dist/mutations/define-mutation.js +37 -9
  134. package/dist/mutations/define-mutation.js.map +1 -1
  135. package/dist/mutations/derive-edits.js +4 -4
  136. package/dist/mutations/derive-edits.js.map +1 -1
  137. package/dist/mutations/node-ref.js +1 -1
  138. package/dist/mutations/types.d.ts +1 -1
  139. package/dist/mutations/words.js +3 -3
  140. package/dist/ops/types.d.ts +1 -1
  141. package/dist/ops/withheld.d.ts +3 -3
  142. package/dist/permissions/policy.d.ts +1 -1
  143. package/dist/permissions/policy.js +3 -3
  144. package/dist/permissions/types.d.ts +2 -2
  145. package/dist/places.d.ts +14 -1
  146. package/dist/places.d.ts.map +1 -1
  147. package/dist/places.js +27 -4
  148. package/dist/places.js.map +1 -1
  149. package/dist/refusal.d.ts +11 -6
  150. package/dist/refusal.d.ts.map +1 -1
  151. package/dist/refusal.js +11 -6
  152. package/dist/refusal.js.map +1 -1
  153. package/dist/refused.d.ts +13 -6
  154. package/dist/refused.d.ts.map +1 -1
  155. package/dist/refused.js +14 -7
  156. package/dist/refused.js.map +1 -1
  157. package/dist/scaffold/domain.js +3 -3
  158. package/dist/scaffold/index.d.ts +1 -1
  159. package/dist/scaffold/index.d.ts.map +1 -1
  160. package/dist/scaffold/names.d.ts +1 -1
  161. package/dist/scaffold/names.js +1 -1
  162. package/dist/scaffold/names.js.map +1 -1
  163. package/dist/scaffold/project.d.ts.map +1 -1
  164. package/dist/scaffold/project.js +2 -1
  165. package/dist/scaffold/project.js.map +1 -1
  166. package/dist/scene-districts.d.ts +1 -1
  167. package/dist/schema/define-node.d.ts +4 -4
  168. package/dist/schema/define-node.d.ts.map +1 -1
  169. package/dist/schema/define-node.js +8 -8
  170. package/dist/schema/define-node.js.map +1 -1
  171. package/dist/schema/figures.d.ts +1 -1
  172. package/dist/schema/figures.js +7 -7
  173. package/dist/schema/figures.js.map +1 -1
  174. package/dist/schema/json-schema.d.ts.map +1 -1
  175. package/dist/schema/json-schema.js +4 -1
  176. package/dist/schema/json-schema.js.map +1 -1
  177. package/dist/schema/types.d.ts +1 -1
  178. package/dist/search.d.ts +13 -1
  179. package/dist/search.d.ts.map +1 -1
  180. package/dist/search.js +33 -14
  181. package/dist/search.js.map +1 -1
  182. package/dist/seen.d.ts +2 -2
  183. package/dist/seen.js +12 -12
  184. package/dist/seen.js.map +1 -1
  185. package/dist/settings.d.ts +1 -1
  186. package/dist/settings.js +3 -3
  187. package/dist/settings.js.map +1 -1
  188. package/dist/store.d.ts +2 -2
  189. package/dist/store.d.ts.map +1 -1
  190. package/dist/store.js +8 -8
  191. package/dist/store.js.map +1 -1
  192. package/dist/sync/google-calendar.js +1 -1
  193. package/dist/sync/types.d.ts +2 -2
  194. package/dist/testing.d.ts +1 -1
  195. package/dist/testing.d.ts.map +1 -1
  196. package/dist/testing.js +2 -2
  197. package/dist/testing.js.map +1 -1
  198. package/dist/theme/accent.d.ts +37 -0
  199. package/dist/theme/accent.d.ts.map +1 -0
  200. package/dist/theme/accent.js +138 -0
  201. package/dist/theme/accent.js.map +1 -0
  202. package/dist/theme/contrast.d.ts +7 -7
  203. package/dist/theme/contrast.d.ts.map +1 -1
  204. package/dist/theme/contrast.js +14 -14
  205. package/dist/theme/contrast.js.map +1 -1
  206. package/dist/theme/derive.d.ts +4 -4
  207. package/dist/theme/derive.d.ts.map +1 -1
  208. package/dist/theme/derive.js +19 -19
  209. package/dist/theme/derive.js.map +1 -1
  210. package/dist/theme/fonts.d.ts +19 -0
  211. package/dist/theme/fonts.d.ts.map +1 -0
  212. package/dist/theme/fonts.js +73 -0
  213. package/dist/theme/fonts.js.map +1 -0
  214. package/dist/theme/kit.d.ts +9 -9
  215. package/dist/theme/kit.d.ts.map +1 -1
  216. package/dist/theme/kit.js +15 -15
  217. package/dist/theme/kit.js.map +1 -1
  218. package/dist/theme/layers.d.ts +2 -2
  219. package/dist/theme/layers.d.ts.map +1 -1
  220. package/dist/theme/layers.js +2 -2
  221. package/dist/theme/layers.js.map +1 -1
  222. package/dist/theme/look.d.ts +3 -3
  223. package/dist/theme/look.d.ts.map +1 -1
  224. package/dist/theme/look.js +1 -1
  225. package/dist/theme/marks.d.ts +28 -0
  226. package/dist/theme/marks.d.ts.map +1 -0
  227. package/dist/theme/marks.js +237 -0
  228. package/dist/theme/marks.js.map +1 -0
  229. package/dist/theme/palettes.d.ts +2 -2
  230. package/dist/theme/palettes.js +2 -2
  231. package/dist/theme/types.d.ts +28 -6
  232. package/dist/theme/types.d.ts.map +1 -1
  233. package/dist/theme/types.js.map +1 -1
  234. package/dist/validate-graph.js +2 -2
  235. package/dist/version.d.ts +1 -1
  236. package/dist/version.js +1 -1
  237. package/dist/watched.js +8 -8
  238. package/package.json +5 -1
@@ -73,11 +73,11 @@ export interface IsoShade {
73
73
  readonly right: IsoFace;
74
74
  /** The wall away from it: darkest. */
75
75
  readonly left: IsoFace;
76
- /** The roof's lit edge, as a CSS colour. */
76
+ /** The roof's lit edge, as a CSS color. */
77
77
  readonly roofEdge: string;
78
78
  /** The district's plot: the ground the blocks stand on. */
79
79
  readonly plot: IsoWash;
80
- /** The plot's kerb. */
80
+ /** The plot's curb. */
81
81
  readonly plotEdge: IsoWash;
82
82
  }
83
83
  /**
@@ -90,7 +90,7 @@ export interface IsoShade {
90
90
  * scene's. The lighting is not a brand's to set, because it is what makes
91
91
  * a block read as a block on the shipped grounds in both schemes.
92
92
  *
93
- * `hsl(${hue} ${face.saturation}% ${face.lightness}%)` is a face's colour.
93
+ * `hsl(${hue} ${face.saturation}% ${face.lightness}%)` is a face's color.
94
94
  */
95
95
  export declare function isoShade(scheme: Scheme): IsoShade;
96
96
  //# sourceMappingURL=look.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"look.d.ts","sourceRoot":"","sources":["../../src/theme/look.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAiBhD;;;;;;;;GAQG;AACH,eAAO,MAAM,KAAK;IAChB,mCAAmC;;IAEnC,4DAA4D;;IAE5D,kGAAkG;;;IAGlG,iDAAiD;;IAEjD,oDAAoD;;IAEpD,6CAA6C;;EAE7C,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,UAAU;;;EAGrB,CAAC;AAEH,yHAAyH;AACzH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,aAAa,CAUnE;AAED,qHAAqH;AACrH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,0GAA0G;AAC1G,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,kBAAkB,CAOlF;AAED,8EAA8E;AAC9E,MAAM,WAAW,OAAO;IACtB,sBAAsB;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,sBAAsB;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,0GAA0G;AAC1G,MAAM,WAAW,OAAQ,SAAQ,OAAO;IACtC,WAAW;IACX,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,oFAAoF;AACpF,MAAM,WAAW,QAAQ;IACvB,yCAAyC;IACzC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,iCAAiC;IACjC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,uBAAuB;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AA0BD;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAEjD"}
1
+ {"version":3,"file":"look.d.ts","sourceRoot":"","sources":["../../src/theme/look.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAiBhD;;;;;;;;GAQG;AACH,eAAO,MAAM,KAAK;IAChB,mCAAmC;;IAEnC,4DAA4D;;IAE5D,kGAAkG;;;IAGlG,iDAAiD;;IAEjD,oDAAoD;;IAEpD,6CAA6C;;EAE7C,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,UAAU;;;EAGrB,CAAC;AAEH,yHAAyH;AACzH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,aAAa,CAUnE;AAED,qHAAqH;AACrH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,0GAA0G;AAC1G,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,kBAAkB,CAOlF;AAED,8EAA8E;AAC9E,MAAM,WAAW,OAAO;IACtB,sBAAsB;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,sBAAsB;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,0GAA0G;AAC1G,MAAM,WAAW,OAAQ,SAAQ,OAAO;IACtC,WAAW;IACX,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,oFAAoF;AACpF,MAAM,WAAW,QAAQ;IACvB,yCAAyC;IACzC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,iCAAiC;IACjC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,2CAA2C;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,uBAAuB;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AA0BD;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAEjD"}
@@ -102,7 +102,7 @@ const SHADES = Object.freeze({
102
102
  * scene's. The lighting is not a brand's to set, because it is what makes
103
103
  * a block read as a block on the shipped grounds in both schemes.
104
104
  *
105
- * `hsl(${hue} ${face.saturation}% ${face.lightness}%)` is a face's colour.
105
+ * `hsl(${hue} ${face.saturation}% ${face.lightness}%)` is a face's color.
106
106
  */
107
107
  export function isoShade(scheme) {
108
108
  return SHADES[scheme];
@@ -0,0 +1,28 @@
1
+ /** The most an inline SVG mark may be, in characters. */
2
+ export declare const MAX_INLINE_SVG: number;
3
+ /** Whether a mark is an SVG written inline, rather than a path to one. */
4
+ export declare function isInlineSvg(mark: string): boolean;
5
+ /** Why an SVG may not be drawn as it is: anything that could run, or reach outside the image. Null when it may. */
6
+ export declare function svgProblem(text: string): string | null;
7
+ /**
8
+ * Why a mark may not be drawn, or null: an inline SVG under the rules
9
+ * above, or a path on the app's own host — under `/graview/assets/`, or
10
+ * relative to the page, never climbing out of either — and never another
11
+ * origin.
12
+ */
13
+ export declare function markProblem(mark: string): string | null;
14
+ /**
15
+ * A mark as an address an `<img>` or a `<link rel="icon">` can take: an
16
+ * inline SVG as a `data:` URI, a path, a web address or a `data:` image as
17
+ * given. Undefined for an inline SVG that could act, and for an address of
18
+ * any other scheme (`javascript:` among them). Which origins a mark may
19
+ * name is the checker's to judge (a document's only its own host; a
20
+ * TypeScript brand's wherever its author serves it); a face draws what it
21
+ * is given.
22
+ */
23
+ export declare function markHref(mark: string | undefined): string | undefined;
24
+ /** The page icon a brand asks for, as an address (FR-124), or undefined. */
25
+ export declare function faviconHref(brand: {
26
+ readonly favicon?: string;
27
+ } | undefined): string | undefined;
28
+ //# sourceMappingURL=marks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marks.d.ts","sourceRoot":"","sources":["../../src/theme/marks.ts"],"names":[],"mappings":"AAsBA,yDAAyD;AACzD,eAAO,MAAM,cAAc,QAAY,CAAC;AAExC,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AA2ED,mHAAmH;AACnH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA+DtD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CASrE;AAED,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAEhG"}
@@ -0,0 +1,237 @@
1
+ /*
2
+ * A BRAND'S MARKS — its logo and its page icon (FR-124) — as a document
3
+ * holds them: an SVG written inline, or a path on the app's own host
4
+ * (`/graview/assets/<sha256>.svg`, where Graview Cloud keeps what a chat
5
+ * hands it). Drawn as given and never redrawn, so an SVG that could act —
6
+ * run a script, answer an event, embed a page, load anything — is refused
7
+ * with the reason rather than quietly rewritten.
8
+ *
9
+ * READ AS THE BROWSER READS IT. An inline mark reaches the page through
10
+ * the HTML parser, which takes a handler after a slash, an unquoted link,
11
+ * markup after the closing tag and a style written in escapes; rules that
12
+ * search the string for what is forbidden miss each of those. So the SVG
13
+ * is read whole, element by element, as both the HTML and the XML parser
14
+ * will read it, and only what a picture needs is kept: the elements a
15
+ * drawing is made of (no `a`, `style`, `script`, `foreignObject`,
16
+ * animation or `feImage`), no prefixed element, every attribute quoted and
17
+ * apart from the last, no handler, a link only within the picture (`#id`,
18
+ * or a `data:image/` on an `<image>`), a paint or a style that reaches only
19
+ * within it, no CDATA, no entity, and nothing after the root. These are
20
+ * the rules Graview Cloud's `add_image` holds an image to.
21
+ */
22
+ /** The most an inline SVG mark may be, in characters. */
23
+ export const MAX_INLINE_SVG = 64 * 1024;
24
+ /** Whether a mark is an SVG written inline, rather than a path to one. */
25
+ export function isInlineSvg(mark) {
26
+ return /^\s*(<\?xml[^>]*>\s*)?(<!--[\s\S]*?-->\s*)*(<!DOCTYPE svg[^>]*>\s*)?<svg[\s>/]/i.test(mark);
27
+ }
28
+ const SVG_NS = "http://www.w3.org/2000/svg";
29
+ const OTHER_MARKUP = ["http://www.w3.org/1999/xhtml", "http://www.w3.org/1998/Math/MathML", SVG_NS];
30
+ /** What a picture is made of, spelled as SVG spells it: the HTML parser maps its lower-case reading back to these. */
31
+ const ELEMENTS = new Set(("svg g defs symbol use title desc path rect circle ellipse line polyline polygon text tspan textPath " +
32
+ "linearGradient radialGradient stop pattern clipPath mask marker image filter feBlend feColorMatrix " +
33
+ "feComponentTransfer feComposite feDropShadow feFlood feFuncA feFuncB feFuncG feFuncR feGaussianBlur " +
34
+ "feMerge feMergeNode feMorphology feOffset feTile feTurbulence").split(" "));
35
+ /** Elements whose content the HTML parser reads as HTML: text alone inside them. */
36
+ const TEXT_ONLY = new Set(["title", "desc"]);
37
+ const MEDIA = "it embeds a page or media";
38
+ /** A refused element a reader would look for by name, said as the checker has always said it. */
39
+ const REFUSED_SAID = {
40
+ script: "it has a script in it",
41
+ foreignobject: "it embeds HTML (foreignObject)",
42
+ iframe: MEDIA,
43
+ embed: MEDIA,
44
+ object: MEDIA,
45
+ audio: MEDIA,
46
+ video: MEDIA,
47
+ style: "it has a style sheet in it; a mark is styled by its attributes",
48
+ a: "it links to something (an <a> element)",
49
+ };
50
+ const XML_ENTITIES = { amp: "&", lt: "<", gt: ">", quot: '"', apos: "'" };
51
+ /** An attribute's value as the parser hands it on: character references read; any other named entity is null. */
52
+ function decoded(value) {
53
+ let unknown = false;
54
+ const out = value.replace(/&(#x[0-9a-f]+|#[0-9]+|[a-z][a-z0-9]*);?/gi, (_, ref) => {
55
+ if (ref[0] === "#") {
56
+ const code = ref[1] === "x" || ref[1] === "X" ? parseInt(ref.slice(2), 16) : parseInt(ref.slice(1), 10);
57
+ return code > 0 && code <= 0x10ffff ? String.fromCodePoint(code) : "�";
58
+ }
59
+ const known = XML_ENTITIES[ref.toLowerCase()];
60
+ if (known === undefined)
61
+ unknown = true;
62
+ return known ?? "";
63
+ });
64
+ return unknown ? null : out;
65
+ }
66
+ /** Whether a value reaches only within the picture: no escape, no at-rule, no image function, and every `url(` a fragment of it. */
67
+ function staysWithin(value) {
68
+ if (/\\|@|expression\s*\(|(?:image-set|cross-fade|image|element|src)\s*\(/i.test(value))
69
+ return false;
70
+ for (const [, target] of value.matchAll(/url\s*\(\s*["']?\s*([^)]*)/gi))
71
+ if (!target.startsWith("#"))
72
+ return false;
73
+ return true;
74
+ }
75
+ /** Why one attribute may not stand on this element, or null. */
76
+ function attributeProblem(element, name, raw) {
77
+ const value = decoded(raw);
78
+ if (value === null)
79
+ return "it declares XML entities";
80
+ const local = (name.includes(":") ? name.slice(name.indexOf(":") + 1) : name).toLowerCase();
81
+ if (local.startsWith("on"))
82
+ return "it has an event handler (an on… attribute)";
83
+ if (name === "xml:base")
84
+ return "it loads or links to something outside itself";
85
+ if (name === "xmlns")
86
+ return value === SVG_NS ? null : "it changes what its elements are (another xmlns)";
87
+ if (name.startsWith("xmlns:"))
88
+ return OTHER_MARKUP.includes(value) ? "it changes what its elements are (another xmlns)" : null;
89
+ if (local === "href" || local === "src") {
90
+ const link = value.replace(/[\u0000- ]+/g, "");
91
+ if (link.startsWith("#"))
92
+ return null;
93
+ if (element === "image" && /^data:image\/(png|jpe?g|gif|webp|avif);/i.test(link))
94
+ return null;
95
+ return "it loads or links to something outside itself";
96
+ }
97
+ if (!staysWithin(value))
98
+ return local === "style" ? "its style loads something outside itself" : "it loads or links to something outside itself";
99
+ return null;
100
+ }
101
+ const ATTRIBUTE = /^\s+([A-Za-z_][A-Za-z0-9_.:-]*)\s*=\s*(?:"([^"<]*)"|'([^'<]*)')/;
102
+ /** Why an SVG may not be drawn as it is: anything that could run, or reach outside the image. Null when it may. */
103
+ export function svgProblem(text) {
104
+ if (/<!ENTITY/i.test(text))
105
+ return "it declares XML entities";
106
+ if (/<!\[CDATA\[/i.test(text))
107
+ return "it has a CDATA section, which the page and the picture read differently";
108
+ const open = [];
109
+ let ended = false;
110
+ let at = /^\s*(<\?xml\s[^?<>]*\?>)?/.exec(text)[0].length;
111
+ while (at < text.length) {
112
+ const rest = text.slice(at);
113
+ const words = /^[^<]+/.exec(rest);
114
+ if (words) {
115
+ if (open.length === 0 && words[0].trim() !== "")
116
+ return "it is not one SVG: there is text outside it";
117
+ at += words[0].length;
118
+ continue;
119
+ }
120
+ if (rest.startsWith("<!--")) {
121
+ const close = rest.indexOf("-->", 4);
122
+ if (close < 0)
123
+ return "it has a comment that never ends";
124
+ const body = rest.slice(4, close);
125
+ if (/^-?>/.test(body) || body.includes("--") || body.includes("<!") || body.endsWith("-"))
126
+ return "it has a comment the page and the picture read differently";
127
+ at += close + 3;
128
+ continue;
129
+ }
130
+ if (/^<!DOCTYPE/i.test(rest)) {
131
+ const doctype = /^<!DOCTYPE\s+svg\b[^<>[\]]*>/i.exec(rest);
132
+ if (!doctype || open.length > 0 || ended)
133
+ return "it declares XML entities";
134
+ at += doctype[0].length;
135
+ continue;
136
+ }
137
+ const close = /^<\/([A-Za-z][A-Za-z0-9_.:-]*)\s*>/.exec(rest);
138
+ if (close) {
139
+ if (open.pop() !== close[1])
140
+ return `it is not one SVG: </${close[1]}> closes what is not open`;
141
+ if (open.length === 0)
142
+ ended = true;
143
+ at += close[0].length;
144
+ continue;
145
+ }
146
+ const start = /^<([A-Za-z][A-Za-z0-9_.:-]*)/.exec(rest);
147
+ if (!start)
148
+ return "it is not one SVG: it has markup a picture cannot hold";
149
+ const name = start[1];
150
+ const refused = REFUSED_SAID[name.toLowerCase()];
151
+ if (refused)
152
+ return refused;
153
+ if (ended)
154
+ return `it is not one SVG: <${name}> comes after it ends`;
155
+ if (open.length === 0 && name !== "svg")
156
+ return "it is not one SVG";
157
+ if (name.includes(":"))
158
+ return `it has an element of another kind (<${name}>)`;
159
+ if (!ELEMENTS.has(name))
160
+ return `it has a <${name}> element, which a picture does not need`;
161
+ const parent = open[open.length - 1];
162
+ if (parent && TEXT_ONLY.has(parent))
163
+ return `it has an element inside a <${parent}>, which the page reads as HTML`;
164
+ let tag = start[0].length;
165
+ for (let attribute = ATTRIBUTE.exec(rest.slice(tag)); attribute; attribute = ATTRIBUTE.exec(rest.slice(tag))) {
166
+ const problem = attributeProblem(name, attribute[1], attribute[2] ?? attribute[3] ?? "");
167
+ if (problem)
168
+ return problem;
169
+ tag += attribute[0].length;
170
+ }
171
+ const end = /^\s*(\/?)>/.exec(rest.slice(tag));
172
+ if (!end) {
173
+ if (/(?:^|[\s/"'])on[a-z]+\s*=/i.test(rest.slice(tag, tag + 400)))
174
+ return "it has an event handler (an on… attribute)";
175
+ return `it is not one SVG: <${name}>'s attributes are not each quoted and apart`;
176
+ }
177
+ if (end[1] !== "/")
178
+ open.push(name);
179
+ else if (open.length === 0)
180
+ ended = true;
181
+ at += tag + end[0].length;
182
+ }
183
+ if (open.length > 0)
184
+ return `it is not one SVG: <${open[open.length - 1]}> is never closed`;
185
+ return ended ? null : "it is not one SVG";
186
+ }
187
+ /**
188
+ * Why a mark may not be drawn, or null: an inline SVG under the rules
189
+ * above, or a path on the app's own host — under `/graview/assets/`, or
190
+ * relative to the page, never climbing out of either — and never another
191
+ * origin.
192
+ */
193
+ export function markProblem(mark) {
194
+ if (isInlineSvg(mark)) {
195
+ if (mark.length > MAX_INLINE_SVG)
196
+ return `it is over ${MAX_INLINE_SVG / 1024} KB, the most an inline SVG may be`;
197
+ return svgProblem(mark);
198
+ }
199
+ if (/^\s*</.test(mark))
200
+ return "it is markup, and not an SVG";
201
+ if (/^[a-z][a-z0-9+.-]*:/i.test(mark) || mark.startsWith("//"))
202
+ return "it names another origin; a mark is inline SVG or a path on the app's own host, like /graview/assets/<sha256>.svg";
203
+ if (!/^[A-Za-z0-9._~/-]+$/.test(mark))
204
+ return "a path is letters, digits and . _ ~ / - only";
205
+ if (mark.split("/").some((part) => part === "." || part === ".."))
206
+ return "the path climbs out of where it is (a . or .. in it); name the file itself, like /graview/assets/<sha256>.svg";
207
+ if (mark.startsWith("/") && !mark.startsWith("/graview/assets/"))
208
+ return "a path on the app's own host is under /graview/assets/, or relative to the page";
209
+ return null;
210
+ }
211
+ /**
212
+ * A mark as an address an `<img>` or a `<link rel="icon">` can take: an
213
+ * inline SVG as a `data:` URI, a path, a web address or a `data:` image as
214
+ * given. Undefined for an inline SVG that could act, and for an address of
215
+ * any other scheme (`javascript:` among them). Which origins a mark may
216
+ * name is the checker's to judge (a document's only its own host; a
217
+ * TypeScript brand's wherever its author serves it); a face draws what it
218
+ * is given.
219
+ */
220
+ export function markHref(mark) {
221
+ if (!mark)
222
+ return undefined;
223
+ if (!isInlineSvg(mark)) {
224
+ if (/^\s*</.test(mark))
225
+ return undefined;
226
+ const scheme = /^\s*([a-z][a-z0-9+.-]*):/i.exec(mark)?.[1]?.toLowerCase();
227
+ if (scheme === undefined || scheme === "http" || scheme === "https")
228
+ return mark;
229
+ return scheme === "data" && /^\s*data:image\//i.test(mark) ? mark : undefined;
230
+ }
231
+ return svgProblem(mark) === null ? `data:image/svg+xml,${encodeURIComponent(mark.trim())}` : undefined;
232
+ }
233
+ /** The page icon a brand asks for, as an address (FR-124), or undefined. */
234
+ export function faviconHref(brand) {
235
+ return markHref(brand?.favicon);
236
+ }
237
+ //# sourceMappingURL=marks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marks.js","sourceRoot":"","sources":["../../src/theme/marks.ts"],"names":[],"mappings":"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"}
@@ -17,9 +17,9 @@ import type { Scheme, ThemeTokens } from "./types.js";
17
17
  * - **Light** is daylight and paper. Things at depth lose CONTRAST and gain
18
18
  * haze — real atmospheric perspective — and separation comes from soft cast
19
19
  * shadow, the way objects on a desk separate. Inverting the dark scheme
20
- * would give grey-on-grey mush, because glow does not exist in daylight.
20
+ * would give gray-on-gray mush, because glow does not exist in daylight.
21
21
  *
22
- * One rule holds across both: **secondary text is a colour, never an
22
+ * One rule holds across both: **secondary text is a color, never an
23
23
  * opacity.** Opacity composites against whatever is behind and fails contrast
24
24
  * silently. `checkContrast` measures every pair on both, and axe-core checks
25
25
  * the rendered result on every run of the a11y harness.
@@ -16,9 +16,9 @@
16
16
  * - **Light** is daylight and paper. Things at depth lose CONTRAST and gain
17
17
  * haze — real atmospheric perspective — and separation comes from soft cast
18
18
  * shadow, the way objects on a desk separate. Inverting the dark scheme
19
- * would give grey-on-grey mush, because glow does not exist in daylight.
19
+ * would give gray-on-gray mush, because glow does not exist in daylight.
20
20
  *
21
- * One rule holds across both: **secondary text is a colour, never an
21
+ * One rule holds across both: **secondary text is a color, never an
22
22
  * opacity.** Opacity composites against whatever is behind and fails contrast
23
23
  * silently. `checkContrast` measures every pair on both, and axe-core checks
24
24
  * the rendered result on every run of the a11y harness.
@@ -6,7 +6,7 @@ import type { KitOverrides } from "./kit.js";
6
6
  * components that read them live. The contract lives here for the same reason
7
7
  * the schema does: `graview check` reads declarations, and a theme is a
8
8
  * declaration. A custom palette can be wrong in ways nobody notices — a
9
- * secondary text colour that clears 4.5:1 on a dark ground and fails badly on
9
+ * secondary text color that clears 4.5:1 on a dark ground and fails badly on
10
10
  * paper — and contrast is a property the framework can verify rather than
11
11
  * trust.
12
12
  */
@@ -32,7 +32,7 @@ export interface ThemeTokens {
32
32
  * A STATUS THAT IS GOOD, AND ONE THAT IS BAD: booked, paid, passing;
33
33
  * overdue, refused, failing. The accent means "selected" and the warning
34
34
  * means "a rule is broken", and a badge that meant neither invented a
35
- * colour of its own and checked it by hand, if at all. Text colours,
35
+ * color of its own and checked it by hand, if at all. Text colors,
36
36
  * held to 4.5:1 on a panel and on the ground like every other ink.
37
37
  */
38
38
  readonly good: string;
@@ -56,7 +56,7 @@ export interface ThemeTokens {
56
56
  *
57
57
  * Palette, wordmark and typography together, because they are one decision:
58
58
  * a brand handing over a hex code has not given you a theme, and a brand
59
- * handing over a logo without a colour has not either.
59
+ * handing over a logo without a color has not either.
60
60
  */
61
61
  export interface Brand {
62
62
  /** The product name, shown where the framework shows a wordmark. */
@@ -65,9 +65,31 @@ export interface Brand {
65
65
  * A logo, as an inline SVG string or a URL.
66
66
  *
67
67
  * Inline is preferred and is what `currentColor` support is for: a logo
68
- * that inherits the ink colour works in both schemes without two files.
68
+ * that inherits the ink color works in both schemes without two files.
69
69
  */
70
70
  readonly logo?: string;
71
+ /**
72
+ * What the logo says to someone who cannot see it (FR-124): the app's
73
+ * name when absent. Drawn beside the name, the logo is said only when
74
+ * this says more than the name does.
75
+ */
76
+ readonly logoAlt?: string;
77
+ /**
78
+ * The page's icon (FR-124), in the same forms as the logo: inline SVG or
79
+ * a same-origin path. Set only by a face that owns the whole page — the
80
+ * Shell, the routed face on its own, an embed told `favicon: true` —
81
+ * never by an embed on somebody else's page. `faviconHref` says it as an
82
+ * address.
83
+ */
84
+ readonly favicon?: string;
85
+ /** A line under the name (FR-125): a document's `description`. */
86
+ readonly subtitle?: string;
87
+ /**
88
+ * THE SCHEME THE APP PREFERS (FR-124), when the reader has not chosen:
89
+ * "auto" (the default) follows the system's. A host's own `data-theme`
90
+ * stamp, or a scheme the host asks for, is a choice and wins.
91
+ */
92
+ readonly scheme?: Scheme | "auto";
71
93
  readonly typography?: {
72
94
  /** Applied to everything. Include a real fallback stack. */
73
95
  readonly body?: string;
@@ -81,7 +103,7 @@ export interface Brand {
81
103
  *
82
104
  * The third axis of an identity, and the one that was missing: with only a
83
105
  * palette and a wordmark, four apps built on this looked like the same
84
- * application four times in different colours. A bid desk is square and
106
+ * application four times in different colors. A bid desk is square and
85
107
  * dense; a household planner is round and roomy. Neither is a component
86
108
  * change — both are one number.
87
109
  */
@@ -96,7 +118,7 @@ export interface Brand {
96
118
  *
97
119
  * The default is a stable hash — fine for "each kind looks like itself",
98
120
  * useless for "our people are warm amber and our money is green". Declared
99
- * here it reaches every surface that colours by kind (chips, districts,
121
+ * here it reaches every surface that colors by kind (chips, districts,
100
122
  * calendars) through one lookup, and `graview check` refuses a key that
101
123
  * names no declared kind — a silent typo would just quietly hash instead.
102
124
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/theme/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/theme/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/theme/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/theme/types.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { Graph } from "./graph/graph.js";
2
2
  import { UNSET } from "./graph/primitives.js";
3
3
  import { edgeId } from "./graph/types.js";
4
4
  import { evaluate } from "./invariants/engine.js";
5
- import { humaniseField, labelOf } from "./schema/define-node.js";
5
+ import { humanizeField, labelOf } from "./schema/define-node.js";
6
6
  /** Every code, in the order findings are reported. */
7
7
  export const GRAPH_FINDING_CODES = [
8
8
  "kind-unknown",
@@ -140,7 +140,7 @@ export function validateGraph(app, snapshot, options = {}) {
140
140
  code: "node-shape",
141
141
  id: node.id,
142
142
  detail: field,
143
- message: `${name}: ${humaniseField(field)} does not fit what ${node.kind} declares`,
143
+ message: `${name}: ${humanizeField(field)} does not fit what ${node.kind} declares`,
144
144
  repair,
145
145
  });
146
146
  }
package/dist/version.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  /** The version of @graview/* that this build is — every package shares it. Written by scripts/write-framework-version.mjs. */
2
- export declare const FRAMEWORK_VERSION = "0.1.14";
2
+ export declare const FRAMEWORK_VERSION = "0.1.16";
3
3
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  /** The version of @graview/* that this build is — every package shares it. Written by scripts/write-framework-version.mjs. */
2
- export const FRAMEWORK_VERSION = "0.1.14";
2
+ export const FRAMEWORK_VERSION = "0.1.16";
3
3
  //# sourceMappingURL=version.js.map
package/dist/watched.js CHANGED
@@ -1,4 +1,4 @@
1
- import { humaniseField, labelOf } from "./schema/define-node.js";
1
+ import { humanizeField, labelOf } from "./schema/define-node.js";
2
2
  const theWatch = () => globalThis.__graviewWatch;
3
3
  /** The declaration's names, and the words it has for them. */
4
4
  export function tellTheWatchItsNames(schema, mutations, policy) {
@@ -17,13 +17,13 @@ export function tellTheWatchItsNames(schema, mutations, policy) {
17
17
  for (const definition of schema.definitions) {
18
18
  ids.push(definition.kind);
19
19
  // A kind with a noun of its own is never shown by its id: "vehicle" where the declaration says "car".
20
- if (definition.noun && humaniseField(definition.kind).toLowerCase() !== definition.noun.toLowerCase())
20
+ if (definition.noun && humanizeField(definition.kind).toLowerCase() !== definition.noun.toLowerCase())
21
21
  unsaid.push(definition.kind);
22
22
  const fieldsOf = definition.fields.shape ?? {};
23
23
  for (const [key, field] of Object.entries(fieldsOf)) {
24
24
  const declared = definition.display?.labels?.[key];
25
- if (declared !== undefined && humaniseField(key) !== declared)
26
- unsaid.push(humaniseField(key));
25
+ if (declared !== undefined && humanizeField(key) !== declared)
26
+ unsaid.push(humanizeField(key));
27
27
  const entries = field?.def?.entries;
28
28
  const format = definition.display?.format?.[key];
29
29
  for (const value of entries && typeof entries === "object" ? Object.values(entries) : []) {
@@ -52,7 +52,7 @@ export function tellTheWatchItsNames(schema, mutations, policy) {
52
52
  ids.push(name);
53
53
  // An edge's name spoken ("Drives", "On show at") where it has words of its own ("the test drives booked in it").
54
54
  if (edge.description || edge.inverse)
55
- unsaid.push(humaniseField(name));
55
+ unsaid.push(humanizeField(name));
56
56
  words.push(edge.description ?? "", edge.inverse ?? "");
57
57
  }
58
58
  }
@@ -69,7 +69,7 @@ export function tellTheWatchItsNames(schema, mutations, policy) {
69
69
  for (const definition of schema.definitions) {
70
70
  // A kind's own words: what a picker asks for ("Owner") is a noun, not an edge's name.
71
71
  declared.add(definition.plural ?? "");
72
- declared.add(humaniseField(definition.noun ?? definition.kind));
72
+ declared.add(humanizeField(definition.noun ?? definition.kind));
73
73
  for (const label of Object.values(definition.display?.labels ?? {}))
74
74
  declared.add(label);
75
75
  const fieldsOf = definition.fields.shape ?? {};
@@ -77,11 +77,11 @@ export function tellTheWatchItsNames(schema, mutations, policy) {
77
77
  const format = definition.display?.format?.[key];
78
78
  const entries = field?.def?.entries;
79
79
  if (!format && !definition.display?.labels?.[key])
80
- declared.add(humaniseField(key));
80
+ declared.add(humanizeField(key));
81
81
  // A value is said by its format, or spoken plainly where there is none ("Given", a talk's state).
82
82
  if (entries && typeof entries === "object")
83
83
  for (const value of Object.values(entries))
84
- declared.add(format ? format(value) : humaniseField(String(value)));
84
+ declared.add(format ? format(value) : humanizeField(String(value)));
85
85
  }
86
86
  }
87
87
  watch.learn({ ids, words: words.filter(Boolean), unsaid: [...new Set(unsaid)].filter((word) => !declared.has(word)) });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@graview/core",
3
- "version": "0.1.14",
3
+ "version": "0.1.16",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -13,6 +13,10 @@
13
13
  "types": "./dist/document/index.d.ts",
14
14
  "default": "./dist/document/index.js"
15
15
  },
16
+ "./compiled": {
17
+ "types": "./dist/compiled.d.ts",
18
+ "default": "./dist/compiled.js"
19
+ },
16
20
  "./describe": {
17
21
  "types": "./dist/describe.d.ts",
18
22
  "default": "./dist/describe.js"