@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,135 @@
1
+ import { useState, useRef, useEffect } from 'react';
2
+ import { applyHtml } from './applyHtml.js';
3
+ import { characterCount } from './characterCount.js';
4
+ import { toolbarLayout } from './toolbarLayout.js';
5
+
6
+ // Copyright (c) Cratis. All rights reserved.
7
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
8
+ const idle = {
9
+ ready: false,
10
+ failure: undefined,
11
+ characters: 0
12
+ };
13
+ /**
14
+ * Builds and owns a Quill editor inside an element React leaves alone.
15
+ *
16
+ * The editor is constructed once per loader and toolbar setting, in a container this hook creates and
17
+ * removes itself. React renders the host with no children, so a re-render can never wipe what Quill built -
18
+ * the failure of rendering the authored HTML as the host's children and then letting Quill take it over.
19
+ *
20
+ * Everything else is applied to the live editor without rebuilding it:
21
+ * - a changed `html` replaces the content silently, and only when the authored value really changed, so a
22
+ * user's edit survives an unrelated property change;
23
+ * - `editable`, the placeholder and the accessible name update in place;
24
+ * - the `text-change` listener is removed, and the toolbar and surface with the container, when the editor
25
+ * is rebuilt or the control unmounts.
26
+ *
27
+ * Only a user edit calls `onUserChange`.
28
+ */ function useQuillEditor(options) {
29
+ const { loader, host, html, showHeader, editable, placeholder, ariaLabel } = options;
30
+ const [state, setState] = useState(idle);
31
+ const quillReference = useRef(undefined);
32
+ const appliedHtml = useRef(html);
33
+ const latest = useRef(options);
34
+ latest.current = options;
35
+ useEffect(()=>{
36
+ const container = host.current;
37
+ if (loader === undefined || container === null) return undefined;
38
+ let disposed = false;
39
+ let dispose;
40
+ loader().then((loaded)=>{
41
+ if (disposed) return;
42
+ const Quill = typeof loaded === 'function' ? loaded : loaded.default;
43
+ const surface = container.ownerDocument.createElement('div');
44
+ container.appendChild(surface);
45
+ const quill = new Quill(surface, {
46
+ theme: 'snow',
47
+ modules: {
48
+ toolbar: showHeader ? toolbarLayout : false
49
+ },
50
+ placeholder: latest.current.placeholder,
51
+ readOnly: !latest.current.editable
52
+ });
53
+ applyHtml(quill, latest.current.html);
54
+ appliedHtml.current = latest.current.html;
55
+ const changed = (_delta, _previous, source)=>{
56
+ if (source === 'silent') return;
57
+ setState((current)=>({
58
+ ...current,
59
+ characters: characterCount(quill)
60
+ }));
61
+ if (source === 'user') latest.current.onUserChange();
62
+ };
63
+ quill.on('text-change', changed);
64
+ quillReference.current = quill;
65
+ dispose = ()=>{
66
+ quill.off('text-change', changed);
67
+ quillReference.current = undefined;
68
+ container.replaceChildren();
69
+ };
70
+ setState({
71
+ ready: true,
72
+ failure: undefined,
73
+ characters: characterCount(quill)
74
+ });
75
+ }).catch((error)=>{
76
+ if (!disposed) setState({
77
+ ...idle,
78
+ failure: error instanceof Error ? error.message : String(error)
79
+ });
80
+ });
81
+ return ()=>{
82
+ disposed = true;
83
+ dispose?.();
84
+ setState(idle);
85
+ };
86
+ }, [
87
+ loader,
88
+ host,
89
+ showHeader
90
+ ]);
91
+ useEffect(()=>{
92
+ const quill = quillReference.current;
93
+ if (!state.ready || quill === undefined || html === appliedHtml.current) return;
94
+ appliedHtml.current = html;
95
+ applyHtml(quill, html);
96
+ setState((current)=>({
97
+ ...current,
98
+ characters: characterCount(quill)
99
+ }));
100
+ }, [
101
+ html,
102
+ state.ready
103
+ ]);
104
+ useEffect(()=>{
105
+ const quill = quillReference.current;
106
+ if (!state.ready || quill === undefined) return;
107
+ quill.enable(editable);
108
+ quill.root.setAttribute('aria-readonly', String(!editable));
109
+ const toolbar = quill.getModule('toolbar');
110
+ toolbar?.container?.querySelectorAll('button, select').forEach((control)=>{
111
+ if (editable) control.removeAttribute('disabled');
112
+ else control.setAttribute('disabled', '');
113
+ });
114
+ }, [
115
+ editable,
116
+ state.ready
117
+ ]);
118
+ useEffect(()=>{
119
+ const quill = quillReference.current;
120
+ if (!state.ready || quill === undefined) return;
121
+ quill.root.setAttribute('role', 'textbox');
122
+ quill.root.setAttribute('aria-multiline', 'true');
123
+ quill.root.setAttribute('aria-label', ariaLabel);
124
+ if (placeholder === undefined) quill.root.removeAttribute('data-placeholder');
125
+ else quill.root.setAttribute('data-placeholder', placeholder);
126
+ }, [
127
+ ariaLabel,
128
+ placeholder,
129
+ state.ready
130
+ ]);
131
+ return state;
132
+ }
133
+
134
+ export { useQuillEditor };
135
+ //# sourceMappingURL=useQuillEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQuillEditor.js","sources":["../../../editor/useQuillEditor.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 { useEffect, useRef, useState } from 'react';\nimport { QuillConstructor } from './QuillConstructor';\nimport { QuillEditorOptions } from './QuillEditorOptions';\nimport { QuillEditorState } from './QuillEditorState';\nimport { QuillInstance } from './QuillInstance';\nimport { applyHtml } from './applyHtml';\nimport { characterCount } from './characterCount';\nimport { toolbarLayout } from './toolbarLayout';\n\nconst idle: QuillEditorState = { ready: false, failure: undefined, characters: 0 };\n\n/**\n * Builds and owns a Quill editor inside an element React leaves alone.\n *\n * The editor is constructed once per loader and toolbar setting, in a container this hook creates and\n * removes itself. React renders the host with no children, so a re-render can never wipe what Quill built -\n * the failure of rendering the authored HTML as the host's children and then letting Quill take it over.\n *\n * Everything else is applied to the live editor without rebuilding it:\n * - a changed `html` replaces the content silently, and only when the authored value really changed, so a\n * user's edit survives an unrelated property change;\n * - `editable`, the placeholder and the accessible name update in place;\n * - the `text-change` listener is removed, and the toolbar and surface with the container, when the editor\n * is rebuilt or the control unmounts.\n *\n * Only a user edit calls `onUserChange`.\n */\nexport function useQuillEditor(options: QuillEditorOptions): QuillEditorState {\n const { loader, host, html, showHeader, editable, placeholder, ariaLabel } = options;\n const [state, setState] = useState<QuillEditorState>(idle);\n const quillReference = useRef<QuillInstance | undefined>(undefined);\n const appliedHtml = useRef(html);\n const latest = useRef(options);\n latest.current = options;\n\n useEffect(() => {\n const container = host.current;\n if (loader === undefined || container === null) return undefined;\n\n let disposed = false;\n let dispose: (() => void) | undefined;\n\n loader().then(loaded => {\n if (disposed) return;\n const Quill: QuillConstructor = typeof loaded === 'function' ? loaded : loaded.default;\n const surface = container.ownerDocument.createElement('div');\n container.appendChild(surface);\n const quill = new Quill(surface, {\n theme: 'snow',\n modules: { toolbar: showHeader ? toolbarLayout : false },\n placeholder: latest.current.placeholder,\n readOnly: !latest.current.editable,\n });\n\n applyHtml(quill, latest.current.html);\n appliedHtml.current = latest.current.html;\n const changed = (_delta: unknown, _previous: unknown, source: string) => {\n if (source === 'silent') return;\n setState(current => ({ ...current, characters: characterCount(quill) }));\n if (source === 'user') latest.current.onUserChange();\n };\n\n quill.on('text-change', changed);\n quillReference.current = quill;\n dispose = () => {\n quill.off('text-change', changed);\n quillReference.current = undefined;\n container.replaceChildren();\n };\n setState({ ready: true, failure: undefined, characters: characterCount(quill) });\n }).catch((error: unknown) => {\n if (!disposed) setState({ ...idle, failure: error instanceof Error ? error.message : String(error) });\n });\n\n return () => {\n disposed = true;\n dispose?.();\n setState(idle);\n };\n }, [loader, host, showHeader]);\n\n useEffect(() => {\n const quill = quillReference.current;\n if (!state.ready || quill === undefined || html === appliedHtml.current) return;\n appliedHtml.current = html;\n applyHtml(quill, html);\n setState(current => ({ ...current, characters: characterCount(quill) }));\n }, [html, state.ready]);\n\n useEffect(() => {\n const quill = quillReference.current;\n if (!state.ready || quill === undefined) return;\n quill.enable(editable);\n quill.root.setAttribute('aria-readonly', String(!editable));\n const toolbar = quill.getModule('toolbar') as { container?: HTMLElement } | undefined;\n toolbar?.container?.querySelectorAll('button, select').forEach(control => {\n if (editable) control.removeAttribute('disabled'); else control.setAttribute('disabled', '');\n });\n }, [editable, state.ready]);\n\n useEffect(() => {\n const quill = quillReference.current;\n if (!state.ready || quill === undefined) return;\n quill.root.setAttribute('role', 'textbox');\n quill.root.setAttribute('aria-multiline', 'true');\n quill.root.setAttribute('aria-label', ariaLabel);\n if (placeholder === undefined) quill.root.removeAttribute('data-placeholder'); else quill.root.setAttribute('data-placeholder', placeholder);\n }, [ariaLabel, placeholder, state.ready]);\n\n return state;\n}\n"],"names":["idle","ready","failure","undefined","characters","useQuillEditor","options","loader","host","html","showHeader","editable","placeholder","ariaLabel","state","setState","useState","quillReference","useRef","appliedHtml","latest","current","useEffect","container","disposed","dispose","then","loaded","Quill","default","surface","ownerDocument","createElement","appendChild","quill","theme","modules","toolbar","toolbarLayout","readOnly","applyHtml","changed","_delta","_previous","source","characterCount","onUserChange","on","off","replaceChildren","catch","error","Error","message","String","enable","root","setAttribute","getModule","querySelectorAll","forEach","control","removeAttribute"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { StoryObj } from '@storybook/react';
2
+ import { SceneElementView } from '@cratis/scene.react';
3
+ declare const meta: {
4
+ title: string;
5
+ component: typeof SceneElementView;
6
+ tags: string[];
7
+ parameters: {
8
+ layout: string;
9
+ docs: {
10
+ description: {
11
+ component: string;
12
+ };
13
+ };
14
+ };
15
+ };
16
+ export default meta;
17
+ type Story = StoryObj<typeof meta>;
18
+ export declare const Gallery: Story;
19
+ //# sourceMappingURL=FileGallery.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileGallery.stories.d.ts","sourceRoot":"","sources":["../../../file/FileGallery.stories.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAIvD,QAAA,MAAM,IAAI;;;;;QAKF,MAAM;QACN,IAAI;YAAI,WAAW;gBAAI,SAAS;;;;CAEC,CAAC;eAE3B,IAAI;AAEnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAGnC,eAAO,MAAM,OAAO,EAAE,KAQrB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { SceneElementView } from '@cratis/scene.react';
2
+ import { primeReactComponents } from '../primeReactComponents';
3
+ import { sceneComponent, sceneGallery } from '../storyElements';
4
+ const meta = {
5
+ title: 'PrimeReact/File',
6
+ component: SceneElementView,
7
+ tags: ['autodocs'],
8
+ parameters: {
9
+ layout: 'padded',
10
+ docs: { description: { component: 'File-upload controls through the Scene registry. A host supplies an upload handler or server URL when it wants files sent.' } },
11
+ },
12
+ };
13
+ export default meta;
14
+ export const Gallery = {
15
+ args: {
16
+ element: sceneGallery('gallery', [
17
+ sceneComponent('fileUpload', 'fileUpload', { mode: 'advanced', accept: 'image/*', multiple: true }),
18
+ ]),
19
+ registry: primeReactComponents,
20
+ resolveBinding: () => undefined,
21
+ },
22
+ };
23
+ //# sourceMappingURL=FileGallery.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileGallery.stories.js","sourceRoot":"","sources":["../../../file/FileGallery.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhE,MAAM,IAAI,GAAG;IACT,KAAK,EAAE,iBAAiB;IACxB,SAAS,EAAE,gBAAgB;IAC3B,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,UAAU,EAAE;QACR,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,4HAA4H,EAAE,EAAE;KACrK;CACoC,CAAC;AAE1C,eAAe,IAAI,CAAC;AAKpB,MAAM,CAAC,MAAM,OAAO,GAAU;IAC1B,IAAI,EAAE;QACF,OAAO,EAAE,YAAY,CAAC,SAAS,EAAE;YAC7B,cAAc,CAAC,YAAY,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;SACtG,CAAC;QACF,QAAQ,EAAE,oBAAoB;QAC9B,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS;KAClC;CACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { FileUploadHandler } from './FileUploadHandler';
2
+ export interface FileUploadContextValue {
3
+ handler: FileUploadHandler | undefined;
4
+ allowedOrigins: readonly string[];
5
+ }
6
+ export declare const FileUploadContext: import("react").Context<FileUploadContextValue>;
7
+ //# sourceMappingURL=FileUploadContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileUploadContext.d.ts","sourceRoot":"","sources":["../../../file/FileUploadContext.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,WAAW,sBAAsB;IAEnC,OAAO,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAGvC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAGD,eAAO,MAAM,iBAAiB,iDAAoF,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { createContext } 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
+ /** Without a provider an upload goes only to the page's own origin and the control makes the request itself. */ const FileUploadContext = createContext({
6
+ handler: undefined,
7
+ allowedOrigins: []
8
+ });
9
+
10
+ export { FileUploadContext };
11
+ //# sourceMappingURL=FileUploadContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileUploadContext.js","sources":["../../../file/FileUploadContext.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 { createContext } from 'react';\nimport { FileUploadHandler } from './FileUploadHandler';\n\n/** What a host provides to the file uploads inside it. */\nexport interface FileUploadContextValue {\n /** The host-owned upload effect, when it owns the effect. */\n handler: FileUploadHandler | undefined;\n\n /** The origins, besides the page's own, an upload may be sent to. */\n allowedOrigins: readonly string[];\n}\n\n/** Without a provider an upload goes only to the page's own origin and the control makes the request itself. */\nexport const FileUploadContext = createContext<FileUploadContextValue>({ handler: undefined, allowedOrigins: [] });\n"],"names":["FileUploadContext","createContext","handler","undefined","allowedOrigins"],"mappings":";;AAAA;AACA;AAcA,iHACO,MAAMA,iBAAAA,GAAoBC,aAAAA,CAAsC;IAAEC,OAAAA,EAASC,SAAAA;AAAWC,IAAAA,cAAAA,EAAgB;AAAG,CAAA;;"}
@@ -0,0 +1,4 @@
1
+ export interface FileUploadHandler {
2
+ (files: File[], serverUrl?: string): Promise<void>;
3
+ }
4
+ //# sourceMappingURL=FileUploadHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileUploadHandler.d.ts","sourceRoot":"","sources":["../../../file/FileUploadHandler.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAS9B,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=FileUploadHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileUploadHandler.js","sourceRoot":"","sources":["../../../file/FileUploadHandler.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import { ReactNode } from 'react';
2
+ import { FileUploadHandler } from './FileUploadHandler';
3
+ export interface FileUploadHandlerProviderProps {
4
+ handler?: FileUploadHandler;
5
+ allowedOrigins?: readonly string[];
6
+ children: ReactNode;
7
+ }
8
+ export declare function FileUploadHandlerProvider({ handler, allowedOrigins, children }: FileUploadHandlerProviderProps): import("react").JSX.Element;
9
+ //# sourceMappingURL=FileUploadHandlerProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileUploadHandlerProvider.d.ts","sourceRoot":"","sources":["../../../file/FileUploadHandlerProvider.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAW,MAAM,OAAO,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,WAAW,8BAA8B;IAK3C,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAO5B,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAGnC,QAAQ,EAAE,SAAS,CAAC;CACvB;AAMD,wBAAgB,yBAAyB,CAAC,EAAE,OAAO,EAAE,cAAmB,EAAE,QAAQ,EAAE,EAAE,8BAA8B,+BAGnH"}
@@ -0,0 +1,23 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { useMemo } from 'react';
3
+ import { FileUploadContext } from './FileUploadContext.js';
4
+
5
+ /**
6
+ * Makes a host's upload effect and origin policy available without coupling the Scene package to that host's
7
+ * server client.
8
+ */ function FileUploadHandlerProvider({ handler, allowedOrigins = [], children }) {
9
+ const value = useMemo(()=>({
10
+ handler,
11
+ allowedOrigins
12
+ }), [
13
+ handler,
14
+ allowedOrigins
15
+ ]);
16
+ return /*#__PURE__*/ jsx(FileUploadContext.Provider, {
17
+ value: value,
18
+ children: children
19
+ });
20
+ }
21
+
22
+ export { FileUploadHandlerProvider };
23
+ //# sourceMappingURL=FileUploadHandlerProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileUploadHandlerProvider.js","sources":["../../../file/FileUploadHandlerProvider.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 { ReactNode, useMemo } from 'react';\nimport { FileUploadContext } from './FileUploadContext';\nimport { FileUploadHandler } from './FileUploadHandler';\n\nexport interface FileUploadHandlerProviderProps {\n /**\n * The host-owned upload effect available to the enclosed Scene surface. When omitted the control posts the\n * files itself, to the authored address, under the origin policy.\n */\n handler?: FileUploadHandler;\n\n /**\n * Origins besides the page's own that an authored upload address may name, for example\n * `['https://files.example.com']`. An address on any other origin is refused before anything is sent - to\n * the handler as well. Cookies are never sent to these origins.\n */\n allowedOrigins?: readonly string[];\n\n /** The surface whose file uploads the host configures. */\n children: ReactNode;\n}\n\n/**\n * Makes a host's upload effect and origin policy available without coupling the Scene package to that host's\n * server client.\n */\nexport function FileUploadHandlerProvider({ handler, allowedOrigins = [], children }: FileUploadHandlerProviderProps) {\n const value = useMemo(() => ({ handler, allowedOrigins }), [handler, allowedOrigins]);\n return <FileUploadContext.Provider value={value}>{children}</FileUploadContext.Provider>;\n}\n"],"names":["FileUploadHandlerProvider","handler","allowedOrigins","children","value","useMemo","_jsx","FileUploadContext","Provider"],"mappings":";;;;AAyBA;;;IAIO,SAASA,yBAAAA,CAA0B,EAAEC,OAAO,EAAEC,cAAAA,GAAiB,EAAE,EAAEC,QAAQ,EAAkC,EAAA;IAChH,MAAMC,KAAAA,GAAQC,OAAAA,CAAQ,KAAO;AAAEJ,YAAAA,OAAAA;AAASC,YAAAA;AAAe,SAAA,CAAA,EAAI;AAACD,QAAAA,OAAAA;AAASC,QAAAA;AAAe,KAAA,CAAA;IACpF,qBAAOI,GAAA,CAACC,kBAAkBC,QAAQ,EAAA;QAACJ,KAAAA,EAAOA,KAAAA;AAAQD,QAAAA,QAAAA,EAAAA;;AACtD;;"}
@@ -0,0 +1,6 @@
1
+ export declare enum FileUploadMode {
2
+ Advanced = "advanced",
3
+ Basic = "basic",
4
+ Auto = "auto"
5
+ }
6
+ //# sourceMappingURL=FileUploadMode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileUploadMode.d.ts","sourceRoot":"","sources":["../../../file/FileUploadMode.ts"],"names":[],"mappings":"AAIA,oBAAY,cAAc;IACtB,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,IAAI,SAAS;CAChB"}
@@ -0,0 +1,11 @@
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 canonical operating modes for a file upload control. */ var FileUploadMode = /*#__PURE__*/ function(FileUploadMode) {
4
+ FileUploadMode["Advanced"] = "advanced";
5
+ FileUploadMode["Basic"] = "basic";
6
+ FileUploadMode["Auto"] = "auto";
7
+ return FileUploadMode;
8
+ }({});
9
+
10
+ export { FileUploadMode };
11
+ //# sourceMappingURL=FileUploadMode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileUploadMode.js","sources":["../../../file/FileUploadMode.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 canonical operating modes for a file upload control. */\nexport enum FileUploadMode {\n Advanced = 'advanced',\n Basic = 'basic',\n Auto = 'auto',\n}\n"],"names":["FileUploadMode"],"mappings":"AAAA;AACA;AAEA,gEACO,IAAKA,cAAAA,iBAAAA,SAAAA,cAAAA,EAAAA;;;;AAAAA,IAAAA,OAAAA,cAAAA;AAIX,CAAA,CAAA,EAAA;;"}
@@ -0,0 +1,3 @@
1
+ import { RegisteredComponentProps } from '@cratis/scene.react';
2
+ export declare function PrimeFileUpload({ element, interactions }: RegisteredComponentProps): import("react").JSX.Element;
3
+ //# sourceMappingURL=PrimeFileUpload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrimeFileUpload.d.ts","sourceRoot":"","sources":["../../../file/PrimeFileUpload.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AA8B/D,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,wBAAwB,+BA6FlF"}
@@ -0,0 +1,159 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { useContext, useSyncExternalStore, useMemo } from 'react';
3
+ import { FileUpload } from 'primereact/fileupload';
4
+ import { stringProperty, booleanProperty, numberProperty } from '../properties.js';
5
+ import { resolveEnumeration } from '../resolveEnumeration.js';
6
+ import { FileUploadContext } from './FileUploadContext.js';
7
+ import { FileUploadMode } from './FileUploadMode.js';
8
+ import { resolveUploadTarget } from './resolveUploadTarget.js';
9
+ import { useUploadSession } from './useUploadSession.js';
10
+
11
+ const subscribeToNothing = ()=>()=>undefined;
12
+ const pageOrigin = ()=>window.location.origin;
13
+ const noPageOrigin = ()=>undefined;
14
+ /**
15
+ * The `PrimeReact:fileUpload` component.
16
+ *
17
+ * PrimeReact 11 provides the accessible file picker and drop zone; this adapter owns everything that has an
18
+ * effect or a policy:
19
+ * - The authored `url` is untrusted data. It is checked by {@link resolveUploadTarget} - same origin as the
20
+ * page unless the host allows more through {@link FileUploadHandlerProvider} - and a refused address is
21
+ * reported and blocks every upload, the host's handler included.
22
+ * - Nothing is requested on mount. A request starts only when the user selects or drops files (automatic and
23
+ * basic mode) or presses the upload button.
24
+ * - `multiple: false` is enforced before anything is sent, for the file input and for drag and drop.
25
+ * - One upload runs at a time (nothing can be selected or dropped while it runs), and a failure is shown
26
+ * rather than thrown.
27
+ * - A disabled element (`isEnabled: false`) disables the picker, the upload button and the drop zone.
28
+ *
29
+ * Without a host handler the control posts the files itself with `fetch`, sending cookies to the page's own
30
+ * origin only.
31
+ */ function PrimeFileUpload({ element, interactions }) {
32
+ const { handler, allowedOrigins } = useContext(FileUploadContext);
33
+ const origin = useSyncExternalStore(subscribeToNothing, pageOrigin, noPageOrigin);
34
+ const modeResolution = resolveEnumeration('mode', element.properties.mode, FileUploadMode, FileUploadMode.Advanced);
35
+ const mode = modeResolution.isValid ? modeResolution.value : FileUploadMode.Advanced;
36
+ const authoredUrl = stringProperty(element, 'url');
37
+ const target = useMemo(()=>resolveUploadTarget(authoredUrl, origin, allowedOrigins), [
38
+ authoredUrl,
39
+ origin,
40
+ allowedOrigins
41
+ ]);
42
+ const serverUrl = target.isValid ? target.url : undefined;
43
+ const multiple = booleanProperty(element, 'multiple', false);
44
+ const enabled = element.isEnabled;
45
+ const canUpload = target.isValid && (handler !== undefined || serverUrl !== undefined);
46
+ const session = useUploadSession(handler, serverUrl, stringProperty(element, 'name', 'files'));
47
+ const uploaded = async (event)=>{
48
+ if (!enabled || !canUpload) return;
49
+ if (await session.upload(event.files)) event.options.clear();
50
+ };
51
+ const changed = (event)=>{
52
+ // Clearing the selection after an upload reports an empty change; it is not a new selection, and must not
53
+ // wipe the result of the upload that caused it.
54
+ if (event.acceptedFiles.length === 0 && event.rejectedFiles.length === 0) return;
55
+ const rejection = event.rejectedFiles.flatMap((rejected)=>rejected.errors.map((error)=>error.message)).join(' ');
56
+ session.setStatus(rejection === '' ? undefined : {
57
+ kind: 'error',
58
+ text: rejection
59
+ });
60
+ interactions?.onChange?.();
61
+ };
62
+ const refuseSeveralFromInput = (event)=>{
63
+ const input = event.target;
64
+ if (input.type !== 'file') return;
65
+ if (session.busy) {
66
+ event.stopPropagation();
67
+ input.value = '';
68
+ return;
69
+ }
70
+ if (multiple || (input.files?.length ?? 0) < 2) return;
71
+ event.stopPropagation();
72
+ input.value = '';
73
+ session.setStatus({
74
+ kind: 'error',
75
+ text: 'Only one file can be uploaded at a time.'
76
+ });
77
+ };
78
+ const refuseDrop = (event)=>{
79
+ if (!enabled) {
80
+ event.preventDefault();
81
+ return;
82
+ }
83
+ if (session.busy) {
84
+ event.preventDefault();
85
+ event.stopPropagation();
86
+ return;
87
+ }
88
+ if (multiple || (event.dataTransfer?.files.length ?? 0) < 2) return;
89
+ event.preventDefault();
90
+ event.stopPropagation();
91
+ session.setStatus({
92
+ kind: 'error',
93
+ text: 'Only one file can be uploaded at a time.'
94
+ });
95
+ };
96
+ return /*#__PURE__*/ jsx("div", {
97
+ "data-scene-id": element.id,
98
+ "data-scene-component": "fileUpload",
99
+ onClick: interactions?.onClick,
100
+ onDoubleClick: interactions?.onDoubleClick,
101
+ onChangeCapture: refuseSeveralFromInput,
102
+ onDropCapture: refuseDrop,
103
+ onDragOverCapture: (event)=>{
104
+ if (!enabled) event.preventDefault();
105
+ },
106
+ children: /*#__PURE__*/ jsx(FileUpload.Root, {
107
+ accept: stringProperty(element, 'accept'),
108
+ auto: (mode === FileUploadMode.Auto || mode === FileUploadMode.Basic) && canUpload,
109
+ customUpload: true,
110
+ disabled: !enabled,
111
+ maxFileSize: numberProperty(element, 'maxFileSize'),
112
+ multiple: multiple,
113
+ name: stringProperty(element, 'name', 'files'),
114
+ uploadHandler: uploaded,
115
+ onChange: changed,
116
+ children: /*#__PURE__*/ jsxs(FileUpload.Content, {
117
+ "aria-label": stringProperty(element, 'ariaLabel', 'File upload drop zone'),
118
+ children: [
119
+ /*#__PURE__*/ jsx("p", {
120
+ children: mode === FileUploadMode.Basic ? 'Choose a file to upload.' : 'Drop files here or choose files to upload.'
121
+ }),
122
+ /*#__PURE__*/ jsx(FileUpload.Trigger, {
123
+ disabled: !enabled || session.busy,
124
+ children: mode === FileUploadMode.Basic ? 'Choose file' : 'Choose files'
125
+ }),
126
+ mode === FileUploadMode.Advanced && /*#__PURE__*/ jsx(FileUpload.Upload, {
127
+ disabled: !enabled || !canUpload || session.busy,
128
+ children: "Upload selected files"
129
+ }),
130
+ !modeResolution.isValid && /*#__PURE__*/ jsx("p", {
131
+ role: "alert",
132
+ "data-scene-state": "unsupported-mode",
133
+ children: modeResolution.message
134
+ }),
135
+ !target.isValid && /*#__PURE__*/ jsx("p", {
136
+ role: "alert",
137
+ "data-scene-state": "refused-address",
138
+ children: target.message
139
+ }),
140
+ target.isValid && !canUpload && /*#__PURE__*/ jsx("p", {
141
+ role: "status",
142
+ children: "Configure a server URL or provide an upload handler to upload files."
143
+ }),
144
+ session.busy && /*#__PURE__*/ jsx("p", {
145
+ role: "status",
146
+ children: "Uploading…"
147
+ }),
148
+ session.status !== undefined && /*#__PURE__*/ jsx("p", {
149
+ role: session.status.kind === 'error' ? 'alert' : 'status',
150
+ children: session.status.text
151
+ })
152
+ ]
153
+ })
154
+ })
155
+ });
156
+ }
157
+
158
+ export { PrimeFileUpload };
159
+ //# sourceMappingURL=PrimeFileUpload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrimeFileUpload.js","sources":["../../../file/PrimeFileUpload.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 { ChangeEvent, DragEvent, useContext, useMemo, useSyncExternalStore } from 'react';\nimport { FileUpload, type FileUploadChangeEvent, type FileUploadHandlerEvent } from 'primereact/fileupload';\nimport { RegisteredComponentProps } from '@cratis/scene.react';\nimport { booleanProperty, numberProperty, stringProperty } from '../properties';\nimport { resolveEnumeration } from '../resolveEnumeration';\nimport { FileUploadContext } from './FileUploadContext';\nimport { FileUploadMode } from './FileUploadMode';\nimport { resolveUploadTarget } from './resolveUploadTarget';\nimport { useUploadSession } from './useUploadSession';\n\nconst subscribeToNothing = () => () => undefined;\nconst pageOrigin = () => window.location.origin;\nconst noPageOrigin = () => undefined;\n\n/**\n * The `PrimeReact:fileUpload` component.\n *\n * PrimeReact 11 provides the accessible file picker and drop zone; this adapter owns everything that has an\n * effect or a policy:\n * - The authored `url` is untrusted data. It is checked by {@link resolveUploadTarget} - same origin as the\n * page unless the host allows more through {@link FileUploadHandlerProvider} - and a refused address is\n * reported and blocks every upload, the host's handler included.\n * - Nothing is requested on mount. A request starts only when the user selects or drops files (automatic and\n * basic mode) or presses the upload button.\n * - `multiple: false` is enforced before anything is sent, for the file input and for drag and drop.\n * - One upload runs at a time (nothing can be selected or dropped while it runs), and a failure is shown\n * rather than thrown.\n * - A disabled element (`isEnabled: false`) disables the picker, the upload button and the drop zone.\n *\n * Without a host handler the control posts the files itself with `fetch`, sending cookies to the page's own\n * origin only.\n */\nexport function PrimeFileUpload({ element, interactions }: RegisteredComponentProps) {\n const { handler, allowedOrigins } = useContext(FileUploadContext);\n const origin = useSyncExternalStore(subscribeToNothing, pageOrigin, noPageOrigin);\n const modeResolution = resolveEnumeration('mode', element.properties.mode, FileUploadMode, FileUploadMode.Advanced);\n const mode = modeResolution.isValid ? modeResolution.value : FileUploadMode.Advanced;\n const authoredUrl = stringProperty(element, 'url');\n const target = useMemo(() => resolveUploadTarget(authoredUrl, origin, allowedOrigins), [authoredUrl, origin, allowedOrigins]);\n const serverUrl = target.isValid ? target.url : undefined;\n const multiple = booleanProperty(element, 'multiple', false);\n const enabled = element.isEnabled;\n const canUpload = target.isValid && (handler !== undefined || serverUrl !== undefined);\n const session = useUploadSession(handler, serverUrl, stringProperty(element, 'name', 'files'));\n\n const uploaded = async (event: FileUploadHandlerEvent) => {\n if (!enabled || !canUpload) return;\n if (await session.upload(event.files)) event.options.clear();\n };\n\n const changed = (event: FileUploadChangeEvent) => {\n // Clearing the selection after an upload reports an empty change; it is not a new selection, and must not\n // wipe the result of the upload that caused it.\n if (event.acceptedFiles.length === 0 && event.rejectedFiles.length === 0) return;\n const rejection = event.rejectedFiles.flatMap(rejected => rejected.errors.map(error => error.message)).join(' ');\n session.setStatus(rejection === '' ? undefined : { kind: 'error', text: rejection });\n interactions?.onChange?.();\n };\n\n const refuseSeveralFromInput = (event: ChangeEvent<HTMLElement>) => {\n const input = event.target as HTMLInputElement;\n if (input.type !== 'file') return;\n if (session.busy) {\n event.stopPropagation();\n input.value = '';\n return;\n }\n\n if (multiple || (input.files?.length ?? 0) < 2) return;\n event.stopPropagation();\n input.value = '';\n session.setStatus({ kind: 'error', text: 'Only one file can be uploaded at a time.' });\n };\n\n const refuseDrop = (event: DragEvent<HTMLElement>) => {\n if (!enabled) {\n event.preventDefault();\n return;\n }\n if (session.busy) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n if (multiple || (event.dataTransfer?.files.length ?? 0) < 2) return;\n event.preventDefault();\n event.stopPropagation();\n session.setStatus({ kind: 'error', text: 'Only one file can be uploaded at a time.' });\n };\n\n return (\n <div\n data-scene-id={element.id}\n data-scene-component='fileUpload'\n onClick={interactions?.onClick}\n onDoubleClick={interactions?.onDoubleClick}\n onChangeCapture={refuseSeveralFromInput}\n onDropCapture={refuseDrop}\n onDragOverCapture={event => { if (!enabled) event.preventDefault(); }}>\n <FileUpload.Root\n accept={stringProperty(element, 'accept')}\n auto={(mode === FileUploadMode.Auto || mode === FileUploadMode.Basic) && canUpload}\n customUpload\n disabled={!enabled}\n maxFileSize={numberProperty(element, 'maxFileSize')}\n multiple={multiple}\n name={stringProperty(element, 'name', 'files')}\n uploadHandler={uploaded}\n onChange={changed}>\n <FileUpload.Content aria-label={stringProperty(element, 'ariaLabel', 'File upload drop zone')}>\n <p>{mode === FileUploadMode.Basic ? 'Choose a file to upload.' : 'Drop files here or choose files to upload.'}</p>\n <FileUpload.Trigger disabled={!enabled || session.busy}>{mode === FileUploadMode.Basic ? 'Choose file' : 'Choose files'}</FileUpload.Trigger>\n {mode === FileUploadMode.Advanced && (\n <FileUpload.Upload disabled={!enabled || !canUpload || session.busy}>Upload selected files</FileUpload.Upload>\n )}\n {!modeResolution.isValid && <p role='alert' data-scene-state='unsupported-mode'>{modeResolution.message}</p>}\n {!target.isValid && <p role='alert' data-scene-state='refused-address'>{target.message}</p>}\n {target.isValid && !canUpload && <p role='status'>Configure a server URL or provide an upload handler to upload files.</p>}\n {session.busy && <p role='status'>Uploading…</p>}\n {session.status !== undefined && <p role={session.status.kind === 'error' ? 'alert' : 'status'}>{session.status.text}</p>}\n </FileUpload.Content>\n </FileUpload.Root>\n </div>\n );\n}\n"],"names":["subscribeToNothing","undefined","pageOrigin","window","location","origin","noPageOrigin","PrimeFileUpload","element","interactions","handler","allowedOrigins","useContext","FileUploadContext","useSyncExternalStore","modeResolution","resolveEnumeration","properties","mode","FileUploadMode","Advanced","isValid","value","authoredUrl","stringProperty","target","useMemo","resolveUploadTarget","serverUrl","url","multiple","booleanProperty","enabled","isEnabled","canUpload","session","useUploadSession","uploaded","event","upload","files","options","clear","changed","acceptedFiles","length","rejectedFiles","rejection","flatMap","rejected","errors","map","error","message","join","setStatus","kind","text","onChange","refuseSeveralFromInput","input","type","busy","stopPropagation","refuseDrop","preventDefault","dataTransfer","_jsx","div","data-scene-id","id","data-scene-component","onClick","onDoubleClick","onChangeCapture","onDropCapture","onDragOverCapture","FileUpload","Root","accept","auto","Auto","Basic","customUpload","disabled","maxFileSize","numberProperty","name","uploadHandler","_jsxs","Content","aria-label","p","Trigger","Upload","role","data-scene-state","status"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface UploadStatus {
2
+ kind: 'success' | 'error';
3
+ text: string;
4
+ }
5
+ //# sourceMappingURL=UploadStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploadStatus.d.ts","sourceRoot":"","sources":["../../../file/UploadStatus.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAEzB,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=UploadStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploadStatus.js","sourceRoot":"","sources":["../../../file/UploadStatus.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ export type UploadTarget = {
2
+ isValid: true;
3
+ url: string | undefined;
4
+ } | {
5
+ isValid: false;
6
+ message: string;
7
+ };
8
+ //# sourceMappingURL=UploadTarget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploadTarget.d.ts","sourceRoot":"","sources":["../../../file/UploadTarget.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAClB;IACE,OAAO,EAAE,IAAI,CAAC;IAGd,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,GACC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=UploadTarget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploadTarget.js","sourceRoot":"","sources":["../../../file/UploadTarget.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ export * from './FileUploadHandler';
2
+ export * from './FileUploadHandlerProvider';
3
+ export * from './FileUploadMode';
4
+ export * from './PrimeFileUpload';
5
+ export * from './resolveUploadTarget';
6
+ export * from './UploadTarget';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../file/index.ts"],"names":[],"mappings":"AAGA,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './FileUploadHandler';
2
+ export * from './FileUploadHandlerProvider';
3
+ export * from './FileUploadMode';
4
+ export * from './PrimeFileUpload';
5
+ export * from './resolveUploadTarget';
6
+ export * from './UploadTarget';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../file/index.ts"],"names":[],"mappings":"AAGA,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function postFiles(url: string, field: string, files: File[], signal: AbortSignal): Promise<void>;
2
+ //# sourceMappingURL=postFiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postFiles.d.ts","sourceRoot":"","sources":["../../../file/postFiles.ts"],"names":[],"mappings":"AAgBA,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7G"}