@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
@@ -1,4 +1,4 @@
1
- import { M as MarkdownBlockNode, p as MarkdownHeading } from './types-CkNttVSF.js';
1
+ import { M as MarkdownBlockNode, p as MarkdownHeading } from './types-BdZkdJ3z.js';
2
2
 
3
3
  /**
4
4
  * Viewport Configuration
@@ -163,17 +163,28 @@ declare function getSafeTextBounds(orientation: ViewportOrientation): {
163
163
  *
164
164
  * A Theme bundles color palette, typography, visual style, render-style
165
165
  * algorithm, and per-block color schemes into one JSON-serializable object.
166
- * Builders choose a theme from the built-in library or create a custom one
167
- * via `createTheme(base, overrides)`.
166
+ *
167
+ * Built-in themes and customizer-authored themes share this exact schema.
168
+ * Customizer-authored themes additionally specify `seedColors` so the few
169
+ * fields the user picked can be re-edited later; built-ins typically omit
170
+ * `seedColors` and ship with explicit `colors` already filled in.
168
171
  *
169
172
  * Design principles:
170
- * - Fully JSON-serializable (no functions) storable in config / APIs.
171
- * - Doc carries an optional `themeId` pointer; resolution happens at render time.
172
- * - `createTheme` deep-merges a base theme with partial overrides.
173
+ * - Fully JSON-serializable. No functions; no raw CSS font strings.
174
+ * - Font families are structured `FontFamily` references resolved by
175
+ * `resolveFontFamily()` at render time.
176
+ * - Doc carries an optional `themeId`; resolution happens at render time
177
+ * via `resolveTheme(id)`.
178
+ * - `createTheme` deep-merges a base theme with partial overrides;
179
+ * `compileTheme` fills in defaults and derives missing color slots from
180
+ * `seedColors`; both produce a complete `Theme`.
173
181
  */
174
182
 
183
+ /** Current Theme schema version. Bump on breaking changes; loader migrates. */
184
+ declare const THEME_SCHEMA_VERSION: "1";
185
+ type ThemeSchemaVersion = typeof THEME_SCHEMA_VERSION;
175
186
  /**
176
- * Core color palette for a theme. Every color is a CSS color string.
187
+ * Core color palette for a theme. Every color is a `#rrggbb` hex string.
177
188
  */
178
189
  interface ThemeColorPalette {
179
190
  /** Primary accent color */
@@ -205,16 +216,44 @@ interface ThemeColorScheme {
205
216
  /** Accent / secondary tint */
206
217
  accent: string;
207
218
  }
219
+ /**
220
+ * Optional authoring metadata. When present and `colors` is partial,
221
+ * `compileTheme` derives missing color slots from these seeds via OKLCh
222
+ * lightening / darkening. Round-trips a customizer-authored theme back
223
+ * into editable form.
224
+ */
225
+ interface ThemeSeedColors {
226
+ primary: string;
227
+ secondary?: string;
228
+ accent?: string;
229
+ background?: string;
230
+ text?: string;
231
+ }
232
+ /** Categorical bucket for a font family — drives default fallback. */
233
+ type FontFamilyKind = 'sans' | 'serif' | 'mono' | 'display';
234
+ /**
235
+ * Structured reference to a font family. Either a curated stack id (looked
236
+ * up in `AVAILABLE_FONT_STACKS`) or a custom user-supplied name with a
237
+ * structured fallback bucket. Themes never carry raw CSS family strings.
238
+ */
239
+ type FontFamily = {
240
+ stackId: string;
241
+ } | {
242
+ custom: {
243
+ name: string;
244
+ fallback: 'serif' | 'sans-serif' | 'monospace' | 'system-ui';
245
+ };
246
+ };
208
247
  /**
209
248
  * Typography settings for a theme.
210
249
  */
211
250
  interface ThemeTypography {
212
251
  /** Font family for body / description text */
213
- bodyFontFamily: string;
252
+ bodyFont: FontFamily;
214
253
  /** Font family for titles and headings */
215
- titleFontFamily: string;
254
+ titleFont: FontFamily;
216
255
  /** Font family for code / monospaced text (optional) */
217
- monoFontFamily?: string;
256
+ monoFont?: FontFamily;
218
257
  /** Multiplier applied to LayoutHints.titleScale (default 1.0) */
219
258
  titleScale?: number;
220
259
  /** Multiplier applied to LayoutHints.bodyScale (default 1.0) */
@@ -264,24 +303,26 @@ interface RenderStyle {
264
303
  /**
265
304
  * Per-template behavioral hints. Keys are template names, values are
266
305
  * string/number/boolean maps that templates can read to vary their output.
267
- *
268
- * @example
269
- * ```
270
- * { statHighlight: { entrance: 'dramatic' }, titleBlock: { showAccentLine: false } }
271
- * ```
306
+ * Templates that consume hints publish a `hintSchema` export documenting
307
+ * the keys they recognise.
272
308
  */
273
309
  templateHints?: Record<string, Record<string, string | number | boolean>>;
274
310
  }
275
311
  /**
276
- * A complete, JSON-serializable theme definition.
312
+ * A complete, JSON-serializable theme definition. Built-in and customizer-
313
+ * authored themes share this exact shape.
277
314
  */
278
315
  interface Theme {
316
+ /** Schema version. Always '1' for now. */
317
+ schemaVersion: ThemeSchemaVersion;
279
318
  /** Unique identifier (e.g. "documentary") */
280
319
  id: string;
281
320
  /** Human-readable display name */
282
321
  name: string;
283
322
  /** Short description for theme pickers */
284
323
  description?: string;
324
+ /** Optional authoring seeds (customizer fills these; built-ins typically omit) */
325
+ seedColors?: ThemeSeedColors;
285
326
  /** Color palette */
286
327
  colors: ThemeColorPalette;
287
328
  /** Typography settings */
@@ -308,14 +349,6 @@ type DeepPartial<T> = {
308
349
  * Create a new theme by deep-merging overrides onto a base theme.
309
350
  * The returned theme gets its own `id` if one is provided in overrides,
310
351
  * otherwise keeps the base theme's `id` suffixed with "-custom".
311
- *
312
- * @example
313
- * ```ts
314
- * const myTheme = createTheme(THEMES.documentary, {
315
- * colors: { primary: '#ff0000' },
316
- * typography: { bodyFontFamily: '"Inter", sans-serif' },
317
- * });
318
- * ```
319
352
  */
320
353
  declare function createTheme(base: Theme, overrides: DeepPartial<Theme>): Theme;
321
354
  /**
@@ -323,11 +356,6 @@ declare function createTheme(base: Theme, overrides: DeepPartial<Theme>): Theme;
323
356
  * identity of a Theme. A Theme chooses voice (serif vs sans, muted vs
324
357
  * bold, documentary vs magazine); a SurfaceScheme chooses what the paper
325
358
  * looks like. Any theme can render on either surface.
326
- *
327
- * When a SurfaceScheme is applied to a Theme (via `applySurface`), these
328
- * fields override the corresponding entries in `ThemeColorPalette` —
329
- * everything else (primary, highlight, warning, etc.) stays as the theme
330
- * defined it.
331
359
  */
332
360
  interface SurfaceScheme {
333
361
  /** Identifier — 'light', 'dark', or a custom id. */
@@ -344,28 +372,39 @@ declare const DARK_SURFACE: SurfaceScheme;
344
372
  /**
345
373
  * Overlay a SurfaceScheme's surface colors onto a Theme's palette,
346
374
  * leaving everything else (primary, highlight, warning, typography,
347
- * style, renderStyle, colorSchemes) untouched. Returns a new Theme;
348
- * callers that want to preserve the original's id should set it
349
- * explicitly in the overrides.
375
+ * style, renderStyle, colorSchemes) untouched.
350
376
  */
351
377
  declare function applySurface(theme: Theme, surface: SurfaceScheme): Theme;
378
+ /**
379
+ * Register a Theme so it can be looked up by id via `resolveTheme(id)`.
380
+ * Lets `Doc.themeId` round-trip through Doc serialization for custom themes.
381
+ *
382
+ * Registered themes take precedence over built-ins with the same id.
383
+ */
384
+ declare function registerTheme(theme: Theme): void;
385
+ /** Remove a previously registered theme. */
386
+ declare function unregisterTheme(id: string): void;
387
+ /** Snapshot of all currently registered (non-built-in) themes. */
388
+ declare function getRegisteredThemes(): Theme[];
389
+ /** @internal — used by themeLibrary's `resolveTheme` to check the registry first. */
390
+ declare function lookupRegisteredTheme(id: string | undefined): Theme | undefined;
352
391
 
353
392
  /**
354
393
  * Block Templates Schema
355
394
  *
356
395
  * Defines a template system for AI-generated doc blocks. Instead of
357
396
  * specifying low-level layers, positions, and animations, AI can use
358
- * high-level templates like "titleBlock" or "statHighlight" with simple
397
+ * high-level templates like "title" or "statHighlight" with simple
359
398
  * content parameters.
360
399
  *
361
400
  * Templates are expanded into full Block structures at render time,
362
401
  * ensuring consistent styling and reducing AI generation errors.
363
402
  *
364
403
  * Template Types:
365
- * - titleBlock: Doc intro with title + subtitle
404
+ * - title: Doc intro with title + subtitle
366
405
  * - sectionHeader: Colored section divider
367
406
  * - statHighlight: Big number/stat with description
368
- * - quoteBlock: Large centered quote
407
+ * - quote: Large centered quote
369
408
  * - factCard: Key fact with explanation
370
409
  * - twoColumn: Side-by-side comparison
371
410
  * - dateEvent: Timeline-style date + description
@@ -443,7 +482,7 @@ interface BaseTemplateBlock {
443
482
  * Title block - doc intro with large title and subtitle.
444
483
  */
445
484
  interface TitleBlockInput extends BaseTemplateBlock {
446
- template: 'titleBlock';
485
+ template: 'title';
447
486
  /** Main title text */
448
487
  title: string;
449
488
  /** Subtitle or tagline (supports \n for line breaks) */
@@ -488,7 +527,7 @@ interface StatHighlightInput extends BaseTemplateBlock {
488
527
  * Quote block - large centered quote text.
489
528
  */
490
529
  interface QuoteBlockInput extends BaseTemplateBlock {
491
- template: 'quoteBlock';
530
+ template: 'quote';
492
531
  /** The quote text (supports \n for line breaks) */
493
532
  quote: string;
494
533
  /** Attribution (author, source) */
@@ -571,6 +610,44 @@ interface ImageWithCaptionInput extends BaseTemplateBlock {
571
610
  /** License identifier (e.g., 'CC BY-SA 4.0') */
572
611
  imageLicense?: string;
573
612
  }
613
+ /**
614
+ * Shared fields for left/right feature blocks. A "feature" pairs an
615
+ * image on one side of the block with a title and body paragraph on
616
+ * the other — a common editorial layout for product highlights,
617
+ * profile callouts, or section intros.
618
+ */
619
+ interface FeatureInputBase extends BaseTemplateBlock {
620
+ /** Path to the feature image. */
621
+ imageSrc: string;
622
+ /** Alt text for accessibility. */
623
+ imageAlt?: string;
624
+ /**
625
+ * Explicit display width of the image, in pixels (typically pulled
626
+ * from a `<img width>` attribute when the WYSIWYG editor resized it).
627
+ * When set, the renderer treats the image as a sized asset and
628
+ * centers it inside its half with padding instead of stretching it
629
+ * to fill the cell.
630
+ */
631
+ imageWidth?: number;
632
+ /** Explicit display height of the image, in pixels. */
633
+ imageHeight?: number;
634
+ /** Heading / title text shown next to the image. */
635
+ title?: string;
636
+ /** Body text shown below the title. */
637
+ body?: string;
638
+ }
639
+ /**
640
+ * Left feature — image on the left, title + body stacked on the right.
641
+ */
642
+ interface LeftFeatureInput extends FeatureInputBase {
643
+ template: 'leftFeature';
644
+ }
645
+ /**
646
+ * Right feature — image on the right, title + body stacked on the left.
647
+ */
648
+ interface RightFeatureInput extends FeatureInputBase {
649
+ template: 'rightFeature';
650
+ }
574
651
  /**
575
652
  * Map block - geographic map showing article location.
576
653
  *
@@ -579,7 +656,7 @@ interface ImageWithCaptionInput extends BaseTemplateBlock {
579
656
  * See docs/MAP_TILES.md for available tile styles and attribution.
580
657
  */
581
658
  interface MapBlockInput extends BaseTemplateBlock {
582
- template: 'mapBlock';
659
+ template: 'map';
583
660
  /** Map center coordinates */
584
661
  center: {
585
662
  lat: number;
@@ -616,7 +693,7 @@ interface FullBleedQuoteInput extends BaseTemplateBlock {
616
693
  * Good for enumerations like "things to see" or "key features".
617
694
  */
618
695
  interface ListBlockInput extends BaseTemplateBlock {
619
- template: 'listBlock';
696
+ template: 'list';
620
697
  /** List items (3-5 recommended) */
621
698
  items: string[];
622
699
  /** Optional header above the list */
@@ -769,7 +846,7 @@ interface DataTableInput extends BaseTemplateBlock {
769
846
  /**
770
847
  * Union of all template block types.
771
848
  */
772
- type TemplateBlock = TitleBlockInput | SectionHeaderInput | StatHighlightInput | QuoteBlockInput | FactCardInput | TwoColumnInput | DateEventInput | ImageWithCaptionInput | MapBlockInput | FullBleedQuoteInput | ListBlockInput | PhotoGridInput | DefinitionCardInput | ComparisonBarInput | PullQuoteInput | VideoWithCaptionInput | VideoPullQuoteInput | DataTableInput;
849
+ type TemplateBlock = TitleBlockInput | SectionHeaderInput | StatHighlightInput | QuoteBlockInput | FactCardInput | TwoColumnInput | DateEventInput | ImageWithCaptionInput | LeftFeatureInput | RightFeatureInput | MapBlockInput | FullBleedQuoteInput | ListBlockInput | PhotoGridInput | DefinitionCardInput | ComparisonBarInput | PullQuoteInput | VideoWithCaptionInput | VideoPullQuoteInput | DataTableInput;
773
850
  /**
774
851
  * A block can be either a raw Block or a TemplateBlock.
775
852
  */
@@ -1448,4 +1525,4 @@ declare function getCaptionAtTime(captions: CaptionTrack | undefined, time: numb
1448
1525
  */
1449
1526
  declare function validateDoc(script: Doc): string[];
1450
1527
 
1451
- export { type StartBlockConfig as $, type AccentImage as A, type Block as B, type CaptionPhrase as C, DARK_SURFACE as D, type MapLayer as E, type FactCardInput as F, type GradientBackgroundConfig as G, type MapMarker as H, type ImageBackgroundConfig as I, type MapTileStyle as J, type PersistentLayer as K, LIGHT_SURFACE as L, type MapBlockInput as M, type PersistentLayerConfig as N, type PersistentLayerTemplate as O, type PatternBackgroundConfig as P, type PersistentLayerTemplateConfig as Q, type PersistentLayerTemplateType as R, type PhotoGridInput as S, type Position as T, type ProgressIndicatorConfig as U, type PullQuoteInput as V, type QuoteBlockInput as W, type RenderStyle as X, type SectionHeaderInput as Y, type ShapeLayer as Z, type SolidBackgroundConfig as _, type AccentPosition as a, type StatHighlightInput as a0, type SurfaceScheme as a1, type TableLayer as a2, type TableLayerStyle as a3, type TemplateBlock as a4, type TemplateContext as a5, type TemplateFunction as a6, type TemplateRegistry as a7, type TextLayer as a8, type TextStyle as a9, getSafeTextBounds as aA, getSegmentAtTime as aB, getTwoColumnPositions as aC, getViewport as aD, getViewportOrientation as aE, isPersistentLayerTemplate as aF, isTemplateBlock as aG, scaledFontSize$1 as aH, scaledFontSize as aI, validateDoc as aJ, type Theme as aa, type ThemeColorPalette as ab, type ThemeColorScheme as ac, type ThemeStyle as ad, type ThemeTypography as ae, type TitleBlockInput as af, type TitleCaptionConfig as ag, type Transition as ah, type TransitionType as ai, type TwoColumnInput as aj, VIEWPORT_PRESETS as ak, type VideoLayer as al, type VideoPullQuoteInput as am, type VideoWithCaptionInput as an, type ViewportConfig as ao, type ViewportOrientation as ap, type ViewportPreset as aq, applySurface as ar, calculateDuration as as, calculateFontScale as at, createTemplateContext as au, createTheme as av, getAspectRatioString as aw, getBlockAtTime as ax, getCaptionAtTime as ay, getLayoutHints as az, type Animation as b, type AnimationType as c, type AudioBookmark as d, type AudioSegment as e, type AudioTimingData as f, type AudioTrack as g, type CaptionTrack as h, type CaptionWord as i, type ColorScheme as j, type ComparisonBarInput as k, type CornerBrandingConfig as l, DEFAULT_DOC_FONT as m, DEFAULT_TITLE_FONT as n, type DataTableInput as o, type DateEventInput as p, type DeepPartial as q, type DefinitionCardInput as r, type Doc as s, type DocBlock as t, type FullBleedQuoteInput as u, type ImageLayer as v, type ImageWithCaptionInput as w, type Layer as x, type LayoutHints as y, type ListBlockInput as z };
1528
+ export { type RightFeatureInput as $, type AccentImage as A, type Block as B, type CaptionPhrase as C, DARK_SURFACE as D, type LayoutHints as E, type FactCardInput as F, type GradientBackgroundConfig as G, type LeftFeatureInput as H, type ImageBackgroundConfig as I, type ListBlockInput as J, type MapLayer as K, LIGHT_SURFACE as L, type MapBlockInput as M, type MapMarker as N, type MapTileStyle as O, type PatternBackgroundConfig as P, type PersistentLayer as Q, type PersistentLayerConfig as R, type PersistentLayerTemplate as S, type PersistentLayerTemplateConfig as T, type PersistentLayerTemplateType as U, type PhotoGridInput as V, type Position as W, type ProgressIndicatorConfig as X, type PullQuoteInput as Y, type QuoteBlockInput as Z, type RenderStyle as _, type AccentPosition as a, type SectionHeaderInput as a0, type ShapeLayer as a1, type SolidBackgroundConfig as a2, type StartBlockConfig as a3, type StatHighlightInput as a4, type SurfaceScheme as a5, THEME_SCHEMA_VERSION as a6, type TableLayer as a7, type TableLayerStyle as a8, type TemplateBlock as a9, calculateFontScale as aA, createTemplateContext as aB, createTheme as aC, getAspectRatioString as aD, getBlockAtTime as aE, getCaptionAtTime as aF, getLayoutHints as aG, getRegisteredThemes as aH, getSafeTextBounds as aI, getSegmentAtTime as aJ, getTwoColumnPositions as aK, getViewport as aL, getViewportOrientation as aM, isPersistentLayerTemplate as aN, isTemplateBlock as aO, scaledFontSize$1 as aP, lookupRegisteredTheme as aQ, registerTheme as aR, scaledFontSize as aS, unregisterTheme as aT, validateDoc as aU, type TemplateContext as aa, type TemplateFunction as ab, type TemplateRegistry as ac, type TextLayer as ad, type TextStyle as ae, type Theme as af, type ThemeColorPalette as ag, type ThemeColorScheme as ah, type ThemeSchemaVersion as ai, type ThemeSeedColors as aj, type ThemeStyle as ak, type ThemeTypography as al, type TitleBlockInput as am, type TitleCaptionConfig as an, type Transition as ao, type TransitionType as ap, type TwoColumnInput as aq, VIEWPORT_PRESETS as ar, type VideoLayer as as, type VideoPullQuoteInput as at, type VideoWithCaptionInput as au, type ViewportConfig as av, type ViewportOrientation as aw, type ViewportPreset as ax, applySurface as ay, calculateDuration as az, type Animation as b, type AnimationType as c, type AudioBookmark as d, type AudioSegment as e, type AudioTimingData as f, type AudioTrack as g, type CaptionTrack as h, type CaptionWord as i, type ColorScheme as j, type ComparisonBarInput as k, type CornerBrandingConfig as l, DEFAULT_DOC_FONT as m, DEFAULT_TITLE_FONT as n, type DataTableInput as o, type DateEventInput as p, type DeepPartial as q, type DefinitionCardInput as r, type Doc as s, type DocBlock as t, type FontFamily as u, type FontFamilyKind as v, type FullBleedQuoteInput as w, type ImageLayer as x, type ImageWithCaptionInput as y, type Layer as z };
@@ -0,0 +1,84 @@
1
+ import { x as ImageLayer, ad as TextLayer, a1 as ShapeLayer } from './Doc-BeSeH2iX.js';
2
+
3
+ /**
4
+ * ImageEditDoc — JSON document describing a layered, editable image.
5
+ *
6
+ * This is the persistent state of the `<ImageEditor>` component. It lives
7
+ * inside a `<imagebasename>_files/` sidecar folder (exposed as a
8
+ * {@link ContentContainer}) at `state.json`, alongside referenced asset
9
+ * bytes in `assets/` and version snapshots in `.versions/`.
10
+ *
11
+ * Layers compose the existing core {@link Layer} types (image / text /
12
+ * shape) so renderers can share infrastructure with the doc system.
13
+ * Editor-specific metadata (name, visibility, lock, opacity, blendMode)
14
+ * lives in {@link EditorLayerMeta} and is merged onto each layer. The
15
+ * {@link Layer.animation} field is permitted but ignored by the image
16
+ * editor — animations are a slideshow concept.
17
+ *
18
+ * All asset paths in layers (e.g. `ImageLayer.content.src`) are
19
+ * relative to the sidecar root, keeping the document portable.
20
+ */
21
+
22
+ /**
23
+ * Per-layer editor metadata. Merged into each layer so the persisted
24
+ * shape is a single object. All fields optional; sensible defaults
25
+ * apply when absent (visible: true, locked: false, opacity: 1).
26
+ */
27
+ interface EditorLayerMeta {
28
+ /** Human-readable name shown in the layers panel. */
29
+ name?: string;
30
+ /** When false, the layer is hidden from rendering. Default true. */
31
+ visible?: boolean;
32
+ /** When true, the layer cannot be selected/edited. Default false. */
33
+ locked?: boolean;
34
+ /** 0..1 multiplier on the layer's alpha. Default 1. */
35
+ opacity?: number;
36
+ /**
37
+ * Canvas blend mode (matches the CSS / Canvas2D vocabulary).
38
+ * Default 'source-over' (normal compositing).
39
+ */
40
+ blendMode?: GlobalCompositeOperation;
41
+ }
42
+ /** A layer in an {@link ImageEditDoc}. */
43
+ type ImageEditLayer = (ImageLayer | TextLayer | ShapeLayer) & EditorLayerMeta;
44
+ /** The layer kinds the image editor supports. */
45
+ type ImageEditLayerKind = ImageEditLayer['type'];
46
+ /** Canvas dimensions and background. */
47
+ interface ImageEditCanvas {
48
+ /** Canvas width in pixels. */
49
+ width: number;
50
+ /** Canvas height in pixels. */
51
+ height: number;
52
+ /**
53
+ * Background fill (CSS color, or `'transparent'` for an alpha canvas).
54
+ * Default: `'transparent'`.
55
+ */
56
+ background?: string;
57
+ }
58
+ /** Optional document metadata. */
59
+ interface ImageEditMeta {
60
+ /** Path to the original source image (sidecar-relative). Set when the doc is seeded from an existing image. */
61
+ sourcePath?: string;
62
+ /** ISO timestamp set on first save. */
63
+ createdAt?: string;
64
+ /** ISO timestamp updated on every save. */
65
+ updatedAt?: string;
66
+ }
67
+ /**
68
+ * The persisted image-editor document.
69
+ *
70
+ * Layers are composited back-to-front: `layers[0]` is the bottom of the stack
71
+ * (typically the base raster), `layers[layers.length - 1]` is the top.
72
+ */
73
+ interface ImageEditDoc {
74
+ /** Schema version. Bumped on breaking changes. */
75
+ version: 1;
76
+ /** Canvas configuration. */
77
+ canvas: ImageEditCanvas;
78
+ /** Layers, back-to-front. */
79
+ layers: ImageEditLayer[];
80
+ /** Optional metadata. */
81
+ meta?: ImageEditMeta;
82
+ }
83
+
84
+ export type { EditorLayerMeta as E, ImageEditCanvas as I, ImageEditDoc as a, ImageEditLayer as b, ImageEditLayerKind as c, ImageEditMeta as d };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=colorUtils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colorUtils.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/colorUtils.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,94 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { isHex, oklchLighten, oklchDarken, oklchSetChroma, contrastRatio, pickContrastingText, deriveScale, relativeLuminance, } from '../schemas/colorUtils.js';
3
+ describe('isHex', () => {
4
+ it('accepts #rgb and #rrggbb', () => {
5
+ expect(isHex('#fff')).toBe(true);
6
+ expect(isHex('#123abc')).toBe(true);
7
+ expect(isHex('#FF0080')).toBe(true);
8
+ });
9
+ it('rejects malformed strings', () => {
10
+ expect(isHex('fff')).toBe(false);
11
+ expect(isHex('#1234')).toBe(false);
12
+ expect(isHex('#xyz')).toBe(false);
13
+ expect(isHex('rgb(0,0,0)')).toBe(false);
14
+ });
15
+ });
16
+ describe('oklchLighten / oklchDarken', () => {
17
+ it('lighten produces a lighter color (higher luminance)', () => {
18
+ const dark = '#101010';
19
+ const lighter = oklchLighten(dark, 0.2);
20
+ expect(relativeLuminance(lighter)).toBeGreaterThan(relativeLuminance(dark));
21
+ });
22
+ it('darken produces a darker color (lower luminance)', () => {
23
+ const light = '#e0e0e0';
24
+ const darker = oklchDarken(light, 0.2);
25
+ expect(relativeLuminance(darker)).toBeLessThan(relativeLuminance(light));
26
+ });
27
+ it('round-trips approximately stable for moderate adjustments', () => {
28
+ const seed = '#3182ce';
29
+ const round = oklchDarken(oklchLighten(seed, 0.1), 0.1);
30
+ // sRGB gamut clamping prevents perfect round-trip; expect within a small epsilon.
31
+ expect(round).toMatch(/^#[0-9a-f]{6}$/);
32
+ const lumDiff = Math.abs(relativeLuminance(seed) - relativeLuminance(round));
33
+ expect(lumDiff).toBeLessThan(0.05);
34
+ });
35
+ it('returns a hex string', () => {
36
+ expect(oklchLighten('#3182ce', 0.1)).toMatch(/^#[0-9a-f]{6}$/);
37
+ expect(oklchDarken('#3182ce', 0.1)).toMatch(/^#[0-9a-f]{6}$/);
38
+ });
39
+ it('falls back to input on parse failure', () => {
40
+ expect(oklchLighten('not-a-color', 0.1)).toBe('not-a-color');
41
+ });
42
+ });
43
+ describe('oklchSetChroma', () => {
44
+ it('reducing chroma toward 0 desaturates a color', () => {
45
+ const vivid = '#ff3366';
46
+ const muted = oklchSetChroma(vivid, 0.1);
47
+ // Muted version's R/G/B channels should be much closer to each other than vivid.
48
+ const parse = (h) => [
49
+ parseInt(h.slice(1, 3), 16),
50
+ parseInt(h.slice(3, 5), 16),
51
+ parseInt(h.slice(5, 7), 16),
52
+ ];
53
+ const [vr, vg, vb] = parse(vivid);
54
+ const [mr, mg, mb] = parse(muted);
55
+ const vSpread = Math.max(vr, vg, vb) - Math.min(vr, vg, vb);
56
+ const mSpread = Math.max(mr, mg, mb) - Math.min(mr, mg, mb);
57
+ expect(mSpread).toBeLessThan(vSpread);
58
+ });
59
+ });
60
+ describe('contrastRatio', () => {
61
+ it('white-on-black is the maximum (≈21)', () => {
62
+ expect(contrastRatio('#ffffff', '#000000')).toBeCloseTo(21, 0);
63
+ });
64
+ it('same-color is 1', () => {
65
+ expect(contrastRatio('#aabbcc', '#aabbcc')).toBeCloseTo(1, 5);
66
+ });
67
+ it('is symmetric', () => {
68
+ expect(contrastRatio('#222', '#ddd')).toBeCloseTo(contrastRatio('#ddd', '#222'), 5);
69
+ });
70
+ });
71
+ describe('pickContrastingText', () => {
72
+ it('returns dark text for light backgrounds', () => {
73
+ expect(pickContrastingText('#ffffff')).toBe('#1a202c');
74
+ expect(pickContrastingText('#f7fafc')).toBe('#1a202c');
75
+ });
76
+ it('returns light text for dark backgrounds', () => {
77
+ expect(pickContrastingText('#000000')).toBe('#f7fafc');
78
+ expect(pickContrastingText('#1a202c')).toBe('#f7fafc');
79
+ });
80
+ it('respects custom light/dark options', () => {
81
+ expect(pickContrastingText('#000000', '#fefefe', '#020202')).toBe('#fefefe');
82
+ });
83
+ });
84
+ describe('deriveScale', () => {
85
+ it('produces 5 stops with base in the middle', () => {
86
+ const scale = deriveScale('#3182ce', 0.15);
87
+ expect(scale.base).toBe('#3182ce');
88
+ expect(relativeLuminance(scale.lighter2)).toBeGreaterThan(relativeLuminance(scale.lighter1));
89
+ expect(relativeLuminance(scale.lighter1)).toBeGreaterThan(relativeLuminance(scale.base));
90
+ expect(relativeLuminance(scale.base)).toBeGreaterThan(relativeLuminance(scale.darker1));
91
+ expect(relativeLuminance(scale.darker1)).toBeGreaterThan(relativeLuminance(scale.darker2));
92
+ });
93
+ });
94
+ //# sourceMappingURL=colorUtils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colorUtils.test.js","sourceRoot":"","sources":["../../src/__tests__/colorUtils.test.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ import { VIEWPORT_PRESETS } from '../schemas/Viewport.js';
7
7
  // ---------------------------------------------------------------------------
8
8
  function makeTemplateBlock(overrides = {}) {
9
9
  return {
10
- template: 'titleBlock',
10
+ template: 'title',
11
11
  id: 'test-title-1',
12
12
  duration: 5,
13
13
  audioSegment: 0,
@@ -35,7 +35,7 @@ const defaultContext = {
35
35
  // ---------------------------------------------------------------------------
36
36
  describe('getLayers', () => {
37
37
  it('generates layers for a known template block', () => {
38
- const block = makeTemplateBlock({ template: 'titleBlock', title: 'Test Title' });
38
+ const block = makeTemplateBlock({ template: 'title', title: 'Test Title' });
39
39
  const layers = getLayers(block, defaultContext);
40
40
  expect(Array.isArray(layers)).toBe(true);
41
41
  expect(layers.length).toBeGreaterThan(0);
@@ -68,6 +68,30 @@ describe('getLayers', () => {
68
68
  const layers = getLayers(block, defaultContext);
69
69
  expect(layers).toEqual(existingLayers);
70
70
  });
71
+ it('resolves legacy template aliases through TEMPLATE_ALIASES', () => {
72
+ // Regression: `getLayers` previously did `block.template in templateRegistry`
73
+ // without alias resolution, so docs authored with the legacy long ids
74
+ // (`titleBlock`, `quoteBlock`, `mapBlock`, `listBlock`) rendered as
75
+ // empty SVG cards in the linear/document view — `hasTemplate()` accepts
76
+ // the alias, so `isAnnotatedBlock` returns true and the card wrapper
77
+ // renders, but the registry lookup below would miss the alias and the
78
+ // layer array came back empty.
79
+ const aliasedToCanonical = [
80
+ ['titleBlock', 'title'],
81
+ ['quoteBlock', 'quote'],
82
+ ['listBlock', 'list'],
83
+ ];
84
+ for (const [alias] of aliasedToCanonical) {
85
+ const block = makeTemplateBlock({
86
+ template: alias,
87
+ title: 'Aliased',
88
+ items: ['a', 'b', 'c'],
89
+ quote: 'q',
90
+ });
91
+ const layers = getLayers(block, defaultContext);
92
+ expect(layers.length).toBeGreaterThan(0);
93
+ }
94
+ });
71
95
  it('returns empty array for unknown template', () => {
72
96
  const block = {
73
97
  template: 'totally_nonexistent',
@@ -84,7 +108,7 @@ describe('getLayers', () => {
84
108
  expect(layers).toEqual([]);
85
109
  });
86
110
  it('uses default context values when context is omitted', () => {
87
- const block = makeTemplateBlock({ template: 'titleBlock', title: 'Defaults' });
111
+ const block = makeTemplateBlock({ template: 'title', title: 'Defaults' });
88
112
  const layers = getLayers(block);
89
113
  expect(Array.isArray(layers)).toBe(true);
90
114
  expect(layers.length).toBeGreaterThan(0);
@@ -120,7 +144,7 @@ describe('getLayers', () => {
120
144
  topLayers: [topLayer],
121
145
  };
122
146
  it('injects persistent bottom and top layers around block layers', () => {
123
- const block = makeTemplateBlock({ template: 'titleBlock', title: 'With Persistent' });
147
+ const block = makeTemplateBlock({ template: 'title', title: 'With Persistent' });
124
148
  const layers = getLayers(block, { ...defaultContext, persistentLayers: persistentConfig });
125
149
  // First layer should be the bottom persistent layer
126
150
  expect(layers[0]).toEqual(bottomLayer);
@@ -131,7 +155,7 @@ describe('getLayers', () => {
131
155
  });
132
156
  it('respects useBottomLayer: false opt-out', () => {
133
157
  const block = makeTemplateBlock({
134
- template: 'titleBlock',
158
+ template: 'title',
135
159
  title: 'No Bottom',
136
160
  useBottomLayer: false,
137
161
  });
@@ -143,7 +167,7 @@ describe('getLayers', () => {
143
167
  });
144
168
  it('respects useTopLayer: false opt-out', () => {
145
169
  const block = makeTemplateBlock({
146
- template: 'titleBlock',
170
+ template: 'title',
147
171
  title: 'No Top',
148
172
  useTopLayer: false,
149
173
  });
@@ -154,7 +178,7 @@ describe('getLayers', () => {
154
178
  expect(layers[layers.length - 1]).not.toEqual(topLayer);
155
179
  });
156
180
  it('skips injection when no persistent layers are configured', () => {
157
- const block = makeTemplateBlock({ template: 'titleBlock', title: 'No Persistent' });
181
+ const block = makeTemplateBlock({ template: 'title', title: 'No Persistent' });
158
182
  const withoutPersistent = getLayers(block, defaultContext);
159
183
  const withEmptyPersistent = getLayers(block, {
160
184
  ...defaultContext,
@@ -1 +1 @@
1
- {"version":3,"file":"getLayers.test.js","sourceRoot":"","sources":["../../src/__tests__/getLayers.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,SAAS,EAAiB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,iBAAiB,CAAC,YAAoC,EAAE;IAC/D,OAAO;QACL,QAAQ,EAAE,YAAY;QACtB,EAAE,EAAE,cAAc;QAClB,QAAQ,EAAE,CAAC;QACX,YAAY,EAAE,CAAC;QACf,KAAK,EAAE,aAAa;QACpB,GAAG,SAAS;KACI,CAAC;AACrB,CAAC;AAED,SAAS,YAAY,CAAC,MAAe;IACnC,OAAO;QACL,EAAE,EAAE,aAAa;QACjB,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,CAAC;QACZ,YAAY,EAAE,CAAC;QACf,MAAM;KACP,CAAC;AACJ,CAAC;AAED,MAAM,cAAc,GAAkB;IACpC,KAAK,EAAE,aAAa;IACpB,QAAQ,EAAE,gBAAgB,CAAC,SAAS;IACpC,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,CAAC;CACf,CAAC;AAEF,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QACjF,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAEhD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAEzC,kEAAkE;QAClE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,CAAE,SAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,KAAK,GAAG,iBAAiB,CAAC;YAC9B,QAAQ,EAAE,eAAe;YACzB,IAAI,EAAE,KAAK;YACX,WAAW,EAAE,UAAU;SACxB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,cAAc,GAAY;YAC9B;gBACE,IAAI,EAAE,OAAO;gBACb,EAAE,EAAE,YAAY;gBAChB,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC3C,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;aACpC;SAChB,CAAC;QACF,MAAM,KAAK,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,KAAK,GAAG;YACZ,QAAQ,EAAE,qBAAqB;YAC/B,EAAE,EAAE,WAAW;YACf,QAAQ,EAAE,CAAC;YACX,YAAY,EAAE,CAAC;SACY,CAAC;QAC9B,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,KAAK,GAAU,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QACnF,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAEhC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,qEAAqE;QACrE,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAE3E,wEAAwE;QACxE,2CAA2C;QAC3C,MAAM,KAAK,GAAG,iBAAiB,CAAC;YAC9B,QAAQ,EAAE,eAAe;YACzB,0BAA0B;SAC3B,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAEhD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,UAAU,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,MAAM,WAAW,GAAU;YACzB,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,QAAQ;YACZ,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;YACxC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;SACpC,CAAC;QAEhB,MAAM,QAAQ,GAAU;YACtB,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;YACxC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;SACpC,CAAC;QAEhB,MAAM,gBAAgB,GAA0B;YAC9C,YAAY,EAAE,CAAC,WAAW,CAAC;YAC3B,SAAS,EAAE,CAAC,QAAQ,CAAC;SACtB,CAAC;QAEF,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACtE,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;YACtF,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,GAAG,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAE3F,oDAAoD;YACpD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACvC,gDAAgD;YAChD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpD,6CAA6C;YAC7C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,KAAK,GAAG,iBAAiB,CAAC;gBAC9B,QAAQ,EAAE,YAAY;gBACtB,KAAK,EAAE,WAAW;gBAClB,cAAc,EAAE,KAAK;aACtB,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,GAAG,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAE3F,oDAAoD;YACpD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC3C,iDAAiD;YACjD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,KAAK,GAAG,iBAAiB,CAAC;gBAC9B,QAAQ,EAAE,YAAY;gBACtB,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,KAAK;aACnB,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,GAAG,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAE3F,gDAAgD;YAChD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACvC,+CAA+C;YAC/C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAClE,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;YACpF,MAAM,iBAAiB,GAAG,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;YAC3D,MAAM,mBAAmB,GAAG,SAAS,CAAC,KAAK,EAAE;gBAC3C,GAAG,cAAc;gBACjB,gBAAgB,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;aACtD,CAAC,CAAC;YAEH,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"getLayers.test.js","sourceRoot":"","sources":["../../src/__tests__/getLayers.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=iconResolve.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iconResolve.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/iconResolve.test.ts"],"names":[],"mappings":""}