@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
@@ -1 +1 @@
1
- {"version":3,"file":"treeNodes.js","sources":["../../treeNodes.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 { TreeNode } from './TreeNode';\nimport { SceneElement } from '@cratis/scene.model';\nimport { arrayProperty } from './properties';\n\n/**\n * Turns raw authored entries into the `TreeNode` model PrimeReact's tree, tree table, tree select and\n * organization chart all share.\n *\n * A `key` is synthesized from the node's path when an author did not supply one. That is not cosmetic:\n * PrimeReact keys expansion, selection and virtual scrolling off `key`, so a tree of unkeyed nodes\n * expands the wrong rows the moment two siblings share a label. Deriving the key from the path makes it\n * unique and stable across re-renders without asking the author for anything.\n *\n * @param entries The raw entries to convert.\n * @param parentKey The key of the node these entries belong to, used to build stable child keys.\n * @returns The converted nodes, in order.\n */\nexport function toTreeNodes(entries: unknown[], parentKey = ''): TreeNode[] {\n const nodes: TreeNode[] = [];\n entries.forEach((entry, index) => {\n const path = parentKey === '' ? `${index}` : `${parentKey}-${index}`;\n if (typeof entry === 'string') {\n nodes.push({ key: path, label: entry });\n return;\n }\n\n if (typeof entry !== 'object' || entry === undefined || entry === null || Array.isArray(entry)) return;\n\n const record = entry as Record<string, unknown>;\n const node: TreeNode = { key: typeof record.key === 'string' ? record.key : path };\n if (typeof record.label === 'string') node.label = record.label;\n if (typeof record.icon === 'string') node.icon = record.icon;\n if (typeof record.className === 'string') node.className = record.className;\n if (typeof record.leaf === 'boolean') node.leaf = record.leaf;\n if (typeof record.data === 'object' && record.data !== null) node.data = record.data;\n if (Array.isArray(record.children)) node.children = toTreeNodes(record.children, node.key as string);\n nodes.push(node);\n });\n\n return nodes;\n}\n\n/**\n * Reads a tree model off a Scene element's properties.\n *\n * @param element The element whose properties to read.\n * @param name The property name holding the entries.\n * @returns The converted nodes, empty when the property is missing or is not an array.\n */\nexport function treeNodesProperty(element: SceneElement, name: string): TreeNode[] {\n return toTreeNodes(arrayProperty(element, name));\n}\n"],"names":["toTreeNodes","entries","parentKey","nodes","forEach","entry","index","path","push","key","label","undefined","Array","isArray","record","node","icon","className","leaf","data","children","treeNodesProperty","element","name","arrayProperty"],"mappings":";;;;AAAA;AACA;AAMA;;;;;;;;;;;;AAYC,IACM,SAASA,WAAAA,CAAYC,OAAkB,EAAEC,YAAY,EAAE,EAAA;AAC1D,IAAA,MAAMC,QAAoB,EAAE;IAC5BF,OAAAA,CAAQG,OAAO,CAAC,CAACC,KAAAA,EAAOC,KAAAA,GAAAA;QACpB,MAAMC,IAAAA,GAAOL,SAAAA,KAAc,EAAA,GAAK,CAAA,EAAGI,KAAAA,CAAAA,CAAO,GAAG,CAAA,EAAGJ,SAAAA,CAAU,CAAC,EAAEI,KAAAA,CAAAA,CAAO;QACpE,IAAI,OAAOD,UAAU,QAAA,EAAU;AAC3BF,YAAAA,KAAAA,CAAMK,IAAI,CAAC;gBAAEC,GAAAA,EAAKF,IAAAA;gBAAMG,KAAAA,EAAOL;AAAM,aAAA,CAAA;AACrC,YAAA;AACJ,QAAA;QAEA,IAAI,OAAOA,KAAAA,KAAU,QAAA,IAAYA,KAAAA,KAAUM,SAAAA,IAAaN,UAAU,IAAA,IAAQO,KAAAA,CAAMC,OAAO,CAACR,KAAAA,CAAAA,EAAQ;AAEhG,QAAA,MAAMS,MAAAA,GAAST,KAAAA;AACf,QAAA,MAAMU,IAAAA,GAAiB;AAAEN,YAAAA,GAAAA,EAAK,OAAOK,MAAAA,CAAOL,GAAG,KAAK,QAAA,GAAWK,MAAAA,CAAOL,GAAG,GAAGF;AAAK,SAAA;QACjF,IAAI,OAAOO,OAAOJ,KAAK,KAAK,UAAUK,IAAAA,CAAKL,KAAK,GAAGI,MAAAA,CAAOJ,KAAK;QAC/D,IAAI,OAAOI,OAAOE,IAAI,KAAK,UAAUD,IAAAA,CAAKC,IAAI,GAAGF,MAAAA,CAAOE,IAAI;QAC5D,IAAI,OAAOF,OAAOG,SAAS,KAAK,UAAUF,IAAAA,CAAKE,SAAS,GAAGH,MAAAA,CAAOG,SAAS;QAC3E,IAAI,OAAOH,OAAOI,IAAI,KAAK,WAAWH,IAAAA,CAAKG,IAAI,GAAGJ,MAAAA,CAAOI,IAAI;AAC7D,QAAA,IAAI,OAAOJ,MAAAA,CAAOK,IAAI,KAAK,QAAA,IAAYL,MAAAA,CAAOK,IAAI,KAAK,IAAA,EAAMJ,IAAAA,CAAKI,IAAI,GAAGL,OAAOK,IAAI;AACpF,QAAA,IAAIP,KAAAA,CAAMC,OAAO,CAACC,MAAAA,CAAOM,QAAQ,CAAA,EAAGL,IAAAA,CAAKK,QAAQ,GAAGpB,WAAAA,CAAYc,MAAAA,CAAOM,QAAQ,EAAEL,KAAKN,GAAG,CAAA;AACzFN,QAAAA,KAAAA,CAAMK,IAAI,CAACO,IAAAA,CAAAA;AACf,IAAA,CAAA,CAAA;IAEA,OAAOZ,KAAAA;AACX;AAEA;;;;;;AAMC,IACM,SAASkB,iBAAAA,CAAkBC,OAAqB,EAAEC,IAAY,EAAA;IACjE,OAAOvB,WAAAA,CAAYwB,yBAAcF,OAAAA,EAASC,IAAAA,CAAAA,CAAAA;AAC9C;;;"}
1
+ {"version":3,"file":"treeNodes.js","sources":["../../treeNodes.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 { TreeNode } from './TreeNode';\nimport { SceneElement } from '@cratis/scene.model';\nimport { arrayProperty } from './properties';\n\n/**\n * Turns raw authored entries into the `TreeNode` model PrimeReact's tree, tree table, tree select and\n * organization chart all share.\n *\n * A `key` is synthesized from the node's path when an author did not supply one. That is not cosmetic:\n * PrimeReact keys expansion, selection and virtual scrolling off `key`, so a tree of unkeyed nodes\n * expands the wrong rows the moment two siblings share a label. Deriving the key from the path makes it\n * unique and stable across re-renders without asking the author for anything.\n *\n * An authored key may be a string or a number (a numeric id is a natural key); it is kept as a string. Keys\n * are unique across the whole tree: a node whose authored key was already taken by an earlier node falls back\n * to its path key, so two nodes can never share expansion or selection.\n *\n * An entry that is a string, number or boolean is a leaf labeled with it. Anything else that is not a record\n * (`null`, a nested array) cannot be a node and is skipped; see {@link countUnreadableEntries}.\n *\n * @param entries The raw entries to convert.\n * @param parentKey The key of the node these entries belong to, used to build stable child keys.\n * @param usedKeys The keys already given out in this tree, shared down the recursion.\n * @returns The converted nodes, in order.\n */\nexport function toTreeNodes(entries: unknown[], parentKey = '', usedKeys: Set<string> = new Set()): TreeNode[] {\n const nodes: TreeNode[] = [];\n entries.forEach((entry, index) => {\n const path = parentKey === '' ? `${index}` : `${parentKey}-${index}`;\n if (typeof entry === 'string' || typeof entry === 'number' || typeof entry === 'boolean') {\n nodes.push({ key: uniqueKey(undefined, path, usedKeys), label: String(entry) });\n return;\n }\n\n if (typeof entry !== 'object' || entry === undefined || entry === null || Array.isArray(entry)) return;\n\n const record = entry as Record<string, unknown>;\n const node: TreeNode = { key: uniqueKey(authoredKey(record.key), path, usedKeys) };\n if (typeof record.label === 'string') node.label = record.label;\n if (typeof record.icon === 'string') node.icon = record.icon;\n if (typeof record.className === 'string') node.className = record.className;\n if (typeof record.leaf === 'boolean') node.leaf = record.leaf;\n if (typeof record.expanded === 'boolean') node.expanded = record.expanded;\n if (typeof record.selectable === 'boolean') node.selectable = record.selectable;\n if (record.data !== undefined && record.data !== null) node.data = record.data;\n if (Array.isArray(record.children)) node.children = toTreeNodes(record.children, node.key as string, usedKeys);\n nodes.push(node);\n });\n\n return nodes;\n}\n\n/**\n * Counts the entries `toTreeNodes` skips, so a control can say that some of its data was not shown instead\n * of silently showing less.\n *\n * @param entries The raw entries.\n * @returns How many entries, at any depth, were neither a scalar nor a record.\n */\nexport function countUnreadableEntries(entries: unknown[]): number {\n return entries.reduce<number>((count, entry) => {\n if (typeof entry === 'string' || typeof entry === 'number' || typeof entry === 'boolean') return count;\n if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) return count + 1;\n const children = (entry as { children?: unknown }).children;\n return count + (Array.isArray(children) ? countUnreadableEntries(children) : 0);\n }, 0);\n}\n\nfunction authoredKey(value: unknown): string | undefined {\n if (typeof value === 'string' && value !== '') return value;\n return typeof value === 'number' && Number.isFinite(value) ? String(value) : undefined;\n}\n\nfunction uniqueKey(authored: string | undefined, path: string, usedKeys: Set<string>): string {\n let key = authored !== undefined && !usedKeys.has(authored) ? authored : path;\n while (usedKeys.has(key)) key = `${key}~`;\n usedKeys.add(key);\n return key;\n}\n\n/**\n * Reads a tree model off a Scene element's properties.\n *\n * @param element The element whose properties to read.\n * @param name The property name holding the entries.\n * @returns The converted nodes, empty when the property is missing or is not an array.\n */\nexport function treeNodesProperty(element: SceneElement, name: string): TreeNode[] {\n return toTreeNodes(arrayProperty(element, name));\n}\n"],"names":["toTreeNodes","entries","parentKey","usedKeys","Set","nodes","forEach","entry","index","path","push","key","uniqueKey","undefined","label","String","Array","isArray","record","node","authoredKey","icon","className","leaf","expanded","selectable","data","children","countUnreadableEntries","reduce","count","value","Number","isFinite","authored","has","add","treeNodesProperty","element","name","arrayProperty"],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+ var useStructuralValue = require('./useStructuralValue.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
+ /**
9
+ * State that starts from authored data and starts over when that data really changes.
10
+ *
11
+ * A control's selection or expansion is runtime state the user changes, yet it is also authored on the
12
+ * element. Reading the authored value once (`useState(() => authored)`) ignores a later edit of the document;
13
+ * resetting on every render discards what the user did. This does neither: the state follows `source` when
14
+ * its content changes, compared structurally because every document edit clones the data, and is otherwise
15
+ * left alone - so an unrelated property edit does not undo the user's choice.
16
+ *
17
+ * @param source The authored data the state derives from.
18
+ * @param initial Derives the starting state from the authored data.
19
+ * @returns The state and its setter, like `useState`.
20
+ */ function useResettingState(source, initial) {
21
+ const stable = useStructuralValue.useStructuralValue(source);
22
+ const [held, setHeld] = react.useState(()=>({
23
+ source: stable,
24
+ value: initial()
25
+ }));
26
+ let current = held;
27
+ if (held.source !== stable) {
28
+ current = {
29
+ source: stable,
30
+ value: initial()
31
+ };
32
+ setHeld(current);
33
+ }
34
+ const update = react.useCallback((action)=>{
35
+ setHeld((previous)=>({
36
+ source: previous.source,
37
+ value: typeof action === 'function' ? action(previous.value) : action
38
+ }));
39
+ }, []);
40
+ return [
41
+ current.value,
42
+ update
43
+ ];
44
+ }
45
+
46
+ exports.useResettingState = useResettingState;
47
+ //# sourceMappingURL=useResettingState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResettingState.js","sources":["../../useResettingState.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 { Dispatch, SetStateAction, useCallback, useState } from 'react';\nimport { useStructuralValue } from './useStructuralValue';\n\n/**\n * State that starts from authored data and starts over when that data really changes.\n *\n * A control's selection or expansion is runtime state the user changes, yet it is also authored on the\n * element. Reading the authored value once (`useState(() => authored)`) ignores a later edit of the document;\n * resetting on every render discards what the user did. This does neither: the state follows `source` when\n * its content changes, compared structurally because every document edit clones the data, and is otherwise\n * left alone - so an unrelated property edit does not undo the user's choice.\n *\n * @param source The authored data the state derives from.\n * @param initial Derives the starting state from the authored data.\n * @returns The state and its setter, like `useState`.\n */\nexport function useResettingState<TState>(source: unknown, initial: () => TState): [TState, Dispatch<SetStateAction<TState>>] {\n const stable = useStructuralValue(source);\n const [held, setHeld] = useState(() => ({ source: stable, value: initial() }));\n let current = held;\n if (held.source !== stable) {\n current = { source: stable, value: initial() };\n setHeld(current);\n }\n\n const update = useCallback((action: SetStateAction<TState>) => {\n setHeld(previous => ({ source: previous.source, value: typeof action === 'function' ? (action as (state: TState) => TState)(previous.value) : action }));\n }, []);\n\n return [current.value, update];\n}\n"],"names":["useResettingState","source","initial","stable","useStructuralValue","held","setHeld","useState","value","current","update","useCallback","action","previous"],"mappings":";;;;;AAAA;AACA;AAKA;;;;;;;;;;;;AAYC,IACM,SAASA,iBAAAA,CAA0BC,MAAe,EAAEC,OAAqB,EAAA;AAC5E,IAAA,MAAMC,SAASC,qCAAAA,CAAmBH,MAAAA,CAAAA;AAClC,IAAA,MAAM,CAACI,IAAAA,EAAMC,OAAAA,CAAQ,GAAGC,cAAAA,CAAS,KAAO;YAAEN,MAAAA,EAAQE,MAAAA;YAAQK,KAAAA,EAAON,OAAAA;SAAU,CAAA,CAAA;AAC3E,IAAA,IAAIO,OAAAA,GAAUJ,IAAAA;IACd,IAAIA,IAAAA,CAAKJ,MAAM,KAAKE,MAAAA,EAAQ;QACxBM,OAAAA,GAAU;YAAER,MAAAA,EAAQE,MAAAA;YAAQK,KAAAA,EAAON,OAAAA;AAAU,SAAA;QAC7CI,OAAAA,CAAQG,OAAAA,CAAAA;AACZ,IAAA;IAEA,MAAMC,MAAAA,GAASC,kBAAY,CAACC,MAAAA,GAAAA;QACxBN,OAAAA,CAAQO,CAAAA,YAAa;AAAEZ,gBAAAA,MAAAA,EAAQY,SAASZ,MAAM;AAAEO,gBAAAA,KAAAA,EAAO,OAAOI,MAAAA,KAAW,UAAA,GAAa,MAACA,CAAqCC,QAAAA,CAASL,KAAK,CAAA,GAAII;aAAO,CAAA,CAAA;AACzJ,IAAA,CAAA,EAAG,EAAE,CAAA;IAEL,OAAO;AAACH,QAAAA,OAAAA,CAAQD,KAAK;AAAEE,QAAAA;AAAO,KAAA;AAClC;;"}
@@ -0,0 +1,9 @@
1
+ export type EnumerationResolution<TMember extends string> = {
2
+ isValid: true;
3
+ value: TMember;
4
+ } | {
5
+ isValid: false;
6
+ value: unknown;
7
+ message: string;
8
+ };
9
+ //# sourceMappingURL=EnumerationResolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnumerationResolution.d.ts","sourceRoot":"","sources":["../../EnumerationResolution.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,MAAM,IAClD;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACjC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=EnumerationResolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnumerationResolution.js","sourceRoot":"","sources":["../../EnumerationResolution.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"DataGallery.stories.d.ts","sourceRoot":"","sources":["../../../data/DataGallery.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,KA4BrB,CAAC"}
1
+ {"version":3,"file":"DataGallery.stories.d.ts","sourceRoot":"","sources":["../../../data/DataGallery.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,KAkCrB,CAAC"}
@@ -22,7 +22,13 @@ export const Gallery = {
22
22
  }),
23
23
  sceneComponent('dataTable', 'dataTable', { rows: [{ id: 1, title: 'Inferred columns' }] }),
24
24
  sceneComponent('dataView', 'dataView', { rows: [{ title: 'Kickoff', description: 'Agree the scope' }] }),
25
+ sceneComponent('dataScroller', 'dataScroller', { items: ['First', 'Second', 'Third'], rows: 2, inline: true, scrollHeight: 96 }),
25
26
  sceneComponent('tree', 'tree', { nodes: [{ label: 'Documents', children: ['Work', 'Home'] }] }),
27
+ sceneComponent('treeTable', 'treeTable', {
28
+ columns: [{ field: 'name', header: 'Name' }, { field: 'type', header: 'Type' }],
29
+ items: [{ label: 'Documents', data: { name: 'Documents', type: 'Folder' }, children: [{ label: 'Plan', data: { name: 'Plan', type: 'File' } }] }],
30
+ selectionMode: 'checkbox', paginator: true, rows: 1,
31
+ }),
26
32
  sceneComponent('timeline', 'timeline', {
27
33
  events: [{ title: 'Ordered', description: 'Order placed', date: '09:00' }, { title: 'Shipped', description: 'Left the depot', date: '14:20' }],
28
34
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"DataGallery.stories.js","sourceRoot":"","sources":["../../../data/DataGallery.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,iMAAiM,EAAE,EAAE;KAC1O;CACoC,CAAC;AAE1C,eAAe,IAAI,CAAC;AAKpB,MAAM,CAAC,MAAM,OAAO,GAAU;IAC1B,IAAI,EAAE;QACF,OAAO,EAAE,YAAY,CAAC,SAAS,EAAE;YAC7B,cAAc,CACV,OAAO,EACP,OAAO,EACP,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,EACjF;gBACI,OAAO,EAAE;oBACL,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;oBACjF,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;iBACpE;aACJ,CACJ;YACD,cAAc,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;YAC1F,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;YACxG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/F,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE;gBACnC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;aACjJ,CAAC;YACF,cAAc,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;YAC7E,cAAc,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;YACrG,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;YACxF,cAAc,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;SACpH,CAAC;QACF,QAAQ,EAAE,oBAAoB;QAC9B,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS;KAClC;CACJ,CAAC"}
1
+ {"version":3,"file":"DataGallery.stories.js","sourceRoot":"","sources":["../../../data/DataGallery.stories.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function DataScrollerRow({ value }: {
2
+ value: unknown;
3
+ }): import("react").JSX.Element;
4
+ //# sourceMappingURL=DataScrollerRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataScrollerRow.d.ts","sourceRoot":"","sources":["../../../data/DataScrollerRow.tsx"],"names":[],"mappings":"AAcA,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,+BAoB5D"}
@@ -0,0 +1,48 @@
1
+ import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
2
+ import { readableValue } from './readableValue.js';
3
+
4
+ /** The fields that, when present as text, name a record. */ const titleFields = [
5
+ 'label',
6
+ 'title',
7
+ 'name',
8
+ 'text',
9
+ 'header'
10
+ ];
11
+ /**
12
+ * One authored data row, shown readably.
13
+ *
14
+ * A scalar is its text. A record is titled by its first text field among `label`, `title`, `name`, `text` and
15
+ * `header`, and every other field follows as a name and a readable value. No row is ever dumped as JSON.
16
+ */ function DataScrollerRow({ value }) {
17
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) return /*#__PURE__*/ jsx(Fragment, {
18
+ children: readableValue(value)
19
+ });
20
+ const record = value;
21
+ const titleField = titleFields.find((field)=>typeof record[field] === 'string' && record[field] !== '');
22
+ const details = Object.entries(record).filter(([name])=>name !== titleField).map(([name, entry])=>[
23
+ name,
24
+ readableValue(entry)
25
+ ]).filter(([, text])=>text !== '');
26
+ return /*#__PURE__*/ jsxs(Fragment, {
27
+ children: [
28
+ titleField !== undefined && /*#__PURE__*/ jsx("strong", {
29
+ children: record[titleField]
30
+ }),
31
+ details.length > 0 && /*#__PURE__*/ jsx("dl", {
32
+ children: details.map(([name, text])=>/*#__PURE__*/ jsxs("div", {
33
+ children: [
34
+ /*#__PURE__*/ jsx("dt", {
35
+ children: name
36
+ }),
37
+ /*#__PURE__*/ jsx("dd", {
38
+ children: text
39
+ })
40
+ ]
41
+ }, name))
42
+ })
43
+ ]
44
+ });
45
+ }
46
+
47
+ export { DataScrollerRow };
48
+ //# sourceMappingURL=DataScrollerRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataScrollerRow.js","sources":["../../../data/DataScrollerRow.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 { readableValue } from './readableValue';\n\n/** The fields that, when present as text, name a record. */\nconst titleFields = ['label', 'title', 'name', 'text', 'header'];\n\n/**\n * One authored data row, shown readably.\n *\n * A scalar is its text. A record is titled by its first text field among `label`, `title`, `name`, `text` and\n * `header`, and every other field follows as a name and a readable value. No row is ever dumped as JSON.\n */\nexport function DataScrollerRow({ value }: { value: unknown }) {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return <>{readableValue(value)}</>;\n\n const record = value as Record<string, unknown>;\n const titleField = titleFields.find(field => typeof record[field] === 'string' && record[field] !== '');\n const details = Object.entries(record)\n .filter(([name]) => name !== titleField)\n .map(([name, entry]) => [name, readableValue(entry)] as const)\n .filter(([, text]) => text !== '');\n\n return (\n <>\n {titleField !== undefined && <strong>{record[titleField] as string}</strong>}\n {details.length > 0 && (\n <dl>\n {details.map(([name, text]) => <div key={name}><dt>{name}</dt><dd>{text}</dd></div>)}\n </dl>\n )}\n </>\n );\n}\n"],"names":["titleFields","DataScrollerRow","value","Array","isArray","_jsx","_Fragment","readableValue","record","titleField","find","field","details","Object","entries","filter","name","map","entry","text","_jsxs","undefined","strong","length","dl","div","dt","dd"],"mappings":";;;AAKA,6DACA,MAAMA,WAAAA,GAAc;AAAC,IAAA,OAAA;AAAS,IAAA,OAAA;AAAS,IAAA,MAAA;AAAQ,IAAA,MAAA;AAAQ,IAAA;AAAS,CAAA;AAEhE;;;;;AAKC,IACM,SAASC,eAAAA,CAAgB,EAAEC,KAAK,EAAsB,EAAA;IACzD,IAAI,OAAOA,UAAU,QAAA,IAAYA,KAAAA,KAAU,QAAQC,KAAAA,CAAMC,OAAO,CAACF,KAAAA,CAAAA,EAAQ,qBAAOG,GAAA,CAAAC,QAAA,EAAA;kBAAGC,aAAAA,CAAcL,KAAAA;;AAEjG,IAAA,MAAMM,MAAAA,GAASN,KAAAA;AACf,IAAA,MAAMO,UAAAA,GAAaT,WAAAA,CAAYU,IAAI,CAACC,CAAAA,KAAAA,GAAS,OAAOH,MAAM,CAACG,MAAM,KAAK,QAAA,IAAYH,MAAM,CAACG,MAAM,KAAK,EAAA,CAAA;AACpG,IAAA,MAAMC,UAAUC,MAAAA,CAAOC,OAAO,CAACN,MAAAA,CAAAA,CAC1BO,MAAM,CAAC,CAAC,CAACC,KAAK,GAAKA,IAAAA,KAASP,YAC5BQ,GAAG,CAAC,CAAC,CAACD,IAAAA,EAAME,MAAM,GAAK;AAACF,YAAAA,IAAAA;YAAMT,aAAAA,CAAcW,KAAAA;AAAO,SAAA,CAAA,CACnDH,MAAM,CAAC,CAAC,GAAGI,IAAAA,CAAK,GAAKA,IAAAA,KAAS,EAAA,CAAA;IAEnC,qBACIC,IAAA,CAAAd,QAAA,EAAA;;AACKG,YAAAA,UAAAA,KAAeY,2BAAahB,GAAA,CAACiB,QAAAA,EAAAA;AAAQd,gBAAAA,QAAAA,EAAAA,MAAM,CAACC,UAAAA;;YAC5CG,OAAAA,CAAQW,MAAM,GAAG,CAAA,kBACdlB,GAAA,CAACmB,IAAAA,EAAAA;AACIZ,gBAAAA,QAAAA,EAAAA,OAAAA,CAAQK,GAAG,CAAC,CAAC,CAACD,IAAAA,EAAMG,IAAAA,CAAK,iBAAKC,IAAA,CAACK,KAAAA,EAAAA;;0CAAepB,GAAA,CAACqB,IAAAA,EAAAA;AAAIV,gCAAAA,QAAAA,EAAAA;;0CAAUX,GAAA,CAACsB,IAAAA,EAAAA;AAAIR,gCAAAA,QAAAA,EAAAA;;;AAA1BH,qBAAAA,EAAAA,IAAAA,CAAAA;;;;AAK7D;;"}
@@ -0,0 +1,3 @@
1
+ import { RegisteredComponentProps } from '@cratis/scene.react';
2
+ export declare function PrimeDataScroller({ element, slots, interactions }: RegisteredComponentProps): import("react").JSX.Element;
3
+ //# sourceMappingURL=PrimeDataScroller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrimeDataScroller.d.ts","sourceRoot":"","sources":["../../../data/PrimeDataScroller.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAyB/D,wBAAgB,iBAAiB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,wBAAwB,+BAsD3F"}
@@ -0,0 +1,118 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { useMemo, useRef, useEffect } from 'react';
3
+ import { arrayProperty, numberProperty, booleanProperty, stringProperty } from '../properties.js';
4
+ import { useStructuralValue } from '../useStructuralValue.js';
5
+ import { DataScrollerRow } from './DataScrollerRow.js';
6
+ import { isSerializedLegacyElement, legacyElementMessage } from './isSerializedLegacyElement.js';
7
+ import { useIncrementalLoad } from './useIncrementalLoad.js';
8
+ import { useLoadOnReach } from './useLoadOnReach.js';
9
+
10
+ /** How tall an inline scroller is when no `scrollHeight` was authored: without a height it would never overflow. */ const defaultScrollHeight = 320;
11
+ /**
12
+ * The `PrimeReact:dataScroller` component, a list that loads a chunk at a time as its end is reached.
13
+ *
14
+ * The entries are read as data: strings, numbers and records (see {@link DataScrollerRow}) from `items`, then
15
+ * any child elements authored in the `items` (or `content`) slot, which render as themselves. Serialized
16
+ * legacy UI elements in `items` are refused with a visible message, not shown as JSON.
17
+ *
18
+ * - `inline: true` scrolls inside the control, `scrollHeight` pixels tall (320 when omitted). `inline: false`
19
+ * loads as the page scrolls the end of the list into view.
20
+ * - The "Load more" button remains for keyboard and assistive technology; focus moves to the first entry it
21
+ * loads, and the number shown is announced.
22
+ * - A disabled element loads nothing on scroll and its button is disabled.
23
+ * - The loaded count restarts when `rows` or the content of `items` changes.
24
+ */ function PrimeDataScroller({ element, slots, interactions }) {
25
+ const authored = useStructuralValue(arrayProperty(element, 'items'));
26
+ const data = useMemo(()=>authored.filter((entry)=>!isSerializedLegacyElement(entry) && entry !== null && entry !== undefined), [
27
+ authored
28
+ ]);
29
+ const refusal = legacyElementMessage(authored, 'items', "Author them as child elements in the 'items' slot, or as data.");
30
+ const slotted = slots.items ?? slots.content ?? [];
31
+ const rows = useMemo(()=>[
32
+ ...data.map((value, index)=>/*#__PURE__*/ jsx(DataScrollerRow, {
33
+ value: value
34
+ }, index)),
35
+ ...slotted
36
+ ], [
37
+ data,
38
+ slotted
39
+ ]);
40
+ const chunk = Math.max(Math.floor(numberProperty(element, 'rows', 10)), 1);
41
+ const inline = booleanProperty(element, 'inline', false);
42
+ const scrollHeight = numberProperty(element, 'scrollHeight', defaultScrollHeight);
43
+ const enabled = element.isEnabled;
44
+ const { loaded, loadMore } = useIncrementalLoad(rows.length, chunk, data);
45
+ const canLoad = loaded < rows.length;
46
+ const scroller = useRef(null);
47
+ const sentinel = useRef(null);
48
+ const entries = useRef([]);
49
+ const focusIndex = useRef(undefined);
50
+ useLoadOnReach(sentinel, inline ? scroller : null, enabled && canLoad, loaded, loadMore);
51
+ useEffect(()=>{
52
+ if (focusIndex.current === undefined) return;
53
+ entries.current[focusIndex.current]?.focus();
54
+ focusIndex.current = undefined;
55
+ }, [
56
+ loaded
57
+ ]);
58
+ const loadByButton = ()=>{
59
+ focusIndex.current = loaded;
60
+ loadMore();
61
+ };
62
+ return /*#__PURE__*/ jsxs("div", {
63
+ "data-scene-id": element.id,
64
+ "data-scene-component": "dataScroller",
65
+ "aria-disabled": !enabled,
66
+ onClick: interactions?.onClick,
67
+ onDoubleClick: interactions?.onDoubleClick,
68
+ children: [
69
+ /*#__PURE__*/ jsxs("div", {
70
+ ref: scroller,
71
+ role: "region",
72
+ tabIndex: inline ? 0 : undefined,
73
+ "aria-label": stringProperty(element, 'ariaLabel', 'Scrollable data'),
74
+ style: inline ? {
75
+ maxHeight: `${scrollHeight}px`,
76
+ overflowY: 'auto'
77
+ } : undefined,
78
+ children: [
79
+ /*#__PURE__*/ jsx("ol", {
80
+ children: rows.slice(0, loaded).map((row, index)=>/*#__PURE__*/ jsx("li", {
81
+ tabIndex: -1,
82
+ ref: (node)=>{
83
+ entries.current[index] = node;
84
+ },
85
+ children: row
86
+ }, index))
87
+ }),
88
+ canLoad && /*#__PURE__*/ jsx("div", {
89
+ ref: sentinel,
90
+ "aria-hidden": "true"
91
+ })
92
+ ]
93
+ }),
94
+ rows.length === 0 && /*#__PURE__*/ jsx("p", {
95
+ role: "status",
96
+ children: stringProperty(element, 'emptyLabel', 'No items to show')
97
+ }),
98
+ refusal !== undefined && /*#__PURE__*/ jsx("p", {
99
+ role: "alert",
100
+ "data-scene-state": "legacy-elements",
101
+ children: refusal
102
+ }),
103
+ canLoad && /*#__PURE__*/ jsx("button", {
104
+ type: "button",
105
+ disabled: !enabled,
106
+ onClick: loadByButton,
107
+ children: "Load more"
108
+ }),
109
+ rows.length > 0 && /*#__PURE__*/ jsx("output", {
110
+ "aria-live": "polite",
111
+ children: `Showing ${loaded} of ${rows.length} items`
112
+ })
113
+ ]
114
+ });
115
+ }
116
+
117
+ export { PrimeDataScroller };
118
+ //# sourceMappingURL=PrimeDataScroller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrimeDataScroller.js","sources":["../../../data/PrimeDataScroller.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, useEffect, useMemo, useRef } from 'react';\nimport { RegisteredComponentProps } from '@cratis/scene.react';\nimport { arrayProperty, booleanProperty, numberProperty, stringProperty } from '../properties';\nimport { useStructuralValue } from '../useStructuralValue';\nimport { DataScrollerRow } from './DataScrollerRow';\nimport { isSerializedLegacyElement, legacyElementMessage } from './isSerializedLegacyElement';\nimport { useIncrementalLoad } from './useIncrementalLoad';\nimport { useLoadOnReach } from './useLoadOnReach';\n\n/** How tall an inline scroller is when no `scrollHeight` was authored: without a height it would never overflow. */\nconst defaultScrollHeight = 320;\n\n/**\n * The `PrimeReact:dataScroller` component, a list that loads a chunk at a time as its end is reached.\n *\n * The entries are read as data: strings, numbers and records (see {@link DataScrollerRow}) from `items`, then\n * any child elements authored in the `items` (or `content`) slot, which render as themselves. Serialized\n * legacy UI elements in `items` are refused with a visible message, not shown as JSON.\n *\n * - `inline: true` scrolls inside the control, `scrollHeight` pixels tall (320 when omitted). `inline: false`\n * loads as the page scrolls the end of the list into view.\n * - The \"Load more\" button remains for keyboard and assistive technology; focus moves to the first entry it\n * loads, and the number shown is announced.\n * - A disabled element loads nothing on scroll and its button is disabled.\n * - The loaded count restarts when `rows` or the content of `items` changes.\n */\nexport function PrimeDataScroller({ element, slots, interactions }: RegisteredComponentProps) {\n const authored = useStructuralValue(arrayProperty(element, 'items'));\n const data = useMemo(() => authored.filter(entry => !isSerializedLegacyElement(entry) && entry !== null && entry !== undefined), [authored]);\n const refusal = legacyElementMessage(authored, 'items', \"Author them as child elements in the 'items' slot, or as data.\");\n const slotted = slots.items ?? slots.content ?? [];\n const rows = useMemo<ReactNode[]>(() => [...data.map((value, index) => <DataScrollerRow key={index} value={value} />), ...slotted], [data, slotted]);\n const chunk = Math.max(Math.floor(numberProperty(element, 'rows', 10)), 1);\n const inline = booleanProperty(element, 'inline', false);\n const scrollHeight = numberProperty(element, 'scrollHeight', defaultScrollHeight);\n const enabled = element.isEnabled;\n const { loaded, loadMore } = useIncrementalLoad(rows.length, chunk, data);\n const canLoad = loaded < rows.length;\n const scroller = useRef<HTMLDivElement>(null);\n const sentinel = useRef<HTMLDivElement>(null);\n const entries = useRef<(HTMLLIElement | null)[]>([]);\n const focusIndex = useRef<number | undefined>(undefined);\n\n useLoadOnReach(sentinel, inline ? scroller : null, enabled && canLoad, loaded, loadMore);\n\n useEffect(() => {\n if (focusIndex.current === undefined) return;\n entries.current[focusIndex.current]?.focus();\n focusIndex.current = undefined;\n }, [loaded]);\n\n const loadByButton = () => {\n focusIndex.current = loaded;\n loadMore();\n };\n\n return (\n <div\n data-scene-id={element.id}\n data-scene-component='dataScroller'\n aria-disabled={!enabled}\n onClick={interactions?.onClick}\n onDoubleClick={interactions?.onDoubleClick}>\n <div\n ref={scroller}\n role='region'\n tabIndex={inline ? 0 : undefined}\n aria-label={stringProperty(element, 'ariaLabel', 'Scrollable data')}\n style={inline ? { maxHeight: `${scrollHeight}px`, overflowY: 'auto' } : undefined}>\n <ol>\n {rows.slice(0, loaded).map((row, index) => <li key={index} tabIndex={-1} ref={node => { entries.current[index] = node; }}>{row}</li>)}\n </ol>\n {canLoad && <div ref={sentinel} aria-hidden='true' />}\n </div>\n {rows.length === 0 && <p role='status'>{stringProperty(element, 'emptyLabel', 'No items to show')}</p>}\n {refusal !== undefined && <p role='alert' data-scene-state='legacy-elements'>{refusal}</p>}\n {canLoad && <button type='button' disabled={!enabled} onClick={loadByButton}>Load more</button>}\n {rows.length > 0 && <output aria-live='polite'>{`Showing ${loaded} of ${rows.length} items`}</output>}\n </div>\n );\n}\n"],"names":["defaultScrollHeight","PrimeDataScroller","element","slots","interactions","authored","useStructuralValue","arrayProperty","data","useMemo","filter","entry","isSerializedLegacyElement","undefined","refusal","legacyElementMessage","slotted","items","content","rows","map","value","index","_jsx","DataScrollerRow","chunk","Math","max","floor","numberProperty","inline","booleanProperty","scrollHeight","enabled","isEnabled","loaded","loadMore","useIncrementalLoad","length","canLoad","scroller","useRef","sentinel","entries","focusIndex","useLoadOnReach","useEffect","current","focus","loadByButton","_jsxs","div","data-scene-id","id","data-scene-component","aria-disabled","onClick","onDoubleClick","ref","role","tabIndex","aria-label","stringProperty","style","maxHeight","overflowY","ol","slice","row","li","node","aria-hidden","p","data-scene-state","button","type","disabled","output","aria-live"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { RegisteredComponentProps } from '@cratis/scene.react';
2
+ export declare function PrimeTreeTable({ element, interactions }: RegisteredComponentProps): import("react").JSX.Element;
3
+ //# sourceMappingURL=PrimeTreeTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrimeTreeTable.d.ts","sourceRoot":"","sources":["../../../data/PrimeTreeTable.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAoC/D,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,wBAAwB,+BAwGjF"}
@@ -0,0 +1,215 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useMemo, useState, useEffect } from 'react';
3
+ import { arrayProperty, numberProperty, booleanProperty, stringProperty } from '../properties.js';
4
+ import { resolveEnumeration } from '../resolveEnumeration.js';
5
+ import { toTreeNodes, countUnreadableEntries } from '../treeNodes.js';
6
+ import { useResettingState } from '../useResettingState.js';
7
+ import { useStructuralValue } from '../useStructuralValue.js';
8
+ import { TreeTableRowView } from './TreeTableRowView.js';
9
+ import { TreeTableSelectionMode } from './TreeTableSelectionMode.js';
10
+ import { columnDefinitions } from './columnDefinitions.js';
11
+ import { settleSelection, toggleCheckbox } from './checkboxSelection.js';
12
+ import { isSerializedLegacyElement, legacyElementMessage } from './isSerializedLegacyElement.js';
13
+ import { selectionKeysOf } from './selectionKeysOf.js';
14
+ import { expandedKeysOf, visibleRows } from './treeTableRows.js';
15
+ import { useTreeGridNavigation } from './useTreeGridNavigation.js';
16
+
17
+ const labelColumn = [
18
+ {
19
+ field: 'label',
20
+ header: 'Label',
21
+ sortable: false
22
+ }
23
+ ];
24
+ /**
25
+ * The `PrimeReact:treeTable` component, an ARIA tree grid over the canonical Scene node and column properties.
26
+ *
27
+ * `items` is an array of nodes - strings, numbers, or records with `key`, `label`, `data`, `children`,
28
+ * `expanded` and `selectable` - and the columns come from nested `column` elements, a `columns` property or the
29
+ * fields of the first row's `data`, in that order (see `columnDefinitions`). Serialized legacy UI elements in
30
+ * `items` or `columns` are refused with a visible message; see the package documentation for how they map to
31
+ * canonical slots.
32
+ *
33
+ * - Selection follows the authored `selection` (keys, numbers, `{ key }` objects or PrimeReact's key map) and
34
+ * starts over when it changes; expansion starts from the authored `expanded` flags the same way. An unrelated
35
+ * property edit leaves what the user did alone.
36
+ * - In checkbox mode a parent checks and unchecks its subtree and shows a partial state when only some of it is
37
+ * checked.
38
+ * - The rows form a `treegrid` with a roving tab index and the usual arrow-key navigation.
39
+ * - Object cell values are shown readably, never as `[object Object]`.
40
+ */ function PrimeTreeTable({ element, interactions }) {
41
+ const authoredItems = useStructuralValue(arrayProperty(element, 'items'));
42
+ const items = useMemo(()=>authoredItems.filter((entry)=>!isSerializedLegacyElement(entry)), [
43
+ authoredItems
44
+ ]);
45
+ const nodes = useMemo(()=>toTreeNodes(items), [
46
+ items
47
+ ]);
48
+ const modeResolution = resolveEnumeration('selectionMode', element.properties.selectionMode, TreeTableSelectionMode, TreeTableSelectionMode.None);
49
+ const mode = modeResolution.isValid ? modeResolution.value : TreeTableSelectionMode.None;
50
+ const enabled = element.isEnabled;
51
+ const pageSize = Math.max(Math.floor(numberProperty(element, 'rows', 10)), 1);
52
+ const paginator = booleanProperty(element, 'paginator', false);
53
+ const [expanded, setExpanded] = useResettingState(expandedKeysOf(nodes), ()=>new Set(expandedKeysOf(nodes)));
54
+ const [requested, setRequested] = useResettingState(element.properties.selection, ()=>selectionKeysOf(element.properties.selection));
55
+ const [page, setPage] = useState(0);
56
+ const pageCount = Math.max(Math.ceil(nodes.length / pageSize), 1);
57
+ const currentPage = Math.min(page, pageCount - 1);
58
+ const rows = useMemo(()=>visibleRows(paginator ? nodes.slice(currentPage * pageSize, (currentPage + 1) * pageSize) : nodes, expanded), [
59
+ nodes,
60
+ paginator,
61
+ currentPage,
62
+ pageSize,
63
+ expanded
64
+ ]);
65
+ const settled = useMemo(()=>mode === TreeTableSelectionMode.Checkbox ? settleSelection(nodes, requested) : {
66
+ checked: requested,
67
+ states: new Map()
68
+ }, [
69
+ mode,
70
+ nodes,
71
+ requested
72
+ ]);
73
+ const columns = useMemo(()=>{
74
+ const first = rows.find((row)=>typeof row.node.data === 'object' && row.node.data !== null && !Array.isArray(row.node.data))?.node.data;
75
+ const defined = columnDefinitions(element, first === undefined ? [] : [
76
+ first
77
+ ]);
78
+ return defined.length > 0 ? defined : labelColumn;
79
+ }, [
80
+ element,
81
+ rows
82
+ ]);
83
+ useEffect(()=>setPage((current)=>Math.min(current, pageCount - 1)), [
84
+ pageCount
85
+ ]);
86
+ const toggle = (key)=>{
87
+ if (enabled) setExpanded((current)=>{
88
+ const next = new Set(current);
89
+ if (next.has(key)) next.delete(key);
90
+ else next.add(key);
91
+ return next;
92
+ });
93
+ };
94
+ const select = (row)=>{
95
+ if (mode === TreeTableSelectionMode.None || !enabled || row.node.selectable === false) return;
96
+ if (mode === TreeTableSelectionMode.Checkbox) {
97
+ setRequested(toggleCheckbox(nodes, settled, row.node));
98
+ } else if (mode === TreeTableSelectionMode.Single) {
99
+ setRequested(new Set([
100
+ row.key
101
+ ]));
102
+ } else {
103
+ const next = new Set(settled.checked);
104
+ if (next.has(row.key)) next.delete(row.key);
105
+ else next.add(row.key);
106
+ setRequested(next);
107
+ }
108
+ interactions?.onSelect?.();
109
+ interactions?.onChange?.();
110
+ };
111
+ const navigation = useTreeGridNavigation({
112
+ rows,
113
+ expanded,
114
+ enabled,
115
+ toggle,
116
+ select
117
+ });
118
+ const changePage = (target)=>{
119
+ if (enabled && target >= 0 && target < pageCount) setPage(target);
120
+ };
121
+ const refusals = [
122
+ modeResolution.isValid ? undefined : modeResolution.message,
123
+ legacyElementMessage(authoredItems, 'items', 'Provide items as node data: strings, numbers, or records with key, label, data and children.'),
124
+ legacyElementMessage(arrayProperty(element, 'columns'), 'columns', "Author them as child elements in the 'columns' slot, or as column definitions.")
125
+ ].filter((message)=>message !== undefined);
126
+ const skipped = countUnreadableEntries(items);
127
+ return /*#__PURE__*/ jsxs("div", {
128
+ "data-scene-id": element.id,
129
+ "data-scene-component": "treeTable",
130
+ "aria-disabled": !enabled,
131
+ onClick: interactions?.onClick,
132
+ onDoubleClick: interactions?.onDoubleClick,
133
+ children: [
134
+ /*#__PURE__*/ jsxs("table", {
135
+ role: "treegrid",
136
+ "aria-label": stringProperty(element, 'ariaLabel', 'Hierarchical data'),
137
+ "aria-multiselectable": mode === TreeTableSelectionMode.Multiple || mode === TreeTableSelectionMode.Checkbox ? true : undefined,
138
+ children: [
139
+ /*#__PURE__*/ jsx("thead", {
140
+ children: /*#__PURE__*/ jsx("tr", {
141
+ role: "row",
142
+ children: columns.map((column, index)=>/*#__PURE__*/ jsx("th", {
143
+ role: "columnheader",
144
+ children: column.header
145
+ }, index))
146
+ })
147
+ }),
148
+ /*#__PURE__*/ jsxs("tbody", {
149
+ children: [
150
+ rows.map((row)=>/*#__PURE__*/ jsx(TreeTableRowView, {
151
+ row: row,
152
+ columns: columns,
153
+ mode: mode,
154
+ enabled: enabled,
155
+ expanded: expanded.has(row.key),
156
+ selected: settled.checked.has(row.key),
157
+ checkState: settled.states.get(row.key),
158
+ tabStop: navigation.tabStopKey === row.key,
159
+ register: navigation.register,
160
+ onActivate: ()=>navigation.activate(row.key),
161
+ onToggle: ()=>toggle(row.key),
162
+ onSelect: ()=>select(row),
163
+ onKeyDown: (event)=>navigation.onKeyDown(row, event)
164
+ }, row.key)),
165
+ rows.length === 0 && /*#__PURE__*/ jsx("tr", {
166
+ role: "row",
167
+ children: /*#__PURE__*/ jsx("td", {
168
+ role: "gridcell",
169
+ colSpan: columns.length,
170
+ children: stringProperty(element, 'emptyLabel', 'No records found')
171
+ })
172
+ })
173
+ ]
174
+ })
175
+ ]
176
+ }),
177
+ paginator && /*#__PURE__*/ jsxs("nav", {
178
+ "aria-label": "Tree table pages",
179
+ children: [
180
+ /*#__PURE__*/ jsx("button", {
181
+ type: "button",
182
+ "aria-disabled": !enabled || currentPage === 0,
183
+ onClick: ()=>changePage(currentPage - 1),
184
+ children: "Previous"
185
+ }),
186
+ /*#__PURE__*/ jsxs("span", {
187
+ children: [
188
+ currentPage + 1,
189
+ " / ",
190
+ pageCount
191
+ ]
192
+ }),
193
+ /*#__PURE__*/ jsx("button", {
194
+ type: "button",
195
+ "aria-disabled": !enabled || currentPage + 1 >= pageCount,
196
+ onClick: ()=>changePage(currentPage + 1),
197
+ children: "Next"
198
+ })
199
+ ]
200
+ }),
201
+ refusals.map((message)=>/*#__PURE__*/ jsx("p", {
202
+ role: "alert",
203
+ "data-scene-state": "refused",
204
+ children: message
205
+ }, message)),
206
+ skipped > 0 && /*#__PURE__*/ jsx("p", {
207
+ role: "status",
208
+ children: `${skipped} entr${skipped === 1 ? 'y' : 'ies'} of items could not be read as a node and ${skipped === 1 ? 'was' : 'were'} skipped.`
209
+ })
210
+ ]
211
+ });
212
+ }
213
+
214
+ export { PrimeTreeTable };
215
+ //# sourceMappingURL=PrimeTreeTable.js.map