@multiplatform.one/backoffice 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 (759) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/chrome/BackofficeAwesomebar.native.js +1 -1
  3. package/dist/cjs/chrome/BackofficeAwesomebar.native.js.map +1 -1
  4. package/dist/cjs/chrome/CommandPalette.native.js +1 -1
  5. package/dist/cjs/chrome/CommandPalette.native.js.map +1 -1
  6. package/dist/cjs/chrome/HelpMenu.native.js +1 -1
  7. package/dist/cjs/chrome/HelpMenu.native.js.map +1 -1
  8. package/dist/cjs/chrome/NotificationsButton.native.js +1 -1
  9. package/dist/cjs/chrome/NotificationsButton.native.js.map +1 -1
  10. package/dist/cjs/chrome/UserMenu.native.js +1 -1
  11. package/dist/cjs/chrome/UserMenu.native.js.map +1 -1
  12. package/dist/cjs/chrome/awesomebar-data.native.js.map +1 -1
  13. package/dist/cjs/chrome/command-palette-model.native.js +1 -1
  14. package/dist/cjs/chrome/command-palette-model.native.js.map +1 -1
  15. package/dist/cjs/chrome/help-about-dialog.native.js +1 -1
  16. package/dist/cjs/chrome/help-about-dialog.native.js.map +1 -1
  17. package/dist/cjs/chrome/help-shortcuts-dialog.native.js +1 -1
  18. package/dist/cjs/chrome/help-shortcuts-dialog.native.js.map +1 -1
  19. package/dist/cjs/chrome/notifications-data.native.js.map +1 -1
  20. package/dist/cjs/chrome/notifications-panel.native.js +1 -1
  21. package/dist/cjs/chrome/notifications-panel.native.js.map +1 -1
  22. package/dist/cjs/chrome/notifications-utils.native.js.map +1 -1
  23. package/dist/cjs/chrome/shortcuts.native.js.map +1 -1
  24. package/dist/cjs/chrome/user-session.native.js.map +1 -1
  25. package/dist/cjs/config/BackofficeProvider.native.js +1 -1
  26. package/dist/cjs/config/BackofficeProvider.native.js.map +1 -1
  27. package/dist/cjs/config/capabilities.native.js.map +1 -1
  28. package/dist/cjs/config/events.native.js.map +1 -1
  29. package/dist/cjs/config/slots.native.js.map +1 -1
  30. package/dist/cjs/desk/Desk.native.js.map +1 -1
  31. package/dist/cjs/desk/DeskSurface.native.js.map +1 -1
  32. package/dist/cjs/desk/resolveDeskPath.native.js.map +1 -1
  33. package/dist/cjs/desk/scope.native.js.map +1 -1
  34. package/dist/cjs/desk/target.native.js.map +1 -1
  35. package/dist/cjs/form/DocFormScreen.cjs +167 -224
  36. package/dist/cjs/form/DocFormScreen.native.js +183 -260
  37. package/dist/cjs/form/DocFormScreen.native.js.map +1 -1
  38. package/dist/cjs/form/FormConnections.native.js +1 -1
  39. package/dist/cjs/form/FormConnections.native.js.map +1 -1
  40. package/dist/cjs/form/FormDialogs.native.js +1 -1
  41. package/dist/cjs/form/FormDialogs.native.js.map +1 -1
  42. package/dist/cjs/form/FormErrorBoundary.native.js +1 -1
  43. package/dist/cjs/form/FormErrorBoundary.native.js.map +1 -1
  44. package/dist/cjs/form/FormHeaderCluster.native.js +1 -1
  45. package/dist/cjs/form/FormHeaderCluster.native.js.map +1 -1
  46. package/dist/cjs/form/FormSidebarPanel.native.js +1 -1
  47. package/dist/cjs/form/FormSidebarPanel.native.js.map +1 -1
  48. package/dist/cjs/form/FormTimeline.native.js +1 -1
  49. package/dist/cjs/form/FormTimeline.native.js.map +1 -1
  50. package/dist/cjs/form/FormToolbar.native.js +1 -1
  51. package/dist/cjs/form/FormToolbar.native.js.map +1 -1
  52. package/dist/cjs/form/connections-data.native.js.map +1 -1
  53. package/dist/cjs/form/createPrefill.native.js.map +1 -1
  54. package/dist/cjs/form/dependsOn.native.js.map +1 -1
  55. package/dist/cjs/form/dirtyTracking.native.js.map +1 -1
  56. package/dist/cjs/form/docinfo.native.js.map +1 -1
  57. package/dist/cjs/form/fetchFrom.native.js.map +1 -1
  58. package/dist/cjs/form/fieldPermissions.native.js.map +1 -1
  59. package/dist/cjs/form/formActions.native.js.map +1 -1
  60. package/dist/cjs/form/formLayout.native.js.map +1 -1
  61. package/dist/cjs/form/platformHooks.native.js.map +1 -1
  62. package/dist/cjs/form/sidebar-attachments.native.js +1 -1
  63. package/dist/cjs/form/sidebar-attachments.native.js.map +1 -1
  64. package/dist/cjs/form/sidebar-dialogs.native.js +1 -1
  65. package/dist/cjs/form/sidebar-dialogs.native.js.map +1 -1
  66. package/dist/cjs/form/sidebar-people.native.js +1 -1
  67. package/dist/cjs/form/sidebar-people.native.js.map +1 -1
  68. package/dist/cjs/form/sidebar-rpc.native.js.map +1 -1
  69. package/dist/cjs/form/sidebar-utils.native.js.map +1 -1
  70. package/dist/cjs/form/timeline-entries.native.js.map +1 -1
  71. package/dist/cjs/form/timeline-utils.native.js.map +1 -1
  72. package/dist/cjs/form/useFormEngine.native.js.map +1 -1
  73. package/dist/cjs/i18n/en.cjs +1 -0
  74. package/dist/cjs/i18n/en.native.js +1 -0
  75. package/dist/cjs/i18n/en.native.js.map +1 -1
  76. package/dist/cjs/i18n/index.native.js.map +1 -1
  77. package/dist/cjs/index.native.js +1 -1
  78. package/dist/cjs/index.native.js.map +1 -1
  79. package/dist/cjs/list/AddTagsDialog.native.js +1 -1
  80. package/dist/cjs/list/AddTagsDialog.native.js.map +1 -1
  81. package/dist/cjs/list/AssignToDialog.native.js +1 -1
  82. package/dist/cjs/list/AssignToDialog.native.js.map +1 -1
  83. package/dist/cjs/list/DoctypeListScreen.native.js +1 -1
  84. package/dist/cjs/list/DoctypeListScreen.native.js.map +1 -1
  85. package/dist/cjs/list/ListBulkActionsBar.cjs +30 -18
  86. package/dist/cjs/list/ListBulkActionsBar.native.js +44 -32
  87. package/dist/cjs/list/ListBulkActionsBar.native.js.map +1 -1
  88. package/dist/cjs/list/ListFilterBar.native.js +1 -1
  89. package/dist/cjs/list/ListFilterBar.native.js.map +1 -1
  90. package/dist/cjs/list/ListSidebar.native.js +1 -1
  91. package/dist/cjs/list/ListSidebar.native.js.map +1 -1
  92. package/dist/cjs/list/bulk-edit-dialog.native.js +1 -1
  93. package/dist/cjs/list/bulk-edit-dialog.native.js.map +1 -1
  94. package/dist/cjs/list/bulk-export.native.js.map +1 -1
  95. package/dist/cjs/list/bulk-submit-cancel.native.js.map +1 -1
  96. package/dist/cjs/list/bulkActions.native.js.map +1 -1
  97. package/dist/cjs/list/filter-chips.native.js +1 -1
  98. package/dist/cjs/list/filter-chips.native.js.map +1 -1
  99. package/dist/cjs/list/filter-editor.native.js +1 -1
  100. package/dist/cjs/list/filter-editor.native.js.map +1 -1
  101. package/dist/cjs/list/filter-fields.native.js.map +1 -1
  102. package/dist/cjs/list/filter-saved.native.js +1 -1
  103. package/dist/cjs/list/filter-saved.native.js.map +1 -1
  104. package/dist/cjs/list/filter-sort.native.js +1 -1
  105. package/dist/cjs/list/filter-sort.native.js.map +1 -1
  106. package/dist/cjs/list/filter-standard.native.js.map +1 -1
  107. package/dist/cjs/list/filterConversion.native.js.map +1 -1
  108. package/dist/cjs/list/list-tools-sheet.native.js +1 -1
  109. package/dist/cjs/list/list-tools-sheet.native.js.map +1 -1
  110. package/dist/cjs/list/listColumns.native.js.map +1 -1
  111. package/dist/cjs/list/listFields.native.js.map +1 -1
  112. package/dist/cjs/list/listFormat.native.js.map +1 -1
  113. package/dist/cjs/list/listUrlState.native.js.map +1 -1
  114. package/dist/cjs/list/sidebar-section.cjs +15 -7
  115. package/dist/cjs/list/sidebar-section.native.js +17 -8
  116. package/dist/cjs/list/sidebar-section.native.js.map +1 -1
  117. package/dist/cjs/list/sidebar-stats.native.js.map +1 -1
  118. package/dist/cjs/list/statusColors.native.js.map +1 -1
  119. package/dist/cjs/navigation/navigator.native.js.map +1 -1
  120. package/dist/cjs/navigation/paths.native.js.map +1 -1
  121. package/dist/cjs/oneAdapter/index.native.js.map +1 -1
  122. package/dist/cjs/quickEntry/QuickEntryDialog.native.js +1 -1
  123. package/dist/cjs/quickEntry/QuickEntryDialog.native.js.map +1 -1
  124. package/dist/cjs/quickEntry/quickEntryPlan.native.js.map +1 -1
  125. package/dist/cjs/report/DoctypeReportView.cjs +20 -374
  126. package/dist/cjs/report/DoctypeReportView.native.js +23 -455
  127. package/dist/cjs/report/DoctypeReportView.native.js.map +1 -1
  128. package/dist/cjs/report/QueryReportScreen.cjs +33 -23
  129. package/dist/cjs/report/QueryReportScreen.native.js +34 -24
  130. package/dist/cjs/report/QueryReportScreen.native.js.map +1 -1
  131. package/dist/cjs/report/queryReportColumns.cjs +3 -105
  132. package/dist/cjs/report/queryReportColumns.native.js +2 -129
  133. package/dist/cjs/report/queryReportColumns.native.js.map +1 -1
  134. package/dist/cjs/report/queryReportFilterBar.cjs +3 -4
  135. package/dist/cjs/report/queryReportFilterBar.native.js +4 -5
  136. package/dist/cjs/report/queryReportFilterBar.native.js.map +1 -1
  137. package/dist/cjs/report/queryReportUrlState.cjs +2 -2
  138. package/dist/cjs/report/queryReportUrlState.native.js +2 -2
  139. package/dist/cjs/report/queryReportUrlState.native.js.map +1 -1
  140. package/dist/cjs/report/report-grid.cjs +2 -426
  141. package/dist/cjs/report/report-grid.native.js +1 -479
  142. package/dist/cjs/report/report-grid.native.js.map +1 -1
  143. package/dist/cjs/report/report-toolbar.cjs +2 -228
  144. package/dist/cjs/report/report-toolbar.native.js +1 -274
  145. package/dist/cjs/report/report-toolbar.native.js.map +1 -1
  146. package/dist/cjs/report/reportShapes.cjs +12 -383
  147. package/dist/cjs/report/reportShapes.native.js +12 -501
  148. package/dist/cjs/report/reportShapes.native.js.map +1 -1
  149. package/dist/cjs/report/reportViewModel.cjs +20 -360
  150. package/dist/cjs/report/reportViewModel.native.js +19 -627
  151. package/dist/cjs/report/reportViewModel.native.js.map +1 -1
  152. package/dist/cjs/report/savedReports.cjs +2 -106
  153. package/dist/cjs/report/savedReports.native.js +1 -132
  154. package/dist/cjs/report/savedReports.native.js.map +1 -1
  155. package/dist/cjs/report/useQueryReport.cjs +11 -219
  156. package/dist/cjs/report/useQueryReport.native.js +11 -244
  157. package/dist/cjs/report/useQueryReport.native.js.map +1 -1
  158. package/dist/cjs/shared/deskLinks.native.js.map +1 -1
  159. package/dist/cjs/shared/listNavContext.native.js.map +1 -1
  160. package/dist/cjs/shared/measures.cjs +3 -5
  161. package/dist/cjs/shared/measures.native.js +3 -5
  162. package/dist/cjs/shared/measures.native.js.map +1 -1
  163. package/dist/cjs/shared/types.native.js.map +1 -1
  164. package/dist/cjs/shared/useDocinfo.native.js.map +1 -1
  165. package/dist/cjs/shared/useDoctypeMeta.native.js.map +1 -1
  166. package/dist/cjs/shared/useFrappeApp.native.js.map +1 -1
  167. package/dist/cjs/shared/useRecentVisit.native.js.map +1 -1
  168. package/dist/cjs/shared/useSessionUserId.native.js.map +1 -1
  169. package/dist/cjs/shared/useSlugTarget.native.js.map +1 -1
  170. package/dist/cjs/shared/useUserRoles.native.js.map +1 -1
  171. package/dist/cjs/shell/BackofficeShell.native.js +1 -1
  172. package/dist/cjs/shell/BackofficeShell.native.js.map +1 -1
  173. package/dist/cjs/shell/HomeRedirect.native.js +1 -1
  174. package/dist/cjs/shell/HomeRedirect.native.js.map +1 -1
  175. package/dist/cjs/shell/NotFoundScreen.native.js +1 -1
  176. package/dist/cjs/shell/NotFoundScreen.native.js.map +1 -1
  177. package/dist/cjs/shell/SlugScreen.native.js +1 -1
  178. package/dist/cjs/shell/SlugScreen.native.js.map +1 -1
  179. package/dist/cjs/shell/WorkspaceSidebar.native.js +1 -1
  180. package/dist/cjs/shell/WorkspaceSidebar.native.js.map +1 -1
  181. package/dist/cjs/shell/useWorkspaces.native.js.map +1 -1
  182. package/dist/cjs/shell/workspaceIcons.native.js.map +1 -1
  183. package/dist/cjs/views/CalendarView.native.js +1 -1
  184. package/dist/cjs/views/CalendarView.native.js.map +1 -1
  185. package/dist/cjs/views/DashboardView.native.js +1 -1
  186. package/dist/cjs/views/DashboardView.native.js.map +1 -1
  187. package/dist/cjs/views/DoctypeViewScreen.native.js.map +1 -1
  188. package/dist/cjs/views/ImageView.native.js +1 -1
  189. package/dist/cjs/views/ImageView.native.js.map +1 -1
  190. package/dist/cjs/views/KanbanView.native.js +1 -1
  191. package/dist/cjs/views/KanbanView.native.js.map +1 -1
  192. package/dist/cjs/views/ReportView.cjs +3 -256
  193. package/dist/cjs/views/ReportView.native.js +3 -382
  194. package/dist/cjs/views/ReportView.native.js.map +1 -1
  195. package/dist/cjs/views/TreeView.native.js +1 -1
  196. package/dist/cjs/views/TreeView.native.js.map +1 -1
  197. package/dist/cjs/views/ViewHeader.native.js +1 -1
  198. package/dist/cjs/views/ViewHeader.native.js.map +1 -1
  199. package/dist/cjs/views/ViewStates.native.js +1 -1
  200. package/dist/cjs/views/ViewStates.native.js.map +1 -1
  201. package/dist/cjs/views/ViewSwitcherMenu.native.js +1 -1
  202. package/dist/cjs/views/ViewSwitcherMenu.native.js.map +1 -1
  203. package/dist/cjs/views/calendar-field-selector.native.js +1 -1
  204. package/dist/cjs/views/calendar-field-selector.native.js.map +1 -1
  205. package/dist/cjs/views/connection.native.js.map +1 -1
  206. package/dist/cjs/views/dashboard-data.native.js.map +1 -1
  207. package/dist/cjs/views/deskViewConfigs.native.js.map +1 -1
  208. package/dist/cjs/views/kanban-board-controls.native.js +1 -1
  209. package/dist/cjs/views/kanban-board-controls.native.js.map +1 -1
  210. package/dist/cjs/views/kanban-field-picker.native.js +1 -1
  211. package/dist/cjs/views/kanban-field-picker.native.js.map +1 -1
  212. package/dist/cjs/views/kanbanBoardOps.native.js.map +1 -1
  213. package/dist/cjs/views/report-controls.cjs +6 -6
  214. package/dist/cjs/views/report-controls.native.js +7 -7
  215. package/dist/cjs/views/report-controls.native.js.map +1 -1
  216. package/dist/cjs/views/viewAvailability.native.js.map +1 -1
  217. package/dist/cjs/views/viewMeta.native.js.map +1 -1
  218. package/dist/cjs/workspace/WorkspaceChartBlock.native.js +1 -1
  219. package/dist/cjs/workspace/WorkspaceChartBlock.native.js.map +1 -1
  220. package/dist/cjs/workspace/WorkspaceGrid.native.js.map +1 -1
  221. package/dist/cjs/workspace/WorkspaceLinkCard.native.js +1 -1
  222. package/dist/cjs/workspace/WorkspaceLinkCard.native.js.map +1 -1
  223. package/dist/cjs/workspace/WorkspaceLinkDirectory.native.js +1 -1
  224. package/dist/cjs/workspace/WorkspaceLinkDirectory.native.js.map +1 -1
  225. package/dist/cjs/workspace/WorkspaceNumberCard.native.js +1 -1
  226. package/dist/cjs/workspace/WorkspaceNumberCard.native.js.map +1 -1
  227. package/dist/cjs/workspace/WorkspaceQuickList.native.js +1 -1
  228. package/dist/cjs/workspace/WorkspaceQuickList.native.js.map +1 -1
  229. package/dist/cjs/workspace/WorkspaceRecents.native.js +1 -1
  230. package/dist/cjs/workspace/WorkspaceRecents.native.js.map +1 -1
  231. package/dist/cjs/workspace/WorkspaceScreen.native.js +1 -1
  232. package/dist/cjs/workspace/WorkspaceScreen.native.js.map +1 -1
  233. package/dist/cjs/workspace/WorkspaceShortcut.native.js +1 -1
  234. package/dist/cjs/workspace/WorkspaceShortcut.native.js.map +1 -1
  235. package/dist/cjs/workspace/parseContent.native.js.map +1 -1
  236. package/dist/cjs/workspace/types.native.js.map +1 -1
  237. package/dist/cjs/workspace/useDashboardChart.native.js.map +1 -1
  238. package/dist/cjs/workspace/useWorkspaceDoc.native.js.map +1 -1
  239. package/dist/esm/chrome/BackofficeAwesomebar.native.js.map +1 -1
  240. package/dist/esm/chrome/CommandPalette.native.js.map +1 -1
  241. package/dist/esm/chrome/HelpMenu.native.js.map +1 -1
  242. package/dist/esm/chrome/NotificationsButton.native.js.map +1 -1
  243. package/dist/esm/chrome/UserMenu.native.js.map +1 -1
  244. package/dist/esm/chrome/awesomebar-data.native.js.map +1 -1
  245. package/dist/esm/chrome/command-palette-model.native.js.map +1 -1
  246. package/dist/esm/chrome/help-about-dialog.native.js.map +1 -1
  247. package/dist/esm/chrome/help-shortcuts-dialog.native.js.map +1 -1
  248. package/dist/esm/chrome/notifications-data.native.js.map +1 -1
  249. package/dist/esm/chrome/notifications-panel.native.js.map +1 -1
  250. package/dist/esm/chrome/notifications-utils.native.js.map +1 -1
  251. package/dist/esm/chrome/shortcuts.native.js.map +1 -1
  252. package/dist/esm/chrome/user-session.native.js.map +1 -1
  253. package/dist/esm/config/BackofficeProvider.native.js.map +1 -1
  254. package/dist/esm/config/capabilities.native.js.map +1 -1
  255. package/dist/esm/config/events.native.js.map +1 -1
  256. package/dist/esm/config/slots.native.js.map +1 -1
  257. package/dist/esm/desk/Desk.native.js.map +1 -1
  258. package/dist/esm/desk/DeskSurface.mjs.map +1 -1
  259. package/dist/esm/desk/DeskSurface.native.js.map +1 -1
  260. package/dist/esm/desk/resolveDeskPath.native.js.map +1 -1
  261. package/dist/esm/desk/scope.native.js.map +1 -1
  262. package/dist/esm/desk/target.native.js.map +1 -1
  263. package/dist/esm/form/DocFormScreen.mjs +169 -226
  264. package/dist/esm/form/DocFormScreen.mjs.map +1 -1
  265. package/dist/esm/form/DocFormScreen.native.js +184 -261
  266. package/dist/esm/form/DocFormScreen.native.js.map +1 -1
  267. package/dist/esm/form/FormConnections.native.js.map +1 -1
  268. package/dist/esm/form/FormDialogs.native.js.map +1 -1
  269. package/dist/esm/form/FormErrorBoundary.native.js.map +1 -1
  270. package/dist/esm/form/FormHeaderCluster.native.js.map +1 -1
  271. package/dist/esm/form/FormSidebarPanel.native.js.map +1 -1
  272. package/dist/esm/form/FormTimeline.native.js.map +1 -1
  273. package/dist/esm/form/FormToolbar.native.js.map +1 -1
  274. package/dist/esm/form/connections-data.native.js.map +1 -1
  275. package/dist/esm/form/createPrefill.native.js.map +1 -1
  276. package/dist/esm/form/dependsOn.native.js.map +1 -1
  277. package/dist/esm/form/dirtyTracking.native.js.map +1 -1
  278. package/dist/esm/form/docinfo.native.js.map +1 -1
  279. package/dist/esm/form/fetchFrom.native.js.map +1 -1
  280. package/dist/esm/form/fieldPermissions.native.js.map +1 -1
  281. package/dist/esm/form/formActions.native.js.map +1 -1
  282. package/dist/esm/form/formLayout.native.js.map +1 -1
  283. package/dist/esm/form/platformHooks.native.js.map +1 -1
  284. package/dist/esm/form/sidebar-attachments.native.js.map +1 -1
  285. package/dist/esm/form/sidebar-dialogs.native.js.map +1 -1
  286. package/dist/esm/form/sidebar-people.native.js.map +1 -1
  287. package/dist/esm/form/sidebar-rpc.native.js.map +1 -1
  288. package/dist/esm/form/sidebar-utils.native.js.map +1 -1
  289. package/dist/esm/form/timeline-entries.native.js.map +1 -1
  290. package/dist/esm/form/timeline-utils.native.js.map +1 -1
  291. package/dist/esm/form/useFormEngine.native.js.map +1 -1
  292. package/dist/esm/i18n/en.mjs +1 -0
  293. package/dist/esm/i18n/en.mjs.map +1 -1
  294. package/dist/esm/i18n/en.native.js +1 -0
  295. package/dist/esm/i18n/en.native.js.map +1 -1
  296. package/dist/esm/i18n/index.native.js.map +1 -1
  297. package/dist/esm/index.native.js.map +1 -1
  298. package/dist/esm/list/AddTagsDialog.native.js.map +1 -1
  299. package/dist/esm/list/AssignToDialog.native.js.map +1 -1
  300. package/dist/esm/list/DoctypeListScreen.native.js.map +1 -1
  301. package/dist/esm/list/ListBulkActionsBar.mjs +31 -19
  302. package/dist/esm/list/ListBulkActionsBar.mjs.map +1 -1
  303. package/dist/esm/list/ListBulkActionsBar.native.js +37 -25
  304. package/dist/esm/list/ListBulkActionsBar.native.js.map +1 -1
  305. package/dist/esm/list/ListFilterBar.native.js.map +1 -1
  306. package/dist/esm/list/ListSidebar.native.js.map +1 -1
  307. package/dist/esm/list/bulk-edit-dialog.native.js.map +1 -1
  308. package/dist/esm/list/bulk-export.native.js.map +1 -1
  309. package/dist/esm/list/bulk-submit-cancel.native.js.map +1 -1
  310. package/dist/esm/list/bulkActions.native.js.map +1 -1
  311. package/dist/esm/list/filter-chips.native.js.map +1 -1
  312. package/dist/esm/list/filter-editor.native.js.map +1 -1
  313. package/dist/esm/list/filter-fields.native.js.map +1 -1
  314. package/dist/esm/list/filter-saved.native.js.map +1 -1
  315. package/dist/esm/list/filter-sort.native.js.map +1 -1
  316. package/dist/esm/list/filter-standard.native.js.map +1 -1
  317. package/dist/esm/list/filterConversion.native.js.map +1 -1
  318. package/dist/esm/list/list-tools-sheet.native.js.map +1 -1
  319. package/dist/esm/list/listColumns.native.js.map +1 -1
  320. package/dist/esm/list/listFields.native.js.map +1 -1
  321. package/dist/esm/list/listFormat.native.js.map +1 -1
  322. package/dist/esm/list/listUrlState.native.js.map +1 -1
  323. package/dist/esm/list/sidebar-section.mjs +16 -8
  324. package/dist/esm/list/sidebar-section.mjs.map +1 -1
  325. package/dist/esm/list/sidebar-section.native.js +17 -8
  326. package/dist/esm/list/sidebar-section.native.js.map +1 -1
  327. package/dist/esm/list/sidebar-stats.native.js.map +1 -1
  328. package/dist/esm/list/statusColors.native.js.map +1 -1
  329. package/dist/esm/navigation/navigator.native.js.map +1 -1
  330. package/dist/esm/navigation/paths.native.js.map +1 -1
  331. package/dist/esm/oneAdapter/index.native.js.map +1 -1
  332. package/dist/esm/quickEntry/QuickEntryDialog.native.js.map +1 -1
  333. package/dist/esm/quickEntry/quickEntryPlan.native.js.map +1 -1
  334. package/dist/esm/report/DoctypeReportView.mjs +21 -375
  335. package/dist/esm/report/DoctypeReportView.mjs.map +1 -1
  336. package/dist/esm/report/DoctypeReportView.native.js +24 -456
  337. package/dist/esm/report/DoctypeReportView.native.js.map +1 -1
  338. package/dist/esm/report/QueryReportScreen.mjs +26 -16
  339. package/dist/esm/report/QueryReportScreen.mjs.map +1 -1
  340. package/dist/esm/report/QueryReportScreen.native.js +26 -16
  341. package/dist/esm/report/QueryReportScreen.native.js.map +1 -1
  342. package/dist/esm/report/queryReportColumns.mjs +1 -103
  343. package/dist/esm/report/queryReportColumns.mjs.map +1 -1
  344. package/dist/esm/report/queryReportColumns.native.js +1 -117
  345. package/dist/esm/report/queryReportColumns.native.js.map +1 -1
  346. package/dist/esm/report/queryReportFilterBar.mjs +1 -2
  347. package/dist/esm/report/queryReportFilterBar.mjs.map +1 -1
  348. package/dist/esm/report/queryReportFilterBar.native.js +1 -2
  349. package/dist/esm/report/queryReportFilterBar.native.js.map +1 -1
  350. package/dist/esm/report/queryReportUrlState.mjs +1 -1
  351. package/dist/esm/report/queryReportUrlState.native.js +1 -1
  352. package/dist/esm/report/queryReportUrlState.native.js.map +1 -1
  353. package/dist/esm/report/report-grid.mjs +1 -425
  354. package/dist/esm/report/report-grid.mjs.map +1 -1
  355. package/dist/esm/report/report-grid.native.js +1 -468
  356. package/dist/esm/report/report-grid.native.js.map +1 -1
  357. package/dist/esm/report/report-toolbar.mjs +2 -228
  358. package/dist/esm/report/report-toolbar.mjs.map +1 -1
  359. package/dist/esm/report/report-toolbar.native.js +2 -264
  360. package/dist/esm/report/report-toolbar.native.js.map +1 -1
  361. package/dist/esm/report/reportShapes.mjs +2 -373
  362. package/dist/esm/report/reportShapes.mjs.map +1 -1
  363. package/dist/esm/report/reportShapes.native.js +2 -491
  364. package/dist/esm/report/reportShapes.native.js.map +1 -1
  365. package/dist/esm/report/reportViewModel.mjs +2 -342
  366. package/dist/esm/report/reportViewModel.mjs.map +1 -1
  367. package/dist/esm/report/reportViewModel.native.js +2 -610
  368. package/dist/esm/report/reportViewModel.native.js.map +1 -1
  369. package/dist/esm/report/savedReports.mjs +1 -105
  370. package/dist/esm/report/savedReports.mjs.map +1 -1
  371. package/dist/esm/report/savedReports.native.js +1 -132
  372. package/dist/esm/report/savedReports.native.js.map +1 -1
  373. package/dist/esm/report/useQueryReport.mjs +2 -210
  374. package/dist/esm/report/useQueryReport.mjs.map +1 -1
  375. package/dist/esm/report/useQueryReport.native.js +2 -235
  376. package/dist/esm/report/useQueryReport.native.js.map +1 -1
  377. package/dist/esm/shared/deskLinks.native.js.map +1 -1
  378. package/dist/esm/shared/listNavContext.native.js.map +1 -1
  379. package/dist/esm/shared/measures.mjs +1 -3
  380. package/dist/esm/shared/measures.mjs.map +1 -1
  381. package/dist/esm/shared/measures.native.js +1 -3
  382. package/dist/esm/shared/measures.native.js.map +1 -1
  383. package/dist/esm/shared/types.native.js.map +1 -1
  384. package/dist/esm/shared/useDocinfo.native.js.map +1 -1
  385. package/dist/esm/shared/useDoctypeMeta.native.js.map +1 -1
  386. package/dist/esm/shared/useFrappeApp.native.js.map +1 -1
  387. package/dist/esm/shared/useRecentVisit.native.js.map +1 -1
  388. package/dist/esm/shared/useSessionUserId.native.js.map +1 -1
  389. package/dist/esm/shared/useSlugTarget.native.js.map +1 -1
  390. package/dist/esm/shared/useUserRoles.native.js.map +1 -1
  391. package/dist/esm/shell/BackofficeShell.native.js.map +1 -1
  392. package/dist/esm/shell/HomeRedirect.native.js.map +1 -1
  393. package/dist/esm/shell/NotFoundScreen.native.js.map +1 -1
  394. package/dist/esm/shell/SlugScreen.native.js.map +1 -1
  395. package/dist/esm/shell/WorkspaceSidebar.native.js.map +1 -1
  396. package/dist/esm/shell/useWorkspaces.native.js.map +1 -1
  397. package/dist/esm/shell/workspaceIcons.native.js.map +1 -1
  398. package/dist/esm/views/CalendarView.native.js.map +1 -1
  399. package/dist/esm/views/DashboardView.native.js.map +1 -1
  400. package/dist/esm/views/DoctypeViewScreen.native.js.map +1 -1
  401. package/dist/esm/views/ImageView.native.js.map +1 -1
  402. package/dist/esm/views/KanbanView.native.js.map +1 -1
  403. package/dist/esm/views/ReportView.mjs +3 -256
  404. package/dist/esm/views/ReportView.mjs.map +1 -1
  405. package/dist/esm/views/ReportView.native.js +3 -382
  406. package/dist/esm/views/ReportView.native.js.map +1 -1
  407. package/dist/esm/views/TreeView.native.js.map +1 -1
  408. package/dist/esm/views/ViewHeader.native.js.map +1 -1
  409. package/dist/esm/views/ViewStates.native.js.map +1 -1
  410. package/dist/esm/views/ViewSwitcherMenu.native.js.map +1 -1
  411. package/dist/esm/views/calendar-field-selector.native.js.map +1 -1
  412. package/dist/esm/views/connection.native.js.map +1 -1
  413. package/dist/esm/views/dashboard-data.native.js.map +1 -1
  414. package/dist/esm/views/deskViewConfigs.native.js.map +1 -1
  415. package/dist/esm/views/kanban-board-controls.native.js.map +1 -1
  416. package/dist/esm/views/kanban-field-picker.native.js.map +1 -1
  417. package/dist/esm/views/kanbanBoardOps.native.js.map +1 -1
  418. package/dist/esm/views/report-controls.mjs +3 -3
  419. package/dist/esm/views/report-controls.mjs.map +1 -1
  420. package/dist/esm/views/report-controls.native.js +3 -3
  421. package/dist/esm/views/report-controls.native.js.map +1 -1
  422. package/dist/esm/views/viewAvailability.native.js.map +1 -1
  423. package/dist/esm/views/viewMeta.native.js.map +1 -1
  424. package/dist/esm/workspace/WorkspaceChartBlock.native.js.map +1 -1
  425. package/dist/esm/workspace/WorkspaceGrid.native.js.map +1 -1
  426. package/dist/esm/workspace/WorkspaceLinkCard.native.js.map +1 -1
  427. package/dist/esm/workspace/WorkspaceLinkDirectory.native.js.map +1 -1
  428. package/dist/esm/workspace/WorkspaceNumberCard.native.js.map +1 -1
  429. package/dist/esm/workspace/WorkspaceQuickList.native.js.map +1 -1
  430. package/dist/esm/workspace/WorkspaceRecents.native.js.map +1 -1
  431. package/dist/esm/workspace/WorkspaceScreen.native.js.map +1 -1
  432. package/dist/esm/workspace/WorkspaceShortcut.native.js.map +1 -1
  433. package/dist/esm/workspace/parseContent.native.js.map +1 -1
  434. package/dist/esm/workspace/types.native.js.map +1 -1
  435. package/dist/esm/workspace/useDashboardChart.native.js.map +1 -1
  436. package/dist/esm/workspace/useWorkspaceDoc.native.js.map +1 -1
  437. package/dist/jsx/chrome/BackofficeAwesomebar.native.js +1 -1
  438. package/dist/jsx/chrome/BackofficeAwesomebar.native.js.map +1 -1
  439. package/dist/jsx/chrome/CommandPalette.native.js +1 -1
  440. package/dist/jsx/chrome/CommandPalette.native.js.map +1 -1
  441. package/dist/jsx/chrome/HelpMenu.native.js +1 -1
  442. package/dist/jsx/chrome/HelpMenu.native.js.map +1 -1
  443. package/dist/jsx/chrome/NotificationsButton.native.js +1 -1
  444. package/dist/jsx/chrome/NotificationsButton.native.js.map +1 -1
  445. package/dist/jsx/chrome/UserMenu.native.js +1 -1
  446. package/dist/jsx/chrome/UserMenu.native.js.map +1 -1
  447. package/dist/jsx/chrome/awesomebar-data.native.js.map +1 -1
  448. package/dist/jsx/chrome/command-palette-model.native.js +1 -1
  449. package/dist/jsx/chrome/command-palette-model.native.js.map +1 -1
  450. package/dist/jsx/chrome/help-about-dialog.native.js +1 -1
  451. package/dist/jsx/chrome/help-about-dialog.native.js.map +1 -1
  452. package/dist/jsx/chrome/help-shortcuts-dialog.native.js +1 -1
  453. package/dist/jsx/chrome/help-shortcuts-dialog.native.js.map +1 -1
  454. package/dist/jsx/chrome/notifications-data.native.js.map +1 -1
  455. package/dist/jsx/chrome/notifications-panel.native.js +1 -1
  456. package/dist/jsx/chrome/notifications-panel.native.js.map +1 -1
  457. package/dist/jsx/chrome/notifications-utils.native.js.map +1 -1
  458. package/dist/jsx/chrome/shortcuts.native.js.map +1 -1
  459. package/dist/jsx/chrome/user-session.native.js.map +1 -1
  460. package/dist/jsx/config/BackofficeProvider.native.js +1 -1
  461. package/dist/jsx/config/BackofficeProvider.native.js.map +1 -1
  462. package/dist/jsx/config/capabilities.native.js.map +1 -1
  463. package/dist/jsx/config/events.native.js.map +1 -1
  464. package/dist/jsx/config/slots.native.js.map +1 -1
  465. package/dist/jsx/desk/Desk.native.js.map +1 -1
  466. package/dist/jsx/desk/DeskSurface.mjs.map +1 -1
  467. package/dist/jsx/desk/DeskSurface.native.js.map +1 -1
  468. package/dist/jsx/desk/resolveDeskPath.native.js.map +1 -1
  469. package/dist/jsx/desk/scope.native.js.map +1 -1
  470. package/dist/jsx/desk/target.native.js.map +1 -1
  471. package/dist/jsx/form/DocFormScreen.mjs +169 -226
  472. package/dist/jsx/form/DocFormScreen.mjs.map +1 -1
  473. package/dist/jsx/form/DocFormScreen.native.js +183 -260
  474. package/dist/jsx/form/DocFormScreen.native.js.map +1 -1
  475. package/dist/jsx/form/FormConnections.native.js +1 -1
  476. package/dist/jsx/form/FormConnections.native.js.map +1 -1
  477. package/dist/jsx/form/FormDialogs.native.js +1 -1
  478. package/dist/jsx/form/FormDialogs.native.js.map +1 -1
  479. package/dist/jsx/form/FormErrorBoundary.native.js +1 -1
  480. package/dist/jsx/form/FormErrorBoundary.native.js.map +1 -1
  481. package/dist/jsx/form/FormHeaderCluster.native.js +1 -1
  482. package/dist/jsx/form/FormHeaderCluster.native.js.map +1 -1
  483. package/dist/jsx/form/FormSidebarPanel.native.js +1 -1
  484. package/dist/jsx/form/FormSidebarPanel.native.js.map +1 -1
  485. package/dist/jsx/form/FormTimeline.native.js +1 -1
  486. package/dist/jsx/form/FormTimeline.native.js.map +1 -1
  487. package/dist/jsx/form/FormToolbar.native.js +1 -1
  488. package/dist/jsx/form/FormToolbar.native.js.map +1 -1
  489. package/dist/jsx/form/connections-data.native.js.map +1 -1
  490. package/dist/jsx/form/createPrefill.native.js.map +1 -1
  491. package/dist/jsx/form/dependsOn.native.js.map +1 -1
  492. package/dist/jsx/form/dirtyTracking.native.js.map +1 -1
  493. package/dist/jsx/form/docinfo.native.js.map +1 -1
  494. package/dist/jsx/form/fetchFrom.native.js.map +1 -1
  495. package/dist/jsx/form/fieldPermissions.native.js.map +1 -1
  496. package/dist/jsx/form/formActions.native.js.map +1 -1
  497. package/dist/jsx/form/formLayout.native.js.map +1 -1
  498. package/dist/jsx/form/platformHooks.native.js.map +1 -1
  499. package/dist/jsx/form/sidebar-attachments.native.js +1 -1
  500. package/dist/jsx/form/sidebar-attachments.native.js.map +1 -1
  501. package/dist/jsx/form/sidebar-dialogs.native.js +1 -1
  502. package/dist/jsx/form/sidebar-dialogs.native.js.map +1 -1
  503. package/dist/jsx/form/sidebar-people.native.js +1 -1
  504. package/dist/jsx/form/sidebar-people.native.js.map +1 -1
  505. package/dist/jsx/form/sidebar-rpc.native.js.map +1 -1
  506. package/dist/jsx/form/sidebar-utils.native.js.map +1 -1
  507. package/dist/jsx/form/timeline-entries.native.js.map +1 -1
  508. package/dist/jsx/form/timeline-utils.native.js.map +1 -1
  509. package/dist/jsx/form/useFormEngine.native.js.map +1 -1
  510. package/dist/jsx/i18n/en.mjs +1 -0
  511. package/dist/jsx/i18n/en.mjs.map +1 -1
  512. package/dist/jsx/i18n/en.native.js +1 -0
  513. package/dist/jsx/i18n/en.native.js.map +1 -1
  514. package/dist/jsx/i18n/index.native.js.map +1 -1
  515. package/dist/jsx/index.native.js +1 -1
  516. package/dist/jsx/index.native.js.map +1 -1
  517. package/dist/jsx/list/AddTagsDialog.native.js +1 -1
  518. package/dist/jsx/list/AddTagsDialog.native.js.map +1 -1
  519. package/dist/jsx/list/AssignToDialog.native.js +1 -1
  520. package/dist/jsx/list/AssignToDialog.native.js.map +1 -1
  521. package/dist/jsx/list/DoctypeListScreen.native.js +1 -1
  522. package/dist/jsx/list/DoctypeListScreen.native.js.map +1 -1
  523. package/dist/jsx/list/ListBulkActionsBar.mjs +31 -19
  524. package/dist/jsx/list/ListBulkActionsBar.mjs.map +1 -1
  525. package/dist/jsx/list/ListBulkActionsBar.native.js +44 -32
  526. package/dist/jsx/list/ListBulkActionsBar.native.js.map +1 -1
  527. package/dist/jsx/list/ListFilterBar.native.js +1 -1
  528. package/dist/jsx/list/ListFilterBar.native.js.map +1 -1
  529. package/dist/jsx/list/ListSidebar.native.js +1 -1
  530. package/dist/jsx/list/ListSidebar.native.js.map +1 -1
  531. package/dist/jsx/list/bulk-edit-dialog.native.js +1 -1
  532. package/dist/jsx/list/bulk-edit-dialog.native.js.map +1 -1
  533. package/dist/jsx/list/bulk-export.native.js.map +1 -1
  534. package/dist/jsx/list/bulk-submit-cancel.native.js.map +1 -1
  535. package/dist/jsx/list/bulkActions.native.js.map +1 -1
  536. package/dist/jsx/list/filter-chips.native.js +1 -1
  537. package/dist/jsx/list/filter-chips.native.js.map +1 -1
  538. package/dist/jsx/list/filter-editor.native.js +1 -1
  539. package/dist/jsx/list/filter-editor.native.js.map +1 -1
  540. package/dist/jsx/list/filter-fields.native.js.map +1 -1
  541. package/dist/jsx/list/filter-saved.native.js +1 -1
  542. package/dist/jsx/list/filter-saved.native.js.map +1 -1
  543. package/dist/jsx/list/filter-sort.native.js +1 -1
  544. package/dist/jsx/list/filter-sort.native.js.map +1 -1
  545. package/dist/jsx/list/filter-standard.native.js.map +1 -1
  546. package/dist/jsx/list/filterConversion.native.js.map +1 -1
  547. package/dist/jsx/list/list-tools-sheet.native.js +1 -1
  548. package/dist/jsx/list/list-tools-sheet.native.js.map +1 -1
  549. package/dist/jsx/list/listColumns.native.js.map +1 -1
  550. package/dist/jsx/list/listFields.native.js.map +1 -1
  551. package/dist/jsx/list/listFormat.native.js.map +1 -1
  552. package/dist/jsx/list/listUrlState.native.js.map +1 -1
  553. package/dist/jsx/list/sidebar-section.mjs +16 -8
  554. package/dist/jsx/list/sidebar-section.mjs.map +1 -1
  555. package/dist/jsx/list/sidebar-section.native.js +17 -8
  556. package/dist/jsx/list/sidebar-section.native.js.map +1 -1
  557. package/dist/jsx/list/sidebar-stats.native.js.map +1 -1
  558. package/dist/jsx/list/statusColors.native.js.map +1 -1
  559. package/dist/jsx/navigation/navigator.native.js.map +1 -1
  560. package/dist/jsx/navigation/paths.native.js.map +1 -1
  561. package/dist/jsx/oneAdapter/index.native.js.map +1 -1
  562. package/dist/jsx/quickEntry/QuickEntryDialog.native.js +1 -1
  563. package/dist/jsx/quickEntry/QuickEntryDialog.native.js.map +1 -1
  564. package/dist/jsx/quickEntry/quickEntryPlan.native.js.map +1 -1
  565. package/dist/jsx/report/DoctypeReportView.mjs +21 -375
  566. package/dist/jsx/report/DoctypeReportView.mjs.map +1 -1
  567. package/dist/jsx/report/DoctypeReportView.native.js +23 -455
  568. package/dist/jsx/report/DoctypeReportView.native.js.map +1 -1
  569. package/dist/jsx/report/QueryReportScreen.mjs +26 -16
  570. package/dist/jsx/report/QueryReportScreen.mjs.map +1 -1
  571. package/dist/jsx/report/QueryReportScreen.native.js +34 -24
  572. package/dist/jsx/report/QueryReportScreen.native.js.map +1 -1
  573. package/dist/jsx/report/queryReportColumns.mjs +1 -103
  574. package/dist/jsx/report/queryReportColumns.mjs.map +1 -1
  575. package/dist/jsx/report/queryReportColumns.native.js +2 -129
  576. package/dist/jsx/report/queryReportColumns.native.js.map +1 -1
  577. package/dist/jsx/report/queryReportFilterBar.mjs +1 -2
  578. package/dist/jsx/report/queryReportFilterBar.mjs.map +1 -1
  579. package/dist/jsx/report/queryReportFilterBar.native.js +4 -5
  580. package/dist/jsx/report/queryReportFilterBar.native.js.map +1 -1
  581. package/dist/jsx/report/queryReportUrlState.mjs +1 -1
  582. package/dist/jsx/report/queryReportUrlState.native.js +2 -2
  583. package/dist/jsx/report/queryReportUrlState.native.js.map +1 -1
  584. package/dist/jsx/report/report-grid.mjs +1 -425
  585. package/dist/jsx/report/report-grid.mjs.map +1 -1
  586. package/dist/jsx/report/report-grid.native.js +1 -479
  587. package/dist/jsx/report/report-grid.native.js.map +1 -1
  588. package/dist/jsx/report/report-toolbar.mjs +2 -228
  589. package/dist/jsx/report/report-toolbar.mjs.map +1 -1
  590. package/dist/jsx/report/report-toolbar.native.js +1 -274
  591. package/dist/jsx/report/report-toolbar.native.js.map +1 -1
  592. package/dist/jsx/report/reportShapes.mjs +2 -373
  593. package/dist/jsx/report/reportShapes.mjs.map +1 -1
  594. package/dist/jsx/report/reportShapes.native.js +12 -501
  595. package/dist/jsx/report/reportShapes.native.js.map +1 -1
  596. package/dist/jsx/report/reportViewModel.mjs +2 -342
  597. package/dist/jsx/report/reportViewModel.mjs.map +1 -1
  598. package/dist/jsx/report/reportViewModel.native.js +19 -627
  599. package/dist/jsx/report/reportViewModel.native.js.map +1 -1
  600. package/dist/jsx/report/savedReports.mjs +1 -105
  601. package/dist/jsx/report/savedReports.mjs.map +1 -1
  602. package/dist/jsx/report/savedReports.native.js +1 -132
  603. package/dist/jsx/report/savedReports.native.js.map +1 -1
  604. package/dist/jsx/report/useQueryReport.mjs +2 -210
  605. package/dist/jsx/report/useQueryReport.mjs.map +1 -1
  606. package/dist/jsx/report/useQueryReport.native.js +11 -244
  607. package/dist/jsx/report/useQueryReport.native.js.map +1 -1
  608. package/dist/jsx/shared/deskLinks.native.js.map +1 -1
  609. package/dist/jsx/shared/listNavContext.native.js.map +1 -1
  610. package/dist/jsx/shared/measures.mjs +1 -3
  611. package/dist/jsx/shared/measures.mjs.map +1 -1
  612. package/dist/jsx/shared/measures.native.js +3 -5
  613. package/dist/jsx/shared/measures.native.js.map +1 -1
  614. package/dist/jsx/shared/types.native.js.map +1 -1
  615. package/dist/jsx/shared/useDocinfo.native.js.map +1 -1
  616. package/dist/jsx/shared/useDoctypeMeta.native.js.map +1 -1
  617. package/dist/jsx/shared/useFrappeApp.native.js.map +1 -1
  618. package/dist/jsx/shared/useRecentVisit.native.js.map +1 -1
  619. package/dist/jsx/shared/useSessionUserId.native.js.map +1 -1
  620. package/dist/jsx/shared/useSlugTarget.native.js.map +1 -1
  621. package/dist/jsx/shared/useUserRoles.native.js.map +1 -1
  622. package/dist/jsx/shell/BackofficeShell.native.js +1 -1
  623. package/dist/jsx/shell/BackofficeShell.native.js.map +1 -1
  624. package/dist/jsx/shell/HomeRedirect.native.js +1 -1
  625. package/dist/jsx/shell/HomeRedirect.native.js.map +1 -1
  626. package/dist/jsx/shell/NotFoundScreen.native.js +1 -1
  627. package/dist/jsx/shell/NotFoundScreen.native.js.map +1 -1
  628. package/dist/jsx/shell/SlugScreen.native.js +1 -1
  629. package/dist/jsx/shell/SlugScreen.native.js.map +1 -1
  630. package/dist/jsx/shell/WorkspaceSidebar.native.js +1 -1
  631. package/dist/jsx/shell/WorkspaceSidebar.native.js.map +1 -1
  632. package/dist/jsx/shell/useWorkspaces.native.js.map +1 -1
  633. package/dist/jsx/shell/workspaceIcons.native.js.map +1 -1
  634. package/dist/jsx/views/CalendarView.native.js +1 -1
  635. package/dist/jsx/views/CalendarView.native.js.map +1 -1
  636. package/dist/jsx/views/DashboardView.native.js +1 -1
  637. package/dist/jsx/views/DashboardView.native.js.map +1 -1
  638. package/dist/jsx/views/DoctypeViewScreen.native.js.map +1 -1
  639. package/dist/jsx/views/ImageView.native.js +1 -1
  640. package/dist/jsx/views/ImageView.native.js.map +1 -1
  641. package/dist/jsx/views/KanbanView.native.js +1 -1
  642. package/dist/jsx/views/KanbanView.native.js.map +1 -1
  643. package/dist/jsx/views/ReportView.mjs +3 -256
  644. package/dist/jsx/views/ReportView.mjs.map +1 -1
  645. package/dist/jsx/views/ReportView.native.js +3 -382
  646. package/dist/jsx/views/ReportView.native.js.map +1 -1
  647. package/dist/jsx/views/TreeView.native.js +1 -1
  648. package/dist/jsx/views/TreeView.native.js.map +1 -1
  649. package/dist/jsx/views/ViewHeader.native.js +1 -1
  650. package/dist/jsx/views/ViewHeader.native.js.map +1 -1
  651. package/dist/jsx/views/ViewStates.native.js +1 -1
  652. package/dist/jsx/views/ViewStates.native.js.map +1 -1
  653. package/dist/jsx/views/ViewSwitcherMenu.native.js +1 -1
  654. package/dist/jsx/views/ViewSwitcherMenu.native.js.map +1 -1
  655. package/dist/jsx/views/calendar-field-selector.native.js +1 -1
  656. package/dist/jsx/views/calendar-field-selector.native.js.map +1 -1
  657. package/dist/jsx/views/connection.native.js.map +1 -1
  658. package/dist/jsx/views/dashboard-data.native.js.map +1 -1
  659. package/dist/jsx/views/deskViewConfigs.native.js.map +1 -1
  660. package/dist/jsx/views/kanban-board-controls.native.js +1 -1
  661. package/dist/jsx/views/kanban-board-controls.native.js.map +1 -1
  662. package/dist/jsx/views/kanban-field-picker.native.js +1 -1
  663. package/dist/jsx/views/kanban-field-picker.native.js.map +1 -1
  664. package/dist/jsx/views/kanbanBoardOps.native.js.map +1 -1
  665. package/dist/jsx/views/report-controls.mjs +3 -3
  666. package/dist/jsx/views/report-controls.mjs.map +1 -1
  667. package/dist/jsx/views/report-controls.native.js +7 -7
  668. package/dist/jsx/views/report-controls.native.js.map +1 -1
  669. package/dist/jsx/views/viewAvailability.native.js.map +1 -1
  670. package/dist/jsx/views/viewMeta.native.js.map +1 -1
  671. package/dist/jsx/workspace/WorkspaceChartBlock.native.js +1 -1
  672. package/dist/jsx/workspace/WorkspaceChartBlock.native.js.map +1 -1
  673. package/dist/jsx/workspace/WorkspaceGrid.native.js.map +1 -1
  674. package/dist/jsx/workspace/WorkspaceLinkCard.native.js +1 -1
  675. package/dist/jsx/workspace/WorkspaceLinkCard.native.js.map +1 -1
  676. package/dist/jsx/workspace/WorkspaceLinkDirectory.native.js +1 -1
  677. package/dist/jsx/workspace/WorkspaceLinkDirectory.native.js.map +1 -1
  678. package/dist/jsx/workspace/WorkspaceNumberCard.native.js +1 -1
  679. package/dist/jsx/workspace/WorkspaceNumberCard.native.js.map +1 -1
  680. package/dist/jsx/workspace/WorkspaceQuickList.native.js +1 -1
  681. package/dist/jsx/workspace/WorkspaceQuickList.native.js.map +1 -1
  682. package/dist/jsx/workspace/WorkspaceRecents.native.js +1 -1
  683. package/dist/jsx/workspace/WorkspaceRecents.native.js.map +1 -1
  684. package/dist/jsx/workspace/WorkspaceScreen.native.js +1 -1
  685. package/dist/jsx/workspace/WorkspaceScreen.native.js.map +1 -1
  686. package/dist/jsx/workspace/WorkspaceShortcut.native.js +1 -1
  687. package/dist/jsx/workspace/WorkspaceShortcut.native.js.map +1 -1
  688. package/dist/jsx/workspace/parseContent.native.js.map +1 -1
  689. package/dist/jsx/workspace/types.native.js.map +1 -1
  690. package/dist/jsx/workspace/useDashboardChart.native.js.map +1 -1
  691. package/dist/jsx/workspace/useWorkspaceDoc.native.js.map +1 -1
  692. package/package.json +12 -12
  693. package/src/backofficeScreens.designLaw.spec.ts +0 -5
  694. package/src/desk/DeskSurface.tsx +4 -7
  695. package/src/form/DocFormScreen.chrome.spec.ts +77 -0
  696. package/src/form/DocFormScreen.guest.screen.spec.tsx +175 -0
  697. package/src/form/DocFormScreen.rights.spec.tsx +7 -3
  698. package/src/form/DocFormScreen.tsx +214 -315
  699. package/src/i18n/en.ts +1 -0
  700. package/src/list/ListBulkActionsBar.rights.spec.tsx +134 -0
  701. package/src/list/ListBulkActionsBar.screen.spec.tsx +7 -1
  702. package/src/list/ListBulkActionsBar.tsx +76 -57
  703. package/src/list/ListFilterBar.screen.spec.tsx +14 -13
  704. package/src/list/sidebar-section.tsx +11 -3
  705. package/src/report/DoctypeReportView.tsx +28 -550
  706. package/src/report/QueryReportScreen.spec.tsx +75 -1
  707. package/src/report/QueryReportScreen.tsx +38 -22
  708. package/src/report/queryReportColumns.tsx +4 -123
  709. package/src/report/queryReportFilterBar.tsx +3 -5
  710. package/src/report/queryReportUrlState.ts +1 -1
  711. package/src/report/report-grid.tsx +4 -529
  712. package/src/report/report-toolbar.tsx +4 -308
  713. package/src/report/reportShapes.ts +25 -613
  714. package/src/report/reportShim.spec.ts +162 -0
  715. package/src/report/reportViewModel.ts +32 -605
  716. package/src/report/savedReports.ts +4 -161
  717. package/src/report/useQueryReport.ts +9 -347
  718. package/src/shared/measures.ts +3 -11
  719. package/src/views/ReportView.screen.spec.tsx +25 -20
  720. package/src/views/ReportView.tsx +7 -439
  721. package/src/views/report-controls.tsx +12 -20
  722. package/types/desk/DeskSurface.d.ts.map +1 -1
  723. package/types/form/DocFormScreen.d.ts +2 -2
  724. package/types/form/DocFormScreen.d.ts.map +1 -1
  725. package/types/i18n/en.d.ts +1 -0
  726. package/types/i18n/en.d.ts.map +1 -1
  727. package/types/list/ListBulkActionsBar.d.ts.map +1 -1
  728. package/types/list/sidebar-section.d.ts.map +1 -1
  729. package/types/report/DoctypeReportView.d.ts.map +1 -1
  730. package/types/report/QueryReportScreen.d.ts +1 -1
  731. package/types/report/QueryReportScreen.d.ts.map +1 -1
  732. package/types/report/queryReportColumns.d.ts +2 -11
  733. package/types/report/queryReportColumns.d.ts.map +1 -1
  734. package/types/report/queryReportFilterBar.d.ts +1 -1
  735. package/types/report/queryReportFilterBar.d.ts.map +1 -1
  736. package/types/report/queryReportUrlState.d.ts +1 -1
  737. package/types/report/queryReportUrlState.d.ts.map +1 -1
  738. package/types/report/report-grid.d.ts +2 -19
  739. package/types/report/report-grid.d.ts.map +1 -1
  740. package/types/report/report-toolbar.d.ts +2 -29
  741. package/types/report/report-toolbar.d.ts.map +1 -1
  742. package/types/report/reportShapes.d.ts +2 -115
  743. package/types/report/reportShapes.d.ts.map +1 -1
  744. package/types/report/reportViewModel.d.ts +2 -135
  745. package/types/report/reportViewModel.d.ts.map +1 -1
  746. package/types/report/savedReports.d.ts +2 -18
  747. package/types/report/savedReports.d.ts.map +1 -1
  748. package/types/report/useQueryReport.d.ts +2 -35
  749. package/types/report/useQueryReport.d.ts.map +1 -1
  750. package/types/shared/measures.d.ts +1 -2
  751. package/types/shared/measures.d.ts.map +1 -1
  752. package/types/views/ReportView.d.ts +3 -22
  753. package/types/views/ReportView.d.ts.map +1 -1
  754. package/types/views/report-controls.d.ts +2 -5
  755. package/types/views/report-controls.d.ts.map +1 -1
  756. package/src/report/report-grid.spec.tsx +0 -175
  757. package/src/report/report-toolbar.spec.tsx +0 -90
  758. package/src/report/reportShapes.spec.ts +0 -391
  759. package/src/report/reportViewModel.spec.ts +0 -393
@@ -1,606 +1,33 @@
1
- // Pure model for the doctype REPORT view (desk report-builder parity).
2
- // UI-free on purpose: default-column derivation (desk set_default_fields),
3
- // the per-column filter-row → frappe-tuple mapping (list filter-fields
4
- // vocabulary), desk `report_settings` JSON round-trip (saved Report docs
5
- // desk can open and vice versa), deterministic sort/group/totals over the
6
- // live collection rows, and CSV assembly for export.
7
- import {
8
- fieldKind,
9
- selectOptionsFromField,
10
- type FilterFieldKind,
1
+ // The doctype report-view model lives in @multiplatform.one/frappe-ui
2
+ // (MPO-15, GL-28), where FrappeReportBuilder renders it; this path keeps
3
+ // handing out the same names.
4
+ export {
5
+ buildReportGridRows as buildGridRows,
6
+ buildReportCsv,
7
+ reportColumnAlign as columnAlign,
8
+ reportColumnFilterTuple as columnFilterTuple,
9
+ reportColumnFilterTuples as columnFilterTuples,
10
+ compareReportCellValues as compareCellValues,
11
+ computeReportTotals as computeTotals,
12
+ DEFAULT_REPORT_PAGE_SIZE,
13
+ defaultReportColumnWidth as defaultColumnWidth,
14
+ defaultReportFieldnames,
15
+ fromDeskReportSettings,
16
+ orderReportRows,
17
+ parseDeskOrderBy,
18
+ parseReportFiltersParam,
19
+ REPORT_NUMERIC_FIELDTYPES,
20
+ REPORT_PAGE_SIZES,
21
+ reportColumnsFromMeta,
22
+ resolveReportColumns as resolveSelectedColumns,
23
+ toDeskReportSettings,
24
+ } from "@multiplatform.one/frappe-ui";
25
+ export type {
26
+ DeskReportSettings,
27
+ ReportColumnDef,
28
+ ReportGridRow,
29
+ ReportRow,
30
+ ReportSortState,
31
+ ReportTotalsCell,
32
+ ReportViewConfig,
11
33
  } from "@multiplatform.one/frappe-ui";
12
- import type { FrappeFilter, FrappeFilters } from "../shared/types";
13
- import type { DocFieldMeta, DoctypeMeta } from "../shared/useDoctypeMeta";
14
-
15
- // ── Column model ──────────────────────────────────────────────
16
-
17
- export interface ReportColumnDef {
18
- fieldname: string;
19
- label: string;
20
- fieldtype: string;
21
- kind: FilterFieldKind;
22
- /** Link target doctype or raw Select options string. */
23
- options?: string;
24
- /** Fixed column width (px) — one scrollport, so widths align all rows. */
25
- width: number;
26
- align: "left" | "right" | "center";
27
- }
28
-
29
- export type ReportRow = { name: string } & Record<string, unknown>;
30
-
31
- export interface ReportSortState {
32
- field: string;
33
- order: "asc" | "desc";
34
- }
35
-
36
- /** Field types that can render/sort as report cells (desk is_value_type). */
37
- const VALUELESS_FIELDTYPES = new Set([
38
- "Section Break",
39
- "Column Break",
40
- "Tab Break",
41
- "HTML",
42
- "Table",
43
- "Table MultiSelect",
44
- "Button",
45
- "Image",
46
- "Fold",
47
- "Heading",
48
- ]);
49
-
50
- export const REPORT_NUMERIC_FIELDTYPES = new Set([
51
- "Int",
52
- "Float",
53
- "Currency",
54
- "Percent",
55
- "Rating",
56
- "Duration",
57
- ]);
58
-
59
- const WIDE_FIELDTYPES = new Set([
60
- "Small Text",
61
- "Text",
62
- "Long Text",
63
- "Text Editor",
64
- "Markdown Editor",
65
- "Code",
66
- "JSON",
67
- ]);
68
-
69
- /** Desk report page lengths. */
70
- export const REPORT_PAGE_SIZES = [20, 100, 500] as const;
71
- export const DEFAULT_REPORT_PAGE_SIZE: number = REPORT_PAGE_SIZES[0];
72
-
73
- export function defaultColumnWidth(fieldtype: string): number {
74
- if (fieldtype === "Check") return 90;
75
- if (REPORT_NUMERIC_FIELDTYPES.has(fieldtype)) return 110;
76
- if (fieldtype === "Date") return 120;
77
- if (fieldtype === "Datetime") return 165;
78
- if (WIDE_FIELDTYPES.has(fieldtype)) return 240;
79
- return 160;
80
- }
81
-
82
- export function columnAlign(fieldtype: string): ReportColumnDef["align"] {
83
- if (fieldtype === "Check") return "center";
84
- return REPORT_NUMERIC_FIELDTYPES.has(fieldtype) ? "right" : "left";
85
- }
86
-
87
- function toColumnDef(field: DocFieldMeta): ReportColumnDef {
88
- const fieldtype = String(field.fieldtype);
89
- return {
90
- fieldname: field.fieldname,
91
- label: field.label || field.fieldname,
92
- fieldtype,
93
- kind: fieldKind(fieldtype),
94
- options: field.options,
95
- width: defaultColumnWidth(fieldtype),
96
- align: columnAlign(fieldtype),
97
- };
98
- }
99
-
100
- /** Standard doc fields every doctype carries (absent from meta.fields). */
101
- function standardReportColumns(): ReportColumnDef[] {
102
- return [
103
- {
104
- fieldname: "name",
105
- label: "ID",
106
- fieldtype: "Data",
107
- kind: "text",
108
- width: 160,
109
- align: "left",
110
- },
111
- {
112
- fieldname: "owner",
113
- label: "Created By",
114
- fieldtype: "Link",
115
- kind: "link",
116
- options: "User",
117
- width: 160,
118
- align: "left",
119
- },
120
- {
121
- fieldname: "creation",
122
- label: "Created On",
123
- fieldtype: "Datetime",
124
- kind: "date",
125
- width: 165,
126
- align: "left",
127
- },
128
- {
129
- fieldname: "modified",
130
- label: "Last Updated On",
131
- fieldtype: "Datetime",
132
- kind: "date",
133
- width: 165,
134
- align: "left",
135
- },
136
- {
137
- fieldname: "modified_by",
138
- label: "Last Updated By",
139
- fieldtype: "Link",
140
- kind: "link",
141
- options: "User",
142
- width: 160,
143
- align: "left",
144
- },
145
- ];
146
- }
147
-
148
- /**
149
- * Every column the picker can offer: ID + meta value-type data fields (in
150
- * meta order, hidden included — desk's picker offers them too) + the
151
- * remaining standard doc fields.
152
- */
153
- export function reportColumnsFromMeta(meta?: DoctypeMeta): ReportColumnDef[] {
154
- const out: ReportColumnDef[] = [];
155
- const seen = new Set<string>();
156
- const push = (column: ReportColumnDef) => {
157
- if (!column.fieldname || seen.has(column.fieldname)) return;
158
- seen.add(column.fieldname);
159
- out.push(column);
160
- };
161
- push(standardReportColumns()[0]); // ID first, desk parity
162
- for (const field of meta?.fields ?? []) {
163
- const fieldtype = String(field.fieldtype);
164
- if (VALUELESS_FIELDTYPES.has(fieldtype) || fieldtype.startsWith("Table")) continue;
165
- push(toColumnDef(field));
166
- }
167
- for (const standard of standardReportColumns()) push(standard);
168
- return out;
169
- }
170
-
171
- /**
172
- * Desk default report columns (report_view.js set_default_fields):
173
- * name, a `status` docfield when the doctype has one (nearest meta-derivable
174
- * stand-in for desk's computed Status indicator), title_field + image_field,
175
- * fields flagged in_list_view OR in_standard_filter (value-type, not
176
- * report_hide), currency-source fields referenced by flagged Currency
177
- * columns, then modified (a fresh report should carry recency). Desk's
178
- * listview_settings.add_fields (e.g. User's "enabled") live in desk-side JS
179
- * bundles and cannot be derived from the meta channel — honest subset.
180
- */
181
- export function defaultReportFieldnames(meta?: DoctypeMeta): string[] {
182
- const out: string[] = [];
183
- const seen = new Set<string>();
184
- const push = (fieldname?: string) => {
185
- if (!fieldname || seen.has(fieldname)) return;
186
- seen.add(fieldname);
187
- out.push(fieldname);
188
- };
189
- const pickable = (field: DocFieldMeta): boolean => {
190
- const fieldtype = String(field.fieldtype);
191
- return (
192
- !VALUELESS_FIELDTYPES.has(fieldtype) &&
193
- !fieldtype.startsWith("Table") &&
194
- field.report_hide !== 1
195
- );
196
- };
197
- const fields = meta?.fields ?? [];
198
- push("name");
199
- const status = fields.find((field) => field.fieldname === "status");
200
- if (status && pickable(status)) push("status");
201
- push(meta?.title_field);
202
- push(meta?.image_field);
203
- const flagged = fields.filter(
204
- (field) => pickable(field) && (field.in_list_view === 1 || field.in_standard_filter === 1),
205
- );
206
- for (const field of flagged) push(field.fieldname);
207
- // Desk: a flagged Currency column pulls in the field naming its currency.
208
- for (const field of flagged) {
209
- if (String(field.fieldtype) !== "Currency" || !field.options) continue;
210
- push(field.options.includes(":") ? field.options.split(":")[1] : field.options);
211
- }
212
- push("modified");
213
- return out;
214
- }
215
-
216
- /** Resolve selected fieldnames against the pickable set (drops unknowns). */
217
- export function resolveSelectedColumns(
218
- all: ReportColumnDef[],
219
- fieldnames: readonly string[],
220
- ): ReportColumnDef[] {
221
- const byName = new Map(all.map((column) => [column.fieldname, column]));
222
- const out: ReportColumnDef[] = [];
223
- for (const fieldname of fieldnames) {
224
- const column = byName.get(fieldname);
225
- if (column) out.push(column);
226
- }
227
- return out;
228
- }
229
-
230
- // ── Per-column filter row → frappe tuples ─────────────────────
231
-
232
- const COMPARISON_PREFIXES = [">=", "<=", "!=", ">", "<", "="] as const;
233
-
234
- const CHECK_TRUE = new Set(["1", "true", "yes", "y", "✓"]);
235
- const CHECK_FALSE = new Set(["0", "false", "no", "n"]);
236
-
237
- /**
238
- * One filter-row input → one frappe tuple (null = no filter yet).
239
- * Mapping mirrors the list filter vocabulary (filter-fields):
240
- * text / link → `like %value%` (contains; user-typed % wins)
241
- * select → `=` on an exact option match (case-insensitive),
242
- * else `like %value%` so partial typing still narrows
243
- * check → yes/no/1/0/true/false → `= 1|0`
244
- * number/date → optional comparison prefix (`>`, `<`, `>=`, `<=`, `!=`,
245
- * `=`), bare values equal-match (desk operator-hint parity)
246
- */
247
- export function columnFilterTuple(column: ReportColumnDef, raw: string): FrappeFilter | null {
248
- const text = raw.trim();
249
- if (!text) return null;
250
- switch (column.kind) {
251
- case "check": {
252
- const lowered = text.toLowerCase();
253
- if (CHECK_TRUE.has(lowered)) return [column.fieldname, "=", 1];
254
- if (CHECK_FALSE.has(lowered)) return [column.fieldname, "=", 0];
255
- return null;
256
- }
257
- case "select": {
258
- const match = selectOptionsFromField(column.options).find(
259
- (option) => option.value.toLowerCase() === text.toLowerCase(),
260
- );
261
- if (match) return [column.fieldname, "=", match.value];
262
- return [column.fieldname, "like", text.includes("%") ? text : `%${text}%`];
263
- }
264
- case "number":
265
- case "date": {
266
- for (const prefix of COMPARISON_PREFIXES) {
267
- if (text.startsWith(prefix)) {
268
- const value = text.slice(prefix.length).trim();
269
- return value ? [column.fieldname, prefix, value] : null;
270
- }
271
- }
272
- return [column.fieldname, "=", text];
273
- }
274
- default:
275
- return [column.fieldname, "like", text.includes("%") ? text : `%${text}%`];
276
- }
277
- }
278
-
279
- /** All committed filter-row inputs → tuples (unparseable inputs skipped). */
280
- export function columnFilterTuples(
281
- columns: readonly ReportColumnDef[],
282
- filters: Readonly<Record<string, string>>,
283
- ): FrappeFilters {
284
- const out: FrappeFilters = [];
285
- for (const column of columns) {
286
- const raw = filters[column.fieldname];
287
- if (raw === undefined) continue;
288
- const tuple = columnFilterTuple(column, raw);
289
- if (tuple) out.push(tuple);
290
- }
291
- return out;
292
- }
293
-
294
- // ── `?f=` deep-link param ─────────────────────────────────────
295
-
296
- /**
297
- * Parse the `?f=` search param: urlencoded JSON FrappeFilters. The router
298
- * usually decodes the param already, so the raw value is tried first
299
- * (same contract as the list screen's parser). Malformed input degrades to
300
- * "no filters".
301
- */
302
- export function parseReportFiltersParam(raw: unknown): FrappeFilters | undefined {
303
- if (typeof raw !== "string" || !raw) return undefined;
304
- const candidates = [raw];
305
- try {
306
- const decoded = decodeURIComponent(raw);
307
- if (decoded !== raw) candidates.push(decoded);
308
- } catch {
309
- // raw is not percent-encoded — the direct candidate covers it
310
- }
311
- for (const candidate of candidates) {
312
- try {
313
- const parsed: unknown = JSON.parse(candidate);
314
- if (!Array.isArray(parsed)) continue;
315
- const filters: FrappeFilters = [];
316
- for (const tuple of parsed) {
317
- if (
318
- Array.isArray(tuple) &&
319
- tuple.length === 3 &&
320
- typeof tuple[0] === "string" &&
321
- typeof tuple[1] === "string"
322
- ) {
323
- filters.push([tuple[0], tuple[1], tuple[2]]);
324
- }
325
- }
326
- if (filters.length > 0) return filters;
327
- } catch {
328
- // not JSON — try the next candidate
329
- }
330
- }
331
- return undefined;
332
- }
333
-
334
- // ── Desk saved-report round trip ──────────────────────────────
335
- // Report docs store json = { fields: [fieldname, doctype][], filters:
336
- // [doctype, fieldname, operator, value][], order_by: "`tabX`.`field` desc",
337
- // add_totals_row, page_length, group_by, column_widths, ... }. Serialize
338
- // the same shape so desk opens our reports and we open desk's.
339
-
340
- export interface ReportViewConfig {
341
- fieldnames: string[];
342
- filters: FrappeFilters;
343
- sort?: ReportSortState;
344
- pageSize?: number;
345
- groupBy?: string | null;
346
- addTotals?: boolean;
347
- }
348
-
349
- interface DeskGroupBySettings {
350
- group_by?: string | null;
351
- aggregate_function?: string;
352
- aggregate_on?: string | null;
353
- }
354
-
355
- export interface DeskReportSettings {
356
- fields: Array<[string, string]>;
357
- filters: Array<[string, string, string, unknown]>;
358
- order_by: string;
359
- add_totals_row: 0 | 1;
360
- page_length: number;
361
- column_widths: Record<string, number>;
362
- group_by?: DeskGroupBySettings | null;
363
- }
364
-
365
- const BACKTICK_FIELD_RE = /`tab([^`]+)`\.`([^`]+)`/;
366
-
367
- function toDeskFieldExpr(doctype: string, fieldname: string): string {
368
- return `\`tab${doctype}\`.\`${fieldname}\``;
369
- }
370
-
371
- /** Parse "`tabUser`.`modified` desc" (or bare "modified desc"). */
372
- export function parseDeskOrderBy(orderBy: unknown): ReportSortState | undefined {
373
- if (typeof orderBy !== "string" || !orderBy.trim()) return undefined;
374
- const [expr, direction] = orderBy.trim().split(/\s+/);
375
- const backticked = expr.match(BACKTICK_FIELD_RE);
376
- const field = backticked ? backticked[2] : expr.replace(/`/g, "");
377
- if (!field) return undefined;
378
- return { field, order: direction?.toLowerCase() === "asc" ? "asc" : "desc" };
379
- }
380
-
381
- export function toDeskReportSettings(
382
- doctype: string,
383
- config: ReportViewConfig,
384
- ): DeskReportSettings {
385
- const sort = config.sort ?? { field: "modified", order: "desc" };
386
- return {
387
- fields: config.fieldnames.map((fieldname) => [fieldname, doctype]),
388
- filters: config.filters.map(([fieldname, operator, value]) => [
389
- doctype,
390
- fieldname,
391
- operator,
392
- value,
393
- ]),
394
- order_by: `${toDeskFieldExpr(doctype, sort.field)} ${sort.order}`,
395
- add_totals_row: config.addTotals ? 1 : 0,
396
- page_length: config.pageSize ?? DEFAULT_REPORT_PAGE_SIZE,
397
- column_widths: {},
398
- group_by: config.groupBy
399
- ? {
400
- group_by: toDeskFieldExpr(doctype, config.groupBy),
401
- aggregate_function: "count",
402
- aggregate_on: null,
403
- }
404
- : null,
405
- };
406
- }
407
-
408
- /**
409
- * Desk Report json → view config. Child-doctype fields/filters are dropped
410
- * (this view renders parent fields only — honest subset), legacy plain
411
- * string field entries are honored.
412
- */
413
- export function fromDeskReportSettings(
414
- doctype: string,
415
- json: unknown,
416
- ): ReportViewConfig | undefined {
417
- if (!json || typeof json !== "object") return undefined;
418
- const raw = json as Record<string, unknown>;
419
- const fieldnames: string[] = [];
420
- if (Array.isArray(raw.fields)) {
421
- for (const entry of raw.fields) {
422
- if (typeof entry === "string") {
423
- fieldnames.push(entry);
424
- } else if (Array.isArray(entry) && typeof entry[0] === "string") {
425
- const fieldDoctype = typeof entry[1] === "string" ? entry[1] : doctype;
426
- if (fieldDoctype === doctype) fieldnames.push(entry[0]);
427
- }
428
- }
429
- }
430
- const filters: FrappeFilters = [];
431
- if (Array.isArray(raw.filters)) {
432
- for (const entry of raw.filters) {
433
- if (!Array.isArray(entry)) continue;
434
- if (entry.length === 4) {
435
- const [filterDoctype, fieldname, operator, value] = entry;
436
- if (
437
- filterDoctype === doctype &&
438
- typeof fieldname === "string" &&
439
- typeof operator === "string"
440
- ) {
441
- filters.push([fieldname, operator, value]);
442
- }
443
- } else if (
444
- entry.length === 3 &&
445
- typeof entry[0] === "string" &&
446
- typeof entry[1] === "string"
447
- ) {
448
- filters.push([entry[0], entry[1], entry[2]]);
449
- }
450
- }
451
- }
452
- const groupByRaw = raw.group_by as DeskGroupBySettings | null | undefined;
453
- const groupByExpr = typeof groupByRaw?.group_by === "string" ? groupByRaw.group_by : undefined;
454
- const groupByMatch = groupByExpr?.match(BACKTICK_FIELD_RE);
455
- return {
456
- fieldnames,
457
- filters,
458
- sort: parseDeskOrderBy(raw.order_by),
459
- pageSize:
460
- typeof raw.page_length === "number" && raw.page_length > 0 ? raw.page_length : undefined,
461
- groupBy: groupByMatch ? groupByMatch[2] : null,
462
- addTotals: raw.add_totals_row === 1,
463
- };
464
- }
465
-
466
- // ── Sorting, grouping, totals ─────────────────────────────────
467
-
468
- function isNullish(value: unknown): value is null | undefined {
469
- return value === null || value === undefined;
470
- }
471
-
472
- export function compareCellValues(a: unknown, b: unknown): number {
473
- if (isNullish(a) && isNullish(b)) return 0;
474
- if (isNullish(a)) return 1;
475
- if (isNullish(b)) return -1;
476
- if (typeof a === "number" && typeof b === "number") return a - b;
477
- const left = String(a);
478
- const right = String(b);
479
- return left < right ? -1 : left > right ? 1 : 0;
480
- }
481
-
482
- /**
483
- * Deterministic client ordering of the live collection rows (live-query row
484
- * order is not guaranteed): group field first (when grouping), then the
485
- * sort field in its direction, name as the final tiebreak.
486
- */
487
- export function orderReportRows(
488
- rows: readonly ReportRow[],
489
- sort: ReportSortState,
490
- groupBy?: string | null,
491
- ): ReportRow[] {
492
- const direction = sort.order === "asc" ? 1 : -1;
493
- const sorted = [...rows];
494
- sorted.sort((a, b) => {
495
- if (groupBy) {
496
- const grouped = compareCellValues(a[groupBy], b[groupBy]);
497
- if (grouped !== 0) return grouped;
498
- }
499
- const left = a[sort.field];
500
- const right = b[sort.field];
501
- const ordered =
502
- isNullish(left) || isNullish(right)
503
- ? compareCellValues(left, right)
504
- : direction * compareCellValues(left, right);
505
- return ordered || compareCellValues(a.name, b.name);
506
- });
507
- return sorted;
508
- }
509
-
510
- export interface ReportGroupHeader {
511
- kind: "group";
512
- key: string;
513
- value: unknown;
514
- /** Rows carrying this value across the FULL filtered result. */
515
- count: number;
516
- }
517
-
518
- export interface ReportDataRow {
519
- kind: "row";
520
- key: string;
521
- row: ReportRow;
522
- /** 1-based position in the full ordered result (row-number column). */
523
- index: number;
524
- }
525
-
526
- export type ReportGridRow = ReportGroupHeader | ReportDataRow;
527
-
528
- /**
529
- * Page slice → grid rows. With grouping active, group headers are injected
530
- * at value boundaries inside the page; counts cover the full ordered result
531
- * so a group spanning pages reads honestly.
532
- */
533
- export function buildGridRows(
534
- orderedRows: readonly ReportRow[],
535
- pageStart: number,
536
- pageSize: number,
537
- groupBy?: string | null,
538
- ): ReportGridRow[] {
539
- const page = orderedRows.slice(pageStart, pageStart + pageSize);
540
- const out: ReportGridRow[] = [];
541
- let previousGroup: string | undefined;
542
- const counts = new Map<string, number>();
543
- if (groupBy) {
544
- for (const row of orderedRows) {
545
- const groupKey = String(row[groupBy] ?? "");
546
- counts.set(groupKey, (counts.get(groupKey) ?? 0) + 1);
547
- }
548
- }
549
- page.forEach((row, index) => {
550
- if (groupBy) {
551
- const groupKey = String(row[groupBy] ?? "");
552
- if (previousGroup === undefined || groupKey !== previousGroup) {
553
- previousGroup = groupKey;
554
- out.push({
555
- kind: "group",
556
- key: `group:${groupKey}:${pageStart + index}`,
557
- value: row[groupBy],
558
- count: counts.get(groupKey) ?? 0,
559
- });
560
- }
561
- }
562
- out.push({ kind: "row", key: row.name, row, index: pageStart + index + 1 });
563
- });
564
- return out;
565
- }
566
-
567
- export interface ReportTotalsCell {
568
- fieldname: string;
569
- fieldtype: string;
570
- value: number;
571
- }
572
-
573
- /** Sums per visible numeric column over the FULL filtered result. */
574
- export function computeTotals(
575
- columns: readonly ReportColumnDef[],
576
- rows: readonly ReportRow[],
577
- ): ReportTotalsCell[] {
578
- if (rows.length === 0) return [];
579
- return columns
580
- .filter((column) => REPORT_NUMERIC_FIELDTYPES.has(column.fieldtype))
581
- .map((column) => ({
582
- fieldname: column.fieldname,
583
- fieldtype: column.fieldtype,
584
- value: rows.reduce((sum, row) => sum + (Number(row[column.fieldname]) || 0), 0),
585
- }));
586
- }
587
-
588
- // ── CSV export ────────────────────────────────────────────────
589
-
590
- function escapeCsvCell(value: unknown): string {
591
- if (value === null || value === undefined) return "";
592
- const text = String(value);
593
- return /[",\n]/.test(text) ? `"${text.replace(/"/g, '""')}"` : text;
594
- }
595
-
596
- /** CSV over the FULL filtered + ordered result (not just the page). */
597
- export function buildReportCsv(
598
- columns: readonly ReportColumnDef[],
599
- rows: readonly ReportRow[],
600
- ): string {
601
- const lines = [
602
- columns.map((column) => escapeCsvCell(column.label)).join(","),
603
- ...rows.map((row) => columns.map((column) => escapeCsvCell(row[column.fieldname])).join(",")),
604
- ];
605
- return lines.join("\n");
606
- }