@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
@@ -1,5 +1,6 @@
1
1
  import { PackageKind } from '@cratis/scene.model';
2
2
  import { primeReactComponents } from './primeReactComponents.js';
3
+ import { primeReactDescriptors } from './primeReactDescriptors.js';
3
4
  import './theme/themePresets.js';
4
5
  import { primeReactThemes, primeReactThemeNames } from './theme/primeReactThemes.js';
5
6
  import './theme/primeReactThemePreset.js';
@@ -45,6 +46,7 @@ import 'react';
45
46
  'listBox',
46
47
  'selectButton',
47
48
  'checkbox',
49
+ 'multiStateCheckbox',
48
50
  'radioButton',
49
51
  'toggleSwitch',
50
52
  'slider',
@@ -55,6 +57,8 @@ import 'react';
55
57
  'chips',
56
58
  'autoComplete',
57
59
  'treeSelect',
60
+ 'editor',
61
+ 'fileUpload',
58
62
  'button',
59
63
  'splitButton',
60
64
  'speedDial',
@@ -63,12 +67,15 @@ import 'react';
63
67
  'table',
64
68
  'column',
65
69
  'dataView',
70
+ 'dataScroller',
66
71
  'tree',
72
+ 'treeTable',
67
73
  'timeline',
68
74
  'paginator',
69
75
  'orderList',
70
76
  'pickList',
71
77
  'organizationChart',
78
+ 'chart',
72
79
  'card',
73
80
  'panel',
74
81
  'accordion',
@@ -150,6 +157,7 @@ import 'react';
150
157
  */ const primeReactPackage = {
151
158
  manifest: primeReactPackageManifest,
152
159
  components: primeReactComponents,
160
+ descriptors: primeReactDescriptors,
153
161
  themes: primeReactThemes
154
162
  };
155
163
 
@@ -1 +1 @@
1
- {"version":3,"file":"primeReactPackage.js","sources":["../../primeReactPackage.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 { PackageKind, ScenePackage } from '@cratis/scene.model';\nimport { ScenePackageBundle } from '@cratis/scene.react';\nimport { primeReactComponents } from './primeReactComponents';\nimport { primeReactThemeNames, primeReactThemes } from './theme';\n\n/**\n * The `PrimeReact` package's declaration - what a `ui profile` lists by name and what a\n * `PackageDependency` refers to.\n *\n * The component list is written out rather than derived from the registry, on purpose. A manifest is\n * read by Stage's build and Studio's design-time queries *without loading a single component*, so it has\n * to stand on its own as the statement of what this package offers. Keeping it as its own list is also\n * what gives `validatePackageBundle` something real to check: two independently maintained lists that\n * must agree, rather than one list compared against itself.\n */\nexport const primeReactPackageManifest: ScenePackage = {\n name: 'PrimeReact',\n version: '11.1.0',\n kind: PackageKind.ComponentLibrary,\n\n /**\n * PrimeReact's own components need nothing from Tailwind - they are skinned by the `--p-*` custom\n * properties the active `@primeuix/themes` preset emits. The dependency is here because *this\n * package's wrappers* use Tailwind utility classes\n * for the layout around them: the row a checkbox and its label sit on, the column a radio group\n * stacks into, the grid a summary lays its pairs out in. A profile that activates this package\n * without Tailwind renders those wrappers unstyled, so declaring it is what makes the profile picker\n * offer Tailwind alongside PrimeReact instead of leaving the gap to be discovered on screen.\n */\n dependencies: [{ name: 'Tailwind' }],\n\n components: [\n 'inputText', 'inputTextarea', 'inputNumber', 'password', 'floatLabel', 'iconField', 'dropdown', 'multiSelect',\n 'listBox', 'selectButton', 'checkbox', 'radioButton', 'toggleSwitch', 'slider', 'rating', 'knob', 'calendar', 'colorPicker',\n 'chips', 'autoComplete', 'treeSelect', 'button', 'splitButton', 'speedDial', 'buttonGroup', 'dataTable', 'table',\n 'column', 'dataView', 'tree', 'timeline', 'paginator', 'orderList', 'pickList', 'organizationChart',\n 'card', 'panel', 'accordion', 'fieldset', 'divider', 'splitter', 'scrollPanel', 'tabView', 'toolbar', 'stepper', 'dialog',\n 'confirmDialog', 'overlayPanel', 'sidebar', 'tooltip', 'menu', 'menubar', 'breadcrumb', 'tabMenu', 'steps', 'tieredMenu',\n 'panelMenu', 'contextMenu', 'megaMenu', 'dock', 'message', 'inlineMessage', 'toast', 'image', 'galleria', 'carousel', 'avatar',\n 'badge', 'chip', 'tag', 'progressBar', 'progressSpinner', 'skeleton', 'scrollTop', 'blockUI', 'inplace', 'terminal', 'text',\n 'title', 'field', 'section', 'summary', 'action',\n ],\n\n /**\n * Empty, and it stays empty. A layout is an application's base navigational look - one per\n * application - and choosing it is a decision about the product, not about which widgets are\n * available. A component library supplies the vocabulary a layout is built *from*; a\n * {@link PackageKind.Blueprint} package supplies the layout itself.\n */\n layouts: [],\n\n /**\n * Empty for the same reason `layouts` is. A screen template is a reusable page shape at module,\n * feature or slice level - \"list with filters and a detail pane\" - and it is composed *out of* the\n * names declared above. Shipping one here would mean this package had opinions about how a screen is\n * arranged, which is a Blueprint's job and not a component library's.\n */\n screenTemplates: [],\n\n /**\n * Empty, as above: a dialog template is a reusable dialog shape, composed from these components by a\n * Blueprint package rather than provided by the library the components come from.\n */\n dialogTemplates: [],\n\n themes: primeReactThemeNames,\n\n displayName: 'PrimeReact',\n description: 'PrimeReact 11 components and PrimeTek\\'s @primeuix/themes presets, mapped onto Scene\\'s abstract component names.',\n module: '@cratis/scene.primereact',\n // PrimeReact 11 is PrimeTek's commercial PrimeUI, not MIT as version 10 was. The Community\n // tier is free for eligible projects but still requires a key, so an author selecting this\n // package needs to see the terms before they select it, not after a banner appears.\n license: 'PrimeUI Community / Commercial',\n licenseUrl: 'https://primeui.dev/licenses/community',\n};\n\n/**\n * The `PrimeReact` package as a loadable bundle - the manifest plus the React components and themes\n * behind the names it declares.\n */\nexport const primeReactPackage: ScenePackageBundle = {\n manifest: primeReactPackageManifest,\n components: primeReactComponents,\n themes: primeReactThemes,\n};\n"],"names":["primeReactPackageManifest","name","version","kind","PackageKind","ComponentLibrary","dependencies","components","layouts","screenTemplates","dialogTemplates","themes","primeReactThemeNames","displayName","description","module","license","licenseUrl","primeReactPackage","manifest","primeReactComponents","primeReactThemes"],"mappings":";;;;;;;AAAA;AACA;AAOA;;;;;;;;;UAUaA,yBAAAA,GAA0C;IACnDC,IAAAA,EAAM,YAAA;IACNC,OAAAA,EAAS,QAAA;AACTC,IAAAA,IAAAA,EAAMC,YAAYC,gBAAgB;AAElC;;;;;;;;AAQC,QACDC,YAAAA,EAAc;AAAC,QAAA;YAAEL,IAAAA,EAAM;AAAW;AAAE,KAAA;IAEpCM,UAAAA,EAAY;AACR,QAAA,WAAA;AAAa,QAAA,eAAA;AAAiB,QAAA,aAAA;AAAe,QAAA,UAAA;AAAY,QAAA,YAAA;AAAc,QAAA,WAAA;AAAa,QAAA,UAAA;AAAY,QAAA,aAAA;AAChG,QAAA,SAAA;AAAW,QAAA,cAAA;AAAgB,QAAA,UAAA;AAAY,QAAA,aAAA;AAAe,QAAA,cAAA;AAAgB,QAAA,QAAA;AAAU,QAAA,QAAA;AAAU,QAAA,MAAA;AAAQ,QAAA,UAAA;AAAY,QAAA,aAAA;AAC9G,QAAA,OAAA;AAAS,QAAA,cAAA;AAAgB,QAAA,YAAA;AAAc,QAAA,QAAA;AAAU,QAAA,aAAA;AAAe,QAAA,WAAA;AAAa,QAAA,aAAA;AAAe,QAAA,WAAA;AAAa,QAAA,OAAA;AACzG,QAAA,QAAA;AAAU,QAAA,UAAA;AAAY,QAAA,MAAA;AAAQ,QAAA,UAAA;AAAY,QAAA,WAAA;AAAa,QAAA,WAAA;AAAa,QAAA,UAAA;AAAY,QAAA,mBAAA;AAChF,QAAA,MAAA;AAAQ,QAAA,OAAA;AAAS,QAAA,WAAA;AAAa,QAAA,UAAA;AAAY,QAAA,SAAA;AAAW,QAAA,UAAA;AAAY,QAAA,aAAA;AAAe,QAAA,SAAA;AAAW,QAAA,SAAA;AAAW,QAAA,SAAA;AAAW,QAAA,QAAA;AACjH,QAAA,eAAA;AAAiB,QAAA,cAAA;AAAgB,QAAA,SAAA;AAAW,QAAA,SAAA;AAAW,QAAA,MAAA;AAAQ,QAAA,SAAA;AAAW,QAAA,YAAA;AAAc,QAAA,SAAA;AAAW,QAAA,OAAA;AAAS,QAAA,YAAA;AAC5G,QAAA,WAAA;AAAa,QAAA,aAAA;AAAe,QAAA,UAAA;AAAY,QAAA,MAAA;AAAQ,QAAA,SAAA;AAAW,QAAA,eAAA;AAAiB,QAAA,OAAA;AAAS,QAAA,OAAA;AAAS,QAAA,UAAA;AAAY,QAAA,UAAA;AAAY,QAAA,QAAA;AACtH,QAAA,OAAA;AAAS,QAAA,MAAA;AAAQ,QAAA,KAAA;AAAO,QAAA,aAAA;AAAe,QAAA,iBAAA;AAAmB,QAAA,UAAA;AAAY,QAAA,WAAA;AAAa,QAAA,SAAA;AAAW,QAAA,SAAA;AAAW,QAAA,UAAA;AAAY,QAAA,MAAA;AACrH,QAAA,OAAA;AAAS,QAAA,OAAA;AAAS,QAAA,SAAA;AAAW,QAAA,SAAA;AAAW,QAAA;AAC3C,KAAA;AAED;;;;;AAKC,QACDC,SAAS,EAAE;AAEX;;;;;AAKC,QACDC,iBAAiB,EAAE;AAEnB;;;AAGC,QACDC,iBAAiB,EAAE;IAEnBC,MAAAA,EAAQC,oBAAAA;IAERC,WAAAA,EAAa,YAAA;IACbC,WAAAA,EAAa,mHAAA;IACbC,MAAAA,EAAQ,0BAAA;;;;IAIRC,OAAAA,EAAS,gCAAA;IACTC,UAAAA,EAAY;AAChB;AAEA;;;UAIaC,iBAAAA,GAAwC;IACjDC,QAAAA,EAAUnB,yBAAAA;IACVO,UAAAA,EAAYa,oBAAAA;IACZT,MAAAA,EAAQU;AACZ;;"}
1
+ {"version":3,"file":"primeReactPackage.js","sources":["../../primeReactPackage.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 { PackageKind, ScenePackage } from '@cratis/scene.model';\nimport { ScenePackageBundle } from '@cratis/scene.react';\nimport { primeReactComponents } from './primeReactComponents';\nimport { primeReactDescriptors } from './primeReactDescriptors';\nimport { primeReactThemeNames, primeReactThemes } from './theme';\n\n/**\n * The `PrimeReact` package's declaration - what a `ui profile` lists by name and what a\n * `PackageDependency` refers to.\n *\n * The component list is written out rather than derived from the registry, on purpose. A manifest is\n * read by Stage's build and Studio's design-time queries *without loading a single component*, so it has\n * to stand on its own as the statement of what this package offers. Keeping it as its own list is also\n * what gives `validatePackageBundle` something real to check: two independently maintained lists that\n * must agree, rather than one list compared against itself.\n */\nexport const primeReactPackageManifest: ScenePackage = {\n name: 'PrimeReact',\n version: '11.1.0',\n kind: PackageKind.ComponentLibrary,\n\n /**\n * PrimeReact's own components need nothing from Tailwind - they are skinned by the `--p-*` custom\n * properties the active `@primeuix/themes` preset emits. The dependency is here because *this\n * package's wrappers* use Tailwind utility classes\n * for the layout around them: the row a checkbox and its label sit on, the column a radio group\n * stacks into, the grid a summary lays its pairs out in. A profile that activates this package\n * without Tailwind renders those wrappers unstyled, so declaring it is what makes the profile picker\n * offer Tailwind alongside PrimeReact instead of leaving the gap to be discovered on screen.\n */\n dependencies: [{ name: 'Tailwind' }],\n\n components: [\n 'inputText', 'inputTextarea', 'inputNumber', 'password', 'floatLabel', 'iconField', 'dropdown', 'multiSelect',\n 'listBox', 'selectButton', 'checkbox', 'multiStateCheckbox', 'radioButton', 'toggleSwitch', 'slider', 'rating', 'knob', 'calendar', 'colorPicker',\n 'chips', 'autoComplete', 'treeSelect', 'editor', 'fileUpload', 'button', 'splitButton', 'speedDial', 'buttonGroup', 'dataTable', 'table',\n 'column', 'dataView', 'dataScroller', 'tree', 'treeTable', 'timeline', 'paginator', 'orderList', 'pickList', 'organizationChart', 'chart',\n 'card', 'panel', 'accordion', 'fieldset', 'divider', 'splitter', 'scrollPanel', 'tabView', 'toolbar', 'stepper', 'dialog',\n 'confirmDialog', 'overlayPanel', 'sidebar', 'tooltip', 'menu', 'menubar', 'breadcrumb', 'tabMenu', 'steps', 'tieredMenu',\n 'panelMenu', 'contextMenu', 'megaMenu', 'dock', 'message', 'inlineMessage', 'toast', 'image', 'galleria', 'carousel', 'avatar',\n 'badge', 'chip', 'tag', 'progressBar', 'progressSpinner', 'skeleton', 'scrollTop', 'blockUI', 'inplace', 'terminal', 'text',\n 'title', 'field', 'section', 'summary', 'action',\n ],\n\n /**\n * Empty, and it stays empty. A layout is an application's base navigational look - one per\n * application - and choosing it is a decision about the product, not about which widgets are\n * available. A component library supplies the vocabulary a layout is built *from*; a\n * {@link PackageKind.Blueprint} package supplies the layout itself.\n */\n layouts: [],\n\n /**\n * Empty for the same reason `layouts` is. A screen template is a reusable page shape at module,\n * feature or slice level - \"list with filters and a detail pane\" - and it is composed *out of* the\n * names declared above. Shipping one here would mean this package had opinions about how a screen is\n * arranged, which is a Blueprint's job and not a component library's.\n */\n screenTemplates: [],\n\n /**\n * Empty, as above: a dialog template is a reusable dialog shape, composed from these components by a\n * Blueprint package rather than provided by the library the components come from.\n */\n dialogTemplates: [],\n\n themes: primeReactThemeNames,\n\n displayName: 'PrimeReact',\n description: 'PrimeReact 11 components and PrimeTek\\'s @primeuix/themes presets, mapped onto Scene\\'s abstract component names.',\n module: '@cratis/scene.primereact',\n // PrimeReact 11 is PrimeTek's commercial PrimeUI, not MIT as version 10 was. The Community\n // tier is free for eligible projects but still requires a key, so an author selecting this\n // package needs to see the terms before they select it, not after a banner appears.\n license: 'PrimeUI Community / Commercial',\n licenseUrl: 'https://primeui.dev/licenses/community',\n};\n\n/**\n * The `PrimeReact` package as a loadable bundle - the manifest plus the React components and themes\n * behind the names it declares.\n */\nexport const primeReactPackage: ScenePackageBundle = {\n manifest: primeReactPackageManifest,\n components: primeReactComponents,\n descriptors: primeReactDescriptors,\n themes: primeReactThemes,\n};\n"],"names":["primeReactPackageManifest","name","version","kind","PackageKind","ComponentLibrary","dependencies","components","layouts","screenTemplates","dialogTemplates","themes","primeReactThemeNames","displayName","description","module","license","licenseUrl","primeReactPackage","manifest","primeReactComponents","descriptors","primeReactDescriptors","primeReactThemes"],"mappings":";;;;;;;;AAAA;AACA;AAQA;;;;;;;;;UAUaA,yBAAAA,GAA0C;IACnDC,IAAAA,EAAM,YAAA;IACNC,OAAAA,EAAS,QAAA;AACTC,IAAAA,IAAAA,EAAMC,YAAYC,gBAAgB;AAElC;;;;;;;;AAQC,QACDC,YAAAA,EAAc;AAAC,QAAA;YAAEL,IAAAA,EAAM;AAAW;AAAE,KAAA;IAEpCM,UAAAA,EAAY;AACR,QAAA,WAAA;AAAa,QAAA,eAAA;AAAiB,QAAA,aAAA;AAAe,QAAA,UAAA;AAAY,QAAA,YAAA;AAAc,QAAA,WAAA;AAAa,QAAA,UAAA;AAAY,QAAA,aAAA;AAChG,QAAA,SAAA;AAAW,QAAA,cAAA;AAAgB,QAAA,UAAA;AAAY,QAAA,oBAAA;AAAsB,QAAA,aAAA;AAAe,QAAA,cAAA;AAAgB,QAAA,QAAA;AAAU,QAAA,QAAA;AAAU,QAAA,MAAA;AAAQ,QAAA,UAAA;AAAY,QAAA,aAAA;AACpI,QAAA,OAAA;AAAS,QAAA,cAAA;AAAgB,QAAA,YAAA;AAAc,QAAA,QAAA;AAAU,QAAA,YAAA;AAAc,QAAA,QAAA;AAAU,QAAA,aAAA;AAAe,QAAA,WAAA;AAAa,QAAA,aAAA;AAAe,QAAA,WAAA;AAAa,QAAA,OAAA;AACjI,QAAA,QAAA;AAAU,QAAA,UAAA;AAAY,QAAA,cAAA;AAAgB,QAAA,MAAA;AAAQ,QAAA,WAAA;AAAa,QAAA,UAAA;AAAY,QAAA,WAAA;AAAa,QAAA,WAAA;AAAa,QAAA,UAAA;AAAY,QAAA,mBAAA;AAAqB,QAAA,OAAA;AAClI,QAAA,MAAA;AAAQ,QAAA,OAAA;AAAS,QAAA,WAAA;AAAa,QAAA,UAAA;AAAY,QAAA,SAAA;AAAW,QAAA,UAAA;AAAY,QAAA,aAAA;AAAe,QAAA,SAAA;AAAW,QAAA,SAAA;AAAW,QAAA,SAAA;AAAW,QAAA,QAAA;AACjH,QAAA,eAAA;AAAiB,QAAA,cAAA;AAAgB,QAAA,SAAA;AAAW,QAAA,SAAA;AAAW,QAAA,MAAA;AAAQ,QAAA,SAAA;AAAW,QAAA,YAAA;AAAc,QAAA,SAAA;AAAW,QAAA,OAAA;AAAS,QAAA,YAAA;AAC5G,QAAA,WAAA;AAAa,QAAA,aAAA;AAAe,QAAA,UAAA;AAAY,QAAA,MAAA;AAAQ,QAAA,SAAA;AAAW,QAAA,eAAA;AAAiB,QAAA,OAAA;AAAS,QAAA,OAAA;AAAS,QAAA,UAAA;AAAY,QAAA,UAAA;AAAY,QAAA,QAAA;AACtH,QAAA,OAAA;AAAS,QAAA,MAAA;AAAQ,QAAA,KAAA;AAAO,QAAA,aAAA;AAAe,QAAA,iBAAA;AAAmB,QAAA,UAAA;AAAY,QAAA,WAAA;AAAa,QAAA,SAAA;AAAW,QAAA,SAAA;AAAW,QAAA,UAAA;AAAY,QAAA,MAAA;AACrH,QAAA,OAAA;AAAS,QAAA,OAAA;AAAS,QAAA,SAAA;AAAW,QAAA,SAAA;AAAW,QAAA;AAC3C,KAAA;AAED;;;;;AAKC,QACDC,SAAS,EAAE;AAEX;;;;;AAKC,QACDC,iBAAiB,EAAE;AAEnB;;;AAGC,QACDC,iBAAiB,EAAE;IAEnBC,MAAAA,EAAQC,oBAAAA;IAERC,WAAAA,EAAa,YAAA;IACbC,WAAAA,EAAa,mHAAA;IACbC,MAAAA,EAAQ,0BAAA;;;;IAIRC,OAAAA,EAAS,gCAAA;IACTC,UAAAA,EAAY;AAChB;AAEA;;;UAIaC,iBAAAA,GAAwC;IACjDC,QAAAA,EAAUnB,yBAAAA;IACVO,UAAAA,EAAYa,oBAAAA;IACZC,WAAAA,EAAaC,qBAAAA;IACbX,MAAAA,EAAQY;AACZ;;"}
@@ -10,6 +10,7 @@ export declare function numberProperty(element: SceneElement, name: string, fall
10
10
  export declare function arrayProperty(element: SceneElement, name: string): unknown[];
11
11
  export declare function stringArrayProperty(element: SceneElement, name: string): string[];
12
12
  export declare function recordArrayProperty(element: SceneElement, name: string): Record<string, unknown>[];
13
+ export declare function recordProperty(element: SceneElement, name: string): Record<string, unknown> | undefined;
13
14
  export declare function optionsProperty(element: SceneElement, name: string): SelectOption[];
14
15
  export declare function severityProperty(element: SceneElement, name: string): PrimeSeverity | undefined;
15
16
  export declare function severityProperty(element: SceneElement, name: string, fallback: PrimeSeverity): PrimeSeverity;
@@ -1 +1 @@
1
- {"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../properties.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAoB9C,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AACxF,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;AAc9F,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAC1F,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC;AAiBjG,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AACxF,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;AAiB9F,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,CAG5E;AASD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEjF;AAYD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAIlG;AAcD,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAiBnF;AAoBD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;AACjG,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,aAAa,CAAC"}
1
+ {"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../properties.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAoB9C,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AACxF,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;AAc9F,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAC1F,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC;AAiBjG,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AACxF,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;AAiB9F,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,CAG5E;AASD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEjF;AAYD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAIlG;AASD,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAKvG;AAcD,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAiBnF;AAoBD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;AACjG,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,aAAa,CAAC"}
@@ -56,6 +56,16 @@ function numberProperty(element, name, fallback) {
56
56
  */ function recordArrayProperty(element, name) {
57
57
  return arrayProperty(element, name).filter((entry)=>typeof entry === 'object' && entry !== undefined && entry !== null && !Array.isArray(entry));
58
58
  }
59
+ /**
60
+ * Reads one structured value off a Scene element.
61
+ *
62
+ * Chart data and options intentionally stay as authored objects: these adapters pass their vocabulary to
63
+ * their underlying library instead of choosing a partial Scene-owned chart schema that would discard
64
+ * future Chart.js fields during a legacy migration.
65
+ */ function recordProperty(element, name) {
66
+ const value = element.properties[name];
67
+ return typeof value === 'object' && value !== undefined && value !== null && !Array.isArray(value) ? value : undefined;
68
+ }
59
69
  /**
60
70
  * Reads a selection component's options off a Scene element, normalizing both shapes a screen may use.
61
71
  *
@@ -94,5 +104,5 @@ function severityProperty(element, name, fallback) {
94
104
  return severities.includes(translated) ? translated : fallback;
95
105
  }
96
106
 
97
- export { arrayProperty, booleanProperty, numberProperty, optionsProperty, recordArrayProperty, severityProperty, stringArrayProperty, stringProperty };
107
+ export { arrayProperty, booleanProperty, numberProperty, optionsProperty, recordArrayProperty, recordProperty, severityProperty, stringArrayProperty, stringProperty };
98
108
  //# sourceMappingURL=properties.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"properties.js","sources":["../../properties.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 { SceneElement } from '@cratis/scene.model';\nimport { PrimeSeverity } from './PrimeSeverity';\nimport { SelectOption } from './SelectOption';\n\n/** Every severity PrimeReact 11 knows, so an unrecognized one can fall back rather than reach a component. */\nconst severities: PrimeSeverity[] = ['secondary', 'info', 'success', 'warn', 'danger', 'help', 'contrast'];\n\n/**\n * Reads a string configuration value off a Scene element.\n *\n * `SceneElement.properties` is `Record<string, unknown>` because a screen's properties come from\n * authored model data, not from a compiler that knows this package's expectations. Every adapter\n * therefore has to narrow before it can use a value, and doing that with a cast would defeat the point -\n * a mistyped property would sail through and blow up inside PrimeReact instead of quietly falling back\n * here. These helpers are the single narrowing point, so a wrong type behaves exactly like an absent\n * one everywhere.\n *\n * @param element The element whose properties to read.\n * @param name The property name.\n * @param fallback The value to use when the property is missing or is not a string.\n * @returns The string value, or `fallback` (`undefined` when none was given).\n */\nexport function stringProperty(element: SceneElement, name: string): string | undefined;\nexport function stringProperty(element: SceneElement, name: string, fallback: string): string;\nexport function stringProperty(element: SceneElement, name: string, fallback?: string): string | undefined {\n const value = element.properties[name];\n return typeof value === 'string' ? value : fallback;\n}\n\n/**\n * Reads a boolean configuration value off a Scene element.\n *\n * @param element The element whose properties to read.\n * @param name The property name.\n * @param fallback The value to use when the property is missing or is not a boolean.\n * @returns The boolean value, or `fallback` (`undefined` when none was given).\n */\nexport function booleanProperty(element: SceneElement, name: string): boolean | undefined;\nexport function booleanProperty(element: SceneElement, name: string, fallback: boolean): boolean;\nexport function booleanProperty(element: SceneElement, name: string, fallback?: boolean): boolean | undefined {\n const value = element.properties[name];\n return typeof value === 'boolean' ? value : fallback;\n}\n\n/**\n * Reads a numeric configuration value off a Scene element.\n *\n * `NaN` is rejected alongside non-numbers: it is a number by `typeof` but never a usable size, count or\n * bound, and letting it through would surface as an unexplained blank component rather than a fallback.\n *\n * @param element The element whose properties to read.\n * @param name The property name.\n * @param fallback The value to use when the property is missing or is not a usable number.\n * @returns The numeric value, or `fallback` (`undefined` when none was given).\n */\nexport function numberProperty(element: SceneElement, name: string): number | undefined;\nexport function numberProperty(element: SceneElement, name: string, fallback: number): number;\nexport function numberProperty(element: SceneElement, name: string, fallback?: number): number | undefined {\n const value = element.properties[name];\n return typeof value === 'number' && !Number.isNaN(value) ? value : fallback;\n}\n\n/**\n * Reads an array configuration value off a Scene element, as raw entries.\n *\n * Always returns an array - an absent or wrongly typed property becomes an empty one - because every\n * caller is about to map over it, and a component rendering nothing is a far better failure than one\n * throwing on `undefined.map`.\n *\n * @param element The element whose properties to read.\n * @param name The property name.\n * @returns The entries, or an empty array when the property is missing or is not an array.\n */\nexport function arrayProperty(element: SceneElement, name: string): unknown[] {\n const value = element.properties[name];\n return Array.isArray(value) ? value : [];\n}\n\n/**\n * Reads an array of strings off a Scene element, dropping any entry that is not one.\n *\n * @param element The element whose properties to read.\n * @param name The property name.\n * @returns The string entries, in order.\n */\nexport function stringArrayProperty(element: SceneElement, name: string): string[] {\n return arrayProperty(element, name).filter((entry): entry is string => typeof entry === 'string');\n}\n\n/**\n * Reads an array of objects off a Scene element, dropping any entry that is not one.\n *\n * This is the shape row data, column definitions and menu items all arrive in, so it is the common\n * bottom step every structured reader in this package builds on.\n *\n * @param element The element whose properties to read.\n * @param name The property name.\n * @returns The object entries, in order.\n */\nexport function recordArrayProperty(element: SceneElement, name: string): Record<string, unknown>[] {\n return arrayProperty(element, name).filter(\n (entry): entry is Record<string, unknown> => typeof entry === 'object' && entry !== undefined && entry !== null && !Array.isArray(entry)\n );\n}\n\n/**\n * Reads a selection component's options off a Scene element, normalizing both shapes a screen may use.\n *\n * A screen written by hand tends to say `options: ['Draft', 'Published']`; one generated from a model\n * says `options: [{ label: 'Draft', value: 'draft' }]`. Both are reasonable, so both are accepted and\n * flattened to {@link SelectOption} - an entry with only a label uses that label as its value, which is\n * exactly what the shorthand means.\n *\n * @param element The element whose properties to read.\n * @param name The property name.\n * @returns The normalized options, in order, skipping entries that carry no usable label.\n */\nexport function optionsProperty(element: SceneElement, name: string): SelectOption[] {\n const options: SelectOption[] = [];\n for (const entry of arrayProperty(element, name)) {\n if (typeof entry === 'string') {\n options.push({ label: entry, value: entry });\n continue;\n }\n\n if (typeof entry !== 'object' || entry === undefined || entry === null || Array.isArray(entry)) continue;\n\n const record = entry as Record<string, unknown>;\n const label = typeof record.label === 'string' ? record.label : undefined;\n const value = typeof record.value === 'string' ? record.value : label;\n if (label !== undefined && value !== undefined) options.push({ label, value });\n }\n\n return options;\n}\n\n/**\n * Reads a severity off a Scene element, in the vocabulary PrimeReact 11 uses.\n *\n * This exists because PrimeReact renamed one severity between v10 and v11 - `warning` became `warn` - and\n * the rename is silent in the worst way. The v11 prop types are string-literal unions, so an unchanged\n * `warning` does not fail to compile when it arrives through `stringProperty`; it simply falls through to\n * the default color, and a screen authored against the old vocabulary loses its warning styling without\n * anything reporting a problem.\n *\n * Six adapters need that translation, which is five too many to leave copied. Putting it here also keeps\n * the promise the rest of this file makes: properties are narrowed in exactly one place, so an\n * unrecognized value behaves the same way everywhere - like an absent one, rather than like a broken one.\n *\n * @param element The element whose properties to read.\n * @param name The property name, `severity` for every current caller.\n * @param fallback The severity to use when the property is missing or is not one PrimeReact knows.\n * @returns The severity, or `fallback` (`undefined` when none was given).\n */\nexport function severityProperty(element: SceneElement, name: string): PrimeSeverity | undefined;\nexport function severityProperty(element: SceneElement, name: string, fallback: PrimeSeverity): PrimeSeverity;\nexport function severityProperty(element: SceneElement, name: string, fallback?: PrimeSeverity): PrimeSeverity | undefined {\n const authored = stringProperty(element, name);\n const translated = authored === 'warning' ? 'warn' : authored;\n return severities.includes(translated as PrimeSeverity) ? (translated as PrimeSeverity) : fallback;\n}\n"],"names":["severities","stringProperty","element","name","fallback","value","properties","booleanProperty","numberProperty","Number","isNaN","arrayProperty","Array","isArray","stringArrayProperty","filter","entry","recordArrayProperty","undefined","optionsProperty","options","push","label","record","severityProperty","authored","translated","includes"],"mappings":"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"}
1
+ {"version":3,"file":"properties.js","sources":["../../properties.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 { SceneElement } from '@cratis/scene.model';\nimport { PrimeSeverity } from './PrimeSeverity';\nimport { SelectOption } from './SelectOption';\n\n/** Every severity PrimeReact 11 knows, so an unrecognized one can fall back rather than reach a component. */\nconst severities: PrimeSeverity[] = ['secondary', 'info', 'success', 'warn', 'danger', 'help', 'contrast'];\n\n/**\n * Reads a string configuration value off a Scene element.\n *\n * `SceneElement.properties` is `Record<string, unknown>` because a screen's properties come from\n * authored model data, not from a compiler that knows this package's expectations. Every adapter\n * therefore has to narrow before it can use a value, and doing that with a cast would defeat the point -\n * a mistyped property would sail through and blow up inside PrimeReact instead of quietly falling back\n * here. These helpers are the single narrowing point, so a wrong type behaves exactly like an absent\n * one everywhere.\n *\n * @param element The element whose properties to read.\n * @param name The property name.\n * @param fallback The value to use when the property is missing or is not a string.\n * @returns The string value, or `fallback` (`undefined` when none was given).\n */\nexport function stringProperty(element: SceneElement, name: string): string | undefined;\nexport function stringProperty(element: SceneElement, name: string, fallback: string): string;\nexport function stringProperty(element: SceneElement, name: string, fallback?: string): string | undefined {\n const value = element.properties[name];\n return typeof value === 'string' ? value : fallback;\n}\n\n/**\n * Reads a boolean configuration value off a Scene element.\n *\n * @param element The element whose properties to read.\n * @param name The property name.\n * @param fallback The value to use when the property is missing or is not a boolean.\n * @returns The boolean value, or `fallback` (`undefined` when none was given).\n */\nexport function booleanProperty(element: SceneElement, name: string): boolean | undefined;\nexport function booleanProperty(element: SceneElement, name: string, fallback: boolean): boolean;\nexport function booleanProperty(element: SceneElement, name: string, fallback?: boolean): boolean | undefined {\n const value = element.properties[name];\n return typeof value === 'boolean' ? value : fallback;\n}\n\n/**\n * Reads a numeric configuration value off a Scene element.\n *\n * `NaN` is rejected alongside non-numbers: it is a number by `typeof` but never a usable size, count or\n * bound, and letting it through would surface as an unexplained blank component rather than a fallback.\n *\n * @param element The element whose properties to read.\n * @param name The property name.\n * @param fallback The value to use when the property is missing or is not a usable number.\n * @returns The numeric value, or `fallback` (`undefined` when none was given).\n */\nexport function numberProperty(element: SceneElement, name: string): number | undefined;\nexport function numberProperty(element: SceneElement, name: string, fallback: number): number;\nexport function numberProperty(element: SceneElement, name: string, fallback?: number): number | undefined {\n const value = element.properties[name];\n return typeof value === 'number' && !Number.isNaN(value) ? value : fallback;\n}\n\n/**\n * Reads an array configuration value off a Scene element, as raw entries.\n *\n * Always returns an array - an absent or wrongly typed property becomes an empty one - because every\n * caller is about to map over it, and a component rendering nothing is a far better failure than one\n * throwing on `undefined.map`.\n *\n * @param element The element whose properties to read.\n * @param name The property name.\n * @returns The entries, or an empty array when the property is missing or is not an array.\n */\nexport function arrayProperty(element: SceneElement, name: string): unknown[] {\n const value = element.properties[name];\n return Array.isArray(value) ? value : [];\n}\n\n/**\n * Reads an array of strings off a Scene element, dropping any entry that is not one.\n *\n * @param element The element whose properties to read.\n * @param name The property name.\n * @returns The string entries, in order.\n */\nexport function stringArrayProperty(element: SceneElement, name: string): string[] {\n return arrayProperty(element, name).filter((entry): entry is string => typeof entry === 'string');\n}\n\n/**\n * Reads an array of objects off a Scene element, dropping any entry that is not one.\n *\n * This is the shape row data, column definitions and menu items all arrive in, so it is the common\n * bottom step every structured reader in this package builds on.\n *\n * @param element The element whose properties to read.\n * @param name The property name.\n * @returns The object entries, in order.\n */\nexport function recordArrayProperty(element: SceneElement, name: string): Record<string, unknown>[] {\n return arrayProperty(element, name).filter(\n (entry): entry is Record<string, unknown> => typeof entry === 'object' && entry !== undefined && entry !== null && !Array.isArray(entry)\n );\n}\n\n/**\n * Reads one structured value off a Scene element.\n *\n * Chart data and options intentionally stay as authored objects: these adapters pass their vocabulary to\n * their underlying library instead of choosing a partial Scene-owned chart schema that would discard\n * future Chart.js fields during a legacy migration.\n */\nexport function recordProperty(element: SceneElement, name: string): Record<string, unknown> | undefined {\n const value = element.properties[name];\n return typeof value === 'object' && value !== undefined && value !== null && !Array.isArray(value)\n ? value as Record<string, unknown>\n : undefined;\n}\n\n/**\n * Reads a selection component's options off a Scene element, normalizing both shapes a screen may use.\n *\n * A screen written by hand tends to say `options: ['Draft', 'Published']`; one generated from a model\n * says `options: [{ label: 'Draft', value: 'draft' }]`. Both are reasonable, so both are accepted and\n * flattened to {@link SelectOption} - an entry with only a label uses that label as its value, which is\n * exactly what the shorthand means.\n *\n * @param element The element whose properties to read.\n * @param name The property name.\n * @returns The normalized options, in order, skipping entries that carry no usable label.\n */\nexport function optionsProperty(element: SceneElement, name: string): SelectOption[] {\n const options: SelectOption[] = [];\n for (const entry of arrayProperty(element, name)) {\n if (typeof entry === 'string') {\n options.push({ label: entry, value: entry });\n continue;\n }\n\n if (typeof entry !== 'object' || entry === undefined || entry === null || Array.isArray(entry)) continue;\n\n const record = entry as Record<string, unknown>;\n const label = typeof record.label === 'string' ? record.label : undefined;\n const value = typeof record.value === 'string' ? record.value : label;\n if (label !== undefined && value !== undefined) options.push({ label, value });\n }\n\n return options;\n}\n\n/**\n * Reads a severity off a Scene element, in the vocabulary PrimeReact 11 uses.\n *\n * This exists because PrimeReact renamed one severity between v10 and v11 - `warning` became `warn` - and\n * the rename is silent in the worst way. The v11 prop types are string-literal unions, so an unchanged\n * `warning` does not fail to compile when it arrives through `stringProperty`; it simply falls through to\n * the default color, and a screen authored against the old vocabulary loses its warning styling without\n * anything reporting a problem.\n *\n * Six adapters need that translation, which is five too many to leave copied. Putting it here also keeps\n * the promise the rest of this file makes: properties are narrowed in exactly one place, so an\n * unrecognized value behaves the same way everywhere - like an absent one, rather than like a broken one.\n *\n * @param element The element whose properties to read.\n * @param name The property name, `severity` for every current caller.\n * @param fallback The severity to use when the property is missing or is not one PrimeReact knows.\n * @returns The severity, or `fallback` (`undefined` when none was given).\n */\nexport function severityProperty(element: SceneElement, name: string): PrimeSeverity | undefined;\nexport function severityProperty(element: SceneElement, name: string, fallback: PrimeSeverity): PrimeSeverity;\nexport function severityProperty(element: SceneElement, name: string, fallback?: PrimeSeverity): PrimeSeverity | undefined {\n const authored = stringProperty(element, name);\n const translated = authored === 'warning' ? 'warn' : authored;\n return severities.includes(translated as PrimeSeverity) ? (translated as PrimeSeverity) : fallback;\n}\n"],"names":["severities","stringProperty","element","name","fallback","value","properties","booleanProperty","numberProperty","Number","isNaN","arrayProperty","Array","isArray","stringArrayProperty","filter","entry","recordArrayProperty","undefined","recordProperty","optionsProperty","options","push","label","record","severityProperty","authored","translated","includes"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { EnumerationResolution } from './EnumerationResolution';
2
+ export declare function resolveEnumeration<TMember extends string>(property: string, value: unknown, members: Record<string, TMember>, fallback: TMember): EnumerationResolution<TMember>;
3
+ //# sourceMappingURL=resolveEnumeration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveEnumeration.d.ts","sourceRoot":"","sources":["../../resolveEnumeration.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAsBhE,wBAAgB,kBAAkB,CAAC,OAAO,SAAS,MAAM,EACrD,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,QAAQ,EAAE,OAAO,GAClB,qBAAqB,CAAC,OAAO,CAAC,CAmBhC"}
@@ -0,0 +1,53 @@
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
+ * Resolves an authored value to a member of one of this package's string enums.
5
+ *
6
+ * Three forms are accepted, and the stored value is never rewritten:
7
+ * - the canonical string value the enum declares (`'checkbox'`), which new documents use;
8
+ * - the ordinal of the original .NET enum (`3`), which migrated documents carry. The ordinal is the member's
9
+ * position in declaration order, so that order is part of the stored-data contract and must not change;
10
+ * - the .NET member name in its original Pascal case (`'Checkbox'`), which a JSON serialization of that enum
11
+ * produces.
12
+ *
13
+ * An absent value is the one default. Anything else - an out-of-range or fractional ordinal, a numeric
14
+ * string, a differently cased name, `null` - resolves to a finding with a message, because the intended
15
+ * behavior cannot be known and a silent fallback hides a mistyped document.
16
+ *
17
+ * @param property The property name, used in the message.
18
+ * @param value The authored value.
19
+ * @param members The enum object.
20
+ * @param fallback The member an absent value means.
21
+ * @returns The resolved member, or the finding.
22
+ */ function resolveEnumeration(property, value, members, fallback) {
23
+ if (value === undefined) return {
24
+ isValid: true,
25
+ value: fallback
26
+ };
27
+ const canonical = Object.values(members);
28
+ if (typeof value === 'number' && Number.isInteger(value) && value >= 0 && value < canonical.length) {
29
+ return {
30
+ isValid: true,
31
+ value: canonical[value]
32
+ };
33
+ }
34
+ if (typeof value === 'string') {
35
+ if (canonical.includes(value)) return {
36
+ isValid: true,
37
+ value: value
38
+ };
39
+ if (Object.hasOwn(members, value)) return {
40
+ isValid: true,
41
+ value: members[value]
42
+ };
43
+ }
44
+ const shown = typeof value === 'string' ? `'${value}'` : JSON.stringify(value) ?? String(value);
45
+ return {
46
+ isValid: false,
47
+ value,
48
+ message: `Unsupported ${property} ${shown}. Use one of ${canonical.join(', ')}, or a legacy ordinal from 0 to ${canonical.length - 1}.`
49
+ };
50
+ }
51
+
52
+ export { resolveEnumeration };
53
+ //# 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,2 @@
1
+ export declare function structurallyEqual(left: unknown, right: unknown): boolean;
2
+ //# sourceMappingURL=structurallyEqual.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structurallyEqual.d.ts","sourceRoot":"","sources":["../../structurallyEqual.ts"],"names":[],"mappings":"AAWA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAaxE"}
@@ -0,0 +1,25 @@
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
+ * Compares values that can survive a Scene document serialization round trip.
5
+ *
6
+ * Authored data (chart datasets, option values, current values) arrives as plain JSON. Every edit to a
7
+ * Scene document clones the whole document, so the same data gets a new object identity with no change in
8
+ * content; reference equality would treat each unrelated edit as a change. Primitives compare with
9
+ * `Object.is`, so `0` and `-0`, or `NaN` and `NaN`, are told apart exactly as `Object.is` does.
10
+ */ function structurallyEqual(left, right) {
11
+ if (Object.is(left, right)) return true;
12
+ if (Array.isArray(left) || Array.isArray(right)) {
13
+ return Array.isArray(left) && Array.isArray(right) && left.length === right.length && left.every((value, index)=>structurallyEqual(value, right[index]));
14
+ }
15
+ if (!isRecord(left) || !isRecord(right)) return false;
16
+ const leftKeys = Object.keys(left).sort();
17
+ const rightKeys = Object.keys(right).sort();
18
+ return leftKeys.length === rightKeys.length && leftKeys.every((key, index)=>key === rightKeys[index] && structurallyEqual(left[key], right[key]));
19
+ }
20
+ function isRecord(value) {
21
+ return value !== null && typeof value === 'object';
22
+ }
23
+
24
+ export { structurallyEqual };
25
+ //# 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;;"}
@@ -1,5 +1,6 @@
1
1
  import { TreeNode } from './TreeNode';
2
2
  import { SceneElement } from '@cratis/scene.model';
3
- export declare function toTreeNodes(entries: unknown[], parentKey?: string): TreeNode[];
3
+ export declare function toTreeNodes(entries: unknown[], parentKey?: string, usedKeys?: Set<string>): TreeNode[];
4
+ export declare function countUnreadableEntries(entries: unknown[]): number;
4
5
  export declare function treeNodesProperty(element: SceneElement, name: string): TreeNode[];
5
6
  //# sourceMappingURL=treeNodes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"treeNodes.d.ts","sourceRoot":"","sources":["../../treeNodes.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAgBnD,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,SAAS,SAAK,GAAG,QAAQ,EAAE,CAuB1E;AASD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAEjF"}
1
+ {"version":3,"file":"treeNodes.d.ts","sourceRoot":"","sources":["../../treeNodes.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAwBnD,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,SAAS,SAAK,EAAE,QAAQ,GAAE,GAAG,CAAC,MAAM,CAAa,GAAG,QAAQ,EAAE,CAyB7G;AASD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,CAOjE;AAqBD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAEjF"}
@@ -11,35 +11,69 @@ import { arrayProperty } from './properties.js';
11
11
  * expands the wrong rows the moment two siblings share a label. Deriving the key from the path makes it
12
12
  * unique and stable across re-renders without asking the author for anything.
13
13
  *
14
+ * An authored key may be a string or a number (a numeric id is a natural key); it is kept as a string. Keys
15
+ * are unique across the whole tree: a node whose authored key was already taken by an earlier node falls back
16
+ * to its path key, so two nodes can never share expansion or selection.
17
+ *
18
+ * An entry that is a string, number or boolean is a leaf labeled with it. Anything else that is not a record
19
+ * (`null`, a nested array) cannot be a node and is skipped; see {@link countUnreadableEntries}.
20
+ *
14
21
  * @param entries The raw entries to convert.
15
22
  * @param parentKey The key of the node these entries belong to, used to build stable child keys.
23
+ * @param usedKeys The keys already given out in this tree, shared down the recursion.
16
24
  * @returns The converted nodes, in order.
17
- */ function toTreeNodes(entries, parentKey = '') {
25
+ */ function toTreeNodes(entries, parentKey = '', usedKeys = new Set()) {
18
26
  const nodes = [];
19
27
  entries.forEach((entry, index)=>{
20
28
  const path = parentKey === '' ? `${index}` : `${parentKey}-${index}`;
21
- if (typeof entry === 'string') {
29
+ if (typeof entry === 'string' || typeof entry === 'number' || typeof entry === 'boolean') {
22
30
  nodes.push({
23
- key: path,
24
- label: entry
31
+ key: uniqueKey(undefined, path, usedKeys),
32
+ label: String(entry)
25
33
  });
26
34
  return;
27
35
  }
28
36
  if (typeof entry !== 'object' || entry === undefined || entry === null || Array.isArray(entry)) return;
29
37
  const record = entry;
30
38
  const node = {
31
- key: typeof record.key === 'string' ? record.key : path
39
+ key: uniqueKey(authoredKey(record.key), path, usedKeys)
32
40
  };
33
41
  if (typeof record.label === 'string') node.label = record.label;
34
42
  if (typeof record.icon === 'string') node.icon = record.icon;
35
43
  if (typeof record.className === 'string') node.className = record.className;
36
44
  if (typeof record.leaf === 'boolean') node.leaf = record.leaf;
37
- if (typeof record.data === 'object' && record.data !== null) node.data = record.data;
38
- if (Array.isArray(record.children)) node.children = toTreeNodes(record.children, node.key);
45
+ if (typeof record.expanded === 'boolean') node.expanded = record.expanded;
46
+ if (typeof record.selectable === 'boolean') node.selectable = record.selectable;
47
+ if (record.data !== undefined && record.data !== null) node.data = record.data;
48
+ if (Array.isArray(record.children)) node.children = toTreeNodes(record.children, node.key, usedKeys);
39
49
  nodes.push(node);
40
50
  });
41
51
  return nodes;
42
52
  }
53
+ /**
54
+ * Counts the entries `toTreeNodes` skips, so a control can say that some of its data was not shown instead
55
+ * of silently showing less.
56
+ *
57
+ * @param entries The raw entries.
58
+ * @returns How many entries, at any depth, were neither a scalar nor a record.
59
+ */ function countUnreadableEntries(entries) {
60
+ return entries.reduce((count, entry)=>{
61
+ if (typeof entry === 'string' || typeof entry === 'number' || typeof entry === 'boolean') return count;
62
+ if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) return count + 1;
63
+ const children = entry.children;
64
+ return count + (Array.isArray(children) ? countUnreadableEntries(children) : 0);
65
+ }, 0);
66
+ }
67
+ function authoredKey(value) {
68
+ if (typeof value === 'string' && value !== '') return value;
69
+ return typeof value === 'number' && Number.isFinite(value) ? String(value) : undefined;
70
+ }
71
+ function uniqueKey(authored, path, usedKeys) {
72
+ let key = authored !== undefined && !usedKeys.has(authored) ? authored : path;
73
+ while(usedKeys.has(key))key = `${key}~`;
74
+ usedKeys.add(key);
75
+ return key;
76
+ }
43
77
  /**
44
78
  * Reads a tree model off a Scene element's properties.
45
79
  *
@@ -50,5 +84,5 @@ import { arrayProperty } from './properties.js';
50
84
  return toTreeNodes(arrayProperty(element, name));
51
85
  }
52
86
 
53
- export { toTreeNodes, treeNodesProperty };
87
+ export { countUnreadableEntries, toTreeNodes, treeNodesProperty };
54
88
  //# 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,cAAcF,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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"}