@kensio/colophon 2.4.0 → 2.6.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 (687) hide show
  1. package/README.md +139 -13
  2. package/dist/astro/index.d.ts +49 -0
  3. package/dist/astro/index.d.ts.map +1 -0
  4. package/dist/astro/index.js +42 -0
  5. package/dist/astro/index.js.map +1 -0
  6. package/dist/background/gradient.d.ts +12 -0
  7. package/dist/background/gradient.d.ts.map +1 -0
  8. package/dist/background/gradient.js +21 -0
  9. package/dist/background/gradient.js.map +1 -0
  10. package/dist/background/image.d.ts +14 -0
  11. package/dist/background/image.d.ts.map +1 -0
  12. package/dist/background/image.js +36 -0
  13. package/dist/background/image.js.map +1 -0
  14. package/dist/{background.d.ts → background/index.d.ts} +5 -5
  15. package/dist/background/index.d.ts.map +1 -0
  16. package/dist/background/index.js +27 -0
  17. package/dist/background/index.js.map +1 -0
  18. package/dist/background/mesh.d.ts +12 -0
  19. package/dist/background/mesh.d.ts.map +1 -0
  20. package/dist/background/mesh.js +43 -0
  21. package/dist/background/mesh.js.map +1 -0
  22. package/dist/cli/args/command.d.ts +13 -0
  23. package/dist/cli/args/command.d.ts.map +1 -0
  24. package/dist/cli/args/command.js +22 -0
  25. package/dist/cli/args/command.js.map +1 -0
  26. package/dist/cli/args/index.d.ts +28 -0
  27. package/dist/cli/args/index.d.ts.map +1 -0
  28. package/dist/cli/args/index.js +75 -0
  29. package/dist/cli/args/index.js.map +1 -0
  30. package/dist/cli/args/switches.d.ts +18 -0
  31. package/dist/cli/args/switches.d.ts.map +1 -0
  32. package/dist/cli/args/switches.js +42 -0
  33. package/dist/cli/args/switches.js.map +1 -0
  34. package/dist/cli/args/usage.d.ts +3 -0
  35. package/dist/cli/args/usage.d.ts.map +1 -0
  36. package/dist/cli/args/usage.js +34 -0
  37. package/dist/cli/args/usage.js.map +1 -0
  38. package/dist/cli/args/values.d.ts +11 -0
  39. package/dist/cli/args/values.d.ts.map +1 -0
  40. package/dist/cli/args/values.js +29 -0
  41. package/dist/cli/args/values.js.map +1 -0
  42. package/dist/cli/build.d.ts +10 -0
  43. package/dist/cli/build.d.ts.map +1 -0
  44. package/dist/cli/build.js +41 -0
  45. package/dist/cli/build.js.map +1 -0
  46. package/dist/cli/eject/adapters.d.ts +20 -0
  47. package/dist/cli/eject/adapters.d.ts.map +1 -0
  48. package/dist/cli/eject/adapters.js +29 -0
  49. package/dist/cli/eject/adapters.js.map +1 -0
  50. package/dist/cli/eject/astro.d.ts +13 -0
  51. package/dist/cli/eject/astro.d.ts.map +1 -0
  52. package/dist/cli/eject/astro.js +35 -0
  53. package/dist/cli/eject/astro.js.map +1 -0
  54. package/dist/cli/eject/hugo.d.ts +19 -0
  55. package/dist/cli/eject/hugo.d.ts.map +1 -0
  56. package/dist/cli/eject/hugo.js +127 -0
  57. package/dist/cli/eject/hugo.js.map +1 -0
  58. package/dist/cli/eject/index.d.ts +15 -0
  59. package/dist/cli/eject/index.d.ts.map +1 -0
  60. package/dist/cli/eject/index.js +46 -0
  61. package/dist/cli/eject/index.js.map +1 -0
  62. package/dist/cli/index.js +25 -20
  63. package/dist/cli/index.js.map +1 -1
  64. package/dist/cli/init/fs.d.ts +5 -0
  65. package/dist/cli/init/fs.d.ts.map +1 -0
  66. package/dist/cli/init/fs.js +19 -0
  67. package/dist/cli/init/fs.js.map +1 -0
  68. package/dist/cli/init/guess.d.ts +9 -0
  69. package/dist/cli/init/guess.d.ts.map +1 -0
  70. package/dist/cli/init/guess.js +27 -0
  71. package/dist/cli/init/guess.js.map +1 -0
  72. package/dist/cli/init/index.d.ts +11 -0
  73. package/dist/cli/init/index.d.ts.map +1 -0
  74. package/dist/cli/init/index.js +36 -0
  75. package/dist/cli/init/index.js.map +1 -0
  76. package/dist/cli/init/module.d.ts +12 -0
  77. package/dist/cli/init/module.d.ts.map +1 -0
  78. package/dist/cli/init/module.js +45 -0
  79. package/dist/cli/init/module.js.map +1 -0
  80. package/dist/cli/init/scaffold.d.ts +10 -0
  81. package/dist/cli/init/scaffold.d.ts.map +1 -0
  82. package/dist/cli/init/scaffold.js +52 -0
  83. package/dist/cli/init/scaffold.js.map +1 -0
  84. package/dist/cli/message.d.ts +7 -0
  85. package/dist/cli/message.d.ts.map +1 -0
  86. package/dist/cli/message.js +9 -0
  87. package/dist/cli/message.js.map +1 -0
  88. package/dist/cli/preview/index.d.ts +13 -0
  89. package/dist/cli/preview/index.d.ts.map +1 -0
  90. package/dist/cli/preview/index.js +27 -0
  91. package/dist/cli/preview/index.js.map +1 -0
  92. package/dist/cli/preview/open.d.ts +10 -0
  93. package/dist/cli/preview/open.d.ts.map +1 -0
  94. package/dist/cli/preview/open.js +32 -0
  95. package/dist/cli/preview/open.js.map +1 -0
  96. package/dist/cli/preview/render.d.ts +23 -0
  97. package/dist/cli/preview/render.d.ts.map +1 -0
  98. package/dist/cli/preview/render.js +40 -0
  99. package/dist/cli/preview/render.js.map +1 -0
  100. package/dist/cli/preview/root.d.ts +17 -0
  101. package/dist/cli/preview/root.d.ts.map +1 -0
  102. package/dist/cli/preview/root.js +22 -0
  103. package/dist/cli/preview/root.js.map +1 -0
  104. package/dist/cli/preview/size.d.ts +7 -0
  105. package/dist/cli/preview/size.d.ts.map +1 -0
  106. package/dist/cli/preview/size.js +13 -0
  107. package/dist/cli/preview/size.js.map +1 -0
  108. package/dist/cli/report.d.ts +6 -0
  109. package/dist/cli/report.d.ts.map +1 -0
  110. package/dist/cli/report.js +23 -0
  111. package/dist/cli/report.js.map +1 -0
  112. package/dist/cli/watch/filter.d.ts +14 -0
  113. package/dist/cli/watch/filter.d.ts.map +1 -0
  114. package/dist/cli/watch/filter.js +16 -0
  115. package/dist/cli/watch/filter.js.map +1 -0
  116. package/dist/cli/watch/index.d.ts +27 -0
  117. package/dist/cli/watch/index.d.ts.map +1 -0
  118. package/dist/cli/watch/index.js +38 -0
  119. package/dist/cli/watch/index.js.map +1 -0
  120. package/dist/cli/watch/queue.d.ts +24 -0
  121. package/dist/cli/watch/queue.d.ts.map +1 -0
  122. package/dist/cli/watch/queue.js +57 -0
  123. package/dist/cli/watch/queue.js.map +1 -0
  124. package/dist/config/defaults.d.ts +39 -1
  125. package/dist/config/defaults.d.ts.map +1 -1
  126. package/dist/config/defaults.js +38 -0
  127. package/dist/config/defaults.js.map +1 -1
  128. package/dist/config/index.d.ts +2 -2
  129. package/dist/config/index.d.ts.map +1 -1
  130. package/dist/config/index.js +27 -6
  131. package/dist/config/index.js.map +1 -1
  132. package/dist/config/output.d.ts +26 -0
  133. package/dist/config/output.d.ts.map +1 -0
  134. package/dist/config/output.js +45 -0
  135. package/dist/config/output.js.map +1 -0
  136. package/dist/config/resolve.d.ts +10 -0
  137. package/dist/config/resolve.d.ts.map +1 -1
  138. package/dist/config/resolve.js +20 -1
  139. package/dist/config/resolve.js.map +1 -1
  140. package/dist/config/size.d.ts +6 -0
  141. package/dist/config/size.d.ts.map +1 -1
  142. package/dist/config/size.js +20 -8
  143. package/dist/config/size.js.map +1 -1
  144. package/dist/content/index.d.ts +1 -0
  145. package/dist/content/index.d.ts.map +1 -1
  146. package/dist/content/index.js +1 -0
  147. package/dist/content/index.js.map +1 -1
  148. package/dist/content/read.d.ts +15 -0
  149. package/dist/content/read.d.ts.map +1 -0
  150. package/dist/content/read.js +36 -0
  151. package/dist/content/read.js.map +1 -0
  152. package/dist/content/walk.d.ts.map +1 -1
  153. package/dist/content/walk.js +4 -30
  154. package/dist/content/walk.js.map +1 -1
  155. package/dist/core/index.d.ts +37 -0
  156. package/dist/core/index.d.ts.map +1 -0
  157. package/dist/core/index.js +13 -0
  158. package/dist/core/index.js.map +1 -0
  159. package/dist/encode/fit.d.ts +16 -0
  160. package/dist/encode/fit.d.ts.map +1 -0
  161. package/dist/encode/fit.js +23 -0
  162. package/dist/encode/fit.js.map +1 -0
  163. package/dist/encode/format.d.ts +12 -0
  164. package/dist/encode/format.d.ts.map +1 -0
  165. package/dist/encode/format.js +40 -0
  166. package/dist/encode/format.js.map +1 -0
  167. package/dist/encode/index.d.ts +14 -0
  168. package/dist/encode/index.d.ts.map +1 -0
  169. package/dist/encode/index.js +52 -0
  170. package/dist/encode/index.js.map +1 -0
  171. package/dist/encode/sharp.d.ts +19 -0
  172. package/dist/encode/sharp.d.ts.map +1 -0
  173. package/dist/encode/sharp.js +57 -0
  174. package/dist/encode/sharp.js.map +1 -0
  175. package/dist/encode/warn.d.ts +10 -0
  176. package/dist/encode/warn.d.ts.map +1 -0
  177. package/dist/encode/warn.js +31 -0
  178. package/dist/encode/warn.js.map +1 -0
  179. package/dist/fonts/resolve.d.ts.map +1 -1
  180. package/dist/fonts/resolve.js +2 -8
  181. package/dist/fonts/resolve.js.map +1 -1
  182. package/dist/generate/index.d.ts +4 -0
  183. package/dist/generate/index.d.ts.map +1 -1
  184. package/dist/generate/index.js +10 -4
  185. package/dist/generate/index.js.map +1 -1
  186. package/dist/generate/options.d.ts +11 -1
  187. package/dist/generate/options.d.ts.map +1 -1
  188. package/dist/generate/options.js.map +1 -1
  189. package/dist/generate/output-path.d.ts +6 -2
  190. package/dist/generate/output-path.d.ts.map +1 -1
  191. package/dist/generate/output-path.js +7 -2
  192. package/dist/generate/output-path.js.map +1 -1
  193. package/dist/generate/plan.d.ts.map +1 -1
  194. package/dist/generate/plan.js +3 -3
  195. package/dist/generate/plan.js.map +1 -1
  196. package/dist/generate/render-image.d.ts +6 -0
  197. package/dist/generate/render-image.d.ts.map +1 -1
  198. package/dist/generate/render-image.js +14 -4
  199. package/dist/generate/render-image.js.map +1 -1
  200. package/dist/image/index.d.ts +3 -1
  201. package/dist/image/index.d.ts.map +1 -1
  202. package/dist/image/index.js +4 -3
  203. package/dist/image/index.js.map +1 -1
  204. package/dist/image/jpeg.d.ts +5 -4
  205. package/dist/image/jpeg.d.ts.map +1 -1
  206. package/dist/image/jpeg.js +13 -36
  207. package/dist/image/jpeg.js.map +1 -1
  208. package/dist/image/load.d.ts.map +1 -1
  209. package/dist/image/load.js +4 -15
  210. package/dist/image/load.js.map +1 -1
  211. package/dist/image/resolve.d.ts.map +1 -1
  212. package/dist/image/resolve.js +2 -8
  213. package/dist/image/resolve.js.map +1 -1
  214. package/dist/image/uri.d.ts.map +1 -1
  215. package/dist/image/uri.js +2 -3
  216. package/dist/image/uri.js.map +1 -1
  217. package/dist/index.d.ts +10 -5
  218. package/dist/index.d.ts.map +1 -1
  219. package/dist/index.js +12 -4
  220. package/dist/index.js.map +1 -1
  221. package/dist/jpeg/index.d.ts +10 -0
  222. package/dist/jpeg/index.d.ts.map +1 -0
  223. package/dist/jpeg/index.js +2 -0
  224. package/dist/jpeg/index.js.map +1 -0
  225. package/dist/jpeg/segments.d.ts +32 -0
  226. package/dist/jpeg/segments.d.ts.map +1 -0
  227. package/dist/jpeg/segments.js +66 -0
  228. package/dist/jpeg/segments.js.map +1 -0
  229. package/dist/layout/draw.d.ts +20 -0
  230. package/dist/layout/draw.d.ts.map +1 -0
  231. package/dist/layout/draw.js +32 -0
  232. package/dist/layout/draw.js.map +1 -0
  233. package/dist/layout/extent.d.ts +19 -0
  234. package/dist/layout/extent.d.ts.map +1 -0
  235. package/dist/layout/extent.js +24 -0
  236. package/dist/layout/extent.js.map +1 -0
  237. package/dist/layout/index.d.ts +7 -4
  238. package/dist/layout/index.d.ts.map +1 -1
  239. package/dist/layout/index.js +5 -3
  240. package/dist/layout/index.js.map +1 -1
  241. package/dist/layout/lines.d.ts +0 -17
  242. package/dist/layout/lines.d.ts.map +1 -1
  243. package/dist/layout/lines.js +2 -35
  244. package/dist/layout/lines.js.map +1 -1
  245. package/dist/measure/faces.d.ts.map +1 -1
  246. package/dist/measure/faces.js +8 -2
  247. package/dist/measure/faces.js.map +1 -1
  248. package/dist/meta/index.d.ts +1 -0
  249. package/dist/meta/index.d.ts.map +1 -1
  250. package/dist/meta/index.js +1 -0
  251. package/dist/meta/index.js.map +1 -1
  252. package/dist/meta/path.d.ts +24 -0
  253. package/dist/meta/path.d.ts.map +1 -0
  254. package/dist/meta/path.js +41 -0
  255. package/dist/meta/path.js.map +1 -0
  256. package/dist/meta/tags.d.ts.map +1 -1
  257. package/dist/meta/tags.js +6 -1
  258. package/dist/meta/tags.js.map +1 -1
  259. package/dist/placement/index.d.ts +7 -2
  260. package/dist/placement/index.d.ts.map +1 -1
  261. package/dist/placement/index.js +9 -3
  262. package/dist/placement/index.js.map +1 -1
  263. package/dist/placement/relative.d.ts +8 -3
  264. package/dist/placement/relative.d.ts.map +1 -1
  265. package/dist/placement/relative.js +12 -5
  266. package/dist/placement/relative.js.map +1 -1
  267. package/dist/platform/base64.d.ts +13 -0
  268. package/dist/platform/base64.d.ts.map +1 -0
  269. package/dist/platform/base64.js +35 -0
  270. package/dist/platform/base64.js.map +1 -0
  271. package/dist/platform/rasteriser.browser.d.ts +16 -0
  272. package/dist/platform/rasteriser.browser.d.ts.map +1 -0
  273. package/dist/platform/rasteriser.browser.js +20 -0
  274. package/dist/platform/rasteriser.browser.js.map +1 -0
  275. package/dist/platform/rasteriser.node.d.ts +2 -0
  276. package/dist/platform/rasteriser.node.d.ts.map +1 -0
  277. package/dist/platform/rasteriser.node.js +2 -0
  278. package/dist/platform/rasteriser.node.js.map +1 -0
  279. package/dist/platform/read-file.browser.d.ts +17 -0
  280. package/dist/platform/read-file.browser.d.ts.map +1 -0
  281. package/dist/platform/read-file.browser.js +23 -0
  282. package/dist/platform/read-file.browser.js.map +1 -0
  283. package/dist/platform/read-file.node.d.ts +19 -0
  284. package/dist/platform/read-file.node.d.ts.map +1 -0
  285. package/dist/platform/read-file.node.js +31 -0
  286. package/dist/platform/read-file.node.js.map +1 -0
  287. package/dist/png/chunk.d.ts +23 -0
  288. package/dist/png/chunk.d.ts.map +1 -0
  289. package/dist/png/chunk.js +48 -0
  290. package/dist/png/chunk.js.map +1 -0
  291. package/dist/png/index.d.ts +13 -0
  292. package/dist/png/index.d.ts.map +1 -0
  293. package/dist/png/index.js +3 -0
  294. package/dist/png/index.js.map +1 -0
  295. package/dist/png/recompress.d.ts +23 -0
  296. package/dist/png/recompress.d.ts.map +1 -0
  297. package/dist/png/recompress.js +81 -0
  298. package/dist/png/recompress.js.map +1 -0
  299. package/dist/props.d.ts +11 -0
  300. package/dist/props.d.ts.map +1 -1
  301. package/dist/props.js +16 -0
  302. package/dist/props.js.map +1 -1
  303. package/dist/render/image.d.ts +20 -0
  304. package/dist/render/image.d.ts.map +1 -0
  305. package/dist/render/image.js +29 -0
  306. package/dist/render/image.js.map +1 -0
  307. package/dist/render/index.d.ts +2 -1
  308. package/dist/render/index.d.ts.map +1 -1
  309. package/dist/render/index.js +5 -4
  310. package/dist/render/index.js.map +1 -1
  311. package/dist/render/png.d.ts +14 -4
  312. package/dist/render/png.d.ts.map +1 -1
  313. package/dist/render/png.js +22 -23
  314. package/dist/render/png.js.map +1 -1
  315. package/dist/render/rasterise.d.ts +15 -0
  316. package/dist/render/rasterise.d.ts.map +1 -0
  317. package/dist/render/rasterise.js +34 -0
  318. package/dist/render/rasterise.js.map +1 -0
  319. package/dist/render/svg.d.ts.map +1 -1
  320. package/dist/render/svg.js +10 -2
  321. package/dist/render/svg.js.map +1 -1
  322. package/dist/sign/base64url.d.ts +16 -0
  323. package/dist/sign/base64url.d.ts.map +1 -0
  324. package/dist/sign/base64url.js +24 -0
  325. package/dist/sign/base64url.js.map +1 -0
  326. package/dist/sign/index.d.ts +49 -0
  327. package/dist/sign/index.d.ts.map +1 -0
  328. package/dist/sign/index.js +133 -0
  329. package/dist/sign/index.js.map +1 -0
  330. package/dist/stamp/carrier/index.d.ts +7 -0
  331. package/dist/stamp/carrier/index.d.ts.map +1 -0
  332. package/dist/stamp/carrier/index.js +27 -0
  333. package/dist/stamp/carrier/index.js.map +1 -0
  334. package/dist/stamp/carrier/isobmff.d.ts +7 -0
  335. package/dist/stamp/carrier/isobmff.d.ts.map +1 -0
  336. package/dist/stamp/carrier/isobmff.js +55 -0
  337. package/dist/stamp/carrier/isobmff.js.map +1 -0
  338. package/dist/stamp/carrier/jpeg.d.ts +4 -0
  339. package/dist/stamp/carrier/jpeg.d.ts.map +1 -0
  340. package/dist/stamp/carrier/jpeg.js +76 -0
  341. package/dist/stamp/carrier/jpeg.js.map +1 -0
  342. package/dist/stamp/carrier/png.d.ts +7 -0
  343. package/dist/stamp/carrier/png.d.ts.map +1 -0
  344. package/dist/stamp/carrier/png.js +50 -0
  345. package/dist/stamp/carrier/png.js.map +1 -0
  346. package/dist/stamp/carrier/riff.d.ts +4 -0
  347. package/dist/stamp/carrier/riff.d.ts.map +1 -0
  348. package/dist/stamp/carrier/riff.js +54 -0
  349. package/dist/stamp/carrier/riff.js.map +1 -0
  350. package/dist/stamp/carrier/types.d.ts +25 -0
  351. package/dist/stamp/carrier/types.d.ts.map +1 -0
  352. package/dist/stamp/carrier/types.js +2 -0
  353. package/dist/stamp/carrier/types.js.map +1 -0
  354. package/dist/stamp/chunk.d.ts +0 -2
  355. package/dist/stamp/chunk.d.ts.map +1 -1
  356. package/dist/stamp/chunk.js +10 -18
  357. package/dist/stamp/chunk.js.map +1 -1
  358. package/dist/stamp/config-digest.d.ts +18 -0
  359. package/dist/stamp/config-digest.d.ts.map +1 -1
  360. package/dist/stamp/config-digest.js +25 -0
  361. package/dist/stamp/config-digest.js.map +1 -1
  362. package/dist/stamp/index.d.ts +2 -2
  363. package/dist/stamp/index.d.ts.map +1 -1
  364. package/dist/stamp/index.js +2 -2
  365. package/dist/stamp/index.js.map +1 -1
  366. package/dist/stamp/payload.d.ts +28 -0
  367. package/dist/stamp/payload.d.ts.map +1 -0
  368. package/dist/stamp/payload.js +42 -0
  369. package/dist/stamp/payload.js.map +1 -0
  370. package/dist/stamp/read.d.ts +5 -4
  371. package/dist/stamp/read.d.ts.map +1 -1
  372. package/dist/stamp/read.js +26 -43
  373. package/dist/stamp/read.js.map +1 -1
  374. package/dist/stamp/window.d.ts +11 -0
  375. package/dist/stamp/window.d.ts.map +1 -0
  376. package/dist/stamp/window.js +11 -0
  377. package/dist/stamp/window.js.map +1 -0
  378. package/dist/stamp/write.d.ts +21 -0
  379. package/dist/stamp/write.d.ts.map +1 -0
  380. package/dist/stamp/write.js +31 -0
  381. package/dist/stamp/write.js.map +1 -0
  382. package/dist/templates/article/bottom.d.ts +15 -0
  383. package/dist/templates/article/bottom.d.ts.map +1 -0
  384. package/dist/templates/article/bottom.js +61 -0
  385. package/dist/templates/article/bottom.js.map +1 -0
  386. package/dist/templates/article/index.d.ts +12 -0
  387. package/dist/templates/article/index.d.ts.map +1 -0
  388. package/dist/templates/article/index.js +42 -0
  389. package/dist/templates/article/index.js.map +1 -0
  390. package/dist/templates/article/lines.d.ts +27 -0
  391. package/dist/templates/article/lines.d.ts.map +1 -0
  392. package/dist/templates/article/lines.js +53 -0
  393. package/dist/templates/article/lines.js.map +1 -0
  394. package/dist/templates/article/tags.d.ts +25 -0
  395. package/dist/templates/article/tags.d.ts.map +1 -0
  396. package/dist/templates/article/tags.js +63 -0
  397. package/dist/templates/article/tags.js.map +1 -0
  398. package/dist/templates/attribution.d.ts +2 -6
  399. package/dist/templates/attribution.d.ts.map +1 -1
  400. package/dist/templates/attribution.js +8 -22
  401. package/dist/templates/attribution.js.map +1 -1
  402. package/dist/templates/banner/badge-props.d.ts +16 -0
  403. package/dist/templates/banner/badge-props.d.ts.map +1 -0
  404. package/dist/templates/banner/badge-props.js +58 -0
  405. package/dist/templates/banner/badge-props.js.map +1 -0
  406. package/dist/templates/banner/index.d.ts.map +1 -1
  407. package/dist/templates/banner/index.js +6 -4
  408. package/dist/templates/banner/index.js.map +1 -1
  409. package/dist/templates/banner/version.d.ts.map +1 -1
  410. package/dist/templates/banner/version.js +4 -4
  411. package/dist/templates/banner/version.js.map +1 -1
  412. package/dist/templates/bottom.d.ts +23 -0
  413. package/dist/templates/bottom.d.ts.map +1 -0
  414. package/dist/templates/bottom.js +37 -0
  415. package/dist/templates/bottom.js.map +1 -0
  416. package/dist/templates/byline.d.ts +19 -0
  417. package/dist/templates/byline.d.ts.map +1 -0
  418. package/dist/templates/byline.js +45 -0
  419. package/dist/templates/byline.js.map +1 -0
  420. package/dist/templates/code/clip.js +1 -1
  421. package/dist/templates/code/clip.js.map +1 -1
  422. package/dist/templates/code/fit.js +1 -1
  423. package/dist/templates/code/fit.js.map +1 -1
  424. package/dist/templates/code/warn.d.ts +1 -1
  425. package/dist/templates/code/warn.d.ts.map +1 -1
  426. package/dist/templates/code/warn.js +2 -2
  427. package/dist/templates/code/warn.js.map +1 -1
  428. package/dist/templates/docs/chrome.d.ts +17 -0
  429. package/dist/templates/docs/chrome.d.ts.map +1 -0
  430. package/dist/templates/docs/chrome.js +44 -0
  431. package/dist/templates/docs/chrome.js.map +1 -0
  432. package/dist/templates/docs/crumbs.d.ts +14 -0
  433. package/dist/templates/docs/crumbs.d.ts.map +1 -0
  434. package/dist/templates/docs/crumbs.js +32 -0
  435. package/dist/templates/docs/crumbs.js.map +1 -0
  436. package/dist/templates/docs/index.d.ts +13 -0
  437. package/dist/templates/docs/index.d.ts.map +1 -0
  438. package/dist/templates/docs/index.js +47 -0
  439. package/dist/templates/docs/index.js.map +1 -0
  440. package/dist/templates/docs/lines.d.ts +14 -0
  441. package/dist/templates/docs/lines.d.ts.map +1 -0
  442. package/dist/templates/docs/lines.js +29 -0
  443. package/dist/templates/docs/lines.js.map +1 -0
  444. package/dist/templates/event/index.d.ts +12 -0
  445. package/dist/templates/event/index.d.ts.map +1 -0
  446. package/dist/templates/event/index.js +59 -0
  447. package/dist/templates/event/index.js.map +1 -0
  448. package/dist/templates/event/lines.d.ts +14 -0
  449. package/dist/templates/event/lines.d.ts.map +1 -0
  450. package/dist/templates/event/lines.js +29 -0
  451. package/dist/templates/event/lines.js.map +1 -0
  452. package/dist/templates/event/plate.d.ts +16 -0
  453. package/dist/templates/event/plate.d.ts.map +1 -0
  454. package/dist/templates/event/plate.js +36 -0
  455. package/dist/templates/event/plate.js.map +1 -0
  456. package/dist/templates/frame.d.ts +68 -0
  457. package/dist/templates/frame.d.ts.map +1 -0
  458. package/dist/templates/frame.js +63 -0
  459. package/dist/templates/frame.js.map +1 -0
  460. package/dist/templates/index.d.ts +9 -0
  461. package/dist/templates/index.d.ts.map +1 -1
  462. package/dist/templates/index.js +27 -0
  463. package/dist/templates/index.js.map +1 -1
  464. package/dist/templates/photo/index.d.ts +17 -0
  465. package/dist/templates/photo/index.d.ts.map +1 -0
  466. package/dist/templates/photo/index.js +51 -0
  467. package/dist/templates/photo/index.js.map +1 -0
  468. package/dist/templates/photo/lines.d.ts +21 -0
  469. package/dist/templates/photo/lines.d.ts.map +1 -0
  470. package/dist/templates/photo/lines.js +36 -0
  471. package/dist/templates/photo/lines.js.map +1 -0
  472. package/dist/templates/pill.d.ts +33 -0
  473. package/dist/templates/pill.d.ts.map +1 -0
  474. package/dist/templates/pill.js +50 -0
  475. package/dist/templates/pill.js.map +1 -0
  476. package/dist/templates/portrait.d.ts +40 -0
  477. package/dist/templates/portrait.d.ts.map +1 -0
  478. package/dist/templates/portrait.js +56 -0
  479. package/dist/templates/portrait.js.map +1 -0
  480. package/dist/templates/quote/index.d.ts +11 -0
  481. package/dist/templates/quote/index.d.ts.map +1 -0
  482. package/dist/templates/quote/index.js +60 -0
  483. package/dist/templates/quote/index.js.map +1 -0
  484. package/dist/templates/quote/lines.d.ts +24 -0
  485. package/dist/templates/quote/lines.d.ts.map +1 -0
  486. package/dist/templates/quote/lines.js +35 -0
  487. package/dist/templates/quote/lines.js.map +1 -0
  488. package/dist/templates/quote/mark.d.ts +13 -0
  489. package/dist/templates/quote/mark.d.ts.map +1 -0
  490. package/dist/templates/quote/mark.js +39 -0
  491. package/dist/templates/quote/mark.js.map +1 -0
  492. package/dist/templates/quote/speaker.d.ts +18 -0
  493. package/dist/templates/quote/speaker.d.ts.map +1 -0
  494. package/dist/templates/quote/speaker.js +41 -0
  495. package/dist/templates/quote/speaker.js.map +1 -0
  496. package/dist/templates/release/block.d.ts +8 -0
  497. package/dist/templates/release/block.d.ts.map +1 -0
  498. package/dist/templates/release/block.js +16 -0
  499. package/dist/templates/release/block.js.map +1 -0
  500. package/dist/templates/release/changes.d.ts +23 -0
  501. package/dist/templates/release/changes.d.ts.map +1 -0
  502. package/dist/templates/release/changes.js +45 -0
  503. package/dist/templates/release/changes.js.map +1 -0
  504. package/dist/templates/release/index.d.ts +11 -0
  505. package/dist/templates/release/index.d.ts.map +1 -0
  506. package/dist/templates/release/index.js +55 -0
  507. package/dist/templates/release/index.js.map +1 -0
  508. package/dist/templates/release/lines.d.ts +21 -0
  509. package/dist/templates/release/lines.d.ts.map +1 -0
  510. package/dist/templates/release/lines.js +36 -0
  511. package/dist/templates/release/lines.js.map +1 -0
  512. package/dist/templates/stat/index.d.ts +11 -0
  513. package/dist/templates/stat/index.d.ts.map +1 -0
  514. package/dist/templates/stat/index.js +43 -0
  515. package/dist/templates/stat/index.js.map +1 -0
  516. package/dist/templates/stat/lines.d.ts +23 -0
  517. package/dist/templates/stat/lines.d.ts.map +1 -0
  518. package/dist/templates/stat/lines.js +47 -0
  519. package/dist/templates/stat/lines.js.map +1 -0
  520. package/dist/templates/terminal/index.d.ts +16 -0
  521. package/dist/templates/terminal/index.d.ts.map +1 -0
  522. package/dist/templates/terminal/index.js +62 -0
  523. package/dist/templates/terminal/index.js.map +1 -0
  524. package/dist/templates/terminal/session.d.ts +17 -0
  525. package/dist/templates/terminal/session.d.ts.map +1 -0
  526. package/dist/templates/terminal/session.js +86 -0
  527. package/dist/templates/terminal/session.js.map +1 -0
  528. package/dist/templates/terminal/window.d.ts +14 -0
  529. package/dist/templates/terminal/window.d.ts.map +1 -0
  530. package/dist/templates/terminal/window.js +84 -0
  531. package/dist/templates/terminal/window.js.map +1 -0
  532. package/dist/templates/version.d.ts +16 -0
  533. package/dist/templates/version.d.ts.map +1 -0
  534. package/dist/templates/version.js +23 -0
  535. package/dist/templates/version.js.map +1 -0
  536. package/dist/templates/wordmark/index.d.ts +13 -0
  537. package/dist/templates/wordmark/index.d.ts.map +1 -0
  538. package/dist/templates/wordmark/index.js +53 -0
  539. package/dist/templates/wordmark/index.js.map +1 -0
  540. package/dist/templates/wordmark/lines.d.ts +22 -0
  541. package/dist/templates/wordmark/lines.d.ts.map +1 -0
  542. package/dist/templates/wordmark/lines.js +61 -0
  543. package/dist/templates/wordmark/lines.js.map +1 -0
  544. package/dist/templates/wordmark/mark.d.ts +16 -0
  545. package/dist/templates/wordmark/mark.d.ts.map +1 -0
  546. package/dist/templates/wordmark/mark.js +30 -0
  547. package/dist/templates/wordmark/mark.js.map +1 -0
  548. package/dist/text/clamp.d.ts +12 -0
  549. package/dist/text/clamp.d.ts.map +1 -0
  550. package/dist/text/clamp.js +41 -0
  551. package/dist/text/clamp.js.map +1 -0
  552. package/dist/text/ellipsis.d.ts +3 -0
  553. package/dist/text/ellipsis.d.ts.map +1 -0
  554. package/dist/text/ellipsis.js +3 -0
  555. package/dist/text/ellipsis.js.map +1 -0
  556. package/dist/text/index.d.ts +2 -0
  557. package/dist/text/index.d.ts.map +1 -1
  558. package/dist/text/index.js +2 -0
  559. package/dist/text/index.js.map +1 -1
  560. package/dist/texture/grain.d.ts +17 -0
  561. package/dist/texture/grain.d.ts.map +1 -0
  562. package/dist/texture/grain.js +29 -0
  563. package/dist/texture/grain.js.map +1 -0
  564. package/dist/texture/index.d.ts +11 -0
  565. package/dist/texture/index.d.ts.map +1 -0
  566. package/dist/texture/index.js +20 -0
  567. package/dist/texture/index.js.map +1 -0
  568. package/dist/texture/pattern.d.ts +17 -0
  569. package/dist/texture/pattern.d.ts.map +1 -0
  570. package/dist/texture/pattern.js +45 -0
  571. package/dist/texture/pattern.js.map +1 -0
  572. package/dist/texture/resolve.d.ts +16 -0
  573. package/dist/texture/resolve.d.ts.map +1 -0
  574. package/dist/texture/resolve.js +20 -0
  575. package/dist/texture/resolve.js.map +1 -0
  576. package/dist/theme/index.d.ts +27 -0
  577. package/dist/theme/index.d.ts.map +1 -0
  578. package/dist/theme/index.js +41 -0
  579. package/dist/theme/index.js.map +1 -0
  580. package/dist/theme/presets.d.ts +38 -0
  581. package/dist/theme/presets.d.ts.map +1 -0
  582. package/dist/theme/presets.js +150 -0
  583. package/dist/theme/presets.js.map +1 -0
  584. package/dist/types.d.ts +281 -10
  585. package/dist/types.d.ts.map +1 -1
  586. package/dist/validate/background.d.ts +12 -0
  587. package/dist/validate/background.d.ts.map +1 -0
  588. package/dist/validate/background.js +53 -0
  589. package/dist/validate/background.js.map +1 -0
  590. package/dist/validate/collect.d.ts +9 -0
  591. package/dist/validate/collect.d.ts.map +1 -0
  592. package/dist/validate/collect.js +35 -0
  593. package/dist/validate/collect.js.map +1 -0
  594. package/dist/validate/index.d.ts.map +1 -1
  595. package/dist/validate/index.js +2 -20
  596. package/dist/validate/index.js.map +1 -1
  597. package/dist/validate/keys.d.ts +22 -0
  598. package/dist/validate/keys.d.ts.map +1 -1
  599. package/dist/validate/keys.js +69 -0
  600. package/dist/validate/keys.js.map +1 -1
  601. package/dist/validate/overrides.d.ts.map +1 -1
  602. package/dist/validate/overrides.js +5 -1
  603. package/dist/validate/overrides.js.map +1 -1
  604. package/dist/validate/texture.d.ts +11 -0
  605. package/dist/validate/texture.d.ts.map +1 -0
  606. package/dist/validate/texture.js +34 -0
  607. package/dist/validate/texture.js.map +1 -0
  608. package/dist/validate/values.d.ts +16 -10
  609. package/dist/validate/values.d.ts.map +1 -1
  610. package/dist/validate/values.js +31 -44
  611. package/dist/validate/values.js.map +1 -1
  612. package/package.json +16 -2
  613. package/dist/background.d.ts.map +0 -1
  614. package/dist/background.js +0 -65
  615. package/dist/background.js.map +0 -1
  616. package/dist/cli/args.d.ts +0 -14
  617. package/dist/cli/args.d.ts.map +0 -1
  618. package/dist/cli/args.js +0 -67
  619. package/dist/cli/args.js.map +0 -1
  620. package/dist/cli.d.ts +0 -3
  621. package/dist/cli.d.ts.map +0 -1
  622. package/dist/cli.js +0 -102
  623. package/dist/cli.js.map +0 -1
  624. package/dist/config.d.ts +0 -95
  625. package/dist/config.d.ts.map +0 -1
  626. package/dist/config.js +0 -208
  627. package/dist/config.js.map +0 -1
  628. package/dist/fonts.d.ts +0 -18
  629. package/dist/fonts.d.ts.map +0 -1
  630. package/dist/fonts.js +0 -102
  631. package/dist/fonts.js.map +0 -1
  632. package/dist/generate.d.ts +0 -63
  633. package/dist/generate.d.ts.map +0 -1
  634. package/dist/generate.js +0 -109
  635. package/dist/generate.js.map +0 -1
  636. package/dist/highlight.d.ts +0 -75
  637. package/dist/highlight.d.ts.map +0 -1
  638. package/dist/highlight.js +0 -137
  639. package/dist/highlight.js.map +0 -1
  640. package/dist/render.d.ts +0 -24
  641. package/dist/render.d.ts.map +0 -1
  642. package/dist/render.js +0 -77
  643. package/dist/render.js.map +0 -1
  644. package/dist/stamp.d.ts +0 -29
  645. package/dist/stamp.d.ts.map +0 -1
  646. package/dist/stamp.js +0 -198
  647. package/dist/stamp.js.map +0 -1
  648. package/dist/templates/banner.d.ts +0 -9
  649. package/dist/templates/banner.d.ts.map +0 -1
  650. package/dist/templates/banner.js +0 -115
  651. package/dist/templates/banner.js.map +0 -1
  652. package/dist/templates/card.d.ts +0 -7
  653. package/dist/templates/card.d.ts.map +0 -1
  654. package/dist/templates/card.js +0 -72
  655. package/dist/templates/card.js.map +0 -1
  656. package/dist/templates/code.d.ts +0 -12
  657. package/dist/templates/code.d.ts.map +0 -1
  658. package/dist/templates/code.js +0 -275
  659. package/dist/templates/code.js.map +0 -1
  660. package/dist/templates/measure.d.ts +0 -11
  661. package/dist/templates/measure.d.ts.map +0 -1
  662. package/dist/templates/measure.js +0 -11
  663. package/dist/templates/measure.js.map +0 -1
  664. package/dist/templates/props.d.ts +0 -7
  665. package/dist/templates/props.d.ts.map +0 -1
  666. package/dist/templates/props.js +0 -17
  667. package/dist/templates/props.js.map +0 -1
  668. package/dist/templates/text.d.ts +0 -37
  669. package/dist/templates/text.d.ts.map +0 -1
  670. package/dist/templates/text.js +0 -26
  671. package/dist/templates/text.js.map +0 -1
  672. package/dist/text/stack.d.ts +0 -24
  673. package/dist/text/stack.d.ts.map +0 -1
  674. package/dist/text/stack.js +0 -18
  675. package/dist/text/stack.js.map +0 -1
  676. package/dist/text.d.ts +0 -56
  677. package/dist/text.d.ts.map +0 -1
  678. package/dist/text.js +0 -78
  679. package/dist/text.js.map +0 -1
  680. package/dist/validate/sizes.d.ts +0 -9
  681. package/dist/validate/sizes.d.ts.map +0 -1
  682. package/dist/validate/sizes.js +0 -27
  683. package/dist/validate/sizes.js.map +0 -1
  684. package/dist/validate.d.ts +0 -15
  685. package/dist/validate.d.ts.map +0 -1
  686. package/dist/validate.js +0 -300
  687. package/dist/validate.js.map +0 -1
@@ -0,0 +1,42 @@
1
+ import { drawLines } from "../../layout/index.js";
2
+ import { contentArea, imageFrame, markRoom } from "../frame.js";
3
+ import { logoElement, logoRect } from "../logo.js";
4
+ import { articleBottom } from "./bottom.js";
5
+ import { articleLines, bylineParts } from "./lines.js";
6
+ import { tagBand } from "./tags.js";
7
+ /**
8
+ * The default blog card: tags along the top, the headline and its standfirst
9
+ * in the middle, and who wrote it and when along the bottom.
10
+ *
11
+ * It reads `tags`, `author` and `date` on top of the usual `title` and
12
+ * `subtitle`, and draws the `avatar` prop beside the byline rather than beside
13
+ * the footer. That leaves the two ends of the bottom line saying different
14
+ * things: who wrote this post at the left, and whose site it is at the right.
15
+ */
16
+ export const articleTemplate = {
17
+ name: "article",
18
+ render({ props, config, dimensions, measure, logo, avatar, }) {
19
+ const { width, height } = dimensions;
20
+ const { fontFamily, colors } = config;
21
+ const said = bylineParts(props);
22
+ const frame = imageFrame(dimensions, config, avatar, {
23
+ footer: said.length > 0,
24
+ });
25
+ const { pad } = frame;
26
+ const mark = logoRect(logo, dimensions, pad, "start");
27
+ const chips = tagBand(props, config, dimensions, pad, markRoom(mark?.width, pad), measure);
28
+ const topMark = Math.max(chips.height, mark?.height ?? 0);
29
+ const area = contentArea(frame, markRoom(topMark, Math.round(height * 0.035)));
30
+ const body = drawLines(articleLines(props, {
31
+ measure,
32
+ fontFamily,
33
+ contentWidth: area.width,
34
+ titleFs: Math.round(height * 0.082),
35
+ standfirstFs: Math.round(height * 0.042),
36
+ height,
37
+ }), area, { fontFamily, fill: colors.foreground, lineHeight: 1.28 });
38
+ const bottom = articleBottom(said, config, frame, width, avatar, measure);
39
+ return chips.svg + logoElement(logo, mark) + body + bottom;
40
+ },
41
+ };
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/article/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,eAAe,GAAa;IACvC,IAAI,EAAE,SAAS;IACf,MAAM,CAAC,EACL,KAAK,EACL,MAAM,EACN,UAAU,EACV,OAAO,EACP,IAAI,EACJ,MAAM,GACU;QAChB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;QACrC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QACtC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE;YACnD,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;SACxB,CAAC,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;QACtB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAEtD,MAAM,KAAK,GAAG,OAAO,CACnB,KAAK,EACL,MAAM,EACN,UAAU,EACV,GAAG,EACH,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,EAC1B,OAAO,CACR,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,WAAW,CACtB,KAAK,EACL,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAC9C,CAAC;QAEF,MAAM,IAAI,GAAG,SAAS,CACpB,YAAY,CAAC,KAAK,EAAE;YAClB,OAAO;YACP,UAAU;YACV,YAAY,EAAE,IAAI,CAAC,KAAK;YACxB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;YACnC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;YACxC,MAAM;SACP,CAAC,EACF,IAAI,EACJ,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,CAC1D,CAAC;QAEF,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAE1E,OAAO,KAAK,CAAC,GAAG,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC;IAC7D,CAAC;CACF,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { TextLine } from "../../layout/index.js";
2
+ import type { MeasureText, MetaImageProps } from "../../types.js";
3
+ /** The space the article's text has, and how to measure it into it. */
4
+ export interface ArticleText {
5
+ readonly measure: MeasureText;
6
+ readonly fontFamily: string;
7
+ readonly contentWidth: number;
8
+ readonly titleFs: number;
9
+ readonly standfirstFs: number;
10
+ readonly height: number;
11
+ }
12
+ /** The headline, then the standfirst under it. */
13
+ export declare function articleLines(props: MetaImageProps, text: ArticleText): TextLine[];
14
+ /**
15
+ * The byline in the two forms it can take: who wrote it and when, then who
16
+ * wrote it alone.
17
+ *
18
+ * The bottom line is shared with the site's own footer, so there is not always
19
+ * room for both. Dropping the date is a better answer than cutting the line,
20
+ * which on a square image lands in the middle of the month. Either may be
21
+ * missing to begin with, and a post with neither leaves the avatar to stand
22
+ * for both.
23
+ */
24
+ export declare function bylineParts(props: MetaImageProps): readonly string[];
25
+ /** The byline as the post would have it, before any of it is given up. */
26
+ export declare function bylineText(props: MetaImageProps): string;
27
+ //# sourceMappingURL=lines.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lines.d.ts","sourceRoot":"","sources":["../../../src/templates/article/lines.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAUlE,uEAAuE;AACvE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,kDAAkD;AAClD,wBAAgB,YAAY,CAC1B,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,WAAW,GAChB,QAAQ,EAAE,CAsBZ;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,MAAM,EAAE,CASpE;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAExD"}
@@ -0,0 +1,53 @@
1
+ import { blockLines, optionalString } from "../../layout/index.js";
2
+ const maxTitleLines = 4;
3
+ const maxStandfirstLines = 3;
4
+ const titleFloor = 0.6;
5
+ const standfirstFloor = 0.8;
6
+ /** What goes between the author and the date. */
7
+ const separator = " · ";
8
+ /** The headline, then the standfirst under it. */
9
+ export function articleLines(props, text) {
10
+ const { measure, fontFamily, contentWidth } = text;
11
+ return [
12
+ ...blockLines(props.title, measure, fontFamily, {
13
+ maxWidth: contentWidth,
14
+ maxLines: maxTitleLines,
15
+ fontSize: text.titleFs,
16
+ floor: titleFloor,
17
+ fontWeight: 800,
18
+ opacity: 1,
19
+ }),
20
+ ...blockLines(props.subtitle, measure, fontFamily, {
21
+ maxWidth: contentWidth,
22
+ maxLines: maxStandfirstLines,
23
+ fontSize: text.standfirstFs,
24
+ floor: standfirstFloor,
25
+ fontWeight: 500,
26
+ opacity: 0.85,
27
+ gapBefore: Math.round(text.height * 0.03),
28
+ }),
29
+ ];
30
+ }
31
+ /**
32
+ * The byline in the two forms it can take: who wrote it and when, then who
33
+ * wrote it alone.
34
+ *
35
+ * The bottom line is shared with the site's own footer, so there is not always
36
+ * room for both. Dropping the date is a better answer than cutting the line,
37
+ * which on a square image lands in the middle of the month. Either may be
38
+ * missing to begin with, and a post with neither leaves the avatar to stand
39
+ * for both.
40
+ */
41
+ export function bylineParts(props) {
42
+ const author = optionalString(props["author"]) ?? "";
43
+ const date = optionalString(props["date"]) ?? "";
44
+ if (author === "" || date === "") {
45
+ return [author === "" ? date : author].filter((part) => part !== "");
46
+ }
47
+ return [`${author}${separator}${date}`, author];
48
+ }
49
+ /** The byline as the post would have it, before any of it is given up. */
50
+ export function bylineText(props) {
51
+ return bylineParts(props)[0] ?? "";
52
+ }
53
+ //# sourceMappingURL=lines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lines.js","sourceRoot":"","sources":["../../../src/templates/article/lines.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGnE,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B,iDAAiD;AACjD,MAAM,SAAS,GAAG,KAAK,CAAC;AAYxB,kDAAkD;AAClD,MAAM,UAAU,YAAY,CAC1B,KAAqB,EACrB,IAAiB;IAEjB,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAEnD,OAAO;QACL,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE;YAC9C,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE,aAAa;YACvB,QAAQ,EAAE,IAAI,CAAC,OAAO;YACtB,KAAK,EAAE,UAAU;YACjB,UAAU,EAAE,GAAG;YACf,OAAO,EAAE,CAAC;SACX,CAAC;QACF,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE;YACjD,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE,kBAAkB;YAC5B,QAAQ,EAAE,IAAI,CAAC,YAAY;YAC3B,KAAK,EAAE,eAAe;YACtB,UAAU,EAAE,GAAG;YACf,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SAC1C,CAAC;KACH,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAC,KAAqB;IAC/C,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAEjD,IAAI,MAAM,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QACjC,OAAO,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,UAAU,CAAC,KAAqB;IAC9C,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACrC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { Rect } from "../../layout/index.js";
2
+ import type { Dimensions, MeasureText, MetaImageProps, ResolvedConfig } from "../../types.js";
3
+ import type { PillStyle } from "../pill.js";
4
+ /**
5
+ * A row of tags along the top of the image.
6
+ *
7
+ * Tags that do not fit are dropped rather than being wrapped onto a second
8
+ * line or shrunk. A post's tag list is written for its own pages, where there
9
+ * is a sidebar to hold all nine of them, and the share image wants the first
10
+ * two or three of that list as a hint at the subject. Growing to fit them all
11
+ * would take the room the title is drawn in.
12
+ */
13
+ export declare function tagRow(tags: readonly string[], area: Rect, style: PillStyle, measure: MeasureText): string;
14
+ /**
15
+ * The row of tags along the top, and how much room it took.
16
+ *
17
+ * Both are wanted at once: the tags are drawn from the top margin, and the
18
+ * headline underneath starts below whichever of them and the logo reaches
19
+ * furthest down.
20
+ */
21
+ export declare function tagBand(props: MetaImageProps, config: ResolvedConfig, dimensions: Dimensions, pad: number, reserved: number, measure: MeasureText): {
22
+ readonly svg: string;
23
+ readonly height: number;
24
+ };
25
+ //# sourceMappingURL=tags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../../src/templates/article/tags.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,cAAc,EACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAS5C;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CACpB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,WAAW,GACnB,MAAM,CA6BR;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CACrB,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAyBnD"}
@@ -0,0 +1,63 @@
1
+ import { row, stringList } from "../../layout/index.js";
2
+ import { pill, pillWidth } from "../pill.js";
3
+ /** The tags' height, as a fraction of the image's. */
4
+ const heightScale = 0.05;
5
+ /** Space between one tag and the next, as a fraction of their height. */
6
+ const gapScale = 0.3;
7
+ /**
8
+ * A row of tags along the top of the image.
9
+ *
10
+ * Tags that do not fit are dropped rather than being wrapped onto a second
11
+ * line or shrunk. A post's tag list is written for its own pages, where there
12
+ * is a sidebar to hold all nine of them, and the share image wants the first
13
+ * two or three of that list as a hint at the subject. Growing to fit them all
14
+ * would take the room the title is drawn in.
15
+ */
16
+ export function tagRow(tags, area, style, measure) {
17
+ const gap = Math.round(area.height * gapScale);
18
+ const widths = [];
19
+ let used = 0;
20
+ for (const tag of tags) {
21
+ const width = pillWidth(tag, area.height, style, measure);
22
+ const advance = width + (widths.length === 0 ? 0 : gap);
23
+ if (used + advance > area.width) {
24
+ break;
25
+ }
26
+ widths.push(width);
27
+ used += advance;
28
+ }
29
+ const placed = row(widths.map((size, index) => ({
30
+ size,
31
+ ...(index > 0 && { gapBefore: gap }),
32
+ })), area, "start");
33
+ return placed
34
+ .map((rect, index) => pill(tags[index] ?? "", rect, style))
35
+ .join("");
36
+ }
37
+ /**
38
+ * The row of tags along the top, and how much room it took.
39
+ *
40
+ * Both are wanted at once: the tags are drawn from the top margin, and the
41
+ * headline underneath starts below whichever of them and the logo reaches
42
+ * furthest down.
43
+ */
44
+ export function tagBand(props, config, dimensions, pad, reserved, measure) {
45
+ const tags = stringList(props["tags"]);
46
+ const height = tags.length === 0 ? 0 : Math.round(dimensions.height * heightScale);
47
+ return {
48
+ height,
49
+ svg: tagRow(tags, {
50
+ x: pad,
51
+ y: pad,
52
+ width: dimensions.width - pad * 2 - reserved,
53
+ height,
54
+ }, {
55
+ fontFamily: config.fontFamily,
56
+ fontWeight: 700,
57
+ fill: config.colors.foreground,
58
+ background: config.colors.foreground,
59
+ backgroundOpacity: 0.16,
60
+ }, measure),
61
+ };
62
+ }
63
+ //# sourceMappingURL=tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.js","sourceRoot":"","sources":["../../../src/templates/article/tags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AASxD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE7C,sDAAsD;AACtD,MAAM,WAAW,GAAG,IAAI,CAAC;AAEzB,yEAAyE;AACzE,MAAM,QAAQ,GAAG,GAAG,CAAC;AAErB;;;;;;;;GAQG;AACH,MAAM,UAAU,MAAM,CACpB,IAAuB,EACvB,IAAU,EACV,KAAgB,EAChB,OAAoB;IAEpB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAExD,IAAI,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAChC,MAAM;QACR,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,IAAI,IAAI,OAAO,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAChB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC3B,IAAI;QACJ,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;KACrC,CAAC,CAAC,EACH,IAAI,EACJ,OAAO,CACR,CAAC;IAEF,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;SAC1D,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CACrB,KAAqB,EACrB,MAAsB,EACtB,UAAsB,EACtB,GAAW,EACX,QAAgB,EAChB,OAAoB;IAEpB,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACvC,MAAM,MAAM,GACV,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;IAEtE,OAAO;QACL,MAAM;QACN,GAAG,EAAE,MAAM,CACT,IAAI,EACJ;YACE,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;YACN,KAAK,EAAE,UAAU,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG,QAAQ;YAC5C,MAAM;SACP,EACD;YACE,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;YAC9B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;YACpC,iBAAiB,EAAE,IAAI;SACxB,EACD,OAAO,CACR;KACF,CAAC;AACJ,CAAC"}
@@ -1,11 +1,7 @@
1
1
  import type { ImageAsset, MeasureText, ResolvedConfig } from "../types.js";
2
- import type { FooterPlacement } from "./footer.js";
2
+ import type { PortraitPlacement } from "./portrait.js";
3
3
  /** Where the attribution line goes: a footer placement, plus room to lay it out. */
4
- export interface AttributionPlacement extends FooterPlacement {
5
- /** Left edge and width of the content area the line is set within. */
6
- readonly left: number;
7
- readonly width: number;
8
- }
4
+ export type AttributionPlacement = PortraitPlacement;
9
5
  /**
10
6
  * The footer line, with the post's avatar before it.
11
7
  *
@@ -1 +1 @@
1
- {"version":3,"file":"attribution.d.ts","sourceRoot":"","sources":["../../src/templates/attribution.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAYnD,oFAAoF;AACpF,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,oBAAoB,EAC/B,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,OAAO,EAAE,WAAW,GACnB,MAAM,CAqCR"}
1
+ {"version":3,"file":"attribution.d.ts","sourceRoot":"","sources":["../../src/templates/attribution.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAMvD,oFAAoF;AACpF,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAErD;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,oBAAoB,EAC/B,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,OAAO,EAAE,WAAW,GACnB,MAAM,CAgBR"}
@@ -1,10 +1,7 @@
1
- import { image, measureIn, row } from "../layout/index.js";
1
+ import { measureIn } from "../layout/index.js";
2
2
  import { footerElement, hasFooter } from "./footer.js";
3
- /** The avatar's diameter, as a multiple of the footer's font size. */
4
- const avatarScale = 1.9;
5
- /** Where a circular avatar's centre sits above the footer's baseline. */
6
- const avatarRise = 0.34;
7
- /** Unique within one image, which is as many avatars as there are. */
3
+ import { portraitImage, portraitRow } from "./portrait.js";
4
+ /** Unique within one image, which is as many footer avatars as there are. */
8
5
  const avatarId = "colophon-avatar";
9
6
  /**
10
7
  * The footer line, with the post's avatar before it.
@@ -17,23 +14,12 @@ export function attribution(config, placement, avatar, measure) {
17
14
  if (avatar === undefined) {
18
15
  return footerElement(config, placement);
19
16
  }
20
- const { fontSize } = placement;
21
- const size = Math.round(fontSize * avatarScale);
22
17
  const text = hasFooter(config) ? (config.footer ?? "") : "";
23
- const gap = text === "" ? 0 : Math.round(fontSize * 0.5);
24
- const textWidth = text === ""
18
+ const width = text === ""
25
19
  ? 0
26
- : measureIn(measure, config.fontFamily, 500)(text, fontSize);
27
- // Only the horizontal placement comes from the row. The baseline is the one
28
- // the template asked for, so a footer with no avatar and a footer with one
29
- // sit at the same height.
30
- const [portrait, label] = row([{ size }, { size: Math.round(textWidth), gapBefore: gap }], { x: placement.left, y: placement.y, width: placement.width, height: size }, placement.anchor === "middle" ? "centre" : "start");
31
- const top = Math.round(placement.y - fontSize * avatarRise - size / 2);
32
- return (image({ x: portrait?.x ?? placement.left, y: top, width: size, height: size }, avatar.href, { fit: "cover", radius: Math.round(size / 2), id: avatarId }) +
33
- footerElement(config, {
34
- ...placement,
35
- x: label?.x ?? placement.left,
36
- anchor: "start",
37
- }));
20
+ : measureIn(measure, config.fontFamily, 500)(text, placement.fontSize);
21
+ const { rect, labelX } = portraitRow(placement, width);
22
+ return (portraitImage(avatar, rect, avatarId) +
23
+ footerElement(config, { ...placement, x: labelX, anchor: "start" }));
38
24
  }
39
25
  //# sourceMappingURL=attribution.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"attribution.js","sourceRoot":"","sources":["../../src/templates/attribution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAG3D,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEvD,sEAAsE;AACtE,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,yEAAyE;AACzE,MAAM,UAAU,GAAG,IAAI,CAAC;AAExB,sEAAsE;AACtE,MAAM,QAAQ,GAAG,iBAAiB,CAAC;AASnC;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,MAAsB,EACtB,SAA+B,EAC/B,MAA8B,EAC9B,OAAoB;IAEpB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;IACzD,MAAM,SAAS,GACb,IAAI,KAAK,EAAE;QACT,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEjE,4EAA4E;IAC5E,2EAA2E;IAC3E,0BAA0B;IAC1B,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,GAAG,CAC3B,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAC3D,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAC3E,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CACnD,CAAC;IAEF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,QAAQ,GAAG,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;IAEvE,OAAO,CACL,KAAK,CACH,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EACvE,MAAM,CAAC,IAAI,EACX,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAC7D;QACD,aAAa,CAAC,MAAM,EAAE;YACpB,GAAG,SAAS;YACZ,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,SAAS,CAAC,IAAI;YAC7B,MAAM,EAAE,OAAO;SAChB,CAAC,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"attribution.js","sourceRoot":"","sources":["../../src/templates/attribution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE3D,6EAA6E;AAC7E,MAAM,QAAQ,GAAG,iBAAiB,CAAC;AAKnC;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,MAAsB,EACtB,SAA+B,EAC/B,MAA8B,EAC9B,OAAoB;IAEpB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,MAAM,KAAK,GACT,IAAI,KAAK,EAAE;QACT,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC3E,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAEvD,OAAO,CACL,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC;QACrC,aAAa,CAAC,MAAM,EAAE,EAAE,GAAG,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CACpE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { Badge, MetaImageProps, ResolvedConfig } from "../../types.js";
2
+ /**
3
+ * The badge to draw: the one the post declares, or the configured one where it
4
+ * declares nothing.
5
+ *
6
+ * A badge in config is the same badge on every image a site renders, and a
7
+ * post the badge does not describe has no other way to be rid of it. `false`
8
+ * is that way out, and an object is the same door in the other direction, so a
9
+ * post can carry a badge of its own without the config knowing about it.
10
+ *
11
+ * Anything else is a mistake in the frontmatter. It is reported and the
12
+ * configured badge is drawn, which leaves the post with the image it would
13
+ * have had if it had said nothing at all.
14
+ */
15
+ export declare function badgeFor(props: MetaImageProps, config: ResolvedConfig): Badge | undefined;
16
+ //# sourceMappingURL=badge-props.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge-props.d.ts","sourceRoot":"","sources":["../../../src/templates/banner/badge-props.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAgC5E;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,cAAc,GACrB,KAAK,GAAG,SAAS,CA6BnB"}
@@ -0,0 +1,58 @@
1
+ import { optionalString } from "../../props.js";
2
+ /**
3
+ * Read a badge out of the object a post declared, field by field, the way
4
+ * every other prop is read. What frontmatter yields is a plain value rather
5
+ * than the interface the compiler was shown, so a badge is built here from
6
+ * what is actually there instead of being passed along as one.
7
+ *
8
+ * Returns `undefined` for an object carrying no text, since the text is the
9
+ * badge and there is nothing to draw without it.
10
+ */
11
+ function badgeFromProps(declared) {
12
+ const text = optionalString("text" in declared ? declared.text : undefined);
13
+ if (text === undefined || text === "") {
14
+ return undefined;
15
+ }
16
+ const color = optionalString("color" in declared ? declared.color : undefined);
17
+ const background = optionalString("background" in declared ? declared.background : undefined);
18
+ return {
19
+ text,
20
+ ...(color !== undefined && { color }),
21
+ ...(background !== undefined && { background }),
22
+ };
23
+ }
24
+ /**
25
+ * The badge to draw: the one the post declares, or the configured one where it
26
+ * declares nothing.
27
+ *
28
+ * A badge in config is the same badge on every image a site renders, and a
29
+ * post the badge does not describe has no other way to be rid of it. `false`
30
+ * is that way out, and an object is the same door in the other direction, so a
31
+ * post can carry a badge of its own without the config knowing about it.
32
+ *
33
+ * Anything else is a mistake in the frontmatter. It is reported and the
34
+ * configured badge is drawn, which leaves the post with the image it would
35
+ * have had if it had said nothing at all.
36
+ */
37
+ export function badgeFor(props, config) {
38
+ // Widened because this arrives from a post's frontmatter: the declared type
39
+ // is what a project means to write, not what the file holds.
40
+ const declared = props.badge;
41
+ if (declared === undefined) {
42
+ return config.badge;
43
+ }
44
+ if (declared === false) {
45
+ return undefined;
46
+ }
47
+ const badge = typeof declared === "object" && declared !== null
48
+ ? badgeFromProps(declared)
49
+ : undefined;
50
+ if (badge === undefined) {
51
+ config.onWarning("props.badge is neither a badge nor false, so the configured badge was" +
52
+ " drawn. Give it an object with the `text` to draw, or `false` for no" +
53
+ " badge on this image.");
54
+ return config.badge;
55
+ }
56
+ return badge;
57
+ }
58
+ //# sourceMappingURL=badge-props.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge-props.js","sourceRoot":"","sources":["../../../src/templates/banner/badge-props.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD;;;;;;;;GAQG;AACH,SAAS,cAAc,CAAC,QAAgB;IACtC,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAE5E,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QACtC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,cAAc,CAC1B,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CACjD,CAAC;IACF,MAAM,UAAU,GAAG,cAAc,CAC/B,YAAY,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAC3D,CAAC;IAEF,OAAO;QACL,IAAI;QACJ,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,CAAC;QACrC,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,CAAC;KAChD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,QAAQ,CACtB,KAAqB,EACrB,MAAsB;IAEtB,4EAA4E;IAC5E,6DAA6D;IAC7D,MAAM,QAAQ,GAAY,KAAK,CAAC,KAAK,CAAC;IAEtC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GACT,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI;QAC/C,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC;QAC1B,CAAC,CAAC,SAAS,CAAC;IAEhB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,CAAC,SAAS,CACd,uEAAuE;YACrE,sEAAsE;YACtE,uBAAuB,CAC1B,CAAC;QAEF,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/banner/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAmB,MAAM,gBAAgB,CAAC;AAOhE;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,EAAE,QAmF5B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/banner/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAmB,MAAM,gBAAgB,CAAC;AAQhE;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,EAAE,QA8E5B,CAAC"}
@@ -3,6 +3,7 @@ import { optionalString } from "../../props.js";
3
3
  import { attribution } from "../attribution.js";
4
4
  import { footerBaseline, hasFooter } from "../footer.js";
5
5
  import { logoElement, logoRect } from "../logo.js";
6
+ import { badgeFor } from "./badge-props.js";
6
7
  import { renderBadge } from "./badge.js";
7
8
  import { bannerLines } from "./lines.js";
8
9
  /**
@@ -23,11 +24,12 @@ export const bannerTemplate = {
23
24
  const footerFs = Math.round(height * 0.034);
24
25
  const badgeHeight = Math.round(height * 0.072);
25
26
  const mark = logoRect(logo, dimensions, pad, "start");
27
+ const badge = badgeFor(props, config);
26
28
  const subtitle = optionalString(props.subtitle);
27
29
  const hasSubtitle = subtitle !== undefined && subtitle !== "";
28
30
  // The text sits between whatever the marks along the top and the footer
29
31
  // along the bottom leave behind.
30
- const topMark = Math.max(config.badge === undefined ? 0 : badgeHeight, mark?.height ?? 0);
32
+ const topMark = Math.max(badge === undefined ? 0 : badgeHeight, mark?.height ?? 0);
31
33
  const area = inset({ x: 0, y: 0, width, height }, {
32
34
  top: pad + (topMark === 0 ? 0 : topMark + Math.round(height * 0.03)),
33
35
  right: pad,
@@ -51,9 +53,9 @@ export const bannerTemplate = {
51
53
  fill: config.colors.foreground,
52
54
  lineHeight: 1.28,
53
55
  });
54
- const badge = config.badge === undefined
56
+ const badgeMark = badge === undefined
55
57
  ? ""
56
- : renderBadge(config.badge, fontFamily, config.colors.brand, pad, badgeHeight);
58
+ : renderBadge(badge, fontFamily, config.colors.brand, pad, badgeHeight);
57
59
  const footer = attribution(config, {
58
60
  x: pad,
59
61
  y: footerBaseline(height, pad, footerFs),
@@ -62,7 +64,7 @@ export const bannerTemplate = {
62
64
  left: pad,
63
65
  width: width - pad * 2,
64
66
  }, avatar, measure);
65
- return badge + logoElement(logo, mark) + body + footer;
67
+ return badgeMark + logoElement(logo, mark) + body + footer;
66
68
  },
67
69
  };
68
70
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/banner/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/banner/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/templates/banner/version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,WAAW,GACjB,SAAS,QAAQ,EAAE,CAgBrB"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/templates/banner/version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,WAAW,GACjB,SAAS,QAAQ,EAAE,CAgBrB"}
@@ -1,16 +1,16 @@
1
- import { optionalString } from "../../props.js";
1
+ import { versionLabel } from "../version.js";
2
2
  /**
3
3
  * The version line, or nothing where there is no version. It is never wrapped
4
4
  * or shrunk: a version string that needed either would not be one.
5
5
  */
6
6
  export function versionLines(props, sizes) {
7
- const version = optionalString(props.version);
8
- if (version === undefined || version === "") {
7
+ const version = versionLabel(props.version);
8
+ if (version === undefined) {
9
9
  return [];
10
10
  }
11
11
  return [
12
12
  {
13
- text: `v${version}`,
13
+ text: version,
14
14
  fontSize: sizes.versionFs,
15
15
  fontWeight: 700,
16
16
  opacity: 0.85,
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/templates/banner/version.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAIhD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAqB,EACrB,KAAkB;IAElB,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE9C,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QAC5C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO;QACL;YACE,IAAI,EAAE,IAAI,OAAO,EAAE;YACnB,QAAQ,EAAE,KAAK,CAAC,SAAS;YACzB,UAAU,EAAE,GAAG;YACf,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;SAC3C;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/templates/banner/version.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAqB,EACrB,KAAkB;IAElB,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO;QACL;YACE,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,KAAK,CAAC,SAAS;YACzB,UAAU,EAAE,GAAG;YACf,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;SAC3C;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { LinesStyle, Rect, TextLine } from "../layout/index.js";
2
+ import type { ImageAsset, MeasureText, ResolvedConfig } from "../types.js";
3
+ import type { Frame } from "./frame.js";
4
+ /**
5
+ * The footer line as most templates want it: on the bottom margin, across the
6
+ * content width, with the post's avatar before it where there is one.
7
+ *
8
+ * Every template ends with the same dozen lines of placement, which is a dozen
9
+ * chances for one of them to drift from the rest. A template wanting something
10
+ * else, such as the `article` with its byline at the other end of the same
11
+ * line, still calls `attribution` itself.
12
+ */
13
+ export declare function footerLine(config: ResolvedConfig, frame: Frame, imageWidth: number, avatar: ImageAsset | undefined, measure: MeasureText, align?: "start" | "middle", opacity?: number): string;
14
+ /**
15
+ * Draw a block of lines in a slot a `stack` handed back, or nothing where
16
+ * there was no slot to draw it in.
17
+ *
18
+ * A stack returns one rectangle per item, so the missing case never happens;
19
+ * it is the type that says otherwise, and every template that stacks its text
20
+ * would otherwise carry the same conditional to prove it.
21
+ */
22
+ export declare function drawSlot(lines: readonly TextLine[], slot: Rect | undefined, style: LinesStyle): string;
23
+ //# sourceMappingURL=bottom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bottom.d.ts","sourceRoot":"","sources":["../../src/templates/bottom.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE3E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAKxC;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,OAAO,EAAE,WAAW,EACpB,KAAK,GAAE,OAAO,GAAG,QAAkB,EACnC,OAAO,GAAE,MAAuB,GAC/B,MAAM,CAiBR;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,IAAI,EAAE,IAAI,GAAG,SAAS,EACtB,KAAK,EAAE,UAAU,GAChB,MAAM,CAER"}
@@ -0,0 +1,37 @@
1
+ import { drawLines } from "../layout/index.js";
2
+ import { attribution } from "./attribution.js";
3
+ /** How faint the footer is against the image's own text. */
4
+ const defaultOpacity = 0.75;
5
+ /**
6
+ * The footer line as most templates want it: on the bottom margin, across the
7
+ * content width, with the post's avatar before it where there is one.
8
+ *
9
+ * Every template ends with the same dozen lines of placement, which is a dozen
10
+ * chances for one of them to drift from the rest. A template wanting something
11
+ * else, such as the `article` with its byline at the other end of the same
12
+ * line, still calls `attribution` itself.
13
+ */
14
+ export function footerLine(config, frame, imageWidth, avatar, measure, align = "start", opacity = defaultOpacity) {
15
+ const { pad } = frame;
16
+ return attribution(config, {
17
+ x: align === "middle" ? Math.round(imageWidth / 2) : pad,
18
+ y: frame.footerY,
19
+ fontSize: frame.footerFontSize,
20
+ opacity,
21
+ ...(align === "middle" && { anchor: "middle" }),
22
+ left: pad,
23
+ width: imageWidth - pad * 2,
24
+ }, avatar, measure);
25
+ }
26
+ /**
27
+ * Draw a block of lines in a slot a `stack` handed back, or nothing where
28
+ * there was no slot to draw it in.
29
+ *
30
+ * A stack returns one rectangle per item, so the missing case never happens;
31
+ * it is the type that says otherwise, and every template that stacks its text
32
+ * would otherwise carry the same conditional to prove it.
33
+ */
34
+ export function drawSlot(lines, slot, style) {
35
+ return slot === undefined ? "" : drawLines(lines, slot, style);
36
+ }
37
+ //# sourceMappingURL=bottom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bottom.js","sourceRoot":"","sources":["../../src/templates/bottom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,4DAA4D;AAC5D,MAAM,cAAc,GAAG,IAAI,CAAC;AAE5B;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CACxB,MAAsB,EACtB,KAAY,EACZ,UAAkB,EAClB,MAA8B,EAC9B,OAAoB,EACpB,KAAK,GAAuB,OAAO,EACnC,OAAO,GAAW,cAAc;IAEhC,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;IAEtB,OAAO,WAAW,CAChB,MAAM,EACN;QACE,CAAC,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;QACxD,CAAC,EAAE,KAAK,CAAC,OAAO;QAChB,QAAQ,EAAE,KAAK,CAAC,cAAc;QAC9B,OAAO;QACP,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAiB,EAAE,CAAC;QACxD,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,UAAU,GAAG,GAAG,GAAG,CAAC;KAC5B,EACD,MAAM,EACN,OAAO,CACR,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CACtB,KAA0B,EAC1B,IAAsB,EACtB,KAAiB;IAEjB,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ImageAsset, MeasureText } from "../types.js";
2
+ import type { PortraitPlacement } from "./portrait.js";
3
+ /** How a byline is set, which is the part the footer takes from config. */
4
+ export interface BylineStyle {
5
+ readonly fontFamily: string;
6
+ readonly fontWeight: number;
7
+ readonly fill: string;
8
+ }
9
+ /**
10
+ * A line of the template's own words with the post's avatar before it: an
11
+ * author and a date on an article, the person a quotation is from.
12
+ *
13
+ * This is `attribution` with the text opened up. The footer says who published
14
+ * the site and is the same on every image; a byline says who wrote this one,
15
+ * so it comes from the props. Both are a picture and a line of type on one
16
+ * baseline, and both are drawn by {@link portraitRow}.
17
+ */
18
+ export declare function byline(text: string, placement: PortraitPlacement, style: BylineStyle, avatar: ImageAsset | undefined, measure: MeasureText): string;
19
+ //# sourceMappingURL=byline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"byline.d.ts","sourceRoot":"","sources":["../../src/templates/byline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAMvD,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CACpB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,iBAAiB,EAC5B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,OAAO,EAAE,WAAW,GACnB,MAAM,CAyCR"}