@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,20 @@
1
+ /**
2
+ * Pick a `ControlKind` for a schema node. The single dispatcher used by
3
+ * both `<JsonView>` and `<JsonEditor>` so view and edit modes always
4
+ * agree on what each field _is_, even when their UIs differ.
5
+ *
6
+ * Order of precedence:
7
+ * 1. Explicit `squisq.control` hint
8
+ * 2. `format` keyword (color/date/time/datetime/markdown/textarea)
9
+ * 3. Enum cardinality (segmented vs. combobox)
10
+ * 4. Numeric range (slider when both min and max present)
11
+ * 5. String length (multiline when maxLength > 200)
12
+ * 6. Type-default (object/array/boolean/string/number)
13
+ */
14
+ import type { ControlKind, SquisqAnnotatedSchema } from './types.js';
15
+ export declare function chooseControl(schema: SquisqAnnotatedSchema): ControlKind;
16
+ /** Return the first concrete type of a schema, ignoring `null` for nullable shorthand. */
17
+ export declare function primaryType(schema: SquisqAnnotatedSchema): string | undefined;
18
+ /** Inspect `items` to decide whether an array holds objects or primitives. */
19
+ export declare function arrayItemKind(schema: SquisqAnnotatedSchema): 'object' | 'primitive';
20
+ //# sourceMappingURL=chooseControl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chooseControl.d.ts","sourceRoot":"","sources":["../../src/jsonForm/chooseControl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAKrE,wBAAgB,aAAa,CAAC,MAAM,EAAE,qBAAqB,GAAG,WAAW,CA+CxE;AAED,0FAA0F;AAC1F,wBAAgB,WAAW,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,GAAG,SAAS,CAK7E;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,MAAM,EAAE,qBAAqB,GAAG,QAAQ,GAAG,WAAW,CAInF"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Pick a `ControlKind` for a schema node. The single dispatcher used by
3
+ * both `<JsonView>` and `<JsonEditor>` so view and edit modes always
4
+ * agree on what each field _is_, even when their UIs differ.
5
+ *
6
+ * Order of precedence:
7
+ * 1. Explicit `squisq.control` hint
8
+ * 2. `format` keyword (color/date/time/datetime/markdown/textarea)
9
+ * 3. Enum cardinality (segmented vs. combobox)
10
+ * 4. Numeric range (slider when both min and max present)
11
+ * 5. String length (multiline when maxLength > 200)
12
+ * 6. Type-default (object/array/boolean/string/number)
13
+ */
14
+ const ENUM_SEGMENTED_LIMIT = 4;
15
+ const MULTILINE_LENGTH_THRESHOLD = 200;
16
+ export function chooseControl(schema) {
17
+ const hint = schema.squisq?.control;
18
+ if (hint)
19
+ return hint;
20
+ const type = primaryType(schema);
21
+ if (schema.format && type === 'string') {
22
+ switch (schema.format) {
23
+ case 'color':
24
+ return 'color';
25
+ case 'date':
26
+ return 'date';
27
+ case 'time':
28
+ return 'time';
29
+ case 'date-time':
30
+ return 'datetime';
31
+ case 'markdown':
32
+ return 'richtext';
33
+ case 'textarea':
34
+ return 'multiline';
35
+ }
36
+ }
37
+ if (schema.enum && schema.enum.length > 0) {
38
+ return schema.enum.length <= ENUM_SEGMENTED_LIMIT ? 'segmented' : 'combobox';
39
+ }
40
+ if (schema.oneOf || schema.anyOf)
41
+ return 'tabs';
42
+ switch (type) {
43
+ case 'array':
44
+ return arrayItemKind(schema) === 'object' ? 'card-stack' : 'chip-bin';
45
+ case 'object':
46
+ return 'group';
47
+ case 'boolean':
48
+ return 'toggle';
49
+ case 'integer':
50
+ case 'number':
51
+ return hasFiniteRange(schema) ? 'slider' : 'stepper';
52
+ case 'string':
53
+ if (typeof schema.maxLength === 'number' && schema.maxLength > MULTILINE_LENGTH_THRESHOLD) {
54
+ return 'multiline';
55
+ }
56
+ return 'text';
57
+ default:
58
+ return 'text';
59
+ }
60
+ }
61
+ /** Return the first concrete type of a schema, ignoring `null` for nullable shorthand. */
62
+ export function primaryType(schema) {
63
+ const t = schema.type;
64
+ if (typeof t === 'string')
65
+ return t;
66
+ if (Array.isArray(t))
67
+ return t.find((x) => x !== 'null');
68
+ return undefined;
69
+ }
70
+ /** Inspect `items` to decide whether an array holds objects or primitives. */
71
+ export function arrayItemKind(schema) {
72
+ const items = Array.isArray(schema.items) ? schema.items[0] : schema.items;
73
+ if (!items)
74
+ return 'primitive';
75
+ return primaryType(items) === 'object' ? 'object' : 'primitive';
76
+ }
77
+ function hasFiniteRange(schema) {
78
+ const min = schema.minimum ?? schema.exclusiveMinimum;
79
+ const max = schema.maximum ?? schema.exclusiveMaximum;
80
+ return typeof min === 'number' && typeof max === 'number';
81
+ }
82
+ //# sourceMappingURL=chooseControl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chooseControl.js","sourceRoot":"","sources":["../../src/jsonForm/chooseControl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Evaluate a `SquisqWhen` rule against the current root data. Pure;
3
+ * renderers call this on every render with fresh data.
4
+ */
5
+ import type { SquisqWhen } from './types.js';
6
+ export declare function evaluateWhen(when: SquisqWhen, rootData: unknown): boolean;
7
+ /**
8
+ * Resolve a `boolean | SquisqWhen` flag (used by `hidden`/`disabled`)
9
+ * to a final boolean. Literal booleans pass through.
10
+ */
11
+ export declare function resolveFlag(flag: boolean | SquisqWhen | undefined, rootData: unknown): boolean;
12
+ //# sourceMappingURL=evaluateWhen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluateWhen.d.ts","sourceRoot":"","sources":["../../src/jsonForm/evaluateWhen.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAsBzE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAI9F"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Evaluate a `SquisqWhen` rule against the current root data. Pure;
3
+ * renderers call this on every render with fresh data.
4
+ */
5
+ import { getByPointer } from './pointer.js';
6
+ export function evaluateWhen(when, rootData) {
7
+ const actual = getByPointer(rootData, when.field);
8
+ if (when.equals !== undefined) {
9
+ return deepEqual(actual, when.equals);
10
+ }
11
+ if (when.oneOf !== undefined) {
12
+ return when.oneOf.some((v) => deepEqual(actual, v));
13
+ }
14
+ if (when.matches !== undefined) {
15
+ if (typeof actual !== 'string')
16
+ return false;
17
+ try {
18
+ return new RegExp(when.matches).test(actual);
19
+ }
20
+ catch {
21
+ return false;
22
+ }
23
+ }
24
+ if (when.truthy !== undefined) {
25
+ return Boolean(actual) === when.truthy;
26
+ }
27
+ // No operator specified — defaults to "field has any defined value".
28
+ return actual !== undefined && actual !== null;
29
+ }
30
+ /**
31
+ * Resolve a `boolean | SquisqWhen` flag (used by `hidden`/`disabled`)
32
+ * to a final boolean. Literal booleans pass through.
33
+ */
34
+ export function resolveFlag(flag, rootData) {
35
+ if (flag === undefined)
36
+ return false;
37
+ if (typeof flag === 'boolean')
38
+ return flag;
39
+ return evaluateWhen(flag, rootData);
40
+ }
41
+ function deepEqual(a, b) {
42
+ if (a === b)
43
+ return true;
44
+ if (a === null || b === null)
45
+ return false;
46
+ if (typeof a !== typeof b)
47
+ return false;
48
+ if (typeof a !== 'object')
49
+ return false;
50
+ if (Array.isArray(a)) {
51
+ if (!Array.isArray(b) || a.length !== b.length)
52
+ return false;
53
+ return a.every((v, i) => deepEqual(v, b[i]));
54
+ }
55
+ if (Array.isArray(b))
56
+ return false;
57
+ const ao = a;
58
+ const bo = b;
59
+ const ak = Object.keys(ao);
60
+ const bk = Object.keys(bo);
61
+ if (ak.length !== bk.length)
62
+ return false;
63
+ return ak.every((k) => deepEqual(ao[k], bo[k]));
64
+ }
65
+ //# sourceMappingURL=evaluateWhen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluateWhen.js","sourceRoot":"","sources":["../../src/jsonForm/evaluateWhen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * `@bendyline/squisq/jsonForm` — headless JSON Form logic.
3
+ *
4
+ * Pure utilities consumed by `<JsonView>` (read-only) in
5
+ * `@bendyline/squisq-react` and `<JsonEditor>` (editable) in
6
+ * `@bendyline/squisq-editor-react`. Zero React deps.
7
+ */
8
+ export type { ControlKind, SquisqHints, SquisqWhen, SquisqAnnotatedSchema, JsonFormValidationError, JsonFormValidator, } from './types.js';
9
+ export { chooseControl, primaryType, arrayItemKind } from './chooseControl.js';
10
+ export { evaluateWhen, resolveFlag } from './evaluateWhen.js';
11
+ export { toPointer, pointerSegments, getByPointer, setByPointer, resolveRef } from './pointer.js';
12
+ export { inferSchema } from './inferSchema.js';
13
+ export type { InferSchemaOptions } from './inferSchema.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/jsonForm/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * `@bendyline/squisq/jsonForm` — headless JSON Form logic.
3
+ *
4
+ * Pure utilities consumed by `<JsonView>` (read-only) in
5
+ * `@bendyline/squisq-react` and `<JsonEditor>` (editable) in
6
+ * `@bendyline/squisq-editor-react`. Zero React deps.
7
+ */
8
+ export { chooseControl, primaryType, arrayItemKind } from './chooseControl.js';
9
+ export { evaluateWhen, resolveFlag } from './evaluateWhen.js';
10
+ export { toPointer, pointerSegments, getByPointer, setByPointer, resolveRef } from './pointer.js';
11
+ export { inferSchema } from './inferSchema.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/jsonForm/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Infer a JSON Schema from an example JSON value. Thin facade over
3
+ * `genson-js` so consumers don't depend on it directly and we can swap
4
+ * the implementation later.
5
+ */
6
+ import type { SquisqAnnotatedSchema } from './types.js';
7
+ export interface InferSchemaOptions {
8
+ /** Additional samples merged into the inferred schema for broader coverage. */
9
+ additionalSamples?: readonly unknown[];
10
+ }
11
+ export declare function inferSchema(sample: unknown, options?: InferSchemaOptions): SquisqAnnotatedSchema;
12
+ //# sourceMappingURL=inferSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inferSchema.d.ts","sourceRoot":"","sources":["../../src/jsonForm/inferSchema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,WAAW,kBAAkB;IACjC,+EAA+E;IAC/E,iBAAiB,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CACxC;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,OAAO,EACf,OAAO,GAAE,kBAAuB,GAC/B,qBAAqB,CAOvB"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Infer a JSON Schema from an example JSON value. Thin facade over
3
+ * `genson-js` so consumers don't depend on it directly and we can swap
4
+ * the implementation later.
5
+ */
6
+ import { createSchema, mergeSchemas } from 'genson-js';
7
+ export function inferSchema(sample, options = {}) {
8
+ const base = createSchema(sample);
9
+ if (!options.additionalSamples || options.additionalSamples.length === 0) {
10
+ return base;
11
+ }
12
+ const extras = options.additionalSamples.map((s) => createSchema(s));
13
+ return mergeSchemas([base, ...extras]);
14
+ }
15
+ //# sourceMappingURL=inferSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inferSchema.js","sourceRoot":"","sources":["../../src/jsonForm/inferSchema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAQvD,MAAM,UAAU,WAAW,CACzB,MAAe,EACf,UAA8B,EAAE;IAEhC,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAA0B,CAAC;IAC3D,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAA0B,CAAC,CAAC;IAC9F,OAAO,YAAY,CAAC,CAAC,IAAI,EAAE,GAAG,MAAM,CAAY,CAA0B,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * JSON Pointer helpers (RFC 6901) plus immutable get/set, plus a tiny
3
+ * dotted-path normalizer so hosts can write `user.role` instead of
4
+ * `/user/role`. `$ref` resolution is local-only (`#/$defs/Foo`).
5
+ */
6
+ import type { SquisqAnnotatedSchema } from './types.js';
7
+ /** Normalize a path to a JSON Pointer string. Accepts both forms. */
8
+ export declare function toPointer(path: string): string;
9
+ /** Split a JSON Pointer into decoded segments. Empty string → []. */
10
+ export declare function pointerSegments(pointer: string): string[];
11
+ /** Read a value from data by path (dotted or pointer). Returns undefined if missing. */
12
+ export declare function getByPointer(data: unknown, path: string): unknown;
13
+ /**
14
+ * Return a structurally-shared copy of `data` with the value at `path`
15
+ * replaced. Intermediate objects/arrays are cloned along the path; the
16
+ * rest is shared by reference. Creates intermediate objects if missing.
17
+ */
18
+ export declare function setByPointer<T>(data: T, path: string, value: unknown): T;
19
+ /**
20
+ * Resolve a local `$ref` (e.g. `#/$defs/Foo`) against the root schema.
21
+ * Returns the original schema if no `$ref` is present, or `undefined`
22
+ * if the reference cannot be resolved. Cross-document refs are not
23
+ * supported.
24
+ */
25
+ export declare function resolveRef(schema: SquisqAnnotatedSchema, root: SquisqAnnotatedSchema): SquisqAnnotatedSchema | undefined;
26
+ //# sourceMappingURL=pointer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pointer.d.ts","sourceRoot":"","sources":["../../src/jsonForm/pointer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,qEAAqE;AACrE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAW9C;AAED,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAMzD;AAED,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAgBjE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,CAIxE;AA6BD;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,qBAAqB,EAC7B,IAAI,EAAE,qBAAqB,GAC1B,qBAAqB,GAAG,SAAS,CAWnC"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * JSON Pointer helpers (RFC 6901) plus immutable get/set, plus a tiny
3
+ * dotted-path normalizer so hosts can write `user.role` instead of
4
+ * `/user/role`. `$ref` resolution is local-only (`#/$defs/Foo`).
5
+ */
6
+ /** Normalize a path to a JSON Pointer string. Accepts both forms. */
7
+ export function toPointer(path) {
8
+ if (path === '' || path === '/')
9
+ return '';
10
+ if (path.startsWith('/'))
11
+ return path;
12
+ // Dotted form: split on `.` and escape per RFC 6901.
13
+ return ('/' +
14
+ path
15
+ .split('.')
16
+ .map((seg) => seg.replace(/~/g, '~0').replace(/\//g, '~1'))
17
+ .join('/'));
18
+ }
19
+ /** Split a JSON Pointer into decoded segments. Empty string → []. */
20
+ export function pointerSegments(pointer) {
21
+ if (pointer === '')
22
+ return [];
23
+ return pointer
24
+ .slice(1)
25
+ .split('/')
26
+ .map((seg) => seg.replace(/~1/g, '/').replace(/~0/g, '~'));
27
+ }
28
+ /** Read a value from data by path (dotted or pointer). Returns undefined if missing. */
29
+ export function getByPointer(data, path) {
30
+ const segments = pointerSegments(toPointer(path));
31
+ let cur = data;
32
+ for (const seg of segments) {
33
+ if (cur === null || cur === undefined)
34
+ return undefined;
35
+ if (Array.isArray(cur)) {
36
+ const idx = Number(seg);
37
+ if (!Number.isInteger(idx) || idx < 0 || idx >= cur.length)
38
+ return undefined;
39
+ cur = cur[idx];
40
+ }
41
+ else if (typeof cur === 'object') {
42
+ cur = cur[seg];
43
+ }
44
+ else {
45
+ return undefined;
46
+ }
47
+ }
48
+ return cur;
49
+ }
50
+ /**
51
+ * Return a structurally-shared copy of `data` with the value at `path`
52
+ * replaced. Intermediate objects/arrays are cloned along the path; the
53
+ * rest is shared by reference. Creates intermediate objects if missing.
54
+ */
55
+ export function setByPointer(data, path, value) {
56
+ const segments = pointerSegments(toPointer(path));
57
+ if (segments.length === 0)
58
+ return value;
59
+ return setRec(data, segments, 0, value);
60
+ }
61
+ function setRec(node, segments, i, value) {
62
+ const seg = segments[i];
63
+ const isLast = i === segments.length - 1;
64
+ // Decide whether the slot we're about to write into is an array index.
65
+ const nextSeg = isLast ? undefined : segments[i + 1];
66
+ const writingArrayChild = nextSeg !== undefined && /^\d+$/.test(nextSeg);
67
+ if (Array.isArray(node)) {
68
+ const idx = Number(seg);
69
+ const next = node.slice();
70
+ next[idx] = isLast
71
+ ? value
72
+ : setRec(node[idx] ?? (writingArrayChild ? [] : {}), segments, i + 1, value);
73
+ return next;
74
+ }
75
+ const obj = (node && typeof node === 'object' ? { ...node } : {});
76
+ obj[seg] = isLast
77
+ ? value
78
+ : setRec(obj[seg] ?? (writingArrayChild ? [] : {}), segments, i + 1, value);
79
+ return obj;
80
+ }
81
+ /**
82
+ * Resolve a local `$ref` (e.g. `#/$defs/Foo`) against the root schema.
83
+ * Returns the original schema if no `$ref` is present, or `undefined`
84
+ * if the reference cannot be resolved. Cross-document refs are not
85
+ * supported.
86
+ */
87
+ export function resolveRef(schema, root) {
88
+ if (!schema.$ref)
89
+ return schema;
90
+ const ref = schema.$ref;
91
+ if (!ref.startsWith('#/'))
92
+ return undefined;
93
+ const segments = pointerSegments(ref.slice(1));
94
+ let cur = root;
95
+ for (const seg of segments) {
96
+ if (cur === null || cur === undefined || typeof cur !== 'object')
97
+ return undefined;
98
+ cur = cur[seg];
99
+ }
100
+ return cur ?? undefined;
101
+ }
102
+ //# sourceMappingURL=pointer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pointer.js","sourceRoot":"","sources":["../../src/jsonForm/pointer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * JSON Form types — Squisq's hint vocabulary layered on JSON Schema.
3
+ *
4
+ * Hints live inline on a JSON Schema under a single `squisq` key. The
5
+ * schema remains a valid JSON Schema; the extra key is ignored by
6
+ * standard validators. Renderers consult the hints to pick a control
7
+ * and tune its presentation.
8
+ */
9
+ /**
10
+ * Every concrete control rendered by `<JsonView>` and `<JsonEditor>`.
11
+ *
12
+ * Auto-defaults pick one based on schema shape; hosts override via
13
+ * `squisq.control` when they want something specific (e.g. radio over
14
+ * segmented for a long, descriptive enum).
15
+ */
16
+ export type ControlKind = 'text' | 'multiline' | 'richtext' | 'color' | 'date' | 'time' | 'datetime' | 'slider' | 'stepper' | 'segmented' | 'radio' | 'combobox' | 'toggle' | 'checkbox' | 'card' | 'card-stack' | 'chip-bin' | 'tabs' | 'group';
17
+ /**
18
+ * Conditional rule: looked up by field path against the root data and
19
+ * compared with one of the operators. The first defined operator wins
20
+ * (in declaration order: equals, oneOf, matches, truthy).
21
+ */
22
+ export interface SquisqWhen {
23
+ /**
24
+ * Path to the controlling field, relative to the root data.
25
+ * Accepts dotted-path (`user.role`) or JSON Pointer (`/user/role`).
26
+ */
27
+ field: string;
28
+ equals?: unknown;
29
+ oneOf?: readonly unknown[];
30
+ /** ECMAScript regex source; matched against the string value. */
31
+ matches?: string;
32
+ /** When true, condition holds if value is truthy; when false, if falsy. */
33
+ truthy?: boolean;
34
+ }
35
+ /**
36
+ * Hints for a single schema node. Attach via `squisq` on any JSON
37
+ * Schema object — properties, items, the root, or sub-schemas inside
38
+ * `oneOf`/`anyOf`.
39
+ */
40
+ export interface SquisqHints {
41
+ /** Force a specific control. If omitted, picked from type/format/enum cardinality. */
42
+ control?: ControlKind;
43
+ /** Override schema `title` for display. */
44
+ label?: string;
45
+ /** Override schema `description` for the inline helper text. */
46
+ help?: string;
47
+ /** Placeholder text for empty fields. */
48
+ placeholder?: string;
49
+ /** Suggested layout sizing in a parent grid. Renderers may ignore on narrow viewports. */
50
+ width?: 'full' | 'half' | 'third' | 'auto';
51
+ /** Hide the field — literal, or a `SquisqWhen` evaluated against root data. */
52
+ hidden?: boolean | SquisqWhen;
53
+ /** Disable the field — literal, or a `SquisqWhen` evaluated against root data. */
54
+ disabled?: boolean | SquisqWhen;
55
+ /** Override schema's required-ness for the UI only. */
56
+ required?: boolean;
57
+ /** For arrays of objects: how to label each card in a `card-stack`. */
58
+ itemLabel?: string | {
59
+ fromField: string;
60
+ };
61
+ /** Label for the "+ Add" button on arrays. */
62
+ addLabel?: string;
63
+ /** Label for the remove button on arrays. */
64
+ removeLabel?: string;
65
+ /** Slider/stepper visual step. Falls back to schema `multipleOf`. */
66
+ step?: number;
67
+ /** Optional human-readable labels for enum values. */
68
+ enumLabels?: Record<string, string>;
69
+ }
70
+ /**
71
+ * The subset of JSON Schema we understand, with an optional `squisq`
72
+ * key. We deliberately keep this as a structural type so any JSON
73
+ * Schema authored elsewhere can be passed in without conversion.
74
+ */
75
+ export interface SquisqAnnotatedSchema {
76
+ type?: string | readonly string[];
77
+ format?: string;
78
+ title?: string;
79
+ description?: string;
80
+ default?: unknown;
81
+ examples?: readonly unknown[];
82
+ enum?: readonly unknown[];
83
+ const?: unknown;
84
+ properties?: Record<string, SquisqAnnotatedSchema>;
85
+ required?: readonly string[];
86
+ additionalProperties?: boolean | SquisqAnnotatedSchema;
87
+ items?: SquisqAnnotatedSchema | readonly SquisqAnnotatedSchema[];
88
+ minItems?: number;
89
+ maxItems?: number;
90
+ minimum?: number;
91
+ maximum?: number;
92
+ exclusiveMinimum?: number;
93
+ exclusiveMaximum?: number;
94
+ multipleOf?: number;
95
+ minLength?: number;
96
+ maxLength?: number;
97
+ pattern?: string;
98
+ oneOf?: readonly SquisqAnnotatedSchema[];
99
+ anyOf?: readonly SquisqAnnotatedSchema[];
100
+ allOf?: readonly SquisqAnnotatedSchema[];
101
+ $ref?: string;
102
+ $defs?: Record<string, SquisqAnnotatedSchema>;
103
+ definitions?: Record<string, SquisqAnnotatedSchema>;
104
+ squisq?: SquisqHints;
105
+ }
106
+ /**
107
+ * A validation error reported by the consumer-supplied `validate` prop.
108
+ * Matches the shape of common validators (ajv, etc.) without depending
109
+ * on any specific one.
110
+ */
111
+ export interface JsonFormValidationError {
112
+ /** JSON Pointer to the failing value, e.g. `/sections/0/heading`. */
113
+ path: string;
114
+ /** Human-readable message. */
115
+ message: string;
116
+ /** Optional schema keyword that failed (e.g. "required", "minimum"). */
117
+ keyword?: string;
118
+ }
119
+ export type JsonFormValidator = (value: unknown, schema: SquisqAnnotatedSchema) => readonly JsonFormValidationError[];
120
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/jsonForm/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * JSON Form types — Squisq's hint vocabulary layered on JSON Schema.
3
+ *
4
+ * Hints live inline on a JSON Schema under a single `squisq` key. The
5
+ * schema remains a valid JSON Schema; the extra key is ignored by
6
+ * standard validators. Renderers consult the hints to pick a control
7
+ * and tune its presentation.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/jsonForm/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -9,7 +9,7 @@
9
9
  * The conversion is designed for perfect round-tripping:
10
10
  * toMdast(fromMdast(tree)) should produce an equivalent mdast tree.
11
11
  */
12
- import type { MarkdownDocument } from './types.js';
12
+ import type { MarkdownDocument, MarkdownInlineNode } from './types.js';
13
13
  /**
14
14
  * Minimal interface for mdast/unist nodes.
15
15
  * Using a generic shape avoids hard dependency on @types/mdast
@@ -60,6 +60,16 @@ interface MdastNode {
60
60
  export declare function fromMdast(root: MdastNode, options?: {
61
61
  parseHtml?: boolean;
62
62
  }): MarkdownDocument;
63
+ /**
64
+ * Walk an inline-children list and split each text node on `{[token]}`
65
+ * occurrences whose tokens resolve to known FontAwesome icons. Returns
66
+ * a new array — unresolved tokens are left as literal text so authors
67
+ * can write `{[notathing]}` verbatim if they really mean to.
68
+ *
69
+ * Exposed for the heading code path, which first strips the trailing
70
+ * template annotation and then runs this on what remains.
71
+ */
72
+ export declare function splitInlineIcons(nodes: MarkdownInlineNode[]): MarkdownInlineNode[];
63
73
  /**
64
74
  * Convert a MarkdownDocument back to an mdast Root node.
65
75
  *
@@ -1 +1 @@
1
- {"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../src/markdown/convert.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,gBAAgB,EASjB,MAAM,YAAY,CAAC;AAOpB;;;;GAIG;AACH,UAAU,aAAa;IACrB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD;AAED,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAmKD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,gBAAgB,CAO9F;AA0YD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,SAAS,CAMxD"}
1
+ {"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../src/markdown/convert.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAEhB,kBAAkB,EAQnB,MAAM,YAAY,CAAC;AAQpB;;;;GAIG;AACH,UAAU,aAAa;IACrB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD;AAED,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAwKD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,gBAAgB,CAO9F;AA6BD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,EAAE,GAAG,kBAAkB,EAAE,CAiBlF;AA8cD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,SAAS,CAMxD"}