@bendyline/squisq 1.3.0 → 1.4.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 (533) hide show
  1. package/dist/{Doc-Ch4tc3vv.d.ts → Doc-BeSeH2iX.d.ts} +118 -41
  2. package/dist/ImageEditDoc-BTIvw0oq.d.ts +84 -0
  3. package/dist/{chunk-CYQHG27J.js → chunk-2TMAWB4Y.js} +74 -1
  4. package/dist/chunk-2TMAWB4Y.js.map +1 -0
  5. package/dist/{chunk-OASJKWO5.js → chunk-3K5OG6KI.js} +92 -7
  6. package/dist/chunk-3K5OG6KI.js.map +1 -0
  7. package/dist/chunk-57CVQCFX.js +193 -0
  8. package/dist/chunk-57CVQCFX.js.map +1 -0
  9. package/dist/{chunk-QM5PKNPW.js → chunk-5WFRKURX.js} +1 -1
  10. package/dist/chunk-5WFRKURX.js.map +1 -0
  11. package/dist/chunk-B4EEON3N.js +1317 -0
  12. package/dist/chunk-B4EEON3N.js.map +1 -0
  13. package/dist/chunk-DBS6RIFL.js +81 -0
  14. package/dist/chunk-DBS6RIFL.js.map +1 -0
  15. package/dist/{chunk-MIBRIRGJ.js → chunk-FR2RBTKO.js} +3 -3
  16. package/dist/{chunk-MIBRIRGJ.js.map → chunk-FR2RBTKO.js.map} +1 -1
  17. package/dist/chunk-H3AXU4MJ.js +179 -0
  18. package/dist/chunk-H3AXU4MJ.js.map +1 -0
  19. package/dist/chunk-JELIRVDP.js +24 -0
  20. package/dist/chunk-JELIRVDP.js.map +1 -0
  21. package/dist/chunk-K32VJONL.js +193 -0
  22. package/dist/chunk-K32VJONL.js.map +1 -0
  23. package/dist/{chunk-6BAVXFYC.js → chunk-KSWJR66U.js} +218 -42
  24. package/dist/chunk-KSWJR66U.js.map +1 -0
  25. package/dist/{chunk-TSG2OSE6.js → chunk-MYIH7FWD.js} +3 -3
  26. package/dist/chunk-MYIH7FWD.js.map +1 -0
  27. package/dist/chunk-VLJJHDAC.js +218 -0
  28. package/dist/chunk-VLJJHDAC.js.map +1 -0
  29. package/dist/chunk-WMOI7FN3.js +182 -0
  30. package/dist/chunk-WMOI7FN3.js.map +1 -0
  31. package/dist/chunk-ZTX4PFFT.js +520 -0
  32. package/dist/chunk-ZTX4PFFT.js.map +1 -0
  33. package/dist/doc/index.d.ts +5 -10
  34. package/dist/doc/index.js +145 -7
  35. package/dist/doc/index.js.map +1 -1
  36. package/dist/generate/index.d.ts +99 -7
  37. package/dist/generate/index.js +16 -3
  38. package/dist/generate/index.js.map +1 -1
  39. package/dist/icons/index.d.ts +87 -0
  40. package/dist/icons/index.js +17 -0
  41. package/dist/icons/index.js.map +1 -0
  42. package/dist/imageEdit/index.d.ts +216 -0
  43. package/dist/imageEdit/index.js +54 -0
  44. package/dist/imageEdit/index.js.map +1 -0
  45. package/dist/index.d.ts +21 -9
  46. package/dist/index.js +461 -8
  47. package/dist/index.js.map +1 -1
  48. package/dist/jsonForm/index.d.ts +191 -0
  49. package/dist/jsonForm/index.js +27 -0
  50. package/dist/jsonForm/index.js.map +1 -0
  51. package/dist/markdown/index.d.ts +265 -19
  52. package/dist/markdown/index.js +39 -33
  53. package/dist/markdown/index.js.map +1 -1
  54. package/dist/random/index.d.ts +51 -2
  55. package/dist/random/index.js +9 -1
  56. package/dist/random/index.js.map +1 -1
  57. package/dist/recommend/index.d.ts +42 -0
  58. package/dist/recommend/index.js +10 -0
  59. package/dist/recommend/index.js.map +1 -0
  60. package/dist/schemas/index.d.ts +188 -10
  61. package/dist/schemas/index.js +120 -7
  62. package/dist/schemas/index.js.map +1 -1
  63. package/dist/spatial/index.d.ts +111 -3
  64. package/dist/spatial/index.js +24 -2
  65. package/dist/spatial/index.js.map +1 -1
  66. package/dist/storage/index.d.ts +159 -9
  67. package/dist/storage/index.js +20 -5
  68. package/dist/storage/index.js.map +1 -1
  69. package/dist/story/index.d.ts +53 -13
  70. package/dist/story/index.js +12 -4
  71. package/dist/themeLibrary-BHjJ0Qx6.d.ts +40 -0
  72. package/dist/timing/index.d.ts +109 -4
  73. package/dist/timing/index.js +23 -2
  74. package/dist/timing/index.js.map +1 -1
  75. package/dist/transform/index.d.ts +175 -6
  76. package/dist/transform/index.js +490 -3
  77. package/dist/transform/index.js.map +1 -1
  78. package/dist/{types-CkNttVSF.d.ts → types-BdZkdJ3z.d.ts} +17 -2
  79. package/dist/types-D98li1gV.d.ts +93 -0
  80. package/dist/versions/index.d.ts +128 -0
  81. package/dist/versions/index.js +35 -0
  82. package/dist/versions/index.js.map +1 -0
  83. package/package.json +28 -1
  84. package/src/__tests__/colorUtils.test.ts +112 -0
  85. package/src/__tests__/getLayers.test.ts +32 -7
  86. package/src/__tests__/iconResolve.test.ts +122 -0
  87. package/src/__tests__/imageEditState.test.ts +74 -0
  88. package/src/__tests__/imageEditVersions.test.ts +169 -0
  89. package/src/__tests__/inferDocumentTitle.test.ts +50 -0
  90. package/src/__tests__/jsonForm.chooseControl.test.ts +86 -0
  91. package/src/__tests__/jsonForm.evaluateWhen.test.ts +59 -0
  92. package/src/__tests__/jsonForm.inferSchema.test.ts +25 -0
  93. package/src/__tests__/jsonForm.pointer.test.ts +103 -0
  94. package/src/__tests__/markdownIcons.test.ts +104 -0
  95. package/src/__tests__/markdownToDoc.test.ts +19 -4
  96. package/src/__tests__/recommendTemplates.test.ts +183 -0
  97. package/src/__tests__/scopedContentContainer.test.ts +89 -0
  98. package/src/__tests__/slideshowGenerator.test.ts +1 -1
  99. package/src/__tests__/templateAnnotationParse.test.ts +42 -0
  100. package/src/__tests__/templates.test.ts +93 -9
  101. package/src/__tests__/themeCompile.test.ts +156 -0
  102. package/src/__tests__/themeValidator.test.ts +125 -0
  103. package/src/__tests__/versions.test.ts +415 -0
  104. package/src/doc/audioMapping.ts +55 -11
  105. package/src/doc/getLayers.ts +32 -21
  106. package/src/doc/markdownToDoc.ts +45 -7
  107. package/src/doc/templates/featureBlock.ts +202 -0
  108. package/src/doc/templates/fullBleedQuote.ts +13 -0
  109. package/src/doc/templates/index.ts +50 -16
  110. package/src/doc/templates/listBlock.ts +24 -5
  111. package/src/doc/templates/statHighlight.ts +13 -0
  112. package/src/doc/templates/titleBlock.ts +9 -0
  113. package/src/doc/utils/themeUtils.ts +8 -7
  114. package/src/generate/slideshowGenerator.ts +1 -1
  115. package/src/generate/templateMapper.ts +2 -2
  116. package/src/icons/iconData.ts +31 -0
  117. package/src/icons/index.ts +18 -0
  118. package/src/icons/resolve.ts +139 -0
  119. package/src/imageEdit/ImageEditVersionManager.ts +73 -0
  120. package/src/imageEdit/export.ts +326 -0
  121. package/src/imageEdit/index.ts +71 -0
  122. package/src/imageEdit/persistence.ts +62 -0
  123. package/src/imageEdit/state.ts +112 -0
  124. package/src/imageEdit/versionPaths.ts +57 -0
  125. package/src/imageEdit/versions.ts +231 -0
  126. package/src/index.ts +4 -0
  127. package/src/jsonForm/chooseControl.ts +88 -0
  128. package/src/jsonForm/evaluateWhen.ts +59 -0
  129. package/src/jsonForm/index.ts +22 -0
  130. package/src/jsonForm/inferSchema.ts +25 -0
  131. package/src/jsonForm/pointer.ts +109 -0
  132. package/src/jsonForm/types.ts +167 -0
  133. package/src/markdown/convert.ts +145 -5
  134. package/src/markdown/index.ts +3 -0
  135. package/src/markdown/types.ts +19 -2
  136. package/src/markdown/utils.ts +159 -0
  137. package/src/recommend/index.ts +16 -0
  138. package/src/recommend/templates.ts +273 -0
  139. package/src/schemas/BlockTemplates.ts +50 -7
  140. package/src/schemas/ImageEditDoc.ts +95 -0
  141. package/src/schemas/Theme.ts +98 -31
  142. package/src/schemas/colorUtils.ts +186 -0
  143. package/src/schemas/fontStacks.ts +257 -0
  144. package/src/schemas/index.ts +12 -0
  145. package/src/schemas/themeCompile.ts +203 -0
  146. package/src/schemas/themeLibrary.ts +18 -597
  147. package/src/schemas/themeValidator.ts +388 -0
  148. package/src/schemas/themes/bold.json +48 -0
  149. package/src/schemas/themes/cinematic.json +54 -0
  150. package/src/schemas/themes/documentary.json +49 -0
  151. package/src/schemas/themes/gezellig.json +44 -0
  152. package/src/schemas/themes/index.ts +53 -0
  153. package/src/schemas/themes/magazine.json +44 -0
  154. package/src/schemas/themes/minimalist.json +45 -0
  155. package/src/schemas/themes/morning-light.json +42 -0
  156. package/src/schemas/themes/standard-dark.json +50 -0
  157. package/src/schemas/themes/standard.json +42 -0
  158. package/src/schemas/themes/tech-dark.json +48 -0
  159. package/src/schemas/themes/warm-earth.json +50 -0
  160. package/src/storage/ScopedContentContainer.ts +113 -0
  161. package/src/storage/index.ts +1 -0
  162. package/src/versions/DocumentVersionManager.ts +70 -0
  163. package/src/versions/index.ts +54 -0
  164. package/src/versions/operations.ts +230 -0
  165. package/src/versions/paths.ts +66 -0
  166. package/src/versions/timestamp.ts +48 -0
  167. package/src/versions/types.ts +91 -0
  168. package/dist/__tests__/animationUtils.test.d.ts +0 -2
  169. package/dist/__tests__/animationUtils.test.d.ts.map +0 -1
  170. package/dist/__tests__/animationUtils.test.js +0 -60
  171. package/dist/__tests__/animationUtils.test.js.map +0 -1
  172. package/dist/__tests__/contentContainer.test.d.ts +0 -2
  173. package/dist/__tests__/contentContainer.test.d.ts.map +0 -1
  174. package/dist/__tests__/contentContainer.test.js +0 -234
  175. package/dist/__tests__/contentContainer.test.js.map +0 -1
  176. package/dist/__tests__/contentExtractor.test.d.ts +0 -2
  177. package/dist/__tests__/contentExtractor.test.d.ts.map +0 -1
  178. package/dist/__tests__/contentExtractor.test.js +0 -151
  179. package/dist/__tests__/contentExtractor.test.js.map +0 -1
  180. package/dist/__tests__/coverBlock.test.d.ts +0 -2
  181. package/dist/__tests__/coverBlock.test.d.ts.map +0 -1
  182. package/dist/__tests__/coverBlock.test.js +0 -197
  183. package/dist/__tests__/coverBlock.test.js.map +0 -1
  184. package/dist/__tests__/dataTable.test.d.ts +0 -2
  185. package/dist/__tests__/dataTable.test.d.ts.map +0 -1
  186. package/dist/__tests__/dataTable.test.js +0 -110
  187. package/dist/__tests__/dataTable.test.js.map +0 -1
  188. package/dist/__tests__/geohash.test.d.ts +0 -2
  189. package/dist/__tests__/geohash.test.d.ts.map +0 -1
  190. package/dist/__tests__/geohash.test.js +0 -87
  191. package/dist/__tests__/geohash.test.js.map +0 -1
  192. package/dist/__tests__/getLayers.test.d.ts +0 -2
  193. package/dist/__tests__/getLayers.test.d.ts.map +0 -1
  194. package/dist/__tests__/getLayers.test.js +0 -167
  195. package/dist/__tests__/getLayers.test.js.map +0 -1
  196. package/dist/__tests__/haversine.test.d.ts +0 -2
  197. package/dist/__tests__/haversine.test.d.ts.map +0 -1
  198. package/dist/__tests__/haversine.test.js +0 -56
  199. package/dist/__tests__/haversine.test.js.map +0 -1
  200. package/dist/__tests__/localForageAdapter.test.d.ts +0 -8
  201. package/dist/__tests__/localForageAdapter.test.d.ts.map +0 -1
  202. package/dist/__tests__/localForageAdapter.test.js +0 -130
  203. package/dist/__tests__/localForageAdapter.test.js.map +0 -1
  204. package/dist/__tests__/markdown.test.d.ts +0 -2
  205. package/dist/__tests__/markdown.test.d.ts.map +0 -1
  206. package/dist/__tests__/markdown.test.js +0 -715
  207. package/dist/__tests__/markdown.test.js.map +0 -1
  208. package/dist/__tests__/markdownToDoc.test.d.ts +0 -2
  209. package/dist/__tests__/markdownToDoc.test.d.ts.map +0 -1
  210. package/dist/__tests__/markdownToDoc.test.js +0 -447
  211. package/dist/__tests__/markdownToDoc.test.js.map +0 -1
  212. package/dist/__tests__/seededRandom.test.d.ts +0 -2
  213. package/dist/__tests__/seededRandom.test.d.ts.map +0 -1
  214. package/dist/__tests__/seededRandom.test.js +0 -125
  215. package/dist/__tests__/seededRandom.test.js.map +0 -1
  216. package/dist/__tests__/slideshowGenerator.test.d.ts +0 -2
  217. package/dist/__tests__/slideshowGenerator.test.d.ts.map +0 -1
  218. package/dist/__tests__/slideshowGenerator.test.js +0 -114
  219. package/dist/__tests__/slideshowGenerator.test.js.map +0 -1
  220. package/dist/__tests__/storage.test.d.ts +0 -2
  221. package/dist/__tests__/storage.test.d.ts.map +0 -1
  222. package/dist/__tests__/storage.test.js +0 -51
  223. package/dist/__tests__/storage.test.js.map +0 -1
  224. package/dist/__tests__/surface.test.d.ts +0 -2
  225. package/dist/__tests__/surface.test.d.ts.map +0 -1
  226. package/dist/__tests__/surface.test.js +0 -57
  227. package/dist/__tests__/surface.test.js.map +0 -1
  228. package/dist/__tests__/templates.test.d.ts +0 -2
  229. package/dist/__tests__/templates.test.d.ts.map +0 -1
  230. package/dist/__tests__/templates.test.js +0 -217
  231. package/dist/__tests__/templates.test.js.map +0 -1
  232. package/dist/__tests__/timing.test.d.ts +0 -2
  233. package/dist/__tests__/timing.test.d.ts.map +0 -1
  234. package/dist/__tests__/timing.test.js +0 -131
  235. package/dist/__tests__/timing.test.js.map +0 -1
  236. package/dist/chunk-6BAVXFYC.js.map +0 -1
  237. package/dist/chunk-7GF6RDED.js +0 -82
  238. package/dist/chunk-7GF6RDED.js.map +0 -1
  239. package/dist/chunk-CYQHG27J.js.map +0 -1
  240. package/dist/chunk-F22AE6BY.js +0 -121
  241. package/dist/chunk-F22AE6BY.js.map +0 -1
  242. package/dist/chunk-FIQR4AJG.js +0 -517
  243. package/dist/chunk-FIQR4AJG.js.map +0 -1
  244. package/dist/chunk-OASJKWO5.js.map +0 -1
  245. package/dist/chunk-QM5PKNPW.js.map +0 -1
  246. package/dist/chunk-TSG2OSE6.js.map +0 -1
  247. package/dist/doc/audioMapping.d.ts +0 -36
  248. package/dist/doc/audioMapping.d.ts.map +0 -1
  249. package/dist/doc/audioMapping.js +0 -315
  250. package/dist/doc/audioMapping.js.map +0 -1
  251. package/dist/doc/docToMarkdown.d.ts +0 -41
  252. package/dist/doc/docToMarkdown.d.ts.map +0 -1
  253. package/dist/doc/docToMarkdown.js +0 -88
  254. package/dist/doc/docToMarkdown.js.map +0 -1
  255. package/dist/doc/getLayers.d.ts +0 -65
  256. package/dist/doc/getLayers.d.ts.map +0 -1
  257. package/dist/doc/getLayers.js +0 -103
  258. package/dist/doc/getLayers.js.map +0 -1
  259. package/dist/doc/index.d.ts.map +0 -1
  260. package/dist/doc/markdownToDoc.d.ts +0 -75
  261. package/dist/doc/markdownToDoc.d.ts.map +0 -1
  262. package/dist/doc/markdownToDoc.js +0 -398
  263. package/dist/doc/markdownToDoc.js.map +0 -1
  264. package/dist/doc/templates/accentImage.d.ts +0 -59
  265. package/dist/doc/templates/accentImage.d.ts.map +0 -1
  266. package/dist/doc/templates/accentImage.js +0 -275
  267. package/dist/doc/templates/accentImage.js.map +0 -1
  268. package/dist/doc/templates/captionUtils.d.ts +0 -20
  269. package/dist/doc/templates/captionUtils.d.ts.map +0 -1
  270. package/dist/doc/templates/captionUtils.js +0 -29
  271. package/dist/doc/templates/captionUtils.js.map +0 -1
  272. package/dist/doc/templates/comparisonBar.d.ts +0 -13
  273. package/dist/doc/templates/comparisonBar.d.ts.map +0 -1
  274. package/dist/doc/templates/comparisonBar.js +0 -145
  275. package/dist/doc/templates/comparisonBar.js.map +0 -1
  276. package/dist/doc/templates/coverBlock.d.ts +0 -51
  277. package/dist/doc/templates/coverBlock.d.ts.map +0 -1
  278. package/dist/doc/templates/coverBlock.js +0 -153
  279. package/dist/doc/templates/coverBlock.js.map +0 -1
  280. package/dist/doc/templates/dataTable.d.ts +0 -14
  281. package/dist/doc/templates/dataTable.d.ts.map +0 -1
  282. package/dist/doc/templates/dataTable.js +0 -73
  283. package/dist/doc/templates/dataTable.js.map +0 -1
  284. package/dist/doc/templates/dateEvent.d.ts +0 -15
  285. package/dist/doc/templates/dateEvent.d.ts.map +0 -1
  286. package/dist/doc/templates/dateEvent.js +0 -114
  287. package/dist/doc/templates/dateEvent.js.map +0 -1
  288. package/dist/doc/templates/definitionCard.d.ts +0 -13
  289. package/dist/doc/templates/definitionCard.d.ts.map +0 -1
  290. package/dist/doc/templates/definitionCard.js +0 -117
  291. package/dist/doc/templates/definitionCard.js.map +0 -1
  292. package/dist/doc/templates/factCard.d.ts +0 -15
  293. package/dist/doc/templates/factCard.d.ts.map +0 -1
  294. package/dist/doc/templates/factCard.js +0 -104
  295. package/dist/doc/templates/factCard.js.map +0 -1
  296. package/dist/doc/templates/fullBleedQuote.d.ts +0 -13
  297. package/dist/doc/templates/fullBleedQuote.d.ts.map +0 -1
  298. package/dist/doc/templates/fullBleedQuote.js +0 -55
  299. package/dist/doc/templates/fullBleedQuote.js.map +0 -1
  300. package/dist/doc/templates/imageWithCaption.d.ts +0 -13
  301. package/dist/doc/templates/imageWithCaption.d.ts.map +0 -1
  302. package/dist/doc/templates/imageWithCaption.js +0 -146
  303. package/dist/doc/templates/imageWithCaption.js.map +0 -1
  304. package/dist/doc/templates/index.d.ts +0 -105
  305. package/dist/doc/templates/index.d.ts.map +0 -1
  306. package/dist/doc/templates/index.js +0 -445
  307. package/dist/doc/templates/index.js.map +0 -1
  308. package/dist/doc/templates/listBlock.d.ts +0 -13
  309. package/dist/doc/templates/listBlock.d.ts.map +0 -1
  310. package/dist/doc/templates/listBlock.js +0 -92
  311. package/dist/doc/templates/listBlock.js.map +0 -1
  312. package/dist/doc/templates/mapBlock.d.ts +0 -17
  313. package/dist/doc/templates/mapBlock.d.ts.map +0 -1
  314. package/dist/doc/templates/mapBlock.js +0 -115
  315. package/dist/doc/templates/mapBlock.js.map +0 -1
  316. package/dist/doc/templates/persistentLayers.d.ts +0 -39
  317. package/dist/doc/templates/persistentLayers.d.ts.map +0 -1
  318. package/dist/doc/templates/persistentLayers.js +0 -447
  319. package/dist/doc/templates/persistentLayers.js.map +0 -1
  320. package/dist/doc/templates/photoGrid.d.ts +0 -20
  321. package/dist/doc/templates/photoGrid.d.ts.map +0 -1
  322. package/dist/doc/templates/photoGrid.js +0 -175
  323. package/dist/doc/templates/photoGrid.js.map +0 -1
  324. package/dist/doc/templates/pullQuote.d.ts +0 -13
  325. package/dist/doc/templates/pullQuote.d.ts.map +0 -1
  326. package/dist/doc/templates/pullQuote.js +0 -113
  327. package/dist/doc/templates/pullQuote.js.map +0 -1
  328. package/dist/doc/templates/quoteBlock.d.ts +0 -15
  329. package/dist/doc/templates/quoteBlock.d.ts.map +0 -1
  330. package/dist/doc/templates/quoteBlock.js +0 -101
  331. package/dist/doc/templates/quoteBlock.js.map +0 -1
  332. package/dist/doc/templates/sectionHeader.d.ts +0 -14
  333. package/dist/doc/templates/sectionHeader.d.ts.map +0 -1
  334. package/dist/doc/templates/sectionHeader.js +0 -97
  335. package/dist/doc/templates/sectionHeader.js.map +0 -1
  336. package/dist/doc/templates/statHighlight.d.ts +0 -15
  337. package/dist/doc/templates/statHighlight.d.ts.map +0 -1
  338. package/dist/doc/templates/statHighlight.js +0 -102
  339. package/dist/doc/templates/statHighlight.js.map +0 -1
  340. package/dist/doc/templates/titleBlock.d.ts +0 -13
  341. package/dist/doc/templates/titleBlock.d.ts.map +0 -1
  342. package/dist/doc/templates/titleBlock.js +0 -95
  343. package/dist/doc/templates/titleBlock.js.map +0 -1
  344. package/dist/doc/templates/twoColumn.d.ts +0 -15
  345. package/dist/doc/templates/twoColumn.d.ts.map +0 -1
  346. package/dist/doc/templates/twoColumn.js +0 -225
  347. package/dist/doc/templates/twoColumn.js.map +0 -1
  348. package/dist/doc/templates/videoPullQuote.d.ts +0 -20
  349. package/dist/doc/templates/videoPullQuote.d.ts.map +0 -1
  350. package/dist/doc/templates/videoPullQuote.js +0 -122
  351. package/dist/doc/templates/videoPullQuote.js.map +0 -1
  352. package/dist/doc/templates/videoWithCaption.d.ts +0 -20
  353. package/dist/doc/templates/videoWithCaption.d.ts.map +0 -1
  354. package/dist/doc/templates/videoWithCaption.js +0 -107
  355. package/dist/doc/templates/videoWithCaption.js.map +0 -1
  356. package/dist/doc/utils/animationUtils.d.ts +0 -34
  357. package/dist/doc/utils/animationUtils.d.ts.map +0 -1
  358. package/dist/doc/utils/animationUtils.js +0 -110
  359. package/dist/doc/utils/animationUtils.js.map +0 -1
  360. package/dist/doc/utils/themeUtils.d.ts +0 -64
  361. package/dist/doc/utils/themeUtils.d.ts.map +0 -1
  362. package/dist/doc/utils/themeUtils.js +0 -135
  363. package/dist/doc/utils/themeUtils.js.map +0 -1
  364. package/dist/generate/contentExtractor.d.ts +0 -112
  365. package/dist/generate/contentExtractor.d.ts.map +0 -1
  366. package/dist/generate/contentExtractor.js +0 -638
  367. package/dist/generate/contentExtractor.js.map +0 -1
  368. package/dist/generate/index.d.ts.map +0 -1
  369. package/dist/generate/slideshowGenerator.d.ts +0 -72
  370. package/dist/generate/slideshowGenerator.d.ts.map +0 -1
  371. package/dist/generate/slideshowGenerator.js +0 -159
  372. package/dist/generate/slideshowGenerator.js.map +0 -1
  373. package/dist/generate/templateMapper.d.ts +0 -23
  374. package/dist/generate/templateMapper.d.ts.map +0 -1
  375. package/dist/generate/templateMapper.js +0 -114
  376. package/dist/generate/templateMapper.js.map +0 -1
  377. package/dist/index.d.ts.map +0 -1
  378. package/dist/markdown/convert.d.ts +0 -71
  379. package/dist/markdown/convert.d.ts.map +0 -1
  380. package/dist/markdown/convert.js +0 -845
  381. package/dist/markdown/convert.js.map +0 -1
  382. package/dist/markdown/htmlParse.d.ts +0 -26
  383. package/dist/markdown/htmlParse.d.ts.map +0 -1
  384. package/dist/markdown/htmlParse.js +0 -195
  385. package/dist/markdown/htmlParse.js.map +0 -1
  386. package/dist/markdown/index.d.ts.map +0 -1
  387. package/dist/markdown/parse.d.ts +0 -27
  388. package/dist/markdown/parse.d.ts.map +0 -1
  389. package/dist/markdown/parse.js +0 -90
  390. package/dist/markdown/parse.js.map +0 -1
  391. package/dist/markdown/stringify.d.ts +0 -32
  392. package/dist/markdown/stringify.d.ts.map +0 -1
  393. package/dist/markdown/stringify.js +0 -108
  394. package/dist/markdown/stringify.js.map +0 -1
  395. package/dist/markdown/types.d.ts +0 -516
  396. package/dist/markdown/types.d.ts.map +0 -1
  397. package/dist/markdown/types.js +0 -17
  398. package/dist/markdown/types.js.map +0 -1
  399. package/dist/markdown/utils.d.ts +0 -78
  400. package/dist/markdown/utils.d.ts.map +0 -1
  401. package/dist/markdown/utils.js +0 -153
  402. package/dist/markdown/utils.js.map +0 -1
  403. package/dist/random/SeededRandom.d.ts +0 -50
  404. package/dist/random/SeededRandom.d.ts.map +0 -1
  405. package/dist/random/SeededRandom.js +0 -115
  406. package/dist/random/SeededRandom.js.map +0 -1
  407. package/dist/random/index.d.ts.map +0 -1
  408. package/dist/schemas/BlockTemplates.d.ts +0 -600
  409. package/dist/schemas/BlockTemplates.d.ts.map +0 -1
  410. package/dist/schemas/BlockTemplates.js +0 -72
  411. package/dist/schemas/BlockTemplates.js.map +0 -1
  412. package/dist/schemas/Doc.d.ts +0 -503
  413. package/dist/schemas/Doc.d.ts.map +0 -1
  414. package/dist/schemas/Doc.js +0 -90
  415. package/dist/schemas/Doc.js.map +0 -1
  416. package/dist/schemas/LayoutStrategy.d.ts +0 -84
  417. package/dist/schemas/LayoutStrategy.d.ts.map +0 -1
  418. package/dist/schemas/LayoutStrategy.js +0 -123
  419. package/dist/schemas/LayoutStrategy.js.map +0 -1
  420. package/dist/schemas/MediaProvider.d.ts +0 -65
  421. package/dist/schemas/MediaProvider.d.ts.map +0 -1
  422. package/dist/schemas/MediaProvider.js +0 -13
  423. package/dist/schemas/MediaProvider.js.map +0 -1
  424. package/dist/schemas/Theme.d.ts +0 -194
  425. package/dist/schemas/Theme.d.ts.map +0 -1
  426. package/dist/schemas/Theme.js +0 -97
  427. package/dist/schemas/Theme.js.map +0 -1
  428. package/dist/schemas/Types.d.ts +0 -14
  429. package/dist/schemas/Types.d.ts.map +0 -1
  430. package/dist/schemas/Types.js +0 -5
  431. package/dist/schemas/Types.js.map +0 -1
  432. package/dist/schemas/Viewport.d.ts +0 -74
  433. package/dist/schemas/Viewport.d.ts.map +0 -1
  434. package/dist/schemas/Viewport.js +0 -63
  435. package/dist/schemas/Viewport.js.map +0 -1
  436. package/dist/schemas/index.d.ts.map +0 -1
  437. package/dist/schemas/themeLibrary.d.ts +0 -41
  438. package/dist/schemas/themeLibrary.d.ts.map +0 -1
  439. package/dist/schemas/themeLibrary.js +0 -597
  440. package/dist/schemas/themeLibrary.js.map +0 -1
  441. package/dist/spatial/Geohash.d.ts +0 -85
  442. package/dist/spatial/Geohash.d.ts.map +0 -1
  443. package/dist/spatial/Geohash.js +0 -142
  444. package/dist/spatial/Geohash.js.map +0 -1
  445. package/dist/spatial/Haversine.d.ts +0 -24
  446. package/dist/spatial/Haversine.d.ts.map +0 -1
  447. package/dist/spatial/Haversine.js +0 -48
  448. package/dist/spatial/Haversine.js.map +0 -1
  449. package/dist/spatial/index.d.ts.map +0 -1
  450. package/dist/storage/ContentContainer.d.ts +0 -87
  451. package/dist/storage/ContentContainer.d.ts.map +0 -1
  452. package/dist/storage/ContentContainer.js +0 -131
  453. package/dist/storage/ContentContainer.js.map +0 -1
  454. package/dist/storage/LocalForageAdapter.d.ts +0 -36
  455. package/dist/storage/LocalForageAdapter.d.ts.map +0 -1
  456. package/dist/storage/LocalForageAdapter.js +0 -82
  457. package/dist/storage/LocalForageAdapter.js.map +0 -1
  458. package/dist/storage/LocalStorageAdapter.d.ts +0 -16
  459. package/dist/storage/LocalStorageAdapter.d.ts.map +0 -1
  460. package/dist/storage/LocalStorageAdapter.js +0 -50
  461. package/dist/storage/LocalStorageAdapter.js.map +0 -1
  462. package/dist/storage/MediaProviderFromContainer.d.ts +0 -21
  463. package/dist/storage/MediaProviderFromContainer.d.ts.map +0 -1
  464. package/dist/storage/MediaProviderFromContainer.js +0 -79
  465. package/dist/storage/MediaProviderFromContainer.js.map +0 -1
  466. package/dist/storage/MemoryStorageAdapter.d.ts +0 -15
  467. package/dist/storage/MemoryStorageAdapter.d.ts.map +0 -1
  468. package/dist/storage/MemoryStorageAdapter.js +0 -34
  469. package/dist/storage/MemoryStorageAdapter.js.map +0 -1
  470. package/dist/storage/Storage.d.ts +0 -23
  471. package/dist/storage/Storage.d.ts.map +0 -1
  472. package/dist/storage/Storage.js +0 -9
  473. package/dist/storage/Storage.js.map +0 -1
  474. package/dist/storage/index.d.ts.map +0 -1
  475. package/dist/themeLibrary-CEo2D4b6.d.ts +0 -44
  476. package/dist/timing/index.d.ts.map +0 -1
  477. package/dist/timing/narrationTiming.d.ts +0 -54
  478. package/dist/timing/narrationTiming.d.ts.map +0 -1
  479. package/dist/timing/narrationTiming.js +0 -190
  480. package/dist/timing/narrationTiming.js.map +0 -1
  481. package/dist/timing/readingTime.d.ts +0 -54
  482. package/dist/timing/readingTime.d.ts.map +0 -1
  483. package/dist/timing/readingTime.js +0 -49
  484. package/dist/timing/readingTime.js.map +0 -1
  485. package/dist/transform/applyTransform.d.ts +0 -22
  486. package/dist/transform/applyTransform.d.ts.map +0 -1
  487. package/dist/transform/applyTransform.js +0 -68
  488. package/dist/transform/applyTransform.js.map +0 -1
  489. package/dist/transform/blockAnalyzer.d.ts +0 -48
  490. package/dist/transform/blockAnalyzer.d.ts.map +0 -1
  491. package/dist/transform/blockAnalyzer.js +0 -135
  492. package/dist/transform/blockAnalyzer.js.map +0 -1
  493. package/dist/transform/index.d.ts.map +0 -1
  494. package/dist/transform/registry.d.ts +0 -19
  495. package/dist/transform/registry.d.ts.map +0 -1
  496. package/dist/transform/registry.js +0 -41
  497. package/dist/transform/registry.js.map +0 -1
  498. package/dist/transform/styles/dataDriven.d.ts +0 -4
  499. package/dist/transform/styles/dataDriven.d.ts.map +0 -1
  500. package/dist/transform/styles/dataDriven.js +0 -15
  501. package/dist/transform/styles/dataDriven.js.map +0 -1
  502. package/dist/transform/styles/documentary.d.ts +0 -4
  503. package/dist/transform/styles/documentary.d.ts.map +0 -1
  504. package/dist/transform/styles/documentary.js +0 -15
  505. package/dist/transform/styles/documentary.js.map +0 -1
  506. package/dist/transform/styles/index.d.ts +0 -6
  507. package/dist/transform/styles/index.d.ts.map +0 -1
  508. package/dist/transform/styles/index.js +0 -6
  509. package/dist/transform/styles/index.js.map +0 -1
  510. package/dist/transform/styles/magazine.d.ts +0 -4
  511. package/dist/transform/styles/magazine.d.ts.map +0 -1
  512. package/dist/transform/styles/magazine.js +0 -15
  513. package/dist/transform/styles/magazine.js.map +0 -1
  514. package/dist/transform/styles/minimal.d.ts +0 -4
  515. package/dist/transform/styles/minimal.d.ts.map +0 -1
  516. package/dist/transform/styles/minimal.js +0 -15
  517. package/dist/transform/styles/minimal.js.map +0 -1
  518. package/dist/transform/styles/narrative.d.ts +0 -4
  519. package/dist/transform/styles/narrative.d.ts.map +0 -1
  520. package/dist/transform/styles/narrative.js +0 -15
  521. package/dist/transform/styles/narrative.js.map +0 -1
  522. package/dist/transform/templateSelector.d.ts +0 -30
  523. package/dist/transform/templateSelector.d.ts.map +0 -1
  524. package/dist/transform/templateSelector.js +0 -218
  525. package/dist/transform/templateSelector.js.map +0 -1
  526. package/dist/transform/timingAllocator.d.ts +0 -21
  527. package/dist/transform/timingAllocator.d.ts.map +0 -1
  528. package/dist/transform/timingAllocator.js +0 -111
  529. package/dist/transform/timingAllocator.js.map +0 -1
  530. package/dist/transform/types.d.ts +0 -86
  531. package/dist/transform/types.d.ts.map +0 -1
  532. package/dist/transform/types.js +0 -9
  533. package/dist/transform/types.js.map +0 -1
@@ -1,629 +1,50 @@
1
1
  /**
2
2
  * Built-in Theme Library
3
3
  *
4
- * Ships 8 curated themes covering documentary, editorial, minimal, and
5
- * cinematic styles. Each theme is fully JSON-serializable.
4
+ * Public entry point for theme lookup. Built-in themes live as JSON
5
+ * sidecars in [./themes/](./themes/) they share the exact same shape
6
+ * as customizer-authored themes (no two-tier distinction).
6
7
  *
7
8
  * Usage:
8
9
  * ```ts
9
10
  * import { THEMES, resolveTheme } from '@bendyline/squisq/schemas';
10
11
  *
11
- * const theme = resolveTheme('minimalist'); // look up by id
12
- * const theme = THEMES.documentary; // direct access
12
+ * const theme = resolveTheme('minimalist'); // by id, with registry override
13
+ * const theme = THEMES.documentary; // direct access to a built-in
13
14
  * ```
14
15
  */
15
16
 
16
- import type { Theme, ThemeColorScheme } from './Theme.js';
17
+ import type { Theme } from './Theme.js';
18
+ import { lookupRegisteredTheme } from './Theme.js';
19
+ import { BUILTIN_THEMES } from './themes/index.js';
17
20
 
18
- // ============================================
19
- // Shared constants
20
- // ============================================
21
-
22
- // ── Font stacks ──────────────────────────────────────────────────
23
- // Each stack lists the recommended Google Font first (works when the
24
- // wrapping site loads it), then degrades to safe system fonts.
25
- // Squisq itself does NOT load Google Fonts.
26
-
27
- /** System fonts only — no external dependencies. */
28
- const SYSTEM_SANS = 'system-ui, -apple-system, "Segoe UI", Roboto, sans-serif';
29
- const SYSTEM_SERIF = 'Georgia, "Times New Roman", serif';
30
- const SYSTEM_MONO = 'Consolas, "Courier New", monospace';
31
-
32
- /** Theme-specific stacks with Google Font leads. */
33
- const PLAYFAIR = '"Playfair Display", Georgia, serif';
34
- const SOURCE_SERIF = '"Source Serif 4", "PT Serif", Georgia, serif';
35
- const INTER = '"Inter", "Segoe UI", Roboto, sans-serif';
36
- const OSWALD = '"Oswald", Impact, "Arial Black", sans-serif';
37
- const ROBOTO = '"Roboto", "Segoe UI", Arial, sans-serif';
38
- const MERRIWEATHER = '"Merriweather", Georgia, serif';
39
- const LORA = '"Lora", "Merriweather", Georgia, serif';
40
- const JETBRAINS_MONO = '"JetBrains Mono", "Fira Code", Consolas, monospace';
41
- const IBM_PLEX_SANS = '"IBM Plex Sans", "Segoe UI", Roboto, sans-serif';
42
- const DM_SERIF = '"DM Serif Display", Georgia, serif';
43
- const DM_SANS = '"DM Sans", "Segoe UI", Roboto, sans-serif';
44
- const CORMORANT = '"Cormorant Garamond", Garamond, Georgia, serif';
45
- const CRIMSON = '"Crimson Text", Georgia, serif';
46
- const PT_SERIF = '"PT Serif", Georgia, serif';
47
-
48
- /** Standard 6-scheme set used by the documentary theme (migrated from old COLOR_SCHEMES). */
49
- const CLASSIC_COLOR_SCHEMES: Record<string, ThemeColorScheme> = {
50
- blue: { bg: '#1a365d', text: '#63b3ed', accent: '#90cdf4' },
51
- green: { bg: '#22543d', text: '#9ae6b4', accent: '#68d391' },
52
- purple: { bg: '#44337a', text: '#d6bcfa', accent: '#b794f4' },
53
- red: { bg: '#742a2a', text: '#fc8181', accent: '#feb2b2' },
54
- orange: { bg: '#744210', text: '#fbd38d', accent: '#f6ad55' },
55
- teal: { bg: '#234e52', text: '#81e6d9', accent: '#4fd1c5' },
56
- };
57
-
58
- // ============================================
59
- // 1. Standard (default — safe system fonts, no external dependencies)
60
- // ============================================
61
-
62
- const standard: Theme = {
63
- id: 'standard',
64
- name: 'Standard',
65
- description: 'Clean and safe. System fonts only — no external font dependencies.',
66
- colors: {
67
- primary: '#3182ce',
68
- secondary: '#4a5568',
69
- background: '#1a202c',
70
- backgroundLight: '#2d3748',
71
- text: '#f7fafc',
72
- textMuted: '#a0aec0',
73
- highlight: '#4299e1',
74
- warning: '#fc8181',
75
- },
76
- typography: {
77
- bodyFontFamily: SYSTEM_SANS,
78
- titleFontFamily: SYSTEM_SERIF,
79
- monoFontFamily: SYSTEM_MONO,
80
- titleWeight: 'bold',
81
- },
82
- style: {
83
- textShadow: true,
84
- overlayOpacity: 0.45,
85
- animationSpeed: 1.0,
86
- },
87
- renderStyle: {
88
- name: 'standard',
89
- defaultTextAnimation: 'fadeIn',
90
- defaultImageAnimation: 'slowZoom',
91
- ambientMotion: true,
92
- defaultTransition: { type: 'fade', duration: 0.7 },
93
- },
94
- colorSchemes: CLASSIC_COLOR_SCHEMES,
95
- persistentLayers: {
96
- bottomLayers: [
97
- {
98
- template: 'gradientBackground',
99
- config: { type: 'gradientBackground', preset: 'dark-vignette' },
100
- },
101
- ],
102
- },
103
- };
104
-
105
- // ============================================
106
- // 2. Documentary
107
- // ============================================
108
-
109
- const documentary: Theme = {
110
- id: 'documentary',
111
- name: 'Documentary',
112
- description: 'Classic dark cinematic look with elegant serif typography.',
113
- colors: {
114
- primary: '#3d5a80',
115
- secondary: '#63b3ed',
116
- background: '#1a202c',
117
- backgroundLight: '#2d3748',
118
- text: '#ffffff',
119
- textMuted: '#a0aec0',
120
- highlight: '#63b3ed',
121
- warning: '#fc8181',
122
- },
123
- typography: {
124
- bodyFontFamily: SOURCE_SERIF,
125
- titleFontFamily: PLAYFAIR,
126
- titleWeight: 'bold',
127
- },
128
- style: {
129
- textShadow: true,
130
- overlayOpacity: 0.5,
131
- animationSpeed: 1.0,
132
- },
133
- renderStyle: {
134
- name: 'documentary',
135
- defaultTextAnimation: 'fadeIn',
136
- defaultImageAnimation: 'slowZoom',
137
- ambientMotion: true,
138
- defaultTransition: { type: 'fade', duration: 0.8 },
139
- },
140
- colorSchemes: CLASSIC_COLOR_SCHEMES,
141
- persistentLayers: {
142
- bottomLayers: [
143
- {
144
- template: 'gradientBackground',
145
- config: { type: 'gradientBackground', preset: 'dark-vignette' },
146
- },
147
- ],
148
- },
149
- };
150
-
151
- // ============================================
152
- // 2. Minimalist
153
- // ============================================
154
-
155
- const minimalist: Theme = {
156
- id: 'minimalist',
157
- name: 'Minimalist',
158
- description: 'Clean near-white background with sans-serif type and minimal animation.',
159
- colors: {
160
- primary: '#2d3748',
161
- secondary: '#4a5568',
162
- background: '#f7fafc',
163
- backgroundLight: '#edf2f7',
164
- text: '#1a202c',
165
- textMuted: '#718096',
166
- highlight: '#3182ce',
167
- warning: '#e53e3e',
168
- },
169
- typography: {
170
- bodyFontFamily: INTER,
171
- titleFontFamily: INTER,
172
- titleWeight: 'bold',
173
- lineHeight: 1.6,
174
- },
175
- style: {
176
- textShadow: false,
177
- overlayOpacity: 0.3,
178
- animationSpeed: 1.2,
179
- borderRadius: 8,
180
- },
181
- renderStyle: {
182
- name: 'minimalist',
183
- defaultTextAnimation: 'fadeIn',
184
- ambientMotion: false,
185
- defaultTransition: { type: 'fade', duration: 0.6 },
186
- templateHints: {
187
- titleBlock: { showAccentLine: false },
188
- },
189
- },
190
- colorSchemes: {
191
- blue: { bg: '#ebf8ff', text: '#2b6cb0', accent: '#3182ce' },
192
- green: { bg: '#f0fff4', text: '#276749', accent: '#38a169' },
193
- purple: { bg: '#faf5ff', text: '#553c9a', accent: '#805ad5' },
194
- red: { bg: '#fff5f5', text: '#c53030', accent: '#e53e3e' },
195
- orange: { bg: '#fffaf0', text: '#c05621', accent: '#dd6b20' },
196
- teal: { bg: '#e6fffa', text: '#285e61', accent: '#319795' },
197
- },
198
- };
199
-
200
- // ============================================
201
- // 3. Bold
202
- // ============================================
203
-
204
- const bold: Theme = {
205
- id: 'bold',
206
- name: 'Bold',
207
- description: 'High-contrast black with vivid accents and dramatic animations.',
208
- colors: {
209
- primary: '#e53e3e',
210
- secondary: '#ed8936',
211
- background: '#000000',
212
- backgroundLight: '#1a1a1a',
213
- text: '#ffffff',
214
- textMuted: '#cbd5e0',
215
- highlight: '#f6e05e',
216
- warning: '#fc8181',
217
- },
218
- typography: {
219
- bodyFontFamily: ROBOTO,
220
- titleFontFamily: OSWALD,
221
- titleWeight: 'bold',
222
- titleScale: 1.15,
223
- bodyScale: 1.0,
224
- titleLineHeight: 1.1,
225
- },
226
- style: {
227
- textShadow: true,
228
- overlayOpacity: 0.6,
229
- animationSpeed: 0.8,
230
- },
231
- renderStyle: {
232
- name: 'bold',
233
- defaultTextAnimation: 'zoomIn',
234
- defaultImageAnimation: 'slowZoom',
235
- ambientMotion: true,
236
- defaultTransition: { type: 'dissolve', duration: 0.5 },
237
- templateHints: {
238
- statHighlight: { entrance: 'dramatic' },
239
- fullBleedQuote: { entrance: 'dramatic' },
240
- },
241
- },
242
- colorSchemes: {
243
- blue: { bg: '#1a202c', text: '#63b3ed', accent: '#90cdf4' },
244
- green: { bg: '#1a202c', text: '#48bb78', accent: '#68d391' },
245
- purple: { bg: '#1a202c', text: '#b794f4', accent: '#d6bcfa' },
246
- red: { bg: '#1a202c', text: '#fc8181', accent: '#feb2b2' },
247
- orange: { bg: '#1a202c', text: '#f6ad55', accent: '#fbd38d' },
248
- teal: { bg: '#1a202c', text: '#4fd1c5', accent: '#81e6d9' },
249
- },
250
- };
251
-
252
- // ============================================
253
- // 4. Morning Light
254
- // ============================================
255
-
256
- const morningLight: Theme = {
257
- id: 'morning-light',
258
- name: 'Morning Light',
259
- description: 'Warm light background with dark text and gentle serif typography.',
260
- colors: {
261
- primary: '#744210',
262
- secondary: '#975a16',
263
- background: '#faf8f5',
264
- backgroundLight: '#f5f0eb',
265
- text: '#2d3748',
266
- textMuted: '#718096',
267
- highlight: '#dd6b20',
268
- warning: '#c53030',
269
- },
270
- typography: {
271
- bodyFontFamily: LORA,
272
- titleFontFamily: MERRIWEATHER,
273
- titleWeight: 'bold',
274
- lineHeight: 1.7,
275
- },
276
- style: {
277
- textShadow: false,
278
- overlayOpacity: 0.35,
279
- animationSpeed: 1.1,
280
- borderRadius: 4,
281
- },
282
- renderStyle: {
283
- name: 'morning-light',
284
- defaultTextAnimation: 'fadeIn',
285
- ambientMotion: false,
286
- defaultTransition: { type: 'fade', duration: 1.0 },
287
- },
288
- colorSchemes: {
289
- blue: { bg: '#ebf8ff', text: '#2c5282', accent: '#4299e1' },
290
- green: { bg: '#f0fff4', text: '#22543d', accent: '#48bb78' },
291
- purple: { bg: '#faf5ff', text: '#44337a', accent: '#9f7aea' },
292
- red: { bg: '#fff5f5', text: '#9b2c2c', accent: '#fc8181' },
293
- orange: { bg: '#fffaf0', text: '#744210', accent: '#ed8936' },
294
- teal: { bg: '#e6fffa', text: '#234e52', accent: '#38b2ac' },
295
- },
296
- };
297
-
298
- // ============================================
299
- // 5. Tech Dark
300
- // ============================================
301
-
302
- const techDark: Theme = {
303
- id: 'tech-dark',
304
- name: 'Tech Dark',
305
- description: 'True black with neon cyan/green accents and monospace titles.',
306
- colors: {
307
- primary: '#00e5ff',
308
- secondary: '#00e676',
309
- background: '#0a0a0a',
310
- backgroundLight: '#1a1a2e',
311
- text: '#e0e0e0',
312
- textMuted: '#9e9e9e',
313
- highlight: '#00e5ff',
314
- warning: '#ff5252',
315
- },
316
- typography: {
317
- bodyFontFamily: IBM_PLEX_SANS,
318
- titleFontFamily: JETBRAINS_MONO,
319
- monoFontFamily: JETBRAINS_MONO,
320
- titleWeight: 'bold',
321
- titleScale: 0.9,
322
- lineHeight: 1.5,
323
- },
324
- style: {
325
- textShadow: true,
326
- overlayOpacity: 0.55,
327
- animationSpeed: 0.9,
328
- borderRadius: 2,
329
- },
330
- renderStyle: {
331
- name: 'tech-dark',
332
- defaultTextAnimation: 'typewriter',
333
- defaultImageAnimation: 'slowZoom',
334
- ambientMotion: true,
335
- defaultTransition: { type: 'dissolve', duration: 0.4 },
336
- templateHints: {
337
- statHighlight: { entrance: 'dramatic' },
338
- },
339
- },
340
- colorSchemes: {
341
- blue: { bg: '#0d1b2a', text: '#00b0ff', accent: '#40c4ff' },
342
- green: { bg: '#0d1b0d', text: '#00e676', accent: '#69f0ae' },
343
- purple: { bg: '#1a0d2e', text: '#d500f9', accent: '#ea80fc' },
344
- red: { bg: '#2e0d0d', text: '#ff5252', accent: '#ff8a80' },
345
- orange: { bg: '#2e1a0d', text: '#ff9100', accent: '#ffab40' },
346
- teal: { bg: '#0d2e2e', text: '#1de9b6', accent: '#64ffda' },
347
- },
348
- };
349
-
350
- // ============================================
351
- // 6. Magazine
352
- // ============================================
353
-
354
- const magazine: Theme = {
355
- id: 'magazine',
356
- name: 'Magazine',
357
- description: 'Rich editorial palette with mixed serif/sans typography and slide transitions.',
358
- colors: {
359
- primary: '#c53030',
360
- secondary: '#2b6cb0',
361
- background: '#1a202c',
362
- backgroundLight: '#2d3748',
363
- text: '#f7fafc',
364
- textMuted: '#cbd5e0',
365
- highlight: '#ed8936',
366
- warning: '#fc8181',
367
- },
368
- typography: {
369
- bodyFontFamily: DM_SANS,
370
- titleFontFamily: DM_SERIF,
371
- titleWeight: 'bold',
372
- titleScale: 1.05,
373
- lineHeight: 1.5,
374
- },
375
- style: {
376
- textShadow: true,
377
- overlayOpacity: 0.45,
378
- animationSpeed: 1.0,
379
- borderRadius: 6,
380
- },
381
- renderStyle: {
382
- name: 'magazine',
383
- defaultTextAnimation: 'fadeIn',
384
- defaultImageAnimation: 'slowZoom',
385
- ambientMotion: true,
386
- defaultTransition: { type: 'slideLeft', duration: 0.7 },
387
- },
388
- colorSchemes: {
389
- blue: { bg: '#1a365d', text: '#90cdf4', accent: '#63b3ed' },
390
- green: { bg: '#1c4532', text: '#9ae6b4', accent: '#68d391' },
391
- purple: { bg: '#322659', text: '#d6bcfa', accent: '#b794f4' },
392
- red: { bg: '#63171b', text: '#feb2b2', accent: '#fc8181' },
393
- orange: { bg: '#652b19', text: '#fbd38d', accent: '#f6ad55' },
394
- teal: { bg: '#1d4044', text: '#81e6d9', accent: '#4fd1c5' },
395
- },
396
- };
397
-
398
- // ============================================
399
- // 7. Cinematic
400
- // ============================================
401
-
402
- const cinematic: Theme = {
403
- id: 'cinematic',
404
- name: 'Cinematic',
405
- description: 'Ultra-dark with moody gradients, gold accents, and slow dissolve transitions.',
406
- colors: {
407
- primary: '#d69e2e',
408
- secondary: '#b7791f',
409
- background: '#0a0f1a',
410
- backgroundLight: '#1a202c',
411
- text: '#f7fafc',
412
- textMuted: '#a0aec0',
413
- highlight: '#ecc94b',
414
- warning: '#fc8181',
415
- },
416
- typography: {
417
- bodyFontFamily: CRIMSON,
418
- titleFontFamily: CORMORANT,
419
- titleWeight: 'bold',
420
- lineHeight: 1.5,
421
- titleLineHeight: 1.2,
422
- },
423
- style: {
424
- textShadow: true,
425
- overlayOpacity: 0.55,
426
- animationSpeed: 1.2,
427
- },
428
- renderStyle: {
429
- name: 'cinematic',
430
- defaultTextAnimation: 'fadeIn',
431
- defaultImageAnimation: 'slowZoom',
432
- ambientMotion: true,
433
- defaultTransition: { type: 'dissolve', duration: 1.2 },
434
- templateHints: {
435
- titleBlock: { showAccentLine: true },
436
- },
437
- },
438
- colorSchemes: {
439
- blue: { bg: '#0d1b2a', text: '#90cdf4', accent: '#63b3ed' },
440
- green: { bg: '#0d1b14', text: '#9ae6b4', accent: '#68d391' },
441
- purple: { bg: '#1a0d2e', text: '#d6bcfa', accent: '#b794f4' },
442
- red: { bg: '#2a0d0d', text: '#fc8181', accent: '#feb2b2' },
443
- orange: { bg: '#2a1a0d', text: '#fbd38d', accent: '#f6ad55' },
444
- teal: { bg: '#0d2a2a', text: '#81e6d9', accent: '#4fd1c5' },
445
- },
446
- persistentLayers: {
447
- bottomLayers: [
448
- {
449
- template: 'gradientBackground',
450
- config: { type: 'gradientBackground', preset: 'radial-dark' },
451
- },
452
- ],
453
- },
454
- };
455
-
456
- // ============================================
457
- // 8. Warm Earth
458
- // ============================================
459
-
460
- const warmEarth: Theme = {
461
- id: 'warm-earth',
462
- name: 'Warm Earth',
463
- description: 'Natural warm tones with earthy browns and terracotta accents.',
464
- colors: {
465
- primary: '#9c4221',
466
- secondary: '#c05621',
467
- background: '#1c1410',
468
- backgroundLight: '#2d241e',
469
- text: '#faf5f0',
470
- textMuted: '#c4a882',
471
- highlight: '#dd6b20',
472
- warning: '#e53e3e',
473
- },
474
- typography: {
475
- bodyFontFamily: PT_SERIF,
476
- titleFontFamily: PT_SERIF,
477
- titleWeight: 'bold',
478
- lineHeight: 1.6,
479
- },
480
- style: {
481
- textShadow: true,
482
- overlayOpacity: 0.5,
483
- animationSpeed: 1.1,
484
- },
485
- renderStyle: {
486
- name: 'warm-earth',
487
- defaultTextAnimation: 'fadeIn',
488
- defaultImageAnimation: 'panLeft',
489
- ambientMotion: true,
490
- defaultTransition: { type: 'fade', duration: 0.9 },
491
- },
492
- colorSchemes: {
493
- blue: { bg: '#2a1f14', text: '#90cdf4', accent: '#63b3ed' },
494
- green: { bg: '#1e2a14', text: '#9ae6b4', accent: '#68d391' },
495
- purple: { bg: '#2a142a', text: '#d6bcfa', accent: '#b794f4' },
496
- red: { bg: '#2a1414', text: '#fc8181', accent: '#feb2b2' },
497
- orange: { bg: '#2a1e0a', text: '#fbd38d', accent: '#f6ad55' },
498
- teal: { bg: '#142a28', text: '#81e6d9', accent: '#4fd1c5' },
499
- },
500
- persistentLayers: {
501
- bottomLayers: [
502
- {
503
- template: 'gradientBackground',
504
- config: { type: 'gradientBackground', preset: 'earth-tones' },
505
- },
506
- ],
507
- },
508
- };
509
-
510
- // ============================================
511
- // 9. Gezellig
512
- // ============================================
513
-
514
- /**
515
- * Warm sage + terracotta palette that matches the Gezel desktop app.
516
- * Background is a subtly orange-tinted near-black — a much warmer surface
517
- * than the standard `#1a202c`-family dark themes. Primary is Gezel's
518
- * accent orange (`#b0724c`); secondary is the titlebar sage (`#667f62`).
519
- *
520
- * Typography uses system fonts with emoji fallbacks at the tail of each
521
- * stack — `OpenMoji Color` first (picked up when the host app has loaded
522
- * its WOFF with `unicode-range` scoped to emoji codepoints), then the
523
- * platform emoji fonts. Hosts that haven't registered OpenMoji fall
524
- * through to the platform emoji font transparently.
525
- *
526
- * "Gezellig" — Dutch, roughly "cozy / companionable", which is the brand
527
- * direction of the Gezel app (an ensemble of AI gezels that feel like a
528
- * crew, not a robot). Works as a general-purpose warm dark theme outside
529
- * the app too.
530
- */
531
- const GEZELLIG_SANS =
532
- 'system-ui, -apple-system, "Segoe UI", Roboto, "OpenMoji Color", "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", sans-serif';
533
- const GEZELLIG_SERIF =
534
- 'Georgia, "Times New Roman", "OpenMoji Color", "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", serif';
535
-
536
- const gezellig: Theme = {
537
- id: 'gezellig',
538
- name: 'Gezellig',
539
- description:
540
- 'Warm sage + terracotta palette inspired by the Gezel desktop app. Subtle orange-tinted dark background, cream text, sage and terracotta accents.',
541
- colors: {
542
- primary: '#b0724c',
543
- secondary: '#667f62',
544
- background: '#1f1a17',
545
- backgroundLight: '#2b2420',
546
- text: '#f3ede0',
547
- textMuted: '#a89b85',
548
- highlight: '#c0875d',
549
- warning: '#e07a6b',
550
- },
551
- typography: {
552
- bodyFontFamily: GEZELLIG_SANS,
553
- titleFontFamily: GEZELLIG_SERIF,
554
- monoFontFamily: SYSTEM_MONO,
555
- titleWeight: 'bold',
556
- lineHeight: 1.55,
557
- },
558
- style: {
559
- textShadow: false,
560
- overlayOpacity: 0.4,
561
- animationSpeed: 1.0,
562
- borderRadius: 6,
563
- },
564
- renderStyle: {
565
- name: 'gezellig',
566
- defaultTextAnimation: 'fadeIn',
567
- defaultImageAnimation: 'slowZoom',
568
- ambientMotion: false,
569
- defaultTransition: { type: 'fade', duration: 0.6 },
570
- },
571
- colorSchemes: {
572
- // Warm, earthen palette with a sage-green outlier for contrast.
573
- terracotta: { bg: '#3d2620', text: '#f3ede0', accent: '#c0875d' },
574
- sage: { bg: '#28332a', text: '#e3ead9', accent: '#8aa589' },
575
- amber: { bg: '#3d2e17', text: '#fbe3a8', accent: '#d4a149' },
576
- plum: { bg: '#2e1f2a', text: '#e8d4e0', accent: '#b088a5' },
577
- ink: { bg: '#1a1f26', text: '#d5dde8', accent: '#7b8fa8' },
578
- cream: { bg: '#f3ede0', text: '#2b2420', accent: '#b0724c' },
579
- },
580
- };
581
-
582
- // ============================================
583
- // Theme Library
584
- // ============================================
585
-
586
- /**
587
- * All built-in themes, keyed by id.
588
- */
589
- export const THEMES: Record<string, Theme> = {
590
- standard,
591
- documentary,
592
- minimalist,
593
- bold,
594
- 'morning-light': morningLight,
595
- 'tech-dark': techDark,
596
- magazine,
597
- cinematic,
598
- 'warm-earth': warmEarth,
599
- gezellig,
600
- };
21
+ /** All built-in themes, keyed by id. */
22
+ export const THEMES: Record<string, Theme> = BUILTIN_THEMES;
601
23
 
602
24
  /** The default theme id. */
603
25
  export const DEFAULT_THEME_ID = 'standard';
604
26
 
605
27
  /** The default theme (standard — safe system fonts, no external dependencies). */
606
- export const DEFAULT_THEME: Theme = standard;
28
+ export const DEFAULT_THEME: Theme = THEMES[DEFAULT_THEME_ID];
607
29
 
608
30
  /**
609
- * Resolve a theme by id. Returns the default theme when `id` is
610
- * undefined or not found in the library.
31
+ * Resolve a theme by id. Custom themes registered via `registerTheme()`
32
+ * take precedence over built-ins; otherwise built-ins are searched and
33
+ * the default theme is returned for unknown ids.
611
34
  */
612
35
  export function resolveTheme(id: string | undefined): Theme {
36
+ const registered = lookupRegisteredTheme(id);
37
+ if (registered) return registered;
613
38
  if (id && id in THEMES) return THEMES[id];
614
39
  return DEFAULT_THEME;
615
40
  }
616
41
 
617
- /**
618
- * Get all available theme ids.
619
- */
42
+ /** Get all built-in theme ids. */
620
43
  export function getAvailableThemes(): string[] {
621
44
  return Object.keys(THEMES);
622
45
  }
623
46
 
624
- /**
625
- * Get a summary of all themes (id + name + description) for theme pickers.
626
- */
47
+ /** Get a summary of all built-in themes (id + name + description) for theme pickers. */
627
48
  export function getThemeSummaries(): Array<{ id: string; name: string; description?: string }> {
628
49
  return Object.values(THEMES).map((t) => ({
629
50
  id: t.id,