@cratis/scene.primereact 4.5.0 → 4.7.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 (513) hide show
  1. package/.storybook/preview.tsx +8 -1
  2. package/EnumerationResolution.ts +7 -0
  3. package/README.md +42 -10
  4. package/chart/ChartGallery.stories.tsx +63 -0
  5. package/chart/ChartType.ts +14 -0
  6. package/chart/ChartTypeResolution.ts +14 -0
  7. package/chart/PrimeChart.tsx +62 -0
  8. package/chart/chartHasData.ts +22 -0
  9. package/chart/chartTypeChoices.ts +32 -0
  10. package/chart/index.ts +7 -0
  11. package/chart/resolveChartType.ts +61 -0
  12. package/chart/useChart.ts +61 -0
  13. package/data/DataGallery.stories.tsx +6 -0
  14. package/data/DataScrollerRow.tsx +35 -0
  15. package/data/PrimeDataScroller.tsx +84 -0
  16. package/data/PrimeTreeTable.tsx +145 -0
  17. package/data/TreeTableCheckState.ts +9 -0
  18. package/data/TreeTableRow.ts +22 -0
  19. package/data/TreeTableRowView.tsx +86 -0
  20. package/data/TreeTableSelectionMode.ts +10 -0
  21. package/data/checkboxSelection.ts +92 -0
  22. package/data/index.ts +4 -0
  23. package/data/isSerializedLegacyElement.ts +30 -0
  24. package/data/readableValue.ts +32 -0
  25. package/data/selectionKeysOf.ts +40 -0
  26. package/data/treeTableRows.ts +32 -0
  27. package/data/useIncrementalLoad.ts +36 -0
  28. package/data/useLoadOnReach.ts +31 -0
  29. package/data/useTreeGridNavigation.ts +81 -0
  30. package/dist/cjs/chart/ChartType.js +18 -0
  31. package/dist/cjs/chart/ChartType.js.map +1 -0
  32. package/dist/cjs/chart/PrimeChart.js +92 -0
  33. package/dist/cjs/chart/PrimeChart.js.map +1 -0
  34. package/dist/cjs/chart/chartHasData.js +24 -0
  35. package/dist/cjs/chart/chartHasData.js.map +1 -0
  36. package/dist/cjs/chart/chartTypeChoices.js +43 -0
  37. package/dist/cjs/chart/chartTypeChoices.js.map +1 -0
  38. package/dist/cjs/chart/resolveChartType.js +69 -0
  39. package/dist/cjs/chart/resolveChartType.js.map +1 -0
  40. package/dist/cjs/chart/useChart.js +62 -0
  41. package/dist/cjs/chart/useChart.js.map +1 -0
  42. package/dist/cjs/data/DataScrollerRow.js +50 -0
  43. package/dist/cjs/data/DataScrollerRow.js.map +1 -0
  44. package/dist/cjs/data/PrimeDataScroller.js +120 -0
  45. package/dist/cjs/data/PrimeDataScroller.js.map +1 -0
  46. package/dist/cjs/data/PrimeTreeTable.js +217 -0
  47. package/dist/cjs/data/PrimeTreeTable.js.map +1 -0
  48. package/dist/cjs/data/TreeTableCheckState.js +13 -0
  49. package/dist/cjs/data/TreeTableCheckState.js.map +1 -0
  50. package/dist/cjs/data/TreeTableRowView.js +76 -0
  51. package/dist/cjs/data/TreeTableRowView.js.map +1 -0
  52. package/dist/cjs/data/TreeTableSelectionMode.js +14 -0
  53. package/dist/cjs/data/TreeTableSelectionMode.js.map +1 -0
  54. package/dist/cjs/data/checkboxSelection.js +88 -0
  55. package/dist/cjs/data/checkboxSelection.js.map +1 -0
  56. package/dist/cjs/data/isSerializedLegacyElement.js +30 -0
  57. package/dist/cjs/data/isSerializedLegacyElement.js.map +1 -0
  58. package/dist/cjs/data/readableValue.js +31 -0
  59. package/dist/cjs/data/readableValue.js.map +1 -0
  60. package/dist/cjs/data/selectionKeysOf.js +40 -0
  61. package/dist/cjs/data/selectionKeysOf.js.map +1 -0
  62. package/dist/cjs/data/treeTableRows.js +42 -0
  63. package/dist/cjs/data/treeTableRows.js.map +1 -0
  64. package/dist/cjs/data/useIncrementalLoad.js +46 -0
  65. package/dist/cjs/data/useIncrementalLoad.js.map +1 -0
  66. package/dist/cjs/data/useLoadOnReach.js +42 -0
  67. package/dist/cjs/data/useLoadOnReach.js.map +1 -0
  68. package/dist/cjs/data/useTreeGridNavigation.js +75 -0
  69. package/dist/cjs/data/useTreeGridNavigation.js.map +1 -0
  70. package/dist/cjs/editor/PrimeEditor.js +96 -0
  71. package/dist/cjs/editor/PrimeEditor.js.map +1 -0
  72. package/dist/cjs/editor/QuillLoaderContext.js +10 -0
  73. package/dist/cjs/editor/QuillLoaderContext.js.map +1 -0
  74. package/dist/cjs/editor/QuillLoaderProvider.js +21 -0
  75. package/dist/cjs/editor/QuillLoaderProvider.js.map +1 -0
  76. package/dist/cjs/editor/applyHtml.js +25 -0
  77. package/dist/cjs/editor/applyHtml.js.map +1 -0
  78. package/dist/cjs/editor/characterCount.js +10 -0
  79. package/dist/cjs/editor/characterCount.js.map +1 -0
  80. package/dist/cjs/editor/htmlToPlainText.js +101 -0
  81. package/dist/cjs/editor/htmlToPlainText.js.map +1 -0
  82. package/dist/cjs/editor/renderSafeNodes.js +35 -0
  83. package/dist/cjs/editor/renderSafeNodes.js.map +1 -0
  84. package/dist/cjs/editor/safeUrls.js +44 -0
  85. package/dist/cjs/editor/safeUrls.js.map +1 -0
  86. package/dist/cjs/editor/sanitizeHtml.js +140 -0
  87. package/dist/cjs/editor/sanitizeHtml.js.map +1 -0
  88. package/dist/cjs/editor/serializeSafeNodes.js +33 -0
  89. package/dist/cjs/editor/serializeSafeNodes.js.map +1 -0
  90. package/dist/cjs/editor/toolbarLayout.js +35 -0
  91. package/dist/cjs/editor/toolbarLayout.js.map +1 -0
  92. package/dist/cjs/editor/useQuillEditor.js +137 -0
  93. package/dist/cjs/editor/useQuillEditor.js.map +1 -0
  94. package/dist/cjs/file/FileUploadContext.js +13 -0
  95. package/dist/cjs/file/FileUploadContext.js.map +1 -0
  96. package/dist/cjs/file/FileUploadHandlerProvider.js +25 -0
  97. package/dist/cjs/file/FileUploadHandlerProvider.js.map +1 -0
  98. package/dist/cjs/file/FileUploadMode.js +13 -0
  99. package/dist/cjs/file/FileUploadMode.js.map +1 -0
  100. package/dist/cjs/file/PrimeFileUpload.js +161 -0
  101. package/dist/cjs/file/PrimeFileUpload.js.map +1 -0
  102. package/dist/cjs/file/postFiles.js +31 -0
  103. package/dist/cjs/file/postFiles.js.map +1 -0
  104. package/dist/cjs/file/resolveUploadTarget.js +68 -0
  105. package/dist/cjs/file/resolveUploadTarget.js.map +1 -0
  106. package/dist/cjs/file/useUploadSession.js +62 -0
  107. package/dist/cjs/file/useUploadSession.js.map +1 -0
  108. package/dist/cjs/form/MultiStateGlyph.js +59 -0
  109. package/dist/cjs/form/MultiStateGlyph.js.map +1 -0
  110. package/dist/cjs/form/PrimeMultiStateCheckbox.js +123 -0
  111. package/dist/cjs/form/PrimeMultiStateCheckbox.js.map +1 -0
  112. package/dist/cjs/form/multiStateOptions.js +77 -0
  113. package/dist/cjs/form/multiStateOptions.js.map +1 -0
  114. package/dist/cjs/form/multiStateStates.js +32 -0
  115. package/dist/cjs/form/multiStateStates.js.map +1 -0
  116. package/dist/cjs/form/useMultiStateSelection.js +51 -0
  117. package/dist/cjs/form/useMultiStateSelection.js.map +1 -0
  118. package/dist/cjs/index.js +44 -0
  119. package/dist/cjs/index.js.map +1 -1
  120. package/dist/cjs/legacyEnumerationChoices.js +39 -0
  121. package/dist/cjs/legacyEnumerationChoices.js.map +1 -0
  122. package/dist/cjs/loadQuill/index.js +22 -0
  123. package/dist/cjs/loadQuill/index.js.map +1 -0
  124. package/dist/cjs/primeReactComponents.js +15 -0
  125. package/dist/cjs/primeReactComponents.js.map +1 -1
  126. package/dist/cjs/primeReactDescriptors.js +400 -0
  127. package/dist/cjs/primeReactDescriptors.js.map +1 -0
  128. package/dist/cjs/primeReactPackage.js +8 -0
  129. package/dist/cjs/primeReactPackage.js.map +1 -1
  130. package/dist/cjs/properties.js +11 -0
  131. package/dist/cjs/properties.js.map +1 -1
  132. package/dist/cjs/resolveEnumeration.js +55 -0
  133. package/dist/cjs/resolveEnumeration.js.map +1 -0
  134. package/dist/cjs/structurallyEqual.js +27 -0
  135. package/dist/cjs/structurallyEqual.js.map +1 -0
  136. package/dist/cjs/treeNodes.js +42 -7
  137. package/dist/cjs/treeNodes.js.map +1 -1
  138. package/dist/cjs/useResettingState.js +47 -0
  139. package/dist/cjs/useResettingState.js.map +1 -0
  140. package/dist/cjs/useStructuralValue.js +20 -0
  141. package/dist/cjs/useStructuralValue.js.map +1 -0
  142. package/dist/esm/EnumerationResolution.d.ts +9 -0
  143. package/dist/esm/EnumerationResolution.d.ts.map +1 -0
  144. package/dist/esm/EnumerationResolution.js +2 -0
  145. package/dist/esm/EnumerationResolution.js.map +1 -0
  146. package/dist/esm/chart/ChartGallery.stories.d.ts +14 -0
  147. package/dist/esm/chart/ChartGallery.stories.d.ts.map +1 -0
  148. package/dist/esm/chart/ChartGallery.stories.js +47 -0
  149. package/dist/esm/chart/ChartGallery.stories.js.map +1 -0
  150. package/dist/esm/chart/ChartType.d.ts +11 -0
  151. package/dist/esm/chart/ChartType.d.ts.map +1 -0
  152. package/dist/esm/chart/ChartType.js +16 -0
  153. package/dist/esm/chart/ChartType.js.map +1 -0
  154. package/dist/esm/chart/ChartTypeResolution.d.ts +10 -0
  155. package/dist/esm/chart/ChartTypeResolution.d.ts.map +1 -0
  156. package/dist/esm/chart/ChartTypeResolution.js +2 -0
  157. package/dist/esm/chart/ChartTypeResolution.js.map +1 -0
  158. package/dist/esm/chart/PrimeChart.d.ts +3 -0
  159. package/dist/esm/chart/PrimeChart.d.ts.map +1 -0
  160. package/dist/esm/chart/PrimeChart.js +90 -0
  161. package/dist/esm/chart/PrimeChart.js.map +1 -0
  162. package/dist/esm/chart/chartHasData.d.ts +2 -0
  163. package/dist/esm/chart/chartHasData.d.ts.map +1 -0
  164. package/dist/esm/chart/chartHasData.js +22 -0
  165. package/dist/esm/chart/chartHasData.js.map +1 -0
  166. package/dist/esm/chart/chartTypeChoices.d.ts +3 -0
  167. package/dist/esm/chart/chartTypeChoices.d.ts.map +1 -0
  168. package/dist/esm/chart/chartTypeChoices.js +41 -0
  169. package/dist/esm/chart/chartTypeChoices.js.map +1 -0
  170. package/dist/esm/chart/index.d.ts +5 -0
  171. package/dist/esm/chart/index.d.ts.map +1 -0
  172. package/dist/esm/chart/index.js +5 -0
  173. package/dist/esm/chart/index.js.map +1 -0
  174. package/dist/esm/chart/resolveChartType.d.ts +6 -0
  175. package/dist/esm/chart/resolveChartType.d.ts.map +1 -0
  176. package/dist/esm/chart/resolveChartType.js +66 -0
  177. package/dist/esm/chart/resolveChartType.js.map +1 -0
  178. package/dist/esm/chart/useChart.d.ts +4 -0
  179. package/dist/esm/chart/useChart.d.ts.map +1 -0
  180. package/dist/esm/chart/useChart.js +60 -0
  181. package/dist/esm/chart/useChart.js.map +1 -0
  182. package/dist/esm/data/DataGallery.stories.d.ts.map +1 -1
  183. package/dist/esm/data/DataGallery.stories.js +6 -0
  184. package/dist/esm/data/DataGallery.stories.js.map +1 -1
  185. package/dist/esm/data/DataScrollerRow.d.ts +4 -0
  186. package/dist/esm/data/DataScrollerRow.d.ts.map +1 -0
  187. package/dist/esm/data/DataScrollerRow.js +48 -0
  188. package/dist/esm/data/DataScrollerRow.js.map +1 -0
  189. package/dist/esm/data/PrimeDataScroller.d.ts +3 -0
  190. package/dist/esm/data/PrimeDataScroller.d.ts.map +1 -0
  191. package/dist/esm/data/PrimeDataScroller.js +118 -0
  192. package/dist/esm/data/PrimeDataScroller.js.map +1 -0
  193. package/dist/esm/data/PrimeTreeTable.d.ts +3 -0
  194. package/dist/esm/data/PrimeTreeTable.d.ts.map +1 -0
  195. package/dist/esm/data/PrimeTreeTable.js +215 -0
  196. package/dist/esm/data/PrimeTreeTable.js.map +1 -0
  197. package/dist/esm/data/TreeTableCheckState.d.ts +6 -0
  198. package/dist/esm/data/TreeTableCheckState.d.ts.map +1 -0
  199. package/dist/esm/data/TreeTableCheckState.js +11 -0
  200. package/dist/esm/data/TreeTableCheckState.js.map +1 -0
  201. package/dist/esm/data/TreeTableRow.d.ts +10 -0
  202. package/dist/esm/data/TreeTableRow.d.ts.map +1 -0
  203. package/dist/esm/data/TreeTableRow.js +2 -0
  204. package/dist/esm/data/TreeTableRow.js.map +1 -0
  205. package/dist/esm/data/TreeTableRowView.d.ts +21 -0
  206. package/dist/esm/data/TreeTableRowView.d.ts.map +1 -0
  207. package/dist/esm/data/TreeTableRowView.js +74 -0
  208. package/dist/esm/data/TreeTableRowView.js.map +1 -0
  209. package/dist/esm/data/TreeTableSelectionMode.d.ts +7 -0
  210. package/dist/esm/data/TreeTableSelectionMode.d.ts.map +1 -0
  211. package/dist/esm/data/TreeTableSelectionMode.js +12 -0
  212. package/dist/esm/data/TreeTableSelectionMode.js.map +1 -0
  213. package/dist/esm/data/checkboxSelection.d.ts +9 -0
  214. package/dist/esm/data/checkboxSelection.d.ts.map +1 -0
  215. package/dist/esm/data/checkboxSelection.js +85 -0
  216. package/dist/esm/data/checkboxSelection.js.map +1 -0
  217. package/dist/esm/data/index.d.ts +4 -0
  218. package/dist/esm/data/index.d.ts.map +1 -1
  219. package/dist/esm/data/index.js +4 -0
  220. package/dist/esm/data/index.js.map +1 -1
  221. package/dist/esm/data/isSerializedLegacyElement.d.ts +3 -0
  222. package/dist/esm/data/isSerializedLegacyElement.d.ts.map +1 -0
  223. package/dist/esm/data/isSerializedLegacyElement.js +27 -0
  224. package/dist/esm/data/isSerializedLegacyElement.js.map +1 -0
  225. package/dist/esm/data/readableValue.d.ts +2 -0
  226. package/dist/esm/data/readableValue.d.ts.map +1 -0
  227. package/dist/esm/data/readableValue.js +29 -0
  228. package/dist/esm/data/readableValue.js.map +1 -0
  229. package/dist/esm/data/selectionKeysOf.d.ts +2 -0
  230. package/dist/esm/data/selectionKeysOf.d.ts.map +1 -0
  231. package/dist/esm/data/selectionKeysOf.js +38 -0
  232. package/dist/esm/data/selectionKeysOf.js.map +1 -0
  233. package/dist/esm/data/treeTableRows.d.ts +6 -0
  234. package/dist/esm/data/treeTableRows.d.ts.map +1 -0
  235. package/dist/esm/data/treeTableRows.js +38 -0
  236. package/dist/esm/data/treeTableRows.js.map +1 -0
  237. package/dist/esm/data/useIncrementalLoad.d.ts +6 -0
  238. package/dist/esm/data/useIncrementalLoad.d.ts.map +1 -0
  239. package/dist/esm/data/useIncrementalLoad.js +44 -0
  240. package/dist/esm/data/useIncrementalLoad.js.map +1 -0
  241. package/dist/esm/data/useLoadOnReach.d.ts +3 -0
  242. package/dist/esm/data/useLoadOnReach.d.ts.map +1 -0
  243. package/dist/esm/data/useLoadOnReach.js +40 -0
  244. package/dist/esm/data/useLoadOnReach.js.map +1 -0
  245. package/dist/esm/data/useTreeGridNavigation.d.ts +17 -0
  246. package/dist/esm/data/useTreeGridNavigation.d.ts.map +1 -0
  247. package/dist/esm/data/useTreeGridNavigation.js +73 -0
  248. package/dist/esm/data/useTreeGridNavigation.js.map +1 -0
  249. package/dist/esm/editor/PrimeEditor.d.ts +3 -0
  250. package/dist/esm/editor/PrimeEditor.d.ts.map +1 -0
  251. package/dist/esm/editor/PrimeEditor.js +94 -0
  252. package/dist/esm/editor/PrimeEditor.js.map +1 -0
  253. package/dist/esm/editor/QuillConstructor.d.ts +4 -0
  254. package/dist/esm/editor/QuillConstructor.d.ts.map +1 -0
  255. package/dist/esm/editor/QuillConstructor.js +2 -0
  256. package/dist/esm/editor/QuillConstructor.js.map +1 -0
  257. package/dist/esm/editor/QuillEditorOptions.d.ts +13 -0
  258. package/dist/esm/editor/QuillEditorOptions.d.ts.map +1 -0
  259. package/dist/esm/editor/QuillEditorOptions.js +2 -0
  260. package/dist/esm/editor/QuillEditorOptions.js.map +1 -0
  261. package/dist/esm/editor/QuillEditorState.d.ts +6 -0
  262. package/dist/esm/editor/QuillEditorState.d.ts.map +1 -0
  263. package/dist/esm/editor/QuillEditorState.js +2 -0
  264. package/dist/esm/editor/QuillEditorState.js.map +1 -0
  265. package/dist/esm/editor/QuillInstance.d.ts +16 -0
  266. package/dist/esm/editor/QuillInstance.d.ts.map +1 -0
  267. package/dist/esm/editor/QuillInstance.js +2 -0
  268. package/dist/esm/editor/QuillInstance.js.map +1 -0
  269. package/dist/esm/editor/QuillLoader.d.ts +5 -0
  270. package/dist/esm/editor/QuillLoader.d.ts.map +1 -0
  271. package/dist/esm/editor/QuillLoader.js +2 -0
  272. package/dist/esm/editor/QuillLoader.js.map +1 -0
  273. package/dist/esm/editor/QuillLoaderContext.d.ts +3 -0
  274. package/dist/esm/editor/QuillLoaderContext.d.ts.map +1 -0
  275. package/dist/esm/editor/QuillLoaderContext.js +8 -0
  276. package/dist/esm/editor/QuillLoaderContext.js.map +1 -0
  277. package/dist/esm/editor/QuillLoaderProvider.d.ts +8 -0
  278. package/dist/esm/editor/QuillLoaderProvider.d.ts.map +1 -0
  279. package/dist/esm/editor/QuillLoaderProvider.js +19 -0
  280. package/dist/esm/editor/QuillLoaderProvider.js.map +1 -0
  281. package/dist/esm/editor/QuillOptions.d.ts +9 -0
  282. package/dist/esm/editor/QuillOptions.d.ts.map +1 -0
  283. package/dist/esm/editor/QuillOptions.js +2 -0
  284. package/dist/esm/editor/QuillOptions.js.map +1 -0
  285. package/dist/esm/editor/SafeElement.d.ts +7 -0
  286. package/dist/esm/editor/SafeElement.d.ts.map +1 -0
  287. package/dist/esm/editor/SafeElement.js +2 -0
  288. package/dist/esm/editor/SafeElement.js.map +1 -0
  289. package/dist/esm/editor/SafeNode.d.ts +3 -0
  290. package/dist/esm/editor/SafeNode.d.ts.map +1 -0
  291. package/dist/esm/editor/SafeNode.js +2 -0
  292. package/dist/esm/editor/SafeNode.js.map +1 -0
  293. package/dist/esm/editor/applyHtml.d.ts +3 -0
  294. package/dist/esm/editor/applyHtml.d.ts.map +1 -0
  295. package/dist/esm/editor/applyHtml.js +23 -0
  296. package/dist/esm/editor/applyHtml.js.map +1 -0
  297. package/dist/esm/editor/characterCount.d.ts +3 -0
  298. package/dist/esm/editor/characterCount.d.ts.map +1 -0
  299. package/dist/esm/editor/characterCount.js +8 -0
  300. package/dist/esm/editor/characterCount.js.map +1 -0
  301. package/dist/esm/editor/htmlToPlainText.d.ts +2 -0
  302. package/dist/esm/editor/htmlToPlainText.d.ts.map +1 -0
  303. package/dist/esm/editor/htmlToPlainText.js +99 -0
  304. package/dist/esm/editor/htmlToPlainText.js.map +1 -0
  305. package/dist/esm/editor/index.d.ts +14 -0
  306. package/dist/esm/editor/index.d.ts.map +1 -0
  307. package/dist/esm/editor/index.js +14 -0
  308. package/dist/esm/editor/index.js.map +1 -0
  309. package/dist/esm/editor/renderSafeNodes.d.ts +4 -0
  310. package/dist/esm/editor/renderSafeNodes.d.ts.map +1 -0
  311. package/dist/esm/editor/renderSafeNodes.js +33 -0
  312. package/dist/esm/editor/renderSafeNodes.js.map +1 -0
  313. package/dist/esm/editor/safeUrls.d.ts +3 -0
  314. package/dist/esm/editor/safeUrls.d.ts.map +1 -0
  315. package/dist/esm/editor/safeUrls.js +41 -0
  316. package/dist/esm/editor/safeUrls.js.map +1 -0
  317. package/dist/esm/editor/sanitizeHtml.d.ts +3 -0
  318. package/dist/esm/editor/sanitizeHtml.d.ts.map +1 -0
  319. package/dist/esm/editor/sanitizeHtml.js +138 -0
  320. package/dist/esm/editor/sanitizeHtml.js.map +1 -0
  321. package/dist/esm/editor/serializeSafeNodes.d.ts +3 -0
  322. package/dist/esm/editor/serializeSafeNodes.d.ts.map +1 -0
  323. package/dist/esm/editor/serializeSafeNodes.js +31 -0
  324. package/dist/esm/editor/serializeSafeNodes.js.map +1 -0
  325. package/dist/esm/editor/toolbarLayout.d.ts +2 -0
  326. package/dist/esm/editor/toolbarLayout.d.ts.map +1 -0
  327. package/dist/esm/editor/toolbarLayout.js +33 -0
  328. package/dist/esm/editor/toolbarLayout.js.map +1 -0
  329. package/dist/esm/editor/useQuillEditor.d.ts +4 -0
  330. package/dist/esm/editor/useQuillEditor.d.ts.map +1 -0
  331. package/dist/esm/editor/useQuillEditor.js +135 -0
  332. package/dist/esm/editor/useQuillEditor.js.map +1 -0
  333. package/dist/esm/file/FileGallery.stories.d.ts +19 -0
  334. package/dist/esm/file/FileGallery.stories.d.ts.map +1 -0
  335. package/dist/esm/file/FileGallery.stories.js +23 -0
  336. package/dist/esm/file/FileGallery.stories.js.map +1 -0
  337. package/dist/esm/file/FileUploadContext.d.ts +7 -0
  338. package/dist/esm/file/FileUploadContext.d.ts.map +1 -0
  339. package/dist/esm/file/FileUploadContext.js +11 -0
  340. package/dist/esm/file/FileUploadContext.js.map +1 -0
  341. package/dist/esm/file/FileUploadHandler.d.ts +4 -0
  342. package/dist/esm/file/FileUploadHandler.d.ts.map +1 -0
  343. package/dist/esm/file/FileUploadHandler.js +2 -0
  344. package/dist/esm/file/FileUploadHandler.js.map +1 -0
  345. package/dist/esm/file/FileUploadHandlerProvider.d.ts +9 -0
  346. package/dist/esm/file/FileUploadHandlerProvider.d.ts.map +1 -0
  347. package/dist/esm/file/FileUploadHandlerProvider.js +23 -0
  348. package/dist/esm/file/FileUploadHandlerProvider.js.map +1 -0
  349. package/dist/esm/file/FileUploadMode.d.ts +6 -0
  350. package/dist/esm/file/FileUploadMode.d.ts.map +1 -0
  351. package/dist/esm/file/FileUploadMode.js +11 -0
  352. package/dist/esm/file/FileUploadMode.js.map +1 -0
  353. package/dist/esm/file/PrimeFileUpload.d.ts +3 -0
  354. package/dist/esm/file/PrimeFileUpload.d.ts.map +1 -0
  355. package/dist/esm/file/PrimeFileUpload.js +159 -0
  356. package/dist/esm/file/PrimeFileUpload.js.map +1 -0
  357. package/dist/esm/file/UploadStatus.d.ts +5 -0
  358. package/dist/esm/file/UploadStatus.d.ts.map +1 -0
  359. package/dist/esm/file/UploadStatus.js +2 -0
  360. package/dist/esm/file/UploadStatus.js.map +1 -0
  361. package/dist/esm/file/UploadTarget.d.ts +8 -0
  362. package/dist/esm/file/UploadTarget.d.ts.map +1 -0
  363. package/dist/esm/file/UploadTarget.js +2 -0
  364. package/dist/esm/file/UploadTarget.js.map +1 -0
  365. package/dist/esm/file/index.d.ts +7 -0
  366. package/dist/esm/file/index.d.ts.map +1 -0
  367. package/dist/esm/file/index.js +7 -0
  368. package/dist/esm/file/index.js.map +1 -0
  369. package/dist/esm/file/postFiles.d.ts +2 -0
  370. package/dist/esm/file/postFiles.d.ts.map +1 -0
  371. package/dist/esm/file/postFiles.js +29 -0
  372. package/dist/esm/file/postFiles.js.map +1 -0
  373. package/dist/esm/file/resolveUploadTarget.d.ts +3 -0
  374. package/dist/esm/file/resolveUploadTarget.d.ts.map +1 -0
  375. package/dist/esm/file/resolveUploadTarget.js +66 -0
  376. package/dist/esm/file/resolveUploadTarget.js.map +1 -0
  377. package/dist/esm/file/useUploadSession.d.ts +10 -0
  378. package/dist/esm/file/useUploadSession.d.ts.map +1 -0
  379. package/dist/esm/file/useUploadSession.js +60 -0
  380. package/dist/esm/file/useUploadSession.js.map +1 -0
  381. package/dist/esm/form/FormGallery.stories.d.ts.map +1 -1
  382. package/dist/esm/form/FormGallery.stories.js +9 -0
  383. package/dist/esm/form/FormGallery.stories.js.map +1 -1
  384. package/dist/esm/form/MultiStateGlyph.d.ts +8 -0
  385. package/dist/esm/form/MultiStateGlyph.d.ts.map +1 -0
  386. package/dist/esm/form/MultiStateGlyph.js +57 -0
  387. package/dist/esm/form/MultiStateGlyph.js.map +1 -0
  388. package/dist/esm/form/MultiStateOption.d.ts +7 -0
  389. package/dist/esm/form/MultiStateOption.d.ts.map +1 -0
  390. package/dist/esm/form/MultiStateOption.js +2 -0
  391. package/dist/esm/form/MultiStateOption.js.map +1 -0
  392. package/dist/esm/form/PrimeMultiStateCheckbox.d.ts +3 -0
  393. package/dist/esm/form/PrimeMultiStateCheckbox.d.ts.map +1 -0
  394. package/dist/esm/form/PrimeMultiStateCheckbox.js +121 -0
  395. package/dist/esm/form/PrimeMultiStateCheckbox.js.map +1 -0
  396. package/dist/esm/form/index.d.ts +1 -0
  397. package/dist/esm/form/index.d.ts.map +1 -1
  398. package/dist/esm/form/index.js +1 -0
  399. package/dist/esm/form/index.js.map +1 -1
  400. package/dist/esm/form/multiStateOptions.d.ts +4 -0
  401. package/dist/esm/form/multiStateOptions.d.ts.map +1 -0
  402. package/dist/esm/form/multiStateOptions.js +75 -0
  403. package/dist/esm/form/multiStateOptions.js.map +1 -0
  404. package/dist/esm/form/multiStateStates.d.ts +4 -0
  405. package/dist/esm/form/multiStateStates.d.ts.map +1 -0
  406. package/dist/esm/form/multiStateStates.js +30 -0
  407. package/dist/esm/form/multiStateStates.js.map +1 -0
  408. package/dist/esm/form/useMultiStateSelection.d.ts +6 -0
  409. package/dist/esm/form/useMultiStateSelection.d.ts.map +1 -0
  410. package/dist/esm/form/useMultiStateSelection.js +49 -0
  411. package/dist/esm/form/useMultiStateSelection.js.map +1 -0
  412. package/dist/esm/index.d.ts +4 -0
  413. package/dist/esm/index.d.ts.map +1 -1
  414. package/dist/esm/index.js +22 -2
  415. package/dist/esm/index.js.map +1 -1
  416. package/dist/esm/legacyEnumerationChoices.d.ts +3 -0
  417. package/dist/esm/legacyEnumerationChoices.d.ts.map +1 -0
  418. package/dist/esm/legacyEnumerationChoices.js +37 -0
  419. package/dist/esm/legacyEnumerationChoices.js.map +1 -0
  420. package/dist/esm/loadQuill/index.d.ts +3 -0
  421. package/dist/esm/loadQuill/index.d.ts.map +1 -0
  422. package/dist/esm/loadQuill/index.js +20 -0
  423. package/dist/esm/loadQuill/index.js.map +1 -0
  424. package/dist/esm/primeReactComponents.d.ts.map +1 -1
  425. package/dist/esm/primeReactComponents.js +15 -0
  426. package/dist/esm/primeReactComponents.js.map +1 -1
  427. package/dist/esm/primeReactDescriptors.d.ts +3 -0
  428. package/dist/esm/primeReactDescriptors.d.ts.map +1 -0
  429. package/dist/esm/primeReactDescriptors.js +398 -0
  430. package/dist/esm/primeReactDescriptors.js.map +1 -0
  431. package/dist/esm/primeReactPackage.d.ts.map +1 -1
  432. package/dist/esm/primeReactPackage.js +8 -0
  433. package/dist/esm/primeReactPackage.js.map +1 -1
  434. package/dist/esm/properties.d.ts +1 -0
  435. package/dist/esm/properties.d.ts.map +1 -1
  436. package/dist/esm/properties.js +11 -1
  437. package/dist/esm/properties.js.map +1 -1
  438. package/dist/esm/resolveEnumeration.d.ts +3 -0
  439. package/dist/esm/resolveEnumeration.d.ts.map +1 -0
  440. package/dist/esm/resolveEnumeration.js +53 -0
  441. package/dist/esm/resolveEnumeration.js.map +1 -0
  442. package/dist/esm/structurallyEqual.d.ts +2 -0
  443. package/dist/esm/structurallyEqual.d.ts.map +1 -0
  444. package/dist/esm/structurallyEqual.js +25 -0
  445. package/dist/esm/structurallyEqual.js.map +1 -0
  446. package/dist/esm/treeNodes.d.ts +2 -1
  447. package/dist/esm/treeNodes.d.ts.map +1 -1
  448. package/dist/esm/treeNodes.js +42 -8
  449. package/dist/esm/treeNodes.js.map +1 -1
  450. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  451. package/dist/esm/useResettingState.d.ts +3 -0
  452. package/dist/esm/useResettingState.d.ts.map +1 -0
  453. package/dist/esm/useResettingState.js +45 -0
  454. package/dist/esm/useResettingState.js.map +1 -0
  455. package/dist/esm/useStructuralValue.d.ts +2 -0
  456. package/dist/esm/useStructuralValue.d.ts.map +1 -0
  457. package/dist/esm/useStructuralValue.js +18 -0
  458. package/dist/esm/useStructuralValue.js.map +1 -0
  459. package/editor/PrimeEditor.tsx +83 -0
  460. package/editor/QuillConstructor.ts +8 -0
  461. package/editor/QuillEditorOptions.ts +29 -0
  462. package/editor/QuillEditorState.ts +14 -0
  463. package/editor/QuillInstance.ts +27 -0
  464. package/editor/QuillLoader.ts +13 -0
  465. package/editor/QuillLoaderContext.ts +8 -0
  466. package/editor/QuillLoaderProvider.tsx +24 -0
  467. package/editor/QuillOptions.ts +10 -0
  468. package/editor/SafeElement.ts +15 -0
  469. package/editor/SafeNode.ts +7 -0
  470. package/editor/applyHtml.ts +21 -0
  471. package/editor/characterCount.ts +9 -0
  472. package/editor/htmlToPlainText.ts +74 -0
  473. package/editor/index.ts +16 -0
  474. package/editor/renderSafeNodes.tsx +26 -0
  475. package/editor/safeUrls.ts +43 -0
  476. package/editor/sanitizeHtml.ts +94 -0
  477. package/editor/serializeSafeNodes.ts +26 -0
  478. package/editor/toolbarLayout.ts +10 -0
  479. package/editor/useQuillEditor.ts +114 -0
  480. package/file/FileGallery.stories.tsx +32 -0
  481. package/file/FileUploadContext.ts +17 -0
  482. package/file/FileUploadHandler.ts +15 -0
  483. package/file/FileUploadHandlerProvider.tsx +33 -0
  484. package/file/FileUploadMode.ts +9 -0
  485. package/file/PrimeFileUpload.tsx +129 -0
  486. package/file/UploadStatus.ts +9 -0
  487. package/file/UploadTarget.ts +12 -0
  488. package/file/index.ts +9 -0
  489. package/file/postFiles.ts +23 -0
  490. package/file/resolveUploadTarget.ts +61 -0
  491. package/file/useUploadSession.ts +67 -0
  492. package/form/FormGallery.stories.tsx +9 -0
  493. package/form/MultiStateGlyph.tsx +55 -0
  494. package/form/MultiStateOption.ts +17 -0
  495. package/form/PrimeMultiStateCheckbox.tsx +101 -0
  496. package/form/index.ts +1 -0
  497. package/form/multiStateOptions.ts +78 -0
  498. package/form/multiStateStates.ts +23 -0
  499. package/form/useMultiStateSelection.ts +48 -0
  500. package/index.ts +4 -0
  501. package/legacyEnumerationChoices.ts +35 -0
  502. package/loadQuill/index.ts +21 -0
  503. package/package.json +27 -7
  504. package/primeReactComponents.ts +12 -0
  505. package/primeReactDescriptors.ts +111 -0
  506. package/primeReactPackage.ts +5 -3
  507. package/primeReactTheme.css +69 -0
  508. package/properties.ts +14 -0
  509. package/resolveEnumeration.ts +50 -0
  510. package/structurallyEqual.ts +29 -0
  511. package/treeNodes.ts +44 -6
  512. package/useResettingState.ts +34 -0
  513. package/useStructuralValue.ts +17 -0
@@ -0,0 +1,55 @@
1
+ 'use strict';
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
+ /**
6
+ * Resolves an authored value to a member of one of this package's string enums.
7
+ *
8
+ * Three forms are accepted, and the stored value is never rewritten:
9
+ * - the canonical string value the enum declares (`'checkbox'`), which new documents use;
10
+ * - the ordinal of the original .NET enum (`3`), which migrated documents carry. The ordinal is the member's
11
+ * position in declaration order, so that order is part of the stored-data contract and must not change;
12
+ * - the .NET member name in its original Pascal case (`'Checkbox'`), which a JSON serialization of that enum
13
+ * produces.
14
+ *
15
+ * An absent value is the one default. Anything else - an out-of-range or fractional ordinal, a numeric
16
+ * string, a differently cased name, `null` - resolves to a finding with a message, because the intended
17
+ * behavior cannot be known and a silent fallback hides a mistyped document.
18
+ *
19
+ * @param property The property name, used in the message.
20
+ * @param value The authored value.
21
+ * @param members The enum object.
22
+ * @param fallback The member an absent value means.
23
+ * @returns The resolved member, or the finding.
24
+ */ function resolveEnumeration(property, value, members, fallback) {
25
+ if (value === undefined) return {
26
+ isValid: true,
27
+ value: fallback
28
+ };
29
+ const canonical = Object.values(members);
30
+ if (typeof value === 'number' && Number.isInteger(value) && value >= 0 && value < canonical.length) {
31
+ return {
32
+ isValid: true,
33
+ value: canonical[value]
34
+ };
35
+ }
36
+ if (typeof value === 'string') {
37
+ if (canonical.includes(value)) return {
38
+ isValid: true,
39
+ value: value
40
+ };
41
+ if (Object.hasOwn(members, value)) return {
42
+ isValid: true,
43
+ value: members[value]
44
+ };
45
+ }
46
+ const shown = typeof value === 'string' ? `'${value}'` : JSON.stringify(value) ?? String(value);
47
+ return {
48
+ isValid: false,
49
+ value,
50
+ message: `Unsupported ${property} ${shown}. Use one of ${canonical.join(', ')}, or a legacy ordinal from 0 to ${canonical.length - 1}.`
51
+ };
52
+ }
53
+
54
+ exports.resolveEnumeration = resolveEnumeration;
55
+ //# sourceMappingURL=resolveEnumeration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveEnumeration.js","sources":["../../resolveEnumeration.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 { EnumerationResolution } from './EnumerationResolution';\n\n/**\n * Resolves an authored value to a member of one of this package's string enums.\n *\n * Three forms are accepted, and the stored value is never rewritten:\n * - the canonical string value the enum declares (`'checkbox'`), which new documents use;\n * - the ordinal of the original .NET enum (`3`), which migrated documents carry. The ordinal is the member's\n * position in declaration order, so that order is part of the stored-data contract and must not change;\n * - the .NET member name in its original Pascal case (`'Checkbox'`), which a JSON serialization of that enum\n * produces.\n *\n * An absent value is the one default. Anything else - an out-of-range or fractional ordinal, a numeric\n * string, a differently cased name, `null` - resolves to a finding with a message, because the intended\n * behavior cannot be known and a silent fallback hides a mistyped document.\n *\n * @param property The property name, used in the message.\n * @param value The authored value.\n * @param members The enum object.\n * @param fallback The member an absent value means.\n * @returns The resolved member, or the finding.\n */\nexport function resolveEnumeration<TMember extends string>(\n property: string,\n value: unknown,\n members: Record<string, TMember>,\n fallback: TMember\n): EnumerationResolution<TMember> {\n if (value === undefined) return { isValid: true, value: fallback };\n\n const canonical = Object.values(members);\n if (typeof value === 'number' && Number.isInteger(value) && value >= 0 && value < canonical.length) {\n return { isValid: true, value: canonical[value] };\n }\n\n if (typeof value === 'string') {\n if (canonical.includes(value as TMember)) return { isValid: true, value: value as TMember };\n if (Object.hasOwn(members, value)) return { isValid: true, value: members[value] };\n }\n\n const shown = typeof value === 'string' ? `'${value}'` : JSON.stringify(value) ?? String(value);\n return {\n isValid: false,\n value,\n message: `Unsupported ${property} ${shown}. Use one of ${canonical.join(', ')}, or a legacy ordinal from 0 to ${canonical.length - 1}.`,\n };\n}\n"],"names":["resolveEnumeration","property","value","members","fallback","undefined","isValid","canonical","Object","values","Number","isInteger","length","includes","hasOwn","shown","JSON","stringify","String","message","join"],"mappings":";;AAAA;AACA;AAIA;;;;;;;;;;;;;;;;;;;IAoBO,SAASA,kBAAAA,CACZC,QAAgB,EAChBC,KAAc,EACdC,OAAgC,EAChCC,QAAiB,EAAA;IAEjB,IAAIF,KAAAA,KAAUG,WAAW,OAAO;QAAEC,OAAAA,EAAS,IAAA;QAAMJ,KAAAA,EAAOE;AAAS,KAAA;IAEjE,MAAMG,SAAAA,GAAYC,MAAAA,CAAOC,MAAM,CAACN,OAAAA,CAAAA;AAChC,IAAA,IAAI,OAAOD,KAAAA,KAAU,QAAA,IAAYQ,MAAAA,CAAOC,SAAS,CAACT,KAAAA,CAAAA,IAAUA,KAAAA,IAAS,CAAA,IAAKA,KAAAA,GAAQK,SAAAA,CAAUK,MAAM,EAAE;QAChG,OAAO;YAAEN,OAAAA,EAAS,IAAA;YAAMJ,KAAAA,EAAOK,SAAS,CAACL,KAAAA;AAAO,SAAA;AACpD,IAAA;IAEA,IAAI,OAAOA,UAAU,QAAA,EAAU;AAC3B,QAAA,IAAIK,SAAAA,CAAUM,QAAQ,CAACX,KAAAA,CAAAA,EAAmB,OAAO;YAAEI,OAAAA,EAAS,IAAA;YAAMJ,KAAAA,EAAOA;AAAiB,SAAA;AAC1F,QAAA,IAAIM,MAAAA,CAAOM,MAAM,CAACX,OAAAA,EAASD,QAAQ,OAAO;YAAEI,OAAAA,EAAS,IAAA;YAAMJ,KAAAA,EAAOC,OAAO,CAACD,KAAAA;AAAO,SAAA;AACrF,IAAA;AAEA,IAAA,MAAMa,KAAAA,GAAQ,OAAOb,KAAAA,KAAU,QAAA,GAAW,CAAC,CAAC,EAAEA,KAAAA,CAAM,CAAC,CAAC,GAAGc,IAAAA,CAAKC,SAAS,CAACf,UAAUgB,MAAAA,CAAOhB,KAAAA,CAAAA;IACzF,OAAO;QACHI,OAAAA,EAAS,KAAA;AACTJ,QAAAA,KAAAA;QACAiB,OAAAA,EAAS,CAAC,YAAY,EAAElB,QAAAA,CAAS,CAAC,EAAEc,KAAAA,CAAM,aAAa,EAAER,SAAAA,CAAUa,IAAI,CAAC,IAAA,CAAA,CAAM,gCAAgC,EAAEb,SAAAA,CAAUK,MAAM,GAAG,CAAA,CAAE,CAAC;AAC1I,KAAA;AACJ;;"}
@@ -0,0 +1,27 @@
1
+ 'use strict';
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
+ /**
6
+ * Compares values that can survive a Scene document serialization round trip.
7
+ *
8
+ * Authored data (chart datasets, option values, current values) arrives as plain JSON. Every edit to a
9
+ * Scene document clones the whole document, so the same data gets a new object identity with no change in
10
+ * content; reference equality would treat each unrelated edit as a change. Primitives compare with
11
+ * `Object.is`, so `0` and `-0`, or `NaN` and `NaN`, are told apart exactly as `Object.is` does.
12
+ */ function structurallyEqual(left, right) {
13
+ if (Object.is(left, right)) return true;
14
+ if (Array.isArray(left) || Array.isArray(right)) {
15
+ return Array.isArray(left) && Array.isArray(right) && left.length === right.length && left.every((value, index)=>structurallyEqual(value, right[index]));
16
+ }
17
+ if (!isRecord(left) || !isRecord(right)) return false;
18
+ const leftKeys = Object.keys(left).sort();
19
+ const rightKeys = Object.keys(right).sort();
20
+ return leftKeys.length === rightKeys.length && leftKeys.every((key, index)=>key === rightKeys[index] && structurallyEqual(left[key], right[key]));
21
+ }
22
+ function isRecord(value) {
23
+ return value !== null && typeof value === 'object';
24
+ }
25
+
26
+ exports.structurallyEqual = structurallyEqual;
27
+ //# sourceMappingURL=structurallyEqual.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structurallyEqual.js","sources":["../../structurallyEqual.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/**\n * Compares values that can survive a Scene document serialization round trip.\n *\n * Authored data (chart datasets, option values, current values) arrives as plain JSON. Every edit to a\n * Scene document clones the whole document, so the same data gets a new object identity with no change in\n * content; reference equality would treat each unrelated edit as a change. Primitives compare with\n * `Object.is`, so `0` and `-0`, or `NaN` and `NaN`, are told apart exactly as `Object.is` does.\n */\nexport function structurallyEqual(left: unknown, right: unknown): boolean {\n if (Object.is(left, right)) return true;\n if (Array.isArray(left) || Array.isArray(right)) {\n return Array.isArray(left) && Array.isArray(right)\n && left.length === right.length\n && left.every((value, index) => structurallyEqual(value, right[index]));\n }\n\n if (!isRecord(left) || !isRecord(right)) return false;\n const leftKeys = Object.keys(left).sort();\n const rightKeys = Object.keys(right).sort();\n return leftKeys.length === rightKeys.length\n && leftKeys.every((key, index) => key === rightKeys[index] && structurallyEqual(left[key], right[key]));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object';\n}\n"],"names":["structurallyEqual","left","right","Object","is","Array","isArray","length","every","value","index","isRecord","leftKeys","keys","sort","rightKeys","key"],"mappings":";;AAAA;AACA;AAEA;;;;;;;AAOC,IACM,SAASA,iBAAAA,CAAkBC,IAAa,EAAEC,KAAc,EAAA;AAC3D,IAAA,IAAIC,MAAAA,CAAOC,EAAE,CAACH,IAAAA,EAAMC,QAAQ,OAAO,IAAA;AACnC,IAAA,IAAIG,MAAMC,OAAO,CAACL,SAASI,KAAAA,CAAMC,OAAO,CAACJ,KAAAA,CAAAA,EAAQ;QAC7C,OAAOG,KAAAA,CAAMC,OAAO,CAACL,IAAAA,CAAAA,IAASI,KAAAA,CAAMC,OAAO,CAACJ,KAAAA,CAAAA,IACrCD,IAAAA,CAAKM,MAAM,KAAKL,KAAAA,CAAMK,MAAM,IAC5BN,IAAAA,CAAKO,KAAK,CAAC,CAACC,KAAAA,EAAOC,QAAUV,iBAAAA,CAAkBS,KAAAA,EAAOP,KAAK,CAACQ,KAAAA,CAAM,CAAA,CAAA;AAC7E,IAAA;AAEA,IAAA,IAAI,CAACC,QAAAA,CAASV,IAAAA,CAAAA,IAAS,CAACU,QAAAA,CAAST,QAAQ,OAAO,KAAA;AAChD,IAAA,MAAMU,QAAAA,GAAWT,MAAAA,CAAOU,IAAI,CAACZ,MAAMa,IAAI,EAAA;AACvC,IAAA,MAAMC,SAAAA,GAAYZ,MAAAA,CAAOU,IAAI,CAACX,OAAOY,IAAI,EAAA;IACzC,OAAOF,QAAAA,CAASL,MAAM,KAAKQ,SAAAA,CAAUR,MAAM,IACpCK,QAAAA,CAASJ,KAAK,CAAC,CAACQ,GAAAA,EAAKN,KAAAA,GAAUM,QAAQD,SAAS,CAACL,KAAAA,CAAM,IAAIV,iBAAAA,CAAkBC,IAAI,CAACe,GAAAA,CAAI,EAAEd,KAAK,CAACc,GAAAA,CAAI,CAAA,CAAA;AAC7G;AAEA,SAASL,SAASF,KAAc,EAAA;IAC5B,OAAOA,KAAAA,KAAU,IAAA,IAAQ,OAAOA,KAAAA,KAAU,QAAA;AAC9C;;"}
@@ -13,35 +13,69 @@ var properties = require('./properties.js');
13
13
  * expands the wrong rows the moment two siblings share a label. Deriving the key from the path makes it
14
14
  * unique and stable across re-renders without asking the author for anything.
15
15
  *
16
+ * An authored key may be a string or a number (a numeric id is a natural key); it is kept as a string. Keys
17
+ * are unique across the whole tree: a node whose authored key was already taken by an earlier node falls back
18
+ * to its path key, so two nodes can never share expansion or selection.
19
+ *
20
+ * An entry that is a string, number or boolean is a leaf labeled with it. Anything else that is not a record
21
+ * (`null`, a nested array) cannot be a node and is skipped; see {@link countUnreadableEntries}.
22
+ *
16
23
  * @param entries The raw entries to convert.
17
24
  * @param parentKey The key of the node these entries belong to, used to build stable child keys.
25
+ * @param usedKeys The keys already given out in this tree, shared down the recursion.
18
26
  * @returns The converted nodes, in order.
19
- */ function toTreeNodes(entries, parentKey = '') {
27
+ */ function toTreeNodes(entries, parentKey = '', usedKeys = new Set()) {
20
28
  const nodes = [];
21
29
  entries.forEach((entry, index)=>{
22
30
  const path = parentKey === '' ? `${index}` : `${parentKey}-${index}`;
23
- if (typeof entry === 'string') {
31
+ if (typeof entry === 'string' || typeof entry === 'number' || typeof entry === 'boolean') {
24
32
  nodes.push({
25
- key: path,
26
- label: entry
33
+ key: uniqueKey(undefined, path, usedKeys),
34
+ label: String(entry)
27
35
  });
28
36
  return;
29
37
  }
30
38
  if (typeof entry !== 'object' || entry === undefined || entry === null || Array.isArray(entry)) return;
31
39
  const record = entry;
32
40
  const node = {
33
- key: typeof record.key === 'string' ? record.key : path
41
+ key: uniqueKey(authoredKey(record.key), path, usedKeys)
34
42
  };
35
43
  if (typeof record.label === 'string') node.label = record.label;
36
44
  if (typeof record.icon === 'string') node.icon = record.icon;
37
45
  if (typeof record.className === 'string') node.className = record.className;
38
46
  if (typeof record.leaf === 'boolean') node.leaf = record.leaf;
39
- if (typeof record.data === 'object' && record.data !== null) node.data = record.data;
40
- if (Array.isArray(record.children)) node.children = toTreeNodes(record.children, node.key);
47
+ if (typeof record.expanded === 'boolean') node.expanded = record.expanded;
48
+ if (typeof record.selectable === 'boolean') node.selectable = record.selectable;
49
+ if (record.data !== undefined && record.data !== null) node.data = record.data;
50
+ if (Array.isArray(record.children)) node.children = toTreeNodes(record.children, node.key, usedKeys);
41
51
  nodes.push(node);
42
52
  });
43
53
  return nodes;
44
54
  }
55
+ /**
56
+ * Counts the entries `toTreeNodes` skips, so a control can say that some of its data was not shown instead
57
+ * of silently showing less.
58
+ *
59
+ * @param entries The raw entries.
60
+ * @returns How many entries, at any depth, were neither a scalar nor a record.
61
+ */ function countUnreadableEntries(entries) {
62
+ return entries.reduce((count, entry)=>{
63
+ if (typeof entry === 'string' || typeof entry === 'number' || typeof entry === 'boolean') return count;
64
+ if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) return count + 1;
65
+ const children = entry.children;
66
+ return count + (Array.isArray(children) ? countUnreadableEntries(children) : 0);
67
+ }, 0);
68
+ }
69
+ function authoredKey(value) {
70
+ if (typeof value === 'string' && value !== '') return value;
71
+ return typeof value === 'number' && Number.isFinite(value) ? String(value) : undefined;
72
+ }
73
+ function uniqueKey(authored, path, usedKeys) {
74
+ let key = authored !== undefined && !usedKeys.has(authored) ? authored : path;
75
+ while(usedKeys.has(key))key = `${key}~`;
76
+ usedKeys.add(key);
77
+ return key;
78
+ }
45
79
  /**
46
80
  * Reads a tree model off a Scene element's properties.
47
81
  *
@@ -52,6 +86,7 @@ var properties = require('./properties.js');
52
86
  return toTreeNodes(properties.arrayProperty(element, name));
53
87
  }
54
88
 
89
+ exports.countUnreadableEntries = countUnreadableEntries;
55
90
  exports.toTreeNodes = toTreeNodes;
56
91
  exports.treeNodesProperty = treeNodesProperty;
57
92
  //# sourceMappingURL=treeNodes.js.map
@@ -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,20 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+ var structurallyEqual = require('./structurallyEqual.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
+ * Returns the same reference for as long as the content of `value` is unchanged.
10
+ *
11
+ * Use it for authored data that feeds an effect dependency list: a cloned document gives that data a new
12
+ * identity on every unrelated edit, which would otherwise rerun the effect and rebuild whatever it owns.
13
+ */ function useStructuralValue(value) {
14
+ const stable = react.useRef(value);
15
+ if (!structurallyEqual.structurallyEqual(stable.current, value)) stable.current = value;
16
+ return stable.current;
17
+ }
18
+
19
+ exports.useStructuralValue = useStructuralValue;
20
+ //# sourceMappingURL=useStructuralValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStructuralValue.js","sources":["../../useStructuralValue.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 { useRef } from 'react';\nimport { structurallyEqual } from './structurallyEqual';\n\n/**\n * Returns the same reference for as long as the content of `value` is unchanged.\n *\n * Use it for authored data that feeds an effect dependency list: a cloned document gives that data a new\n * identity on every unrelated edit, which would otherwise rerun the effect and rebuild whatever it owns.\n */\nexport function useStructuralValue<TValue>(value: TValue): TValue {\n const stable = useRef(value);\n if (!structurallyEqual(stable.current, value)) stable.current = value;\n return stable.current;\n}\n"],"names":["useStructuralValue","value","stable","useRef","structurallyEqual","current"],"mappings":";;;;;AAAA;AACA;AAKA;;;;;IAMO,SAASA,kBAAAA,CAA2BC,KAAa,EAAA;AACpD,IAAA,MAAMC,SAASC,YAAAA,CAAOF,KAAAA,CAAAA;IACtB,IAAI,CAACG,oCAAkBF,MAAAA,CAAOG,OAAO,EAAEJ,KAAAA,CAAAA,EAAQC,MAAAA,CAAOG,OAAO,GAAGJ,KAAAA;AAChE,IAAA,OAAOC,OAAOG,OAAO;AACzB;;"}
@@ -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":""}
@@ -0,0 +1,14 @@
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
+ };
8
+ export default meta;
9
+ type Story = StoryObj<typeof meta>;
10
+ export declare const Bar: Story;
11
+ export declare const MigratedWithoutData: Story;
12
+ export declare const UnsupportedType: Story;
13
+ export declare const MigratedLegacyBar: Story;
14
+ //# sourceMappingURL=ChartGallery.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartGallery.stories.d.ts","sourceRoot":"","sources":["../../../chart/ChartGallery.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;;;;CAI+B,CAAC;eAE3B,IAAI;AAEnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAQnC,eAAO,MAAM,GAAG,EAAE,KAQjB,CAAC;AAGF,eAAO,MAAM,mBAAmB,EAAE,KAMjC,CAAC;AAGF,eAAO,MAAM,eAAe,EAAE,KAM7B,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,KAS/B,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { SceneElementView } from '@cratis/scene.react';
2
+ import { primeReactComponents } from '../primeReactComponents';
3
+ import { sceneComponent } from '../storyElements';
4
+ const meta = {
5
+ title: 'PrimeReact/Chart',
6
+ component: SceneElementView,
7
+ tags: ['autodocs'],
8
+ };
9
+ export default meta;
10
+ const salesData = {
11
+ labels: ['January', 'February', 'March'],
12
+ datasets: [{ label: 'Sales', data: [12, 19, 8], backgroundColor: '#6366f1' }],
13
+ };
14
+ export const Bar = {
15
+ args: {
16
+ element: sceneComponent('sales', 'chart', {
17
+ type: 'bar', data: salesData, options: { maintainAspectRatio: false }, style: { height: 240 }, ariaLabel: 'Monthly sales',
18
+ }),
19
+ registry: primeReactComponents,
20
+ resolveBinding: () => undefined,
21
+ },
22
+ };
23
+ export const MigratedWithoutData = {
24
+ args: {
25
+ element: sceneComponent('legacy-empty', 'chart', { type: 0, style: { height: 72 }, ariaLabel: 'Migrated chart without data', legacyType: 'PrimeReact.Chart' }),
26
+ registry: primeReactComponents,
27
+ resolveBinding: () => undefined,
28
+ },
29
+ };
30
+ export const UnsupportedType = {
31
+ args: {
32
+ element: sceneComponent('unsupported', 'chart', { type: 8, data: salesData }),
33
+ registry: primeReactComponents,
34
+ resolveBinding: () => undefined,
35
+ },
36
+ };
37
+ export const MigratedLegacyBar = {
38
+ args: {
39
+ element: sceneComponent('legacy-sales', 'chart', {
40
+ type: 0, data: salesData, options: { maintainAspectRatio: false }, style: { height: 240 }, ariaLabel: 'Migrated monthly sales',
41
+ legacyType: 'PrimeReact.Chart', legacyExtras: { canvas: { x: 256, y: 184 } },
42
+ }),
43
+ registry: primeReactComponents,
44
+ resolveBinding: () => undefined,
45
+ },
46
+ };
47
+ //# sourceMappingURL=ChartGallery.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartGallery.stories.js","sourceRoot":"","sources":["../../../chart/ChartGallery.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,MAAM,kBAAkB,CAAC;AAElD,MAAM,IAAI,GAAG;IACT,KAAK,EAAE,kBAAkB;IACzB,SAAS,EAAE,gBAAgB;IAC3B,IAAI,EAAE,CAAC,UAAU,CAAC;CACmB,CAAC;AAE1C,eAAe,IAAI,CAAC;AAKpB,MAAM,SAAS,GAAG;IACd,MAAM,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC;IACxC,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC;CAChF,CAAC;AAEF,MAAM,CAAC,MAAM,GAAG,GAAU;IACtB,IAAI,EAAE;QACF,OAAO,EAAE,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE;YACtC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,eAAe;SAC5H,CAAC;QACF,QAAQ,EAAE,oBAAoB;QAC9B,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS;KAClC;CACJ,CAAC;AAGF,MAAM,CAAC,MAAM,mBAAmB,GAAU;IACtC,IAAI,EAAE;QACF,OAAO,EAAE,cAAc,CAAC,cAAc,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,6BAA6B,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC;QAC9J,QAAQ,EAAE,oBAAoB;QAC9B,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS;KAClC;CACJ,CAAC;AAGF,MAAM,CAAC,MAAM,eAAe,GAAU;IAClC,IAAI,EAAE;QACF,OAAO,EAAE,cAAc,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC7E,QAAQ,EAAE,oBAAoB;QAC9B,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS;KAClC;CACJ,CAAC;AAGF,MAAM,CAAC,MAAM,iBAAiB,GAAU;IACpC,IAAI,EAAE;QACF,OAAO,EAAE,cAAc,CAAC,cAAc,EAAE,OAAO,EAAE;YAC7C,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,wBAAwB;YAC9H,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE;SAC/E,CAAC;QACF,QAAQ,EAAE,oBAAoB;QAC9B,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS;KAClC;CACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ export declare enum ChartType {
2
+ Bar = "bar",
3
+ Line = "line",
4
+ Pie = "pie",
5
+ Doughnut = "doughnut",
6
+ PolarArea = "polarArea",
7
+ Radar = "radar",
8
+ Bubble = "bubble",
9
+ Scatter = "scatter"
10
+ }
11
+ //# sourceMappingURL=ChartType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartType.d.ts","sourceRoot":"","sources":["../../../chart/ChartType.ts"],"names":[],"mappings":"AAIA,oBAAY,SAAS;IACjB,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,OAAO,YAAY;CACtB"}
@@ -0,0 +1,16 @@
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 names of the Chart.js chart types Scene's `chart` component supports. */ var ChartType = /*#__PURE__*/ function(ChartType) {
4
+ ChartType["Bar"] = "bar";
5
+ ChartType["Line"] = "line";
6
+ ChartType["Pie"] = "pie";
7
+ ChartType["Doughnut"] = "doughnut";
8
+ ChartType["PolarArea"] = "polarArea";
9
+ ChartType["Radar"] = "radar";
10
+ ChartType["Bubble"] = "bubble";
11
+ ChartType["Scatter"] = "scatter";
12
+ return ChartType;
13
+ }({});
14
+
15
+ export { ChartType };
16
+ //# sourceMappingURL=ChartType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartType.js","sources":["../../../chart/ChartType.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 names of the Chart.js chart types Scene's `chart` component supports. */\nexport enum ChartType {\n Bar = 'bar',\n Line = 'line',\n Pie = 'pie',\n Doughnut = 'doughnut',\n PolarArea = 'polarArea',\n Radar = 'radar',\n Bubble = 'bubble',\n Scatter = 'scatter',\n}\n"],"names":["ChartType"],"mappings":"AAAA;AACA;AAEA,2FACO,IAAKA,SAAAA,iBAAAA,SAAAA,SAAAA,EAAAA;;;;;;;;;AAAAA,IAAAA,OAAAA,SAAAA;AASX,CAAA,CAAA,EAAA;;"}
@@ -0,0 +1,10 @@
1
+ import { ChartType } from './ChartType';
2
+ export type ChartTypeResolution = {
3
+ isValid: true;
4
+ type: ChartType;
5
+ } | {
6
+ isValid: false;
7
+ value: unknown;
8
+ message: string;
9
+ };
10
+ //# sourceMappingURL=ChartTypeResolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartTypeResolution.d.ts","sourceRoot":"","sources":["../../../chart/ChartTypeResolution.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQxC,MAAM,MAAM,mBAAmB,GACzB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAClC;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=ChartTypeResolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartTypeResolution.js","sourceRoot":"","sources":["../../../chart/ChartTypeResolution.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { RegisteredComponentProps } from '@cratis/scene.react';
2
+ export declare function PrimeChart({ element, interactions }: RegisteredComponentProps): import("react").JSX.Element;
3
+ //# sourceMappingURL=PrimeChart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrimeChart.d.ts","sourceRoot":"","sources":["../../../chart/PrimeChart.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAuB/D,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,wBAAwB,+BAiC7E"}
@@ -0,0 +1,90 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useRef, useMemo } from 'react';
3
+ import { recordProperty, booleanProperty, stringProperty } from '../properties.js';
4
+ import { useStructuralValue } from '../useStructuralValue.js';
5
+ import { chartHasData } from './chartHasData.js';
6
+ import { resolveChartType } from './resolveChartType.js';
7
+ import { useChart } from './useChart.js';
8
+
9
+ /**
10
+ * The `PrimeReact:chart` component, rendered by Chart.js because PrimeReact 11 no longer ships its
11
+ * former Chart.js wrapper.
12
+ *
13
+ * Three states are explicit rather than a blank canvas: an unsupported `type` is reported (the right chart
14
+ * cannot be guessed), a chart with no data points shows its `emptyLabel` (data is never invented), and a
15
+ * chart Chart.js could not draw says why. Only a chart with data and a supported type reaches Chart.js.
16
+ *
17
+ * Chart.js is an optional peer dependency of this package: a host that renders charts must install
18
+ * `chart.js` itself. The chart rebuilds only when its resolved type, data or options change in content -
19
+ * every edit to a Scene document clones the whole document, and a clone with equal content is not a change.
20
+ *
21
+ * The chart fills the authored size: `maintainAspectRatio` defaults to `false` here (Chart.js defaults to
22
+ * `true`, which shrinks the chart inside its box) and an authored `options.maintainAspectRatio` wins. The
23
+ * `responsive` property is authoritative over `options.responsive` when both are set.
24
+ */ function PrimeChart({ element, interactions }) {
25
+ const canvas = useRef(null);
26
+ const resolution = resolveChartType(element);
27
+ const data = useStructuralValue(recordProperty(element, 'data'));
28
+ const options = useStructuralValue(recordProperty(element, 'options'));
29
+ const style = recordProperty(element, 'style');
30
+ const responsive = booleanProperty(element, 'responsive', options?.responsive ?? true);
31
+ const ariaLabel = stringProperty(element, 'ariaLabel', element.name || 'Chart');
32
+ const emptyLabel = stringProperty(element, 'emptyLabel', 'No chart data');
33
+ const hasData = chartHasData(data);
34
+ const type = resolution.isValid ? resolution.type : undefined;
35
+ const enabled = type !== undefined && hasData;
36
+ const configuration = useMemo(()=>({
37
+ type,
38
+ data: data ?? {
39
+ datasets: []
40
+ },
41
+ options: {
42
+ maintainAspectRatio: false,
43
+ ...options,
44
+ responsive
45
+ }
46
+ }), [
47
+ type,
48
+ data,
49
+ options,
50
+ responsive
51
+ ]);
52
+ const failure = useChart(canvas, configuration, enabled);
53
+ return /*#__PURE__*/ jsxs("div", {
54
+ "data-scene-id": element.id,
55
+ "data-scene-component": "chart",
56
+ style: {
57
+ position: 'relative',
58
+ width: element.size.width ?? '100%',
59
+ height: element.size.height ?? '100%',
60
+ ...style
61
+ },
62
+ ...interactions,
63
+ children: [
64
+ !resolution.isValid && /*#__PURE__*/ jsx("div", {
65
+ role: "alert",
66
+ "data-scene-state": "unsupported-type",
67
+ children: resolution.message
68
+ }),
69
+ resolution.isValid && !hasData && /*#__PURE__*/ jsx("div", {
70
+ role: "status",
71
+ "data-scene-state": "empty",
72
+ children: emptyLabel
73
+ }),
74
+ failure !== undefined && /*#__PURE__*/ jsx("div", {
75
+ role: "alert",
76
+ "data-scene-state": "unavailable",
77
+ children: `The chart could not be drawn: ${failure}`
78
+ }),
79
+ enabled && /*#__PURE__*/ jsx("canvas", {
80
+ ref: canvas,
81
+ role: "img",
82
+ "aria-label": ariaLabel,
83
+ hidden: failure !== undefined
84
+ })
85
+ ]
86
+ });
87
+ }
88
+
89
+ export { PrimeChart };
90
+ //# sourceMappingURL=PrimeChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrimeChart.js","sources":["../../../chart/PrimeChart.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 { CSSProperties, useMemo, useRef } from 'react';\nimport type { ChartConfiguration, ChartData, ChartOptions } from 'chart.js';\nimport { RegisteredComponentProps } from '@cratis/scene.react';\nimport { booleanProperty, recordProperty, stringProperty } from '../properties';\nimport { useStructuralValue } from '../useStructuralValue';\nimport { chartHasData } from './chartHasData';\nimport { resolveChartType } from './resolveChartType';\nimport { useChart } from './useChart';\n\n/**\n * The `PrimeReact:chart` component, rendered by Chart.js because PrimeReact 11 no longer ships its\n * former Chart.js wrapper.\n *\n * Three states are explicit rather than a blank canvas: an unsupported `type` is reported (the right chart\n * cannot be guessed), a chart with no data points shows its `emptyLabel` (data is never invented), and a\n * chart Chart.js could not draw says why. Only a chart with data and a supported type reaches Chart.js.\n *\n * Chart.js is an optional peer dependency of this package: a host that renders charts must install\n * `chart.js` itself. The chart rebuilds only when its resolved type, data or options change in content -\n * every edit to a Scene document clones the whole document, and a clone with equal content is not a change.\n *\n * The chart fills the authored size: `maintainAspectRatio` defaults to `false` here (Chart.js defaults to\n * `true`, which shrinks the chart inside its box) and an authored `options.maintainAspectRatio` wins. The\n * `responsive` property is authoritative over `options.responsive` when both are set.\n */\nexport function PrimeChart({ element, interactions }: RegisteredComponentProps) {\n const canvas = useRef<HTMLCanvasElement>(null);\n const resolution = resolveChartType(element);\n const data = useStructuralValue(recordProperty(element, 'data') as ChartData | undefined);\n const options = useStructuralValue(recordProperty(element, 'options') as ChartOptions | undefined);\n const style = recordProperty(element, 'style') as CSSProperties | undefined;\n const responsive = booleanProperty(element, 'responsive', options?.responsive ?? true);\n const ariaLabel = stringProperty(element, 'ariaLabel', element.name || 'Chart');\n const emptyLabel = stringProperty(element, 'emptyLabel', 'No chart data');\n const hasData = chartHasData(data);\n const type = resolution.isValid ? resolution.type : undefined;\n const enabled = type !== undefined && hasData;\n\n const configuration = useMemo(() => ({\n type,\n data: data ?? { datasets: [] },\n options: { maintainAspectRatio: false, ...options, responsive },\n }) as unknown as ChartConfiguration, [type, data, options, responsive]);\n\n const failure = useChart(canvas, configuration, enabled);\n\n return (\n <div\n data-scene-id={element.id}\n data-scene-component='chart'\n style={{ position: 'relative', width: element.size.width ?? '100%', height: element.size.height ?? '100%', ...style }}\n {...interactions}>\n {!resolution.isValid && <div role='alert' data-scene-state='unsupported-type'>{resolution.message}</div>}\n {resolution.isValid && !hasData && <div role='status' data-scene-state='empty'>{emptyLabel}</div>}\n {failure !== undefined && <div role='alert' data-scene-state='unavailable'>{`The chart could not be drawn: ${failure}`}</div>}\n {enabled && <canvas ref={canvas} role='img' aria-label={ariaLabel} hidden={failure !== undefined} />}\n </div>\n );\n}\n"],"names":["PrimeChart","element","interactions","canvas","useRef","resolution","resolveChartType","data","useStructuralValue","recordProperty","options","style","responsive","booleanProperty","ariaLabel","stringProperty","name","emptyLabel","hasData","chartHasData","type","isValid","undefined","enabled","configuration","useMemo","datasets","maintainAspectRatio","failure","useChart","_jsxs","div","data-scene-id","id","data-scene-component","position","width","size","height","_jsx","role","data-scene-state","message","ref","aria-label","hidden"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function chartHasData(data: unknown): boolean;
2
+ //# sourceMappingURL=chartHasData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chartHasData.d.ts","sourceRoot":"","sources":["../../../chart/chartHasData.ts"],"names":[],"mappings":"AAUA,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAWnD"}
@@ -0,0 +1,22 @@
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
+ /**
4
+ * Whether chart data holds at least one data point to draw.
5
+ *
6
+ * Datasets whose `data` is empty (or absent) draw nothing but axes, so the chart reports it instead.
7
+ * A dataset may also give its points as keyed records (Chart.js `parsing` over an object), which counts
8
+ * when it has any keys.
9
+ */ function chartHasData(data) {
10
+ if (data === null || typeof data !== 'object') return false;
11
+ const datasets = data.datasets;
12
+ if (!Array.isArray(datasets)) return false;
13
+ return datasets.some((dataset)=>{
14
+ if (dataset === null || typeof dataset !== 'object') return false;
15
+ const points = dataset.data;
16
+ if (Array.isArray(points)) return points.length > 0;
17
+ return points !== null && typeof points === 'object' && Object.keys(points).length > 0;
18
+ });
19
+ }
20
+
21
+ export { chartHasData };
22
+ //# sourceMappingURL=chartHasData.js.map