@kensio/colophon 2.1.0 → 2.3.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 (357) hide show
  1. package/README.md +608 -34
  2. package/dist/cli/args.d.ts +14 -0
  3. package/dist/cli/args.d.ts.map +1 -0
  4. package/dist/cli/args.js +67 -0
  5. package/dist/cli/args.js.map +1 -0
  6. package/dist/cli/config.d.ts +12 -0
  7. package/dist/cli/config.d.ts.map +1 -0
  8. package/dist/cli/config.js +43 -0
  9. package/dist/cli/config.js.map +1 -0
  10. package/dist/cli/index.d.ts +3 -0
  11. package/dist/cli/index.d.ts.map +1 -0
  12. package/dist/cli/index.js +35 -0
  13. package/dist/cli/index.js.map +1 -0
  14. package/dist/cli.js +34 -6
  15. package/dist/cli.js.map +1 -1
  16. package/dist/config/defaults.d.ts +64 -0
  17. package/dist/config/defaults.d.ts.map +1 -0
  18. package/dist/config/defaults.js +64 -0
  19. package/dist/config/defaults.js.map +1 -0
  20. package/dist/config/index.d.ts +22 -0
  21. package/dist/config/index.d.ts.map +1 -0
  22. package/dist/config/index.js +52 -0
  23. package/dist/config/index.js.map +1 -0
  24. package/dist/config/resolve.d.ts +24 -0
  25. package/dist/config/resolve.d.ts.map +1 -0
  26. package/dist/config/resolve.js +66 -0
  27. package/dist/config/resolve.js.map +1 -0
  28. package/dist/config/size.d.ts +20 -0
  29. package/dist/config/size.d.ts.map +1 -0
  30. package/dist/config/size.js +46 -0
  31. package/dist/config/size.js.map +1 -0
  32. package/dist/config.d.ts +33 -2
  33. package/dist/config.d.ts.map +1 -1
  34. package/dist/config.js +94 -4
  35. package/dist/config.js.map +1 -1
  36. package/dist/content/index.d.ts +5 -51
  37. package/dist/content/index.d.ts.map +1 -1
  38. package/dist/content/index.js +3 -115
  39. package/dist/content/index.js.map +1 -1
  40. package/dist/content/props.d.ts +15 -0
  41. package/dist/content/props.d.ts.map +1 -0
  42. package/dist/content/props.js +71 -0
  43. package/dist/content/props.js.map +1 -0
  44. package/dist/content/slug.d.ts +23 -0
  45. package/dist/content/slug.d.ts.map +1 -0
  46. package/dist/content/slug.js +52 -0
  47. package/dist/content/slug.js.map +1 -0
  48. package/dist/content/walk.d.ts +17 -0
  49. package/dist/content/walk.d.ts.map +1 -0
  50. package/dist/content/walk.js +57 -0
  51. package/dist/content/walk.js.map +1 -0
  52. package/dist/fonts/index.d.ts +10 -0
  53. package/dist/fonts/index.d.ts.map +1 -0
  54. package/dist/fonts/index.js +11 -0
  55. package/dist/fonts/index.js.map +1 -0
  56. package/dist/fonts/materialise.d.ts +7 -0
  57. package/dist/fonts/materialise.d.ts.map +1 -0
  58. package/dist/fonts/materialise.js +47 -0
  59. package/dist/fonts/materialise.js.map +1 -0
  60. package/dist/fonts/resolve.d.ts +7 -0
  61. package/dist/fonts/resolve.d.ts.map +1 -0
  62. package/dist/fonts/resolve.js +50 -0
  63. package/dist/fonts/resolve.js.map +1 -0
  64. package/dist/fonts.d.ts +18 -0
  65. package/dist/fonts.d.ts.map +1 -0
  66. package/dist/fonts.js +102 -0
  67. package/dist/fonts.js.map +1 -0
  68. package/dist/generate/extra.d.ts +16 -0
  69. package/dist/generate/extra.d.ts.map +1 -0
  70. package/dist/generate/extra.js +60 -0
  71. package/dist/generate/extra.js.map +1 -0
  72. package/dist/generate/index.d.ts +19 -0
  73. package/dist/generate/index.d.ts.map +1 -0
  74. package/dist/generate/index.js +46 -0
  75. package/dist/generate/index.js.map +1 -0
  76. package/dist/generate/job.d.ts +35 -0
  77. package/dist/generate/job.d.ts.map +1 -0
  78. package/dist/generate/job.js +2 -0
  79. package/dist/generate/job.js.map +1 -0
  80. package/dist/generate/options.d.ts +56 -0
  81. package/dist/generate/options.d.ts.map +1 -0
  82. package/dist/generate/options.js +17 -0
  83. package/dist/generate/options.js.map +1 -0
  84. package/dist/generate/output-path.d.ts +12 -0
  85. package/dist/generate/output-path.d.ts.map +1 -0
  86. package/dist/generate/output-path.js +18 -0
  87. package/dist/generate/output-path.js.map +1 -0
  88. package/dist/generate/outputs.d.ts +28 -0
  89. package/dist/generate/outputs.d.ts.map +1 -0
  90. package/dist/generate/outputs.js +71 -0
  91. package/dist/generate/outputs.js.map +1 -0
  92. package/dist/generate/plan.d.ts +21 -0
  93. package/dist/generate/plan.d.ts.map +1 -0
  94. package/dist/generate/plan.js +72 -0
  95. package/dist/generate/plan.js.map +1 -0
  96. package/dist/generate/render-image.d.ts +11 -0
  97. package/dist/generate/render-image.d.ts.map +1 -0
  98. package/dist/generate/render-image.js +27 -0
  99. package/dist/generate/render-image.js.map +1 -0
  100. package/dist/generate.d.ts +27 -6
  101. package/dist/generate.d.ts.map +1 -1
  102. package/dist/generate.js +77 -15
  103. package/dist/generate.js.map +1 -1
  104. package/dist/highlight/color.d.ts +9 -0
  105. package/dist/highlight/color.d.ts.map +1 -0
  106. package/dist/highlight/color.js +15 -0
  107. package/dist/highlight/color.js.map +1 -0
  108. package/dist/highlight/grid.d.ts +14 -0
  109. package/dist/highlight/grid.d.ts.map +1 -0
  110. package/dist/highlight/grid.js +36 -0
  111. package/dist/highlight/grid.js.map +1 -0
  112. package/dist/highlight/index.d.ts +12 -0
  113. package/dist/highlight/index.d.ts.map +1 -0
  114. package/dist/highlight/index.js +31 -0
  115. package/dist/highlight/index.js.map +1 -0
  116. package/dist/highlight/language.d.ts +14 -0
  117. package/dist/highlight/language.d.ts.map +1 -0
  118. package/dist/highlight/language.js +42 -0
  119. package/dist/highlight/language.js.map +1 -0
  120. package/dist/highlight/normalise.d.ts +17 -0
  121. package/dist/highlight/normalise.d.ts.map +1 -0
  122. package/dist/highlight/normalise.js +37 -0
  123. package/dist/highlight/normalise.js.map +1 -0
  124. package/dist/highlight/types.d.ts +40 -0
  125. package/dist/highlight/types.d.ts.map +1 -0
  126. package/dist/highlight/types.js +2 -0
  127. package/dist/highlight/types.js.map +1 -0
  128. package/dist/highlight.d.ts +10 -0
  129. package/dist/highlight.d.ts.map +1 -1
  130. package/dist/highlight.js +25 -2
  131. package/dist/highlight.js.map +1 -1
  132. package/dist/index.d.ts +15 -9
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +9 -5
  135. package/dist/index.js.map +1 -1
  136. package/dist/manifest/build.d.ts +14 -0
  137. package/dist/manifest/build.d.ts.map +1 -0
  138. package/dist/manifest/build.js +43 -0
  139. package/dist/manifest/build.js.map +1 -0
  140. package/dist/manifest/index.d.ts +27 -0
  141. package/dist/manifest/index.d.ts.map +1 -0
  142. package/dist/manifest/index.js +31 -0
  143. package/dist/manifest/index.js.map +1 -0
  144. package/dist/manifest/order.d.ts +12 -0
  145. package/dist/manifest/order.d.ts.map +1 -0
  146. package/dist/manifest/order.js +17 -0
  147. package/dist/manifest/order.js.map +1 -0
  148. package/dist/manifest/page.d.ts +24 -0
  149. package/dist/manifest/page.d.ts.map +1 -0
  150. package/dist/manifest/page.js +55 -0
  151. package/dist/manifest/page.js.map +1 -0
  152. package/dist/meta/html.d.ts +14 -0
  153. package/dist/meta/html.d.ts.map +1 -0
  154. package/dist/meta/html.js +24 -0
  155. package/dist/meta/html.js.map +1 -0
  156. package/dist/meta/index.d.ts +11 -0
  157. package/dist/meta/index.d.ts.map +1 -0
  158. package/dist/meta/index.js +11 -0
  159. package/dist/meta/index.js.map +1 -0
  160. package/dist/meta/tags.d.ts +21 -0
  161. package/dist/meta/tags.d.ts.map +1 -0
  162. package/dist/meta/tags.js +72 -0
  163. package/dist/meta/tags.js.map +1 -0
  164. package/dist/meta/url.d.ts +15 -0
  165. package/dist/meta/url.d.ts.map +1 -0
  166. package/dist/meta/url.js +34 -0
  167. package/dist/meta/url.js.map +1 -0
  168. package/dist/placement/check.d.ts +16 -0
  169. package/dist/placement/check.d.ts.map +1 -0
  170. package/dist/placement/check.js +40 -0
  171. package/dist/placement/check.js.map +1 -0
  172. package/dist/placement/index.d.ts +29 -0
  173. package/dist/placement/index.d.ts.map +1 -0
  174. package/dist/placement/index.js +61 -0
  175. package/dist/placement/index.js.map +1 -0
  176. package/dist/placement/relative.d.ts +31 -0
  177. package/dist/placement/relative.d.ts.map +1 -0
  178. package/dist/placement/relative.js +53 -0
  179. package/dist/placement/relative.js.map +1 -0
  180. package/dist/pool.d.ts +18 -0
  181. package/dist/pool.d.ts.map +1 -0
  182. package/dist/pool.js +56 -0
  183. package/dist/pool.js.map +1 -0
  184. package/dist/render/index.d.ts +10 -0
  185. package/dist/render/index.d.ts.map +1 -0
  186. package/dist/render/index.js +27 -0
  187. package/dist/render/index.js.map +1 -0
  188. package/dist/render/png.d.ts +10 -0
  189. package/dist/render/png.d.ts.map +1 -0
  190. package/dist/render/png.js +30 -0
  191. package/dist/render/png.js.map +1 -0
  192. package/dist/render/svg.d.ts +10 -0
  193. package/dist/render/svg.d.ts.map +1 -0
  194. package/dist/render/svg.js +20 -0
  195. package/dist/render/svg.js.map +1 -0
  196. package/dist/render/template.d.ts +9 -0
  197. package/dist/render/template.d.ts.map +1 -0
  198. package/dist/render/template.js +17 -0
  199. package/dist/render/template.js.map +1 -0
  200. package/dist/render.d.ts +6 -2
  201. package/dist/render.d.ts.map +1 -1
  202. package/dist/render.js +31 -10
  203. package/dist/render.js.map +1 -1
  204. package/dist/stamp/chunk.d.ts +16 -0
  205. package/dist/stamp/chunk.d.ts.map +1 -0
  206. package/dist/stamp/chunk.js +46 -0
  207. package/dist/stamp/chunk.js.map +1 -0
  208. package/dist/stamp/config-digest.d.ts +11 -0
  209. package/dist/stamp/config-digest.d.ts.map +1 -0
  210. package/dist/stamp/config-digest.js +43 -0
  211. package/dist/stamp/config-digest.js.map +1 -0
  212. package/dist/stamp/digest.d.ts +8 -0
  213. package/dist/stamp/digest.d.ts.map +1 -0
  214. package/dist/stamp/digest.js +20 -0
  215. package/dist/stamp/digest.js.map +1 -0
  216. package/dist/stamp/index.d.ts +20 -0
  217. package/dist/stamp/index.d.ts.map +1 -0
  218. package/dist/stamp/index.js +40 -0
  219. package/dist/stamp/index.js.map +1 -0
  220. package/dist/stamp/read.d.ts +7 -0
  221. package/dist/stamp/read.d.ts.map +1 -0
  222. package/dist/stamp/read.js +62 -0
  223. package/dist/stamp/read.js.map +1 -0
  224. package/dist/stamp.d.ts +29 -0
  225. package/dist/stamp.d.ts.map +1 -0
  226. package/dist/stamp.js +198 -0
  227. package/dist/stamp.js.map +1 -0
  228. package/dist/templates/banner/badge.d.ts +7 -0
  229. package/dist/templates/banner/badge.d.ts.map +1 -0
  230. package/dist/templates/banner/badge.js +24 -0
  231. package/dist/templates/banner/badge.js.map +1 -0
  232. package/dist/templates/banner/index.d.ts +9 -0
  233. package/dist/templates/banner/index.d.ts.map +1 -0
  234. package/dist/templates/banner/index.js +66 -0
  235. package/dist/templates/banner/index.js.map +1 -0
  236. package/dist/templates/banner/lines.d.ts +27 -0
  237. package/dist/templates/banner/lines.d.ts.map +1 -0
  238. package/dist/templates/banner/lines.js +46 -0
  239. package/dist/templates/banner/lines.js.map +1 -0
  240. package/dist/templates/card/index.d.ts +7 -0
  241. package/dist/templates/card/index.d.ts.map +1 -0
  242. package/dist/templates/card/index.js +43 -0
  243. package/dist/templates/card/index.js.map +1 -0
  244. package/dist/templates/card/lines.d.ts +17 -0
  245. package/dist/templates/card/lines.d.ts.map +1 -0
  246. package/dist/templates/card/lines.js +32 -0
  247. package/dist/templates/card/lines.js.map +1 -0
  248. package/dist/templates/code/chrome.d.ts +9 -0
  249. package/dist/templates/code/chrome.d.ts.map +1 -0
  250. package/dist/templates/code/chrome.js +32 -0
  251. package/dist/templates/code/chrome.js.map +1 -0
  252. package/dist/templates/code/clip.d.ts +18 -0
  253. package/dist/templates/code/clip.d.ts.map +1 -0
  254. package/dist/templates/code/clip.js +44 -0
  255. package/dist/templates/code/clip.js.map +1 -0
  256. package/dist/templates/code/ellipsis.d.ts +3 -0
  257. package/dist/templates/code/ellipsis.d.ts.map +1 -0
  258. package/dist/templates/code/ellipsis.js +3 -0
  259. package/dist/templates/code/ellipsis.js.map +1 -0
  260. package/dist/templates/code/fit.d.ts +27 -0
  261. package/dist/templates/code/fit.d.ts.map +1 -0
  262. package/dist/templates/code/fit.js +59 -0
  263. package/dist/templates/code/fit.js.map +1 -0
  264. package/dist/templates/code/index.d.ts +12 -0
  265. package/dist/templates/code/index.d.ts.map +1 -0
  266. package/dist/templates/code/index.js +64 -0
  267. package/dist/templates/code/index.js.map +1 -0
  268. package/dist/templates/code/layout.d.ts +21 -0
  269. package/dist/templates/code/layout.d.ts.map +1 -0
  270. package/dist/templates/code/layout.js +21 -0
  271. package/dist/templates/code/layout.js.map +1 -0
  272. package/dist/templates/code/panel.d.ts +17 -0
  273. package/dist/templates/code/panel.d.ts.map +1 -0
  274. package/dist/templates/code/panel.js +20 -0
  275. package/dist/templates/code/panel.js.map +1 -0
  276. package/dist/templates/code/plate.d.ts +15 -0
  277. package/dist/templates/code/plate.d.ts.map +1 -0
  278. package/dist/templates/code/plate.js +32 -0
  279. package/dist/templates/code/plate.js.map +1 -0
  280. package/dist/templates/code/spans.d.ts +19 -0
  281. package/dist/templates/code/spans.d.ts.map +1 -0
  282. package/dist/templates/code/spans.js +36 -0
  283. package/dist/templates/code/spans.js.map +1 -0
  284. package/dist/templates/code/warn.d.ts +11 -0
  285. package/dist/templates/code/warn.d.ts.map +1 -0
  286. package/dist/templates/code/warn.js +24 -0
  287. package/dist/templates/code/warn.js.map +1 -0
  288. package/dist/templates/code.d.ts.map +1 -1
  289. package/dist/templates/code.js +101 -29
  290. package/dist/templates/code.js.map +1 -1
  291. package/dist/templates/footer.d.ts +21 -0
  292. package/dist/templates/footer.d.ts.map +1 -0
  293. package/dist/templates/footer.js +25 -0
  294. package/dist/templates/footer.js.map +1 -0
  295. package/dist/templates/index.d.ts +3 -3
  296. package/dist/templates/index.d.ts.map +1 -1
  297. package/dist/templates/index.js +6 -6
  298. package/dist/templates/index.js.map +1 -1
  299. package/dist/text/element.d.ts +18 -0
  300. package/dist/text/element.d.ts.map +1 -0
  301. package/dist/text/element.js +19 -0
  302. package/dist/text/element.js.map +1 -0
  303. package/dist/text/escape.d.ts +5 -0
  304. package/dist/text/escape.d.ts.map +1 -0
  305. package/dist/text/escape.js +12 -0
  306. package/dist/text/escape.js.map +1 -0
  307. package/dist/text/index.d.ts +7 -0
  308. package/dist/text/index.d.ts.map +1 -0
  309. package/dist/text/index.js +5 -0
  310. package/dist/text/index.js.map +1 -0
  311. package/dist/text/stack.d.ts +24 -0
  312. package/dist/text/stack.d.ts.map +1 -0
  313. package/dist/text/stack.js +18 -0
  314. package/dist/text/stack.js.map +1 -0
  315. package/dist/text/wrap.d.ts +12 -0
  316. package/dist/text/wrap.d.ts.map +1 -0
  317. package/dist/text/wrap.js +33 -0
  318. package/dist/text/wrap.js.map +1 -0
  319. package/dist/types.d.ts +345 -6
  320. package/dist/types.d.ts.map +1 -1
  321. package/dist/validate/check.d.ts +13 -0
  322. package/dist/validate/check.d.ts.map +1 -0
  323. package/dist/validate/check.js +34 -0
  324. package/dist/validate/check.js.map +1 -0
  325. package/dist/validate/index.d.ts +15 -0
  326. package/dist/validate/index.d.ts.map +1 -0
  327. package/dist/validate/index.js +41 -0
  328. package/dist/validate/index.js.map +1 -0
  329. package/dist/validate/keys.d.ts +58 -0
  330. package/dist/validate/keys.d.ts.map +1 -0
  331. package/dist/validate/keys.js +166 -0
  332. package/dist/validate/keys.js.map +1 -0
  333. package/dist/validate/overrides.d.ts +5 -0
  334. package/dist/validate/overrides.d.ts.map +1 -0
  335. package/dist/validate/overrides.js +43 -0
  336. package/dist/validate/overrides.js.map +1 -0
  337. package/dist/validate/placement.d.ts +10 -0
  338. package/dist/validate/placement.d.ts.map +1 -0
  339. package/dist/validate/placement.js +38 -0
  340. package/dist/validate/placement.js.map +1 -0
  341. package/dist/validate/sizes.d.ts +9 -0
  342. package/dist/validate/sizes.d.ts.map +1 -0
  343. package/dist/validate/sizes.js +27 -0
  344. package/dist/validate/sizes.js.map +1 -0
  345. package/dist/validate/suggest.d.ts +10 -0
  346. package/dist/validate/suggest.d.ts.map +1 -0
  347. package/dist/validate/suggest.js +55 -0
  348. package/dist/validate/suggest.js.map +1 -0
  349. package/dist/validate/values.d.ts +21 -0
  350. package/dist/validate/values.d.ts.map +1 -0
  351. package/dist/validate/values.js +57 -0
  352. package/dist/validate/values.js.map +1 -0
  353. package/dist/validate.d.ts +15 -0
  354. package/dist/validate.d.ts.map +1 -0
  355. package/dist/validate.js +300 -0
  356. package/dist/validate.js.map +1 -0
  357. package/package.json +14 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spans.js","sourceRoot":"","sources":["../../../src/templates/code/spans.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,2EAA2E;AAC3E,MAAM,WAAW,GAAG,IAAI,CAAC;AAEzB,SAAS,SAAS,CAChB,KAAgB,EAChB,CAAS,EACT,SAAiB,EACjB,UAAkB;IAElB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,IAAI,UAAU,CAAC;IACvC,MAAM,OAAO,GACX,KAAK,CAAC,OAAO,KAAK,SAAS;QACzB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,kBAAkB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzD,OAAO,CACL,aAAa,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG;QAChE,UAAU,IAAI,IAAI,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG;QAC7C,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CACnC,CAAC;AACJ,CAAC;AAeD;;;GAGG;AACH,MAAM,UAAU,QAAQ,CACtB,KAAwC,EACxC,OAAoB;IAEpB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAEhE,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACrB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CACzB,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,WAAW,CACxE,CAAC;QACF,MAAM,KAAK,GAAG,MAAM;aACjB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACb,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,CACzD;aACA,IAAI,CAAC,EAAE,CAAC,CAAC;QAEZ,OAAO,CACL,YAAY,MAAM,CAAC,QAAQ,CAAC,wBAAwB;YACpD,iBAAiB,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG;YACjD,eAAe,MAAM,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,CACnD,CAAC;IACJ,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Dimensions, ResolvedConfig } from "../../types.js";
2
+ /**
3
+ * Tell the author when the snippet did not fit. Nothing in a finished image
4
+ * says the sample continued, so silent truncation is how a half-a-function
5
+ * share card ends up on someone else's timeline.
6
+ */
7
+ export declare function warnIfTruncated(config: ResolvedConfig, dimensions: Dimensions, counts: {
8
+ readonly dropped: number;
9
+ readonly clipped: number;
10
+ }, total: number): void;
11
+ //# sourceMappingURL=warn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warn.d.ts","sourceRoot":"","sources":["../../../src/templates/code/warn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAMjE;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAC9D,KAAK,EAAE,MAAM,GACZ,IAAI,CAoBN"}
@@ -0,0 +1,24 @@
1
+ function plural(count, noun) {
2
+ return `${String(count)} ${noun}${count === 1 ? "" : "s"}`;
3
+ }
4
+ /**
5
+ * Tell the author when the snippet did not fit. Nothing in a finished image
6
+ * says the sample continued, so silent truncation is how a half-a-function
7
+ * share card ends up on someone else's timeline.
8
+ */
9
+ export function warnIfTruncated(config, dimensions, counts, total) {
10
+ const parts = [];
11
+ if (counts.dropped > 0) {
12
+ parts.push(`${String(counts.dropped)} of ${plural(total, "line")} dropped`);
13
+ }
14
+ if (counts.clipped > 0) {
15
+ parts.push(`${plural(counts.clipped, "line")} clipped to the panel width`);
16
+ }
17
+ if (parts.length === 0) {
18
+ return;
19
+ }
20
+ config.onWarning(`code snippet does not fit the ${String(dimensions.width)}x${String(dimensions.height)}` +
21
+ ` image at a legible size: ${parts.join(", ")}.` +
22
+ ` Shorten the sample, or lower code.minFontScale to fit it in smaller.`);
23
+ }
24
+ //# sourceMappingURL=warn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warn.js","sourceRoot":"","sources":["../../../src/templates/code/warn.ts"],"names":[],"mappings":"AAEA,SAAS,MAAM,CAAC,KAAa,EAAE,IAAY;IACzC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAC7D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAsB,EACtB,UAAsB,EACtB,MAA8D,EAC9D,KAAa;IAEb,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,6BAA6B,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,MAAM,CAAC,SAAS,CACd,iCAAiC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QACtF,6BAA6B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QAChD,uEAAuE,CAC1E,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../src/templates/code.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAA8B,QAAQ,EAAE,MAAM,aAAa,CAAC;AAoKxE;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,EAAE,QA2I1B,CAAC"}
1
+ {"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../src/templates/code.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAA8B,QAAQ,EAAE,MAAM,aAAa,CAAC;AA2PxE;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,EAAE,QA6J1B,CAAC"}
@@ -24,55 +24,93 @@ function layoutPanel(dimensions, config, titleFontSize, footerFontSize, hasTitle
24
24
  };
25
25
  }
26
26
  /**
27
- * Shrink a panel vertically onto its content, keeping it centred in the space
28
- * it was allotted. Floored so a one-line snippet still gets a panel with
29
- * presence rather than a letterbox slot.
27
+ * Shrink a panel onto its content, keeping it centred in the space it was
28
+ * allotted. Both axes are floored so a small snippet still gets a panel with
29
+ * presence rather than a letterbox slot or a narrow strip.
30
30
  */
31
- function hugHeight(available, wanted) {
32
- // Floor relative to the panel's width, so shrinking never leaves a sliver.
33
- const height = Math.min(available.height, Math.max(Math.round(wanted), Math.round(available.width * 0.25)));
31
+ function hugPanel(available, wanted) {
32
+ const width = Math.min(available.width, Math.max(Math.round(wanted.width), Math.round(available.width * 0.55)));
33
+ // Floor relative to the panel's own width, so shrinking never leaves a
34
+ // sliver, and never taller than the space the font was fitted against.
35
+ const height = Math.min(available.height, Math.max(Math.round(wanted.height), Math.round(width * 0.25)));
34
36
  return {
35
37
  ...available,
38
+ x: available.x + Math.round((available.width - width) / 2),
36
39
  y: available.y + Math.round((available.height - height) / 2),
40
+ width,
37
41
  height,
38
42
  };
39
43
  }
40
44
  /**
41
45
  * Pick the largest font size that fits the snippet in the panel on both axes,
42
46
  * clamped to the configured bounds.
47
+ *
48
+ * The bounds are fractions of the image *width*, not its height: a share image
49
+ * is scaled to fit the width of whatever feed shows it, so width is what
50
+ * decides whether the code ends up legible. Keying the floor to height would
51
+ * let a landscape image render the same snippet at half the size of its square
52
+ * counterpart.
43
53
  */
44
- function fitFontSize(highlighted, codeWidth, codeHeight, imageHeight, config) {
54
+ function fitFontSize(highlighted, codeWidth, codeHeight, imageWidth, config) {
45
55
  const { charWidthRatio, lineHeight, maxFontScale, minFontScale } = config.code;
46
56
  const byWidth = codeWidth / (Math.max(1, highlighted.longestLine) * charWidthRatio);
47
57
  const byHeight = codeHeight / (Math.max(1, highlighted.lines.length) * lineHeight);
48
- const fitted = Math.min(byWidth, byHeight, imageHeight * maxFontScale);
49
- return Math.max(1, Math.floor(Math.max(fitted, imageHeight * minFontScale)));
58
+ const fitted = Math.min(byWidth, byHeight, imageWidth * maxFontScale);
59
+ return Math.max(1, Math.floor(Math.max(fitted, imageWidth * minFontScale)));
60
+ }
61
+ /**
62
+ * Width of the laid-out block in characters, measured from the lines actually
63
+ * being drawn. Narrower than the snippet's longest line whenever that line was
64
+ * dropped or clipped, which keeps the panel hugged tight to what is visible.
65
+ */
66
+ function blockColumns(lines) {
67
+ let columns = 0;
68
+ for (const tokens of lines) {
69
+ const last = tokens.at(-1);
70
+ if (last !== undefined) {
71
+ columns = Math.max(columns, last.column + last.text.length);
72
+ }
73
+ }
74
+ return columns;
75
+ }
76
+ function ellipsisToken(column) {
77
+ return {
78
+ text: ellipsis,
79
+ column,
80
+ color: undefined,
81
+ opacity: 0.6,
82
+ bold: false,
83
+ italic: false,
84
+ };
50
85
  }
51
- const ellipsisToken = {
52
- text: ellipsis,
53
- column: 0,
54
- color: undefined,
55
- opacity: 0.6,
56
- bold: false,
57
- italic: false,
58
- };
59
86
  /**
60
87
  * Drop lines that cannot fit at the chosen font size, marking the truncation
61
88
  * with an ellipsis line so the image never silently misrepresents the snippet.
89
+ * The marker takes the indentation of the first dropped line, so it reads as
90
+ * part of the block rather than as a stray mark in the left margin.
62
91
  */
63
92
  function fitLines(lines, codeHeight, step) {
64
93
  const maxLines = Math.max(1, Math.floor(codeHeight / step));
65
94
  if (lines.length <= maxLines) {
66
95
  return lines;
67
96
  }
68
- return [...lines.slice(0, maxLines - 1), [ellipsisToken]];
97
+ const kept = lines.slice(0, maxLines - 1);
98
+ const dropped = lines.slice(maxLines - 1).find((line) => line.length > 0);
99
+ return [...kept, [ellipsisToken(dropped?.[0]?.column ?? 0)]];
69
100
  }
70
101
  /**
71
102
  * Clip a line to the columns that fit, ending it with an ellipsis. The font
72
103
  * size is floored for legibility, so a wide enough snippet can still overrun
73
104
  * the panel — clipping keeps it inside instead of bleeding off the image.
105
+ *
106
+ * Returns the line unchanged when it already fits, so the caller can count the
107
+ * clipped lines by identity.
74
108
  */
75
109
  function clipLine(tokens, maxColumns) {
110
+ const last = tokens.at(-1);
111
+ if (last === undefined || last.column + last.text.length <= maxColumns) {
112
+ return tokens;
113
+ }
76
114
  const clipped = [];
77
115
  for (const token of tokens) {
78
116
  if (token.column >= maxColumns) {
@@ -88,6 +126,29 @@ function clipLine(tokens, maxColumns) {
88
126
  }
89
127
  return clipped;
90
128
  }
129
+ function plural(count, noun) {
130
+ return `${String(count)} ${noun}${count === 1 ? "" : "s"}`;
131
+ }
132
+ /**
133
+ * Tell the author when the snippet did not fit. Nothing in a finished image
134
+ * says the sample continued, so silent truncation is how a half-a-function
135
+ * share card ends up on someone else's timeline.
136
+ */
137
+ function warnIfTruncated(config, dimensions, counts, total) {
138
+ const parts = [];
139
+ if (counts.dropped > 0) {
140
+ parts.push(`${String(counts.dropped)} of ${plural(total, "line")} dropped`);
141
+ }
142
+ if (counts.clipped > 0) {
143
+ parts.push(`${plural(counts.clipped, "line")} clipped to the panel width`);
144
+ }
145
+ if (parts.length === 0) {
146
+ return;
147
+ }
148
+ config.onWarning(`code snippet does not fit the ${String(dimensions.width)}x${String(dimensions.height)}` +
149
+ ` image at a legible size: ${parts.join(", ")}.` +
150
+ ` Shorten the sample, or lower code.minFontScale to fit it in smaller.`);
151
+ }
91
152
  function tokenSpan(token, x, charWidth, foreground) {
92
153
  const fill = token.color ?? foreground;
93
154
  const opacity = token.opacity === undefined
@@ -129,24 +190,35 @@ export const codeTemplate = {
129
190
  const inner = Math.round(Math.min(available.width, available.height) * 0.07);
130
191
  const codeWidth = Math.max(1, available.width - inner * 2);
131
192
  const codeHeight = Math.max(1, available.height - inner * 2);
132
- const fontSize = fitFontSize(highlighted, codeWidth, codeHeight, height, config);
193
+ const fontSize = fitFontSize(highlighted, codeWidth, codeHeight, width, config);
133
194
  const charWidth = fontSize * config.code.charWidthRatio;
134
195
  const step = fontSize * config.code.lineHeight;
135
196
  const maxColumns = Math.max(1, Math.floor(codeWidth / charWidth));
136
- const lines = fitLines(highlighted.lines, codeHeight, step).map((tokens) => clipLine(tokens, maxColumns));
197
+ const fitted = fitLines(highlighted.lines, codeHeight, step);
198
+ let clipped = 0;
199
+ const lines = fitted.map((tokens) => {
200
+ const line = clipLine(tokens, maxColumns);
201
+ if (line !== tokens) {
202
+ clipped += 1;
203
+ }
204
+ return line;
205
+ });
206
+ warnIfTruncated(config, dimensions, { dropped: highlighted.lines.length - lines.length, clipped }, highlighted.lines.length);
137
207
  // Padding reads best proportional to the text, not the panel — a snippet
138
208
  // fitted down to a small size wants tighter margins. Only ever shrink, so
139
209
  // the code area the font was fitted against stays valid.
140
210
  const padding = Math.max(Math.min(inner, Math.round(fontSize * 1.6)), Math.round(inner * 0.35));
141
- // Shrink the panel down onto a short snippet so it isn't left floating in
142
- // dead space. Width stays full-bleed: a narrow panel on a landscape image
143
- // reads as a mistake, whereas a short one reads as a code block.
144
- const panel = hugHeight(available, lines.length * step + padding * 2);
145
- // Centre the block as a whole; relative indentation is preserved by each
146
- // token's column, so the snippet keeps its shape.
147
- const columns = Math.min(highlighted.longestLine, maxColumns);
148
- const blockWidth = columns * charWidth;
149
- const originX = panel.x + (panel.width - blockWidth) / 2;
211
+ // Shrink the panel down onto the snippet so it isn't left floating in dead
212
+ // space on a landscape image especially, a wide panel holding a narrow
213
+ // block leaves the code marooned off to one side.
214
+ const blockWidth = blockColumns(lines) * charWidth;
215
+ const panel = hugPanel(available, {
216
+ width: blockWidth + padding * 2,
217
+ height: lines.length * step + padding * 2,
218
+ });
219
+ // Code reads from the left edge, as it does in an editor. Indentation is
220
+ // carried by each token's column, so the snippet keeps its shape.
221
+ const originX = panel.x + padding;
150
222
  const originY = panel.y + (panel.height - lines.length * step) / 2;
151
223
  const shadowOffset = Math.max(1, Math.round(Math.min(width, height) * 0.01));
152
224
  const shadow = `<rect x="${String(panel.x)}" y="${String(panel.y + shadowOffset)}"` +
@@ -1 +1 @@
1
- {"version":3,"file":"code.js","sourceRoot":"","sources":["../../src/templates/code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"code.js","sourceRoot":"","sources":["../../src/templates/code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { ResolvedConfig } from "../types.js";
2
+ /**
3
+ * Where and how a template wants its footer drawn. Every template places the
4
+ * footer differently; what they share is that a config with no footer, or an
5
+ * empty one, draws nothing at all.
6
+ */
7
+ export interface FooterPlacement {
8
+ readonly x: number;
9
+ readonly y: number;
10
+ readonly fontSize: number;
11
+ readonly opacity: number;
12
+ readonly anchor?: "start" | "middle" | "end";
13
+ }
14
+ /** Whether the config carries a footer worth drawing. */
15
+ export declare function hasFooter(config: ResolvedConfig): boolean;
16
+ /**
17
+ * The configured footer as a `<text>` element, or an empty string when there
18
+ * is none. Templates call this unconditionally and let it decide.
19
+ */
20
+ export declare function footerElement(config: ResolvedConfig, placement: FooterPlacement): string;
21
+ //# sourceMappingURL=footer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"footer.d.ts","sourceRoot":"","sources":["../../src/templates/footer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;CAC9C;AAED,yDAAyD;AACzD,wBAAgB,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAEzD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,eAAe,GACzB,MAAM,CAeR"}
@@ -0,0 +1,25 @@
1
+ import { textElement } from "../text/index.js";
2
+ /** Whether the config carries a footer worth drawing. */
3
+ export function hasFooter(config) {
4
+ return config.footer !== undefined && config.footer !== "";
5
+ }
6
+ /**
7
+ * The configured footer as a `<text>` element, or an empty string when there
8
+ * is none. Templates call this unconditionally and let it decide.
9
+ */
10
+ export function footerElement(config, placement) {
11
+ if (!hasFooter(config)) {
12
+ return "";
13
+ }
14
+ return textElement(config.footer ?? "", {
15
+ x: placement.x,
16
+ y: placement.y,
17
+ fontFamily: config.fontFamily,
18
+ fontSize: placement.fontSize,
19
+ fontWeight: 500,
20
+ fill: config.colors.foreground,
21
+ fillOpacity: placement.opacity,
22
+ ...(placement.anchor !== undefined && { anchor: placement.anchor }),
23
+ });
24
+ }
25
+ //# sourceMappingURL=footer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"footer.js","sourceRoot":"","sources":["../../src/templates/footer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAgB/C,yDAAyD;AACzD,MAAM,UAAU,SAAS,CAAC,MAAsB;IAC9C,OAAO,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAsB,EACtB,SAA0B;IAE1B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE;QACtC,CAAC,EAAE,SAAS,CAAC,CAAC;QACd,CAAC,EAAE,SAAS,CAAC,CAAC;QACd,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,UAAU,EAAE,GAAG;QACf,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;QAC9B,WAAW,EAAE,SAAS,CAAC,OAAO;QAC9B,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;KACpE,CAAC,CAAC;AACL,CAAC"}
@@ -4,8 +4,8 @@ import type { Template } from "../types.js";
4
4
  * via `config.templates`.
5
5
  */
6
6
  export declare const builtinTemplates: Readonly<Record<string, Template>>;
7
- export { bannerTemplate } from "./banner.js";
8
- export { cardTemplate } from "./card.js";
9
- export { codeTemplate } from "./code.js";
7
+ export { bannerTemplate } from "./banner/index.js";
8
+ export { cardTemplate } from "./card/index.js";
9
+ export { codeTemplate } from "./code/index.js";
10
10
  export { optionalString } from "./props.js";
11
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAK5C;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAI/D,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAK5C;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAI/D,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
@@ -1,6 +1,6 @@
1
- import { bannerTemplate } from "./banner.js";
2
- import { cardTemplate } from "./card.js";
3
- import { codeTemplate } from "./code.js";
1
+ import { bannerTemplate } from "./banner/index.js";
2
+ import { cardTemplate } from "./card/index.js";
3
+ import { codeTemplate } from "./code/index.js";
4
4
  /**
5
5
  * Templates registered out of the box. Projects can add to or override these
6
6
  * via `config.templates`.
@@ -10,8 +10,8 @@ export const builtinTemplates = {
10
10
  [cardTemplate.name]: cardTemplate,
11
11
  [codeTemplate.name]: codeTemplate,
12
12
  };
13
- export { bannerTemplate } from "./banner.js";
14
- export { cardTemplate } from "./card.js";
15
- export { codeTemplate } from "./code.js";
13
+ export { bannerTemplate } from "./banner/index.js";
14
+ export { cardTemplate } from "./card/index.js";
15
+ export { codeTemplate } from "./code/index.js";
16
16
  export { optionalString } from "./props.js";
17
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAuC;IAClE,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,cAAc;IACrC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,YAAY;IACjC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,YAAY;CAClC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAuC;IAClE,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,cAAc;IACrC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,YAAY;IACjC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,YAAY;CAClC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Attributes accepted by {@link textElement}. Colour and opacity are optional.
3
+ */
4
+ export interface TextAttributes {
5
+ readonly x: number;
6
+ readonly y: number;
7
+ readonly fontFamily: string;
8
+ readonly fontSize: number;
9
+ readonly fontWeight: number;
10
+ readonly fill: string;
11
+ readonly fillOpacity?: number;
12
+ readonly anchor?: "start" | "middle" | "end";
13
+ }
14
+ /**
15
+ * Build a single `<text>` element. The content is XML-escaped.
16
+ */
17
+ export declare function textElement(content: string, attributes: TextAttributes): string;
18
+ //# sourceMappingURL=element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element.d.ts","sourceRoot":"","sources":["../../src/text/element.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;CAC9C;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,cAAc,GACzB,MAAM,CAkBR"}
@@ -0,0 +1,19 @@
1
+ import { escapeXml } from "./escape.js";
2
+ /**
3
+ * Build a single `<text>` element. The content is XML-escaped.
4
+ */
5
+ export function textElement(content, attributes) {
6
+ const opacity = attributes.fillOpacity === undefined
7
+ ? ""
8
+ : ` fill-opacity="${String(attributes.fillOpacity)}"`;
9
+ const anchor = attributes.anchor === undefined
10
+ ? ""
11
+ : ` text-anchor="${attributes.anchor}"`;
12
+ return (`<text x="${String(attributes.x)}" y="${String(attributes.y)}"` +
13
+ ` font-family="${escapeXml(attributes.fontFamily)}"` +
14
+ ` font-size="${String(attributes.fontSize)}"` +
15
+ ` font-weight="${String(attributes.fontWeight)}"` +
16
+ ` fill="${attributes.fill}"${opacity}${anchor}>` +
17
+ `${escapeXml(content)}</text>`);
18
+ }
19
+ //# sourceMappingURL=element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/text/element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAgBxC;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,OAAe,EACf,UAA0B;IAE1B,MAAM,OAAO,GACX,UAAU,CAAC,WAAW,KAAK,SAAS;QAClC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,kBAAkB,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC;IAC1D,MAAM,MAAM,GACV,UAAU,CAAC,MAAM,KAAK,SAAS;QAC7B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,iBAAiB,UAAU,CAAC,MAAM,GAAG,CAAC;IAE5C,OAAO,CACL,YAAY,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG;QAC/D,iBAAiB,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG;QACpD,eAAe,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG;QAC7C,iBAAiB,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG;QACjD,UAAU,UAAU,CAAC,IAAI,IAAI,OAAO,GAAG,MAAM,GAAG;QAChD,GAAG,SAAS,CAAC,OAAO,CAAC,SAAS,CAC/B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Escape a string for safe inclusion in SVG/XML text content or attributes.
3
+ */
4
+ export declare function escapeXml(value: string): string;
5
+ //# sourceMappingURL=escape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escape.d.ts","sourceRoot":"","sources":["../../src/text/escape.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAO/C"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Escape a string for safe inclusion in SVG/XML text content or attributes.
3
+ */
4
+ export function escapeXml(value) {
5
+ return value
6
+ .replaceAll("&", "&amp;")
7
+ .replaceAll("<", "&lt;")
8
+ .replaceAll(">", "&gt;")
9
+ .replaceAll('"', "&quot;")
10
+ .replaceAll("'", "&apos;");
11
+ }
12
+ //# sourceMappingURL=escape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escape.js","sourceRoot":"","sources":["../../src/text/escape.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO,KAAK;SACT,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;SACzB,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { escapeXml } from "./escape.js";
2
+ export { textElement } from "./element.js";
3
+ export type { TextAttributes } from "./element.js";
4
+ export { layoutStack } from "./stack.js";
5
+ export type { PlacedLine, StackLine } from "./stack.js";
6
+ export { estimateCharsPerLine, wrapText } from "./wrap.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { escapeXml } from "./escape.js";
2
+ export { textElement } from "./element.js";
3
+ export { layoutStack } from "./stack.js";
4
+ export { estimateCharsPerLine, wrapText } from "./wrap.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * A single line to place in a vertical stack.
3
+ */
4
+ export interface StackLine {
5
+ readonly fontSize: number;
6
+ /** Multiplier applied to `fontSize` for this line's total advance. */
7
+ readonly lineHeight?: number;
8
+ /** Extra space, in pixels, inserted before this line. Defaults to `0`. */
9
+ readonly gapBefore?: number;
10
+ }
11
+ /**
12
+ * A stack line with its computed text baseline `y` coordinate.
13
+ */
14
+ export interface PlacedLine {
15
+ readonly y: number;
16
+ readonly index: number;
17
+ }
18
+ /**
19
+ * Vertically centre a stack of lines within `[top, bottom]` and return the
20
+ * text baseline for each. The block is centred as a whole; if it is taller
21
+ * than the available area it simply starts at `top`.
22
+ */
23
+ export declare function layoutStack(lines: readonly StackLine[], top: number, bottom: number): PlacedLine[];
24
+ //# sourceMappingURL=stack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack.d.ts","sourceRoot":"","sources":["../../src/text/stack.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,sEAAsE;IACtE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GACb,UAAU,EAAE,CAed"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Vertically centre a stack of lines within `[top, bottom]` and return the
3
+ * text baseline for each. The block is centred as a whole; if it is taller
4
+ * than the available area it simply starts at `top`.
5
+ */
6
+ export function layoutStack(lines, top, bottom) {
7
+ const advances = lines.map((line) => (line.gapBefore ?? 0) + line.fontSize * (line.lineHeight ?? 1.2));
8
+ const total = advances.reduce((sum, advance) => sum + advance, 0);
9
+ let cursor = top + Math.max(0, (bottom - top - total) / 2);
10
+ return lines.map((line, index) => {
11
+ // Approximate the ascent as 80% of the font size to sit the baseline
12
+ // sensibly within each line's advance box, after any leading gap.
13
+ const baseline = cursor + (line.gapBefore ?? 0) + line.fontSize * 0.8;
14
+ cursor += advances[index] ?? 0;
15
+ return { y: Math.round(baseline), index };
16
+ });
17
+ }
18
+ //# sourceMappingURL=stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack.js","sourceRoot":"","sources":["../../src/text/stack.ts"],"names":[],"mappings":"AAmBA;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,KAA2B,EAC3B,GAAW,EACX,MAAc;IAEd,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CACxB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC,CAC3E,CAAC;IACF,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;IAElE,IAAI,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAE3D,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC/B,qEAAqE;QACrE,kEAAkE;QAClE,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACtE,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Naive greedy word-wrap by character count. Words longer than the limit are
3
+ * kept intact on their own line rather than being split.
4
+ */
5
+ export declare function wrapText(text: string, charactersPerLine: number): string[];
6
+ /**
7
+ * Estimate how many characters of the given font size fit within `widthPx`.
8
+ * The `widthFactor` approximates average glyph width as a fraction of the font
9
+ * size (bolder/wider faces want a larger factor).
10
+ */
11
+ export declare function estimateCharsPerLine(widthPx: number, fontSize: number, widthFactor?: number): number;
12
+ //# sourceMappingURL=wrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap.d.ts","sourceRoot":"","sources":["../../src/text/wrap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,EAAE,CAsB1E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,SAAO,GACjB,MAAM,CAER"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Naive greedy word-wrap by character count. Words longer than the limit are
3
+ * kept intact on their own line rather than being split.
4
+ */
5
+ export function wrapText(text, charactersPerLine) {
6
+ const limit = Math.max(1, Math.floor(charactersPerLine));
7
+ const words = text.split(/\s+/).filter((word) => word !== "");
8
+ const lines = [];
9
+ let currentLine = "";
10
+ for (const word of words) {
11
+ const nextLine = currentLine === "" ? word : `${currentLine} ${word}`;
12
+ if (nextLine.length > limit && currentLine !== "") {
13
+ lines.push(currentLine);
14
+ currentLine = word;
15
+ }
16
+ else {
17
+ currentLine = nextLine;
18
+ }
19
+ }
20
+ if (currentLine !== "") {
21
+ lines.push(currentLine);
22
+ }
23
+ return lines;
24
+ }
25
+ /**
26
+ * Estimate how many characters of the given font size fit within `widthPx`.
27
+ * The `widthFactor` approximates average glyph width as a fraction of the font
28
+ * size (bolder/wider faces want a larger factor).
29
+ */
30
+ export function estimateCharsPerLine(widthPx, fontSize, widthFactor = 0.58) {
31
+ return Math.max(1, Math.floor(widthPx / (fontSize * widthFactor)));
32
+ }
33
+ //# sourceMappingURL=wrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap.js","sourceRoot":"","sources":["../../src/text/wrap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,iBAAyB;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,WAAW,IAAI,IAAI,EAAE,CAAC;QAEtE,IAAI,QAAQ,CAAC,MAAM,GAAG,KAAK,IAAI,WAAW,KAAK,EAAE,EAAE,CAAC;YAClD,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxB,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,QAAQ,CAAC;QACzB,CAAC;IACH,CAAC;IAED,IAAI,WAAW,KAAK,EAAE,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAe,EACf,QAAgB,EAChB,WAAW,GAAG,IAAI;IAElB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC"}