velo-text 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/CHANGELOG.md +70 -0
  2. package/LICENSE +21 -0
  3. package/README.md +122 -0
  4. package/dist/adapters/backend/index.d.ts +4 -0
  5. package/dist/adapters/backend/index.d.ts.map +1 -0
  6. package/dist/adapters/backend/index.js +3 -0
  7. package/dist/adapters/backend/index.js.map +1 -0
  8. package/dist/adapters/backend/pdf-http.d.ts +48 -0
  9. package/dist/adapters/backend/pdf-http.d.ts.map +1 -0
  10. package/dist/adapters/backend/pdf-http.js +117 -0
  11. package/dist/adapters/backend/pdf-http.js.map +1 -0
  12. package/dist/adapters/backend/sinks.d.ts +7 -0
  13. package/dist/adapters/backend/sinks.d.ts.map +1 -0
  14. package/dist/adapters/backend/sinks.js +43 -0
  15. package/dist/adapters/backend/sinks.js.map +1 -0
  16. package/dist/adapters/browser/index.d.ts +11 -0
  17. package/dist/adapters/browser/index.d.ts.map +1 -0
  18. package/dist/adapters/browser/index.js +51 -0
  19. package/dist/adapters/browser/index.js.map +1 -0
  20. package/dist/adapters/postgres-contract/index.d.ts +45 -0
  21. package/dist/adapters/postgres-contract/index.d.ts.map +1 -0
  22. package/dist/adapters/postgres-contract/index.js +108 -0
  23. package/dist/adapters/postgres-contract/index.js.map +1 -0
  24. package/dist/adapters/s3-compatible/index.d.ts +46 -0
  25. package/dist/adapters/s3-compatible/index.d.ts.map +1 -0
  26. package/dist/adapters/s3-compatible/index.js +106 -0
  27. package/dist/adapters/s3-compatible/index.js.map +1 -0
  28. package/dist/adapters/vanilla.d.ts +5 -0
  29. package/dist/adapters/vanilla.d.ts.map +1 -0
  30. package/dist/adapters/vanilla.js +6 -0
  31. package/dist/adapters/vanilla.js.map +1 -0
  32. package/dist/assets/dimensions/index.d.ts +12 -0
  33. package/dist/assets/dimensions/index.d.ts.map +1 -0
  34. package/dist/assets/dimensions/index.js +46 -0
  35. package/dist/assets/dimensions/index.js.map +1 -0
  36. package/dist/assets/hashing/index.d.ts +7 -0
  37. package/dist/assets/hashing/index.d.ts.map +1 -0
  38. package/dist/assets/hashing/index.js +21 -0
  39. package/dist/assets/hashing/index.js.map +1 -0
  40. package/dist/assets/icons/index.d.ts +25 -0
  41. package/dist/assets/icons/index.d.ts.map +1 -0
  42. package/dist/assets/icons/index.js +107 -0
  43. package/dist/assets/icons/index.js.map +1 -0
  44. package/dist/assets/png/placeholder.d.ts +4 -0
  45. package/dist/assets/png/placeholder.d.ts.map +1 -0
  46. package/dist/assets/png/placeholder.js +13 -0
  47. package/dist/assets/png/placeholder.js.map +1 -0
  48. package/dist/assets/sniff/index.d.ts +13 -0
  49. package/dist/assets/sniff/index.d.ts.map +1 -0
  50. package/dist/assets/sniff/index.js +41 -0
  51. package/dist/assets/sniff/index.js.map +1 -0
  52. package/dist/assets/store/index.d.ts +56 -0
  53. package/dist/assets/store/index.d.ts.map +1 -0
  54. package/dist/assets/store/index.js +102 -0
  55. package/dist/assets/store/index.js.map +1 -0
  56. package/dist/assets/svg/index.d.ts +7 -0
  57. package/dist/assets/svg/index.d.ts.map +1 -0
  58. package/dist/assets/svg/index.js +82 -0
  59. package/dist/assets/svg/index.js.map +1 -0
  60. package/dist/core/equation/html.d.ts +3 -0
  61. package/dist/core/equation/html.d.ts.map +1 -0
  62. package/dist/core/equation/html.js +138 -0
  63. package/dist/core/equation/html.js.map +1 -0
  64. package/dist/core/equation/index.d.ts +19 -0
  65. package/dist/core/equation/index.d.ts.map +1 -0
  66. package/dist/core/equation/index.js +107 -0
  67. package/dist/core/equation/index.js.map +1 -0
  68. package/dist/core/events/index.d.ts +13 -0
  69. package/dist/core/events/index.d.ts.map +1 -0
  70. package/dist/core/events/index.js +18 -0
  71. package/dist/core/events/index.js.map +1 -0
  72. package/dist/core/history/history.d.ts +29 -0
  73. package/dist/core/history/history.d.ts.map +1 -0
  74. package/dist/core/history/history.js +55 -0
  75. package/dist/core/history/history.js.map +1 -0
  76. package/dist/core/history/index.d.ts +2 -0
  77. package/dist/core/history/index.d.ts.map +1 -0
  78. package/dist/core/history/index.js +2 -0
  79. package/dist/core/history/index.js.map +1 -0
  80. package/dist/core/model/block.d.ts +121 -0
  81. package/dist/core/model/block.d.ts.map +1 -0
  82. package/dist/core/model/block.js +2 -0
  83. package/dist/core/model/block.js.map +1 -0
  84. package/dist/core/model/document.d.ts +70 -0
  85. package/dist/core/model/document.d.ts.map +1 -0
  86. package/dist/core/model/document.js +2 -0
  87. package/dist/core/model/document.js.map +1 -0
  88. package/dist/core/model/factories.d.ts +35 -0
  89. package/dist/core/model/factories.d.ts.map +1 -0
  90. package/dist/core/model/factories.js +115 -0
  91. package/dist/core/model/factories.js.map +1 -0
  92. package/dist/core/model/index.d.ts +4 -0
  93. package/dist/core/model/index.d.ts.map +1 -0
  94. package/dist/core/model/index.js +4 -0
  95. package/dist/core/model/index.js.map +1 -0
  96. package/dist/core/model/inline.d.ts +43 -0
  97. package/dist/core/model/inline.d.ts.map +1 -0
  98. package/dist/core/model/inline.js +2 -0
  99. package/dist/core/model/inline.js.map +1 -0
  100. package/dist/core/model/primitives.d.ts +36 -0
  101. package/dist/core/model/primitives.d.ts.map +1 -0
  102. package/dist/core/model/primitives.js +3 -0
  103. package/dist/core/model/primitives.js.map +1 -0
  104. package/dist/core/model/table-look.d.ts +12 -0
  105. package/dist/core/model/table-look.d.ts.map +1 -0
  106. package/dist/core/model/table-look.js +99 -0
  107. package/dist/core/model/table-look.js.map +1 -0
  108. package/dist/core/model/types.d.ts +5 -0
  109. package/dist/core/model/types.d.ts.map +1 -0
  110. package/dist/core/model/types.js +5 -0
  111. package/dist/core/model/types.js.map +1 -0
  112. package/dist/core/normalize/index.d.ts +2 -0
  113. package/dist/core/normalize/index.d.ts.map +1 -0
  114. package/dist/core/normalize/index.js +2 -0
  115. package/dist/core/normalize/index.js.map +1 -0
  116. package/dist/core/normalize/normalize.d.ts +8 -0
  117. package/dist/core/normalize/normalize.d.ts.map +1 -0
  118. package/dist/core/normalize/normalize.js +145 -0
  119. package/dist/core/normalize/normalize.js.map +1 -0
  120. package/dist/core/operations/index.d.ts +2 -0
  121. package/dist/core/operations/index.d.ts.map +1 -0
  122. package/dist/core/operations/index.js +2 -0
  123. package/dist/core/operations/index.js.map +1 -0
  124. package/dist/core/operations/operations.d.ts +53 -0
  125. package/dist/core/operations/operations.d.ts.map +1 -0
  126. package/dist/core/operations/operations.js +92 -0
  127. package/dist/core/operations/operations.js.map +1 -0
  128. package/dist/core/plugin/index.d.ts +84 -0
  129. package/dist/core/plugin/index.d.ts.map +1 -0
  130. package/dist/core/plugin/index.js +137 -0
  131. package/dist/core/plugin/index.js.map +1 -0
  132. package/dist/core/schema/canonical.d.ts +6 -0
  133. package/dist/core/schema/canonical.d.ts.map +1 -0
  134. package/dist/core/schema/canonical.js +42 -0
  135. package/dist/core/schema/canonical.js.map +1 -0
  136. package/dist/core/schema/index.d.ts +3 -0
  137. package/dist/core/schema/index.d.ts.map +1 -0
  138. package/dist/core/schema/index.js +3 -0
  139. package/dist/core/schema/index.js.map +1 -0
  140. package/dist/core/schema/validator.d.ts +23 -0
  141. package/dist/core/schema/validator.d.ts.map +1 -0
  142. package/dist/core/schema/validator.js +276 -0
  143. package/dist/core/schema/validator.js.map +1 -0
  144. package/dist/core/selection/index.d.ts +2 -0
  145. package/dist/core/selection/index.d.ts.map +1 -0
  146. package/dist/core/selection/index.js +2 -0
  147. package/dist/core/selection/index.js.map +1 -0
  148. package/dist/core/selection/selection.d.ts +12 -0
  149. package/dist/core/selection/selection.d.ts.map +1 -0
  150. package/dist/core/selection/selection.js +38 -0
  151. package/dist/core/selection/selection.js.map +1 -0
  152. package/dist/editor-web/accessibility/index.d.ts +40 -0
  153. package/dist/editor-web/accessibility/index.d.ts.map +1 -0
  154. package/dist/editor-web/accessibility/index.js +170 -0
  155. package/dist/editor-web/accessibility/index.js.map +1 -0
  156. package/dist/editor-web/clipboard/index.d.ts +52 -0
  157. package/dist/editor-web/clipboard/index.d.ts.map +1 -0
  158. package/dist/editor-web/clipboard/index.js +154 -0
  159. package/dist/editor-web/clipboard/index.js.map +1 -0
  160. package/dist/editor-web/controller/column-presets.d.ts +9 -0
  161. package/dist/editor-web/controller/column-presets.d.ts.map +1 -0
  162. package/dist/editor-web/controller/column-presets.js +11 -0
  163. package/dist/editor-web/controller/column-presets.js.map +1 -0
  164. package/dist/editor-web/controller/column-resize.d.ts +6 -0
  165. package/dist/editor-web/controller/column-resize.d.ts.map +1 -0
  166. package/dist/editor-web/controller/column-resize.js +119 -0
  167. package/dist/editor-web/controller/column-resize.js.map +1 -0
  168. package/dist/editor-web/controller/columns-ui.d.ts +5 -0
  169. package/dist/editor-web/controller/columns-ui.d.ts.map +1 -0
  170. package/dist/editor-web/controller/columns-ui.js +107 -0
  171. package/dist/editor-web/controller/columns-ui.js.map +1 -0
  172. package/dist/editor-web/controller/commands.d.ts +27 -0
  173. package/dist/editor-web/controller/commands.d.ts.map +1 -0
  174. package/dist/editor-web/controller/commands.js +198 -0
  175. package/dist/editor-web/controller/commands.js.map +1 -0
  176. package/dist/editor-web/controller/format-commands.d.ts +12 -0
  177. package/dist/editor-web/controller/format-commands.d.ts.map +1 -0
  178. package/dist/editor-web/controller/format-commands.js +77 -0
  179. package/dist/editor-web/controller/format-commands.js.map +1 -0
  180. package/dist/editor-web/controller/handles.d.ts +7 -0
  181. package/dist/editor-web/controller/handles.d.ts.map +1 -0
  182. package/dist/editor-web/controller/handles.js +205 -0
  183. package/dist/editor-web/controller/handles.js.map +1 -0
  184. package/dist/editor-web/controller/host.d.ts +8 -0
  185. package/dist/editor-web/controller/host.d.ts.map +1 -0
  186. package/dist/editor-web/controller/host.js +48 -0
  187. package/dist/editor-web/controller/host.js.map +1 -0
  188. package/dist/editor-web/controller/image-resize.d.ts +9 -0
  189. package/dist/editor-web/controller/image-resize.d.ts.map +1 -0
  190. package/dist/editor-web/controller/image-resize.js +163 -0
  191. package/dist/editor-web/controller/image-resize.js.map +1 -0
  192. package/dist/editor-web/controller/index.d.ts +6 -0
  193. package/dist/editor-web/controller/index.d.ts.map +1 -0
  194. package/dist/editor-web/controller/index.js +190 -0
  195. package/dist/editor-web/controller/index.js.map +1 -0
  196. package/dist/editor-web/controller/nesting.d.ts +27 -0
  197. package/dist/editor-web/controller/nesting.d.ts.map +1 -0
  198. package/dist/editor-web/controller/nesting.js +218 -0
  199. package/dist/editor-web/controller/nesting.js.map +1 -0
  200. package/dist/editor-web/controller/place-overlay.d.ts +6 -0
  201. package/dist/editor-web/controller/place-overlay.d.ts.map +1 -0
  202. package/dist/editor-web/controller/place-overlay.js +55 -0
  203. package/dist/editor-web/controller/place-overlay.js.map +1 -0
  204. package/dist/editor-web/controller/size-picker.d.ts +28 -0
  205. package/dist/editor-web/controller/size-picker.d.ts.map +1 -0
  206. package/dist/editor-web/controller/size-picker.js +177 -0
  207. package/dist/editor-web/controller/size-picker.js.map +1 -0
  208. package/dist/editor-web/controller/table-resize.d.ts +14 -0
  209. package/dist/editor-web/controller/table-resize.d.ts.map +1 -0
  210. package/dist/editor-web/controller/table-resize.js +178 -0
  211. package/dist/editor-web/controller/table-resize.js.map +1 -0
  212. package/dist/editor-web/controller/table-ui.d.ts +5 -0
  213. package/dist/editor-web/controller/table-ui.d.ts.map +1 -0
  214. package/dist/editor-web/controller/table-ui.js +214 -0
  215. package/dist/editor-web/controller/table-ui.js.map +1 -0
  216. package/dist/editor-web/controller/types.d.ts +95 -0
  217. package/dist/editor-web/controller/types.d.ts.map +1 -0
  218. package/dist/editor-web/controller/types.js +4 -0
  219. package/dist/editor-web/controller/types.js.map +1 -0
  220. package/dist/editor-web/controller/variable-ui.d.ts +5 -0
  221. package/dist/editor-web/controller/variable-ui.d.ts.map +1 -0
  222. package/dist/editor-web/controller/variable-ui.js +75 -0
  223. package/dist/editor-web/controller/variable-ui.js.map +1 -0
  224. package/dist/editor-web/images/index.d.ts +9 -0
  225. package/dist/editor-web/images/index.d.ts.map +1 -0
  226. package/dist/editor-web/images/index.js +18 -0
  227. package/dist/editor-web/images/index.js.map +1 -0
  228. package/dist/editor-web/index.d.ts +10 -0
  229. package/dist/editor-web/index.d.ts.map +1 -0
  230. package/dist/editor-web/index.js +10 -0
  231. package/dist/editor-web/index.js.map +1 -0
  232. package/dist/editor-web/input/index.d.ts +75 -0
  233. package/dist/editor-web/input/index.d.ts.map +1 -0
  234. package/dist/editor-web/input/index.js +151 -0
  235. package/dist/editor-web/input/index.js.map +1 -0
  236. package/dist/editor-web/tables/index.d.ts +47 -0
  237. package/dist/editor-web/tables/index.d.ts.map +1 -0
  238. package/dist/editor-web/tables/index.js +159 -0
  239. package/dist/editor-web/tables/index.js.map +1 -0
  240. package/dist/editor-web/toolbar/index.d.ts +17 -0
  241. package/dist/editor-web/toolbar/index.d.ts.map +1 -0
  242. package/dist/editor-web/toolbar/index.js +36 -0
  243. package/dist/editor-web/toolbar/index.js.map +1 -0
  244. package/dist/editor-web/ux/attach.d.ts +21 -0
  245. package/dist/editor-web/ux/attach.d.ts.map +1 -0
  246. package/dist/editor-web/ux/attach.js +61 -0
  247. package/dist/editor-web/ux/attach.js.map +1 -0
  248. package/dist/editor-web/ux/command-palette.d.ts +11 -0
  249. package/dist/editor-web/ux/command-palette.d.ts.map +1 -0
  250. package/dist/editor-web/ux/command-palette.js +135 -0
  251. package/dist/editor-web/ux/command-palette.js.map +1 -0
  252. package/dist/editor-web/ux/equation-editor.d.ts +11 -0
  253. package/dist/editor-web/ux/equation-editor.d.ts.map +1 -0
  254. package/dist/editor-web/ux/equation-editor.js +130 -0
  255. package/dist/editor-web/ux/equation-editor.js.map +1 -0
  256. package/dist/editor-web/ux/equation-palette.d.ts +11 -0
  257. package/dist/editor-web/ux/equation-palette.d.ts.map +1 -0
  258. package/dist/editor-web/ux/equation-palette.js +90 -0
  259. package/dist/editor-web/ux/equation-palette.js.map +1 -0
  260. package/dist/editor-web/ux/find-replace.d.ts +6 -0
  261. package/dist/editor-web/ux/find-replace.d.ts.map +1 -0
  262. package/dist/editor-web/ux/find-replace.js +125 -0
  263. package/dist/editor-web/ux/find-replace.js.map +1 -0
  264. package/dist/editor-web/ux/find-text.d.ts +10 -0
  265. package/dist/editor-web/ux/find-text.d.ts.map +1 -0
  266. package/dist/editor-web/ux/find-text.js +101 -0
  267. package/dist/editor-web/ux/find-text.js.map +1 -0
  268. package/dist/editor-web/ux/image-drop.d.ts +7 -0
  269. package/dist/editor-web/ux/image-drop.d.ts.map +1 -0
  270. package/dist/editor-web/ux/image-drop.js +198 -0
  271. package/dist/editor-web/ux/image-drop.js.map +1 -0
  272. package/dist/editor-web/ux/link-ui.d.ts +6 -0
  273. package/dist/editor-web/ux/link-ui.d.ts.map +1 -0
  274. package/dist/editor-web/ux/link-ui.js +50 -0
  275. package/dist/editor-web/ux/link-ui.js.map +1 -0
  276. package/dist/editor-web/ux/outline.d.ts +9 -0
  277. package/dist/editor-web/ux/outline.d.ts.map +1 -0
  278. package/dist/editor-web/ux/outline.js +48 -0
  279. package/dist/editor-web/ux/outline.js.map +1 -0
  280. package/dist/editor-web/ux/page-preview.d.ts +6 -0
  281. package/dist/editor-web/ux/page-preview.d.ts.map +1 -0
  282. package/dist/editor-web/ux/page-preview.js +90 -0
  283. package/dist/editor-web/ux/page-preview.js.map +1 -0
  284. package/dist/editor-web/ux/selection-bubble.d.ts +6 -0
  285. package/dist/editor-web/ux/selection-bubble.d.ts.map +1 -0
  286. package/dist/editor-web/ux/selection-bubble.js +79 -0
  287. package/dist/editor-web/ux/selection-bubble.js.map +1 -0
  288. package/dist/editor-web/ux/shortcuts-sheet.d.ts +6 -0
  289. package/dist/editor-web/ux/shortcuts-sheet.d.ts.map +1 -0
  290. package/dist/editor-web/ux/shortcuts-sheet.js +58 -0
  291. package/dist/editor-web/ux/shortcuts-sheet.js.map +1 -0
  292. package/dist/editor-web/view/index.d.ts +3 -0
  293. package/dist/editor-web/view/index.d.ts.map +1 -0
  294. package/dist/editor-web/view/index.js +3 -0
  295. package/dist/editor-web/view/index.js.map +1 -0
  296. package/dist/editor-web/view/parse-inlines.d.ts +15 -0
  297. package/dist/editor-web/view/parse-inlines.d.ts.map +1 -0
  298. package/dist/editor-web/view/parse-inlines.js +107 -0
  299. package/dist/editor-web/view/parse-inlines.js.map +1 -0
  300. package/dist/editor-web/view/parse.d.ts +8 -0
  301. package/dist/editor-web/view/parse.d.ts.map +1 -0
  302. package/dist/editor-web/view/parse.js +238 -0
  303. package/dist/editor-web/view/parse.js.map +1 -0
  304. package/dist/editor-web/view/reconcile.d.ts +26 -0
  305. package/dist/editor-web/view/reconcile.d.ts.map +1 -0
  306. package/dist/editor-web/view/reconcile.js +142 -0
  307. package/dist/editor-web/view/reconcile.js.map +1 -0
  308. package/dist/editor-web/view/render.d.ts +14 -0
  309. package/dist/editor-web/view/render.d.ts.map +1 -0
  310. package/dist/editor-web/view/render.js +162 -0
  311. package/dist/editor-web/view/render.js.map +1 -0
  312. package/dist/export/docx/document-xml.d.ts +3 -0
  313. package/dist/export/docx/document-xml.d.ts.map +1 -0
  314. package/dist/export/docx/document-xml.js +218 -0
  315. package/dist/export/docx/document-xml.js.map +1 -0
  316. package/dist/export/docx/package-parts.d.ts +9 -0
  317. package/dist/export/docx/package-parts.d.ts.map +1 -0
  318. package/dist/export/docx/package-parts.js +91 -0
  319. package/dist/export/docx/package-parts.js.map +1 -0
  320. package/dist/export/docx/writer.d.ts +17 -0
  321. package/dist/export/docx/writer.d.ts.map +1 -0
  322. package/dist/export/docx/writer.js +48 -0
  323. package/dist/export/docx/writer.js.map +1 -0
  324. package/dist/export/images/downsample.d.ts +19 -0
  325. package/dist/export/images/downsample.d.ts.map +1 -0
  326. package/dist/export/images/downsample.js +64 -0
  327. package/dist/export/images/downsample.js.map +1 -0
  328. package/dist/export/images/png-encode.d.ts +4 -0
  329. package/dist/export/images/png-encode.d.ts.map +1 -0
  330. package/dist/export/images/png-encode.js +86 -0
  331. package/dist/export/images/png-encode.js.map +1 -0
  332. package/dist/export/images/prepare.d.ts +22 -0
  333. package/dist/export/images/prepare.d.ts.map +1 -0
  334. package/dist/export/images/prepare.js +29 -0
  335. package/dist/export/images/prepare.js.map +1 -0
  336. package/dist/export/images/rasterize.d.ts +7 -0
  337. package/dist/export/images/rasterize.d.ts.map +1 -0
  338. package/dist/export/images/rasterize.js +62 -0
  339. package/dist/export/images/rasterize.js.map +1 -0
  340. package/dist/export/index.d.ts +45 -0
  341. package/dist/export/index.d.ts.map +1 -0
  342. package/dist/export/index.js +52 -0
  343. package/dist/export/index.js.map +1 -0
  344. package/dist/export/layout/index.d.ts +23 -0
  345. package/dist/export/layout/index.d.ts.map +1 -0
  346. package/dist/export/layout/index.js +18 -0
  347. package/dist/export/layout/index.js.map +1 -0
  348. package/dist/export/layout/layout-blocks.d.ts +5 -0
  349. package/dist/export/layout/layout-blocks.d.ts.map +1 -0
  350. package/dist/export/layout/layout-blocks.js +91 -0
  351. package/dist/export/layout/layout-blocks.js.map +1 -0
  352. package/dist/export/layout/layout-flow.d.ts +25 -0
  353. package/dist/export/layout/layout-flow.d.ts.map +1 -0
  354. package/dist/export/layout/layout-flow.js +23 -0
  355. package/dist/export/layout/layout-flow.js.map +1 -0
  356. package/dist/export/layout/layout-structured.d.ts +4 -0
  357. package/dist/export/layout/layout-structured.d.ts.map +1 -0
  358. package/dist/export/layout/layout-structured.js +153 -0
  359. package/dist/export/layout/layout-structured.js.map +1 -0
  360. package/dist/export/layout/layout-types.d.ts +35 -0
  361. package/dist/export/layout/layout-types.d.ts.map +1 -0
  362. package/dist/export/layout/layout-types.js +2 -0
  363. package/dist/export/layout/layout-types.js.map +1 -0
  364. package/dist/export/layout/pagination.d.ts +9 -0
  365. package/dist/export/layout/pagination.d.ts.map +1 -0
  366. package/dist/export/layout/pagination.js +38 -0
  367. package/dist/export/layout/pagination.js.map +1 -0
  368. package/dist/export/layout/text.d.ts +47 -0
  369. package/dist/export/layout/text.d.ts.map +1 -0
  370. package/dist/export/layout/text.js +119 -0
  371. package/dist/export/layout/text.js.map +1 -0
  372. package/dist/export/layout/units.d.ts +30 -0
  373. package/dist/export/layout/units.d.ts.map +1 -0
  374. package/dist/export/layout/units.js +55 -0
  375. package/dist/export/layout/units.js.map +1 -0
  376. package/dist/export/odt/writer.d.ts +24 -0
  377. package/dist/export/odt/writer.d.ts.map +1 -0
  378. package/dist/export/odt/writer.js +258 -0
  379. package/dist/export/odt/writer.js.map +1 -0
  380. package/dist/export/pdf/assemble.d.ts +9 -0
  381. package/dist/export/pdf/assemble.d.ts.map +1 -0
  382. package/dist/export/pdf/assemble.js +105 -0
  383. package/dist/export/pdf/assemble.js.map +1 -0
  384. package/dist/export/pdf/diagnostics.d.ts +11 -0
  385. package/dist/export/pdf/diagnostics.d.ts.map +1 -0
  386. package/dist/export/pdf/diagnostics.js +88 -0
  387. package/dist/export/pdf/diagnostics.js.map +1 -0
  388. package/dist/export/pdf/equation.d.ts +55 -0
  389. package/dist/export/pdf/equation.d.ts.map +1 -0
  390. package/dist/export/pdf/equation.js +301 -0
  391. package/dist/export/pdf/equation.js.map +1 -0
  392. package/dist/export/pdf/export-pdf.d.ts +33 -0
  393. package/dist/export/pdf/export-pdf.d.ts.map +1 -0
  394. package/dist/export/pdf/export-pdf.js +54 -0
  395. package/dist/export/pdf/export-pdf.js.map +1 -0
  396. package/dist/export/pdf/fonts.d.ts +7 -0
  397. package/dist/export/pdf/fonts.d.ts.map +1 -0
  398. package/dist/export/pdf/fonts.js +15 -0
  399. package/dist/export/pdf/fonts.js.map +1 -0
  400. package/dist/export/pdf/image.d.ts +27 -0
  401. package/dist/export/pdf/image.d.ts.map +1 -0
  402. package/dist/export/pdf/image.js +271 -0
  403. package/dist/export/pdf/image.js.map +1 -0
  404. package/dist/export/pdf/layout-pages.d.ts +9 -0
  405. package/dist/export/pdf/layout-pages.d.ts.map +1 -0
  406. package/dist/export/pdf/layout-pages.js +174 -0
  407. package/dist/export/pdf/layout-pages.js.map +1 -0
  408. package/dist/export/pdf/layout-table.d.ts +29 -0
  409. package/dist/export/pdf/layout-table.d.ts.map +1 -0
  410. package/dist/export/pdf/layout-table.js +216 -0
  411. package/dist/export/pdf/layout-table.js.map +1 -0
  412. package/dist/export/pdf/page-metrics.d.ts +11 -0
  413. package/dist/export/pdf/page-metrics.d.ts.map +1 -0
  414. package/dist/export/pdf/page-metrics.js +14 -0
  415. package/dist/export/pdf/page-metrics.js.map +1 -0
  416. package/dist/export/pdf/pdf-model.d.ts +36 -0
  417. package/dist/export/pdf/pdf-model.d.ts.map +1 -0
  418. package/dist/export/pdf/pdf-model.js +4 -0
  419. package/dist/export/pdf/pdf-model.js.map +1 -0
  420. package/dist/export/pdf/stream.d.ts +6 -0
  421. package/dist/export/pdf/stream.d.ts.map +1 -0
  422. package/dist/export/pdf/stream.js +213 -0
  423. package/dist/export/pdf/stream.js.map +1 -0
  424. package/dist/export/pdf/writer.d.ts +26 -0
  425. package/dist/export/pdf/writer.d.ts.map +1 -0
  426. package/dist/export/pdf/writer.js +31 -0
  427. package/dist/export/pdf/writer.js.map +1 -0
  428. package/dist/export/validate.d.ts +29 -0
  429. package/dist/export/validate.d.ts.map +1 -0
  430. package/dist/export/validate.js +127 -0
  431. package/dist/export/validate.js.map +1 -0
  432. package/dist/export/xml/writer.d.ts +19 -0
  433. package/dist/export/xml/writer.d.ts.map +1 -0
  434. package/dist/export/xml/writer.js +57 -0
  435. package/dist/export/xml/writer.js.map +1 -0
  436. package/dist/export/zip/crc32.d.ts +2 -0
  437. package/dist/export/zip/crc32.d.ts.map +1 -0
  438. package/dist/export/zip/crc32.js +20 -0
  439. package/dist/export/zip/crc32.js.map +1 -0
  440. package/dist/export/zip/deflate.d.ts +15 -0
  441. package/dist/export/zip/deflate.d.ts.map +1 -0
  442. package/dist/export/zip/deflate.js +28 -0
  443. package/dist/export/zip/deflate.js.map +1 -0
  444. package/dist/export/zip/index.d.ts +3 -0
  445. package/dist/export/zip/index.d.ts.map +1 -0
  446. package/dist/export/zip/index.js +3 -0
  447. package/dist/export/zip/index.js.map +1 -0
  448. package/dist/export/zip/zipWriter.d.ts +23 -0
  449. package/dist/export/zip/zipWriter.d.ts.map +1 -0
  450. package/dist/export/zip/zipWriter.js +123 -0
  451. package/dist/export/zip/zipWriter.js.map +1 -0
  452. package/dist/public-api/index.d.ts +46 -0
  453. package/dist/public-api/index.d.ts.map +1 -0
  454. package/dist/public-api/index.js +40 -0
  455. package/dist/public-api/index.js.map +1 -0
  456. package/dist/template/diagnostics/index.d.ts +8 -0
  457. package/dist/template/diagnostics/index.d.ts.map +1 -0
  458. package/dist/template/diagnostics/index.js +4 -0
  459. package/dist/template/diagnostics/index.js.map +1 -0
  460. package/dist/template/formatter/index.d.ts +9 -0
  461. package/dist/template/formatter/index.d.ts.map +1 -0
  462. package/dist/template/formatter/index.js +27 -0
  463. package/dist/template/formatter/index.js.map +1 -0
  464. package/dist/template/index.d.ts +3 -0
  465. package/dist/template/index.d.ts.map +1 -0
  466. package/dist/template/index.js +3 -0
  467. package/dist/template/index.js.map +1 -0
  468. package/dist/template/parser/parser.d.ts +42 -0
  469. package/dist/template/parser/parser.d.ts.map +1 -0
  470. package/dist/template/parser/parser.js +135 -0
  471. package/dist/template/parser/parser.js.map +1 -0
  472. package/dist/template/resolver/format.d.ts +11 -0
  473. package/dist/template/resolver/format.d.ts.map +1 -0
  474. package/dist/template/resolver/format.js +80 -0
  475. package/dist/template/resolver/format.js.map +1 -0
  476. package/dist/template/resolver/resolver.d.ts +31 -0
  477. package/dist/template/resolver/resolver.d.ts.map +1 -0
  478. package/dist/template/resolver/resolver.js +218 -0
  479. package/dist/template/resolver/resolver.js.map +1 -0
  480. package/dist/theme/index.d.ts +26 -0
  481. package/dist/theme/index.d.ts.map +1 -0
  482. package/dist/theme/index.js +87 -0
  483. package/dist/theme/index.js.map +1 -0
  484. package/package.json +110 -0
  485. package/schemas/portable-doc-v1.json +250 -0
  486. package/themes/base.css +71 -0
  487. package/themes/components.css +135 -0
  488. package/themes/editor-chrome.css +174 -0
  489. package/themes/editor-columns.css +121 -0
  490. package/themes/editor-overlays.css +464 -0
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Accessibility — Phase 4 / 7.5
3
+ * Toolbar keyboard navigation, correct ARIA roles, format state announcements,
4
+ * high contrast, visible focus, table/variable trap-free navigation.
5
+ * Manual testing with keyboard and at least two screen readers is required before stable release.
6
+ */
7
+ export declare function ariaLabelForVariable(path: string): string;
8
+ export declare function ensureAltText(alt: string | undefined, decorative: boolean): string | undefined;
9
+ /**
10
+ * Announce a message to screen readers via aria-live region.
11
+ * Creates a visually hidden live region if not present.
12
+ */
13
+ export declare function announce(container: HTMLElement, message: string, priority?: "polite" | "assertive"): void;
14
+ /**
15
+ * Make toolbar keyboard navigable — arrow keys, Home/End, Enter/Space to activate.
16
+ * Returns a cleanup function.
17
+ */
18
+ export declare function makeToolbarNavigable(toolbar: HTMLElement): () => void;
19
+ /**
20
+ * Ensure focus is not trapped inside atomic nodes (variable, equation) or tables.
21
+ * Variables and equations are contenteditable=false and should be navigated via arrow keys.
22
+ */
23
+ export declare function trapFreeNavigation(container: HTMLElement): void;
24
+ /**
25
+ * Check color contrast ratio for accessibility (WCAG AA).
26
+ * Returns ratio and whether it passes for normal text and large text.
27
+ */
28
+ export declare function checkContrast(fg: string, bg: string): {
29
+ ratio: number;
30
+ passesAA: boolean;
31
+ passesAAALarge: boolean;
32
+ };
33
+ /**
34
+ * Validate that images have required alt text. Used during paste and export.
35
+ */
36
+ export declare function validateImageAlt(alt: string | undefined, decorative: boolean | undefined): {
37
+ valid: boolean;
38
+ error?: string;
39
+ };
40
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/editor-web/accessibility/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAI9F;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,QAAQ,GAAG,WAAsB,GAAG,IAAI,CAenH;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,IAAI,CAqDrE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,CA6B/D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,CAuBnH;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,EAAE,OAAO,GAAG,SAAS,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAK7H"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * Accessibility — Phase 4 / 7.5
3
+ * Toolbar keyboard navigation, correct ARIA roles, format state announcements,
4
+ * high contrast, visible focus, table/variable trap-free navigation.
5
+ * Manual testing with keyboard and at least two screen readers is required before stable release.
6
+ */
7
+ export function ariaLabelForVariable(path) {
8
+ return `Variable ${path}`;
9
+ }
10
+ export function ensureAltText(alt, decorative) {
11
+ if (decorative)
12
+ return "";
13
+ if (!alt || !alt.trim())
14
+ throw new Error("alt text required for non-decorative image");
15
+ return alt;
16
+ }
17
+ /**
18
+ * Announce a message to screen readers via aria-live region.
19
+ * Creates a visually hidden live region if not present.
20
+ */
21
+ export function announce(container, message, priority = "polite") {
22
+ let live = container.querySelector(`[data-pde-live="${priority}"]`);
23
+ if (!live) {
24
+ live = container.ownerDocument.createElement("div");
25
+ live.setAttribute("data-pde-live", priority);
26
+ live.setAttribute("aria-live", priority);
27
+ live.setAttribute("aria-atomic", "true");
28
+ live.style.cssText = "position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;";
29
+ container.appendChild(live);
30
+ }
31
+ live.textContent = "";
32
+ // Force re-announcement
33
+ setTimeout(() => {
34
+ live.textContent = message;
35
+ }, 10);
36
+ }
37
+ /**
38
+ * Make toolbar keyboard navigable — arrow keys, Home/End, Enter/Space to activate.
39
+ * Returns a cleanup function.
40
+ */
41
+ export function makeToolbarNavigable(toolbar) {
42
+ toolbar.setAttribute("role", "toolbar");
43
+ const buttons = () => [...toolbar.querySelectorAll('button, [role="button"]')];
44
+ const onKeyDown = (e) => {
45
+ const items = buttons();
46
+ const current = e.target;
47
+ const idx = items.indexOf(current);
48
+ if (idx === -1)
49
+ return;
50
+ let nextIdx = null;
51
+ switch (e.key) {
52
+ case "ArrowRight":
53
+ case "ArrowDown":
54
+ nextIdx = (idx + 1) % items.length;
55
+ break;
56
+ case "ArrowLeft":
57
+ case "ArrowUp":
58
+ nextIdx = (idx - 1 + items.length) % items.length;
59
+ break;
60
+ case "Home":
61
+ nextIdx = 0;
62
+ break;
63
+ case "End":
64
+ nextIdx = items.length - 1;
65
+ break;
66
+ case "Enter":
67
+ case " ":
68
+ e.preventDefault();
69
+ current.click();
70
+ return;
71
+ default:
72
+ return;
73
+ }
74
+ if (nextIdx !== null) {
75
+ e.preventDefault();
76
+ items[nextIdx].focus();
77
+ }
78
+ };
79
+ toolbar.addEventListener("keydown", onKeyDown);
80
+ // Set initial tab indexes
81
+ const init = () => {
82
+ const items = buttons();
83
+ items.forEach((btn, i) => btn.setAttribute("tabindex", i === 0 ? "0" : "-1"));
84
+ };
85
+ init();
86
+ const observer = new MutationObserver(init);
87
+ observer.observe(toolbar, { childList: true, subtree: true });
88
+ return () => {
89
+ toolbar.removeEventListener("keydown", onKeyDown);
90
+ observer.disconnect();
91
+ };
92
+ }
93
+ /**
94
+ * Ensure focus is not trapped inside atomic nodes (variable, equation) or tables.
95
+ * Variables and equations are contenteditable=false and should be navigated via arrow keys.
96
+ */
97
+ export function trapFreeNavigation(container) {
98
+ container.addEventListener("keydown", (e) => {
99
+ const sel = container.ownerDocument.getSelection();
100
+ if (!sel || sel.rangeCount === 0)
101
+ return;
102
+ const anchor = sel.anchorNode;
103
+ const anchorHost = (anchor?.nodeType === Node.TEXT_NODE ? anchor.parentElement : anchor);
104
+ const atomic = anchorHost?.closest?.('[data-node-type="variable"], [data-node-type="equation"]');
105
+ if (!atomic)
106
+ return;
107
+ // Arrow keys should move past atomic nodes, not into them
108
+ if (e.key === "ArrowRight" || e.key === "ArrowLeft") {
109
+ // Let the editor's selection mapper handle it; prevent default text editing inside atomic
110
+ e.preventDefault();
111
+ const isForward = e.key === "ArrowRight";
112
+ const next = isForward ? atomic.nextSibling : atomic.previousSibling;
113
+ if (next) {
114
+ const range = container.ownerDocument.createRange();
115
+ range.selectNode(next);
116
+ range.collapse(!isForward);
117
+ sel.removeAllRanges();
118
+ sel.addRange(range);
119
+ }
120
+ }
121
+ if (e.key === "Delete" || e.key === "Backspace") {
122
+ e.preventDefault();
123
+ // Deletion of atomic nodes should be handled as a single operation
124
+ atomic.remove();
125
+ announce(container, `Removed ${atomic.dataset.nodeType}`);
126
+ }
127
+ });
128
+ }
129
+ /**
130
+ * Check color contrast ratio for accessibility (WCAG AA).
131
+ * Returns ratio and whether it passes for normal text and large text.
132
+ */
133
+ export function checkContrast(fg, bg) {
134
+ const toRgb = (hex) => {
135
+ const h = hex.replace("#", "");
136
+ const r = parseInt(h.slice(0, 2), 16);
137
+ const g = parseInt(h.slice(2, 4), 16);
138
+ const b = parseInt(h.slice(4, 6), 16);
139
+ return [r, g, b];
140
+ };
141
+ const luminance = (rgb) => {
142
+ const [r, g, b] = rgb.map((v) => {
143
+ const s = v / 255;
144
+ return s <= 0.03928 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4);
145
+ });
146
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b;
147
+ };
148
+ try {
149
+ const l1 = luminance(toRgb(fg));
150
+ const l2 = luminance(toRgb(bg));
151
+ const ratio = (Math.max(l1, l2) + 0.05) / (Math.min(l1, l2) + 0.05);
152
+ return { ratio, passesAA: ratio >= 4.5, passesAAALarge: ratio >= 3 };
153
+ }
154
+ catch {
155
+ return { ratio: 0, passesAA: false, passesAAALarge: false };
156
+ }
157
+ }
158
+ /**
159
+ * Validate that images have required alt text. Used during paste and export.
160
+ */
161
+ export function validateImageAlt(alt, decorative) {
162
+ if (decorative)
163
+ return { valid: true };
164
+ if (!alt || !alt.trim())
165
+ return { valid: false, error: "Non-decorative image requires alt text" };
166
+ if (alt.length > 500)
167
+ return { valid: false, error: "Alt text too long" };
168
+ return { valid: true };
169
+ }
170
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/editor-web/accessibility/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Clipboard and DnD — Phase 4.2.3
3
+ * Handles text/plain, text/html and internal fragment, allowlist sanitization, image paste with validation and size limits.
4
+ * All HTML is parsed via DOMParser and filtered through an allowlist; scripts, forms, iframes and event handlers are stripped.
5
+ */
6
+ import { validateImageBytes } from "../images/index.js";
7
+ export declare const PASTE_LIMIT_BYTES = 1000000;
8
+ export declare const PASTE_LIMIT_TEXT = 500000;
9
+ export interface PasteData {
10
+ text?: string;
11
+ html?: string;
12
+ files?: File[];
13
+ internalFragment?: string;
14
+ }
15
+ export interface PasteResult {
16
+ sanitizedHtml: string;
17
+ plainText: string;
18
+ diagnostics: Array<{
19
+ code: string;
20
+ message: string;
21
+ }>;
22
+ isInternal: boolean;
23
+ images: Array<{
24
+ file: File;
25
+ validation: ReturnType<typeof validateImageBytes>;
26
+ }>;
27
+ }
28
+ /**
29
+ * Main paste handler — validates size limits, sanitizes HTML, validates images.
30
+ */
31
+ export declare function handlePaste(data: PasteData): PasteResult;
32
+ /**
33
+ * Validate pasted image files by reading their bytes (async).
34
+ * Rejects images with mismatched MIME, truncated data or dimensions exceeding limits.
35
+ */
36
+ export declare function handleImageFiles(files: File[]): Promise<Array<{
37
+ file: File;
38
+ bytes: Uint8Array;
39
+ mediaType: string;
40
+ }>>;
41
+ export declare function sanitizePastedHtml(html: string): string;
42
+ export declare function getPlainTextFallback(html: string): string;
43
+ /**
44
+ * Internal fragment for lossless copy between editors — stores AST JSON with version.
45
+ */
46
+ export declare function createInternalFragment(fragmentJson: string): string;
47
+ export declare function parseInternalFragment(fragment: string): unknown;
48
+ /**
49
+ * Drag and drop helpers — validate drop types and prevent directory traversal in file names.
50
+ */
51
+ export declare function sanitizeFileName(name: string): string;
52
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/editor-web/clipboard/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AASxD,eAAO,MAAM,iBAAiB,UAAY,CAAC;AAC3C,eAAO,MAAM,gBAAgB,SAAU,CAAC;AAExC,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,UAAU,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAA;KAAE,CAAC,CAAC;CAClF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,CAsCxD;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAa1H;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgDvD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAGnE;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAG/D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGrD"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Clipboard and DnD — Phase 4.2.3
3
+ * Handles text/plain, text/html and internal fragment, allowlist sanitization, image paste with validation and size limits.
4
+ * All HTML is parsed via DOMParser and filtered through an allowlist; scripts, forms, iframes and event handlers are stripped.
5
+ */
6
+ import { sniffImage } from "../../assets/sniff/index.js";
7
+ import { validateImageBytes } from "../images/index.js";
8
+ const ALLOWED_TAGS = new Set(["p", "h1", "h2", "h3", "blockquote", "ul", "ol", "li", "strong", "em", "u", "s", "code", "a", "br", "table", "tr", "td", "th", "thead", "tbody", "span", "b", "i"]);
9
+ const ALLOWED_ATTRS = {
10
+ a: new Set(["href", "title"]),
11
+ td: new Set(["colspan", "rowspan"]),
12
+ th: new Set(["colspan", "rowspan"]),
13
+ };
14
+ export const PASTE_LIMIT_BYTES = 1_000_000; // 1 MB per roadmap 13.4
15
+ export const PASTE_LIMIT_TEXT = 500_000; // characters
16
+ /**
17
+ * Main paste handler — validates size limits, sanitizes HTML, validates images.
18
+ */
19
+ export function handlePaste(data) {
20
+ const diagnostics = [];
21
+ // Size limits
22
+ if (data.text && data.text.length > PASTE_LIMIT_TEXT) {
23
+ diagnostics.push({ code: "paste-too-large", message: `Text paste exceeds limit ${PASTE_LIMIT_TEXT}` });
24
+ data.text = data.text.slice(0, PASTE_LIMIT_TEXT);
25
+ }
26
+ if (data.html && data.html.length > PASTE_LIMIT_BYTES) {
27
+ diagnostics.push({ code: "paste-too-large", message: `HTML paste exceeds limit ${PASTE_LIMIT_BYTES}` });
28
+ data.html = data.html.slice(0, PASTE_LIMIT_BYTES);
29
+ }
30
+ // Internal fragment takes precedence (lossless)
31
+ if (data.internalFragment) {
32
+ try {
33
+ JSON.parse(data.internalFragment);
34
+ return { sanitizedHtml: "", plainText: "", diagnostics, isInternal: true, images: [] };
35
+ }
36
+ catch {
37
+ diagnostics.push({ code: "invalid-internal-fragment", message: "Invalid internal fragment" });
38
+ }
39
+ }
40
+ const sanitizedHtml = data.html ? sanitizePastedHtml(data.html) : "";
41
+ const plainText = data.text ?? getPlainTextFallback(data.html ?? "");
42
+ // Image handling
43
+ const images = [];
44
+ if (data.files) {
45
+ for (const file of data.files) {
46
+ if (!file.type.startsWith("image/"))
47
+ continue;
48
+ // We cannot read bytes synchronously here; caller should use handleImageFiles
49
+ // For now, just flag as pending
50
+ images.push({ file, validation: { valid: true } });
51
+ }
52
+ }
53
+ return { sanitizedHtml, plainText, diagnostics, isInternal: false, images };
54
+ }
55
+ /**
56
+ * Validate pasted image files by reading their bytes (async).
57
+ * Rejects images with mismatched MIME, truncated data or dimensions exceeding limits.
58
+ */
59
+ export async function handleImageFiles(files) {
60
+ const results = [];
61
+ for (const file of files) {
62
+ if (file.size > PASTE_LIMIT_BYTES)
63
+ continue;
64
+ const buf = new Uint8Array(await file.arrayBuffer());
65
+ const validation = validateImageBytes(buf, file.type, PASTE_LIMIT_BYTES);
66
+ if (!validation.valid)
67
+ continue;
68
+ // Also verify magic signature matches declared type
69
+ const sniff = sniffImage(buf, file.type);
70
+ if (!sniff.valid)
71
+ continue;
72
+ results.push({ file, bytes: buf, mediaType: sniff.mediaType });
73
+ }
74
+ return results;
75
+ }
76
+ export function sanitizePastedHtml(html) {
77
+ // Remove dangerous elements and event handlers
78
+ let out = html
79
+ .replace(/<script[\s\S]*?<\/script>/gi, "")
80
+ .replace(/<style[\s\S]*?<\/style>/gi, "")
81
+ .replace(/<iframe[\s\S]*?<\/iframe>/gi, "")
82
+ .replace(/<form[\s\S]*?<\/form>/gi, "")
83
+ .replace(/<object[\s\S]*?<\/object>/gi, "");
84
+ out = out.replace(/\s+on\w+\s*=\s*("[^"]*"|'[^']*'|[^\s>]+)/gi, "");
85
+ out = out.replace(/href\s*=\s*"(javascript:[^"]*)"/gi, 'href="#"');
86
+ out = out.replace(/src\s*=\s*"(javascript:[^"]*)"/gi, 'src=""');
87
+ // If DOMParser is available (browser), parse and allowlist filter
88
+ if (typeof DOMParser !== "undefined") {
89
+ try {
90
+ const parser = new DOMParser();
91
+ const doc = parser.parseFromString(`<div>${out}</div>`, "text/html");
92
+ const container = doc.body.firstElementChild;
93
+ if (container) {
94
+ const walk = (el) => {
95
+ for (const child of [...el.children]) {
96
+ const tag = child.tagName.toLowerCase();
97
+ if (!ALLOWED_TAGS.has(tag)) {
98
+ // Unwrap disallowed tag but keep its children
99
+ while (child.firstChild)
100
+ el.insertBefore(child.firstChild, child);
101
+ child.remove();
102
+ continue;
103
+ }
104
+ // Filter attributes
105
+ for (const attr of [...child.attributes]) {
106
+ const allowed = ALLOWED_ATTRS[tag];
107
+ if (!allowed || !allowed.has(attr.name.toLowerCase()))
108
+ child.removeAttribute(attr.name);
109
+ if (attr.value.toLowerCase().startsWith("javascript:"))
110
+ child.removeAttribute(attr.name);
111
+ }
112
+ walk(child);
113
+ }
114
+ };
115
+ walk(container);
116
+ return container.innerHTML;
117
+ }
118
+ }
119
+ catch {
120
+ // Fallback to regex sanitized output
121
+ }
122
+ }
123
+ // Fallback: strip disallowed tags via regex (conservative)
124
+ void ALLOWED_TAGS;
125
+ return out;
126
+ }
127
+ export function getPlainTextFallback(html) {
128
+ return html
129
+ .replace(/<[^>]+>/g, " ")
130
+ .replace(/&nbsp;/g, " ")
131
+ .replace(/\s+/g, " ")
132
+ .trim();
133
+ }
134
+ /**
135
+ * Internal fragment for lossless copy between editors — stores AST JSON with version.
136
+ */
137
+ export function createInternalFragment(fragmentJson) {
138
+ if (fragmentJson.length > PASTE_LIMIT_BYTES)
139
+ throw new Error("Fragment too large");
140
+ return fragmentJson;
141
+ }
142
+ export function parseInternalFragment(fragment) {
143
+ if (fragment.length > PASTE_LIMIT_BYTES)
144
+ throw new Error("Fragment too large");
145
+ return JSON.parse(fragment);
146
+ }
147
+ /**
148
+ * Drag and drop helpers — validate drop types and prevent directory traversal in file names.
149
+ */
150
+ export function sanitizeFileName(name) {
151
+ // Prevent traversal and control characters
152
+ return name.replace(/[\0\/\\:*?"<>|]/g, "_").slice(0, 255);
153
+ }
154
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/editor-web/clipboard/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface ColumnPreset {
2
+ id: string;
3
+ label: string;
4
+ pcts: number[];
5
+ }
6
+ /** Four common mixes: halves, 70/30, thirds, quarters. */
7
+ export declare const COLUMN_PRESETS: ColumnPreset[];
8
+ export declare function presetById(id: string): ColumnPreset | undefined;
9
+ //# sourceMappingURL=column-presets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column-presets.d.ts","sourceRoot":"","sources":["../../../src/editor-web/controller/column-presets.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,0DAA0D;AAC1D,eAAO,MAAM,cAAc,EAAE,YAAY,EAKxC,CAAC;AAEF,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAE/D"}
@@ -0,0 +1,11 @@
1
+ /** Four common mixes: halves, 70/30, thirds, quarters. */
2
+ export const COLUMN_PRESETS = [
3
+ { id: "50-50", label: "50% · 50%", pcts: [50, 50] },
4
+ { id: "70-30", label: "70% · 30%", pcts: [70, 30] },
5
+ { id: "33-33-33", label: "33% · 33% · 33%", pcts: [34, 33, 33] },
6
+ { id: "25-25-25-25", label: "25% · 25% · 25% · 25%", pcts: [25, 25, 25, 25] },
7
+ ];
8
+ export function presetById(id) {
9
+ return COLUMN_PRESETS.find((p) => p.id === id);
10
+ }
11
+ //# sourceMappingURL=column-presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column-presets.js","sourceRoot":"","sources":["../../../src/editor-web/controller/column-presets.ts"],"names":[],"mappings":"AAMA,0DAA0D;AAC1D,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;IACnD,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;IACnD,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;IAChE,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;CAC9E,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ColumnsNode } from "../../core/model/types.js";
2
+ import type { EditorState } from "./types.js";
3
+ export declare function findColumnsNode(s: EditorState, id: string): ColumnsNode | null;
4
+ export declare function showColumnGutters(s: EditorState, layoutEl: HTMLElement): HTMLElement;
5
+ export declare function bindColumnResize(s: EditorState): void;
6
+ //# sourceMappingURL=column-resize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column-resize.d.ts","sourceRoot":"","sources":["../../../src/editor-web/controller/column-resize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAM9C,wBAAgB,eAAe,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAa9E;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,GAAG,WAAW,CAOpF;AAkCD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,CAgDrD"}
@@ -0,0 +1,119 @@
1
+ import { wrapperRel } from "./table-resize.js";
2
+ const DRAG_PX = 4;
3
+ const MIN_PCT = 8;
4
+ export function findColumnsNode(s, id) {
5
+ let hit = null;
6
+ const walk = (blocks) => {
7
+ for (const b of blocks) {
8
+ if (b.type === "columns") {
9
+ if (b.id === id)
10
+ hit = b;
11
+ for (const c of b.columns)
12
+ walk(c.blocks);
13
+ }
14
+ if (b.type === "table")
15
+ for (const row of b.rows)
16
+ for (const cell of row.cells)
17
+ walk(cell.blocks);
18
+ }
19
+ };
20
+ walk(s.getDoc().root.children);
21
+ return hit;
22
+ }
23
+ export function showColumnGutters(s, layoutEl) {
24
+ const layer = s.ownerDoc.createElement("div");
25
+ layer.className = "pde-column-gutters";
26
+ layer.dataset.layoutId = layoutEl.getAttribute("data-node-id") ?? "";
27
+ placeGutters(s, layoutEl, layer);
28
+ s.ui.append(layer);
29
+ return layer;
30
+ }
31
+ function placeGutters(s, layoutEl, layer) {
32
+ const slots = Array.from(layoutEl.querySelectorAll(":scope > .pde-column"));
33
+ const t = wrapperRel(s, layoutEl);
34
+ const layoutId = layoutEl.getAttribute("data-node-id") ?? "";
35
+ for (const old of Array.from(layer.querySelectorAll(".pde-gutter-handle")))
36
+ old.remove();
37
+ for (let i = 0; i < slots.length - 1; i++) {
38
+ const r = wrapperRel(s, slots[i]);
39
+ const h = s.ownerDoc.createElement("span");
40
+ h.className = "pde-gutter-handle";
41
+ h.dataset.gapIndex = String(i);
42
+ h.dataset.layoutId = layoutId;
43
+ h.title = "Drag to resize columns";
44
+ h.tabIndex = 0;
45
+ h.style.left = `${r.left + r.width - 4}px`;
46
+ h.style.top = `${t.top}px`;
47
+ h.style.height = `${t.height}px`;
48
+ layer.appendChild(h);
49
+ }
50
+ }
51
+ function applyPct(slots, node) {
52
+ node.columns.forEach((col, i) => {
53
+ const el = slots[i];
54
+ const pct = col.widthPct ?? 0;
55
+ if (!el)
56
+ return;
57
+ el.style.flex = `0 0 ${pct}%`;
58
+ el.style.width = `${pct}%`;
59
+ el.style.maxWidth = `${pct}%`;
60
+ el.setAttribute("data-width-pct", String(pct));
61
+ });
62
+ }
63
+ export function bindColumnResize(s) {
64
+ s.addBoth("pointerdown", ((e) => {
65
+ const h = e.target.closest?.(".pde-gutter-handle");
66
+ if (!h)
67
+ return;
68
+ e.preventDefault();
69
+ e.stopPropagation();
70
+ const layoutEl = s.container.querySelector(`.pde-columns[data-node-id="${h.dataset.layoutId}"]`);
71
+ if (!layoutEl)
72
+ return;
73
+ const node = findColumnsNode(s, h.dataset.layoutId ?? "");
74
+ if (!node)
75
+ return;
76
+ const i = Number(h.dataset.gapIndex);
77
+ const left = node.columns[i];
78
+ const right = node.columns[i + 1];
79
+ if (!left || !right)
80
+ return;
81
+ const slots = Array.from(layoutEl.querySelectorAll(":scope > .pde-column"));
82
+ const startX = e.clientX;
83
+ const startY = e.clientY;
84
+ const total = layoutEl.getBoundingClientRect().width || 1;
85
+ const startL = left.widthPct ?? 50;
86
+ const startR = right.widthPct ?? 50;
87
+ const layer = h.parentElement;
88
+ let armed = false;
89
+ const move = (ev) => {
90
+ if (!armed) {
91
+ if (Math.hypot(ev.clientX - startX, ev.clientY - startY) < DRAG_PX)
92
+ return;
93
+ armed = true;
94
+ s.pushSnapshot();
95
+ }
96
+ const dPct = ((ev.clientX - startX) / total) * 100;
97
+ let nextL = Math.max(MIN_PCT, Math.min(100 - MIN_PCT, startL + dPct));
98
+ let nextR = startL + startR - nextL;
99
+ if (nextR < MIN_PCT) {
100
+ nextR = MIN_PCT;
101
+ nextL = startL + startR - MIN_PCT;
102
+ }
103
+ left.widthPct = Math.round(nextL * 10) / 10;
104
+ right.widthPct = Math.round(nextR * 10) / 10;
105
+ applyPct(slots, node);
106
+ if (layer)
107
+ placeGutters(s, layoutEl, layer);
108
+ };
109
+ const up = () => {
110
+ s.ownerDoc.removeEventListener("pointermove", move);
111
+ s.ownerDoc.removeEventListener("pointerup", up);
112
+ if (armed)
113
+ s.opts.onChange?.(s.getDoc());
114
+ };
115
+ s.ownerDoc.addEventListener("pointermove", move);
116
+ s.ownerDoc.addEventListener("pointerup", up);
117
+ }));
118
+ }
119
+ //# sourceMappingURL=column-resize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column-resize.js","sourceRoot":"","sources":["../../../src/editor-web/controller/column-resize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { EditorState } from "./types.js";
2
+ export declare function attachColumnsUi(s: EditorState): {
3
+ hideColumnsUi: () => void;
4
+ };
5
+ //# sourceMappingURL=columns-ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"columns-ui.d.ts","sourceRoot":"","sources":["../../../src/editor-web/controller/columns-ui.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAmB,MAAM,YAAY,CAAC;AAO/D,wBAAgB,eAAe,CAAC,CAAC,EAAE,WAAW,GAAG;IAAE,aAAa,EAAE,MAAM,IAAI,CAAA;CAAE,CAkG7E"}