@cratis/scene.primereact 4.6.0 → 4.8.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 (388) hide show
  1. package/.storybook/preview.tsx +8 -1
  2. package/EnumerationResolution.ts +7 -0
  3. package/README.md +22 -12
  4. package/data/DataGallery.stories.tsx +6 -0
  5. package/data/DataScrollerRow.tsx +35 -0
  6. package/data/PrimeDataScroller.tsx +84 -0
  7. package/data/PrimeTreeTable.tsx +145 -0
  8. package/data/TreeTableCheckState.ts +9 -0
  9. package/data/TreeTableRow.ts +22 -0
  10. package/data/TreeTableRowView.tsx +86 -0
  11. package/data/TreeTableSelectionMode.ts +10 -0
  12. package/data/checkboxSelection.ts +92 -0
  13. package/data/index.ts +4 -0
  14. package/data/isSerializedLegacyElement.ts +30 -0
  15. package/data/readableValue.ts +32 -0
  16. package/data/selectionKeysOf.ts +40 -0
  17. package/data/treeTableRows.ts +32 -0
  18. package/data/useIncrementalLoad.ts +36 -0
  19. package/data/useLoadOnReach.ts +31 -0
  20. package/data/useTreeGridNavigation.ts +81 -0
  21. package/dist/cjs/data/DataScrollerRow.js +50 -0
  22. package/dist/cjs/data/DataScrollerRow.js.map +1 -0
  23. package/dist/cjs/data/PrimeDataScroller.js +120 -0
  24. package/dist/cjs/data/PrimeDataScroller.js.map +1 -0
  25. package/dist/cjs/data/PrimeTreeTable.js +217 -0
  26. package/dist/cjs/data/PrimeTreeTable.js.map +1 -0
  27. package/dist/cjs/data/TreeTableCheckState.js +13 -0
  28. package/dist/cjs/data/TreeTableCheckState.js.map +1 -0
  29. package/dist/cjs/data/TreeTableRowView.js +76 -0
  30. package/dist/cjs/data/TreeTableRowView.js.map +1 -0
  31. package/dist/cjs/data/TreeTableSelectionMode.js +14 -0
  32. package/dist/cjs/data/TreeTableSelectionMode.js.map +1 -0
  33. package/dist/cjs/data/checkboxSelection.js +88 -0
  34. package/dist/cjs/data/checkboxSelection.js.map +1 -0
  35. package/dist/cjs/data/isSerializedLegacyElement.js +30 -0
  36. package/dist/cjs/data/isSerializedLegacyElement.js.map +1 -0
  37. package/dist/cjs/data/readableValue.js +31 -0
  38. package/dist/cjs/data/readableValue.js.map +1 -0
  39. package/dist/cjs/data/selectionKeysOf.js +40 -0
  40. package/dist/cjs/data/selectionKeysOf.js.map +1 -0
  41. package/dist/cjs/data/treeTableRows.js +42 -0
  42. package/dist/cjs/data/treeTableRows.js.map +1 -0
  43. package/dist/cjs/data/useIncrementalLoad.js +46 -0
  44. package/dist/cjs/data/useIncrementalLoad.js.map +1 -0
  45. package/dist/cjs/data/useLoadOnReach.js +42 -0
  46. package/dist/cjs/data/useLoadOnReach.js.map +1 -0
  47. package/dist/cjs/data/useTreeGridNavigation.js +75 -0
  48. package/dist/cjs/data/useTreeGridNavigation.js.map +1 -0
  49. package/dist/cjs/editor/PrimeEditor.js +96 -0
  50. package/dist/cjs/editor/PrimeEditor.js.map +1 -0
  51. package/dist/cjs/editor/QuillLoaderContext.js +10 -0
  52. package/dist/cjs/editor/QuillLoaderContext.js.map +1 -0
  53. package/dist/cjs/editor/QuillLoaderProvider.js +21 -0
  54. package/dist/cjs/editor/QuillLoaderProvider.js.map +1 -0
  55. package/dist/cjs/editor/applyHtml.js +25 -0
  56. package/dist/cjs/editor/applyHtml.js.map +1 -0
  57. package/dist/cjs/editor/characterCount.js +10 -0
  58. package/dist/cjs/editor/characterCount.js.map +1 -0
  59. package/dist/cjs/editor/htmlToPlainText.js +101 -0
  60. package/dist/cjs/editor/htmlToPlainText.js.map +1 -0
  61. package/dist/cjs/editor/renderSafeNodes.js +35 -0
  62. package/dist/cjs/editor/renderSafeNodes.js.map +1 -0
  63. package/dist/cjs/editor/safeUrls.js +44 -0
  64. package/dist/cjs/editor/safeUrls.js.map +1 -0
  65. package/dist/cjs/editor/sanitizeHtml.js +140 -0
  66. package/dist/cjs/editor/sanitizeHtml.js.map +1 -0
  67. package/dist/cjs/editor/serializeSafeNodes.js +33 -0
  68. package/dist/cjs/editor/serializeSafeNodes.js.map +1 -0
  69. package/dist/cjs/editor/toolbarLayout.js +35 -0
  70. package/dist/cjs/editor/toolbarLayout.js.map +1 -0
  71. package/dist/cjs/editor/useQuillEditor.js +137 -0
  72. package/dist/cjs/editor/useQuillEditor.js.map +1 -0
  73. package/dist/cjs/file/FileUploadContext.js +13 -0
  74. package/dist/cjs/file/FileUploadContext.js.map +1 -0
  75. package/dist/cjs/file/FileUploadHandlerProvider.js +25 -0
  76. package/dist/cjs/file/FileUploadHandlerProvider.js.map +1 -0
  77. package/dist/cjs/file/FileUploadMode.js +13 -0
  78. package/dist/cjs/file/FileUploadMode.js.map +1 -0
  79. package/dist/cjs/file/PrimeFileUpload.js +161 -0
  80. package/dist/cjs/file/PrimeFileUpload.js.map +1 -0
  81. package/dist/cjs/file/postFiles.js +31 -0
  82. package/dist/cjs/file/postFiles.js.map +1 -0
  83. package/dist/cjs/file/resolveUploadTarget.js +68 -0
  84. package/dist/cjs/file/resolveUploadTarget.js.map +1 -0
  85. package/dist/cjs/file/useUploadSession.js +62 -0
  86. package/dist/cjs/file/useUploadSession.js.map +1 -0
  87. package/dist/cjs/index.js +32 -0
  88. package/dist/cjs/index.js.map +1 -1
  89. package/dist/cjs/legacyEnumerationChoices.js +39 -0
  90. package/dist/cjs/legacyEnumerationChoices.js.map +1 -0
  91. package/dist/cjs/loadQuill/index.js +22 -0
  92. package/dist/cjs/loadQuill/index.js.map +1 -0
  93. package/dist/cjs/primeReactComponents.js +10 -0
  94. package/dist/cjs/primeReactComponents.js.map +1 -1
  95. package/dist/cjs/primeReactDescriptors.js +243 -0
  96. package/dist/cjs/primeReactDescriptors.js.map +1 -1
  97. package/dist/cjs/primeReactPackage.js +4 -0
  98. package/dist/cjs/primeReactPackage.js.map +1 -1
  99. package/dist/cjs/resolveEnumeration.js +55 -0
  100. package/dist/cjs/resolveEnumeration.js.map +1 -0
  101. package/dist/cjs/treeNodes.js +42 -7
  102. package/dist/cjs/treeNodes.js.map +1 -1
  103. package/dist/cjs/useResettingState.js +47 -0
  104. package/dist/cjs/useResettingState.js.map +1 -0
  105. package/dist/esm/EnumerationResolution.d.ts +9 -0
  106. package/dist/esm/EnumerationResolution.d.ts.map +1 -0
  107. package/dist/esm/EnumerationResolution.js +2 -0
  108. package/dist/esm/EnumerationResolution.js.map +1 -0
  109. package/dist/esm/data/DataGallery.stories.d.ts.map +1 -1
  110. package/dist/esm/data/DataGallery.stories.js +6 -0
  111. package/dist/esm/data/DataGallery.stories.js.map +1 -1
  112. package/dist/esm/data/DataScrollerRow.d.ts +4 -0
  113. package/dist/esm/data/DataScrollerRow.d.ts.map +1 -0
  114. package/dist/esm/data/DataScrollerRow.js +48 -0
  115. package/dist/esm/data/DataScrollerRow.js.map +1 -0
  116. package/dist/esm/data/PrimeDataScroller.d.ts +3 -0
  117. package/dist/esm/data/PrimeDataScroller.d.ts.map +1 -0
  118. package/dist/esm/data/PrimeDataScroller.js +118 -0
  119. package/dist/esm/data/PrimeDataScroller.js.map +1 -0
  120. package/dist/esm/data/PrimeTreeTable.d.ts +3 -0
  121. package/dist/esm/data/PrimeTreeTable.d.ts.map +1 -0
  122. package/dist/esm/data/PrimeTreeTable.js +215 -0
  123. package/dist/esm/data/PrimeTreeTable.js.map +1 -0
  124. package/dist/esm/data/TreeTableCheckState.d.ts +6 -0
  125. package/dist/esm/data/TreeTableCheckState.d.ts.map +1 -0
  126. package/dist/esm/data/TreeTableCheckState.js +11 -0
  127. package/dist/esm/data/TreeTableCheckState.js.map +1 -0
  128. package/dist/esm/data/TreeTableRow.d.ts +10 -0
  129. package/dist/esm/data/TreeTableRow.d.ts.map +1 -0
  130. package/dist/esm/data/TreeTableRow.js +2 -0
  131. package/dist/esm/data/TreeTableRow.js.map +1 -0
  132. package/dist/esm/data/TreeTableRowView.d.ts +21 -0
  133. package/dist/esm/data/TreeTableRowView.d.ts.map +1 -0
  134. package/dist/esm/data/TreeTableRowView.js +74 -0
  135. package/dist/esm/data/TreeTableRowView.js.map +1 -0
  136. package/dist/esm/data/TreeTableSelectionMode.d.ts +7 -0
  137. package/dist/esm/data/TreeTableSelectionMode.d.ts.map +1 -0
  138. package/dist/esm/data/TreeTableSelectionMode.js +12 -0
  139. package/dist/esm/data/TreeTableSelectionMode.js.map +1 -0
  140. package/dist/esm/data/checkboxSelection.d.ts +9 -0
  141. package/dist/esm/data/checkboxSelection.d.ts.map +1 -0
  142. package/dist/esm/data/checkboxSelection.js +85 -0
  143. package/dist/esm/data/checkboxSelection.js.map +1 -0
  144. package/dist/esm/data/index.d.ts +4 -0
  145. package/dist/esm/data/index.d.ts.map +1 -1
  146. package/dist/esm/data/index.js +4 -0
  147. package/dist/esm/data/index.js.map +1 -1
  148. package/dist/esm/data/isSerializedLegacyElement.d.ts +3 -0
  149. package/dist/esm/data/isSerializedLegacyElement.d.ts.map +1 -0
  150. package/dist/esm/data/isSerializedLegacyElement.js +27 -0
  151. package/dist/esm/data/isSerializedLegacyElement.js.map +1 -0
  152. package/dist/esm/data/readableValue.d.ts +2 -0
  153. package/dist/esm/data/readableValue.d.ts.map +1 -0
  154. package/dist/esm/data/readableValue.js +29 -0
  155. package/dist/esm/data/readableValue.js.map +1 -0
  156. package/dist/esm/data/selectionKeysOf.d.ts +2 -0
  157. package/dist/esm/data/selectionKeysOf.d.ts.map +1 -0
  158. package/dist/esm/data/selectionKeysOf.js +38 -0
  159. package/dist/esm/data/selectionKeysOf.js.map +1 -0
  160. package/dist/esm/data/treeTableRows.d.ts +6 -0
  161. package/dist/esm/data/treeTableRows.d.ts.map +1 -0
  162. package/dist/esm/data/treeTableRows.js +38 -0
  163. package/dist/esm/data/treeTableRows.js.map +1 -0
  164. package/dist/esm/data/useIncrementalLoad.d.ts +6 -0
  165. package/dist/esm/data/useIncrementalLoad.d.ts.map +1 -0
  166. package/dist/esm/data/useIncrementalLoad.js +44 -0
  167. package/dist/esm/data/useIncrementalLoad.js.map +1 -0
  168. package/dist/esm/data/useLoadOnReach.d.ts +3 -0
  169. package/dist/esm/data/useLoadOnReach.d.ts.map +1 -0
  170. package/dist/esm/data/useLoadOnReach.js +40 -0
  171. package/dist/esm/data/useLoadOnReach.js.map +1 -0
  172. package/dist/esm/data/useTreeGridNavigation.d.ts +17 -0
  173. package/dist/esm/data/useTreeGridNavigation.d.ts.map +1 -0
  174. package/dist/esm/data/useTreeGridNavigation.js +73 -0
  175. package/dist/esm/data/useTreeGridNavigation.js.map +1 -0
  176. package/dist/esm/editor/PrimeEditor.d.ts +3 -0
  177. package/dist/esm/editor/PrimeEditor.d.ts.map +1 -0
  178. package/dist/esm/editor/PrimeEditor.js +94 -0
  179. package/dist/esm/editor/PrimeEditor.js.map +1 -0
  180. package/dist/esm/editor/QuillConstructor.d.ts +4 -0
  181. package/dist/esm/editor/QuillConstructor.d.ts.map +1 -0
  182. package/dist/esm/editor/QuillConstructor.js +2 -0
  183. package/dist/esm/editor/QuillConstructor.js.map +1 -0
  184. package/dist/esm/editor/QuillEditorOptions.d.ts +13 -0
  185. package/dist/esm/editor/QuillEditorOptions.d.ts.map +1 -0
  186. package/dist/esm/editor/QuillEditorOptions.js +2 -0
  187. package/dist/esm/editor/QuillEditorOptions.js.map +1 -0
  188. package/dist/esm/editor/QuillEditorState.d.ts +6 -0
  189. package/dist/esm/editor/QuillEditorState.d.ts.map +1 -0
  190. package/dist/esm/editor/QuillEditorState.js +2 -0
  191. package/dist/esm/editor/QuillEditorState.js.map +1 -0
  192. package/dist/esm/editor/QuillInstance.d.ts +16 -0
  193. package/dist/esm/editor/QuillInstance.d.ts.map +1 -0
  194. package/dist/esm/editor/QuillInstance.js +2 -0
  195. package/dist/esm/editor/QuillInstance.js.map +1 -0
  196. package/dist/esm/editor/QuillLoader.d.ts +5 -0
  197. package/dist/esm/editor/QuillLoader.d.ts.map +1 -0
  198. package/dist/esm/editor/QuillLoader.js +2 -0
  199. package/dist/esm/editor/QuillLoader.js.map +1 -0
  200. package/dist/esm/editor/QuillLoaderContext.d.ts +3 -0
  201. package/dist/esm/editor/QuillLoaderContext.d.ts.map +1 -0
  202. package/dist/esm/editor/QuillLoaderContext.js +8 -0
  203. package/dist/esm/editor/QuillLoaderContext.js.map +1 -0
  204. package/dist/esm/editor/QuillLoaderProvider.d.ts +8 -0
  205. package/dist/esm/editor/QuillLoaderProvider.d.ts.map +1 -0
  206. package/dist/esm/editor/QuillLoaderProvider.js +19 -0
  207. package/dist/esm/editor/QuillLoaderProvider.js.map +1 -0
  208. package/dist/esm/editor/QuillOptions.d.ts +9 -0
  209. package/dist/esm/editor/QuillOptions.d.ts.map +1 -0
  210. package/dist/esm/editor/QuillOptions.js +2 -0
  211. package/dist/esm/editor/QuillOptions.js.map +1 -0
  212. package/dist/esm/editor/SafeElement.d.ts +7 -0
  213. package/dist/esm/editor/SafeElement.d.ts.map +1 -0
  214. package/dist/esm/editor/SafeElement.js +2 -0
  215. package/dist/esm/editor/SafeElement.js.map +1 -0
  216. package/dist/esm/editor/SafeNode.d.ts +3 -0
  217. package/dist/esm/editor/SafeNode.d.ts.map +1 -0
  218. package/dist/esm/editor/SafeNode.js +2 -0
  219. package/dist/esm/editor/SafeNode.js.map +1 -0
  220. package/dist/esm/editor/applyHtml.d.ts +3 -0
  221. package/dist/esm/editor/applyHtml.d.ts.map +1 -0
  222. package/dist/esm/editor/applyHtml.js +23 -0
  223. package/dist/esm/editor/applyHtml.js.map +1 -0
  224. package/dist/esm/editor/characterCount.d.ts +3 -0
  225. package/dist/esm/editor/characterCount.d.ts.map +1 -0
  226. package/dist/esm/editor/characterCount.js +8 -0
  227. package/dist/esm/editor/characterCount.js.map +1 -0
  228. package/dist/esm/editor/htmlToPlainText.d.ts +2 -0
  229. package/dist/esm/editor/htmlToPlainText.d.ts.map +1 -0
  230. package/dist/esm/editor/htmlToPlainText.js +99 -0
  231. package/dist/esm/editor/htmlToPlainText.js.map +1 -0
  232. package/dist/esm/editor/index.d.ts +14 -0
  233. package/dist/esm/editor/index.d.ts.map +1 -0
  234. package/dist/esm/editor/index.js +14 -0
  235. package/dist/esm/editor/index.js.map +1 -0
  236. package/dist/esm/editor/renderSafeNodes.d.ts +4 -0
  237. package/dist/esm/editor/renderSafeNodes.d.ts.map +1 -0
  238. package/dist/esm/editor/renderSafeNodes.js +33 -0
  239. package/dist/esm/editor/renderSafeNodes.js.map +1 -0
  240. package/dist/esm/editor/safeUrls.d.ts +3 -0
  241. package/dist/esm/editor/safeUrls.d.ts.map +1 -0
  242. package/dist/esm/editor/safeUrls.js +41 -0
  243. package/dist/esm/editor/safeUrls.js.map +1 -0
  244. package/dist/esm/editor/sanitizeHtml.d.ts +3 -0
  245. package/dist/esm/editor/sanitizeHtml.d.ts.map +1 -0
  246. package/dist/esm/editor/sanitizeHtml.js +138 -0
  247. package/dist/esm/editor/sanitizeHtml.js.map +1 -0
  248. package/dist/esm/editor/serializeSafeNodes.d.ts +3 -0
  249. package/dist/esm/editor/serializeSafeNodes.d.ts.map +1 -0
  250. package/dist/esm/editor/serializeSafeNodes.js +31 -0
  251. package/dist/esm/editor/serializeSafeNodes.js.map +1 -0
  252. package/dist/esm/editor/toolbarLayout.d.ts +2 -0
  253. package/dist/esm/editor/toolbarLayout.d.ts.map +1 -0
  254. package/dist/esm/editor/toolbarLayout.js +33 -0
  255. package/dist/esm/editor/toolbarLayout.js.map +1 -0
  256. package/dist/esm/editor/useQuillEditor.d.ts +4 -0
  257. package/dist/esm/editor/useQuillEditor.d.ts.map +1 -0
  258. package/dist/esm/editor/useQuillEditor.js +135 -0
  259. package/dist/esm/editor/useQuillEditor.js.map +1 -0
  260. package/dist/esm/file/FileGallery.stories.d.ts +19 -0
  261. package/dist/esm/file/FileGallery.stories.d.ts.map +1 -0
  262. package/dist/esm/file/FileGallery.stories.js +23 -0
  263. package/dist/esm/file/FileGallery.stories.js.map +1 -0
  264. package/dist/esm/file/FileUploadContext.d.ts +7 -0
  265. package/dist/esm/file/FileUploadContext.d.ts.map +1 -0
  266. package/dist/esm/file/FileUploadContext.js +11 -0
  267. package/dist/esm/file/FileUploadContext.js.map +1 -0
  268. package/dist/esm/file/FileUploadHandler.d.ts +4 -0
  269. package/dist/esm/file/FileUploadHandler.d.ts.map +1 -0
  270. package/dist/esm/file/FileUploadHandler.js +2 -0
  271. package/dist/esm/file/FileUploadHandler.js.map +1 -0
  272. package/dist/esm/file/FileUploadHandlerProvider.d.ts +9 -0
  273. package/dist/esm/file/FileUploadHandlerProvider.d.ts.map +1 -0
  274. package/dist/esm/file/FileUploadHandlerProvider.js +23 -0
  275. package/dist/esm/file/FileUploadHandlerProvider.js.map +1 -0
  276. package/dist/esm/file/FileUploadMode.d.ts +6 -0
  277. package/dist/esm/file/FileUploadMode.d.ts.map +1 -0
  278. package/dist/esm/file/FileUploadMode.js +11 -0
  279. package/dist/esm/file/FileUploadMode.js.map +1 -0
  280. package/dist/esm/file/PrimeFileUpload.d.ts +3 -0
  281. package/dist/esm/file/PrimeFileUpload.d.ts.map +1 -0
  282. package/dist/esm/file/PrimeFileUpload.js +159 -0
  283. package/dist/esm/file/PrimeFileUpload.js.map +1 -0
  284. package/dist/esm/file/UploadStatus.d.ts +5 -0
  285. package/dist/esm/file/UploadStatus.d.ts.map +1 -0
  286. package/dist/esm/file/UploadStatus.js +2 -0
  287. package/dist/esm/file/UploadStatus.js.map +1 -0
  288. package/dist/esm/file/UploadTarget.d.ts +8 -0
  289. package/dist/esm/file/UploadTarget.d.ts.map +1 -0
  290. package/dist/esm/file/UploadTarget.js +2 -0
  291. package/dist/esm/file/UploadTarget.js.map +1 -0
  292. package/dist/esm/file/index.d.ts +7 -0
  293. package/dist/esm/file/index.d.ts.map +1 -0
  294. package/dist/esm/file/index.js +7 -0
  295. package/dist/esm/file/index.js.map +1 -0
  296. package/dist/esm/file/postFiles.d.ts +2 -0
  297. package/dist/esm/file/postFiles.d.ts.map +1 -0
  298. package/dist/esm/file/postFiles.js +29 -0
  299. package/dist/esm/file/postFiles.js.map +1 -0
  300. package/dist/esm/file/resolveUploadTarget.d.ts +3 -0
  301. package/dist/esm/file/resolveUploadTarget.d.ts.map +1 -0
  302. package/dist/esm/file/resolveUploadTarget.js +66 -0
  303. package/dist/esm/file/resolveUploadTarget.js.map +1 -0
  304. package/dist/esm/file/useUploadSession.d.ts +10 -0
  305. package/dist/esm/file/useUploadSession.d.ts.map +1 -0
  306. package/dist/esm/file/useUploadSession.js +60 -0
  307. package/dist/esm/file/useUploadSession.js.map +1 -0
  308. package/dist/esm/form/FormGallery.stories.d.ts.map +1 -1
  309. package/dist/esm/form/FormGallery.stories.js +1 -0
  310. package/dist/esm/form/FormGallery.stories.js.map +1 -1
  311. package/dist/esm/index.d.ts +2 -0
  312. package/dist/esm/index.d.ts.map +1 -1
  313. package/dist/esm/index.js +16 -1
  314. package/dist/esm/index.js.map +1 -1
  315. package/dist/esm/legacyEnumerationChoices.d.ts +3 -0
  316. package/dist/esm/legacyEnumerationChoices.d.ts.map +1 -0
  317. package/dist/esm/legacyEnumerationChoices.js +37 -0
  318. package/dist/esm/legacyEnumerationChoices.js.map +1 -0
  319. package/dist/esm/loadQuill/index.d.ts +3 -0
  320. package/dist/esm/loadQuill/index.d.ts.map +1 -0
  321. package/dist/esm/loadQuill/index.js +20 -0
  322. package/dist/esm/loadQuill/index.js.map +1 -0
  323. package/dist/esm/primeReactComponents.d.ts.map +1 -1
  324. package/dist/esm/primeReactComponents.js +10 -0
  325. package/dist/esm/primeReactComponents.js.map +1 -1
  326. package/dist/esm/primeReactDescriptors.d.ts.map +1 -1
  327. package/dist/esm/primeReactDescriptors.js +243 -0
  328. package/dist/esm/primeReactDescriptors.js.map +1 -1
  329. package/dist/esm/primeReactPackage.js +4 -0
  330. package/dist/esm/primeReactPackage.js.map +1 -1
  331. package/dist/esm/resolveEnumeration.d.ts +3 -0
  332. package/dist/esm/resolveEnumeration.d.ts.map +1 -0
  333. package/dist/esm/resolveEnumeration.js +53 -0
  334. package/dist/esm/resolveEnumeration.js.map +1 -0
  335. package/dist/esm/treeNodes.d.ts +2 -1
  336. package/dist/esm/treeNodes.d.ts.map +1 -1
  337. package/dist/esm/treeNodes.js +42 -8
  338. package/dist/esm/treeNodes.js.map +1 -1
  339. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  340. package/dist/esm/useResettingState.d.ts +3 -0
  341. package/dist/esm/useResettingState.d.ts.map +1 -0
  342. package/dist/esm/useResettingState.js +45 -0
  343. package/dist/esm/useResettingState.js.map +1 -0
  344. package/editor/PrimeEditor.tsx +83 -0
  345. package/editor/QuillConstructor.ts +8 -0
  346. package/editor/QuillEditorOptions.ts +29 -0
  347. package/editor/QuillEditorState.ts +14 -0
  348. package/editor/QuillInstance.ts +27 -0
  349. package/editor/QuillLoader.ts +13 -0
  350. package/editor/QuillLoaderContext.ts +8 -0
  351. package/editor/QuillLoaderProvider.tsx +24 -0
  352. package/editor/QuillOptions.ts +10 -0
  353. package/editor/SafeElement.ts +15 -0
  354. package/editor/SafeNode.ts +7 -0
  355. package/editor/applyHtml.ts +21 -0
  356. package/editor/characterCount.ts +9 -0
  357. package/editor/htmlToPlainText.ts +74 -0
  358. package/editor/index.ts +16 -0
  359. package/editor/renderSafeNodes.tsx +26 -0
  360. package/editor/safeUrls.ts +43 -0
  361. package/editor/sanitizeHtml.ts +94 -0
  362. package/editor/serializeSafeNodes.ts +26 -0
  363. package/editor/toolbarLayout.ts +10 -0
  364. package/editor/useQuillEditor.ts +114 -0
  365. package/file/FileGallery.stories.tsx +32 -0
  366. package/file/FileUploadContext.ts +17 -0
  367. package/file/FileUploadHandler.ts +15 -0
  368. package/file/FileUploadHandlerProvider.tsx +33 -0
  369. package/file/FileUploadMode.ts +9 -0
  370. package/file/PrimeFileUpload.tsx +129 -0
  371. package/file/UploadStatus.ts +9 -0
  372. package/file/UploadTarget.ts +12 -0
  373. package/file/index.ts +9 -0
  374. package/file/postFiles.ts +23 -0
  375. package/file/resolveUploadTarget.ts +61 -0
  376. package/file/useUploadSession.ts +67 -0
  377. package/form/FormGallery.stories.tsx +1 -0
  378. package/index.ts +2 -0
  379. package/legacyEnumerationChoices.ts +35 -0
  380. package/loadQuill/index.ts +21 -0
  381. package/package.json +17 -7
  382. package/primeReactComponents.ts +8 -0
  383. package/primeReactDescriptors.ts +63 -0
  384. package/primeReactPackage.ts +2 -2
  385. package/primeReactTheme.css +69 -0
  386. package/resolveEnumeration.ts +50 -0
  387. package/treeNodes.ts +44 -6
  388. package/useResettingState.ts +34 -0
@@ -0,0 +1,3 @@
1
+ import { QuillInstance } from './QuillInstance';
2
+ export declare function applyHtml(quill: QuillInstance, html: string): void;
3
+ //# sourceMappingURL=applyHtml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyHtml.d.ts","sourceRoot":"","sources":["../../../editor/applyHtml.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAehD,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAElE"}
@@ -0,0 +1,23 @@
1
+ import { sanitizeHtml } from './sanitizeHtml.js';
2
+ import { serializeSafeNodes } from './serializeSafeNodes.js';
3
+
4
+ // Copyright (c) Cratis. All rights reserved.
5
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
6
+ /**
7
+ * Puts authored HTML into a Quill editor, silently.
8
+ *
9
+ * The HTML first goes through the allowlist, and what is left is converted by Quill's clipboard into a Delta
10
+ * that `setContents` applies. The authored string is never assigned to `innerHTML`, so nothing in it can run;
11
+ * and because the change is `'silent'` it raises no `text-change`, so loading a document is not reported as
12
+ * the user editing it.
13
+ *
14
+ * @param quill The editor.
15
+ * @param html The authored HTML.
16
+ */ function applyHtml(quill, html) {
17
+ quill.setContents(quill.clipboard.convert({
18
+ html: serializeSafeNodes(sanitizeHtml(html))
19
+ }), 'silent');
20
+ }
21
+
22
+ export { applyHtml };
23
+ //# sourceMappingURL=applyHtml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyHtml.js","sources":["../../../editor/applyHtml.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { QuillInstance } from './QuillInstance';\nimport { sanitizeHtml } from './sanitizeHtml';\nimport { serializeSafeNodes } from './serializeSafeNodes';\n\n/**\n * Puts authored HTML into a Quill editor, silently.\n *\n * The HTML first goes through the allowlist, and what is left is converted by Quill's clipboard into a Delta\n * that `setContents` applies. The authored string is never assigned to `innerHTML`, so nothing in it can run;\n * and because the change is `'silent'` it raises no `text-change`, so loading a document is not reported as\n * the user editing it.\n *\n * @param quill The editor.\n * @param html The authored HTML.\n */\nexport function applyHtml(quill: QuillInstance, html: string): void {\n quill.setContents(quill.clipboard.convert({ html: serializeSafeNodes(sanitizeHtml(html)) }), 'silent');\n}\n"],"names":["applyHtml","quill","html","setContents","clipboard","convert","serializeSafeNodes","sanitizeHtml"],"mappings":";;;AAAA;AACA;AAMA;;;;;;;;;;AAUC,IACM,SAASA,SAAAA,CAAUC,KAAoB,EAAEC,IAAY,EAAA;AACxDD,IAAAA,KAAAA,CAAME,WAAW,CAACF,KAAAA,CAAMG,SAAS,CAACC,OAAO,CAAC;AAAEH,QAAAA,IAAAA,EAAMI,mBAAmBC,YAAAA,CAAaL,IAAAA,CAAAA;KAAO,CAAA,EAAI,QAAA,CAAA;AACjG;;"}
@@ -0,0 +1,3 @@
1
+ import { QuillInstance } from './QuillInstance';
2
+ export declare function characterCount(quill: QuillInstance): number;
3
+ //# sourceMappingURL=characterCount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"characterCount.d.ts","sourceRoot":"","sources":["../../../editor/characterCount.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAE3D"}
@@ -0,0 +1,8 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+ /** The number of characters of text in the editor, not counting the newline Quill always ends with. */ function characterCount(quill) {
4
+ return Math.max(quill.getText().length - 1, 0);
5
+ }
6
+
7
+ export { characterCount };
8
+ //# sourceMappingURL=characterCount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"characterCount.js","sources":["../../../editor/characterCount.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { QuillInstance } from './QuillInstance';\n\n/** The number of characters of text in the editor, not counting the newline Quill always ends with. */\nexport function characterCount(quill: QuillInstance): number {\n return Math.max(quill.getText().length - 1, 0);\n}\n"],"names":["characterCount","quill","Math","max","getText","length"],"mappings":"AAAA;AACA;AAIA,wGACO,SAASA,cAAAA,CAAeC,KAAoB,EAAA;IAC/C,OAAOC,IAAAA,CAAKC,GAAG,CAACF,KAAAA,CAAMG,OAAO,EAAA,CAAGC,MAAM,GAAG,CAAA,EAAG,CAAA,CAAA;AAChD;;"}
@@ -0,0 +1,2 @@
1
+ export declare function htmlToPlainText(html: string): string;
2
+ //# sourceMappingURL=htmlToPlainText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"htmlToPlainText.d.ts","sourceRoot":"","sources":["../../../editor/htmlToPlainText.ts"],"names":[],"mappings":"AAsBA,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA2CpD"}
@@ -0,0 +1,99 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+ /** Elements dropped together with their content, as `sanitizeHtml` does. */ const discardedWithContent = new Set([
4
+ 'script',
5
+ 'style',
6
+ 'template',
7
+ 'noscript',
8
+ 'iframe',
9
+ 'object',
10
+ 'embed',
11
+ 'svg',
12
+ 'math',
13
+ 'textarea',
14
+ 'title',
15
+ 'head'
16
+ ]);
17
+ /** Elements after which a line break reads naturally. */ const breaking = new Set([
18
+ 'p',
19
+ 'div',
20
+ 'br',
21
+ 'hr',
22
+ 'li',
23
+ 'tr',
24
+ 'blockquote',
25
+ 'pre',
26
+ 'h1',
27
+ 'h2',
28
+ 'h3',
29
+ 'h4',
30
+ 'h5',
31
+ 'h6'
32
+ ]);
33
+ const namedEntities = {
34
+ amp: '&',
35
+ lt: '<',
36
+ gt: '>',
37
+ quot: '"',
38
+ apos: "'",
39
+ nbsp: ' '
40
+ };
41
+ /**
42
+ * Reads authored HTML as plain text, without a DOM.
43
+ *
44
+ * This is what server rendering shows, where there is no `DOMParser` to build safe markup with. The result
45
+ * is only ever rendered as text, which React escapes, so it cannot carry markup however the input is built.
46
+ * It scans once, left to right: tags are dropped, script, style and similar elements go with their content,
47
+ * and block elements become line breaks.
48
+ *
49
+ * @param html The authored HTML.
50
+ * @returns The text, with line breaks between blocks.
51
+ */ function htmlToPlainText(html) {
52
+ const lower = html.toLowerCase();
53
+ let text = '';
54
+ let position = 0;
55
+ while(position < html.length){
56
+ const open = html.indexOf('<', position);
57
+ if (open === -1) {
58
+ text += html.slice(position);
59
+ break;
60
+ }
61
+ text += html.slice(position, open);
62
+ if (!/[a-z/!?]/i.test(html[open + 1] ?? '')) {
63
+ text += '<';
64
+ position = open + 1;
65
+ continue;
66
+ }
67
+ if (lower.startsWith('<!--', open)) {
68
+ const close = html.indexOf('-->', open + 4);
69
+ position = close === -1 ? html.length : close + 3;
70
+ continue;
71
+ }
72
+ const close = html.indexOf('>', open);
73
+ if (close === -1) {
74
+ text += html.slice(open);
75
+ break;
76
+ }
77
+ const name = /^<\/?([a-z][a-z0-9]*)/.exec(lower.slice(open, close + 1))?.[1];
78
+ position = close + 1;
79
+ if (name === undefined) continue;
80
+ if (lower[open + 1] !== '/' && discardedWithContent.has(name)) {
81
+ const end = lower.indexOf(`</${name}`, position);
82
+ const endClose = end === -1 ? -1 : html.indexOf('>', end);
83
+ position = endClose === -1 ? html.length : endClose + 1;
84
+ } else if (breaking.has(name) && (lower[open + 1] === '/' || name === 'br' || name === 'hr')) {
85
+ text += '\n';
86
+ }
87
+ }
88
+ return decodeEntities(text).replace(/\n{3,}/g, '\n\n').trim();
89
+ }
90
+ function decodeEntities(text) {
91
+ return text.replace(/&(#x[0-9a-f]{1,6}|#[0-9]{1,7}|[a-z]+);/gi, (match, entity)=>{
92
+ if (entity[0] !== '#') return namedEntities[entity.toLowerCase()] ?? match;
93
+ const code = entity[1].toLowerCase() === 'x' ? parseInt(entity.slice(2), 16) : parseInt(entity.slice(1), 10);
94
+ return code > 0 && code <= 0x10ffff && !(code >= 0xd800 && code <= 0xdfff) ? String.fromCodePoint(code) : match;
95
+ });
96
+ }
97
+
98
+ export { htmlToPlainText };
99
+ //# sourceMappingURL=htmlToPlainText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"htmlToPlainText.js","sources":["../../../editor/htmlToPlainText.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/** Elements dropped together with their content, as `sanitizeHtml` does. */\nconst discardedWithContent = new Set(['script', 'style', 'template', 'noscript', 'iframe', 'object', 'embed', 'svg', 'math', 'textarea', 'title', 'head']);\n\n/** Elements after which a line break reads naturally. */\nconst breaking = new Set(['p', 'div', 'br', 'hr', 'li', 'tr', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6']);\n\nconst namedEntities: Record<string, string> = { amp: '&', lt: '<', gt: '>', quot: '\"', apos: \"'\", nbsp: ' ' };\n\n/**\n * Reads authored HTML as plain text, without a DOM.\n *\n * This is what server rendering shows, where there is no `DOMParser` to build safe markup with. The result\n * is only ever rendered as text, which React escapes, so it cannot carry markup however the input is built.\n * It scans once, left to right: tags are dropped, script, style and similar elements go with their content,\n * and block elements become line breaks.\n *\n * @param html The authored HTML.\n * @returns The text, with line breaks between blocks.\n */\nexport function htmlToPlainText(html: string): string {\n const lower = html.toLowerCase();\n let text = '';\n let position = 0;\n while (position < html.length) {\n const open = html.indexOf('<', position);\n if (open === -1) {\n text += html.slice(position);\n break;\n }\n\n text += html.slice(position, open);\n if (!/[a-z/!?]/i.test(html[open + 1] ?? '')) {\n text += '<';\n position = open + 1;\n continue;\n }\n\n if (lower.startsWith('<!--', open)) {\n const close = html.indexOf('-->', open + 4);\n position = close === -1 ? html.length : close + 3;\n continue;\n }\n\n const close = html.indexOf('>', open);\n if (close === -1) {\n text += html.slice(open);\n break;\n }\n\n const name = /^<\\/?([a-z][a-z0-9]*)/.exec(lower.slice(open, close + 1))?.[1];\n position = close + 1;\n if (name === undefined) continue;\n if (lower[open + 1] !== '/' && discardedWithContent.has(name)) {\n const end = lower.indexOf(`</${name}`, position);\n const endClose = end === -1 ? -1 : html.indexOf('>', end);\n position = endClose === -1 ? html.length : endClose + 1;\n } else if (breaking.has(name) && (lower[open + 1] === '/' || name === 'br' || name === 'hr')) {\n text += '\\n';\n }\n }\n\n return decodeEntities(text).replace(/\\n{3,}/g, '\\n\\n').trim();\n}\n\nfunction decodeEntities(text: string): string {\n return text.replace(/&(#x[0-9a-f]{1,6}|#[0-9]{1,7}|[a-z]+);/gi, (match, entity: string) => {\n if (entity[0] !== '#') return namedEntities[entity.toLowerCase()] ?? match;\n const code = entity[1].toLowerCase() === 'x' ? parseInt(entity.slice(2), 16) : parseInt(entity.slice(1), 10);\n return code > 0 && code <= 0x10ffff && !(code >= 0xd800 && code <= 0xdfff) ? String.fromCodePoint(code) : match;\n });\n}\n"],"names":["discardedWithContent","Set","breaking","namedEntities","amp","lt","gt","quot","apos","nbsp","htmlToPlainText","html","lower","toLowerCase","text","position","length","open","indexOf","slice","test","startsWith","close","name","exec","undefined","has","end","endClose","decodeEntities","replace","trim","match","entity","code","parseInt","String","fromCodePoint"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export * from './PrimeEditor';
2
+ export * from './QuillConstructor';
3
+ export * from './QuillInstance';
4
+ export * from './QuillLoader';
5
+ export * from './QuillLoaderProvider';
6
+ export * from './QuillOptions';
7
+ export * from './htmlToPlainText';
8
+ export * from './renderSafeNodes';
9
+ export * from './SafeElement';
10
+ export * from './SafeNode';
11
+ export * from './safeUrls';
12
+ export * from './sanitizeHtml';
13
+ export * from './serializeSafeNodes';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../editor/index.ts"],"names":[],"mappings":"AAGA,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,14 @@
1
+ export * from './PrimeEditor';
2
+ export * from './QuillConstructor';
3
+ export * from './QuillInstance';
4
+ export * from './QuillLoader';
5
+ export * from './QuillLoaderProvider';
6
+ export * from './QuillOptions';
7
+ export * from './htmlToPlainText';
8
+ export * from './renderSafeNodes';
9
+ export * from './SafeElement';
10
+ export * from './SafeNode';
11
+ export * from './safeUrls';
12
+ export * from './sanitizeHtml';
13
+ export * from './serializeSafeNodes';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../editor/index.ts"],"names":[],"mappings":"AAGA,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ReactNode } from 'react';
2
+ import { SafeNode } from './SafeNode';
3
+ export declare function renderSafeNodes(nodes: SafeNode[]): ReactNode[];
4
+ //# sourceMappingURL=renderSafeNodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderSafeNodes.d.ts","sourceRoot":"","sources":["../../../editor/renderSafeNodes.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAatC,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,CAQ9D"}
@@ -0,0 +1,33 @@
1
+ import { createElement } from 'react';
2
+
3
+ // Copyright (c) Cratis. All rights reserved.
4
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
5
+ const voidTags = new Set([
6
+ 'br',
7
+ 'hr',
8
+ 'img'
9
+ ]);
10
+ /**
11
+ * Renders safe nodes as React elements.
12
+ *
13
+ * Nothing is ever injected as markup: each node becomes an element created from the allowlisted tag name with
14
+ * the validated attributes, and text goes through React's escaping. Links are made `noopener noreferrer` and
15
+ * open in the same context.
16
+ *
17
+ * @param nodes The nodes `sanitizeHtml` returned.
18
+ */ function renderSafeNodes(nodes) {
19
+ return nodes.map((node, index)=>{
20
+ if (typeof node === 'string') return node;
21
+ const { class: className, ...attributes } = node.attributes;
22
+ const properties = {
23
+ key: String(index),
24
+ className,
25
+ ...attributes
26
+ };
27
+ if (node.tag === 'a') properties.rel = 'noopener noreferrer';
28
+ return /*#__PURE__*/ createElement(node.tag, properties, ...voidTags.has(node.tag) ? [] : renderSafeNodes(node.children));
29
+ });
30
+ }
31
+
32
+ export { renderSafeNodes };
33
+ //# sourceMappingURL=renderSafeNodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderSafeNodes.js","sources":["../../../editor/renderSafeNodes.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { createElement, ReactNode } from 'react';\nimport { SafeNode } from './SafeNode';\n\nconst voidTags = new Set(['br', 'hr', 'img']);\n\n/**\n * Renders safe nodes as React elements.\n *\n * Nothing is ever injected as markup: each node becomes an element created from the allowlisted tag name with\n * the validated attributes, and text goes through React's escaping. Links are made `noopener noreferrer` and\n * open in the same context.\n *\n * @param nodes The nodes `sanitizeHtml` returned.\n */\nexport function renderSafeNodes(nodes: SafeNode[]): ReactNode[] {\n return nodes.map((node, index) => {\n if (typeof node === 'string') return node;\n const { class: className, ...attributes } = node.attributes;\n const properties: Record<string, string | undefined> = { key: String(index), className, ...attributes };\n if (node.tag === 'a') properties.rel = 'noopener noreferrer';\n return createElement(node.tag, properties, ...(voidTags.has(node.tag) ? [] : renderSafeNodes(node.children)));\n });\n}\n"],"names":["voidTags","Set","renderSafeNodes","nodes","map","node","index","class","className","attributes","properties","key","String","tag","rel","createElement","has","children"],"mappings":";;AAAA;AACA;AAKA,MAAMA,QAAAA,GAAW,IAAIC,GAAAA,CAAI;AAAC,IAAA,IAAA;AAAM,IAAA,IAAA;AAAM,IAAA;AAAM,CAAA,CAAA;AAE5C;;;;;;;;IASO,SAASC,eAAAA,CAAgBC,KAAiB,EAAA;AAC7C,IAAA,OAAOA,KAAAA,CAAMC,GAAG,CAAC,CAACC,IAAAA,EAAMC,KAAAA,GAAAA;QACpB,IAAI,OAAOD,IAAAA,KAAS,QAAA,EAAU,OAAOA,IAAAA;QACrC,MAAM,EAAEE,OAAOC,SAAS,EAAE,GAAGC,UAAAA,EAAY,GAAGJ,KAAKI,UAAU;AAC3D,QAAA,MAAMC,UAAAA,GAAiD;AAAEC,YAAAA,GAAAA,EAAKC,MAAAA,CAAON,KAAAA,CAAAA;AAAQE,YAAAA,SAAAA;AAAW,YAAA,GAAGC;AAAW,SAAA;AACtG,QAAA,IAAIJ,KAAKQ,GAAG,KAAK,GAAA,EAAKH,UAAAA,CAAWI,GAAG,GAAG,qBAAA;AACvC,QAAA,qBAAOC,aAAAA,CAAcV,IAAAA,CAAKQ,GAAG,EAAEH,eAAgBV,QAAAA,CAASgB,GAAG,CAACX,IAAAA,CAAKQ,GAAG,CAAA,GAAI,EAAE,GAAGX,eAAAA,CAAgBG,KAAKY,QAAQ,CAAA,CAAA;AAC9G,IAAA,CAAA,CAAA;AACJ;;"}
@@ -0,0 +1,3 @@
1
+ export declare function safeLinkUrl(value: string): string | undefined;
2
+ export declare function safeImageUrl(value: string): string | undefined;
3
+ //# sourceMappingURL=safeUrls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safeUrls.d.ts","sourceRoot":"","sources":["../../../editor/safeUrls.ts"],"names":[],"mappings":"AAqBA,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ7D;AAUD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG9D"}
@@ -0,0 +1,41 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+ /** Schemes a link may use. Anything else, `javascript:` and `data:` above all, is dropped. */ const linkProtocols = new Set([
4
+ 'http:',
5
+ 'https:',
6
+ 'mailto:',
7
+ 'tel:'
8
+ ]);
9
+ /** The only images that are kept: small raster data URLs. A remote image is a request made just by rendering. */ const rasterDataUrl = /^data:image\/(png|jpeg|gif|webp);base64,[a-z0-9+/]+={0,2}$/i;
10
+ /** Resolved against, to learn which scheme a browser would act on. It is never sent to. */ const placeholderOrigin = 'https://editor.invalid';
11
+ /**
12
+ * Returns a link target a browser may follow, or `undefined`.
13
+ *
14
+ * Browsers strip tabs and newlines from inside a scheme, so the address is judged by what `URL` resolves it to
15
+ * and not by its text: `java\tscript:` is a `javascript:` link. Relative links and fragments resolve against
16
+ * an http origin and are kept.
17
+ *
18
+ * @param value The authored `href`.
19
+ */ function safeLinkUrl(value) {
20
+ const trimmed = value.trim();
21
+ if (trimmed === '') return undefined;
22
+ try {
23
+ return linkProtocols.has(new URL(trimmed, placeholderOrigin).protocol) ? trimmed : undefined;
24
+ } catch {
25
+ return undefined;
26
+ }
27
+ }
28
+ /**
29
+ * Returns an image source that may be rendered, or `undefined`.
30
+ *
31
+ * Only base64 PNG, JPEG, GIF and WebP data URLs pass. SVG is refused because it can carry script, and an
32
+ * `http(s)` image is refused because rendering it would contact a server the author named.
33
+ *
34
+ * @param value The authored `src`.
35
+ */ function safeImageUrl(value) {
36
+ const trimmed = value.trim();
37
+ return rasterDataUrl.test(trimmed) ? trimmed : undefined;
38
+ }
39
+
40
+ export { safeImageUrl, safeLinkUrl };
41
+ //# sourceMappingURL=safeUrls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safeUrls.js","sources":["../../../editor/safeUrls.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/** Schemes a link may use. Anything else, `javascript:` and `data:` above all, is dropped. */\nconst linkProtocols = new Set(['http:', 'https:', 'mailto:', 'tel:']);\n\n/** The only images that are kept: small raster data URLs. A remote image is a request made just by rendering. */\nconst rasterDataUrl = /^data:image\\/(png|jpeg|gif|webp);base64,[a-z0-9+/]+={0,2}$/i;\n\n/** Resolved against, to learn which scheme a browser would act on. It is never sent to. */\nconst placeholderOrigin = 'https://editor.invalid';\n\n/**\n * Returns a link target a browser may follow, or `undefined`.\n *\n * Browsers strip tabs and newlines from inside a scheme, so the address is judged by what `URL` resolves it to\n * and not by its text: `java\\tscript:` is a `javascript:` link. Relative links and fragments resolve against\n * an http origin and are kept.\n *\n * @param value The authored `href`.\n */\nexport function safeLinkUrl(value: string): string | undefined {\n const trimmed = value.trim();\n if (trimmed === '') return undefined;\n try {\n return linkProtocols.has(new URL(trimmed, placeholderOrigin).protocol) ? trimmed : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Returns an image source that may be rendered, or `undefined`.\n *\n * Only base64 PNG, JPEG, GIF and WebP data URLs pass. SVG is refused because it can carry script, and an\n * `http(s)` image is refused because rendering it would contact a server the author named.\n *\n * @param value The authored `src`.\n */\nexport function safeImageUrl(value: string): string | undefined {\n const trimmed = value.trim();\n return rasterDataUrl.test(trimmed) ? trimmed : undefined;\n}\n"],"names":["linkProtocols","Set","rasterDataUrl","placeholderOrigin","safeLinkUrl","value","trimmed","trim","undefined","has","URL","protocol","safeImageUrl","test"],"mappings":"AAAA;AACA;AAEA,+FACA,MAAMA,aAAAA,GAAgB,IAAIC,GAAAA,CAAI;AAAC,IAAA,OAAA;AAAS,IAAA,QAAA;AAAU,IAAA,SAAA;AAAW,IAAA;AAAO,CAAA,CAAA;AAEpE,kHACA,MAAMC,aAAAA,GAAgB,6DAAA;AAEtB,4FACA,MAAMC,iBAAAA,GAAoB,wBAAA;AAE1B;;;;;;;;IASO,SAASC,WAAAA,CAAYC,KAAa,EAAA;IACrC,MAAMC,OAAAA,GAAUD,MAAME,IAAI,EAAA;IAC1B,IAAID,OAAAA,KAAY,IAAI,OAAOE,SAAAA;IAC3B,IAAI;QACA,OAAOR,aAAAA,CAAcS,GAAG,CAAC,IAAIC,IAAIJ,OAAAA,EAASH,iBAAAA,CAAAA,CAAmBQ,QAAQ,CAAA,GAAIL,OAAAA,GAAUE,SAAAA;AACvF,IAAA,CAAA,CAAE,OAAM;QACJ,OAAOA,SAAAA;AACX,IAAA;AACJ;AAEA;;;;;;;IAQO,SAASI,YAAAA,CAAaP,KAAa,EAAA;IACtC,MAAMC,OAAAA,GAAUD,MAAME,IAAI,EAAA;AAC1B,IAAA,OAAOL,aAAAA,CAAcW,IAAI,CAACP,OAAAA,CAAAA,GAAWA,OAAAA,GAAUE,SAAAA;AACnD;;"}
@@ -0,0 +1,3 @@
1
+ import { SafeNode } from './SafeNode';
2
+ export declare function sanitizeHtml(html: string): SafeNode[];
3
+ //# sourceMappingURL=sanitizeHtml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitizeHtml.d.ts","sourceRoot":"","sources":["../../../editor/sanitizeHtml.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAuCtC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAGrD"}
@@ -0,0 +1,138 @@
1
+ import { safeLinkUrl, safeImageUrl } from './safeUrls.js';
2
+
3
+ // Copyright (c) Cratis. All rights reserved.
4
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
5
+ /** Elements that are kept. Every other element is unwrapped: its children stay, the element does not. */ const keptTags = new Set([
6
+ 'p',
7
+ 'div',
8
+ 'span',
9
+ 'br',
10
+ 'hr',
11
+ 'strong',
12
+ 'b',
13
+ 'em',
14
+ 'i',
15
+ 'u',
16
+ 's',
17
+ 'strike',
18
+ 'del',
19
+ 'sub',
20
+ 'sup',
21
+ 'code',
22
+ 'pre',
23
+ 'blockquote',
24
+ 'h1',
25
+ 'h2',
26
+ 'h3',
27
+ 'h4',
28
+ 'h5',
29
+ 'h6',
30
+ 'ul',
31
+ 'ol',
32
+ 'li',
33
+ 'a',
34
+ 'img'
35
+ ]);
36
+ /** Elements whose content is never text to show - script, style, embedded documents and form controls. */ const discardedWithContent = new Set([
37
+ 'script',
38
+ 'style',
39
+ 'template',
40
+ 'noscript',
41
+ 'iframe',
42
+ 'frame',
43
+ 'frameset',
44
+ 'object',
45
+ 'embed',
46
+ 'applet',
47
+ 'svg',
48
+ 'math',
49
+ 'audio',
50
+ 'video',
51
+ 'canvas',
52
+ 'textarea',
53
+ 'select',
54
+ 'option',
55
+ 'button',
56
+ 'input',
57
+ 'form',
58
+ 'head',
59
+ 'title',
60
+ 'meta',
61
+ 'link',
62
+ 'base'
63
+ ]);
64
+ /** Quill's own formatting classes. They name CSS rules, so a fixed vocabulary is safe and anything else is not kept. */ const formattingClass = /^ql-(align-(center|right|justify)|indent-[1-8]|size-(small|large|huge)|font-(serif|monospace)|direction-rtl)$/;
65
+ const listKinds = new Set([
66
+ 'bullet',
67
+ 'ordered',
68
+ 'checked',
69
+ 'unchecked'
70
+ ]);
71
+ /** Deeper than any real document nests. Anything below is flattened to its text. */ const maximumDepth = 64;
72
+ /**
73
+ * Reduces authored HTML to the part that is safe to render.
74
+ *
75
+ * It parses with `DOMParser`, which builds an inert document: nothing in it loads, runs or paints while it is
76
+ * walked. The walk then keeps only elements from an allowlist and, on those, only the attributes listed
77
+ * here - a validated `href` or image `src`, Quill's formatting classes and list kind. Event handlers,
78
+ * `style`, `srcdoc`, unknown elements' attributes and every URL that is not allowed are dropped, and script,
79
+ * style, SVG, frames and form controls are removed together with their content.
80
+ *
81
+ * The result is plain data. Render it with `renderSafeNodes` or serialize it with `serializeSafeNodes`; the
82
+ * authored string itself is never put into the document.
83
+ *
84
+ * @param html The authored HTML.
85
+ * @returns The safe nodes.
86
+ * @throws When there is no `DOMParser`. Use `htmlToPlainText` where there is no DOM.
87
+ */ function sanitizeHtml(html) {
88
+ if (typeof DOMParser === 'undefined') throw new Error('Sanitizing HTML needs a DOM. Use htmlToPlainText where there is none.');
89
+ return sanitizeChildren(new DOMParser().parseFromString(html, 'text/html').body, 0);
90
+ }
91
+ function sanitizeChildren(parent, depth) {
92
+ const nodes = [];
93
+ for (const child of Array.from(parent.childNodes)){
94
+ if (child.nodeType === Node.TEXT_NODE) {
95
+ if (child.textContent !== null && child.textContent !== '') nodes.push(child.textContent);
96
+ } else if (child.nodeType === Node.ELEMENT_NODE) {
97
+ nodes.push(...sanitizeElement(child, depth));
98
+ }
99
+ }
100
+ return nodes;
101
+ }
102
+ function sanitizeElement(element, depth) {
103
+ const tag = element.tagName.toLowerCase();
104
+ if (discardedWithContent.has(tag)) return [];
105
+ if (depth >= maximumDepth) return [
106
+ element.textContent ?? ''
107
+ ];
108
+ const children = sanitizeChildren(element, depth + 1);
109
+ if (!keptTags.has(tag)) return children;
110
+ const attributes = keptAttributes(tag, element);
111
+ if (tag === 'img' && attributes.src === undefined) return [];
112
+ if (tag === 'a' && attributes.href === undefined) return children;
113
+ return [
114
+ {
115
+ tag,
116
+ attributes,
117
+ children
118
+ }
119
+ ];
120
+ }
121
+ function keptAttributes(tag, element) {
122
+ const attributes = {};
123
+ const href = tag === 'a' ? safeLinkUrl(element.getAttribute('href') ?? '') : undefined;
124
+ if (href !== undefined) attributes.href = href;
125
+ const source = tag === 'img' ? safeImageUrl(element.getAttribute('src') ?? '') : undefined;
126
+ if (source !== undefined) {
127
+ attributes.src = source;
128
+ attributes.alt = element.getAttribute('alt') ?? '';
129
+ }
130
+ const classes = (element.getAttribute('class') ?? '').split(/\s+/).filter((name)=>formattingClass.test(name));
131
+ if (classes.length > 0) attributes.class = classes.join(' ');
132
+ const listKind = element.getAttribute('data-list');
133
+ if (tag === 'li' && listKind !== null && listKinds.has(listKind)) attributes['data-list'] = listKind;
134
+ return attributes;
135
+ }
136
+
137
+ export { sanitizeHtml };
138
+ //# sourceMappingURL=sanitizeHtml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitizeHtml.js","sources":["../../../editor/sanitizeHtml.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { SafeElement } from './SafeElement';\nimport { SafeNode } from './SafeNode';\nimport { safeImageUrl, safeLinkUrl } from './safeUrls';\n\n/** Elements that are kept. Every other element is unwrapped: its children stay, the element does not. */\nconst keptTags = new Set([\n 'p', 'div', 'span', 'br', 'hr', 'strong', 'b', 'em', 'i', 'u', 's', 'strike', 'del', 'sub', 'sup', 'code', 'pre', 'blockquote',\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ul', 'ol', 'li', 'a', 'img',\n]);\n\n/** Elements whose content is never text to show - script, style, embedded documents and form controls. */\nconst discardedWithContent = new Set([\n 'script', 'style', 'template', 'noscript', 'iframe', 'frame', 'frameset', 'object', 'embed', 'applet', 'svg', 'math',\n 'audio', 'video', 'canvas', 'textarea', 'select', 'option', 'button', 'input', 'form', 'head', 'title', 'meta', 'link', 'base',\n]);\n\n/** Quill's own formatting classes. They name CSS rules, so a fixed vocabulary is safe and anything else is not kept. */\nconst formattingClass = /^ql-(align-(center|right|justify)|indent-[1-8]|size-(small|large|huge)|font-(serif|monospace)|direction-rtl)$/;\n\nconst listKinds = new Set(['bullet', 'ordered', 'checked', 'unchecked']);\n\n/** Deeper than any real document nests. Anything below is flattened to its text. */\nconst maximumDepth = 64;\n\n/**\n * Reduces authored HTML to the part that is safe to render.\n *\n * It parses with `DOMParser`, which builds an inert document: nothing in it loads, runs or paints while it is\n * walked. The walk then keeps only elements from an allowlist and, on those, only the attributes listed\n * here - a validated `href` or image `src`, Quill's formatting classes and list kind. Event handlers,\n * `style`, `srcdoc`, unknown elements' attributes and every URL that is not allowed are dropped, and script,\n * style, SVG, frames and form controls are removed together with their content.\n *\n * The result is plain data. Render it with `renderSafeNodes` or serialize it with `serializeSafeNodes`; the\n * authored string itself is never put into the document.\n *\n * @param html The authored HTML.\n * @returns The safe nodes.\n * @throws When there is no `DOMParser`. Use `htmlToPlainText` where there is no DOM.\n */\nexport function sanitizeHtml(html: string): SafeNode[] {\n if (typeof DOMParser === 'undefined') throw new Error('Sanitizing HTML needs a DOM. Use htmlToPlainText where there is none.');\n return sanitizeChildren(new DOMParser().parseFromString(html, 'text/html').body, 0);\n}\n\nfunction sanitizeChildren(parent: Node, depth: number): SafeNode[] {\n const nodes: SafeNode[] = [];\n for (const child of Array.from(parent.childNodes)) {\n if (child.nodeType === Node.TEXT_NODE) {\n if (child.textContent !== null && child.textContent !== '') nodes.push(child.textContent);\n } else if (child.nodeType === Node.ELEMENT_NODE) {\n nodes.push(...sanitizeElement(child as Element, depth));\n }\n }\n return nodes;\n}\n\nfunction sanitizeElement(element: Element, depth: number): SafeNode[] {\n const tag = element.tagName.toLowerCase();\n if (discardedWithContent.has(tag)) return [];\n if (depth >= maximumDepth) return [element.textContent ?? ''];\n\n const children = sanitizeChildren(element, depth + 1);\n if (!keptTags.has(tag)) return children;\n\n const attributes = keptAttributes(tag, element);\n if (tag === 'img' && attributes.src === undefined) return [];\n if (tag === 'a' && attributes.href === undefined) return children;\n return [{ tag, attributes, children } satisfies SafeElement];\n}\n\nfunction keptAttributes(tag: string, element: Element): Record<string, string> {\n const attributes: Record<string, string> = {};\n\n const href = tag === 'a' ? safeLinkUrl(element.getAttribute('href') ?? '') : undefined;\n if (href !== undefined) attributes.href = href;\n\n const source = tag === 'img' ? safeImageUrl(element.getAttribute('src') ?? '') : undefined;\n if (source !== undefined) {\n attributes.src = source;\n attributes.alt = element.getAttribute('alt') ?? '';\n }\n\n const classes = (element.getAttribute('class') ?? '').split(/\\s+/).filter(name => formattingClass.test(name));\n if (classes.length > 0) attributes.class = classes.join(' ');\n\n const listKind = element.getAttribute('data-list');\n if (tag === 'li' && listKind !== null && listKinds.has(listKind)) attributes['data-list'] = listKind;\n\n return attributes;\n}\n"],"names":["keptTags","Set","discardedWithContent","formattingClass","listKinds","maximumDepth","sanitizeHtml","html","DOMParser","Error","sanitizeChildren","parseFromString","body","parent","depth","nodes","child","Array","from","childNodes","nodeType","Node","TEXT_NODE","textContent","push","ELEMENT_NODE","sanitizeElement","element","tag","tagName","toLowerCase","has","children","attributes","keptAttributes","src","undefined","href","safeLinkUrl","getAttribute","source","safeImageUrl","alt","classes","split","filter","name","test","length","class","join","listKind"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { SafeNode } from './SafeNode';
2
+ export declare function serializeSafeNodes(nodes: SafeNode[]): string;
3
+ //# sourceMappingURL=serializeSafeNodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializeSafeNodes.d.ts","sourceRoot":"","sources":["../../../editor/serializeSafeNodes.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAgBtC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAM5D"}
@@ -0,0 +1,31 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+ const voidTags = new Set([
4
+ 'br',
5
+ 'hr',
6
+ 'img'
7
+ ]);
8
+ const escapes = {
9
+ '&': '&amp;',
10
+ '<': '&lt;',
11
+ '>': '&gt;',
12
+ '"': '&quot;'
13
+ };
14
+ const escape = (text)=>text.replace(/[&<>"]/g, (character)=>escapes[character]);
15
+ /**
16
+ * Writes safe nodes back out as an HTML string, for an editor that reads HTML.
17
+ *
18
+ * Text and attribute values are escaped, and only tags and attributes the allowlist produced are written, so
19
+ * the string can contain nothing the allowlist did not already accept.
20
+ *
21
+ * @param nodes The nodes `sanitizeHtml` returned.
22
+ */ function serializeSafeNodes(nodes) {
23
+ return nodes.map((node)=>{
24
+ if (typeof node === 'string') return escape(node);
25
+ const attributes = Object.entries(node.attributes).map(([name, value])=>` ${name}="${escape(value)}"`).join('');
26
+ return voidTags.has(node.tag) ? `<${node.tag}${attributes}>` : `<${node.tag}${attributes}>${serializeSafeNodes(node.children)}</${node.tag}>`;
27
+ }).join('');
28
+ }
29
+
30
+ export { serializeSafeNodes };
31
+ //# sourceMappingURL=serializeSafeNodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializeSafeNodes.js","sources":["../../../editor/serializeSafeNodes.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { SafeNode } from './SafeNode';\n\nconst voidTags = new Set(['br', 'hr', 'img']);\n\nconst escapes: Record<string, string> = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' };\n\nconst escape = (text: string) => text.replace(/[&<>\"]/g, character => escapes[character]);\n\n/**\n * Writes safe nodes back out as an HTML string, for an editor that reads HTML.\n *\n * Text and attribute values are escaped, and only tags and attributes the allowlist produced are written, so\n * the string can contain nothing the allowlist did not already accept.\n *\n * @param nodes The nodes `sanitizeHtml` returned.\n */\nexport function serializeSafeNodes(nodes: SafeNode[]): string {\n return nodes.map(node => {\n if (typeof node === 'string') return escape(node);\n const attributes = Object.entries(node.attributes).map(([name, value]) => ` ${name}=\"${escape(value)}\"`).join('');\n return voidTags.has(node.tag) ? `<${node.tag}${attributes}>` : `<${node.tag}${attributes}>${serializeSafeNodes(node.children)}</${node.tag}>`;\n }).join('');\n}\n"],"names":["voidTags","Set","escapes","escape","text","replace","character","serializeSafeNodes","nodes","map","node","attributes","Object","entries","name","value","join","has","tag","children"],"mappings":"AAAA;AACA;AAIA,MAAMA,QAAAA,GAAW,IAAIC,GAAAA,CAAI;AAAC,IAAA,IAAA;AAAM,IAAA,IAAA;AAAM,IAAA;AAAM,CAAA,CAAA;AAE5C,MAAMC,OAAAA,GAAkC;IAAE,GAAA,EAAK,OAAA;IAAS,GAAA,EAAK,MAAA;IAAQ,GAAA,EAAK,MAAA;IAAQ,GAAA,EAAK;AAAS,CAAA;AAEhG,MAAMC,MAAAA,GAAS,CAACC,IAAAA,GAAiBA,IAAAA,CAAKC,OAAO,CAAC,SAAA,EAAWC,CAAAA,SAAAA,GAAaJ,OAAO,CAACI,SAAAA,CAAU,CAAA;AAExF;;;;;;;IAQO,SAASC,kBAAAA,CAAmBC,KAAiB,EAAA;IAChD,OAAOA,KAAAA,CAAMC,GAAG,CAACC,CAAAA,IAAAA,GAAAA;AACb,QAAA,IAAI,OAAOA,IAAAA,KAAS,QAAA,EAAU,OAAOP,MAAAA,CAAOO,IAAAA,CAAAA;QAC5C,MAAMC,UAAAA,GAAaC,MAAAA,CAAOC,OAAO,CAACH,IAAAA,CAAKC,UAAU,CAAA,CAAEF,GAAG,CAAC,CAAC,CAACK,IAAAA,EAAMC,KAAAA,CAAM,GAAK,CAAC,CAAC,EAAED,IAAAA,CAAK,EAAE,EAAEX,MAAAA,CAAOY,KAAAA,CAAAA,CAAO,CAAC,CAAC,CAAA,CAAEC,IAAI,CAAC,EAAA,CAAA;AAC9G,QAAA,OAAOhB,QAAAA,CAASiB,GAAG,CAACP,IAAAA,CAAKQ,GAAG,CAAA,GAAI,CAAC,CAAC,EAAER,KAAKQ,GAAG,CAAA,EAAGP,UAAAA,CAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAED,KAAKQ,GAAG,CAAA,EAAGP,UAAAA,CAAW,CAAC,EAAEJ,kBAAAA,CAAmBG,IAAAA,CAAKS,QAAQ,CAAA,CAAE,EAAE,EAAET,IAAAA,CAAKQ,GAAG,CAAC,CAAC,CAAC;AACjJ,IAAA,CAAA,CAAA,CAAGF,IAAI,CAAC,EAAA,CAAA;AACZ;;"}
@@ -0,0 +1,2 @@
1
+ export declare const toolbarLayout: (string | Record<string, unknown>)[][];
2
+ //# sourceMappingURL=toolbarLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolbarLayout.d.ts","sourceRoot":"","sources":["../../../editor/toolbarLayout.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,aAAa,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,EAK/D,CAAC"}
@@ -0,0 +1,33 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+ /** The formats the toolbar offers. Content in other formats is still shown, but cannot be produced here. */ const toolbarLayout = [
4
+ [
5
+ 'bold',
6
+ 'italic',
7
+ 'underline'
8
+ ],
9
+ [
10
+ {
11
+ header: [
12
+ 1,
13
+ 2,
14
+ 3,
15
+ false
16
+ ]
17
+ }
18
+ ],
19
+ [
20
+ {
21
+ list: 'ordered'
22
+ },
23
+ {
24
+ list: 'bullet'
25
+ }
26
+ ],
27
+ [
28
+ 'link'
29
+ ]
30
+ ];
31
+
32
+ export { toolbarLayout };
33
+ //# sourceMappingURL=toolbarLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolbarLayout.js","sources":["../../../editor/toolbarLayout.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/** The formats the toolbar offers. Content in other formats is still shown, but cannot be produced here. */\nexport const toolbarLayout: (string | Record<string, unknown>)[][] = [\n ['bold', 'italic', 'underline'],\n [{ header: [1, 2, 3, false] }],\n [{ list: 'ordered' }, { list: 'bullet' }],\n ['link'],\n];\n"],"names":["toolbarLayout","header","list"],"mappings":"AAAA;AACA;AAEA,6GACO,MAAMA,aAAAA,GAAwD;AACjE,IAAA;AAAC,QAAA,MAAA;AAAQ,QAAA,QAAA;AAAU,QAAA;AAAY,KAAA;AAC/B,IAAA;AAAC,QAAA;YAAEC,MAAAA,EAAQ;AAAC,gBAAA,CAAA;AAAG,gBAAA,CAAA;AAAG,gBAAA,CAAA;AAAG,gBAAA;AAAM;AAAC;AAAE,KAAA;AAC9B,IAAA;AAAC,QAAA;YAAEC,IAAAA,EAAM;AAAU,SAAA;AAAG,QAAA;YAAEA,IAAAA,EAAM;AAAS;AAAE,KAAA;AACzC,IAAA;AAAC,QAAA;AAAO;;;"}
@@ -0,0 +1,4 @@
1
+ import { QuillEditorOptions } from './QuillEditorOptions';
2
+ import { QuillEditorState } from './QuillEditorState';
3
+ export declare function useQuillEditor(options: QuillEditorOptions): QuillEditorState;
4
+ //# sourceMappingURL=useQuillEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQuillEditor.d.ts","sourceRoot":"","sources":["../../../editor/useQuillEditor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAwBtD,wBAAgB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,gBAAgB,CAmF5E"}