@multiplatform.one/frappe-ui 7.28.0 → 7.29.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 (618) hide show
  1. package/dist/cjs/ChartCard.native.js.map +1 -1
  2. package/dist/cjs/FileBrowser/AttachLibrary.native.js.map +1 -1
  3. package/dist/cjs/FileBrowser/folderTree.native.js.map +1 -1
  4. package/dist/cjs/FileBrowser/index.cjs +20 -3
  5. package/dist/cjs/FileBrowser/index.native.js +20 -3
  6. package/dist/cjs/FileBrowser/index.native.js.map +1 -1
  7. package/dist/cjs/FileBrowser/types.native.js.map +1 -1
  8. package/dist/cjs/FileBrowser/viewPersistence.native.js.map +1 -1
  9. package/dist/cjs/FormSidebar.native.js.map +1 -1
  10. package/dist/cjs/FrappeAssignment.native.js.map +1 -1
  11. package/dist/cjs/FrappeCalendar.cjs +3 -2
  12. package/dist/cjs/FrappeCalendar.native.js +3 -2
  13. package/dist/cjs/FrappeCalendar.native.js.map +1 -1
  14. package/dist/cjs/FrappeChartCard.native.js.map +1 -1
  15. package/dist/cjs/FrappeConnectionIndicator.native.js.map +1 -1
  16. package/dist/cjs/FrappeDashboard.native.js.map +1 -1
  17. package/dist/cjs/FrappeForm.cjs +148 -464
  18. package/dist/cjs/FrappeForm.native.js +153 -634
  19. package/dist/cjs/FrappeForm.native.js.map +1 -1
  20. package/dist/cjs/FrappeFormActions.native.js.map +1 -1
  21. package/dist/cjs/FrappeFormConnections.native.js.map +1 -1
  22. package/dist/cjs/FrappeGantt.native.js.map +1 -1
  23. package/dist/cjs/FrappeImageView.native.js.map +1 -1
  24. package/dist/cjs/FrappeInsights.native.js.map +1 -1
  25. package/dist/cjs/FrappeKPICard.native.js.map +1 -1
  26. package/dist/cjs/FrappeKanban.native.js.map +1 -1
  27. package/dist/cjs/FrappeLikedBy.native.js.map +1 -1
  28. package/dist/cjs/FrappeList.native.js.map +1 -1
  29. package/dist/cjs/FrappeListView.cjs +5 -27
  30. package/dist/cjs/FrappeListView.native.js +11 -32
  31. package/dist/cjs/FrappeListView.native.js.map +1 -1
  32. package/dist/cjs/FrappeNotConfigured.native.js.map +1 -1
  33. package/dist/cjs/FrappeProvider.native.js.map +1 -1
  34. package/dist/cjs/FrappeReconnectIndicator.native.js.map +1 -1
  35. package/dist/cjs/FrappeRecordView.native.js.map +1 -1
  36. package/dist/cjs/FrappeReportBuilder.cjs +523 -309
  37. package/dist/cjs/FrappeReportBuilder.native.js +658 -353
  38. package/dist/cjs/FrappeReportBuilder.native.js.map +1 -1
  39. package/dist/cjs/FrappeReportView.cjs +35 -234
  40. package/dist/cjs/FrappeReportView.native.js +42 -286
  41. package/dist/cjs/FrappeReportView.native.js.map +1 -1
  42. package/dist/cjs/FrappeRowsReader.native.js.map +1 -1
  43. package/dist/cjs/FrappeTable.native.js.map +1 -1
  44. package/dist/cjs/FrappeTreeView.native.js.map +1 -1
  45. package/dist/cjs/SyncErrorNotice.native.js.map +1 -1
  46. package/dist/cjs/commentActions.native.js.map +1 -1
  47. package/dist/cjs/components/attachments.native.js.map +1 -1
  48. package/dist/cjs/components/tags.native.js.map +1 -1
  49. package/dist/cjs/components/timeline.native.js.map +1 -1
  50. package/dist/cjs/dependsOn.cjs +2 -2
  51. package/dist/cjs/dependsOn.native.js +1 -2
  52. package/dist/cjs/dependsOn.native.js.map +1 -1
  53. package/dist/cjs/desk/DeskFormPage.native.js.map +1 -1
  54. package/dist/cjs/desk/DeskFormSidebar.native.js.map +1 -1
  55. package/dist/cjs/desk/DeskListPage.native.js.map +1 -1
  56. package/dist/cjs/desk/DeskShell.native.js.map +1 -1
  57. package/dist/cjs/desk/DeskSidebar.native.js.map +1 -1
  58. package/dist/cjs/desk/awesomebar.native.js.map +1 -1
  59. package/dist/cjs/fieldOverrides.native.js.map +1 -1
  60. package/dist/cjs/fieldRegistry.native.js +31 -31
  61. package/dist/cjs/fieldRegistry.native.js.map +1 -1
  62. package/dist/cjs/fields/Barcode/index.native.js.map +1 -1
  63. package/dist/cjs/fields/Check/index.native.js.map +1 -1
  64. package/dist/cjs/fields/CodeEditor/index.native.js.map +1 -1
  65. package/dist/cjs/fields/Color/index.native.js.map +1 -1
  66. package/dist/cjs/fields/Data/index.native.js.map +1 -1
  67. package/dist/cjs/fields/Date/sheetKeyboard.native.js.map +1 -1
  68. package/dist/cjs/fields/Date/types.native.js.map +1 -1
  69. package/dist/cjs/fields/Date/wire.native.js.map +1 -1
  70. package/dist/cjs/fields/DateRange/index.native.js.map +1 -1
  71. package/dist/cjs/fields/Duration/index.native.js.map +1 -1
  72. package/dist/cjs/fields/DynamicLink.native.js.map +1 -1
  73. package/dist/cjs/fields/FileUpload.native.js.map +1 -1
  74. package/dist/cjs/fields/FileUploadField/index.native.js.map +1 -1
  75. package/dist/cjs/fields/Geolocation/index.native.js.map +1 -1
  76. package/dist/cjs/fields/HTML/index.native.js.map +1 -1
  77. package/dist/cjs/fields/Heading/index.native.js.map +1 -1
  78. package/dist/cjs/fields/Icon/index.native.js.map +1 -1
  79. package/dist/cjs/fields/Link.native.js.map +1 -1
  80. package/dist/cjs/fields/LinkTree.native.js.map +1 -1
  81. package/dist/cjs/fields/LongText/index.native.js.map +1 -1
  82. package/dist/cjs/fields/MentionInput/index.native.js.map +1 -1
  83. package/dist/cjs/fields/Numeric/index.native.js.map +1 -1
  84. package/dist/cjs/fields/OTPInput/index.native.js.map +1 -1
  85. package/dist/cjs/fields/Password/index.native.js.map +1 -1
  86. package/dist/cjs/fields/Phone/index.native.js.map +1 -1
  87. package/dist/cjs/fields/Progress/index.native.js.map +1 -1
  88. package/dist/cjs/fields/RadioGroup/index.native.js.map +1 -1
  89. package/dist/cjs/fields/Rating/index.native.js.map +1 -1
  90. package/dist/cjs/fields/ReadOnly/index.native.js.map +1 -1
  91. package/dist/cjs/fields/Select/index.native.js.map +1 -1
  92. package/dist/cjs/fields/Signature/index.native.js.map +1 -1
  93. package/dist/cjs/fields/Slider/index.native.js.map +1 -1
  94. package/dist/cjs/fields/SmallText/index.native.js.map +1 -1
  95. package/dist/cjs/fields/Switch/index.native.js.map +1 -1
  96. package/dist/cjs/fields/TableMultiSelect.native.js.map +1 -1
  97. package/dist/cjs/fields/TextEditor/types.native.js.map +1 -1
  98. package/dist/cjs/fields/TimePicker/index.native.js.map +1 -1
  99. package/dist/cjs/fields/ToggleGroup/index.native.js.map +1 -1
  100. package/dist/cjs/fields/shared/EditorPreviewPanes.cjs +2 -2
  101. package/dist/cjs/fields/shared/EditorPreviewPanes.native.js +2 -2
  102. package/dist/cjs/fields/shared/EditorPreviewPanes.native.js.map +1 -1
  103. package/dist/cjs/filterFields.native.js.map +1 -1
  104. package/dist/cjs/formEngine/createPrefill.native.js.map +1 -1
  105. package/dist/cjs/formEngine/dirtyTracking.native.js.map +1 -1
  106. package/dist/cjs/formEngine/docLifecycle.native.js.map +1 -1
  107. package/dist/cjs/formEngine/docPermissions.cjs +20 -0
  108. package/dist/cjs/formEngine/docPermissions.native.js +69 -0
  109. package/dist/cjs/formEngine/docPermissions.native.js.map +1 -1
  110. package/dist/cjs/formEngine/doctypeMeta.native.js.map +1 -1
  111. package/dist/cjs/formEngine/fetchFrom.native.js.map +1 -1
  112. package/dist/cjs/formEngine/fieldPermissions.native.js.map +1 -1
  113. package/dist/cjs/formEngine/formActions.native.js.map +1 -1
  114. package/dist/cjs/formEngine/formLayout.native.js.map +1 -1
  115. package/dist/cjs/formEngine/index.cjs +2 -0
  116. package/dist/cjs/formEngine/index.native.js +2 -0
  117. package/dist/cjs/formEngine/index.native.js.map +1 -1
  118. package/dist/cjs/formEngine/useAmendedAs.native.js.map +1 -1
  119. package/dist/cjs/formEngine/useDocRights.native.js.map +1 -1
  120. package/dist/cjs/formEngine/useFormEngine.native.js.map +1 -1
  121. package/dist/cjs/formEngine/useSessionRoles.native.js.map +1 -1
  122. package/dist/cjs/frappeConnections.native.js.map +1 -1
  123. package/dist/cjs/frappeEventColor.native.js.map +1 -1
  124. package/dist/cjs/frappeNavigation.native.js.map +1 -1
  125. package/dist/cjs/frappeStoryTarget.native.js.map +1 -1
  126. package/dist/cjs/frappeUsers.native.js.map +1 -1
  127. package/dist/cjs/index.cjs +67 -7
  128. package/dist/cjs/index.native.js +101 -41
  129. package/dist/cjs/index.native.js.map +1 -1
  130. package/dist/cjs/insights/InsightsFacetTags.native.js.map +1 -1
  131. package/dist/cjs/insights/InsightsKpiBand.native.js.map +1 -1
  132. package/dist/cjs/insights/InsightsLeaders.native.js.map +1 -1
  133. package/dist/cjs/insights/InsightsRecords.native.js.map +1 -1
  134. package/dist/cjs/insights/InsightsTable.native.js.map +1 -1
  135. package/dist/cjs/insights/insightsData.native.js.map +1 -1
  136. package/dist/cjs/insights/insightsRecord.native.js.map +1 -1
  137. package/dist/cjs/list/FacetBadge.native.js.map +1 -1
  138. package/dist/cjs/list/FacetRail.native.js.map +1 -1
  139. package/dist/cjs/list/ImageWell.native.js.map +1 -1
  140. package/dist/cjs/list/ListControls.native.js.map +1 -1
  141. package/dist/cjs/list/ListToastHost.native.js.map +1 -1
  142. package/dist/cjs/list/RangeFilter.native.js.map +1 -1
  143. package/dist/cjs/list/ShufflePanel.native.js.map +1 -1
  144. package/dist/cjs/list/facetReading.native.js.map +1 -1
  145. package/dist/cjs/list/favorites.native.js.map +1 -1
  146. package/dist/cjs/list/listColumns.native.js.map +1 -1
  147. package/dist/cjs/list/listFields.native.js.map +1 -1
  148. package/dist/cjs/list/listFormat.native.js.map +1 -1
  149. package/dist/cjs/list/listState.native.js.map +1 -1
  150. package/dist/cjs/list/recordLook.native.js.map +1 -1
  151. package/dist/cjs/list/statusColors.native.js.map +1 -1
  152. package/dist/cjs/list/useListControls.native.js.map +1 -1
  153. package/dist/cjs/liveErrors.cjs +8 -2
  154. package/dist/cjs/liveErrors.native.js +8 -2
  155. package/dist/cjs/liveErrors.native.js.map +1 -1
  156. package/dist/cjs/measures.cjs +31 -0
  157. package/dist/cjs/measures.native.js +34 -0
  158. package/dist/cjs/measures.native.js.map +1 -0
  159. package/dist/cjs/record/RecordBars.native.js.map +1 -1
  160. package/dist/cjs/record/RecordGallery.native.js.map +1 -1
  161. package/dist/cjs/record/RecordHero.native.js.map +1 -1
  162. package/dist/cjs/record/RecordPage.native.js.map +1 -1
  163. package/dist/cjs/record/RecordPager.native.js.map +1 -1
  164. package/dist/cjs/record/RecordRows.native.js.map +1 -1
  165. package/dist/cjs/record/recordData.native.js.map +1 -1
  166. package/dist/cjs/record/recordSections.native.js.map +1 -1
  167. package/dist/cjs/recordShape.cjs +103 -0
  168. package/dist/cjs/recordShape.native.js +115 -0
  169. package/dist/cjs/recordShape.native.js.map +1 -0
  170. package/dist/cjs/report/ReportGrid.cjs +453 -0
  171. package/dist/cjs/report/ReportGrid.native.js +510 -0
  172. package/dist/cjs/report/ReportGrid.native.js.map +1 -0
  173. package/dist/cjs/report/ReportViewToolbar.cjs +253 -0
  174. package/dist/cjs/report/ReportViewToolbar.native.js +303 -0
  175. package/dist/cjs/report/ReportViewToolbar.native.js.map +1 -0
  176. package/dist/cjs/report/queryReport.cjs +444 -0
  177. package/dist/cjs/report/queryReport.native.js +588 -0
  178. package/dist/cjs/report/queryReport.native.js.map +1 -0
  179. package/dist/cjs/report/queryReportColumns.cjs +131 -0
  180. package/dist/cjs/report/queryReportColumns.native.js +159 -0
  181. package/dist/cjs/report/queryReportColumns.native.js.map +1 -0
  182. package/dist/cjs/report/reportViewModel.cjs +386 -0
  183. package/dist/cjs/report/reportViewModel.native.js +657 -0
  184. package/dist/cjs/report/reportViewModel.native.js.map +1 -0
  185. package/dist/cjs/report/savedReports.cjs +137 -0
  186. package/dist/cjs/report/savedReports.native.js +169 -0
  187. package/dist/cjs/report/savedReports.native.js.map +1 -0
  188. package/dist/cjs/report/useFrappeReport.cjs +184 -0
  189. package/dist/cjs/report/useFrappeReport.native.js +214 -0
  190. package/dist/cjs/report/useFrappeReport.native.js.map +1 -0
  191. package/dist/cjs/report/useQueryReport.cjs +201 -0
  192. package/dist/cjs/report/useQueryReport.native.js +233 -0
  193. package/dist/cjs/report/useQueryReport.native.js.map +1 -0
  194. package/dist/cjs/resolveControl.native.js.map +1 -1
  195. package/dist/cjs/schemaForm/SchemaWizard.native.js.map +1 -1
  196. package/dist/cjs/schemaForm/applyFieldOrder.native.js.map +1 -1
  197. package/dist/cjs/schemaForm/index.native.js +1 -1
  198. package/dist/cjs/schemaForm/index.native.js.map +1 -1
  199. package/dist/cjs/shared/devWarn.native.js.map +1 -1
  200. package/dist/cjs/shared/useKeyboardInset.native.js.map +1 -1
  201. package/dist/cjs/syncError.native.js.map +1 -1
  202. package/dist/cjs/useConnectionFilters.native.js.map +1 -1
  203. package/dist/cjs/useFrappeAggregate.native.js.map +1 -1
  204. package/dist/cjs/useFrappeFacets.native.js.map +1 -1
  205. package/dist/cjs/useFrappeForm.cjs +558 -0
  206. package/dist/cjs/useFrappeForm.native.js +714 -0
  207. package/dist/cjs/useFrappeForm.native.js.map +1 -0
  208. package/dist/cjs/useFrappePagination.native.js.map +1 -1
  209. package/dist/cjs/useFrappeRows.native.js.map +1 -1
  210. package/dist/esm/ChartCard.native.js.map +1 -1
  211. package/dist/esm/FileBrowser/AttachLibrary.native.js.map +1 -1
  212. package/dist/esm/FileBrowser/folderTree.native.js.map +1 -1
  213. package/dist/esm/FileBrowser/index.mjs +20 -3
  214. package/dist/esm/FileBrowser/index.mjs.map +1 -1
  215. package/dist/esm/FileBrowser/index.native.js +20 -3
  216. package/dist/esm/FileBrowser/index.native.js.map +1 -1
  217. package/dist/esm/FileBrowser/types.native.js.map +1 -1
  218. package/dist/esm/FileBrowser/viewPersistence.native.js.map +1 -1
  219. package/dist/esm/FormSidebar.native.js.map +1 -1
  220. package/dist/esm/FrappeAssignment.native.js.map +1 -1
  221. package/dist/esm/FrappeCalendar.mjs +4 -3
  222. package/dist/esm/FrappeCalendar.mjs.map +1 -1
  223. package/dist/esm/FrappeCalendar.native.js +4 -3
  224. package/dist/esm/FrappeCalendar.native.js.map +1 -1
  225. package/dist/esm/FrappeChartCard.native.js.map +1 -1
  226. package/dist/esm/FrappeConnectionIndicator.native.js.map +1 -1
  227. package/dist/esm/FrappeDashboard.native.js.map +1 -1
  228. package/dist/esm/FrappeForm.mjs +151 -467
  229. package/dist/esm/FrappeForm.mjs.map +1 -1
  230. package/dist/esm/FrappeForm.native.js +155 -636
  231. package/dist/esm/FrappeForm.native.js.map +1 -1
  232. package/dist/esm/FrappeFormActions.native.js.map +1 -1
  233. package/dist/esm/FrappeFormConnections.native.js.map +1 -1
  234. package/dist/esm/FrappeGantt.native.js.map +1 -1
  235. package/dist/esm/FrappeImageView.native.js.map +1 -1
  236. package/dist/esm/FrappeInsights.native.js.map +1 -1
  237. package/dist/esm/FrappeKPICard.native.js.map +1 -1
  238. package/dist/esm/FrappeKanban.native.js.map +1 -1
  239. package/dist/esm/FrappeLikedBy.native.js.map +1 -1
  240. package/dist/esm/FrappeList.native.js.map +1 -1
  241. package/dist/esm/FrappeListView.mjs +6 -28
  242. package/dist/esm/FrappeListView.mjs.map +1 -1
  243. package/dist/esm/FrappeListView.native.js +12 -33
  244. package/dist/esm/FrappeListView.native.js.map +1 -1
  245. package/dist/esm/FrappeNotConfigured.native.js.map +1 -1
  246. package/dist/esm/FrappeProvider.native.js.map +1 -1
  247. package/dist/esm/FrappeReconnectIndicator.native.js.map +1 -1
  248. package/dist/esm/FrappeRecordView.native.js.map +1 -1
  249. package/dist/esm/FrappeReportBuilder.mjs +526 -312
  250. package/dist/esm/FrappeReportBuilder.mjs.map +1 -1
  251. package/dist/esm/FrappeReportBuilder.native.js +661 -356
  252. package/dist/esm/FrappeReportBuilder.native.js.map +1 -1
  253. package/dist/esm/FrappeReportView.mjs +30 -229
  254. package/dist/esm/FrappeReportView.mjs.map +1 -1
  255. package/dist/esm/FrappeReportView.native.js +34 -278
  256. package/dist/esm/FrappeReportView.native.js.map +1 -1
  257. package/dist/esm/FrappeRowsReader.native.js.map +1 -1
  258. package/dist/esm/FrappeTable.native.js.map +1 -1
  259. package/dist/esm/FrappeTreeView.native.js.map +1 -1
  260. package/dist/esm/SyncErrorNotice.native.js.map +1 -1
  261. package/dist/esm/commentActions.native.js.map +1 -1
  262. package/dist/esm/components/attachments.native.js.map +1 -1
  263. package/dist/esm/components/tags.native.js.map +1 -1
  264. package/dist/esm/components/timeline.native.js.map +1 -1
  265. package/dist/esm/dependsOn.mjs +2 -2
  266. package/dist/esm/dependsOn.mjs.map +1 -1
  267. package/dist/esm/dependsOn.native.js +1 -2
  268. package/dist/esm/dependsOn.native.js.map +1 -1
  269. package/dist/esm/desk/DeskFormPage.native.js.map +1 -1
  270. package/dist/esm/desk/DeskFormSidebar.native.js.map +1 -1
  271. package/dist/esm/desk/DeskListPage.native.js.map +1 -1
  272. package/dist/esm/desk/DeskShell.native.js.map +1 -1
  273. package/dist/esm/desk/DeskSidebar.native.js.map +1 -1
  274. package/dist/esm/desk/awesomebar.native.js.map +1 -1
  275. package/dist/esm/fieldOverrides.native.js.map +1 -1
  276. package/dist/esm/fieldRegistry.native.js.map +1 -1
  277. package/dist/esm/fields/Barcode/index.native.js.map +1 -1
  278. package/dist/esm/fields/Check/index.native.js.map +1 -1
  279. package/dist/esm/fields/CodeEditor/index.native.js.map +1 -1
  280. package/dist/esm/fields/Color/index.native.js.map +1 -1
  281. package/dist/esm/fields/Data/index.native.js.map +1 -1
  282. package/dist/esm/fields/Date/sheetKeyboard.native.js.map +1 -1
  283. package/dist/esm/fields/Date/types.native.js.map +1 -1
  284. package/dist/esm/fields/Date/wire.native.js.map +1 -1
  285. package/dist/esm/fields/DateRange/index.native.js.map +1 -1
  286. package/dist/esm/fields/Duration/index.native.js.map +1 -1
  287. package/dist/esm/fields/DynamicLink.native.js.map +1 -1
  288. package/dist/esm/fields/FileUpload.native.js.map +1 -1
  289. package/dist/esm/fields/FileUploadField/index.native.js.map +1 -1
  290. package/dist/esm/fields/Geolocation/index.native.js.map +1 -1
  291. package/dist/esm/fields/HTML/index.native.js.map +1 -1
  292. package/dist/esm/fields/Heading/index.native.js.map +1 -1
  293. package/dist/esm/fields/Icon/index.native.js.map +1 -1
  294. package/dist/esm/fields/Link.native.js.map +1 -1
  295. package/dist/esm/fields/LinkTree.native.js.map +1 -1
  296. package/dist/esm/fields/LongText/index.native.js.map +1 -1
  297. package/dist/esm/fields/MentionInput/index.native.js.map +1 -1
  298. package/dist/esm/fields/Numeric/index.native.js.map +1 -1
  299. package/dist/esm/fields/OTPInput/index.native.js.map +1 -1
  300. package/dist/esm/fields/Password/index.native.js.map +1 -1
  301. package/dist/esm/fields/Phone/index.native.js.map +1 -1
  302. package/dist/esm/fields/Progress/index.native.js.map +1 -1
  303. package/dist/esm/fields/RadioGroup/index.native.js.map +1 -1
  304. package/dist/esm/fields/Rating/index.native.js.map +1 -1
  305. package/dist/esm/fields/ReadOnly/index.native.js.map +1 -1
  306. package/dist/esm/fields/Select/index.native.js.map +1 -1
  307. package/dist/esm/fields/Signature/index.native.js.map +1 -1
  308. package/dist/esm/fields/Slider/index.native.js.map +1 -1
  309. package/dist/esm/fields/SmallText/index.native.js.map +1 -1
  310. package/dist/esm/fields/Switch/index.native.js.map +1 -1
  311. package/dist/esm/fields/TableMultiSelect.native.js.map +1 -1
  312. package/dist/esm/fields/TextEditor/types.native.js.map +1 -1
  313. package/dist/esm/fields/TimePicker/index.native.js.map +1 -1
  314. package/dist/esm/fields/ToggleGroup/index.native.js.map +1 -1
  315. package/dist/esm/fields/shared/EditorPreviewPanes.mjs +2 -2
  316. package/dist/esm/fields/shared/EditorPreviewPanes.mjs.map +1 -1
  317. package/dist/esm/fields/shared/EditorPreviewPanes.native.js +2 -2
  318. package/dist/esm/fields/shared/EditorPreviewPanes.native.js.map +1 -1
  319. package/dist/esm/filterFields.native.js.map +1 -1
  320. package/dist/esm/formEngine/createPrefill.native.js.map +1 -1
  321. package/dist/esm/formEngine/dirtyTracking.native.js.map +1 -1
  322. package/dist/esm/formEngine/docLifecycle.native.js.map +1 -1
  323. package/dist/esm/formEngine/docPermissions.mjs +19 -1
  324. package/dist/esm/formEngine/docPermissions.mjs.map +1 -1
  325. package/dist/esm/formEngine/docPermissions.native.js +68 -1
  326. package/dist/esm/formEngine/docPermissions.native.js.map +1 -1
  327. package/dist/esm/formEngine/doctypeMeta.native.js.map +1 -1
  328. package/dist/esm/formEngine/fetchFrom.native.js.map +1 -1
  329. package/dist/esm/formEngine/fieldPermissions.native.js.map +1 -1
  330. package/dist/esm/formEngine/formActions.native.js.map +1 -1
  331. package/dist/esm/formEngine/formLayout.native.js.map +1 -1
  332. package/dist/esm/formEngine/index.mjs +2 -2
  333. package/dist/esm/formEngine/index.mjs.map +1 -1
  334. package/dist/esm/formEngine/index.native.js +2 -2
  335. package/dist/esm/formEngine/index.native.js.map +1 -1
  336. package/dist/esm/formEngine/useAmendedAs.native.js.map +1 -1
  337. package/dist/esm/formEngine/useDocRights.native.js.map +1 -1
  338. package/dist/esm/formEngine/useFormEngine.native.js.map +1 -1
  339. package/dist/esm/formEngine/useSessionRoles.native.js.map +1 -1
  340. package/dist/esm/frappeConnections.native.js.map +1 -1
  341. package/dist/esm/frappeEventColor.native.js.map +1 -1
  342. package/dist/esm/frappeNavigation.native.js.map +1 -1
  343. package/dist/esm/frappeStoryTarget.native.js.map +1 -1
  344. package/dist/esm/frappeUsers.native.js.map +1 -1
  345. package/dist/esm/index.mjs +16 -4
  346. package/dist/esm/index.mjs.map +1 -1
  347. package/dist/esm/index.native.js +16 -4
  348. package/dist/esm/index.native.js.map +1 -1
  349. package/dist/esm/insights/InsightsFacetTags.native.js.map +1 -1
  350. package/dist/esm/insights/InsightsKpiBand.native.js.map +1 -1
  351. package/dist/esm/insights/InsightsLeaders.native.js.map +1 -1
  352. package/dist/esm/insights/InsightsRecords.native.js.map +1 -1
  353. package/dist/esm/insights/InsightsTable.native.js.map +1 -1
  354. package/dist/esm/insights/insightsData.native.js.map +1 -1
  355. package/dist/esm/insights/insightsRecord.native.js.map +1 -1
  356. package/dist/esm/list/FacetBadge.native.js.map +1 -1
  357. package/dist/esm/list/FacetRail.native.js.map +1 -1
  358. package/dist/esm/list/ImageWell.native.js.map +1 -1
  359. package/dist/esm/list/ListControls.native.js.map +1 -1
  360. package/dist/esm/list/ListToastHost.native.js.map +1 -1
  361. package/dist/esm/list/RangeFilter.native.js.map +1 -1
  362. package/dist/esm/list/ShufflePanel.native.js.map +1 -1
  363. package/dist/esm/list/facetReading.native.js.map +1 -1
  364. package/dist/esm/list/favorites.native.js.map +1 -1
  365. package/dist/esm/list/listColumns.native.js.map +1 -1
  366. package/dist/esm/list/listFields.native.js.map +1 -1
  367. package/dist/esm/list/listFormat.native.js.map +1 -1
  368. package/dist/esm/list/listState.native.js.map +1 -1
  369. package/dist/esm/list/recordLook.native.js.map +1 -1
  370. package/dist/esm/list/statusColors.native.js.map +1 -1
  371. package/dist/esm/list/useListControls.native.js.map +1 -1
  372. package/dist/esm/liveErrors.mjs +8 -3
  373. package/dist/esm/liveErrors.mjs.map +1 -1
  374. package/dist/esm/liveErrors.native.js +8 -3
  375. package/dist/esm/liveErrors.native.js.map +1 -1
  376. package/dist/esm/measures.mjs +5 -0
  377. package/dist/esm/measures.mjs.map +1 -0
  378. package/dist/esm/measures.native.js +5 -0
  379. package/dist/esm/measures.native.js.map +1 -0
  380. package/dist/esm/record/RecordBars.native.js.map +1 -1
  381. package/dist/esm/record/RecordGallery.native.js.map +1 -1
  382. package/dist/esm/record/RecordHero.native.js.map +1 -1
  383. package/dist/esm/record/RecordPage.native.js.map +1 -1
  384. package/dist/esm/record/RecordPager.native.js.map +1 -1
  385. package/dist/esm/record/RecordRows.native.js.map +1 -1
  386. package/dist/esm/record/recordData.native.js.map +1 -1
  387. package/dist/esm/record/recordSections.native.js.map +1 -1
  388. package/dist/esm/recordShape.mjs +74 -0
  389. package/dist/esm/recordShape.mjs.map +1 -0
  390. package/dist/esm/recordShape.native.js +83 -0
  391. package/dist/esm/recordShape.native.js.map +1 -0
  392. package/dist/esm/report/ReportGrid.mjs +428 -0
  393. package/dist/esm/report/ReportGrid.mjs.map +1 -0
  394. package/dist/esm/report/ReportGrid.native.js +471 -0
  395. package/dist/esm/report/ReportGrid.native.js.map +1 -0
  396. package/dist/esm/report/ReportViewToolbar.mjs +228 -0
  397. package/dist/esm/report/ReportViewToolbar.mjs.map +1 -0
  398. package/dist/esm/report/ReportViewToolbar.native.js +264 -0
  399. package/dist/esm/report/ReportViewToolbar.native.js.map +1 -0
  400. package/dist/esm/report/queryReport.mjs +404 -0
  401. package/dist/esm/report/queryReport.mjs.map +1 -0
  402. package/dist/esm/report/queryReport.native.js +545 -0
  403. package/dist/esm/report/queryReport.native.js.map +1 -0
  404. package/dist/esm/report/queryReportColumns.mjs +105 -0
  405. package/dist/esm/report/queryReportColumns.mjs.map +1 -0
  406. package/dist/esm/report/queryReportColumns.native.js +119 -0
  407. package/dist/esm/report/queryReportColumns.native.js.map +1 -0
  408. package/dist/esm/report/reportViewModel.mjs +343 -0
  409. package/dist/esm/report/reportViewModel.mjs.map +1 -0
  410. package/dist/esm/report/reportViewModel.native.js +611 -0
  411. package/dist/esm/report/reportViewModel.native.js.map +1 -0
  412. package/dist/esm/report/savedReports.mjs +112 -0
  413. package/dist/esm/report/savedReports.mjs.map +1 -0
  414. package/dist/esm/report/savedReports.native.js +141 -0
  415. package/dist/esm/report/savedReports.native.js.map +1 -0
  416. package/dist/esm/report/useFrappeReport.mjs +158 -0
  417. package/dist/esm/report/useFrappeReport.mjs.map +1 -0
  418. package/dist/esm/report/useFrappeReport.native.js +185 -0
  419. package/dist/esm/report/useFrappeReport.native.js.map +1 -0
  420. package/dist/esm/report/useQueryReport.mjs +176 -0
  421. package/dist/esm/report/useQueryReport.mjs.map +1 -0
  422. package/dist/esm/report/useQueryReport.native.js +205 -0
  423. package/dist/esm/report/useQueryReport.native.js.map +1 -0
  424. package/dist/esm/resolveControl.native.js.map +1 -1
  425. package/dist/esm/schemaForm/SchemaWizard.native.js.map +1 -1
  426. package/dist/esm/schemaForm/applyFieldOrder.native.js.map +1 -1
  427. package/dist/esm/schemaForm/index.native.js.map +1 -1
  428. package/dist/esm/shared/devWarn.native.js.map +1 -1
  429. package/dist/esm/shared/useKeyboardInset.native.js.map +1 -1
  430. package/dist/esm/syncError.native.js.map +1 -1
  431. package/dist/esm/useConnectionFilters.native.js.map +1 -1
  432. package/dist/esm/useFrappeAggregate.native.js.map +1 -1
  433. package/dist/esm/useFrappeFacets.native.js.map +1 -1
  434. package/dist/esm/useFrappeForm.mjs +533 -0
  435. package/dist/esm/useFrappeForm.mjs.map +1 -0
  436. package/dist/esm/useFrappeForm.native.js +686 -0
  437. package/dist/esm/useFrappeForm.native.js.map +1 -0
  438. package/dist/esm/useFrappePagination.native.js.map +1 -1
  439. package/dist/esm/useFrappeRows.native.js.map +1 -1
  440. package/dist/jsx/FileBrowser/index.mjs +20 -3
  441. package/dist/jsx/FileBrowser/index.mjs.map +1 -1
  442. package/dist/jsx/FileBrowser/index.native.js +20 -3
  443. package/dist/jsx/FileBrowser/index.native.js.map +1 -1
  444. package/dist/jsx/FrappeCalendar.mjs +4 -3
  445. package/dist/jsx/FrappeCalendar.mjs.map +1 -1
  446. package/dist/jsx/FrappeCalendar.native.js +3 -2
  447. package/dist/jsx/FrappeCalendar.native.js.map +1 -1
  448. package/dist/jsx/FrappeForm.mjs +151 -467
  449. package/dist/jsx/FrappeForm.mjs.map +1 -1
  450. package/dist/jsx/FrappeForm.native.js +152 -633
  451. package/dist/jsx/FrappeForm.native.js.map +1 -1
  452. package/dist/jsx/FrappeListView.mjs +6 -28
  453. package/dist/jsx/FrappeListView.mjs.map +1 -1
  454. package/dist/jsx/FrappeListView.native.js +11 -32
  455. package/dist/jsx/FrappeListView.native.js.map +1 -1
  456. package/dist/jsx/FrappeReportBuilder.mjs +526 -312
  457. package/dist/jsx/FrappeReportBuilder.mjs.map +1 -1
  458. package/dist/jsx/FrappeReportBuilder.native.js +658 -353
  459. package/dist/jsx/FrappeReportBuilder.native.js.map +1 -1
  460. package/dist/jsx/FrappeReportView.mjs +30 -229
  461. package/dist/jsx/FrappeReportView.mjs.map +1 -1
  462. package/dist/jsx/FrappeReportView.native.js +39 -283
  463. package/dist/jsx/FrappeReportView.native.js.map +1 -1
  464. package/dist/jsx/dependsOn.mjs +2 -2
  465. package/dist/jsx/dependsOn.mjs.map +1 -1
  466. package/dist/jsx/dependsOn.native.js +1 -2
  467. package/dist/jsx/dependsOn.native.js.map +1 -1
  468. package/dist/jsx/fields/shared/EditorPreviewPanes.mjs +2 -2
  469. package/dist/jsx/fields/shared/EditorPreviewPanes.mjs.map +1 -1
  470. package/dist/jsx/fields/shared/EditorPreviewPanes.native.js +2 -2
  471. package/dist/jsx/fields/shared/EditorPreviewPanes.native.js.map +1 -1
  472. package/dist/jsx/formEngine/docPermissions.mjs +19 -1
  473. package/dist/jsx/formEngine/docPermissions.mjs.map +1 -1
  474. package/dist/jsx/formEngine/docPermissions.native.js +69 -0
  475. package/dist/jsx/formEngine/docPermissions.native.js.map +1 -1
  476. package/dist/jsx/formEngine/index.mjs +2 -2
  477. package/dist/jsx/formEngine/index.mjs.map +1 -1
  478. package/dist/jsx/formEngine/index.native.js +2 -0
  479. package/dist/jsx/formEngine/index.native.js.map +1 -1
  480. package/dist/jsx/index.js +16 -4
  481. package/dist/jsx/index.js.map +1 -1
  482. package/dist/jsx/index.mjs +16 -4
  483. package/dist/jsx/index.mjs.map +1 -1
  484. package/dist/jsx/index.native.js +67 -7
  485. package/dist/jsx/index.native.js.map +1 -1
  486. package/dist/jsx/liveErrors.mjs +8 -3
  487. package/dist/jsx/liveErrors.mjs.map +1 -1
  488. package/dist/jsx/liveErrors.native.js +8 -2
  489. package/dist/jsx/liveErrors.native.js.map +1 -1
  490. package/dist/jsx/measures.mjs +5 -0
  491. package/dist/jsx/measures.mjs.map +1 -0
  492. package/dist/jsx/measures.native.js +34 -0
  493. package/dist/jsx/measures.native.js.map +1 -0
  494. package/dist/jsx/recordShape.mjs +74 -0
  495. package/dist/jsx/recordShape.mjs.map +1 -0
  496. package/dist/jsx/recordShape.native.js +115 -0
  497. package/dist/jsx/recordShape.native.js.map +1 -0
  498. package/dist/jsx/report/ReportGrid.mjs +428 -0
  499. package/dist/jsx/report/ReportGrid.mjs.map +1 -0
  500. package/dist/jsx/report/ReportGrid.native.js +510 -0
  501. package/dist/jsx/report/ReportGrid.native.js.map +1 -0
  502. package/dist/jsx/report/ReportViewToolbar.mjs +228 -0
  503. package/dist/jsx/report/ReportViewToolbar.mjs.map +1 -0
  504. package/dist/jsx/report/ReportViewToolbar.native.js +303 -0
  505. package/dist/jsx/report/ReportViewToolbar.native.js.map +1 -0
  506. package/dist/jsx/report/queryReport.mjs +404 -0
  507. package/dist/jsx/report/queryReport.mjs.map +1 -0
  508. package/dist/jsx/report/queryReport.native.js +588 -0
  509. package/dist/jsx/report/queryReport.native.js.map +1 -0
  510. package/dist/jsx/report/queryReportColumns.mjs +105 -0
  511. package/dist/jsx/report/queryReportColumns.mjs.map +1 -0
  512. package/dist/jsx/report/queryReportColumns.native.js +159 -0
  513. package/dist/jsx/report/queryReportColumns.native.js.map +1 -0
  514. package/dist/jsx/report/reportViewModel.mjs +343 -0
  515. package/dist/jsx/report/reportViewModel.mjs.map +1 -0
  516. package/dist/jsx/report/reportViewModel.native.js +657 -0
  517. package/dist/jsx/report/reportViewModel.native.js.map +1 -0
  518. package/dist/jsx/report/savedReports.mjs +112 -0
  519. package/dist/jsx/report/savedReports.mjs.map +1 -0
  520. package/dist/jsx/report/savedReports.native.js +169 -0
  521. package/dist/jsx/report/savedReports.native.js.map +1 -0
  522. package/dist/jsx/report/useFrappeReport.mjs +158 -0
  523. package/dist/jsx/report/useFrappeReport.mjs.map +1 -0
  524. package/dist/jsx/report/useFrappeReport.native.js +214 -0
  525. package/dist/jsx/report/useFrappeReport.native.js.map +1 -0
  526. package/dist/jsx/report/useQueryReport.mjs +176 -0
  527. package/dist/jsx/report/useQueryReport.mjs.map +1 -0
  528. package/dist/jsx/report/useQueryReport.native.js +233 -0
  529. package/dist/jsx/report/useQueryReport.native.js.map +1 -0
  530. package/dist/jsx/useFrappeForm.mjs +533 -0
  531. package/dist/jsx/useFrappeForm.mjs.map +1 -0
  532. package/dist/jsx/useFrappeForm.native.js +714 -0
  533. package/dist/jsx/useFrappeForm.native.js.map +1 -0
  534. package/package.json +16 -16
  535. package/src/FileBrowser/FileBrowser.spec.tsx +21 -0
  536. package/src/FileBrowser/FileBrowser.stories.tsx +27 -0
  537. package/src/FileBrowser/index.tsx +25 -2
  538. package/src/FrappeCalendar.tsx +8 -2
  539. package/src/FrappeForm.stories.tsx +52 -0
  540. package/src/FrappeForm.tsx +176 -565
  541. package/src/FrappeListView.cards.stories.tsx +3 -6
  542. package/src/FrappeListView.tsx +15 -55
  543. package/src/FrappeReportBuilder.stories.tsx +34 -7
  544. package/src/FrappeReportBuilder.tsx +790 -380
  545. package/src/FrappeReportView.spec.tsx +10 -6
  546. package/src/FrappeReportView.stories.tsx +20 -1
  547. package/src/FrappeReportView.tsx +89 -415
  548. package/src/dependsOn.ts +4 -1
  549. package/src/fields/shared/EditorPreviewPanes.tsx +2 -2
  550. package/src/formEngine/docPermissions.spec.ts +36 -1
  551. package/src/formEngine/docPermissions.ts +34 -0
  552. package/src/formEngine/index.ts +8 -1
  553. package/src/frappeRemainder.designLaw.spec.ts +9 -1
  554. package/src/frappeRoutes.spec.tsx +9 -0
  555. package/src/frappeViews.designLaw.spec.ts +15 -2
  556. package/src/guestFallback.spec.tsx +236 -0
  557. package/src/index.ts +117 -16
  558. package/src/liveErrors.spec.ts +10 -0
  559. package/src/liveErrors.ts +16 -3
  560. package/src/measures.ts +11 -0
  561. package/src/recordShape.spec.ts +100 -0
  562. package/src/recordShape.ts +133 -0
  563. package/src/report/ReportGrid.spec.tsx +175 -0
  564. package/src/report/ReportGrid.tsx +530 -0
  565. package/src/report/ReportViewToolbar.spec.tsx +90 -0
  566. package/src/report/ReportViewToolbar.tsx +314 -0
  567. package/src/report/queryReport.spec.ts +483 -0
  568. package/src/report/queryReport.ts +722 -0
  569. package/src/report/queryReportColumns.tsx +123 -0
  570. package/src/report/reportViewModel.spec.ts +393 -0
  571. package/src/report/reportViewModel.ts +617 -0
  572. package/src/report/savedReports.ts +172 -0
  573. package/src/report/seam.spec.ts +216 -0
  574. package/src/report/useFrappeReport.ts +241 -0
  575. package/src/report/useQueryReport.spec.tsx +131 -0
  576. package/src/report/useQueryReport.ts +309 -0
  577. package/src/useFrappeForm.spec.tsx +209 -0
  578. package/src/useFrappeForm.ts +778 -0
  579. package/types/FileBrowser/index.d.ts.map +1 -1
  580. package/types/FrappeCalendar.d.ts.map +1 -1
  581. package/types/FrappeForm.d.ts +21 -1
  582. package/types/FrappeForm.d.ts.map +1 -1
  583. package/types/FrappeListView.d.ts.map +1 -1
  584. package/types/FrappeReportBuilder.d.ts +66 -16
  585. package/types/FrappeReportBuilder.d.ts.map +1 -1
  586. package/types/FrappeReportView.d.ts +9 -127
  587. package/types/FrappeReportView.d.ts.map +1 -1
  588. package/types/dependsOn.d.ts.map +1 -1
  589. package/types/formEngine/docPermissions.d.ts +14 -0
  590. package/types/formEngine/docPermissions.d.ts.map +1 -1
  591. package/types/formEngine/index.d.ts +1 -1
  592. package/types/formEngine/index.d.ts.map +1 -1
  593. package/types/index.d.ts +15 -3
  594. package/types/index.d.ts.map +1 -1
  595. package/types/liveErrors.d.ts +9 -1
  596. package/types/liveErrors.d.ts.map +1 -1
  597. package/types/measures.d.ts +3 -0
  598. package/types/measures.d.ts.map +1 -0
  599. package/types/recordShape.d.ts +45 -0
  600. package/types/recordShape.d.ts.map +1 -0
  601. package/types/report/ReportGrid.d.ts +20 -0
  602. package/types/report/ReportGrid.d.ts.map +1 -0
  603. package/types/report/ReportViewToolbar.d.ts +31 -0
  604. package/types/report/ReportViewToolbar.d.ts.map +1 -0
  605. package/types/report/queryReport.d.ts +181 -0
  606. package/types/report/queryReport.d.ts.map +1 -0
  607. package/types/report/queryReportColumns.d.ts +12 -0
  608. package/types/report/queryReportColumns.d.ts.map +1 -0
  609. package/types/report/reportViewModel.d.ts +146 -0
  610. package/types/report/reportViewModel.d.ts.map +1 -0
  611. package/types/report/savedReports.d.ts +27 -0
  612. package/types/report/savedReports.d.ts.map +1 -0
  613. package/types/report/useFrappeReport.d.ts +60 -0
  614. package/types/report/useFrappeReport.d.ts.map +1 -0
  615. package/types/report/useQueryReport.d.ts +37 -0
  616. package/types/report/useQueryReport.d.ts.map +1 -0
  617. package/types/useFrappeForm.d.ts +142 -0
  618. package/types/useFrappeForm.d.ts.map +1 -0
@@ -0,0 +1,45 @@
1
+ /**
2
+ * A doctype as far as one of its records shows it.
3
+ *
4
+ * DocType meta is permission-gated (Guest gets 403 on getdoctype) while the
5
+ * records themselves are often readable. A data-aware view that cannot read
6
+ * meta still owes the reader the weakest honest rendering of what they may
7
+ * read (LC-96): the record's own fields, labelled from their keys, typed from
8
+ * their values and read-only. These helpers are that shape, shared by every
9
+ * view that falls back to it.
10
+ */
11
+ import { type DocTypeField } from "@multiplatform.one/frappe";
12
+ /** Keys every Frappe record carries that are bookkeeping, not fields of its doctype. */
13
+ export declare const recordBookkeepingKeys: ReadonlySet<string>;
14
+ /**
15
+ * A record's own field keys in the order the server sent them. Bookkeeping
16
+ * keys, the live collection's `$` props ($origin, $key, $collectionId) and
17
+ * non-scalar values (child rows, objects) are dropped.
18
+ */
19
+ export declare function recordFieldKeys(record: Record<string, unknown>): string[];
20
+ /** "base_experience" → "Base Experience", for a key no meta names. */
21
+ export declare function recordKeyLabel(key: string): string;
22
+ /**
23
+ * The record's own fields as read-only doctype fields: Int or Float for a
24
+ * number, Data for anything else.
25
+ */
26
+ export declare function fieldsFromRecord(record: Record<string, unknown>): DocTypeField[];
27
+ export interface RecordShapeConnection {
28
+ baseURL?: string;
29
+ auth?: unknown;
30
+ }
31
+ export interface RecordShape {
32
+ /** The sampled record's fields, once it has been read. */
33
+ fields: DocTypeField[] | undefined;
34
+ /**
35
+ * `idle` when not asked, `pending` while the record is read, `ready` with
36
+ * fields, `unreadable` when the doctype has no record the reader may see.
37
+ */
38
+ status: "idle" | "pending" | "ready" | "unreadable";
39
+ }
40
+ /**
41
+ * Reads one record of `doctype` (`fields: ["*"]`, one row) and returns its
42
+ * fields. Only reads while `enabled`; a view turns it on when meta is refused.
43
+ */
44
+ export declare function useRecordShape(connection: RecordShapeConnection | undefined, doctype: string, enabled: boolean): RecordShape;
45
+ //# sourceMappingURL=recordShape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recordShape.d.ts","sourceRoot":"","sources":["../src/recordShape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAA+B,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAG3F,wFAAwF;AACxF,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAcpD,CAAC;AAMH;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAOzE;AAED,sEAAsE;AACtE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,EAAE,CAUhF;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,0DAA0D;IAC1D,MAAM,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC;IACnC;;;OAGG;IACH,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC;CACrD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,qBAAqB,GAAG,SAAS,EAC7C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,GACf,WAAW,CAwCb"}
@@ -0,0 +1,20 @@
1
+ import { type ReportColumnDef, type ReportGridRow, type ReportSortState, type ReportTotalsCell } from "./reportViewModel";
2
+ export interface ReportGridProps {
3
+ columns: readonly ReportColumnDef[];
4
+ rows: readonly ReportGridRow[];
5
+ sort: ReportSortState;
6
+ onSortChange: (sort: ReportSortState) => void;
7
+ /** Filter-row DRAFT values by fieldname (uncommitted text). */
8
+ columnFilters: Readonly<Record<string, string>>;
9
+ onColumnFilterChange: (fieldname: string, value: string) => void;
10
+ /** Open the row's document form. Absent, rows are not pressable. */
11
+ onOpenRow?: (name: string) => void;
12
+ /** Open a Link cell's target document. */
13
+ onOpenLink?: (doctype: string, name: string) => void;
14
+ /** Totals over the full filtered result — rendered as a bottom row. */
15
+ totals: readonly ReportTotalsCell[];
16
+ /** Group-by column (group header rows span the grid). */
17
+ groupByColumn?: ReportColumnDef;
18
+ }
19
+ export declare function ReportGrid({ columns, rows, sort, onSortChange, columnFilters, onColumnFilterChange, onOpenRow, onOpenLink, totals, groupByColumn, }: ReportGridProps): import("react/jsx-runtime").JSX.Element;
20
+ //# sourceMappingURL=ReportGrid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportGrid.d.ts","sourceRoot":"","sources":["../../src/report/ReportGrid.tsx"],"names":[],"mappings":"AAuBA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,aAAa,EAElB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAgD3B,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;IACpC,IAAI,EAAE,SAAS,aAAa,EAAE,CAAC;IAC/B,IAAI,EAAE,eAAe,CAAC;IACtB,YAAY,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9C,+DAA+D;IAC/D,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,oBAAoB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE,oEAAoE;IACpE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,0CAA0C;IAC1C,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,uEAAuE;IACvE,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACpC,yDAAyD;IACzD,aAAa,CAAC,EAAE,eAAe,CAAC;CACjC;AAgGD,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,SAAS,EACT,UAAU,EACV,MAAM,EACN,aAAa,GACd,EAAE,eAAe,2CAwUjB"}
@@ -0,0 +1,31 @@
1
+ import type { ReportColumnDef, ReportFilters } from "./reportViewModel";
2
+ import type { SavedReportSummary } from "./savedReports";
3
+ export interface ReportViewToolbarProps {
4
+ /** Every pickable column (reportColumnsFromMeta). */
5
+ columns: readonly ReportColumnDef[];
6
+ /** Selected (visible) fieldnames, in render order. */
7
+ selected: readonly string[];
8
+ onToggleColumn: (fieldname: string) => void;
9
+ onResetColumns: () => void;
10
+ groupBy: string | null;
11
+ onGroupByChange: (fieldname: string | null) => void;
12
+ /** Base filters (?f= deep link) — chips with a clear affordance. */
13
+ baseFilters: ReportFilters;
14
+ onClearBaseFilters?: () => void;
15
+ /** Count of active column-row filters (chip + clear-all). */
16
+ columnFilterCount: number;
17
+ onClearColumnFilters: () => void;
18
+ savedReports: readonly SavedReportSummary[];
19
+ /** Selected saved report name (null = unsaved/new). */
20
+ currentReport: string | null;
21
+ onSelectReport: (name: string | null) => void;
22
+ /** Save under a (new or existing) name. Absent, the view saves nothing. */
23
+ onSaveReport?: (name: string) => void;
24
+ /** Absent, a saved report cannot be deleted from here. */
25
+ onDeleteReport?: (name: string) => void;
26
+ /** Absent, the Export button is left out (no download path here). */
27
+ onExport?: () => void;
28
+ exportDisabled?: boolean;
29
+ }
30
+ export declare function ReportViewToolbar({ columns, selected, onToggleColumn, onResetColumns, groupBy, onGroupByChange, baseFilters, onClearBaseFilters, columnFilterCount, onClearColumnFilters, savedReports, currentReport, onSelectReport, onSaveReport, onDeleteReport, onExport, exportDisabled, }: ReportViewToolbarProps): import("react/jsx-runtime").JSX.Element;
31
+ //# sourceMappingURL=ReportViewToolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportViewToolbar.d.ts","sourceRoot":"","sources":["../../src/report/ReportViewToolbar.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,MAAM,WAAW,sBAAsB;IACrC,qDAAqD;IACrD,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;IACpC,sDAAsD;IACtD,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACpD,oEAAoE;IACpE,WAAW,EAAE,aAAa,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,6DAA6D;IAC7D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,IAAI,CAAC;IACjC,YAAY,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC5C,uDAAuD;IACvD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9C,2EAA2E;IAC3E,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,0DAA0D;IAC1D,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,QAAQ,EACR,cAAc,EACd,cAAc,EACd,OAAO,EACP,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,EACZ,aAAa,EACb,cAAc,EACd,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,cAAc,GACf,EAAE,sBAAsB,2CA8OxB"}
@@ -0,0 +1,181 @@
1
+ export interface QueryReportColumn {
2
+ fieldname: string;
3
+ label: string;
4
+ /** Frappe fieldtype ("Link", "Date", "Currency", … or "" when untyped). */
5
+ fieldtype: string;
6
+ /** Link target doctype (fieldtype "Link"). */
7
+ options?: string;
8
+ /** Desk pixel width hint (server sends strings like "90"). */
9
+ width?: number;
10
+ /** Float/Currency decimal places, when the column declares them. */
11
+ precision?: number;
12
+ }
13
+ export type QueryReportRow = Record<string, unknown>;
14
+ export type QueryReportFilters = Record<string, unknown>;
15
+ /**
16
+ * One report filter's declaration — from the Report doc `filters` child
17
+ * table (Report Filter rows) or extracted from the desk-side script module
18
+ * (which spells mandatory as `reqd`; both normalize to `mandatory`).
19
+ */
20
+ export interface QueryReportFilterMeta {
21
+ fieldname: string;
22
+ label?: string;
23
+ fieldtype?: string;
24
+ options?: string;
25
+ /** Script modules declare numeric/boolean defaults; doc rows are strings. */
26
+ default?: string | number;
27
+ mandatory?: 0 | 1;
28
+ /** Desk wraps this filter's value in `%…%` before the run. */
29
+ wildcard_filter?: 0 | 1;
30
+ /** Applied (defaults included) but never rendered — desk parity. */
31
+ hidden?: 0 | 1;
32
+ /**
33
+ * Desk `read_only` — the control renders (so the value is honest) but
34
+ * cannot be edited. Locked filters must not open pickers (LC-21 family:
35
+ * a disabled control opens nothing).
36
+ */
37
+ read_only?: 0 | 1;
38
+ }
39
+ /** Report doc bits the screen cares about (loose — server owns the schema). */
40
+ export interface QueryReportMeta {
41
+ name: string;
42
+ report_name?: string;
43
+ ref_doctype?: string;
44
+ report_type?: string;
45
+ disabled?: 0 | 1;
46
+ prepared_report?: 0 | 1;
47
+ add_total_row?: 0 | 1;
48
+ filters?: QueryReportFilterMeta[];
49
+ [key: string]: unknown;
50
+ }
51
+ /** Static data for stories/tests — skips every bench RPC. */
52
+ export interface QueryReportFixture {
53
+ meta?: Partial<QueryReportMeta>;
54
+ /** Raw column shapes (dicts or "Label:Fieldtype/Options:Width" strings). */
55
+ columns: unknown[];
56
+ /** Raw rows (dicts or positional arrays). */
57
+ rows: unknown[];
58
+ message?: string;
59
+ /** Desk-side script module text (get_script response) for filter extraction. */
60
+ script?: string;
61
+ }
62
+ /**
63
+ * A report filter as a caller or the wire declares it (Report Filter rows,
64
+ * a `filterFields` prop, a fixture's `filters`): flags may be 0/1 or
65
+ * booleans, and a script module spells mandatory `reqd`.
66
+ * `normalizeFilterMeta` turns it into {@link QueryReportFilterMeta}.
67
+ */
68
+ export interface QueryReportFilterInput {
69
+ fieldname: string;
70
+ label?: string;
71
+ fieldtype?: string;
72
+ options?: string | string[];
73
+ default?: unknown;
74
+ mandatory?: number | boolean;
75
+ reqd?: number | boolean;
76
+ wildcard_filter?: number | boolean;
77
+ hidden?: number | boolean;
78
+ read_only?: number | boolean;
79
+ }
80
+ /** Raw `frappe.desk.query_report.run` response body (`message`). */
81
+ export interface QueryReportRunMessage {
82
+ columns?: unknown[];
83
+ result?: unknown[];
84
+ message?: string | string[] | null;
85
+ chart?: unknown;
86
+ report_summary?: unknown;
87
+ add_total_row?: number | boolean;
88
+ skip_total_row?: number | boolean;
89
+ execution_time?: number;
90
+ status?: string | null;
91
+ /**
92
+ * Fixture extension: filter declarations. The live endpoint does not send
93
+ * filters with `run`; fixtures may, so a fixture-backed view gets a filter
94
+ * bar without a second fixture surface.
95
+ */
96
+ filters?: QueryReportFilterInput[];
97
+ }
98
+ /** A normalized run: what a report table renders. */
99
+ export interface QueryReportPayload {
100
+ columns: QueryReportColumn[];
101
+ rows: QueryReportRow[];
102
+ /** Server-side report message (already user-facing). */
103
+ message?: string;
104
+ /** True when the last row is the server-computed total row. */
105
+ addTotalRow: boolean;
106
+ /** Fixture-provided filter declarations (see QueryReportRunMessage). */
107
+ filters?: QueryReportFilterInput[];
108
+ /** The untouched response, for chart / report_summary consumers. */
109
+ raw: QueryReportRunMessage;
110
+ }
111
+ /**
112
+ * The server's `frappe.scrub`: `txt.replace(" ", "_").replace("-", "_").lower()`.
113
+ * A label-only column gets its fieldname this way on the server
114
+ * (`get_column_as_dict`), and the rows are keyed by that fieldname, so the
115
+ * client has to produce the same string, parentheses and slashes included.
116
+ */
117
+ export declare function scrubFieldname(label: string): string;
118
+ /** Best-effort HTML → text for report cell values and server messages. */
119
+ export declare function stripHtml(value: string): string;
120
+ /**
121
+ * Normalize run() columns: v15 sends dicts, older/custom reports may send
122
+ * "Label:Fieldtype/Options:Width" alias strings. Fieldnames are deduped so
123
+ * positional rows always land somewhere addressable.
124
+ */
125
+ export declare function normalizeQueryReportColumns(raw: readonly unknown[] | undefined): QueryReportColumn[];
126
+ /** Normalize run() rows: positional arrays are zipped onto column fieldnames. */
127
+ export declare function normalizeQueryReportRows(raw: readonly unknown[] | undefined, columns: readonly QueryReportColumn[]): QueryReportRow[];
128
+ export declare function normalizeFilterMeta(raw: unknown): QueryReportFilterMeta[];
129
+ export declare function isEmptyFilterValue(value: unknown): boolean;
130
+ /** Drop empty values so a cleared control never reaches the server. */
131
+ export declare function compactFilterValues(values: QueryReportFilters | undefined): QueryReportFilters;
132
+ /** A run response → the columns, rows and message a report table renders. */
133
+ export declare function normalizeQueryReportPayload(raw: QueryReportRunMessage): QueryReportPayload;
134
+ /**
135
+ * Draft/applied values → the dict that round-trips through `?filters=` and
136
+ * `query_report.run`. Empty values drop; hidden filters keep their values
137
+ * so a clear-all on the visible bar does not strip seeded hidden defaults.
138
+ */
139
+ export declare function compactQueryReportFilters(filterMeta: readonly QueryReportFilterMeta[], values: QueryReportFilters): QueryReportFilters;
140
+ /** Seedable default values ("" defaults are non-values, desk parity). */
141
+ export declare function defaultFilterValues(filterMeta: readonly QueryReportFilterMeta[]): QueryReportFilters;
142
+ /**
143
+ * Filter values → the `filters` dict for frappe.desk.query_report.run.
144
+ * Desk parity (query_report.js get_filter_values): falsy values are OMITTED
145
+ * (an unchecked Check or empty input sends nothing), `wildcard_filter`
146
+ * values wrap in `%…%` unless the user typed their own wildcard, and
147
+ * numeric fieldtypes send numbers (script reports do arithmetic on them).
148
+ */
149
+ export declare function buildRunFilters(filterMeta: readonly QueryReportFilterMeta[], filters: QueryReportFilters): QueryReportFilters;
150
+ export interface ScriptFilterExtraction {
151
+ /** True when the module declares a `filters` key (even an empty one). */
152
+ declared: boolean;
153
+ /** Top-level entries the script declares (parseable or not). */
154
+ declaredCount: number;
155
+ /** The renderable (declarative) subset, normalized. */
156
+ filters: QueryReportFilterMeta[];
157
+ }
158
+ /**
159
+ * Extract the declarative filter subset from a desk report script module.
160
+ * Never throws; anything unparseable degrades to a smaller `filters` list
161
+ * (the `declaredCount` delta is the honest gap).
162
+ */
163
+ export declare function extractScriptFilters(script: string | undefined): ScriptFilterExtraction;
164
+ /**
165
+ * A failed report call → an Error whose message is the server's own sentence.
166
+ * The HTTP `status` and frappe `exc_type` ride along, so a caller can still
167
+ * tell a refused run (403 / PermissionError) from a broken one.
168
+ */
169
+ export declare function humanizeFrappeError(err: unknown): Error;
170
+ export type FrappeReportColumn = QueryReportColumn;
171
+ export type FrappeReportRow = QueryReportRow;
172
+ export type FrappeReportValues = QueryReportFilters;
173
+ export type FrappeReportFilterDef = QueryReportFilterInput;
174
+ export type FrappeReportRunResponse = QueryReportRunMessage;
175
+ export type FrappeReportPayload = QueryReportPayload;
176
+ export declare const normalizeReportPayload: typeof normalizeQueryReportPayload;
177
+ /** One column, dict or `"Label:Fieldtype/Options:Width"`, in its normalized shape. */
178
+ export declare function normalizeReportColumn(column: unknown): QueryReportColumn;
179
+ /** `normalizeQueryReportRows` with FrappeReportView's argument order. */
180
+ export declare function normalizeReportRows(columns: readonly QueryReportColumn[], result: readonly unknown[] | undefined): QueryReportRow[];
181
+ //# sourceMappingURL=queryReport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryReport.d.ts","sourceRoot":"","sources":["../../src/report/queryReport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { DataTableColumn } from "@multiplatform.one/table";
2
+ import { type QueryReportColumn, type QueryReportRow } from "./queryReport";
3
+ export interface BuildQueryReportColumnsArgs {
4
+ columns: readonly QueryReportColumn[];
5
+ /** Open a Link cell's target document (doctype comes from column options). */
6
+ onOpenLink?: (doctype: string, name: string) => void;
7
+ }
8
+ /** Build DataTable columns for a query-report run result. */
9
+ export declare function buildQueryReportColumns({ columns, onOpenLink, }: BuildQueryReportColumnsArgs): DataTableColumn<QueryReportRow>[];
10
+ /** CSV over the full run result (Desk Export, not just the current page). */
11
+ export declare function buildQueryReportCsv(columns: readonly QueryReportColumn[], rows: readonly QueryReportRow[]): string;
12
+ //# sourceMappingURL=queryReportColumns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryReportColumns.d.ts","sourceRoot":"","sources":["../../src/report/queryReportColumns.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAa,MAAM,eAAe,CAAC;AAIvF,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACtC,8EAA8E;IAC9E,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACtD;AA0ED,6DAA6D;AAC7D,wBAAgB,uBAAuB,CAAC,EACtC,OAAO,EACP,UAAU,GACX,EAAE,2BAA2B,GAAG,eAAe,CAAC,cAAc,CAAC,EAAE,CAWjE;AAQD,6EAA6E;AAC7E,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,SAAS,iBAAiB,EAAE,EACrC,IAAI,EAAE,SAAS,cAAc,EAAE,GAC9B,MAAM,CAKR"}
@@ -0,0 +1,146 @@
1
+ import { type FilterFieldKind } from "../filterFields";
2
+ import type { DoctypeMeta } from "../formEngine/doctypeMeta";
3
+ import type { FrappeFieldFilter } from "../useConnectionFilters";
4
+ type FrappeFilter = FrappeFieldFilter;
5
+ type FrappeFilters = FrappeFieldFilter[];
6
+ /** The report's filter tuples: `[fieldname, operator, value]`. */
7
+ export type ReportFilters = FrappeFilters;
8
+ /**
9
+ * What the report view reads off a doctype's meta. Only `fields` is
10
+ * required, so a source without DocType meta (the shape of a record the
11
+ * reader can see) stands in for it.
12
+ */
13
+ export type ReportMetaSource = Pick<DoctypeMeta, "fields"> & Partial<Pick<DoctypeMeta, "title_field" | "image_field" | "sort_field" | "sort_order">>;
14
+ export interface ReportColumnDef {
15
+ fieldname: string;
16
+ label: string;
17
+ fieldtype: string;
18
+ kind: FilterFieldKind;
19
+ /** Link target doctype or raw Select options string. */
20
+ options?: string;
21
+ /** Fixed column width (px) — one scrollport, so widths align all rows. */
22
+ width: number;
23
+ align: "left" | "right" | "center";
24
+ }
25
+ export type ReportRow = {
26
+ name: string;
27
+ } & Record<string, unknown>;
28
+ export interface ReportSortState {
29
+ field: string;
30
+ order: "asc" | "desc";
31
+ }
32
+ export declare const REPORT_NUMERIC_FIELDTYPES: Set<string>;
33
+ /** Desk report page lengths. */
34
+ export declare const REPORT_PAGE_SIZES: readonly [20, 100, 500];
35
+ export declare const DEFAULT_REPORT_PAGE_SIZE: number;
36
+ export declare function defaultColumnWidth(fieldtype: string): number;
37
+ export declare function columnAlign(fieldtype: string): ReportColumnDef["align"];
38
+ /**
39
+ * Every column the picker can offer: ID + meta value-type data fields (in
40
+ * meta order, hidden included — desk's picker offers them too) + the
41
+ * remaining standard doc fields.
42
+ */
43
+ export declare function reportColumnsFromMeta(meta?: ReportMetaSource): ReportColumnDef[];
44
+ /**
45
+ * Desk default report columns (report_view.js set_default_fields):
46
+ * name, a `status` docfield when the doctype has one (nearest meta-derivable
47
+ * stand-in for desk's computed Status indicator), title_field + image_field,
48
+ * fields flagged in_list_view OR in_standard_filter (value-type, not
49
+ * report_hide), currency-source fields referenced by flagged Currency
50
+ * columns, then modified (a fresh report should carry recency). Desk's
51
+ * listview_settings.add_fields (e.g. User's "enabled") live in desk-side JS
52
+ * bundles and cannot be derived from the meta channel — honest subset.
53
+ */
54
+ export declare function defaultReportFieldnames(meta?: ReportMetaSource): string[];
55
+ /** Resolve selected fieldnames against the pickable set (drops unknowns). */
56
+ export declare function resolveSelectedColumns(all: ReportColumnDef[], fieldnames: readonly string[]): ReportColumnDef[];
57
+ /**
58
+ * One filter-row input → one frappe tuple (null = no filter yet).
59
+ * Mapping mirrors the list filter vocabulary (filter-fields):
60
+ * text / link → `like %value%` (contains; user-typed % wins)
61
+ * select → `=` on an exact option match (case-insensitive),
62
+ * else `like %value%` so partial typing still narrows
63
+ * check → yes/no/1/0/true/false → `= 1|0`
64
+ * number/date → optional comparison prefix (`>`, `<`, `>=`, `<=`, `!=`,
65
+ * `=`), bare values equal-match (desk operator-hint parity)
66
+ */
67
+ export declare function columnFilterTuple(column: ReportColumnDef, raw: string): FrappeFilter | null;
68
+ /** All committed filter-row inputs → tuples (unparseable inputs skipped). */
69
+ export declare function columnFilterTuples(columns: readonly ReportColumnDef[], filters: Readonly<Record<string, string>>): FrappeFilters;
70
+ /**
71
+ * Parse the `?f=` search param: urlencoded JSON FrappeFilters. The router
72
+ * usually decodes the param already, so the raw value is tried first
73
+ * (same contract as the list screen's parser). Malformed input degrades to
74
+ * "no filters".
75
+ */
76
+ export declare function parseReportFiltersParam(raw: unknown): FrappeFilters | undefined;
77
+ export interface ReportViewConfig {
78
+ fieldnames: string[];
79
+ filters: FrappeFilters;
80
+ sort?: ReportSortState;
81
+ pageSize?: number;
82
+ groupBy?: string | null;
83
+ addTotals?: boolean;
84
+ }
85
+ interface DeskGroupBySettings {
86
+ group_by?: string | null;
87
+ aggregate_function?: string;
88
+ aggregate_on?: string | null;
89
+ }
90
+ export interface DeskReportSettings {
91
+ fields: Array<[string, string]>;
92
+ filters: Array<[string, string, string, unknown]>;
93
+ order_by: string;
94
+ add_totals_row: 0 | 1;
95
+ page_length: number;
96
+ column_widths: Record<string, number>;
97
+ group_by?: DeskGroupBySettings | null;
98
+ }
99
+ /** Parse "`tabUser`.`modified` desc" (or bare "modified desc"). */
100
+ export declare function parseDeskOrderBy(orderBy: unknown): ReportSortState | undefined;
101
+ export declare function toDeskReportSettings(doctype: string, config: ReportViewConfig): DeskReportSettings;
102
+ /**
103
+ * Desk Report json → view config. Child-doctype fields/filters are dropped
104
+ * (this view renders parent fields only — honest subset), legacy plain
105
+ * string field entries are honored.
106
+ */
107
+ export declare function fromDeskReportSettings(doctype: string, json: unknown): ReportViewConfig | undefined;
108
+ export declare function compareCellValues(a: unknown, b: unknown): number;
109
+ /**
110
+ * Deterministic client ordering of the live collection rows (live-query row
111
+ * order is not guaranteed): group field first (when grouping), then the
112
+ * sort field in its direction, name as the final tiebreak.
113
+ */
114
+ export declare function orderReportRows(rows: readonly ReportRow[], sort: ReportSortState, groupBy?: string | null): ReportRow[];
115
+ export interface ReportGroupHeader {
116
+ kind: "group";
117
+ key: string;
118
+ value: unknown;
119
+ /** Rows carrying this value across the FULL filtered result. */
120
+ count: number;
121
+ }
122
+ export interface ReportDataRow {
123
+ kind: "row";
124
+ key: string;
125
+ row: ReportRow;
126
+ /** 1-based position in the full ordered result (row-number column). */
127
+ index: number;
128
+ }
129
+ export type ReportGridRow = ReportGroupHeader | ReportDataRow;
130
+ /**
131
+ * Page slice → grid rows. With grouping active, group headers are injected
132
+ * at value boundaries inside the page; counts cover the full ordered result
133
+ * so a group spanning pages reads honestly.
134
+ */
135
+ export declare function buildGridRows(orderedRows: readonly ReportRow[], pageStart: number, pageSize: number, groupBy?: string | null): ReportGridRow[];
136
+ export interface ReportTotalsCell {
137
+ fieldname: string;
138
+ fieldtype: string;
139
+ value: number;
140
+ }
141
+ /** Sums per visible numeric column over the FULL filtered result. */
142
+ export declare function computeTotals(columns: readonly ReportColumnDef[], rows: readonly ReportRow[]): ReportTotalsCell[];
143
+ /** CSV over the FULL filtered + ordered result (not just the page). */
144
+ export declare function buildReportCsv(columns: readonly ReportColumnDef[], rows: readonly ReportRow[]): string;
145
+ export {};
146
+ //# sourceMappingURL=reportViewModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reportViewModel.d.ts","sourceRoot":"","sources":["../../src/report/reportViewModel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type ReportViewConfig } from "./reportViewModel";
2
+ import { type FrappeReportConnection } from "./useFrappeReport";
3
+ export interface SavedReportSummary {
4
+ /** Report document name (usually equals the report title). */
5
+ name: string;
6
+ reportName: string;
7
+ json?: string;
8
+ }
9
+ export interface UseSavedReportsResult {
10
+ reports: SavedReportSummary[];
11
+ loading: boolean;
12
+ /** Load a saved report's view config (fields/filters/sort/…). */
13
+ load: (name: string) => Promise<ReportViewConfig | undefined>;
14
+ /** Create or update a Report doc; returns the server-side name. */
15
+ save: (name: string, config: ReportViewConfig) => Promise<string>;
16
+ remove: (name: string) => Promise<void>;
17
+ refresh: () => void;
18
+ }
19
+ /**
20
+ * Where saved reports are read and written. Omitted, the ambient
21
+ * FrappeProvider's connection; `fixtures` keeps them in memory.
22
+ */
23
+ export interface SavedReportsConnection extends FrappeReportConnection {
24
+ fixtures?: unknown;
25
+ }
26
+ export declare function useSavedReports(doctype: string, connection?: SavedReportsConnection): UseSavedReportsResult;
27
+ //# sourceMappingURL=savedReports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"savedReports.d.ts","sourceRoot":"","sources":["../../src/report/savedReports.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAc,KAAK,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE5E,MAAM,WAAW,kBAAkB;IACjC,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,iEAAiE;IACjE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;IAC9D,mEAAmE;IACnE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAID;;;GAGG;AACH,MAAM,WAAW,sBAAuB,SAAQ,sBAAsB;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,sBAAsB,GAClC,qBAAqB,CA6HvB"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * The query-report transport: one `frappe.desk.query_report.run` caller per
3
+ * connection, debounced filter changes, the Report's DB-defined filters via
4
+ * `get_script`. FrappeReportView runs on it directly and the desk's
5
+ * `useQueryReport` runs its reports through it, so both surfaces send the
6
+ * same request and read the same normalized payload (MPO-15, GL-28).
7
+ */
8
+ import { CallModule } from "@multiplatform.one/frappe";
9
+ import { type QueryReportFilterInput, type QueryReportFilters, type QueryReportPayload, type QueryReportRunMessage } from "./queryReport";
10
+ /** Fixture payload or loader — renders the report without any network. */
11
+ export type FrappeReportFixture = QueryReportRunMessage | ((args: {
12
+ reportName: string;
13
+ filters: QueryReportFilters;
14
+ }) => QueryReportRunMessage | Promise<QueryReportRunMessage>);
15
+ export interface FrappeReportConnection {
16
+ baseURL: string;
17
+ auth?: {
18
+ useToken?: boolean;
19
+ token?: string | (() => string | Promise<string>);
20
+ type?: string;
21
+ };
22
+ }
23
+ /** The shared caller for a connection (report runs, Report doc reads, get_script). */
24
+ export declare function reportCall(connection: FrappeReportConnection): CallModule;
25
+ export interface UseFrappeReportOptions {
26
+ reportName: string;
27
+ /** Current filter values (already compacted values are fine too). */
28
+ filters?: QueryReportFilters;
29
+ /** Fixture payload / loader — no network is touched when set. */
30
+ fixture?: FrappeReportFixture;
31
+ /**
32
+ * Fetch the report's DB-defined filter definitions (`get_script`).
33
+ * Off when the consumer supplies `filterFields` explicitly.
34
+ */
35
+ fetchFilterDefs?: boolean;
36
+ /** Bypass the prepared-report cache and execute the report now. */
37
+ ignorePreparedReport?: boolean;
38
+ /** Debounce for filter-change refetches in ms (default 400). */
39
+ debounceMs?: number;
40
+ enabled?: boolean;
41
+ }
42
+ export interface UseFrappeReportResult {
43
+ payload: QueryReportPayload | undefined;
44
+ /** DB-defined filter defs (`get_script`); undefined while unknown. */
45
+ scriptFilters: QueryReportFilterInput[] | undefined;
46
+ /** First run in flight — nothing to show yet. */
47
+ isLoading: boolean;
48
+ /** Any run in flight (filter-change / refresh refetches included). */
49
+ isFetching: boolean;
50
+ error: Error | undefined;
51
+ /** Immediate re-run (skips the debounce window). */
52
+ refresh: () => void;
53
+ }
54
+ /**
55
+ * Run a named server-side report (`frappe.desk.query_report.run`) with the
56
+ * given filters. Filter-value changes are debounced; report changes and
57
+ * explicit `refresh()` run immediately.
58
+ */
59
+ export declare function useFrappeReport(connection: FrappeReportConnection | undefined, { reportName, filters, fixture, fetchFilterDefs, ignorePreparedReport, debounceMs, enabled, }: UseFrappeReportOptions): UseFrappeReportResult;
60
+ //# sourceMappingURL=useFrappeReport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFrappeReport.d.ts","sourceRoot":"","sources":["../../src/report/useFrappeReport.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAkB,UAAU,EAA+B,MAAM,2BAA2B,CAAC;AAEpG,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC3B,MAAM,eAAe,CAAC;AAEvB,0EAA0E;AAC1E,MAAM,MAAM,mBAAmB,GAC3B,qBAAqB,GACrB,CAAC,CAAC,IAAI,EAAE;IACN,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,kBAAkB,CAAC;CAC7B,KAAK,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAElE,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAMD,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,UAAU,EAAE,sBAAsB,GAAG,UAAU,CAezE;AAID,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,iEAAiE;IACjE,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mEAAmE;IACnE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACxC,sEAAsE;IACtE,aAAa,EAAE,sBAAsB,EAAE,GAAG,SAAS,CAAC;IACpD,iDAAiD;IACjD,SAAS,EAAE,OAAO,CAAC;IACnB,sEAAsE;IACtE,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,oDAAoD;IACpD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,sBAAsB,GAAG,SAAS,EAC9C,EACE,UAAU,EACV,OAAO,EACP,OAAO,EACP,eAAuB,EACvB,oBAA4B,EAC5B,UAAgC,EAChC,OAAc,GACf,EAAE,sBAAsB,GACxB,qBAAqB,CAsIvB"}
@@ -0,0 +1,37 @@
1
+ import { type QueryReportColumn, type QueryReportFilterMeta, type QueryReportFilters, type QueryReportFixture, type QueryReportMeta, type QueryReportRow } from "./queryReport";
2
+ export interface UseQueryReportOptions {
3
+ fixture?: QueryReportFixture;
4
+ /** Filter values applied before the first run (report swaps re-apply them). */
5
+ initialFilters?: QueryReportFilters;
6
+ }
7
+ export interface UseQueryReportResult {
8
+ meta?: QueryReportMeta;
9
+ columns: QueryReportColumn[];
10
+ rows: QueryReportRow[];
11
+ /** True until the first meta+script+run cycle settles. */
12
+ loading: boolean;
13
+ /** True while a (re)run is in flight. */
14
+ running: boolean;
15
+ /** The failed run's server sentence; `status` and `exc_type` ride along. */
16
+ error?: Error;
17
+ /** The server refused the run: the session may not run this report (LC-96). */
18
+ refused: boolean;
19
+ /** The report's informational `message` payload (may embed HTML). */
20
+ serverMessage?: string;
21
+ /** Server-reported run time in seconds. */
22
+ executionTime?: number;
23
+ /** Merged filter meta: script-declared filters, else doc-level rows. */
24
+ filterMeta: QueryReportFilterMeta[];
25
+ /**
26
+ * True when the desk script declares filters this surface could not
27
+ * derive (non-declarative entries) — the honest "defined in code" note.
28
+ */
29
+ scriptFilterGap: boolean;
30
+ /** Mandatory filters currently unfilled — the run is skipped while non-empty. */
31
+ missingRequired: QueryReportFilterMeta[];
32
+ filters: QueryReportFilters;
33
+ setFilters: (next: QueryReportFilters) => void;
34
+ reload: () => void;
35
+ }
36
+ export declare function useQueryReport(reportName: string, options?: UseQueryReportOptions): UseQueryReportResult;
37
+ //# sourceMappingURL=useQueryReport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQueryReport.d.ts","sourceRoot":"","sources":["../../src/report/useQueryReport.ts"],"names":[],"mappings":"AA0BA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,cAAc,EASpB,MAAM,eAAe,CAAC;AAOvB,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,+EAA+E;IAC/E,cAAc,CAAC,EAAE,kBAAkB,CAAC;CACrC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,0DAA0D;IAC1D,OAAO,EAAE,OAAO,CAAC;IACjB,yCAAyC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,+EAA+E;IAC/E,OAAO,EAAE,OAAO,CAAC;IACjB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,UAAU,EAAE,qBAAqB,EAAE,CAAC;IACpC;;;OAGG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB,iFAAiF;IACjF,eAAe,EAAE,qBAAqB,EAAE,CAAC;IACzC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,UAAU,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC/C,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AA2BD,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,qBAA0B,GAClC,oBAAoB,CAoMtB"}