@bendyline/squisq 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (419) 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/__tests__/colorUtils.test.d.ts +2 -0
  4. package/dist/__tests__/colorUtils.test.d.ts.map +1 -0
  5. package/dist/__tests__/colorUtils.test.js +94 -0
  6. package/dist/__tests__/colorUtils.test.js.map +1 -0
  7. package/dist/__tests__/getLayers.test.js +31 -7
  8. package/dist/__tests__/getLayers.test.js.map +1 -1
  9. package/dist/__tests__/iconResolve.test.d.ts +2 -0
  10. package/dist/__tests__/iconResolve.test.d.ts.map +1 -0
  11. package/dist/__tests__/iconResolve.test.js +99 -0
  12. package/dist/__tests__/iconResolve.test.js.map +1 -0
  13. package/dist/__tests__/imageEditState.test.d.ts +2 -0
  14. package/dist/__tests__/imageEditState.test.d.ts.map +1 -0
  15. package/dist/__tests__/imageEditState.test.js +61 -0
  16. package/dist/__tests__/imageEditState.test.js.map +1 -0
  17. package/dist/__tests__/imageEditVersions.test.d.ts +2 -0
  18. package/dist/__tests__/imageEditVersions.test.d.ts.map +1 -0
  19. package/dist/__tests__/imageEditVersions.test.js +141 -0
  20. package/dist/__tests__/imageEditVersions.test.js.map +1 -0
  21. package/dist/__tests__/inferDocumentTitle.test.d.ts +2 -0
  22. package/dist/__tests__/inferDocumentTitle.test.d.ts.map +1 -0
  23. package/dist/__tests__/inferDocumentTitle.test.js +42 -0
  24. package/dist/__tests__/inferDocumentTitle.test.js.map +1 -0
  25. package/dist/__tests__/jsonForm.chooseControl.test.d.ts +2 -0
  26. package/dist/__tests__/jsonForm.chooseControl.test.d.ts.map +1 -0
  27. package/dist/__tests__/jsonForm.chooseControl.test.js +74 -0
  28. package/dist/__tests__/jsonForm.chooseControl.test.js.map +1 -0
  29. package/dist/__tests__/jsonForm.evaluateWhen.test.d.ts +2 -0
  30. package/dist/__tests__/jsonForm.evaluateWhen.test.d.ts.map +1 -0
  31. package/dist/__tests__/jsonForm.evaluateWhen.test.js +51 -0
  32. package/dist/__tests__/jsonForm.evaluateWhen.test.js.map +1 -0
  33. package/dist/__tests__/jsonForm.inferSchema.test.d.ts +2 -0
  34. package/dist/__tests__/jsonForm.inferSchema.test.d.ts.map +1 -0
  35. package/dist/__tests__/jsonForm.inferSchema.test.js +23 -0
  36. package/dist/__tests__/jsonForm.inferSchema.test.js.map +1 -0
  37. package/dist/__tests__/jsonForm.pointer.test.d.ts +2 -0
  38. package/dist/__tests__/jsonForm.pointer.test.d.ts.map +1 -0
  39. package/dist/__tests__/jsonForm.pointer.test.js +94 -0
  40. package/dist/__tests__/jsonForm.pointer.test.js.map +1 -0
  41. package/dist/__tests__/markdownIcons.test.d.ts +2 -0
  42. package/dist/__tests__/markdownIcons.test.d.ts.map +1 -0
  43. package/dist/__tests__/markdownIcons.test.js +93 -0
  44. package/dist/__tests__/markdownIcons.test.js.map +1 -0
  45. package/dist/__tests__/markdownToDoc.test.js +15 -4
  46. package/dist/__tests__/markdownToDoc.test.js.map +1 -1
  47. package/dist/__tests__/recommendTemplates.test.d.ts +2 -0
  48. package/dist/__tests__/recommendTemplates.test.d.ts.map +1 -0
  49. package/dist/__tests__/recommendTemplates.test.js +158 -0
  50. package/dist/__tests__/recommendTemplates.test.js.map +1 -0
  51. package/dist/__tests__/scopedContentContainer.test.d.ts +2 -0
  52. package/dist/__tests__/scopedContentContainer.test.d.ts.map +1 -0
  53. package/dist/__tests__/scopedContentContainer.test.js +74 -0
  54. package/dist/__tests__/scopedContentContainer.test.js.map +1 -0
  55. package/dist/__tests__/slideshowGenerator.test.js +1 -1
  56. package/dist/__tests__/slideshowGenerator.test.js.map +1 -1
  57. package/dist/__tests__/templateAnnotationParse.test.d.ts +2 -0
  58. package/dist/__tests__/templateAnnotationParse.test.d.ts.map +1 -0
  59. package/dist/__tests__/templateAnnotationParse.test.js +42 -0
  60. package/dist/__tests__/templateAnnotationParse.test.js.map +1 -0
  61. package/dist/__tests__/templates.test.js +90 -9
  62. package/dist/__tests__/templates.test.js.map +1 -1
  63. package/dist/__tests__/themeCompile.test.d.ts +2 -0
  64. package/dist/__tests__/themeCompile.test.d.ts.map +1 -0
  65. package/dist/__tests__/themeCompile.test.js +134 -0
  66. package/dist/__tests__/themeCompile.test.js.map +1 -0
  67. package/dist/__tests__/themeValidator.test.d.ts +2 -0
  68. package/dist/__tests__/themeValidator.test.d.ts.map +1 -0
  69. package/dist/__tests__/themeValidator.test.js +107 -0
  70. package/dist/__tests__/themeValidator.test.js.map +1 -0
  71. package/dist/__tests__/versions.test.d.ts +2 -0
  72. package/dist/__tests__/versions.test.d.ts.map +1 -0
  73. package/dist/__tests__/versions.test.js +339 -0
  74. package/dist/__tests__/versions.test.js.map +1 -0
  75. package/dist/{chunk-CYQHG27J.js → chunk-2TMAWB4Y.js} +74 -1
  76. package/dist/chunk-2TMAWB4Y.js.map +1 -0
  77. package/dist/{chunk-OASJKWO5.js → chunk-3K5OG6KI.js} +92 -7
  78. package/dist/chunk-3K5OG6KI.js.map +1 -0
  79. package/dist/chunk-57CVQCFX.js +193 -0
  80. package/dist/chunk-57CVQCFX.js.map +1 -0
  81. package/dist/{chunk-QM5PKNPW.js → chunk-5WFRKURX.js} +1 -1
  82. package/dist/chunk-5WFRKURX.js.map +1 -0
  83. package/dist/chunk-B4EEON3N.js +1317 -0
  84. package/dist/chunk-B4EEON3N.js.map +1 -0
  85. package/dist/chunk-DBS6RIFL.js +81 -0
  86. package/dist/chunk-DBS6RIFL.js.map +1 -0
  87. package/dist/{chunk-MIBRIRGJ.js → chunk-FR2RBTKO.js} +3 -3
  88. package/dist/{chunk-MIBRIRGJ.js.map → chunk-FR2RBTKO.js.map} +1 -1
  89. package/dist/chunk-H3AXU4MJ.js +179 -0
  90. package/dist/chunk-H3AXU4MJ.js.map +1 -0
  91. package/dist/chunk-JELIRVDP.js +24 -0
  92. package/dist/chunk-JELIRVDP.js.map +1 -0
  93. package/dist/chunk-K32VJONL.js +193 -0
  94. package/dist/chunk-K32VJONL.js.map +1 -0
  95. package/dist/{chunk-6BAVXFYC.js → chunk-KSWJR66U.js} +218 -42
  96. package/dist/chunk-KSWJR66U.js.map +1 -0
  97. package/dist/{chunk-TSG2OSE6.js → chunk-MYIH7FWD.js} +3 -3
  98. package/dist/chunk-MYIH7FWD.js.map +1 -0
  99. package/dist/chunk-VLJJHDAC.js +218 -0
  100. package/dist/chunk-VLJJHDAC.js.map +1 -0
  101. package/dist/chunk-WMOI7FN3.js +182 -0
  102. package/dist/chunk-WMOI7FN3.js.map +1 -0
  103. package/dist/chunk-ZTX4PFFT.js +520 -0
  104. package/dist/chunk-ZTX4PFFT.js.map +1 -0
  105. package/dist/doc/audioMapping.d.ts.map +1 -1
  106. package/dist/doc/audioMapping.js +42 -7
  107. package/dist/doc/audioMapping.js.map +1 -1
  108. package/dist/doc/getLayers.d.ts.map +1 -1
  109. package/dist/doc/getLayers.js +29 -18
  110. package/dist/doc/getLayers.js.map +1 -1
  111. package/dist/doc/markdownToDoc.d.ts.map +1 -1
  112. package/dist/doc/markdownToDoc.js +40 -6
  113. package/dist/doc/markdownToDoc.js.map +1 -1
  114. package/dist/doc/templates/featureBlock.d.ts +18 -0
  115. package/dist/doc/templates/featureBlock.d.ts.map +1 -0
  116. package/dist/doc/templates/featureBlock.js +180 -0
  117. package/dist/doc/templates/featureBlock.js.map +1 -0
  118. package/dist/doc/templates/fullBleedQuote.d.ts +12 -0
  119. package/dist/doc/templates/fullBleedQuote.d.ts.map +1 -1
  120. package/dist/doc/templates/fullBleedQuote.js +12 -0
  121. package/dist/doc/templates/fullBleedQuote.js.map +1 -1
  122. package/dist/doc/templates/index.d.ts +28 -4
  123. package/dist/doc/templates/index.d.ts.map +1 -1
  124. package/dist/doc/templates/index.js +45 -12
  125. package/dist/doc/templates/index.js.map +1 -1
  126. package/dist/doc/templates/listBlock.d.ts.map +1 -1
  127. package/dist/doc/templates/listBlock.js +22 -5
  128. package/dist/doc/templates/listBlock.js.map +1 -1
  129. package/dist/doc/templates/statHighlight.d.ts +12 -0
  130. package/dist/doc/templates/statHighlight.d.ts.map +1 -1
  131. package/dist/doc/templates/statHighlight.js +12 -0
  132. package/dist/doc/templates/statHighlight.js.map +1 -1
  133. package/dist/doc/templates/titleBlock.d.ts +11 -0
  134. package/dist/doc/templates/titleBlock.d.ts.map +1 -1
  135. package/dist/doc/templates/titleBlock.js +8 -0
  136. package/dist/doc/templates/titleBlock.js.map +1 -1
  137. package/dist/doc/utils/themeUtils.d.ts +4 -4
  138. package/dist/doc/utils/themeUtils.d.ts.map +1 -1
  139. package/dist/doc/utils/themeUtils.js +8 -7
  140. package/dist/doc/utils/themeUtils.js.map +1 -1
  141. package/dist/generate/slideshowGenerator.js +1 -1
  142. package/dist/generate/slideshowGenerator.js.map +1 -1
  143. package/dist/generate/templateMapper.js +2 -2
  144. package/dist/generate/templateMapper.js.map +1 -1
  145. package/dist/icons/iconData.d.ts +26 -0
  146. package/dist/icons/iconData.d.ts.map +1 -0
  147. package/dist/icons/iconData.js +12 -0
  148. package/dist/icons/iconData.js.map +1 -0
  149. package/dist/icons/index.d.ts +12 -0
  150. package/dist/icons/index.d.ts.map +1 -0
  151. package/dist/icons/index.js +10 -0
  152. package/dist/icons/index.js.map +1 -0
  153. package/dist/icons/resolve.d.ts +61 -0
  154. package/dist/icons/resolve.d.ts.map +1 -0
  155. package/dist/icons/resolve.js +130 -0
  156. package/dist/icons/resolve.js.map +1 -0
  157. package/dist/imageEdit/ImageEditVersionManager.d.ts +31 -0
  158. package/dist/imageEdit/ImageEditVersionManager.d.ts.map +1 -0
  159. package/dist/imageEdit/ImageEditVersionManager.js +39 -0
  160. package/dist/imageEdit/ImageEditVersionManager.js.map +1 -0
  161. package/dist/imageEdit/export.d.ts +33 -0
  162. package/dist/imageEdit/export.d.ts.map +1 -0
  163. package/dist/imageEdit/export.js +253 -0
  164. package/dist/imageEdit/export.js.map +1 -0
  165. package/dist/imageEdit/index.d.ts +14 -0
  166. package/dist/imageEdit/index.d.ts.map +1 -0
  167. package/dist/imageEdit/index.js +22 -0
  168. package/dist/imageEdit/index.js.map +1 -0
  169. package/dist/imageEdit/persistence.d.ts +15 -0
  170. package/dist/imageEdit/persistence.d.ts.map +1 -0
  171. package/dist/imageEdit/persistence.js +49 -0
  172. package/dist/imageEdit/persistence.js.map +1 -0
  173. package/dist/imageEdit/state.d.ts +42 -0
  174. package/dist/imageEdit/state.d.ts.map +1 -0
  175. package/dist/imageEdit/state.js +98 -0
  176. package/dist/imageEdit/state.js.map +1 -0
  177. package/dist/imageEdit/versionPaths.d.ts +27 -0
  178. package/dist/imageEdit/versionPaths.d.ts.map +1 -0
  179. package/dist/imageEdit/versionPaths.js +57 -0
  180. package/dist/imageEdit/versionPaths.js.map +1 -0
  181. package/dist/imageEdit/versions.d.ts +67 -0
  182. package/dist/imageEdit/versions.d.ts.map +1 -0
  183. package/dist/imageEdit/versions.js +161 -0
  184. package/dist/imageEdit/versions.js.map +1 -0
  185. package/dist/index.d.ts +4 -0
  186. package/dist/index.d.ts.map +1 -1
  187. package/dist/index.js +4 -0
  188. package/dist/index.js.map +1 -1
  189. package/dist/jsonForm/chooseControl.d.ts +20 -0
  190. package/dist/jsonForm/chooseControl.d.ts.map +1 -0
  191. package/dist/jsonForm/chooseControl.js +82 -0
  192. package/dist/jsonForm/chooseControl.js.map +1 -0
  193. package/dist/jsonForm/evaluateWhen.d.ts +12 -0
  194. package/dist/jsonForm/evaluateWhen.d.ts.map +1 -0
  195. package/dist/jsonForm/evaluateWhen.js +65 -0
  196. package/dist/jsonForm/evaluateWhen.js.map +1 -0
  197. package/dist/jsonForm/index.d.ts +14 -0
  198. package/dist/jsonForm/index.d.ts.map +1 -0
  199. package/dist/jsonForm/index.js +12 -0
  200. package/dist/jsonForm/index.js.map +1 -0
  201. package/dist/jsonForm/inferSchema.d.ts +12 -0
  202. package/dist/jsonForm/inferSchema.d.ts.map +1 -0
  203. package/dist/jsonForm/inferSchema.js +15 -0
  204. package/dist/jsonForm/inferSchema.js.map +1 -0
  205. package/dist/jsonForm/pointer.d.ts +26 -0
  206. package/dist/jsonForm/pointer.d.ts.map +1 -0
  207. package/dist/jsonForm/pointer.js +102 -0
  208. package/dist/jsonForm/pointer.js.map +1 -0
  209. package/dist/jsonForm/types.d.ts +120 -0
  210. package/dist/jsonForm/types.d.ts.map +1 -0
  211. package/dist/jsonForm/types.js +10 -0
  212. package/dist/jsonForm/types.js.map +1 -0
  213. package/dist/markdown/convert.d.ts +11 -1
  214. package/dist/markdown/convert.d.ts.map +1 -1
  215. package/dist/markdown/convert.js +135 -5
  216. package/dist/markdown/convert.js.map +1 -1
  217. package/dist/markdown/index.d.ts +1 -1
  218. package/dist/markdown/index.d.ts.map +1 -1
  219. package/dist/markdown/index.js +1 -1
  220. package/dist/markdown/index.js.map +1 -1
  221. package/dist/markdown/types.d.ts +17 -2
  222. package/dist/markdown/types.d.ts.map +1 -1
  223. package/dist/markdown/utils.d.ts +40 -0
  224. package/dist/markdown/utils.d.ts.map +1 -1
  225. package/dist/markdown/utils.js +155 -0
  226. package/dist/markdown/utils.js.map +1 -1
  227. package/dist/recommend/index.d.ts +16 -0
  228. package/dist/recommend/index.d.ts.map +1 -0
  229. package/dist/recommend/index.js +15 -0
  230. package/dist/recommend/index.js.map +1 -0
  231. package/dist/recommend/templates.d.ts +39 -0
  232. package/dist/recommend/templates.d.ts.map +1 -0
  233. package/dist/recommend/templates.js +235 -0
  234. package/dist/recommend/templates.js.map +1 -0
  235. package/dist/schemas/BlockTemplates.d.ts +46 -8
  236. package/dist/schemas/BlockTemplates.d.ts.map +1 -1
  237. package/dist/schemas/BlockTemplates.js +3 -3
  238. package/dist/schemas/BlockTemplates.js.map +1 -1
  239. package/dist/schemas/ImageEditDoc.d.ts +81 -0
  240. package/dist/schemas/ImageEditDoc.d.ts.map +1 -0
  241. package/dist/schemas/ImageEditDoc.js +20 -0
  242. package/dist/schemas/ImageEditDoc.js.map +1 -0
  243. package/dist/schemas/Theme.d.ts +70 -31
  244. package/dist/schemas/Theme.d.ts.map +1 -1
  245. package/dist/schemas/Theme.js +48 -16
  246. package/dist/schemas/Theme.js.map +1 -1
  247. package/dist/schemas/colorUtils.d.ts +51 -0
  248. package/dist/schemas/colorUtils.d.ts.map +1 -0
  249. package/dist/schemas/colorUtils.js +154 -0
  250. package/dist/schemas/colorUtils.js.map +1 -0
  251. package/dist/schemas/fontStacks.d.ts +57 -0
  252. package/dist/schemas/fontStacks.d.ts.map +1 -0
  253. package/dist/schemas/fontStacks.js +227 -0
  254. package/dist/schemas/fontStacks.js.map +1 -0
  255. package/dist/schemas/index.d.ts +5 -0
  256. package/dist/schemas/index.d.ts.map +1 -1
  257. package/dist/schemas/index.js +4 -0
  258. package/dist/schemas/index.js.map +1 -1
  259. package/dist/schemas/themeCompile.d.ts +45 -0
  260. package/dist/schemas/themeCompile.d.ts.map +1 -0
  261. package/dist/schemas/themeCompile.js +160 -0
  262. package/dist/schemas/themeCompile.js.map +1 -0
  263. package/dist/schemas/themeLibrary.d.ts +11 -15
  264. package/dist/schemas/themeLibrary.d.ts.map +1 -1
  265. package/dist/schemas/themeLibrary.js +18 -566
  266. package/dist/schemas/themeLibrary.js.map +1 -1
  267. package/dist/schemas/themeValidator.d.ts +26 -0
  268. package/dist/schemas/themeValidator.d.ts.map +1 -0
  269. package/dist/schemas/themeValidator.js +352 -0
  270. package/dist/schemas/themeValidator.js.map +1 -0
  271. package/dist/schemas/themes/bold.json +48 -0
  272. package/dist/schemas/themes/cinematic.json +54 -0
  273. package/dist/schemas/themes/documentary.json +49 -0
  274. package/dist/schemas/themes/gezellig.json +44 -0
  275. package/dist/schemas/themes/index.d.ts +26 -0
  276. package/dist/schemas/themes/index.d.ts.map +1 -0
  277. package/dist/schemas/themes/index.js +49 -0
  278. package/dist/schemas/themes/index.js.map +1 -0
  279. package/dist/schemas/themes/magazine.json +44 -0
  280. package/dist/schemas/themes/minimalist.json +45 -0
  281. package/dist/schemas/themes/morning-light.json +42 -0
  282. package/dist/schemas/themes/standard-dark.json +50 -0
  283. package/dist/schemas/themes/standard.json +42 -0
  284. package/dist/schemas/themes/tech-dark.json +48 -0
  285. package/dist/schemas/themes/warm-earth.json +50 -0
  286. package/dist/storage/ScopedContentContainer.d.ts +44 -0
  287. package/dist/storage/ScopedContentContainer.d.ts.map +1 -0
  288. package/dist/storage/ScopedContentContainer.js +94 -0
  289. package/dist/storage/ScopedContentContainer.js.map +1 -0
  290. package/dist/storage/index.d.ts +1 -0
  291. package/dist/storage/index.d.ts.map +1 -1
  292. package/dist/storage/index.js +1 -0
  293. package/dist/storage/index.js.map +1 -1
  294. package/dist/story/index.d.ts +53 -13
  295. package/dist/story/index.js +12 -4
  296. package/dist/themeLibrary-BHjJ0Qx6.d.ts +40 -0
  297. package/dist/{types-CkNttVSF.d.ts → types-BdZkdJ3z.d.ts} +17 -2
  298. package/dist/types-D98li1gV.d.ts +93 -0
  299. package/dist/versions/DocumentVersionManager.d.ts +31 -0
  300. package/dist/versions/DocumentVersionManager.d.ts.map +1 -0
  301. package/dist/versions/DocumentVersionManager.js +33 -0
  302. package/dist/versions/DocumentVersionManager.js.map +1 -0
  303. package/dist/versions/index.d.ts +29 -0
  304. package/dist/versions/index.d.ts.map +1 -0
  305. package/dist/versions/index.js +28 -0
  306. package/dist/versions/index.js.map +1 -0
  307. package/dist/versions/operations.d.ts +44 -0
  308. package/dist/versions/operations.d.ts.map +1 -0
  309. package/dist/versions/operations.js +190 -0
  310. package/dist/versions/operations.js.map +1 -0
  311. package/dist/versions/paths.d.ts +29 -0
  312. package/dist/versions/paths.d.ts.map +1 -0
  313. package/dist/versions/paths.js +66 -0
  314. package/dist/versions/paths.js.map +1 -0
  315. package/dist/versions/timestamp.d.ts +22 -0
  316. package/dist/versions/timestamp.d.ts.map +1 -0
  317. package/dist/versions/timestamp.js +44 -0
  318. package/dist/versions/timestamp.js.map +1 -0
  319. package/dist/versions/types.d.ts +92 -0
  320. package/dist/versions/types.d.ts.map +1 -0
  321. package/dist/versions/types.js +11 -0
  322. package/dist/versions/types.js.map +1 -0
  323. package/package.json +28 -1
  324. package/src/__tests__/colorUtils.test.ts +112 -0
  325. package/src/__tests__/getLayers.test.ts +32 -7
  326. package/src/__tests__/iconResolve.test.ts +122 -0
  327. package/src/__tests__/imageEditState.test.ts +74 -0
  328. package/src/__tests__/imageEditVersions.test.ts +169 -0
  329. package/src/__tests__/inferDocumentTitle.test.ts +50 -0
  330. package/src/__tests__/jsonForm.chooseControl.test.ts +86 -0
  331. package/src/__tests__/jsonForm.evaluateWhen.test.ts +59 -0
  332. package/src/__tests__/jsonForm.inferSchema.test.ts +25 -0
  333. package/src/__tests__/jsonForm.pointer.test.ts +103 -0
  334. package/src/__tests__/markdownIcons.test.ts +104 -0
  335. package/src/__tests__/markdownToDoc.test.ts +19 -4
  336. package/src/__tests__/recommendTemplates.test.ts +183 -0
  337. package/src/__tests__/scopedContentContainer.test.ts +89 -0
  338. package/src/__tests__/slideshowGenerator.test.ts +1 -1
  339. package/src/__tests__/templateAnnotationParse.test.ts +42 -0
  340. package/src/__tests__/templates.test.ts +93 -9
  341. package/src/__tests__/themeCompile.test.ts +156 -0
  342. package/src/__tests__/themeValidator.test.ts +125 -0
  343. package/src/__tests__/versions.test.ts +415 -0
  344. package/src/doc/audioMapping.ts +55 -11
  345. package/src/doc/getLayers.ts +32 -21
  346. package/src/doc/markdownToDoc.ts +45 -7
  347. package/src/doc/templates/featureBlock.ts +202 -0
  348. package/src/doc/templates/fullBleedQuote.ts +13 -0
  349. package/src/doc/templates/index.ts +50 -16
  350. package/src/doc/templates/listBlock.ts +24 -5
  351. package/src/doc/templates/statHighlight.ts +13 -0
  352. package/src/doc/templates/titleBlock.ts +9 -0
  353. package/src/doc/utils/themeUtils.ts +8 -7
  354. package/src/generate/slideshowGenerator.ts +1 -1
  355. package/src/generate/templateMapper.ts +2 -2
  356. package/src/icons/iconData.ts +31 -0
  357. package/src/icons/index.ts +18 -0
  358. package/src/icons/resolve.ts +139 -0
  359. package/src/imageEdit/ImageEditVersionManager.ts +73 -0
  360. package/src/imageEdit/export.ts +326 -0
  361. package/src/imageEdit/index.ts +71 -0
  362. package/src/imageEdit/persistence.ts +62 -0
  363. package/src/imageEdit/state.ts +112 -0
  364. package/src/imageEdit/versionPaths.ts +57 -0
  365. package/src/imageEdit/versions.ts +231 -0
  366. package/src/index.ts +4 -0
  367. package/src/jsonForm/chooseControl.ts +88 -0
  368. package/src/jsonForm/evaluateWhen.ts +59 -0
  369. package/src/jsonForm/index.ts +22 -0
  370. package/src/jsonForm/inferSchema.ts +25 -0
  371. package/src/jsonForm/pointer.ts +109 -0
  372. package/src/jsonForm/types.ts +167 -0
  373. package/src/markdown/convert.ts +145 -5
  374. package/src/markdown/index.ts +3 -0
  375. package/src/markdown/types.ts +19 -2
  376. package/src/markdown/utils.ts +159 -0
  377. package/src/recommend/index.ts +16 -0
  378. package/src/recommend/templates.ts +273 -0
  379. package/src/schemas/BlockTemplates.ts +50 -7
  380. package/src/schemas/ImageEditDoc.ts +95 -0
  381. package/src/schemas/Theme.ts +98 -31
  382. package/src/schemas/colorUtils.ts +186 -0
  383. package/src/schemas/fontStacks.ts +257 -0
  384. package/src/schemas/index.ts +12 -0
  385. package/src/schemas/themeCompile.ts +203 -0
  386. package/src/schemas/themeLibrary.ts +18 -597
  387. package/src/schemas/themeValidator.ts +388 -0
  388. package/src/schemas/themes/bold.json +48 -0
  389. package/src/schemas/themes/cinematic.json +54 -0
  390. package/src/schemas/themes/documentary.json +49 -0
  391. package/src/schemas/themes/gezellig.json +44 -0
  392. package/src/schemas/themes/index.ts +53 -0
  393. package/src/schemas/themes/magazine.json +44 -0
  394. package/src/schemas/themes/minimalist.json +45 -0
  395. package/src/schemas/themes/morning-light.json +42 -0
  396. package/src/schemas/themes/standard-dark.json +50 -0
  397. package/src/schemas/themes/standard.json +42 -0
  398. package/src/schemas/themes/tech-dark.json +48 -0
  399. package/src/schemas/themes/warm-earth.json +50 -0
  400. package/src/storage/ScopedContentContainer.ts +113 -0
  401. package/src/storage/index.ts +1 -0
  402. package/src/versions/DocumentVersionManager.ts +70 -0
  403. package/src/versions/index.ts +54 -0
  404. package/src/versions/operations.ts +230 -0
  405. package/src/versions/paths.ts +66 -0
  406. package/src/versions/timestamp.ts +48 -0
  407. package/src/versions/types.ts +91 -0
  408. package/dist/chunk-6BAVXFYC.js.map +0 -1
  409. package/dist/chunk-7GF6RDED.js +0 -82
  410. package/dist/chunk-7GF6RDED.js.map +0 -1
  411. package/dist/chunk-CYQHG27J.js.map +0 -1
  412. package/dist/chunk-F22AE6BY.js +0 -121
  413. package/dist/chunk-F22AE6BY.js.map +0 -1
  414. package/dist/chunk-FIQR4AJG.js +0 -517
  415. package/dist/chunk-FIQR4AJG.js.map +0 -1
  416. package/dist/chunk-OASJKWO5.js.map +0 -1
  417. package/dist/chunk-QM5PKNPW.js.map +0 -1
  418. package/dist/chunk-TSG2OSE6.js.map +0 -1
  419. package/dist/themeLibrary-CEo2D4b6.d.ts +0 -44
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iconData.js","sourceRoot":"","sources":["../../src/icons/iconData.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmBH,MAAM,UAAU,GACd,04jaAA04ja,CAAC;AAE74ja,MAAM,CAAC,MAAM,KAAK,GAAgB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAgB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Icons barrel — subpath `@bendyline/squisq/icons`.
3
+ *
4
+ * Exposes the FontAwesome Free catalog (`ICONS`, `IconEntry`,
5
+ * `IconFamily`) and the lookup helpers (`resolveIcon`,
6
+ * `canonicalIconToken`, `looksLikeIconToken`).
7
+ */
8
+ export { ICONS } from './iconData.js';
9
+ export type { IconEntry, IconFamily } from './iconData.js';
10
+ export { resolveIcon, canonicalIconToken, looksLikeIconToken, suggestIcons, iconGlyph, } from './resolve.js';
11
+ export type { IconSuggestion } from './resolve.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/icons/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,SAAS,GACV,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Icons barrel — subpath `@bendyline/squisq/icons`.
3
+ *
4
+ * Exposes the FontAwesome Free catalog (`ICONS`, `IconEntry`,
5
+ * `IconFamily`) and the lookup helpers (`resolveIcon`,
6
+ * `canonicalIconToken`, `looksLikeIconToken`).
7
+ */
8
+ export { ICONS } from './iconData.js';
9
+ export { resolveIcon, canonicalIconToken, looksLikeIconToken, suggestIcons, iconGlyph, } from './resolve.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/icons/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,SAAS,GACV,MAAM,cAAc,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Icon Resolver
3
+ *
4
+ * Looks up a user-supplied token against the FontAwesome Free catalog.
5
+ *
6
+ * Tokens come in two forms:
7
+ * - **Bare** (`github`) — resolves only when the name is unique across
8
+ * families. The picker prefers this form for friendliness.
9
+ * - **Qualified** (`fa-brands:github`, `fa-solid:user`) — required when
10
+ * the name collides across families (e.g. `user` ships in both solid
11
+ * and regular).
12
+ *
13
+ * Returning `null` from `resolveIcon` is a deliberate signal: callers
14
+ * should render the source token verbatim so authors can write
15
+ * `{[notathing]}` in prose without it being silently swallowed.
16
+ */
17
+ import type { IconEntry, IconFamily } from './iconData.js';
18
+ /**
19
+ * True when a token looks like an icon reference. Used by the markdown
20
+ * parser to decide whether a `{[…]}` body in a heading is worth probing
21
+ * (the heading-template path already extracted the trailing annotation
22
+ * by the time inline detection runs).
23
+ */
24
+ export declare function looksLikeIconToken(token: string): boolean;
25
+ /**
26
+ * Resolve a token to an icon. Returns `null` when the token is unknown
27
+ * OR when the bare form collides — callers should render `null` results
28
+ * as literal markdown text so authors can opt out by qualifying.
29
+ */
30
+ export declare function resolveIcon(token: string): IconEntry | null;
31
+ /**
32
+ * The canonical "shortest unambiguous" token for an icon — bare if the
33
+ * name is unique, otherwise the qualified form. Used when serializing
34
+ * a resolved icon back to markdown so we don't gratuitously qualify
35
+ * names that don't need it.
36
+ */
37
+ export declare function canonicalIconToken(entry: IconEntry): string;
38
+ /**
39
+ * Render the icon's Unicode codepoint as a single-character string.
40
+ * Returns `''` for entries without a codepoint (defensive — FA always
41
+ * has one). Used by editors and previews that want to display the
42
+ * actual glyph using the FontAwesome font; pair with the right
43
+ * font-family/font-weight for the icon's family.
44
+ */
45
+ export declare function iconGlyph(entry: IconEntry): string;
46
+ /** Single autocomplete suggestion. `score` ranks lower-is-better:
47
+ * 0 = name starts-with query, 1 = name contains query,
48
+ * 2 = keyword contains query. */
49
+ export interface IconSuggestion {
50
+ entry: IconEntry;
51
+ token: string;
52
+ score: number;
53
+ }
54
+ /**
55
+ * Rank icons against a partial token typed by the user. Used by the
56
+ * Monaco completion provider in editor-react and re-exported so any
57
+ * host can build its own typeahead.
58
+ */
59
+ export declare function suggestIcons(query: string, limit?: number): IconSuggestion[];
60
+ export type { IconEntry, IconFamily };
61
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/icons/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAoB3D;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAgB3D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAI3D;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAKlD;AAED;;kCAEkC;AAClC,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,cAAc,EAAE,CAyBxE;AAED,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Icon Resolver
3
+ *
4
+ * Looks up a user-supplied token against the FontAwesome Free catalog.
5
+ *
6
+ * Tokens come in two forms:
7
+ * - **Bare** (`github`) — resolves only when the name is unique across
8
+ * families. The picker prefers this form for friendliness.
9
+ * - **Qualified** (`fa-brands:github`, `fa-solid:user`) — required when
10
+ * the name collides across families (e.g. `user` ships in both solid
11
+ * and regular).
12
+ *
13
+ * Returning `null` from `resolveIcon` is a deliberate signal: callers
14
+ * should render the source token verbatim so authors can write
15
+ * `{[notathing]}` in prose without it being silently swallowed.
16
+ */
17
+ import { ICONS } from './iconData.js';
18
+ // Index built once per module: name → IconEntry[]. Multi-entry buckets
19
+ // indicate cross-family collisions that require a qualified token.
20
+ const BY_NAME = new Map();
21
+ for (const entry of ICONS) {
22
+ const bucket = BY_NAME.get(entry.name);
23
+ if (bucket)
24
+ bucket.push(entry);
25
+ else
26
+ BY_NAME.set(entry.name, [entry]);
27
+ }
28
+ const FAMILY_PREFIXES = {
29
+ 'fa-brands': 'brands',
30
+ 'fa-solid': 'solid',
31
+ 'fa-regular': 'regular',
32
+ brands: 'brands',
33
+ solid: 'solid',
34
+ regular: 'regular',
35
+ };
36
+ /**
37
+ * True when a token looks like an icon reference. Used by the markdown
38
+ * parser to decide whether a `{[…]}` body in a heading is worth probing
39
+ * (the heading-template path already extracted the trailing annotation
40
+ * by the time inline detection runs).
41
+ */
42
+ export function looksLikeIconToken(token) {
43
+ return /^[a-zA-Z0-9_:-]+$/.test(token);
44
+ }
45
+ /**
46
+ * Resolve a token to an icon. Returns `null` when the token is unknown
47
+ * OR when the bare form collides — callers should render `null` results
48
+ * as literal markdown text so authors can opt out by qualifying.
49
+ */
50
+ export function resolveIcon(token) {
51
+ if (!looksLikeIconToken(token))
52
+ return null;
53
+ // Qualified form: `<family-prefix>:<name>`.
54
+ const colon = token.indexOf(':');
55
+ if (colon > 0) {
56
+ const prefix = token.slice(0, colon);
57
+ const name = token.slice(colon + 1);
58
+ const family = FAMILY_PREFIXES[prefix];
59
+ if (!family)
60
+ return null;
61
+ const bucket = BY_NAME.get(name);
62
+ return bucket?.find((e) => e.family === family) ?? null;
63
+ }
64
+ // Bare form: must be unique across families.
65
+ const bucket = BY_NAME.get(token);
66
+ if (!bucket || bucket.length !== 1)
67
+ return null;
68
+ return bucket[0];
69
+ }
70
+ /**
71
+ * The canonical "shortest unambiguous" token for an icon — bare if the
72
+ * name is unique, otherwise the qualified form. Used when serializing
73
+ * a resolved icon back to markdown so we don't gratuitously qualify
74
+ * names that don't need it.
75
+ */
76
+ export function canonicalIconToken(entry) {
77
+ const bucket = BY_NAME.get(entry.name);
78
+ if (bucket && bucket.length === 1)
79
+ return entry.name;
80
+ return `fa-${entry.family}:${entry.name}`;
81
+ }
82
+ /**
83
+ * Render the icon's Unicode codepoint as a single-character string.
84
+ * Returns `''` for entries without a codepoint (defensive — FA always
85
+ * has one). Used by editors and previews that want to display the
86
+ * actual glyph using the FontAwesome font; pair with the right
87
+ * font-family/font-weight for the icon's family.
88
+ */
89
+ export function iconGlyph(entry) {
90
+ if (!entry.unicode)
91
+ return '';
92
+ const code = parseInt(entry.unicode, 16);
93
+ if (!Number.isFinite(code))
94
+ return '';
95
+ return String.fromCodePoint(code);
96
+ }
97
+ /**
98
+ * Rank icons against a partial token typed by the user. Used by the
99
+ * Monaco completion provider in editor-react and re-exported so any
100
+ * host can build its own typeahead.
101
+ */
102
+ export function suggestIcons(query, limit = 50) {
103
+ const q = query.trim().toLowerCase();
104
+ const matches = [];
105
+ for (const icon of ICONS) {
106
+ let score = -1;
107
+ if (!q) {
108
+ // Empty query — surface a few common icons. We just walk in
109
+ // order; the limit cuts it off.
110
+ score = 3;
111
+ }
112
+ else if (icon.name.startsWith(q)) {
113
+ score = 0;
114
+ }
115
+ else if (icon.name.includes(q)) {
116
+ score = 1;
117
+ }
118
+ else if (icon.keywords.includes(q)) {
119
+ score = 2;
120
+ }
121
+ if (score < 0)
122
+ continue;
123
+ matches.push({ entry: icon, token: canonicalIconToken(icon), score });
124
+ if (matches.length > 400)
125
+ break; // hard cap before sort
126
+ }
127
+ matches.sort((a, b) => a.score - b.score || a.token.length - b.token.length || a.token.localeCompare(b.token));
128
+ return matches.slice(0, limit);
129
+ }
130
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/icons/resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Convenience wrapper around the image-edit version operations that
3
+ * captures a {@link ContentContainer} reference and an optional basename
4
+ * override. Mirrors `DocumentVersionManager` in shape.
5
+ */
6
+ import type { ContentContainer } from '../storage/ContentContainer.js';
7
+ import type { CoalesceOptions, PrunePolicy, Version } from '../versions/types.js';
8
+ import { type RevertImageEditOptions, type SaveImageEditVersionOptions, type SaveImageEditVersionResult } from './versions.js';
9
+ import type { ImageEditDoc } from '../schemas/ImageEditDoc.js';
10
+ export interface ImageEditVersionManagerOptions {
11
+ /** Override the basename used in version filenames. Defaults to `'state'`. */
12
+ basename?: string;
13
+ /** Override the source filename inside the sidecar. Defaults to `state.json`. */
14
+ stateFilename?: string;
15
+ }
16
+ export declare class ImageEditVersionManager {
17
+ private readonly container;
18
+ private readonly basename;
19
+ private readonly stateFilename;
20
+ constructor(container: ContentContainer, options?: ImageEditVersionManagerOptions);
21
+ saveVersion(options?: SaveImageEditVersionOptions): Promise<SaveImageEditVersionResult>;
22
+ listVersions(): Promise<Version[]>;
23
+ readVersion(version: Version | string): Promise<ImageEditDoc | null>;
24
+ revertToVersion(version: Version | string, options?: RevertImageEditOptions): Promise<{
25
+ reverted: boolean;
26
+ snapshotted: Version | null;
27
+ }>;
28
+ pruneVersions(policy: PrunePolicy): Promise<Version[]>;
29
+ coalesceVersions(options?: CoalesceOptions): Promise<Version[]>;
30
+ }
31
+ //# sourceMappingURL=ImageEditVersionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageEditVersionManager.d.ts","sourceRoot":"","sources":["../../src/imageEdit/ImageEditVersionManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAOL,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAChC,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,WAAW,8BAA8B;IAC7C,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;gBAEvC,SAAS,EAAE,gBAAgB,EAAE,OAAO,GAAE,8BAAmC;IAMrF,WAAW,CAAC,OAAO,GAAE,2BAAgC,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAQ3F,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAIlC,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAIpE,eAAe,CACb,OAAO,EAAE,OAAO,GAAG,MAAM,EACzB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,CAAC;IAO9D,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAItD,gBAAgB,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAGpE"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Convenience wrapper around the image-edit version operations that
3
+ * captures a {@link ContentContainer} reference and an optional basename
4
+ * override. Mirrors `DocumentVersionManager` in shape.
5
+ */
6
+ import { coalesceImageEditVersions, listImageEditVersions, pruneImageEditVersions, readImageEditVersion, revertToImageEditVersion, saveImageEditVersion, } from './versions.js';
7
+ export class ImageEditVersionManager {
8
+ constructor(container, options = {}) {
9
+ this.container = container;
10
+ this.basename = options.basename;
11
+ this.stateFilename = options.stateFilename;
12
+ }
13
+ saveVersion(options = {}) {
14
+ return saveImageEditVersion(this.container, {
15
+ basename: this.basename,
16
+ stateFilename: this.stateFilename,
17
+ ...options,
18
+ });
19
+ }
20
+ listVersions() {
21
+ return listImageEditVersions(this.container, this.basename);
22
+ }
23
+ readVersion(version) {
24
+ return readImageEditVersion(this.container, version);
25
+ }
26
+ revertToVersion(version, options = {}) {
27
+ return revertToImageEditVersion(this.container, version, {
28
+ stateFilename: this.stateFilename,
29
+ ...options,
30
+ });
31
+ }
32
+ pruneVersions(policy) {
33
+ return pruneImageEditVersions(this.container, policy, this.basename);
34
+ }
35
+ coalesceVersions(options = {}) {
36
+ return coalesceImageEditVersions(this.container, options, this.basename);
37
+ }
38
+ }
39
+ //# sourceMappingURL=ImageEditVersionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageEditVersionManager.js","sourceRoot":"","sources":["../../src/imageEdit/ImageEditVersionManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,GAIrB,MAAM,eAAe,CAAC;AAUvB,MAAM,OAAO,uBAAuB;IAKlC,YAAY,SAA2B,EAAE,UAA0C,EAAE;QACnF,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAC7C,CAAC;IAED,WAAW,CAAC,UAAuC,EAAE;QACnD,OAAO,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE;YAC1C,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IAED,YAAY;QACV,OAAO,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED,WAAW,CAAC,OAAyB;QACnC,OAAO,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,eAAe,CACb,OAAyB,EACzB,UAAkC,EAAE;QAEpC,OAAO,wBAAwB,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE;YACvD,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,MAAmB;QAC/B,OAAO,sBAAsB,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvE,CAAC;IAED,gBAAgB,CAAC,UAA2B,EAAE;QAC5C,OAAO,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3E,CAAC;CACF"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Rasterize an {@link ImageEditDoc} to a PNG / JPEG / WebP {@link Blob}.
3
+ *
4
+ * The pipeline:
5
+ * 1. Build an SVG string mirroring the canvas + layers, with image
6
+ * hrefs inlined as `data:` URLs (so the canvas isn't tainted).
7
+ * 2. Wrap the SVG in a `Blob` and load it through an `Image`.
8
+ * 3. Draw it onto a canvas (`OffscreenCanvas` when available,
9
+ * otherwise a detached `HTMLCanvasElement`).
10
+ * 4. Convert the canvas to the requested format.
11
+ *
12
+ * Browser-only — calls `Image`, `URL.createObjectURL`, and canvas APIs.
13
+ * Returns a Promise that rejects on SVG parse / load failures.
14
+ */
15
+ import type { ContentContainer } from '../storage/ContentContainer.js';
16
+ import type { ImageEditDoc } from '../schemas/ImageEditDoc.js';
17
+ /** Supported export formats. */
18
+ export type ImageEditExportFormat = 'png' | 'jpeg' | 'webp';
19
+ /** Options for {@link exportImageEditDoc}. */
20
+ export interface ImageEditExportOptions {
21
+ /** Output format. Defaults to `'png'`. */
22
+ format?: ImageEditExportFormat;
23
+ /** JPEG/WebP quality 0..1. Defaults to `0.92`. Ignored for PNG. */
24
+ quality?: number;
25
+ /** Resolution scale factor. Defaults to `1` (canvas pixels = output pixels). */
26
+ scale?: number;
27
+ }
28
+ /**
29
+ * Export the doc to a raster {@link Blob}. Asset bytes referenced by image
30
+ * layers are read from `container` and inlined as data URLs.
31
+ */
32
+ export declare function exportImageEditDoc(doc: ImageEditDoc, container: ContentContainer, options?: ImageEditExportOptions): Promise<Blob>;
33
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/imageEdit/export.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAmB,YAAY,EAAkB,MAAM,4BAA4B,CAAC;AAGhG,gCAAgC;AAChC,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5D,8CAA8C;AAC9C,MAAM,WAAW,sBAAsB;IACrC,0CAA0C;IAC1C,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,YAAY,EACjB,SAAS,EAAE,gBAAgB,EAC3B,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
@@ -0,0 +1,253 @@
1
+ /**
2
+ * Rasterize an {@link ImageEditDoc} to a PNG / JPEG / WebP {@link Blob}.
3
+ *
4
+ * The pipeline:
5
+ * 1. Build an SVG string mirroring the canvas + layers, with image
6
+ * hrefs inlined as `data:` URLs (so the canvas isn't tainted).
7
+ * 2. Wrap the SVG in a `Blob` and load it through an `Image`.
8
+ * 3. Draw it onto a canvas (`OffscreenCanvas` when available,
9
+ * otherwise a detached `HTMLCanvasElement`).
10
+ * 4. Convert the canvas to the requested format.
11
+ *
12
+ * Browser-only — calls `Image`, `URL.createObjectURL`, and canvas APIs.
13
+ * Returns a Promise that rejects on SVG parse / load failures.
14
+ */
15
+ const FORMAT_MIME = {
16
+ png: 'image/png',
17
+ jpeg: 'image/jpeg',
18
+ webp: 'image/webp',
19
+ };
20
+ /**
21
+ * Export the doc to a raster {@link Blob}. Asset bytes referenced by image
22
+ * layers are read from `container` and inlined as data URLs.
23
+ */
24
+ export async function exportImageEditDoc(doc, container, options = {}) {
25
+ const format = options.format ?? 'png';
26
+ const quality = options.quality ?? 0.92;
27
+ const scale = options.scale ?? 1;
28
+ const mime = FORMAT_MIME[format];
29
+ const svg = await buildSvgString(doc, container);
30
+ const outW = Math.max(1, Math.round(doc.canvas.width * scale));
31
+ const outH = Math.max(1, Math.round(doc.canvas.height * scale));
32
+ const img = await loadSvgImage(svg);
33
+ const canvas = createRasterCanvas(outW, outH);
34
+ const ctx = canvas.getContext('2d');
35
+ if (!ctx)
36
+ throw new Error('exportImageEditDoc: 2D canvas context unavailable');
37
+ // For JPEG (no alpha), pre-fill with the canvas background or white so
38
+ // transparent regions aren't rendered as black.
39
+ if (format === 'jpeg') {
40
+ const bg = doc.canvas.background && doc.canvas.background !== 'transparent'
41
+ ? doc.canvas.background
42
+ : '#ffffff';
43
+ ctx.fillStyle = bg;
44
+ ctx.fillRect(0, 0, outW, outH);
45
+ }
46
+ ctx.drawImage(img, 0, 0, outW, outH);
47
+ return canvasToBlob(canvas, mime, quality);
48
+ }
49
+ // ============================================
50
+ // SVG construction
51
+ // ============================================
52
+ async function buildSvgString(doc, container) {
53
+ const { width, height, background } = doc.canvas;
54
+ const bgRect = background && background !== 'transparent'
55
+ ? `<rect width="${width}" height="${height}" fill="${escapeAttr(background)}"/>`
56
+ : '';
57
+ const layerXml = [];
58
+ for (const layer of doc.layers) {
59
+ if (layer.visible === false)
60
+ continue;
61
+ layerXml.push(await renderLayerToSvg(layer, doc.canvas, container));
62
+ }
63
+ return (`<?xml version="1.0" encoding="UTF-8"?>` +
64
+ `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"` +
65
+ ` width="${width}" height="${height}" viewBox="0 0 ${width} ${height}">` +
66
+ bgRect +
67
+ layerXml.join('') +
68
+ `</svg>`);
69
+ }
70
+ async function renderLayerToSvg(layer, canvas, container) {
71
+ const opacity = layer.opacity ?? 1;
72
+ const opacityAttr = opacity < 1 ? ` opacity="${opacity}"` : '';
73
+ const inner = await renderLayerInner(layer, canvas, container);
74
+ return `<g data-layer-id="${escapeAttr(layer.id)}"${opacityAttr}>${inner}</g>`;
75
+ }
76
+ async function renderLayerInner(layer, canvas, container) {
77
+ const { x, y, w, h } = resolveBox(layer.position, canvas);
78
+ if (layer.type === 'image') {
79
+ const dataUrl = await loadAssetAsDataUrl(container, layer.content.src);
80
+ return (`<image x="${x}" y="${y}" width="${w}" height="${h}"` +
81
+ ` preserveAspectRatio="${preserveAspectRatioFor(layer.content.fit)}"` +
82
+ ` xlink:href="${escapeAttr(dataUrl)}"/>`);
83
+ }
84
+ if (layer.type === 'shape') {
85
+ const c = layer.content;
86
+ const fill = c.fill ?? 'none';
87
+ const stroke = c.stroke ? ` stroke="${escapeAttr(c.stroke)}"` : '';
88
+ const strokeWidth = c.strokeWidth ? ` stroke-width="${c.strokeWidth}"` : '';
89
+ if (c.shape === 'rect') {
90
+ const rx = c.borderRadius ? ` rx="${c.borderRadius}" ry="${c.borderRadius}"` : '';
91
+ return `<rect x="${x}" y="${y}" width="${w}" height="${h}" fill="${escapeAttr(fill)}"${stroke}${strokeWidth}${rx}/>`;
92
+ }
93
+ if (c.shape === 'circle') {
94
+ const r = Math.min(w, h) / 2;
95
+ return `<circle cx="${x + w / 2}" cy="${y + h / 2}" r="${r}" fill="${escapeAttr(fill)}"${stroke}${strokeWidth}/>`;
96
+ }
97
+ // line
98
+ return `<line x1="${x}" y1="${y}" x2="${x + w}" y2="${y + h}"${stroke}${strokeWidth}/>`;
99
+ }
100
+ // text
101
+ const c = layer.content;
102
+ const style = c.style;
103
+ const lineHeight = style.lineHeight ?? 1.4;
104
+ const lineHeightPx = style.fontSize * lineHeight;
105
+ const lines = (c.text ?? '').split('\n');
106
+ const tspans = lines
107
+ .map((line, i) => `<tspan x="${x}" dy="${i === 0 ? 0 : lineHeightPx}">${escapeText(line)}</tspan>`)
108
+ .join('');
109
+ const fontFamily = style.fontFamily ?? 'sans-serif';
110
+ const fontWeight = style.fontWeight ?? 'normal';
111
+ const textAnchor = style.textAlign === 'center' ? 'middle' : style.textAlign === 'right' ? 'end' : 'start';
112
+ return (`<text x="${x}" y="${y + style.fontSize}" font-family="${escapeAttr(fontFamily)}"` +
113
+ ` font-size="${style.fontSize}" font-weight="${fontWeight}"` +
114
+ ` fill="${escapeAttr(style.color)}" text-anchor="${textAnchor}">` +
115
+ tspans +
116
+ `</text>`);
117
+ }
118
+ function preserveAspectRatioFor(fit) {
119
+ if (fit === 'cover')
120
+ return 'xMidYMid slice';
121
+ if (fit === 'fill')
122
+ return 'none';
123
+ return 'xMidYMid meet'; // contain (default)
124
+ }
125
+ function resolveBox(position, canvas) {
126
+ const x = resolveValue(position.x, canvas.width);
127
+ const y = resolveValue(position.y, canvas.height);
128
+ const w = position.width !== undefined ? resolveValue(position.width, canvas.width) : canvas.width;
129
+ const h = position.height !== undefined ? resolveValue(position.height, canvas.height) : canvas.height;
130
+ const offset = anchorOffset(position.anchor, w, h);
131
+ return { x: x + offset.x, y: y + offset.y, w, h };
132
+ }
133
+ function resolveValue(v, base) {
134
+ if (typeof v === 'number')
135
+ return v;
136
+ if (v.endsWith('%'))
137
+ return (parseFloat(v) / 100) * base;
138
+ return parseFloat(v) || 0;
139
+ }
140
+ function anchorOffset(anchor, w, h) {
141
+ switch (anchor) {
142
+ case 'center':
143
+ return { x: -w / 2, y: -h / 2 };
144
+ case 'top-right':
145
+ return { x: -w, y: 0 };
146
+ case 'bottom-left':
147
+ return { x: 0, y: -h };
148
+ case 'bottom-right':
149
+ return { x: -w, y: -h };
150
+ case 'top-left':
151
+ default:
152
+ return { x: 0, y: 0 };
153
+ }
154
+ }
155
+ // ============================================
156
+ // Asset inlining
157
+ // ============================================
158
+ async function loadAssetAsDataUrl(container, src) {
159
+ // Already a data: or absolute URL — pass through.
160
+ if (/^(data:|https?:|blob:)/.test(src))
161
+ return src;
162
+ const data = await container.readFile(src);
163
+ if (!data)
164
+ throw new Error(`exportImageEditDoc: missing asset "${src}"`);
165
+ const list = await container.listFiles(src);
166
+ const mime = list.find((e) => e.path === src)?.mimeType ?? guessMime(src);
167
+ return arrayBufferToDataUrl(data, mime);
168
+ }
169
+ function arrayBufferToDataUrl(data, mime) {
170
+ const bytes = new Uint8Array(data);
171
+ let binary = '';
172
+ // chunk to avoid call-stack limits with large images
173
+ const CHUNK = 0x8000;
174
+ for (let i = 0; i < bytes.length; i += CHUNK) {
175
+ binary += String.fromCharCode.apply(null, Array.from(bytes.subarray(i, i + CHUNK)));
176
+ }
177
+ // btoa exists in browsers and modern Node (>= 16); fall back to Buffer for older runtimes.
178
+ const b64 = typeof btoa === 'function' ? btoa(binary) : Buffer.from(bytes).toString('base64');
179
+ return `data:${mime};base64,${b64}`;
180
+ }
181
+ function guessMime(path) {
182
+ const dot = path.lastIndexOf('.');
183
+ const ext = dot >= 0 ? path.slice(dot).toLowerCase() : '';
184
+ switch (ext) {
185
+ case '.png':
186
+ return 'image/png';
187
+ case '.jpg':
188
+ case '.jpeg':
189
+ return 'image/jpeg';
190
+ case '.webp':
191
+ return 'image/webp';
192
+ case '.gif':
193
+ return 'image/gif';
194
+ case '.svg':
195
+ return 'image/svg+xml';
196
+ default:
197
+ return 'application/octet-stream';
198
+ }
199
+ }
200
+ // ============================================
201
+ // SVG → Image → Canvas → Blob
202
+ // ============================================
203
+ async function loadSvgImage(svg) {
204
+ const blob = new Blob([svg], { type: 'image/svg+xml;charset=utf-8' });
205
+ const url = URL.createObjectURL(blob);
206
+ try {
207
+ return await new Promise((resolve, reject) => {
208
+ const img = new Image();
209
+ img.onload = () => resolve(img);
210
+ img.onerror = () => reject(new Error('exportImageEditDoc: SVG image failed to load'));
211
+ img.src = url;
212
+ });
213
+ }
214
+ finally {
215
+ URL.revokeObjectURL(url);
216
+ }
217
+ }
218
+ function createRasterCanvas(width, height) {
219
+ if (typeof OffscreenCanvas !== 'undefined') {
220
+ return new OffscreenCanvas(width, height);
221
+ }
222
+ const c = document.createElement('canvas');
223
+ c.width = width;
224
+ c.height = height;
225
+ return c;
226
+ }
227
+ async function canvasToBlob(canvas, mime, quality) {
228
+ if ('convertToBlob' in canvas) {
229
+ return canvas.convertToBlob({ type: mime, quality });
230
+ }
231
+ return new Promise((resolve, reject) => {
232
+ canvas.toBlob((blob) => {
233
+ if (blob)
234
+ resolve(blob);
235
+ else
236
+ reject(new Error('exportImageEditDoc: canvas.toBlob returned null'));
237
+ }, mime, quality);
238
+ });
239
+ }
240
+ // ============================================
241
+ // XML escaping
242
+ // ============================================
243
+ function escapeAttr(s) {
244
+ return s
245
+ .replace(/&/g, '&amp;')
246
+ .replace(/"/g, '&quot;')
247
+ .replace(/</g, '&lt;')
248
+ .replace(/>/g, '&gt;');
249
+ }
250
+ function escapeText(s) {
251
+ return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
252
+ }
253
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/imageEdit/export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Image-editor primitives: schema re-exports, state helpers, persistence,
3
+ * version history, and SVG → raster export.
4
+ *
5
+ * See `@bendyline/squisq/imageEdit` for the public subpath entry.
6
+ */
7
+ export type { ImageEditDoc, ImageEditLayer, ImageEditLayerKind, ImageEditCanvas, ImageEditMeta, EditorLayerMeta, } from '../schemas/ImageEditDoc.js';
8
+ export { IMAGE_EDIT_STATE_FILENAME, IMAGE_EDIT_ASSETS_PREFIX, createEmptyImageEditDoc, addLayer, removeLayer, reorderLayer, updateLayer, setCanvas, touch, } from './state.js';
9
+ export { readImageEditDoc, writeImageEditDoc } from './persistence.js';
10
+ export { IMAGE_EDIT_VERSIONS_PREFIX, IMAGE_EDIT_DEFAULT_BASENAME, buildImageEditVersionPath, parseImageEditVersionPath, } from './versionPaths.js';
11
+ export { saveImageEditVersion, listImageEditVersions, readImageEditVersion, readImageEditVersionText, revertToImageEditVersion, pruneImageEditVersions, coalesceImageEditVersions, type SaveImageEditVersionOptions, type SaveImageEditVersionResult, type RevertImageEditOptions, } from './versions.js';
12
+ export { ImageEditVersionManager, type ImageEditVersionManagerOptions, } from './ImageEditVersionManager.js';
13
+ export { exportImageEditDoc, type ImageEditExportFormat, type ImageEditExportOptions, } from './export.js';
14
+ //# sourceMappingURL=index.d.ts.map