@bendyline/squisq 0.1.1 → 1.0.1

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 (329) hide show
  1. package/README.md +85 -0
  2. package/dist/{themeLibrary-DySHPcgj.d.ts → Doc-1hmT1LZl.d.ts} +1 -42
  3. package/dist/__tests__/animationUtils.test.d.ts +2 -0
  4. package/dist/__tests__/animationUtils.test.d.ts.map +1 -0
  5. package/dist/__tests__/animationUtils.test.js +60 -0
  6. package/dist/__tests__/animationUtils.test.js.map +1 -0
  7. package/dist/__tests__/contentExtractor.test.d.ts +2 -0
  8. package/dist/__tests__/contentExtractor.test.d.ts.map +1 -0
  9. package/dist/__tests__/contentExtractor.test.js +151 -0
  10. package/dist/__tests__/contentExtractor.test.js.map +1 -0
  11. package/dist/__tests__/geohash.test.d.ts +2 -0
  12. package/dist/__tests__/geohash.test.d.ts.map +1 -0
  13. package/dist/__tests__/geohash.test.js +87 -0
  14. package/dist/__tests__/geohash.test.js.map +1 -0
  15. package/dist/__tests__/getLayers.test.d.ts +2 -0
  16. package/dist/__tests__/getLayers.test.d.ts.map +1 -0
  17. package/dist/__tests__/getLayers.test.js +167 -0
  18. package/dist/__tests__/getLayers.test.js.map +1 -0
  19. package/dist/__tests__/haversine.test.d.ts +2 -0
  20. package/dist/__tests__/haversine.test.d.ts.map +1 -0
  21. package/dist/__tests__/haversine.test.js +56 -0
  22. package/dist/__tests__/haversine.test.js.map +1 -0
  23. package/dist/__tests__/localForageAdapter.test.d.ts +8 -0
  24. package/dist/__tests__/localForageAdapter.test.d.ts.map +1 -0
  25. package/dist/__tests__/localForageAdapter.test.js +130 -0
  26. package/dist/__tests__/localForageAdapter.test.js.map +1 -0
  27. package/dist/__tests__/markdown.test.d.ts +2 -0
  28. package/dist/__tests__/markdown.test.d.ts.map +1 -0
  29. package/dist/__tests__/markdown.test.js +654 -0
  30. package/dist/__tests__/markdown.test.js.map +1 -0
  31. package/dist/__tests__/markdownToDoc.test.d.ts +2 -0
  32. package/dist/__tests__/markdownToDoc.test.d.ts.map +1 -0
  33. package/dist/__tests__/markdownToDoc.test.js +313 -0
  34. package/dist/__tests__/markdownToDoc.test.js.map +1 -0
  35. package/dist/__tests__/seededRandom.test.d.ts +2 -0
  36. package/dist/__tests__/seededRandom.test.d.ts.map +1 -0
  37. package/dist/__tests__/seededRandom.test.js +125 -0
  38. package/dist/__tests__/seededRandom.test.js.map +1 -0
  39. package/dist/__tests__/slideshowGenerator.test.d.ts +2 -0
  40. package/dist/__tests__/slideshowGenerator.test.d.ts.map +1 -0
  41. package/dist/__tests__/slideshowGenerator.test.js +114 -0
  42. package/dist/__tests__/slideshowGenerator.test.js.map +1 -0
  43. package/dist/__tests__/storage.test.d.ts +2 -0
  44. package/dist/__tests__/storage.test.d.ts.map +1 -0
  45. package/dist/__tests__/storage.test.js +51 -0
  46. package/dist/__tests__/storage.test.js.map +1 -0
  47. package/dist/__tests__/templates.test.d.ts +2 -0
  48. package/dist/__tests__/templates.test.d.ts.map +1 -0
  49. package/dist/__tests__/templates.test.js +217 -0
  50. package/dist/__tests__/templates.test.js.map +1 -0
  51. package/dist/__tests__/timing.test.d.ts +2 -0
  52. package/dist/__tests__/timing.test.d.ts.map +1 -0
  53. package/dist/__tests__/timing.test.js +131 -0
  54. package/dist/__tests__/timing.test.js.map +1 -0
  55. package/dist/chunk-3E5F2XMR.js +129 -0
  56. package/dist/chunk-3E5F2XMR.js.map +1 -0
  57. package/dist/chunk-6YJPI6VI.js +35 -0
  58. package/dist/chunk-6YJPI6VI.js.map +1 -0
  59. package/dist/chunk-FVTQSNR7.js +100 -0
  60. package/dist/chunk-FVTQSNR7.js.map +1 -0
  61. package/dist/chunk-V543AI2F.js +1 -0
  62. package/dist/chunk-V543AI2F.js.map +1 -0
  63. package/dist/chunk-VP5SZTZ2.js +792 -0
  64. package/dist/chunk-VP5SZTZ2.js.map +1 -0
  65. package/dist/doc/docToMarkdown.d.ts +41 -0
  66. package/dist/doc/docToMarkdown.d.ts.map +1 -0
  67. package/dist/doc/docToMarkdown.js +88 -0
  68. package/dist/doc/docToMarkdown.js.map +1 -0
  69. package/dist/doc/getLayers.d.ts +65 -0
  70. package/dist/doc/getLayers.d.ts.map +1 -0
  71. package/dist/doc/getLayers.js +103 -0
  72. package/dist/doc/getLayers.js.map +1 -0
  73. package/dist/doc/index.d.ts +9 -3
  74. package/dist/doc/index.d.ts.map +1 -0
  75. package/dist/doc/index.js +6 -125
  76. package/dist/doc/index.js.map +1 -1
  77. package/dist/doc/markdownToDoc.d.ts +68 -0
  78. package/dist/doc/markdownToDoc.d.ts.map +1 -0
  79. package/dist/doc/markdownToDoc.js +225 -0
  80. package/dist/doc/markdownToDoc.js.map +1 -0
  81. package/dist/doc/templates/accentImage.d.ts +59 -0
  82. package/dist/doc/templates/accentImage.d.ts.map +1 -0
  83. package/dist/doc/templates/accentImage.js +275 -0
  84. package/dist/doc/templates/accentImage.js.map +1 -0
  85. package/dist/doc/templates/captionUtils.d.ts +20 -0
  86. package/dist/doc/templates/captionUtils.d.ts.map +1 -0
  87. package/dist/doc/templates/captionUtils.js +29 -0
  88. package/dist/doc/templates/captionUtils.js.map +1 -0
  89. package/dist/doc/templates/comparisonBar.d.ts +13 -0
  90. package/dist/doc/templates/comparisonBar.d.ts.map +1 -0
  91. package/dist/doc/templates/comparisonBar.js +127 -0
  92. package/dist/doc/templates/comparisonBar.js.map +1 -0
  93. package/dist/doc/templates/coverBlock.d.ts +51 -0
  94. package/dist/doc/templates/coverBlock.d.ts.map +1 -0
  95. package/dist/doc/templates/coverBlock.js +125 -0
  96. package/dist/doc/templates/coverBlock.js.map +1 -0
  97. package/dist/doc/templates/dateEvent.d.ts +15 -0
  98. package/dist/doc/templates/dateEvent.d.ts.map +1 -0
  99. package/dist/doc/templates/dateEvent.js +110 -0
  100. package/dist/doc/templates/dateEvent.js.map +1 -0
  101. package/dist/doc/templates/definitionCard.d.ts +13 -0
  102. package/dist/doc/templates/definitionCard.d.ts.map +1 -0
  103. package/dist/doc/templates/definitionCard.js +114 -0
  104. package/dist/doc/templates/definitionCard.js.map +1 -0
  105. package/dist/doc/templates/factCard.d.ts +15 -0
  106. package/dist/doc/templates/factCard.d.ts.map +1 -0
  107. package/dist/doc/templates/factCard.js +100 -0
  108. package/dist/doc/templates/factCard.js.map +1 -0
  109. package/dist/doc/templates/fullBleedQuote.d.ts +13 -0
  110. package/dist/doc/templates/fullBleedQuote.d.ts.map +1 -0
  111. package/dist/doc/templates/fullBleedQuote.js +54 -0
  112. package/dist/doc/templates/fullBleedQuote.js.map +1 -0
  113. package/dist/doc/templates/imageWithCaption.d.ts +13 -0
  114. package/dist/doc/templates/imageWithCaption.d.ts.map +1 -0
  115. package/dist/doc/templates/imageWithCaption.js +142 -0
  116. package/dist/doc/templates/imageWithCaption.js.map +1 -0
  117. package/dist/doc/templates/index.d.ts +104 -0
  118. package/dist/doc/templates/index.d.ts.map +1 -0
  119. package/dist/doc/templates/index.js +442 -0
  120. package/dist/doc/templates/index.js.map +1 -0
  121. package/dist/doc/templates/listBlock.d.ts +13 -0
  122. package/dist/doc/templates/listBlock.d.ts.map +1 -0
  123. package/dist/doc/templates/listBlock.js +89 -0
  124. package/dist/doc/templates/listBlock.js.map +1 -0
  125. package/dist/doc/templates/mapBlock.d.ts +17 -0
  126. package/dist/doc/templates/mapBlock.d.ts.map +1 -0
  127. package/dist/doc/templates/mapBlock.js +112 -0
  128. package/dist/doc/templates/mapBlock.js.map +1 -0
  129. package/dist/doc/templates/persistentLayers.d.ts +39 -0
  130. package/dist/doc/templates/persistentLayers.d.ts.map +1 -0
  131. package/dist/doc/templates/persistentLayers.js +447 -0
  132. package/dist/doc/templates/persistentLayers.js.map +1 -0
  133. package/dist/doc/templates/photoGrid.d.ts +20 -0
  134. package/dist/doc/templates/photoGrid.d.ts.map +1 -0
  135. package/dist/doc/templates/photoGrid.js +172 -0
  136. package/dist/doc/templates/photoGrid.js.map +1 -0
  137. package/dist/doc/templates/pullQuote.d.ts +13 -0
  138. package/dist/doc/templates/pullQuote.d.ts.map +1 -0
  139. package/dist/doc/templates/pullQuote.js +109 -0
  140. package/dist/doc/templates/pullQuote.js.map +1 -0
  141. package/dist/doc/templates/quoteBlock.d.ts +15 -0
  142. package/dist/doc/templates/quoteBlock.d.ts.map +1 -0
  143. package/dist/doc/templates/quoteBlock.js +97 -0
  144. package/dist/doc/templates/quoteBlock.js.map +1 -0
  145. package/dist/doc/templates/sectionHeader.d.ts +14 -0
  146. package/dist/doc/templates/sectionHeader.d.ts.map +1 -0
  147. package/dist/doc/templates/sectionHeader.js +96 -0
  148. package/dist/doc/templates/sectionHeader.js.map +1 -0
  149. package/dist/doc/templates/statHighlight.d.ts +15 -0
  150. package/dist/doc/templates/statHighlight.d.ts.map +1 -0
  151. package/dist/doc/templates/statHighlight.js +99 -0
  152. package/dist/doc/templates/statHighlight.js.map +1 -0
  153. package/dist/doc/templates/titleBlock.d.ts +13 -0
  154. package/dist/doc/templates/titleBlock.d.ts.map +1 -0
  155. package/dist/doc/templates/titleBlock.js +92 -0
  156. package/dist/doc/templates/titleBlock.js.map +1 -0
  157. package/dist/doc/templates/twoColumn.d.ts +15 -0
  158. package/dist/doc/templates/twoColumn.d.ts.map +1 -0
  159. package/dist/doc/templates/twoColumn.js +219 -0
  160. package/dist/doc/templates/twoColumn.js.map +1 -0
  161. package/dist/doc/templates/videoPullQuote.d.ts +20 -0
  162. package/dist/doc/templates/videoPullQuote.d.ts.map +1 -0
  163. package/dist/doc/templates/videoPullQuote.js +118 -0
  164. package/dist/doc/templates/videoPullQuote.js.map +1 -0
  165. package/dist/doc/templates/videoWithCaption.d.ts +20 -0
  166. package/dist/doc/templates/videoWithCaption.d.ts.map +1 -0
  167. package/dist/doc/templates/videoWithCaption.js +104 -0
  168. package/dist/doc/templates/videoWithCaption.js.map +1 -0
  169. package/dist/doc/utils/animationUtils.d.ts +34 -0
  170. package/dist/doc/utils/animationUtils.d.ts.map +1 -0
  171. package/dist/doc/utils/animationUtils.js +110 -0
  172. package/dist/doc/utils/animationUtils.js.map +1 -0
  173. package/dist/doc/utils/themeUtils.d.ts +55 -0
  174. package/dist/doc/utils/themeUtils.d.ts.map +1 -0
  175. package/dist/doc/utils/themeUtils.js +109 -0
  176. package/dist/doc/utils/themeUtils.js.map +1 -0
  177. package/dist/generate/contentExtractor.d.ts +112 -0
  178. package/dist/generate/contentExtractor.d.ts.map +1 -0
  179. package/dist/generate/contentExtractor.js +638 -0
  180. package/dist/generate/contentExtractor.js.map +1 -0
  181. package/dist/generate/index.d.ts +7 -0
  182. package/dist/generate/index.d.ts.map +1 -0
  183. package/dist/generate/index.js +4 -0
  184. package/dist/generate/index.js.map +1 -0
  185. package/dist/generate/slideshowGenerator.d.ts +72 -0
  186. package/dist/generate/slideshowGenerator.d.ts.map +1 -0
  187. package/dist/generate/slideshowGenerator.js +159 -0
  188. package/dist/generate/slideshowGenerator.js.map +1 -0
  189. package/dist/generate/templateMapper.d.ts +23 -0
  190. package/dist/generate/templateMapper.d.ts.map +1 -0
  191. package/dist/generate/templateMapper.js +114 -0
  192. package/dist/generate/templateMapper.js.map +1 -0
  193. package/dist/index.d.ts +9 -8
  194. package/dist/index.d.ts.map +1 -0
  195. package/dist/index.js +8 -216
  196. package/dist/index.js.map +1 -1
  197. package/dist/markdown/convert.d.ts +71 -0
  198. package/dist/markdown/convert.d.ts.map +1 -0
  199. package/dist/markdown/convert.js +746 -0
  200. package/dist/markdown/convert.js.map +1 -0
  201. package/dist/markdown/htmlParse.d.ts +26 -0
  202. package/dist/markdown/htmlParse.d.ts.map +1 -0
  203. package/dist/markdown/htmlParse.js +195 -0
  204. package/dist/markdown/htmlParse.js.map +1 -0
  205. package/dist/markdown/index.d.ts +19 -225
  206. package/dist/markdown/index.d.ts.map +1 -0
  207. package/dist/markdown/index.js +33 -32
  208. package/dist/markdown/index.js.map +1 -1
  209. package/dist/markdown/parse.d.ts +27 -0
  210. package/dist/markdown/parse.d.ts.map +1 -0
  211. package/dist/markdown/parse.js +90 -0
  212. package/dist/markdown/parse.js.map +1 -0
  213. package/dist/markdown/stringify.d.ts +32 -0
  214. package/dist/markdown/stringify.d.ts.map +1 -0
  215. package/dist/markdown/stringify.js +108 -0
  216. package/dist/markdown/stringify.js.map +1 -0
  217. package/dist/markdown/types.d.ts +496 -0
  218. package/dist/markdown/types.d.ts.map +1 -0
  219. package/dist/markdown/types.js +17 -0
  220. package/dist/markdown/types.js.map +1 -0
  221. package/dist/markdown/utils.d.ts +78 -0
  222. package/dist/markdown/utils.d.ts.map +1 -0
  223. package/dist/markdown/utils.js +149 -0
  224. package/dist/markdown/utils.js.map +1 -0
  225. package/dist/random/SeededRandom.d.ts +50 -0
  226. package/dist/random/SeededRandom.d.ts.map +1 -0
  227. package/dist/random/SeededRandom.js +115 -0
  228. package/dist/random/SeededRandom.js.map +1 -0
  229. package/dist/random/index.d.ts +2 -0
  230. package/dist/random/index.d.ts.map +1 -0
  231. package/dist/random/index.js +2 -0
  232. package/dist/random/index.js.map +1 -0
  233. package/dist/schemas/BlockTemplates.d.ts +583 -0
  234. package/dist/schemas/BlockTemplates.d.ts.map +1 -0
  235. package/dist/schemas/BlockTemplates.js +72 -0
  236. package/dist/schemas/BlockTemplates.js.map +1 -0
  237. package/dist/schemas/Doc.d.ts +411 -0
  238. package/dist/schemas/Doc.d.ts.map +1 -0
  239. package/dist/schemas/Doc.js +90 -0
  240. package/dist/schemas/Doc.js.map +1 -0
  241. package/dist/schemas/LayoutStrategy.d.ts +84 -0
  242. package/dist/schemas/LayoutStrategy.d.ts.map +1 -0
  243. package/dist/schemas/LayoutStrategy.js +123 -0
  244. package/dist/schemas/LayoutStrategy.js.map +1 -0
  245. package/dist/schemas/MediaProvider.d.ts +65 -0
  246. package/dist/schemas/MediaProvider.d.ts.map +1 -0
  247. package/dist/schemas/MediaProvider.js +13 -0
  248. package/dist/schemas/MediaProvider.js.map +1 -0
  249. package/dist/schemas/Theme.d.ts +163 -0
  250. package/dist/schemas/Theme.d.ts.map +1 -0
  251. package/dist/schemas/Theme.js +62 -0
  252. package/dist/schemas/Theme.js.map +1 -0
  253. package/dist/schemas/Types.d.ts +14 -0
  254. package/dist/schemas/Types.d.ts.map +1 -0
  255. package/dist/schemas/Types.js +5 -0
  256. package/dist/schemas/Types.js.map +1 -0
  257. package/dist/schemas/Viewport.d.ts +74 -0
  258. package/dist/schemas/Viewport.d.ts.map +1 -0
  259. package/dist/schemas/Viewport.js +63 -0
  260. package/dist/schemas/Viewport.js.map +1 -0
  261. package/dist/schemas/index.d.ts +10 -70
  262. package/dist/schemas/index.d.ts.map +1 -0
  263. package/dist/schemas/index.js +7 -60
  264. package/dist/schemas/index.js.map +1 -1
  265. package/dist/schemas/themeLibrary.d.ts +41 -0
  266. package/dist/schemas/themeLibrary.d.ts.map +1 -0
  267. package/dist/schemas/themeLibrary.js +466 -0
  268. package/dist/schemas/themeLibrary.js.map +1 -0
  269. package/dist/spatial/Geohash.d.ts +85 -0
  270. package/dist/spatial/Geohash.d.ts.map +1 -0
  271. package/dist/spatial/Geohash.js +142 -0
  272. package/dist/spatial/Geohash.js.map +1 -0
  273. package/dist/spatial/Haversine.d.ts +24 -0
  274. package/dist/spatial/Haversine.d.ts.map +1 -0
  275. package/dist/spatial/Haversine.js +48 -0
  276. package/dist/spatial/Haversine.js.map +1 -0
  277. package/dist/spatial/index.d.ts +3 -111
  278. package/dist/spatial/index.d.ts.map +1 -0
  279. package/dist/spatial/index.js +2 -24
  280. package/dist/spatial/index.js.map +1 -1
  281. package/dist/storage/LocalForageAdapter.d.ts +36 -0
  282. package/dist/storage/LocalForageAdapter.d.ts.map +1 -0
  283. package/dist/storage/LocalForageAdapter.js +82 -0
  284. package/dist/storage/LocalForageAdapter.js.map +1 -0
  285. package/dist/storage/LocalStorageAdapter.d.ts +16 -0
  286. package/dist/storage/LocalStorageAdapter.d.ts.map +1 -0
  287. package/dist/storage/LocalStorageAdapter.js +50 -0
  288. package/dist/storage/LocalStorageAdapter.js.map +1 -0
  289. package/dist/storage/MemoryStorageAdapter.d.ts +15 -0
  290. package/dist/storage/MemoryStorageAdapter.d.ts.map +1 -0
  291. package/dist/storage/MemoryStorageAdapter.js +34 -0
  292. package/dist/storage/MemoryStorageAdapter.js.map +1 -0
  293. package/dist/storage/Storage.d.ts +23 -0
  294. package/dist/storage/Storage.d.ts.map +1 -0
  295. package/dist/storage/Storage.js +9 -0
  296. package/dist/storage/Storage.js.map +1 -0
  297. package/dist/storage/index.d.ts +6 -91
  298. package/dist/storage/index.d.ts.map +1 -0
  299. package/dist/storage/index.js +3 -10
  300. package/dist/storage/index.js.map +1 -1
  301. package/dist/story/index.d.ts +3 -2
  302. package/dist/themeLibrary-DR1VRo-8.d.ts +44 -0
  303. package/dist/timing/index.d.ts +4 -0
  304. package/dist/timing/index.d.ts.map +1 -0
  305. package/dist/timing/index.js +3 -0
  306. package/dist/timing/index.js.map +1 -0
  307. package/dist/timing/narrationTiming.d.ts +54 -0
  308. package/dist/timing/narrationTiming.d.ts.map +1 -0
  309. package/dist/timing/narrationTiming.js +190 -0
  310. package/dist/timing/narrationTiming.js.map +1 -0
  311. package/dist/timing/readingTime.d.ts +54 -0
  312. package/dist/timing/readingTime.d.ts.map +1 -0
  313. package/dist/timing/readingTime.js +49 -0
  314. package/dist/timing/readingTime.js.map +1 -0
  315. package/package.json +19 -5
  316. package/src/__tests__/contentExtractor.test.ts +183 -0
  317. package/src/__tests__/seededRandom.test.ts +142 -0
  318. package/src/__tests__/slideshowGenerator.test.ts +128 -0
  319. package/src/__tests__/timing.test.ts +167 -0
  320. package/src/generate/contentExtractor.ts +808 -0
  321. package/src/generate/index.ts +21 -0
  322. package/src/generate/slideshowGenerator.ts +273 -0
  323. package/src/generate/templateMapper.ts +170 -0
  324. package/src/index.ts +3 -0
  325. package/src/random/SeededRandom.ts +127 -0
  326. package/src/random/index.ts +1 -0
  327. package/src/timing/index.ts +17 -0
  328. package/src/timing/narrationTiming.ts +220 -0
  329. package/src/timing/readingTime.ts +94 -0
@@ -0,0 +1,583 @@
1
+ /**
2
+ * Block Templates Schema
3
+ *
4
+ * Defines a template system for AI-generated doc blocks. Instead of
5
+ * specifying low-level layers, positions, and animations, AI can use
6
+ * high-level templates like "titleBlock" or "statHighlight" with simple
7
+ * content parameters.
8
+ *
9
+ * Templates are expanded into full Block structures at render time,
10
+ * ensuring consistent styling and reducing AI generation errors.
11
+ *
12
+ * Template Types:
13
+ * - titleBlock: Doc intro with title + subtitle
14
+ * - sectionHeader: Colored section divider
15
+ * - statHighlight: Big number/stat with description
16
+ * - quoteBlock: Large centered quote
17
+ * - factCard: Key fact with explanation
18
+ * - twoColumn: Side-by-side comparison
19
+ * - dateEvent: Timeline-style date + description
20
+ * - imageWithCaption: Image with text overlay
21
+ */
22
+ import type { Layer, Block, Transition, MapTileStyle, MapMarker } from './Doc.js';
23
+ import type { ViewportConfig, ViewportOrientation } from './Viewport.js';
24
+ import type { LayoutHints } from './LayoutStrategy.js';
25
+ import type { Theme } from './Theme.js';
26
+ /**
27
+ * Name of a color scheme defined in the active theme's `colorSchemes` map.
28
+ * Templates reference schemes by name (e.g. 'blue', 'green') and the theme
29
+ * resolves them to actual colors at render time via `resolveColorScheme()`.
30
+ */
31
+ export type ColorScheme = string;
32
+ /**
33
+ * Default font family for doc text.
34
+ * PT Serif provides a classic, readable appearance for documentary-style content.
35
+ * Used as a fallback in TextLayer when no font is specified.
36
+ */
37
+ export declare const DEFAULT_DOC_FONT = "\"PT Serif\", Georgia, \"Times New Roman\", serif";
38
+ /**
39
+ * Default font family for titles.
40
+ */
41
+ export declare const DEFAULT_TITLE_FONT = "\"PT Serif\", Georgia, \"Times New Roman\", serif";
42
+ /**
43
+ * Position options for accent images on text-based blocks.
44
+ * Accents are tasteful image additions that complement rather than overwhelm text.
45
+ */
46
+ export type AccentPosition = 'left-strip' | 'right-strip' | 'bottom-strip' | 'corner-inset';
47
+ /**
48
+ * Accent image configuration for text-based blocks.
49
+ * When present, the template adjusts layout to accommodate the image tastefully.
50
+ */
51
+ export interface AccentImage {
52
+ /** Path to image file (relative to article media dir) */
53
+ src: string;
54
+ /** Alt text for accessibility */
55
+ alt: string;
56
+ /** Where to position the accent image */
57
+ position: AccentPosition;
58
+ /** Ambient motion effect (subtle Ken Burns) */
59
+ ambientMotion?: 'zoomIn' | 'zoomOut' | 'panLeft' | 'panRight';
60
+ /** Photo credit / artist name */
61
+ credit?: string;
62
+ /** License identifier (e.g., 'CC BY-SA 4.0') */
63
+ license?: string;
64
+ }
65
+ /**
66
+ * Base properties shared by all template blocks.
67
+ */
68
+ interface BaseTemplateBlock {
69
+ /** Unique block ID */
70
+ id: string;
71
+ /** Block duration in seconds */
72
+ duration: number;
73
+ /** Which audio segment this block belongs to */
74
+ audioSegment: number;
75
+ /** Entry transition */
76
+ transition?: Transition;
77
+ /** Show doc's bottom layers (default: true) */
78
+ useBottomLayer?: boolean;
79
+ /** Show doc's top layers (default: true) */
80
+ useTopLayer?: boolean;
81
+ /**
82
+ * Start time within the audio segment when this content is spoken.
83
+ * Used to sync the block appearance with the narration.
84
+ * If not provided, blocks are distributed evenly across the segment.
85
+ */
86
+ sourceStartTime?: number;
87
+ /**
88
+ * Duration of the spoken content this block represents.
89
+ * Used with sourceStartTime to precisely position the block.
90
+ */
91
+ sourceDuration?: number;
92
+ }
93
+ /**
94
+ * Title block - doc intro with large title and subtitle.
95
+ */
96
+ export interface TitleBlockInput extends BaseTemplateBlock {
97
+ template: 'titleBlock';
98
+ /** Main title text */
99
+ title: string;
100
+ /** Subtitle or tagline (supports \n for line breaks) */
101
+ subtitle?: string;
102
+ /** Background color (defaults to theme primary) */
103
+ backgroundColor?: string;
104
+ }
105
+ /**
106
+ * Section header - section title card with optional background image.
107
+ * Displays the section title prominently, optionally over an image.
108
+ */
109
+ export interface SectionHeaderInput extends BaseTemplateBlock {
110
+ template: 'sectionHeader';
111
+ /** Section title */
112
+ title: string;
113
+ /** Color scheme for the section (used for fallback background) */
114
+ colorScheme?: ColorScheme;
115
+ /** Optional background image path */
116
+ imageSrc?: string;
117
+ /** Alt text for background image */
118
+ imageAlt?: string;
119
+ /** Ambient motion for background image */
120
+ ambientMotion?: 'zoomIn' | 'zoomOut' | 'panLeft' | 'panRight';
121
+ }
122
+ /**
123
+ * Stat highlight - big number with description and optional detail.
124
+ */
125
+ export interface StatHighlightInput extends BaseTemplateBlock {
126
+ template: 'statHighlight';
127
+ /** The statistic (e.g., "89%", "2x", "7 miles") */
128
+ stat: string;
129
+ /** Description of what the stat means */
130
+ description: string;
131
+ /** Additional detail or context */
132
+ detail?: string;
133
+ /** Color scheme for the stat */
134
+ colorScheme?: ColorScheme;
135
+ /** Optional accent image to complement the text */
136
+ accentImage?: AccentImage;
137
+ }
138
+ /**
139
+ * Quote block - large centered quote text.
140
+ */
141
+ export interface QuoteBlockInput extends BaseTemplateBlock {
142
+ template: 'quoteBlock';
143
+ /** The quote text (supports \n for line breaks) */
144
+ quote: string;
145
+ /** Attribution (author, source) */
146
+ attribution?: string;
147
+ /** Optional accent image to complement the text */
148
+ accentImage?: AccentImage;
149
+ }
150
+ /**
151
+ * Fact card - key fact with explanation.
152
+ */
153
+ export interface FactCardInput extends BaseTemplateBlock {
154
+ template: 'factCard';
155
+ /** The main fact or statement */
156
+ fact: string;
157
+ /** Explanation or context */
158
+ explanation: string;
159
+ /** Optional source citation */
160
+ source?: string;
161
+ /** Optional accent image to complement the text */
162
+ accentImage?: AccentImage;
163
+ }
164
+ /**
165
+ * Two column - side-by-side comparison.
166
+ */
167
+ export interface TwoColumnInput extends BaseTemplateBlock {
168
+ template: 'twoColumn';
169
+ /** Left column content */
170
+ left: {
171
+ label: string;
172
+ sublabel?: string;
173
+ };
174
+ /** Right column content */
175
+ right: {
176
+ label: string;
177
+ sublabel?: string;
178
+ };
179
+ /** Optional header above columns */
180
+ header?: string;
181
+ /** Color schemes for left and right */
182
+ leftColor?: ColorScheme;
183
+ rightColor?: ColorScheme;
184
+ }
185
+ /**
186
+ * Date event - timeline-style date with description.
187
+ */
188
+ export interface DateEventInput extends BaseTemplateBlock {
189
+ template: 'dateEvent';
190
+ /** The date (e.g., "July 14, 1974") */
191
+ date: string;
192
+ /** Description of what happened (supports \n) */
193
+ description: string;
194
+ /** Optional footer text */
195
+ footer?: string;
196
+ /** Mood: 'neutral', 'somber', 'celebratory' */
197
+ mood?: 'neutral' | 'somber' | 'celebratory';
198
+ /** Optional accent image to complement the text */
199
+ accentImage?: AccentImage;
200
+ }
201
+ /**
202
+ * Image with caption - background image with text overlay.
203
+ */
204
+ export interface ImageWithCaptionInput extends BaseTemplateBlock {
205
+ template: 'imageWithCaption';
206
+ /** Path to image file */
207
+ imageSrc: string;
208
+ /** Alt text for accessibility */
209
+ imageAlt: string;
210
+ /** Caption text */
211
+ caption?: string;
212
+ /** Caption position */
213
+ captionPosition?: 'bottom' | 'top' | 'center';
214
+ /** Ambient motion effect: slow zoom or pan for visual interest */
215
+ ambientMotion?: 'zoomIn' | 'zoomOut' | 'panLeft' | 'panRight';
216
+ /** When true, style caption as a title (larger, centered, prominent) */
217
+ isTitle?: boolean;
218
+ /** Optional subtitle shown below the title (only when isTitle is true) */
219
+ subtitle?: string;
220
+ /** Photo credit / artist name */
221
+ imageCredit?: string;
222
+ /** License identifier (e.g., 'CC BY-SA 4.0') */
223
+ imageLicense?: string;
224
+ }
225
+ /**
226
+ * Map block - geographic map showing article location.
227
+ *
228
+ * Displays a map centered on given coordinates with optional title,
229
+ * caption, and markers. Great for establishing geographic context.
230
+ * See docs/MAP_TILES.md for available tile styles and attribution.
231
+ */
232
+ export interface MapBlockInput extends BaseTemplateBlock {
233
+ template: 'mapBlock';
234
+ /** Map center coordinates */
235
+ center: {
236
+ lat: number;
237
+ lng: number;
238
+ };
239
+ /** Zoom level (4-16, typically 8-12 for regional context) */
240
+ zoom: number;
241
+ /** Map tile style (default: 'terrain') */
242
+ mapStyle?: MapTileStyle;
243
+ /** Optional title overlay at top */
244
+ title?: string;
245
+ /** Optional caption at bottom */
246
+ caption?: string;
247
+ /** Optional markers to show on map */
248
+ markers?: MapMarker[];
249
+ /** Ambient motion effect: slow zoom or pan for visual interest */
250
+ ambientMotion?: 'zoomIn' | 'zoomOut' | 'panLeft' | 'panRight';
251
+ /** Pre-rendered static image path (set by prerender-maps command) */
252
+ staticSrc?: string;
253
+ }
254
+ /**
255
+ * Full-bleed quote - dramatic short text filling the viewport.
256
+ * Like a movie title card. For short, punchy sentences < 60 chars.
257
+ */
258
+ export interface FullBleedQuoteInput extends BaseTemplateBlock {
259
+ template: 'fullBleedQuote';
260
+ /** Short dramatic text (< 60 chars recommended) */
261
+ text: string;
262
+ /** Color scheme for text tint */
263
+ colorScheme?: ColorScheme;
264
+ }
265
+ /**
266
+ * List block - 3-5 items stacked vertically with subtle numbering.
267
+ * Good for enumerations like "things to see" or "key features".
268
+ */
269
+ export interface ListBlockInput extends BaseTemplateBlock {
270
+ template: 'listBlock';
271
+ /** List items (3-5 recommended) */
272
+ items: string[];
273
+ /** Optional header above the list */
274
+ title?: string;
275
+ /** Color scheme for numbering accents */
276
+ colorScheme?: ColorScheme;
277
+ /** Optional accent image */
278
+ accentImage?: AccentImage;
279
+ }
280
+ /**
281
+ * Photo grid - 2-4 images in a tiled layout.
282
+ * Used when multiple images are available for visual variety.
283
+ */
284
+ export interface PhotoGridInput extends BaseTemplateBlock {
285
+ template: 'photoGrid';
286
+ /** Images to display (2-4) */
287
+ images: {
288
+ src: string;
289
+ alt: string;
290
+ credit?: string;
291
+ license?: string;
292
+ }[];
293
+ /** Optional caption below the grid */
294
+ caption?: string;
295
+ /** Ambient motion effect for the largest image */
296
+ ambientMotion?: 'zoomIn' | 'zoomOut' | 'panLeft' | 'panRight';
297
+ }
298
+ /**
299
+ * Definition card - dictionary-style term with definition.
300
+ * Large term at top, definition below, optional origin note.
301
+ */
302
+ export interface DefinitionCardInput extends BaseTemplateBlock {
303
+ template: 'definitionCard';
304
+ /** The term being defined */
305
+ term: string;
306
+ /** The definition text */
307
+ definition: string;
308
+ /** Optional etymology or origin note */
309
+ origin?: string;
310
+ /** Color scheme for term accent */
311
+ colorScheme?: ColorScheme;
312
+ /** Optional accent image */
313
+ accentImage?: AccentImage;
314
+ }
315
+ /**
316
+ * Comparison bar - two horizontal bars showing relative numeric values.
317
+ * Good for side-by-side numeric comparisons with visual weight.
318
+ */
319
+ export interface ComparisonBarInput extends BaseTemplateBlock {
320
+ template: 'comparisonBar';
321
+ /** Left bar label */
322
+ leftLabel: string;
323
+ /** Left bar numeric value */
324
+ leftValue: number;
325
+ /** Right bar label */
326
+ rightLabel: string;
327
+ /** Right bar numeric value */
328
+ rightValue: number;
329
+ /** Unit label (e.g., "km", "people") */
330
+ unit?: string;
331
+ /** Color scheme */
332
+ colorScheme?: ColorScheme;
333
+ }
334
+ /**
335
+ * Pull quote - quote text over a full-bleed background image with dark overlay.
336
+ * Cinematic alternative to quoteBlock when a high-quality image is available.
337
+ */
338
+ export interface PullQuoteInput extends BaseTemplateBlock {
339
+ template: 'pullQuote';
340
+ /** Quote text */
341
+ text: string;
342
+ /** Optional attribution */
343
+ attribution?: string;
344
+ /** Background image (fills entire viewport) */
345
+ backgroundImage: {
346
+ src: string;
347
+ alt: string;
348
+ credit?: string;
349
+ license?: string;
350
+ };
351
+ /** Ambient motion for background image */
352
+ ambientMotion?: 'zoomIn' | 'zoomOut' | 'panLeft' | 'panRight';
353
+ }
354
+ /**
355
+ * Video with caption - background video clip with text overlay.
356
+ * Plays a short clip from a source video, always muted (narration is the audio track).
357
+ * Mirrors ImageWithCaptionInput but with video-specific fields.
358
+ */
359
+ export interface VideoWithCaptionInput extends BaseTemplateBlock {
360
+ template: 'videoWithCaption';
361
+ /** Path to video file */
362
+ videoSrc: string;
363
+ /** Path to poster frame (shown before video loads) */
364
+ posterSrc?: string;
365
+ /** Alt text for accessibility */
366
+ videoAlt: string;
367
+ /** Start time within source video (seconds) */
368
+ clipStart: number;
369
+ /** End time within source video (seconds) */
370
+ clipEnd: number;
371
+ /** Source video total duration (for validation) */
372
+ sourceDuration?: number;
373
+ /** Caption text overlay */
374
+ caption?: string;
375
+ /** Caption position */
376
+ captionPosition?: 'bottom' | 'top' | 'center';
377
+ /** Video credit / artist name */
378
+ videoCredit?: string;
379
+ /** License identifier */
380
+ videoLicense?: string;
381
+ }
382
+ /**
383
+ * Video pull quote - quote text over a video clip background with dark overlay.
384
+ * Cinematic alternative to pullQuote when a video clip is available.
385
+ */
386
+ export interface VideoPullQuoteInput extends BaseTemplateBlock {
387
+ template: 'videoPullQuote';
388
+ /** Quote text */
389
+ text: string;
390
+ /** Optional attribution */
391
+ attribution?: string;
392
+ /** Background video clip */
393
+ backgroundVideo: {
394
+ src: string;
395
+ posterSrc?: string;
396
+ alt: string;
397
+ clipStart: number;
398
+ clipEnd: number;
399
+ credit?: string;
400
+ license?: string;
401
+ };
402
+ }
403
+ /**
404
+ * Union of all template block types.
405
+ */
406
+ export type TemplateBlock = TitleBlockInput | SectionHeaderInput | StatHighlightInput | QuoteBlockInput | FactCardInput | TwoColumnInput | DateEventInput | ImageWithCaptionInput | MapBlockInput | FullBleedQuoteInput | ListBlockInput | PhotoGridInput | DefinitionCardInput | ComparisonBarInput | PullQuoteInput | VideoWithCaptionInput | VideoPullQuoteInput;
407
+ /**
408
+ * A block can be either a raw Block or a TemplateBlock.
409
+ */
410
+ export type DocBlock = Block | TemplateBlock;
411
+ /**
412
+ * Check if a block is a template block.
413
+ */
414
+ export declare function isTemplateBlock(block: DocBlock): block is TemplateBlock;
415
+ /**
416
+ * Template context passed to template functions.
417
+ * Includes viewport information for multi-aspect ratio support.
418
+ */
419
+ export interface TemplateContext {
420
+ /** Full theme (colors, typography, style, renderStyle, colorSchemes) */
421
+ theme: Theme;
422
+ /** Block index in the doc */
423
+ blockIndex: number;
424
+ /** Total number of blocks */
425
+ totalBlocks: number;
426
+ /** Target viewport configuration */
427
+ viewport: ViewportConfig;
428
+ /** Computed font scale factor for this viewport */
429
+ fontScale: number;
430
+ /** Viewport orientation (landscape, portrait, square) */
431
+ orientation: ViewportOrientation;
432
+ /** Layout hints for this orientation */
433
+ layout: LayoutHints;
434
+ }
435
+ /**
436
+ * Create a template context with viewport-derived values.
437
+ */
438
+ export declare function createTemplateContext(theme: Theme, blockIndex: number, totalBlocks: number, viewport?: ViewportConfig): TemplateContext;
439
+ /**
440
+ * Calculate a scaled font size for the given context.
441
+ * Use this in templates to ensure text scales appropriately.
442
+ *
443
+ * @param basePx - Base font size in pixels (designed for 1920x1080)
444
+ * @param context - Template context with viewport info
445
+ * @param isTitle - Whether this is title text (larger scale) or body text
446
+ */
447
+ export declare function scaledFontSize(basePx: number, context: TemplateContext, isTitle?: boolean): number;
448
+ /**
449
+ * Template function signature.
450
+ * Takes template input and returns layers array.
451
+ */
452
+ export type TemplateFunction<T extends TemplateBlock> = (input: T, context: TemplateContext) => Layer[];
453
+ /**
454
+ * Registry of all template functions.
455
+ */
456
+ export type TemplateRegistry = {
457
+ [K in TemplateBlock['template']]: TemplateFunction<Extract<TemplateBlock, {
458
+ template: K;
459
+ }>>;
460
+ };
461
+ /**
462
+ * Configuration for persistent doc-wide layers.
463
+ * Bottom layers render behind all block content, top layers on top.
464
+ */
465
+ export interface PersistentLayerConfig {
466
+ /** Layers rendered behind all block content */
467
+ bottomLayers?: PersistentLayer[];
468
+ /** Layers rendered on top of all block content */
469
+ topLayers?: PersistentLayer[];
470
+ }
471
+ /**
472
+ * A persistent layer - either a template or raw Layer.
473
+ */
474
+ export type PersistentLayer = PersistentLayerTemplate | Layer;
475
+ /**
476
+ * Check if a persistent layer is a template.
477
+ */
478
+ export declare function isPersistentLayerTemplate(layer: PersistentLayer): layer is PersistentLayerTemplate;
479
+ /**
480
+ * Template-based persistent layer for easy configuration.
481
+ */
482
+ export interface PersistentLayerTemplate {
483
+ template: PersistentLayerTemplateType;
484
+ config: PersistentLayerTemplateConfig;
485
+ }
486
+ /**
487
+ * Available persistent layer template types.
488
+ */
489
+ export type PersistentLayerTemplateType = 'solidBackground' | 'gradientBackground' | 'imageBackground' | 'patternBackground' | 'titleCaption' | 'cornerBranding' | 'progressIndicator';
490
+ /**
491
+ * Union of all persistent layer template configs.
492
+ */
493
+ export type PersistentLayerTemplateConfig = SolidBackgroundConfig | GradientBackgroundConfig | ImageBackgroundConfig | PatternBackgroundConfig | TitleCaptionConfig | CornerBrandingConfig | ProgressIndicatorConfig;
494
+ /**
495
+ * Solid color background.
496
+ */
497
+ export interface SolidBackgroundConfig {
498
+ type: 'solidBackground';
499
+ /** CSS color value */
500
+ color: string;
501
+ }
502
+ /**
503
+ * Gradient background (CSS gradient or preset).
504
+ */
505
+ export interface GradientBackgroundConfig {
506
+ type: 'gradientBackground';
507
+ /** Custom CSS gradient string */
508
+ gradient?: string;
509
+ /** Preset gradient name */
510
+ preset?: 'dark-vignette' | 'radial-dark' | 'warm-sunset' | 'cool-blue' | 'earth-tones';
511
+ }
512
+ /**
513
+ * Image background (blurred/faded hero image).
514
+ */
515
+ export interface ImageBackgroundConfig {
516
+ type: 'imageBackground';
517
+ /** Path to image file */
518
+ src: string;
519
+ /** Blur radius in pixels (0-20) */
520
+ blur?: number;
521
+ /** Opacity (0-1) */
522
+ opacity?: number;
523
+ /** Ambient motion effect */
524
+ ambientMotion?: 'zoomIn' | 'zoomOut' | 'panLeft' | 'panRight';
525
+ }
526
+ /**
527
+ * Pattern background (subtle repeating pattern).
528
+ */
529
+ export interface PatternBackgroundConfig {
530
+ type: 'patternBackground';
531
+ /** Pattern type */
532
+ pattern: 'dots' | 'grid' | 'diagonal' | 'noise';
533
+ /** Pattern color */
534
+ color?: string;
535
+ /** Pattern opacity (0-1) */
536
+ opacity?: number;
537
+ /** Pattern scale multiplier */
538
+ scale?: number;
539
+ }
540
+ /**
541
+ * Title caption overlay (article title in corner).
542
+ */
543
+ export interface TitleCaptionConfig {
544
+ type: 'titleCaption';
545
+ /** Title text */
546
+ title: string;
547
+ /** Subtitle text (e.g., short URL like "qual..la/slug") */
548
+ subtitle?: string;
549
+ /** Position on screen */
550
+ position: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';
551
+ /** Font size in pixels (default: 18) */
552
+ fontSize?: number;
553
+ /** Show thumbnail alongside title */
554
+ showThumbnail?: boolean;
555
+ /** Thumbnail image path */
556
+ thumbnailSrc?: string;
557
+ }
558
+ /**
559
+ * Corner branding overlay (logo or text badge).
560
+ */
561
+ export interface CornerBrandingConfig {
562
+ type: 'cornerBranding';
563
+ /** Text content or image path */
564
+ content: string;
565
+ /** Position on screen */
566
+ position: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';
567
+ /** Whether content is an image path (vs text) */
568
+ isImage?: boolean;
569
+ }
570
+ /**
571
+ * Progress indicator overlay (bar or dots showing position).
572
+ */
573
+ export interface ProgressIndicatorConfig {
574
+ type: 'progressIndicator';
575
+ /** Indicator style */
576
+ style: 'bar' | 'dots' | 'fraction';
577
+ /** Position on screen */
578
+ position: 'bottom' | 'top';
579
+ /** Indicator color */
580
+ color?: string;
581
+ }
582
+ export {};
583
+ //# sourceMappingURL=BlockTemplates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlockTemplates.d.ts","sourceRoot":"","sources":["../../src/schemas/BlockTemplates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Block Templates Schema
3
+ *
4
+ * Defines a template system for AI-generated doc blocks. Instead of
5
+ * specifying low-level layers, positions, and animations, AI can use
6
+ * high-level templates like "titleBlock" or "statHighlight" with simple
7
+ * content parameters.
8
+ *
9
+ * Templates are expanded into full Block structures at render time,
10
+ * ensuring consistent styling and reducing AI generation errors.
11
+ *
12
+ * Template Types:
13
+ * - titleBlock: Doc intro with title + subtitle
14
+ * - sectionHeader: Colored section divider
15
+ * - statHighlight: Big number/stat with description
16
+ * - quoteBlock: Large centered quote
17
+ * - factCard: Key fact with explanation
18
+ * - twoColumn: Side-by-side comparison
19
+ * - dateEvent: Timeline-style date + description
20
+ * - imageWithCaption: Image with text overlay
21
+ */
22
+ import { VIEWPORT_PRESETS, getViewportOrientation, calculateFontScale } from './Viewport.js';
23
+ import { getLayoutHints, scaledFontSize as scaleFontSize } from './LayoutStrategy.js';
24
+ /**
25
+ * Default font family for doc text.
26
+ * PT Serif provides a classic, readable appearance for documentary-style content.
27
+ * Used as a fallback in TextLayer when no font is specified.
28
+ */
29
+ export const DEFAULT_DOC_FONT = '"PT Serif", Georgia, "Times New Roman", serif';
30
+ /**
31
+ * Default font family for titles.
32
+ */
33
+ export const DEFAULT_TITLE_FONT = '"PT Serif", Georgia, "Times New Roman", serif';
34
+ /**
35
+ * Check if a block is a template block.
36
+ */
37
+ export function isTemplateBlock(block) {
38
+ return 'template' in block && typeof block.template === 'string';
39
+ }
40
+ /**
41
+ * Create a template context with viewport-derived values.
42
+ */
43
+ export function createTemplateContext(theme, blockIndex, totalBlocks, viewport = VIEWPORT_PRESETS.landscape) {
44
+ const orientation = getViewportOrientation(viewport);
45
+ return {
46
+ theme,
47
+ blockIndex,
48
+ totalBlocks,
49
+ viewport,
50
+ fontScale: calculateFontScale(viewport),
51
+ orientation,
52
+ layout: getLayoutHints(orientation),
53
+ };
54
+ }
55
+ /**
56
+ * Calculate a scaled font size for the given context.
57
+ * Use this in templates to ensure text scales appropriately.
58
+ *
59
+ * @param basePx - Base font size in pixels (designed for 1920x1080)
60
+ * @param context - Template context with viewport info
61
+ * @param isTitle - Whether this is title text (larger scale) or body text
62
+ */
63
+ export function scaledFontSize(basePx, context, isTitle = false) {
64
+ return scaleFontSize(basePx, context.viewport, context.orientation, isTitle);
65
+ }
66
+ /**
67
+ * Check if a persistent layer is a template.
68
+ */
69
+ export function isPersistentLayerTemplate(layer) {
70
+ return 'template' in layer && typeof layer.template === 'string';
71
+ }
72
+ //# sourceMappingURL=BlockTemplates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlockTemplates.js","sourceRoot":"","sources":["../../src/schemas/BlockTemplates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,cAAc,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAStF;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,+CAA+C,CAAC;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,+CAA+C,CAAC;AA4ZlF;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAe;IAC7C,OAAO,UAAU,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC;AACnE,CAAC;AA2BD;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAY,EACZ,UAAkB,EAClB,WAAmB,EACnB,WAA2B,gBAAgB,CAAC,SAAS;IAErD,MAAM,WAAW,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACrD,OAAO;QACL,KAAK;QACL,UAAU;QACV,WAAW;QACX,QAAQ;QACR,SAAS,EAAE,kBAAkB,CAAC,QAAQ,CAAC;QACvC,WAAW;QACX,MAAM,EAAE,cAAc,CAAC,WAAW,CAAC;KACpC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,OAAwB,EACxB,UAAmB,KAAK;IAExB,OAAO,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AAC/E,CAAC;AAsCD;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,KAAsB;IAEtB,OAAO,UAAU,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC;AACnE,CAAC"}