@graview/core 0.1.15 → 0.1.17

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 (216) hide show
  1. package/README.md +23 -5
  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/relations.js +2 -2
  19. package/dist/cli/check/relations.js.map +1 -1
  20. package/dist/cli/check/settings.js +8 -8
  21. package/dist/cli/check/settings.js.map +1 -1
  22. package/dist/cli/check/views.d.ts +1 -1
  23. package/dist/cli/check/views.js +1 -1
  24. package/dist/cli/create.d.ts +1 -1
  25. package/dist/cli/create.js +5 -5
  26. package/dist/cli/describe.d.ts +1 -1
  27. package/dist/cli/describe.js +2 -2
  28. package/dist/cli/describe.js.map +1 -1
  29. package/dist/cli/index.d.ts +1 -1
  30. package/dist/columns.d.ts +1 -1
  31. package/dist/columns.js +1 -1
  32. package/dist/compiled.d.ts.map +1 -1
  33. package/dist/compiled.js +6 -2
  34. package/dist/compiled.js.map +1 -1
  35. package/dist/conformance/fixtures.d.ts.map +1 -1
  36. package/dist/conformance/fixtures.js +194 -0
  37. package/dist/conformance/fixtures.js.map +1 -1
  38. package/dist/describe.d.ts +1 -1
  39. package/dist/describe.d.ts.map +1 -1
  40. package/dist/document/brand-check.d.ts +10 -0
  41. package/dist/document/brand-check.d.ts.map +1 -0
  42. package/dist/document/brand-check.js +33 -0
  43. package/dist/document/brand-check.js.map +1 -0
  44. package/dist/document/brand.d.ts +10 -0
  45. package/dist/document/brand.d.ts.map +1 -0
  46. package/dist/document/brand.js +49 -0
  47. package/dist/document/brand.js.map +1 -0
  48. package/dist/document/compile-checked.d.ts.map +1 -1
  49. package/dist/document/compile-checked.js +6 -2
  50. package/dist/document/compile-checked.js.map +1 -1
  51. package/dist/document/compile.d.ts +6 -0
  52. package/dist/document/compile.d.ts.map +1 -1
  53. package/dist/document/compile.js +4 -13
  54. package/dist/document/compile.js.map +1 -1
  55. package/dist/document/compiled.d.ts.map +1 -1
  56. package/dist/document/compiled.js +12 -4
  57. package/dist/document/compiled.js.map +1 -1
  58. package/dist/document/describe-place.d.ts +16 -0
  59. package/dist/document/describe-place.d.ts.map +1 -1
  60. package/dist/document/describe-place.js +14 -1
  61. package/dist/document/describe-place.js.map +1 -1
  62. package/dist/document/diff.d.ts +1 -1
  63. package/dist/document/diff.d.ts.map +1 -1
  64. package/dist/document/diff.js +52 -7
  65. package/dist/document/diff.js.map +1 -1
  66. package/dist/document/edit.d.ts +7 -2
  67. package/dist/document/edit.d.ts.map +1 -1
  68. package/dist/document/edit.js +188 -48
  69. package/dist/document/edit.js.map +1 -1
  70. package/dist/document/expr/analyze.d.ts +2 -2
  71. package/dist/document/expr/analyze.js +2 -2
  72. package/dist/document/expr/print.js +1 -1
  73. package/dist/document/index.d.ts +3 -1
  74. package/dist/document/index.d.ts.map +1 -1
  75. package/dist/document/index.js +1 -0
  76. package/dist/document/index.js.map +1 -1
  77. package/dist/document/quote.d.ts +5 -0
  78. package/dist/document/quote.d.ts.map +1 -0
  79. package/dist/document/quote.js +17 -0
  80. package/dist/document/quote.js.map +1 -0
  81. package/dist/document/respell.d.ts +20 -0
  82. package/dist/document/respell.d.ts.map +1 -0
  83. package/dist/document/respell.js +66 -0
  84. package/dist/document/respell.js.map +1 -0
  85. package/dist/document/rules.d.ts +2 -2
  86. package/dist/document/rules.d.ts.map +1 -1
  87. package/dist/document/rules.js +2 -2
  88. package/dist/document/rules.js.map +1 -1
  89. package/dist/document/schema.d.ts +47 -2
  90. package/dist/document/schema.d.ts.map +1 -1
  91. package/dist/document/schema.js +27 -3
  92. package/dist/document/schema.js.map +1 -1
  93. package/dist/document/thumbnail.d.ts +9 -0
  94. package/dist/document/thumbnail.d.ts.map +1 -1
  95. package/dist/document/thumbnail.js +74 -12
  96. package/dist/document/thumbnail.js.map +1 -1
  97. package/dist/document/to-document.js +5 -5
  98. package/dist/document/to-document.js.map +1 -1
  99. package/dist/document/upgrade.d.ts +3 -1
  100. package/dist/document/upgrade.d.ts.map +1 -1
  101. package/dist/document/upgrade.js +6 -3
  102. package/dist/document/upgrade.js.map +1 -1
  103. package/dist/graph/graph.js +3 -3
  104. package/dist/graph/primitives.d.ts +2 -2
  105. package/dist/graph/primitives.js +2 -2
  106. package/dist/index.d.ts +12 -5
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +9 -5
  109. package/dist/index.js.map +1 -1
  110. package/dist/invariants/engine.js +1 -1
  111. package/dist/invariants/types.d.ts +3 -3
  112. package/dist/invariants/types.d.ts.map +1 -1
  113. package/dist/labels.d.ts +1 -1
  114. package/dist/modules.d.ts +1 -1
  115. package/dist/modules.js +1 -1
  116. package/dist/mutations/define-mutation.js +4 -4
  117. package/dist/mutations/define-mutation.js.map +1 -1
  118. package/dist/mutations/derive-edits.js +3 -3
  119. package/dist/mutations/node-ref.js +1 -1
  120. package/dist/mutations/types.d.ts +1 -1
  121. package/dist/mutations/words.js +3 -3
  122. package/dist/ops/types.d.ts +1 -1
  123. package/dist/ops/withheld.d.ts +3 -3
  124. package/dist/permissions/policy.d.ts +1 -1
  125. package/dist/permissions/policy.js +3 -3
  126. package/dist/permissions/types.d.ts +2 -2
  127. package/dist/places.d.ts +19 -2
  128. package/dist/places.d.ts.map +1 -1
  129. package/dist/places.js +41 -4
  130. package/dist/places.js.map +1 -1
  131. package/dist/scaffold/domain.js +3 -3
  132. package/dist/scaffold/index.d.ts +1 -1
  133. package/dist/scaffold/index.d.ts.map +1 -1
  134. package/dist/scaffold/names.d.ts +1 -1
  135. package/dist/scaffold/names.js +1 -1
  136. package/dist/scaffold/names.js.map +1 -1
  137. package/dist/scaffold/project.d.ts.map +1 -1
  138. package/dist/scaffold/project.js +4 -1
  139. package/dist/scaffold/project.js.map +1 -1
  140. package/dist/scene-districts.d.ts +1 -1
  141. package/dist/schema/define-node.d.ts +4 -4
  142. package/dist/schema/define-node.d.ts.map +1 -1
  143. package/dist/schema/define-node.js +8 -8
  144. package/dist/schema/define-node.js.map +1 -1
  145. package/dist/schema/figures.d.ts +1 -1
  146. package/dist/schema/figures.js +7 -7
  147. package/dist/schema/figures.js.map +1 -1
  148. package/dist/schema/types.d.ts +1 -1
  149. package/dist/search.d.ts +13 -1
  150. package/dist/search.d.ts.map +1 -1
  151. package/dist/search.js +33 -14
  152. package/dist/search.js.map +1 -1
  153. package/dist/seen.d.ts +2 -2
  154. package/dist/seen.js +12 -12
  155. package/dist/seen.js.map +1 -1
  156. package/dist/settings.d.ts +1 -1
  157. package/dist/settings.js +3 -3
  158. package/dist/settings.js.map +1 -1
  159. package/dist/store.d.ts +2 -2
  160. package/dist/store.d.ts.map +1 -1
  161. package/dist/store.js +8 -8
  162. package/dist/store.js.map +1 -1
  163. package/dist/sync/google-calendar.js +1 -1
  164. package/dist/sync/types.d.ts +2 -2
  165. package/dist/testing.d.ts +1 -1
  166. package/dist/testing.d.ts.map +1 -1
  167. package/dist/testing.js +2 -2
  168. package/dist/testing.js.map +1 -1
  169. package/dist/theme/accent.d.ts +37 -0
  170. package/dist/theme/accent.d.ts.map +1 -0
  171. package/dist/theme/accent.js +138 -0
  172. package/dist/theme/accent.js.map +1 -0
  173. package/dist/theme/contrast.d.ts +7 -7
  174. package/dist/theme/contrast.d.ts.map +1 -1
  175. package/dist/theme/contrast.js +14 -14
  176. package/dist/theme/contrast.js.map +1 -1
  177. package/dist/theme/derive.d.ts +4 -4
  178. package/dist/theme/derive.d.ts.map +1 -1
  179. package/dist/theme/derive.js +21 -22
  180. package/dist/theme/derive.js.map +1 -1
  181. package/dist/theme/fonts.d.ts +19 -0
  182. package/dist/theme/fonts.d.ts.map +1 -0
  183. package/dist/theme/fonts.js +74 -0
  184. package/dist/theme/fonts.js.map +1 -0
  185. package/dist/theme/identity.d.ts +83 -0
  186. package/dist/theme/identity.d.ts.map +1 -0
  187. package/dist/theme/identity.js +128 -0
  188. package/dist/theme/identity.js.map +1 -0
  189. package/dist/theme/kit.d.ts +9 -9
  190. package/dist/theme/kit.d.ts.map +1 -1
  191. package/dist/theme/kit.js +15 -15
  192. package/dist/theme/kit.js.map +1 -1
  193. package/dist/theme/layers.d.ts +2 -2
  194. package/dist/theme/layers.d.ts.map +1 -1
  195. package/dist/theme/layers.js +2 -2
  196. package/dist/theme/layers.js.map +1 -1
  197. package/dist/theme/look.d.ts +27 -7
  198. package/dist/theme/look.d.ts.map +1 -1
  199. package/dist/theme/look.js +30 -6
  200. package/dist/theme/look.js.map +1 -1
  201. package/dist/theme/marks.d.ts +28 -0
  202. package/dist/theme/marks.d.ts.map +1 -0
  203. package/dist/theme/marks.js +237 -0
  204. package/dist/theme/marks.js.map +1 -0
  205. package/dist/theme/palettes.d.ts +15 -7
  206. package/dist/theme/palettes.d.ts.map +1 -1
  207. package/dist/theme/palettes.js +61 -53
  208. package/dist/theme/palettes.js.map +1 -1
  209. package/dist/theme/types.d.ts +38 -6
  210. package/dist/theme/types.d.ts.map +1 -1
  211. package/dist/theme/types.js.map +1 -1
  212. package/dist/validate-graph.js +2 -2
  213. package/dist/version.d.ts +1 -1
  214. package/dist/version.js +1 -1
  215. package/dist/watched.js +8 -8
  216. package/package.json +1 -1
@@ -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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"}
@@ -8,23 +8,31 @@ import type { Scheme, ThemeTokens } from "./types.js";
8
8
  * base to build on without reaching into the UI package. A theme is a
9
9
  * declaration, and declarations live here.
10
10
  *
11
+ * Both are built on Graview's identity (`GRAVIEW_COLORS`, the design kit's
12
+ * revision 03): paper and reading ink, with En Dash navy as the accent in
13
+ * daylight. Turquoise is in neither: it is the symbol's point, a fill and
14
+ * never a word, and nothing a scheme draws depends on it.
15
+ *
11
16
  * Two schemes, and they are not inversions of each other. Depth is the thing
12
17
  * being drawn, and depth behaves differently in the two:
13
18
  *
14
- * - **Dark** is a lit control surface. Things at depth lose luminance and
15
- * dissolve into the ground; the accent reads as light, and separation comes
16
- * from glow and a lit edge.
19
+ * - **Dark** is a lit control surface on a deep navy. Things at depth lose
20
+ * luminance and dissolve into the ground; the accent is the navy's own hue
21
+ * made light, so it reads as light rather than as paint, and separation
22
+ * comes from a lit edge.
17
23
  * - **Light** is daylight and paper. Things at depth lose CONTRAST and gain
18
24
  * haze — real atmospheric perspective — and separation comes from soft cast
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.
25
+ * shadow, the way objects on a desk separate.
26
+ *
27
+ * Neither paints a wash or a glow behind the scene: the ground is a ground,
28
+ * and the scene standing on it is the picture.
21
29
  *
22
- * One rule holds across both: **secondary text is a colour, never an
30
+ * One rule holds across both: **secondary text is a color, never an
23
31
  * opacity.** Opacity composites against whatever is behind and fails contrast
24
32
  * silently. `checkContrast` measures every pair on both, and axe-core checks
25
33
  * the rendered result on every run of the a11y harness.
26
34
  */
27
- /** A lit control surface. */
35
+ /** A lit control surface, on navy. */
28
36
  export declare const DARK: ThemeTokens;
29
37
  /** Daylight and paper. */
30
38
  export declare const LIGHT: ThemeTokens;
@@ -1 +1 @@
1
- {"version":3,"file":"palettes.d.ts","sourceRoot":"","sources":["../../src/theme/palettes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,6BAA6B;AAC7B,eAAO,MAAM,IAAI,EAAE,WAiClB,CAAC;AAEF,0BAA0B;AAC1B,eAAO,MAAM,KAAK,EAAE,WAsCnB,CAAC;AAGF,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAgC,CAAC"}
1
+ {"version":3,"file":"palettes.d.ts","sourceRoot":"","sources":["../../src/theme/palettes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,sCAAsC;AACtC,eAAO,MAAM,IAAI,EAAE,WAkClB,CAAC;AAEF,0BAA0B;AAC1B,eAAO,MAAM,KAAK,EAAE,WAkCnB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAgC,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { GRAVIEW_COLORS } from "./identity.js";
1
2
  /**
2
3
  * The two the framework ships with, as DATA.
3
4
  *
@@ -7,91 +8,98 @@
7
8
  * base to build on without reaching into the UI package. A theme is a
8
9
  * declaration, and declarations live here.
9
10
  *
11
+ * Both are built on Graview's identity (`GRAVIEW_COLORS`, the design kit's
12
+ * revision 03): paper and reading ink, with En Dash navy as the accent in
13
+ * daylight. Turquoise is in neither: it is the symbol's point, a fill and
14
+ * never a word, and nothing a scheme draws depends on it.
15
+ *
10
16
  * Two schemes, and they are not inversions of each other. Depth is the thing
11
17
  * being drawn, and depth behaves differently in the two:
12
18
  *
13
- * - **Dark** is a lit control surface. Things at depth lose luminance and
14
- * dissolve into the ground; the accent reads as light, and separation comes
15
- * from glow and a lit edge.
19
+ * - **Dark** is a lit control surface on a deep navy. Things at depth lose
20
+ * luminance and dissolve into the ground; the accent is the navy's own hue
21
+ * made light, so it reads as light rather than as paint, and separation
22
+ * comes from a lit edge.
16
23
  * - **Light** is daylight and paper. Things at depth lose CONTRAST and gain
17
24
  * haze — real atmospheric perspective — and separation comes from soft cast
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.
25
+ * shadow, the way objects on a desk separate.
26
+ *
27
+ * Neither paints a wash or a glow behind the scene: the ground is a ground,
28
+ * and the scene standing on it is the picture.
20
29
  *
21
- * One rule holds across both: **secondary text is a colour, never an
30
+ * One rule holds across both: **secondary text is a color, never an
22
31
  * opacity.** Opacity composites against whatever is behind and fails contrast
23
32
  * silently. `checkContrast` measures every pair on both, and axe-core checks
24
33
  * the rendered result on every run of the a11y harness.
25
34
  */
26
- /** A lit control surface. */
35
+ /** A lit control surface, on navy. */
27
36
  export const DARK = {
28
- // Not black: a deep blue-green that lets the accent read as light rather
29
- // than as paint.
30
- ground: "#080d12",
31
- groundDeep: "#04070a",
32
- wash: "radial-gradient(120% 80% at 50% -10%, var(--graview-glow) 0%, transparent 60%), " +
33
- "radial-gradient(90% 60% at 12% 108%, rgba(111,220,234,0.10) 0%, transparent 62%)",
37
+ // Not black: the identity's navy taken down to a ground, so a block's hue
38
+ // reads as light on it.
39
+ ground: "#0a0f1f",
40
+ groundDeep: "#060914",
41
+ wash: "none",
34
42
  // Nearly opaque, by necessity as much as taste: a captured subtree has
35
43
  // nothing behind it, so `backdrop-filter` is a no-op and a translucent fill
36
44
  // composites against transparency.
37
- panel: "rgba(20, 31, 39, 0.94)",
38
- panelMuted: "rgba(15, 23, 30, 0.92)",
39
- panelWarning: "rgba(44, 30, 17, 0.94)",
40
- edge: "rgba(126, 196, 214, 0.20)",
41
- edgeBright: "rgba(126, 220, 232, 0.55)",
42
- ink: "#e8f3f6",
43
- inkMuted: "#9fb6bf",
44
- inkFaint: "#8aa3ad",
45
- accent: "#6fdcea",
46
- accentDim: "rgba(111, 220, 234, 0.35)",
47
- accentInk: "#06232a",
45
+ panel: "rgba(19, 27, 52, 0.96)",
46
+ panelMuted: "rgba(14, 21, 42, 0.94)",
47
+ panelWarning: "rgba(48, 33, 18, 0.95)",
48
+ edge: "rgba(164, 178, 222, 0.18)",
49
+ edgeBright: "rgba(154, 171, 255, 0.6)",
50
+ ink: "#eef0f6",
51
+ inkMuted: "#aab2c6",
52
+ inkFaint: "#97a0b6",
53
+ // The navy's own hue, lightened until it reads as light: 7.8:1 on the
54
+ // panel, and the navy itself is the text on it (7.3:1).
55
+ accent: "#9aabff",
56
+ accentDim: "rgba(154, 171, 255, 0.32)",
57
+ accentInk: GRAVIEW_COLORS.navy,
48
58
  warn: "#f0a868",
49
59
  good: "#8fdcaa",
50
60
  bad: "#ffa3a3",
51
- glow: "rgba(111, 220, 234, 0.28)",
52
- bar: "linear-gradient(rgba(10,16,21,0.92), rgba(6,10,14,0.78))",
53
- float: "linear-gradient(rgba(14,22,29,0.96), rgba(8,13,18,0.97))",
54
- liftLow: "0 18px 50px -26px #000, inset 0 1px 0 rgba(126,196,214,0.20)",
55
- liftHigh: "0 30px 70px -30px #000",
61
+ glow: "rgba(154, 171, 255, 0.18)",
62
+ bar: "rgba(10, 15, 31, 0.96)",
63
+ // No lighter than the panel: an accent derived to read on the panel reads here too.
64
+ float: "rgba(16, 23, 45, 0.98)",
65
+ liftLow: "0 14px 36px -22px #000",
66
+ liftHigh: "0 28px 64px -30px #000",
56
67
  tintAlpha: 0.2,
57
68
  tintLightness: 52,
58
69
  gridAlpha: 0.35,
59
70
  };
60
71
  /** Daylight and paper. */
61
72
  export const LIGHT = {
62
- // Warm off-white rather than pure white: pure white under a full-bleed
63
- // scene glares, and paper is never #fff.
64
- ground: "#f6f4f0",
65
- groundDeep: "#efece6",
66
- wash: "radial-gradient(120% 80% at 50% -20%, rgba(255,255,255,0.9) 0%, transparent 58%), " +
67
- "radial-gradient(80% 60% at 92% 104%, rgba(12,110,120,0.06) 0%, transparent 60%)",
73
+ // The identity's paper: warm off-white, because pure white under a
74
+ // full-bleed scene glares.
75
+ ground: GRAVIEW_COLORS.paper,
76
+ groundDeep: "#efefe8",
77
+ wash: "none",
68
78
  panel: "#ffffff",
69
- panelMuted: "#faf8f5",
79
+ panelMuted: "#fafaf6",
70
80
  panelWarning: "#fdf4ea",
71
- edge: "rgba(24, 34, 38, 0.10)",
81
+ edge: "rgba(24, 33, 58, 0.12)",
72
82
  /*
73
- * 0.67, not 0.42. A lit edge is not text and still owes 3:1 — an outline
74
- * nobody can see is a panel with no edge — and at 0.42 over white this read
75
- * at 1.93:1. Found by pointing the framework's own contrast check at the
76
- * framework's own palette, which is the argument for having one.
83
+ * A lit edge is not text and still owes 3:1 — an outline nobody can see is
84
+ * a panel with no edge. Navy at 0.6 over white clears it.
77
85
  */
78
- edgeBright: "rgba(12, 110, 120, 0.67)",
79
- ink: "#15201f",
80
- // Both clear 4.5:1 on white and on the muted panel.
81
- inkMuted: "#54605f",
82
- inkFaint: "#67716f",
83
- accent: "#0c6e78",
84
- accentDim: "rgba(12, 110, 120, 0.22)",
86
+ edgeBright: "rgba(0, 23, 105, 0.6)",
87
+ ink: GRAVIEW_COLORS.ink,
88
+ // Both clear 4.5:1 on white, on the muted panel and on paper.
89
+ inkMuted: GRAVIEW_COLORS.muted,
90
+ inkFaint: "#626b7d",
91
+ accent: GRAVIEW_COLORS.navy,
92
+ accentDim: "rgba(0, 23, 105, 0.16)",
85
93
  accentInk: "#ffffff",
86
94
  warn: "#9a5312",
87
95
  good: "#1b6436",
88
96
  bad: "#a1232d",
89
- glow: "rgba(12, 110, 120, 0.10)",
90
- bar: "linear-gradient(rgba(255,255,255,0.96), rgba(250,248,245,0.86))",
91
- float: "linear-gradient(#ffffff, #fcfbf9)",
97
+ glow: "rgba(0, 23, 105, 0.08)",
98
+ bar: "rgba(255, 255, 255, 0.96)",
99
+ float: "#ffffff",
92
100
  // Layered, short-then-long: how something actually casts on a desk.
93
- liftLow: "0 1px 2px rgba(20,30,32,0.06), 0 8px 24px -12px rgba(20,30,32,0.18)",
94
- liftHigh: "0 2px 6px rgba(20,30,32,0.08), 0 28px 60px -24px rgba(20,30,32,0.28)",
101
+ liftLow: "0 1px 2px rgba(24,33,58,0.06), 0 8px 24px -12px rgba(24,33,58,0.16)",
102
+ liftHigh: "0 2px 6px rgba(24,33,58,0.08), 0 24px 56px -24px rgba(24,33,58,0.26)",
95
103
  tintAlpha: 0.16,
96
104
  tintLightness: 46,
97
105
  gridAlpha: 0.5,
@@ -1 +1 @@
1
- {"version":3,"file":"palettes.js","sourceRoot":"","sources":["../../src/theme/palettes.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,IAAI,GAAgB;IAC/B,yEAAyE;IACzE,iBAAiB;IACjB,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE,SAAS;IACrB,IAAI,EACF,kFAAkF;QAClF,kFAAkF;IACpF,uEAAuE;IACvE,4EAA4E;IAC5E,mCAAmC;IACnC,KAAK,EAAE,wBAAwB;IAC/B,UAAU,EAAE,wBAAwB;IACpC,YAAY,EAAE,wBAAwB;IACtC,IAAI,EAAE,2BAA2B;IACjC,UAAU,EAAE,2BAA2B;IACvC,GAAG,EAAE,SAAS;IACd,QAAQ,EAAE,SAAS;IACnB,QAAQ,EAAE,SAAS;IACnB,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,2BAA2B;IACtC,SAAS,EAAE,SAAS;IACpB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,2BAA2B;IACjC,GAAG,EAAE,0DAA0D;IAC/D,KAAK,EAAE,0DAA0D;IACjE,OAAO,EAAE,8DAA8D;IACvE,QAAQ,EAAE,wBAAwB;IAClC,SAAS,EAAE,GAAG;IACd,aAAa,EAAE,EAAE;IACjB,SAAS,EAAE,IAAI;CAChB,CAAC;AAEF,0BAA0B;AAC1B,MAAM,CAAC,MAAM,KAAK,GAAgB;IAChC,uEAAuE;IACvE,yCAAyC;IACzC,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE,SAAS;IACrB,IAAI,EACF,oFAAoF;QACpF,iFAAiF;IACnF,KAAK,EAAE,SAAS;IAChB,UAAU,EAAE,SAAS;IACrB,YAAY,EAAE,SAAS;IACvB,IAAI,EAAE,wBAAwB;IAC9B;;;;;OAKG;IACH,UAAU,EAAE,0BAA0B;IACtC,GAAG,EAAE,SAAS;IACd,oDAAoD;IACpD,QAAQ,EAAE,SAAS;IACnB,QAAQ,EAAE,SAAS;IACnB,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,0BAA0B;IACrC,SAAS,EAAE,SAAS;IACpB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,0BAA0B;IAChC,GAAG,EAAE,iEAAiE;IACtE,KAAK,EAAE,mCAAmC;IAC1C,oEAAoE;IACpE,OAAO,EAAE,qEAAqE;IAC9E,QAAQ,EAAE,sEAAsE;IAChF,SAAS,EAAE,IAAI;IACf,aAAa,EAAE,EAAE;IACjB,SAAS,EAAE,GAAG;CACf,CAAC;AAGF,MAAM,CAAC,MAAM,OAAO,GAAgC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"palettes.js","sourceRoot":"","sources":["../../src/theme/palettes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,sCAAsC;AACtC,MAAM,CAAC,MAAM,IAAI,GAAgB;IAC/B,0EAA0E;IAC1E,wBAAwB;IACxB,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE,SAAS;IACrB,IAAI,EAAE,MAAM;IACZ,uEAAuE;IACvE,4EAA4E;IAC5E,mCAAmC;IACnC,KAAK,EAAE,wBAAwB;IAC/B,UAAU,EAAE,wBAAwB;IACpC,YAAY,EAAE,wBAAwB;IACtC,IAAI,EAAE,2BAA2B;IACjC,UAAU,EAAE,0BAA0B;IACtC,GAAG,EAAE,SAAS;IACd,QAAQ,EAAE,SAAS;IACnB,QAAQ,EAAE,SAAS;IACnB,sEAAsE;IACtE,wDAAwD;IACxD,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,2BAA2B;IACtC,SAAS,EAAE,cAAc,CAAC,IAAI;IAC9B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,2BAA2B;IACjC,GAAG,EAAE,wBAAwB;IAC7B,oFAAoF;IACpF,KAAK,EAAE,wBAAwB;IAC/B,OAAO,EAAE,wBAAwB;IACjC,QAAQ,EAAE,wBAAwB;IAClC,SAAS,EAAE,GAAG;IACd,aAAa,EAAE,EAAE;IACjB,SAAS,EAAE,IAAI;CAChB,CAAC;AAEF,0BAA0B;AAC1B,MAAM,CAAC,MAAM,KAAK,GAAgB;IAChC,mEAAmE;IACnE,2BAA2B;IAC3B,MAAM,EAAE,cAAc,CAAC,KAAK;IAC5B,UAAU,EAAE,SAAS;IACrB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,SAAS;IAChB,UAAU,EAAE,SAAS;IACrB,YAAY,EAAE,SAAS;IACvB,IAAI,EAAE,wBAAwB;IAC9B;;;OAGG;IACH,UAAU,EAAE,uBAAuB;IACnC,GAAG,EAAE,cAAc,CAAC,GAAG;IACvB,8DAA8D;IAC9D,QAAQ,EAAE,cAAc,CAAC,KAAK;IAC9B,QAAQ,EAAE,SAAS;IACnB,MAAM,EAAE,cAAc,CAAC,IAAI;IAC3B,SAAS,EAAE,wBAAwB;IACnC,SAAS,EAAE,SAAS;IACpB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,wBAAwB;IAC9B,GAAG,EAAE,2BAA2B;IAChC,KAAK,EAAE,SAAS;IAChB,oEAAoE;IACpE,OAAO,EAAE,qEAAqE;IAC9E,QAAQ,EAAE,sEAAsE;IAChF,SAAS,EAAE,IAAI;IACf,aAAa,EAAE,EAAE;IACjB,SAAS,EAAE,GAAG;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAgC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC"}
@@ -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;
@@ -75,13 +97,23 @@ export interface Brand {
75
97
  readonly display?: string;
76
98
  /** Code, ids, anything that must align in columns. */
77
99
  readonly mono?: string;
100
+ /**
101
+ * The three weights (100–900): headings, reading text and action
102
+ * labels. Absent, the identity's 550, 450 and 600 on the framework's
103
+ * own face, and 600, 400 and 600 on a face this brand names.
104
+ */
105
+ readonly weights?: {
106
+ readonly display?: number;
107
+ readonly body?: number;
108
+ readonly label?: number;
109
+ };
78
110
  };
79
111
  /**
80
112
  * How square and how tight this product is.
81
113
  *
82
114
  * The third axis of an identity, and the one that was missing: with only a
83
115
  * 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
116
+ * application four times in different colors. A bid desk is square and
85
117
  * dense; a household planner is round and roomy. Neither is a component
86
118
  * change — both are one number.
87
119
  */
@@ -96,7 +128,7 @@ export interface Brand {
96
128
  *
97
129
  * The default is a stable hash — fine for "each kind looks like itself",
98
130
  * 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,
131
+ * here it reaches every surface that colors by kind (chips, districts,
100
132
  * calendars) through one lookup, and `graview check` refuses a key that
101
133
  * names no declared kind — a silent typo would just quietly hash instead.
102
134
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/theme/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C;;;;;;;;;;GAUG;AACH,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,gDAAgD;IAChD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,KAAK;IACpB,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE;QACpB,4DAA4D;QAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACvB,iEAAiE;QACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAC1B,sDAAsD;QACtD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF;;;;;;;;OAQG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE;QACf,0EAA0E;QAC1E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QACzB,4DAA4D;QAC5D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF;;;;;;;;OAQG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IACxD;;;;OAIG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC;IAC5B;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,WAAW,CAAC;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,WAAW,CAAC;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,WAAW,CAAC;IAClC,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,UAAU,EAAE,SAAS,QAAQ,EA8BzC,CAAC"}
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.15";
2
+ export declare const FRAMEWORK_VERSION = "0.1.17";
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.15";
2
+ export const FRAMEWORK_VERSION = "0.1.17";
3
3
  //# sourceMappingURL=version.js.map