@joewinke/jatui 0.37.0 → 0.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) hide show
  1. package/dist/artifact-blocks/AttachmentChip.svelte +66 -0
  2. package/dist/artifact-blocks/AttachmentChip.svelte.d.ts +7 -0
  3. package/dist/artifact-blocks/BlockComments.svelte +309 -0
  4. package/dist/artifact-blocks/BlockComments.svelte.d.ts +33 -0
  5. package/dist/artifact-blocks/BlockRenderer.svelte +674 -0
  6. package/dist/artifact-blocks/BlockRenderer.svelte.d.ts +55 -0
  7. package/dist/artifact-blocks/BlockVerdict.svelte +151 -0
  8. package/dist/artifact-blocks/BlockVerdict.svelte.d.ts +13 -0
  9. package/dist/artifact-blocks/BlocksArtifactView.svelte +1616 -0
  10. package/dist/artifact-blocks/BlocksArtifactView.svelte.d.ts +113 -0
  11. package/dist/artifact-blocks/CONTRACT.md +225 -0
  12. package/dist/artifact-blocks/CommentPill.svelte +49 -0
  13. package/dist/artifact-blocks/CommentPill.svelte.d.ts +16 -0
  14. package/dist/artifact-blocks/FoldedRounds.svelte +95 -0
  15. package/dist/artifact-blocks/FoldedRounds.svelte.d.ts +9 -0
  16. package/dist/artifact-blocks/Glyph.svelte +54 -0
  17. package/dist/artifact-blocks/Glyph.svelte.d.ts +10 -0
  18. package/dist/artifact-blocks/HistoryScrubber.svelte +500 -0
  19. package/dist/artifact-blocks/HistoryScrubber.svelte.d.ts +15 -0
  20. package/dist/artifact-blocks/Markdown.svelte +186 -0
  21. package/dist/artifact-blocks/Markdown.svelte.d.ts +30 -0
  22. package/dist/artifact-blocks/NoteComposer.svelte +31 -0
  23. package/dist/artifact-blocks/NoteComposer.svelte.d.ts +8 -0
  24. package/dist/artifact-blocks/PlainComposer.svelte +200 -0
  25. package/dist/artifact-blocks/PlainComposer.svelte.d.ts +15 -0
  26. package/dist/artifact-blocks/SectionTools.svelte +102 -0
  27. package/dist/artifact-blocks/SectionTools.svelte.d.ts +19 -0
  28. package/dist/artifact-blocks/adapter.d.ts +13 -0
  29. package/dist/artifact-blocks/adapter.js +31 -0
  30. package/dist/artifact-blocks/autoSend.d.ts +49 -0
  31. package/dist/artifact-blocks/autoSend.js +103 -0
  32. package/dist/artifact-blocks/blocks/actions/ActionsBlock.svelte +557 -0
  33. package/dist/artifact-blocks/blocks/actions/ActionsBlock.svelte.d.ts +48 -0
  34. package/dist/artifact-blocks/blocks/actions/block.d.ts +8 -0
  35. package/dist/artifact-blocks/blocks/actions/block.js +74 -0
  36. package/dist/artifact-blocks/blocks/actions/requests.d.ts +62 -0
  37. package/dist/artifact-blocks/blocks/actions/requests.js +26 -0
  38. package/dist/artifact-blocks/blocks/actions/schema.d.ts +168 -0
  39. package/dist/artifact-blocks/blocks/actions/schema.js +253 -0
  40. package/dist/artifact-blocks/blocks/callout/CalloutBlock.svelte +779 -0
  41. package/dist/artifact-blocks/blocks/callout/CalloutBlock.svelte.d.ts +40 -0
  42. package/dist/artifact-blocks/blocks/callout/block.d.ts +7 -0
  43. package/dist/artifact-blocks/blocks/callout/block.js +39 -0
  44. package/dist/artifact-blocks/blocks/callout/schema.d.ts +72 -0
  45. package/dist/artifact-blocks/blocks/callout/schema.js +115 -0
  46. package/dist/artifact-blocks/blocks/chart/ChartBlock.svelte +875 -0
  47. package/dist/artifact-blocks/blocks/chart/ChartBlock.svelte.d.ts +59 -0
  48. package/dist/artifact-blocks/blocks/chart/block.d.ts +9 -0
  49. package/dist/artifact-blocks/blocks/chart/block.js +70 -0
  50. package/dist/artifact-blocks/blocks/chart/schema.d.ts +171 -0
  51. package/dist/artifact-blocks/blocks/chart/schema.js +498 -0
  52. package/dist/artifact-blocks/blocks/chart/thumb.d.ts +2 -0
  53. package/dist/artifact-blocks/blocks/chart/thumb.js +201 -0
  54. package/dist/artifact-blocks/blocks/checklist/ChecklistBlock.svelte +1048 -0
  55. package/dist/artifact-blocks/blocks/checklist/ChecklistBlock.svelte.d.ts +16 -0
  56. package/dist/artifact-blocks/blocks/checklist/Icon.svelte +105 -0
  57. package/dist/artifact-blocks/blocks/checklist/Icon.svelte.d.ts +17 -0
  58. package/dist/artifact-blocks/blocks/checklist/block.d.ts +10 -0
  59. package/dist/artifact-blocks/blocks/checklist/block.js +63 -0
  60. package/dist/artifact-blocks/blocks/checklist/itemReview.d.ts +16 -0
  61. package/dist/artifact-blocks/blocks/checklist/itemReview.js +63 -0
  62. package/dist/artifact-blocks/blocks/checklist/labels.d.ts +62 -0
  63. package/dist/artifact-blocks/blocks/checklist/labels.js +96 -0
  64. package/dist/artifact-blocks/blocks/checklist/retest.d.ts +43 -0
  65. package/dist/artifact-blocks/blocks/checklist/retest.js +68 -0
  66. package/dist/artifact-blocks/blocks/checklist/schema.d.ts +84 -0
  67. package/dist/artifact-blocks/blocks/checklist/schema.js +91 -0
  68. package/dist/artifact-blocks/blocks/code/CodeBlock.svelte +128 -0
  69. package/dist/artifact-blocks/blocks/code/CodeBlock.svelte.d.ts +12 -0
  70. package/dist/artifact-blocks/blocks/code/block.d.ts +8 -0
  71. package/dist/artifact-blocks/blocks/code/block.js +31 -0
  72. package/dist/artifact-blocks/blocks/code/highlight.d.ts +34 -0
  73. package/dist/artifact-blocks/blocks/code/highlight.js +280 -0
  74. package/dist/artifact-blocks/blocks/code/schema.d.ts +32 -0
  75. package/dist/artifact-blocks/blocks/code/schema.js +39 -0
  76. package/dist/artifact-blocks/blocks/collage/CollageBlock.svelte +290 -0
  77. package/dist/artifact-blocks/blocks/collage/CollageBlock.svelte.d.ts +29 -0
  78. package/dist/artifact-blocks/blocks/collage/block.d.ts +9 -0
  79. package/dist/artifact-blocks/blocks/collage/block.js +29 -0
  80. package/dist/artifact-blocks/blocks/collage/schema.d.ts +52 -0
  81. package/dist/artifact-blocks/blocks/collage/schema.js +86 -0
  82. package/dist/artifact-blocks/blocks/compare/CompareBlock.svelte +484 -0
  83. package/dist/artifact-blocks/blocks/compare/CompareBlock.svelte.d.ts +25 -0
  84. package/dist/artifact-blocks/blocks/compare/block.d.ts +9 -0
  85. package/dist/artifact-blocks/blocks/compare/block.js +32 -0
  86. package/dist/artifact-blocks/blocks/compare/schema.d.ts +74 -0
  87. package/dist/artifact-blocks/blocks/compare/schema.js +148 -0
  88. package/dist/artifact-blocks/blocks/diagram/DiagramBlock.svelte +392 -0
  89. package/dist/artifact-blocks/blocks/diagram/DiagramBlock.svelte.d.ts +30 -0
  90. package/dist/artifact-blocks/blocks/diagram/block.d.ts +9 -0
  91. package/dist/artifact-blocks/blocks/diagram/block.js +50 -0
  92. package/dist/artifact-blocks/blocks/diagram/constants.d.ts +48 -0
  93. package/dist/artifact-blocks/blocks/diagram/constants.js +53 -0
  94. package/dist/artifact-blocks/blocks/diagram/schema.d.ts +161 -0
  95. package/dist/artifact-blocks/blocks/diagram/schema.js +621 -0
  96. package/dist/artifact-blocks/blocks/diagram/thumb.d.ts +2 -0
  97. package/dist/artifact-blocks/blocks/diagram/thumb.js +157 -0
  98. package/dist/artifact-blocks/blocks/diagram/types.d.ts +74 -0
  99. package/dist/artifact-blocks/blocks/diagram/types.js +1 -0
  100. package/dist/artifact-blocks/blocks/diff/DiffBlock.svelte +81 -0
  101. package/dist/artifact-blocks/blocks/diff/DiffBlock.svelte.d.ts +10 -0
  102. package/dist/artifact-blocks/blocks/diff/block.d.ts +7 -0
  103. package/dist/artifact-blocks/blocks/diff/block.js +36 -0
  104. package/dist/artifact-blocks/blocks/diff/schema.d.ts +18 -0
  105. package/dist/artifact-blocks/blocks/diff/schema.js +35 -0
  106. package/dist/artifact-blocks/blocks/diff-review/DiffReviewBlock.svelte +1055 -0
  107. package/dist/artifact-blocks/blocks/diff-review/DiffReviewBlock.svelte.d.ts +5 -0
  108. package/dist/artifact-blocks/blocks/diff-review/block.d.ts +15 -0
  109. package/dist/artifact-blocks/blocks/diff-review/block.js +64 -0
  110. package/dist/artifact-blocks/blocks/diff-review/decisions.d.ts +57 -0
  111. package/dist/artifact-blocks/blocks/diff-review/decisions.js +80 -0
  112. package/dist/artifact-blocks/blocks/diff-review/schema.d.ts +13 -0
  113. package/dist/artifact-blocks/blocks/diff-review/schema.js +84 -0
  114. package/dist/artifact-blocks/blocks/diff-review/types.d.ts +35 -0
  115. package/dist/artifact-blocks/blocks/diff-review/types.js +1 -0
  116. package/dist/artifact-blocks/blocks/explainer/ExplainerBlock.svelte +145 -0
  117. package/dist/artifact-blocks/blocks/explainer/ExplainerBlock.svelte.d.ts +5 -0
  118. package/dist/artifact-blocks/blocks/explainer/block.d.ts +8 -0
  119. package/dist/artifact-blocks/blocks/explainer/block.js +21 -0
  120. package/dist/artifact-blocks/blocks/explainer/schema.d.ts +26 -0
  121. package/dist/artifact-blocks/blocks/explainer/schema.js +69 -0
  122. package/dist/artifact-blocks/blocks/group-content.d.ts +10 -0
  123. package/dist/artifact-blocks/blocks/group-content.js +16 -0
  124. package/dist/artifact-blocks/blocks/group-data.d.ts +10 -0
  125. package/dist/artifact-blocks/blocks/group-data.js +7 -0
  126. package/dist/artifact-blocks/blocks/group-review.d.ts +10 -0
  127. package/dist/artifact-blocks/blocks/group-review.js +12 -0
  128. package/dist/artifact-blocks/blocks/group-visual.d.ts +17 -0
  129. package/dist/artifact-blocks/blocks/group-visual.js +14 -0
  130. package/dist/artifact-blocks/blocks/map/MapBlock.svelte +413 -0
  131. package/dist/artifact-blocks/blocks/map/MapBlock.svelte.d.ts +53 -0
  132. package/dist/artifact-blocks/blocks/map/block.d.ts +9 -0
  133. package/dist/artifact-blocks/blocks/map/block.js +62 -0
  134. package/dist/artifact-blocks/blocks/map/schema.d.ts +123 -0
  135. package/dist/artifact-blocks/blocks/map/schema.js +113 -0
  136. package/dist/artifact-blocks/blocks/map/thumb.d.ts +2 -0
  137. package/dist/artifact-blocks/blocks/map/thumb.js +69 -0
  138. package/dist/artifact-blocks/blocks/markdown/MarkdownBlock.svelte +33 -0
  139. package/dist/artifact-blocks/blocks/markdown/MarkdownBlock.svelte.d.ts +15 -0
  140. package/dist/artifact-blocks/blocks/markdown/block.d.ts +7 -0
  141. package/dist/artifact-blocks/blocks/markdown/block.js +28 -0
  142. package/dist/artifact-blocks/blocks/markdown/render.d.ts +17 -0
  143. package/dist/artifact-blocks/blocks/markdown/render.js +115 -0
  144. package/dist/artifact-blocks/blocks/markdown/schema.d.ts +10 -0
  145. package/dist/artifact-blocks/blocks/markdown/schema.js +23 -0
  146. package/dist/artifact-blocks/blocks/media-picker/MediaPickerBlock.svelte +2112 -0
  147. package/dist/artifact-blocks/blocks/media-picker/MediaPickerBlock.svelte.d.ts +5 -0
  148. package/dist/artifact-blocks/blocks/media-picker/block.d.ts +24 -0
  149. package/dist/artifact-blocks/blocks/media-picker/block.js +137 -0
  150. package/dist/artifact-blocks/blocks/media-picker/choices.d.ts +28 -0
  151. package/dist/artifact-blocks/blocks/media-picker/choices.js +35 -0
  152. package/dist/artifact-blocks/blocks/media-picker/decisions.d.ts +51 -0
  153. package/dist/artifact-blocks/blocks/media-picker/decisions.js +75 -0
  154. package/dist/artifact-blocks/blocks/media-picker/schema.d.ts +7 -0
  155. package/dist/artifact-blocks/blocks/media-picker/schema.js +199 -0
  156. package/dist/artifact-blocks/blocks/media-picker/types.d.ts +92 -0
  157. package/dist/artifact-blocks/blocks/media-picker/types.js +1 -0
  158. package/dist/artifact-blocks/blocks/media-picker/versions.d.ts +51 -0
  159. package/dist/artifact-blocks/blocks/media-picker/versions.js +118 -0
  160. package/dist/artifact-blocks/blocks/mockup/MockupBlock.svelte +213 -0
  161. package/dist/artifact-blocks/blocks/mockup/MockupBlock.svelte.d.ts +5 -0
  162. package/dist/artifact-blocks/blocks/mockup/block.d.ts +26 -0
  163. package/dist/artifact-blocks/blocks/mockup/block.js +52 -0
  164. package/dist/artifact-blocks/blocks/mockup/doc.d.ts +24 -0
  165. package/dist/artifact-blocks/blocks/mockup/doc.js +44 -0
  166. package/dist/artifact-blocks/blocks/mockup/sandbox.d.ts +21 -0
  167. package/dist/artifact-blocks/blocks/mockup/sandbox.js +27 -0
  168. package/dist/artifact-blocks/blocks/mockup/schema.d.ts +7 -0
  169. package/dist/artifact-blocks/blocks/mockup/schema.js +90 -0
  170. package/dist/artifact-blocks/blocks/mockup/types.d.ts +36 -0
  171. package/dist/artifact-blocks/blocks/mockup/types.js +17 -0
  172. package/dist/artifact-blocks/blocks/program/ProgramBlock.svelte +359 -0
  173. package/dist/artifact-blocks/blocks/program/ProgramBlock.svelte.d.ts +32 -0
  174. package/dist/artifact-blocks/blocks/program/block.d.ts +35 -0
  175. package/dist/artifact-blocks/blocks/program/block.js +68 -0
  176. package/dist/artifact-blocks/blocks/program/schema.d.ts +132 -0
  177. package/dist/artifact-blocks/blocks/program/schema.js +268 -0
  178. package/dist/artifact-blocks/blocks/stats/StatsBlock.svelte +315 -0
  179. package/dist/artifact-blocks/blocks/stats/StatsBlock.svelte.d.ts +24 -0
  180. package/dist/artifact-blocks/blocks/stats/block.d.ts +7 -0
  181. package/dist/artifact-blocks/blocks/stats/block.js +49 -0
  182. package/dist/artifact-blocks/blocks/stats/schema.d.ts +82 -0
  183. package/dist/artifact-blocks/blocks/stats/schema.js +43 -0
  184. package/dist/artifact-blocks/blocks/stats/thumb.d.ts +2 -0
  185. package/dist/artifact-blocks/blocks/stats/thumb.js +102 -0
  186. package/dist/artifact-blocks/blocks/table/TableBlock.svelte +490 -0
  187. package/dist/artifact-blocks/blocks/table/TableBlock.svelte.d.ts +28 -0
  188. package/dist/artifact-blocks/blocks/table/block.d.ts +9 -0
  189. package/dist/artifact-blocks/blocks/table/block.js +100 -0
  190. package/dist/artifact-blocks/blocks/table/schema.d.ts +143 -0
  191. package/dist/artifact-blocks/blocks/table/schema.js +278 -0
  192. package/dist/artifact-blocks/blocks/timeline/TimelineBlock.svelte +347 -0
  193. package/dist/artifact-blocks/blocks/timeline/TimelineBlock.svelte.d.ts +42 -0
  194. package/dist/artifact-blocks/blocks/timeline/block.d.ts +9 -0
  195. package/dist/artifact-blocks/blocks/timeline/block.js +96 -0
  196. package/dist/artifact-blocks/blocks/timeline/constants.d.ts +26 -0
  197. package/dist/artifact-blocks/blocks/timeline/constants.js +27 -0
  198. package/dist/artifact-blocks/blocks/timeline/schema.d.ts +102 -0
  199. package/dist/artifact-blocks/blocks/timeline/schema.js +405 -0
  200. package/dist/artifact-blocks/blocks/timeline/thumb.d.ts +2 -0
  201. package/dist/artifact-blocks/blocks/timeline/thumb.js +117 -0
  202. package/dist/artifact-blocks/blocks/timeline/types.d.ts +66 -0
  203. package/dist/artifact-blocks/blocks/timeline/types.js +1 -0
  204. package/dist/artifact-blocks/blocks/transcript/TranscriptBlock.svelte +169 -0
  205. package/dist/artifact-blocks/blocks/transcript/TranscriptBlock.svelte.d.ts +26 -0
  206. package/dist/artifact-blocks/blocks/transcript/block.d.ts +9 -0
  207. package/dist/artifact-blocks/blocks/transcript/block.js +86 -0
  208. package/dist/artifact-blocks/blocks/transcript/schema.d.ts +114 -0
  209. package/dist/artifact-blocks/blocks/transcript/schema.js +126 -0
  210. package/dist/artifact-blocks/builtins.d.ts +40 -0
  211. package/dist/artifact-blocks/builtins.js +22 -0
  212. package/dist/artifact-blocks/contractBlocks.d.ts +92 -0
  213. package/dist/artifact-blocks/contractBlocks.js +279 -0
  214. package/dist/artifact-blocks/history.d.ts +140 -0
  215. package/dist/artifact-blocks/history.js +363 -0
  216. package/dist/artifact-blocks/index.d.ts +40 -0
  217. package/dist/artifact-blocks/index.js +46 -0
  218. package/dist/artifact-blocks/listen/context.d.ts +30 -0
  219. package/dist/artifact-blocks/listen/context.js +30 -0
  220. package/dist/artifact-blocks/liveData.d.ts +78 -0
  221. package/dist/artifact-blocks/liveData.js +137 -0
  222. package/dist/artifact-blocks/liveDataPoller.d.ts +41 -0
  223. package/dist/artifact-blocks/liveDataPoller.js +140 -0
  224. package/dist/artifact-blocks/openNav.d.ts +46 -0
  225. package/dist/artifact-blocks/openNav.js +106 -0
  226. package/dist/artifact-blocks/pageReviewKeys.d.ts +17 -0
  227. package/dist/artifact-blocks/pageReviewKeys.js +115 -0
  228. package/dist/artifact-blocks/params.d.ts +98 -0
  229. package/dist/artifact-blocks/params.js +159 -0
  230. package/dist/artifact-blocks/registry.d.ts +27 -0
  231. package/dist/artifact-blocks/registry.js +83 -0
  232. package/dist/artifact-blocks/review/BlockIcon.svelte +99 -0
  233. package/dist/artifact-blocks/review/BlockIcon.svelte.d.ts +17 -0
  234. package/dist/artifact-blocks/review/BulkRejectForm.svelte +94 -0
  235. package/dist/artifact-blocks/review/BulkRejectForm.svelte.d.ts +11 -0
  236. package/dist/artifact-blocks/review/BulkUndoBar.svelte +40 -0
  237. package/dist/artifact-blocks/review/BulkUndoBar.svelte.d.ts +9 -0
  238. package/dist/artifact-blocks/review/ItemNote.svelte +193 -0
  239. package/dist/artifact-blocks/review/ItemNote.svelte.d.ts +33 -0
  240. package/dist/artifact-blocks/review/NoteToggle.svelte +52 -0
  241. package/dist/artifact-blocks/review/NoteToggle.svelte.d.ts +12 -0
  242. package/dist/artifact-blocks/review/TeamChip.svelte +71 -0
  243. package/dist/artifact-blocks/review/TeamChip.svelte.d.ts +8 -0
  244. package/dist/artifact-blocks/review/attachments.d.ts +10 -0
  245. package/dist/artifact-blocks/review/attachments.js +37 -0
  246. package/dist/artifact-blocks/review/bulk.d.ts +52 -0
  247. package/dist/artifact-blocks/review/bulk.js +61 -0
  248. package/dist/artifact-blocks/review/itemReview.d.ts +33 -0
  249. package/dist/artifact-blocks/review/itemReview.js +112 -0
  250. package/dist/artifact-blocks/review/roundLines.d.ts +14 -0
  251. package/dist/artifact-blocks/review/roundLines.js +20 -0
  252. package/dist/artifact-blocks/review/rounds.d.ts +86 -0
  253. package/dist/artifact-blocks/review/rounds.js +302 -0
  254. package/dist/artifact-blocks/review/saver.d.ts +23 -0
  255. package/dist/artifact-blocks/review/saver.js +48 -0
  256. package/dist/artifact-blocks/review/team.d.ts +31 -0
  257. package/dist/artifact-blocks/review/team.js +42 -0
  258. package/dist/artifact-blocks/review/visualOrder.d.ts +29 -0
  259. package/dist/artifact-blocks/review/visualOrder.js +66 -0
  260. package/dist/artifact-blocks/review.d.ts +180 -0
  261. package/dist/artifact-blocks/review.js +716 -0
  262. package/dist/artifact-blocks/thumb-kit.d.ts +80 -0
  263. package/dist/artifact-blocks/thumb-kit.js +149 -0
  264. package/dist/artifact-blocks/types.d.ts +513 -0
  265. package/dist/artifact-blocks/types.js +1 -0
  266. package/package.json +11 -2
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Thumb drawing kit (mos-qkpva) — the shared vocabulary of the per-block
3
+ * thumbnail composers (blocks/<type>/thumb.ts) and their dispatcher
4
+ * (thumbnail-visual.ts).
5
+ *
6
+ * PURE and node-importable (the one-off backfill runs this chain straight
7
+ * from node): no svelte, no DOM, no `#lib/server`. The types are structural,
8
+ * not zod — each drawer validates its own block params against its block's
9
+ * schema before drawing, exactly like its Svelte component does.
10
+ *
11
+ * Colors are CONCRETE CSS values, not token classes: a thumbnail renders
12
+ * inside `<img src=data:…>` where no stylesheet exists. Opacity is a separate
13
+ * presentation attribute (fill-opacity / stroke-opacity), never color-mix,
14
+ * so the string rasterizes identically everywhere. They are resolved from
15
+ * the team's active theme (theme_settings light overrides) over the app.css
16
+ * default palette — see buildThumbPalette.
17
+ */
18
+ /** The palette a thumb composer draws with. Values are raw CSS color strings
19
+ * (hex or oklch) written into presentation attributes. */
20
+ export interface ThumbPalette {
21
+ /** base-100 — the frame's ground. */
22
+ bg: string;
23
+ /** base-content — text and strong strokes. */
24
+ ink: string;
25
+ primary: string;
26
+ secondary: string;
27
+ accent: string;
28
+ neutral: string;
29
+ info: string;
30
+ success: string;
31
+ warning: string;
32
+ error: string;
33
+ /** The --chart-series-1..6 contract (src/lib/theme-bridge/layerchart.css):
34
+ * series identity colors in the chart's order. */
35
+ series: string[];
36
+ }
37
+ /**
38
+ * The default (app.css light theme) palette, mirrored as concrete values.
39
+ * thumbnail-visual.test.ts asserts parity with src/app.css through the
40
+ * machine reader (scripts/lib/parse-app-css-theme.mjs) — edit app.css and
41
+ * the test fails until this table follows.
42
+ */
43
+ export declare const DEFAULT_THUMB_PALETTE: ThumbPalette;
44
+ /** Tone token → palette color (the blocks' shared toneSchema vocabulary);
45
+ * an unknown token lands on neutral, like the components' static maps. */
46
+ export declare function toneColor(palette: ThumbPalette, tone?: string): string;
47
+ /**
48
+ * Extract the light-mode override block from a stored theme_settings.overrides
49
+ * value. The runtime contract (themeCache.ts, the email themeResolver) keys
50
+ * overrides WITHOUT the leading `--`, grouped under light/dark — the same
51
+ * shape both callers of the composers read. Anything malformed yields {}.
52
+ */
53
+ export declare function extractLightOverrides(raw: unknown): Record<string, string>;
54
+ /**
55
+ * The palette a team's artifacts draw with: the active theme's light values
56
+ * over the app.css defaults. Never throws; a missing or non-color token
57
+ * (empty, or one that could break the XML — a quote or angle bracket) keeps
58
+ * the default. A broken theme must never take a publish down.
59
+ */
60
+ export declare function buildThumbPalette(overrides?: Record<string, string>): ThumbPalette;
61
+ /** The thumbnail frame (the task's fixed small size; the list cell is 64×40
62
+ * at the same 1.6:1 ratio, so object-fit: cover shows it uncropped). */
63
+ export declare const THUMB_W = 320;
64
+ export declare const THUMB_H = 200;
65
+ /** Round to one decimal — same convention as the block components. */
66
+ export declare const r1: (n: number) => number;
67
+ /** XML-escape text content / attribute values. */
68
+ export declare function escXml(s: string): string;
69
+ export interface TextOpts {
70
+ size: number;
71
+ fill: string;
72
+ opacity?: number;
73
+ weight?: number;
74
+ anchor?: "start" | "middle" | "end";
75
+ }
76
+ /** A plain <text> element. Presentation attributes only — no style attr
77
+ * (the SVG sanitizer forbids style; see sanitizeSvg). */
78
+ export declare function thumbText(x: number, y: number, s: string, o: TextOpts): string;
79
+ /** Clamp text to n characters with an ellipsis (labels are decorative here). */
80
+ export declare function thumbTruncate(s: string, n: number): string;
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Thumb drawing kit (mos-qkpva) — the shared vocabulary of the per-block
3
+ * thumbnail composers (blocks/<type>/thumb.ts) and their dispatcher
4
+ * (thumbnail-visual.ts).
5
+ *
6
+ * PURE and node-importable (the one-off backfill runs this chain straight
7
+ * from node): no svelte, no DOM, no `#lib/server`. The types are structural,
8
+ * not zod — each drawer validates its own block params against its block's
9
+ * schema before drawing, exactly like its Svelte component does.
10
+ *
11
+ * Colors are CONCRETE CSS values, not token classes: a thumbnail renders
12
+ * inside `<img src=data:…>` where no stylesheet exists. Opacity is a separate
13
+ * presentation attribute (fill-opacity / stroke-opacity), never color-mix,
14
+ * so the string rasterizes identically everywhere. They are resolved from
15
+ * the team's active theme (theme_settings light overrides) over the app.css
16
+ * default palette — see buildThumbPalette.
17
+ */
18
+ /**
19
+ * The default (app.css light theme) palette, mirrored as concrete values.
20
+ * thumbnail-visual.test.ts asserts parity with src/app.css through the
21
+ * machine reader (scripts/lib/parse-app-css-theme.mjs) — edit app.css and
22
+ * the test fails until this table follows.
23
+ */
24
+ export const DEFAULT_THUMB_PALETTE = {
25
+ bg: "#fefbf6",
26
+ ink: "#180042",
27
+ primary: "#180042",
28
+ secondary: "#c7b9f8",
29
+ accent: "#db2777",
30
+ neutral: "#180042",
31
+ info: "oklch(70% 0.2 220)",
32
+ success: "#37d399",
33
+ warning: "oklch(80% 0.25 80)",
34
+ error: "#f77272",
35
+ series: [
36
+ "#180042", // --chart-series-1: primary
37
+ "#c7b9f8", // --chart-series-2: secondary
38
+ "#db2777", // --chart-series-3: accent
39
+ "oklch(70% 0.2 220)", // --chart-series-4: info
40
+ "#37d399", // --chart-series-5: success
41
+ "oklch(80% 0.25 80)", // --chart-series-6: warning
42
+ ],
43
+ };
44
+ /** Tone token → palette color (the blocks' shared toneSchema vocabulary);
45
+ * an unknown token lands on neutral, like the components' static maps. */
46
+ export function toneColor(palette, tone) {
47
+ switch (tone) {
48
+ case "primary":
49
+ case "secondary":
50
+ case "accent":
51
+ case "info":
52
+ case "success":
53
+ case "warning":
54
+ case "error":
55
+ return palette[tone];
56
+ default:
57
+ return palette.neutral;
58
+ }
59
+ }
60
+ /**
61
+ * Extract the light-mode override block from a stored theme_settings.overrides
62
+ * value. The runtime contract (themeCache.ts, the email themeResolver) keys
63
+ * overrides WITHOUT the leading `--`, grouped under light/dark — the same
64
+ * shape both callers of the composers read. Anything malformed yields {}.
65
+ */
66
+ export function extractLightOverrides(raw) {
67
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw))
68
+ return {};
69
+ const light = raw.light;
70
+ if (typeof light !== "object" || light === null || Array.isArray(light))
71
+ return {};
72
+ const out = {};
73
+ for (const [k, v] of Object.entries(light)) {
74
+ if (typeof v === "string" && v.trim())
75
+ out[k] = v.trim();
76
+ }
77
+ return out;
78
+ }
79
+ /**
80
+ * The palette a team's artifacts draw with: the active theme's light values
81
+ * over the app.css defaults. Never throws; a missing or non-color token
82
+ * (empty, or one that could break the XML — a quote or angle bracket) keeps
83
+ * the default. A broken theme must never take a publish down.
84
+ */
85
+ export function buildThumbPalette(overrides) {
86
+ const ov = overrides ?? {};
87
+ const get = (key, fallback) => {
88
+ const v = ov[key];
89
+ if (typeof v === "string" && v && !/["'<>]/.test(v))
90
+ return v;
91
+ return fallback;
92
+ };
93
+ const primary = get("color-primary", DEFAULT_THUMB_PALETTE.primary);
94
+ const secondary = get("color-secondary", DEFAULT_THUMB_PALETTE.secondary);
95
+ const accent = get("color-accent", DEFAULT_THUMB_PALETTE.accent);
96
+ const info = get("color-info", DEFAULT_THUMB_PALETTE.info);
97
+ const success = get("color-success", DEFAULT_THUMB_PALETTE.success);
98
+ const warning = get("color-warning", DEFAULT_THUMB_PALETTE.warning);
99
+ return {
100
+ bg: get("color-base-100", DEFAULT_THUMB_PALETTE.bg),
101
+ ink: get("color-base-content", DEFAULT_THUMB_PALETTE.ink),
102
+ primary,
103
+ secondary,
104
+ accent,
105
+ neutral: get("color-neutral", DEFAULT_THUMB_PALETTE.neutral),
106
+ info,
107
+ success,
108
+ warning,
109
+ error: get("color-error", DEFAULT_THUMB_PALETTE.error),
110
+ // layerchart.css maps series 1..6 → primary/secondary/accent/info/success/warning
111
+ series: [primary, secondary, accent, info, success, warning],
112
+ };
113
+ }
114
+ // ── drawing primitives ─────────────────────────────────────────────────────
115
+ /** The thumbnail frame (the task's fixed small size; the list cell is 64×40
116
+ * at the same 1.6:1 ratio, so object-fit: cover shows it uncropped). */
117
+ export const THUMB_W = 320;
118
+ export const THUMB_H = 200;
119
+ /** Round to one decimal — same convention as the block components. */
120
+ export const r1 = (n) => Math.round(n * 10) / 10;
121
+ /** XML-escape text content / attribute values. */
122
+ export function escXml(s) {
123
+ return s
124
+ .replace(/&/g, "&amp;")
125
+ .replace(/</g, "&lt;")
126
+ .replace(/>/g, "&gt;")
127
+ .replace(/"/g, "&quot;");
128
+ }
129
+ /** A plain <text> element. Presentation attributes only — no style attr
130
+ * (the SVG sanitizer forbids style; see sanitizeSvg). */
131
+ export function thumbText(x, y, s, o) {
132
+ const attrs = [
133
+ `x="${r1(x)}"`,
134
+ `y="${r1(y)}"`,
135
+ `font-size="${o.size}"`,
136
+ `fill="${o.fill}"`,
137
+ o.opacity !== undefined ? `fill-opacity="${r1(o.opacity)}"` : "",
138
+ o.weight ? `font-weight="${o.weight}"` : "",
139
+ o.anchor ? `text-anchor="${o.anchor}"` : "",
140
+ `font-family="ui-sans-serif, system-ui, sans-serif"`,
141
+ ]
142
+ .filter(Boolean)
143
+ .join(" ");
144
+ return `<text ${attrs}>${escXml(s)}</text>`;
145
+ }
146
+ /** Clamp text to n characters with an ellipsis (labels are decorative here). */
147
+ export function thumbTruncate(s, n) {
148
+ return s.length > n ? `${s.slice(0, Math.max(1, n - 1))}…` : s;
149
+ }