@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,131 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all) __defProp(target, name, {
7
+ get: all[name],
8
+ enumerable: true
9
+ });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
14
+ get: () => from[key],
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ });
17
+ }
18
+ return to;
19
+ };
20
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
21
+ value: true
22
+ }), mod);
23
+ var queryReportColumns_exports = {};
24
+ __export(queryReportColumns_exports, {
25
+ buildQueryReportColumns: () => buildQueryReportColumns,
26
+ buildQueryReportCsv: () => buildQueryReportCsv
27
+ });
28
+ module.exports = __toCommonJS(queryReportColumns_exports);
29
+ var import_components = require("@multiplatform.one/components");
30
+ var import_listFormat = require("../list/listFormat.cjs");
31
+ var import_queryReport = require("./queryReport.cjs");
32
+ var import_jsx_runtime = require("react/jsx-runtime");
33
+ const NUMERIC_FIELDTYPES = /* @__PURE__ */new Set(["Currency", "Float", "Int", "Percent", "Duration"]);
34
+ function queryReportCell(column, onOpenLink) {
35
+ return ({
36
+ getValue
37
+ }) => {
38
+ const raw = getValue();
39
+ if (raw === null || raw === void 0 || raw === "") {
40
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
41
+ fontSize: "$3",
42
+ color: "$color8",
43
+ children: "\u2014"
44
+ });
45
+ }
46
+ if (column.fieldtype === "Check") {
47
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
48
+ fontSize: "$3",
49
+ color: raw ? "$green11" : "$color8",
50
+ children: raw ? "\u2713" : "\u2014"
51
+ });
52
+ }
53
+ const value = String(raw);
54
+ if (NUMERIC_FIELDTYPES.has(column.fieldtype)) {
55
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
56
+ fontSize: "$3",
57
+ color: "$color12",
58
+ textAlign: "right",
59
+ children: value
60
+ });
61
+ }
62
+ switch (column.fieldtype) {
63
+ case "Date":
64
+ case "Datetime":
65
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
66
+ fontSize: "$3",
67
+ color: "$color11",
68
+ children: (0, import_listFormat.formatDateCell)(value)
69
+ });
70
+ case "Link":
71
+ {
72
+ const doctype = column.options;
73
+ if (doctype && onOpenLink) {
74
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
75
+ fontSize: "$3",
76
+ color: "$color11",
77
+ textDecorationLine: "underline",
78
+ cursor: "pointer",
79
+ numberOfLines: 1,
80
+ role: "link",
81
+ onPress: event => {
82
+ event?.stopPropagation?.();
83
+ onOpenLink(doctype, value);
84
+ },
85
+ children: value
86
+ });
87
+ }
88
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
89
+ fontSize: "$3",
90
+ color: "$color11",
91
+ numberOfLines: 1,
92
+ children: value
93
+ });
94
+ }
95
+ default:
96
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
97
+ fontSize: "$3",
98
+ color: "$color11",
99
+ numberOfLines: 1,
100
+ children: (0, import_queryReport.stripHtml)(value)
101
+ });
102
+ }
103
+ };
104
+ }
105
+ function buildQueryReportColumns({
106
+ columns,
107
+ onOpenLink
108
+ }) {
109
+ return columns.map(column => ({
110
+ id: column.fieldname,
111
+ header: column.label,
112
+ // accessorFn (not accessorKey): report fieldnames may contain path-y
113
+ // characters like "assigned_to/owner" that key-based access mangles.
114
+ accessorFn: row => row[column.fieldname],
115
+ ...(NUMERIC_FIELDTYPES.has(column.fieldtype) ? {
116
+ align: "right"
117
+ } : {}),
118
+ ...(column.width ? {
119
+ width: column.width
120
+ } : {}),
121
+ cell: queryReportCell(column, onOpenLink)
122
+ }));
123
+ }
124
+ function escapeCsvCell(value) {
125
+ if (value === null || value === void 0) return "";
126
+ const text = (0, import_queryReport.stripHtml)(String(value));
127
+ return /[",\n]/.test(text) ? `"${text.replace(/"/g, '""')}"` : text;
128
+ }
129
+ function buildQueryReportCsv(columns, rows) {
130
+ return [columns.map(column => escapeCsvCell(column.label)).join(","), ...rows.map(row => columns.map(column => escapeCsvCell(row[column.fieldname])).join(","))].join("\n");
131
+ }
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all) __defProp(target, name, {
11
+ get: all[name],
12
+ enumerable: true
13
+ });
14
+ };
15
+ var __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from === "object" || typeof from === "function") {
17
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
18
+ get: () => from[key],
19
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
20
+ });
21
+ }
22
+ return to;
23
+ };
24
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
25
+ // If the importer is in node compatibility mode or this is not an ESM
26
+ // file that has been converted to a CommonJS file using a Babel-
27
+ // compatible transform (i.e. "__esModule" has not been set), then set
28
+ // "default" to the CommonJS "module.exports" for node compatibility.
29
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
30
+ value: mod,
31
+ enumerable: true
32
+ }) : target, mod));
33
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
34
+ value: true
35
+ }), mod);
36
+ var queryReportColumns_exports = {};
37
+ __export(queryReportColumns_exports, {
38
+ buildQueryReportColumns: () => buildQueryReportColumns,
39
+ buildQueryReportCsv: () => buildQueryReportCsv
40
+ });
41
+ module.exports = __toCommonJS(queryReportColumns_exports);
42
+ var import_jsx_runtime = require("react/jsx-runtime");
43
+ var import_react = __toESM(require("react"));
44
+ var import_components = require("@multiplatform.one/components");
45
+ var import_listFormat = require("../list/listFormat.native.js");
46
+ var import_queryReport = require("./queryReport.native.js");
47
+ var NUMERIC_FIELDTYPES = /* @__PURE__ */new Set(["Currency", "Float", "Int", "Percent", "Duration"]);
48
+ function queryReportCell(column, onOpenLink) {
49
+ return function (param) {
50
+ var {
51
+ getValue
52
+ } = param;
53
+ var raw = getValue();
54
+ if (raw === null || raw === void 0 || raw === "") {
55
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
56
+ fontSize: "$3",
57
+ color: "$color8",
58
+ children: "\u2014"
59
+ });
60
+ }
61
+ if (column.fieldtype === "Check") {
62
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
63
+ fontSize: "$3",
64
+ color: raw ? "$green11" : "$color8",
65
+ children: raw ? "\u2713" : "\u2014"
66
+ });
67
+ }
68
+ var value = String(raw);
69
+ if (NUMERIC_FIELDTYPES.has(column.fieldtype)) {
70
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
71
+ fontSize: "$3",
72
+ color: "$color12",
73
+ textAlign: "right",
74
+ children: value
75
+ });
76
+ }
77
+ switch (column.fieldtype) {
78
+ case "Date":
79
+ case "Datetime":
80
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
81
+ fontSize: "$3",
82
+ color: "$color11",
83
+ children: (0, import_listFormat.formatDateCell)(value)
84
+ });
85
+ case "Link":
86
+ {
87
+ var doctype = column.options;
88
+ if (doctype && onOpenLink) {
89
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
90
+ fontSize: "$3",
91
+ color: "$color11",
92
+ textDecorationLine: "underline",
93
+ cursor: "pointer",
94
+ numberOfLines: 1,
95
+ role: "link",
96
+ onPress: function onPress(event) {
97
+ var _event_stopPropagation;
98
+ event === null || event === void 0 ? void 0 : (_event_stopPropagation = event.stopPropagation) === null || _event_stopPropagation === void 0 ? void 0 : _event_stopPropagation.call(event);
99
+ onOpenLink(doctype, value);
100
+ },
101
+ children: value
102
+ });
103
+ }
104
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
105
+ fontSize: "$3",
106
+ color: "$color11",
107
+ numberOfLines: 1,
108
+ children: value
109
+ });
110
+ }
111
+ default:
112
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
113
+ fontSize: "$3",
114
+ color: "$color11",
115
+ numberOfLines: 1,
116
+ children: (0, import_queryReport.stripHtml)(value)
117
+ });
118
+ }
119
+ };
120
+ }
121
+ function buildQueryReportColumns(param) {
122
+ var {
123
+ columns,
124
+ onOpenLink
125
+ } = param;
126
+ return columns.map(function (column) {
127
+ return {
128
+ id: column.fieldname,
129
+ header: column.label,
130
+ // accessorFn (not accessorKey): report fieldnames may contain path-y
131
+ // characters like "assigned_to/owner" that key-based access mangles.
132
+ accessorFn: function accessorFn(row) {
133
+ return row[column.fieldname];
134
+ },
135
+ ...(NUMERIC_FIELDTYPES.has(column.fieldtype) ? {
136
+ align: "right"
137
+ } : {}),
138
+ ...(column.width ? {
139
+ width: column.width
140
+ } : {}),
141
+ cell: queryReportCell(column, onOpenLink)
142
+ };
143
+ });
144
+ }
145
+ function escapeCsvCell(value) {
146
+ if (value === null || value === void 0) return "";
147
+ var text = (0, import_queryReport.stripHtml)(String(value));
148
+ return /[",\n]/.test(text) ? `"${text.replace(/"/g, '""')}"` : text;
149
+ }
150
+ function buildQueryReportCsv(columns, rows) {
151
+ return [columns.map(function (column) {
152
+ return escapeCsvCell(column.label);
153
+ }).join(","), ...rows.map(function (row) {
154
+ return columns.map(function (column) {
155
+ return escapeCsvCell(row[column.fieldname]);
156
+ }).join(",");
157
+ })].join("\n");
158
+ }
159
+ //# sourceMappingURL=queryReportColumns.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["to","__toESM","mod","isNodeMode","target","__create","__getProtoOf","__copyProps","__esModule","__defProp","value","enumerable","__toCommonJS","queryReportColumns_exports","__export","buildQueryReportColumns","buildQueryReportCsv","module","exports","import_jsx_runtime","require","import_react","import_components","import_listFormat","import_queryReport","NUMERIC_FIELDTYPES","Set","queryReportCell","column","onOpenLink","param","getValue","raw","jsx","Text","fontSize","color","children","fieldtype","String","has","textAlign","formatDateCell","doctype","options","textDecorationLine","cursor","numberOfLines","role","onPress","event","_event_stopPropagation","stopPropagation","call"],"sources":["../../../src/report/queryReportColumns.tsx"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;EAAA,OAAAA,EAAA;AAAA;AAAA,IAAAC,OAAA,GAAAA,CAAAC,GAAA,EAAAC,UAAA,EAAAC,MAAA,MAAAA,MAAA,GAAAF,GAAA,WAAAG,QAAA,CAAAC,YAAA,CAAAJ,GAAA,SAAAK,WAAA;AAAA;AAAA;AAAA;AAKA;AAEAJ,UAAA,KAAAD,GAAA,IAA+B,CAAAA,GAAA,CAAAM,UAAA,GAAAC,SAAA,CAAAL,MAAA;EAAAM,KAAA,EAAAR,GAAA;EAAAS,UAAA;AAAA,KAAAP,MAAA,EAC/BF,GAkBQ;AAhBR,IAAAU,YAAM,GAAAV,GAAA,IAAqBK,WAAA,CAAAE,SAAI,EAAI,CAAC,cAAY;EAAAC,KAAS;AAAO,IAAAR,GAAA;AAQhE,IAAAW,0BACE,GACA;AAEAC,QAAA,CAAOD,0BAA+C;EACpDE,uBAAqB,EAAAA,CAAA,KAAAA,uBAAA;EACrBC,mBAAY,EAAAA,CAAA,KAAQA;AAClB;AAGEC,MAEJ,CAAAC,OAAA,GAAAN,YAAA,CAAAC,0BAAA;AACA,IAAAM,kBAAW,GAAAC,OAAc,oBAAS;AAChC,IAAAC,YACE,GAAApB,OAAA,CAAAmB,OAAA;AAEA,IAEJE,iBAAA,GAAAF,OAAA;AACA,IAAAG,iBAAc,GAAAH,OAAU;AACxB,IAAAI,kBAAI,GAAAJ,OAAuB,0BAAgB;AACzC,IAAAK,kBACE,sBAAAC,GAAA,EAEA,UAEJ,EACA,SAA0B,KACxB,EAAK,SACA,EACH,WAGE;AAGF,SAAAC,eAAgBA,CAAAC,MAAO,EAAAC,UAAA;EACvB,iBAAIC,KAAW;IACb;MAAAC;IACE,IAAAD,KAAA;IAAA,IAAAE,GAAA,GAACD,QAAA;IAAA,IAAAC,GAAA,aAAAA,GAAA,eAAAA,GAAA;MAAA,sBACU,IAAAb,kBAAA,CAAAc,GAAA,EAAAX,iBAAA,CAAAY,IAAA;QAAAC,QACT,MAAM;QAAAC,KAAA,EACN;QAAmBC,QACnB;MAAO;IACQ;IACV,IAAAT,MACL,CAAAU,SAAU,YAAU;MAClB,sBAAO,IAAAnB,kBAAkB,CAAAc,GAAA,EAAAX,iBAAA,CAAAY,IAAA;QACzBC,QAAA;QAAyBC,KAAA,EAC3BJ,GAAA;QAAAK,QAEC,EAAAL,GAAA;MAAA;IAAA;IACH,IAEJtB,KAAA,GAAA6B,MAAA,CAAAP,GAAA;IACA,IAAAP,kBACE,CAAAe,GAAA,CAAAZ,MAAA,CAAAU,SAAA;MAIJ,0BAAAnB,kBAAA,CAAAc,GAAA,EAAAX,iBAAA,CAAAY,IAAA;QACAC,QAAA;QACEC,KAAA,EACE;QAINK,SAAA;QACFJ,QAAA,EAAA3B;MACF;IAGO;IACL,QAAAkB,MAAA,CAAAU,SAAA;MACA;MACiE;QACjE,OAAO,eAAa,IAAYnB,kBAAA,CAAAc,GAAA,EAAAX,iBAAA,CAAAY,IAAA;UAC1BC,QAAO;UACXC,KAAQ,YAAO;UAAAC,QAAA,MAAAd,iBAAA,CAAAmB,cAAA,EAAAhC,KAAA;QAAA;MAGf,WAAa;QAAA;UACT,IAAAiC,OAAA,GAAAf,MAAmB,CAAAgB,OAAI;UACvB,IAAAD,OAAO,IAAQd,UAAS;YACtB,sBAAgB,CAAQ,GAAAV,kBAAU,CAAAc,GAAA,EAAAX,iBAAA,CAAAY,IAAA;cACxCC,QAAA;cACJC,KAAA;cAESS,kBAAsC;cACzCC,MAAU,WAAQ;cAChBC,aAAO;cACNC,IAAA,EAAS,MAAK;cACvBC,OAAA,WAAAA,QAAAC,KAAA;gBAGgB,IAAAC,sBAEd;gBAEOD,KAAA,aAAAA,KAAA,wBAAAC,sBAAA,GAAAD,KAAA,CAAAE,eAAA,cAAAD,sBAAA,uBAAAA,sBAAA,CAAAE,IAAA,CAAAH,KAAA;gBACGrB,UAAK,CAAAc,OAAW,EAAAjC,KAAA;cAChB;cACH2B,QAAI,EAAA3B;YACb","ignoreList":[]}
@@ -0,0 +1,386 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all) __defProp(target, name, {
7
+ get: all[name],
8
+ enumerable: true
9
+ });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
14
+ get: () => from[key],
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ });
17
+ }
18
+ return to;
19
+ };
20
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
21
+ value: true
22
+ }), mod);
23
+ var reportViewModel_exports = {};
24
+ __export(reportViewModel_exports, {
25
+ DEFAULT_REPORT_PAGE_SIZE: () => DEFAULT_REPORT_PAGE_SIZE,
26
+ REPORT_NUMERIC_FIELDTYPES: () => REPORT_NUMERIC_FIELDTYPES,
27
+ REPORT_PAGE_SIZES: () => REPORT_PAGE_SIZES,
28
+ buildGridRows: () => buildGridRows,
29
+ buildReportCsv: () => buildReportCsv,
30
+ columnAlign: () => columnAlign,
31
+ columnFilterTuple: () => columnFilterTuple,
32
+ columnFilterTuples: () => columnFilterTuples,
33
+ compareCellValues: () => compareCellValues,
34
+ computeTotals: () => computeTotals,
35
+ defaultColumnWidth: () => defaultColumnWidth,
36
+ defaultReportFieldnames: () => defaultReportFieldnames,
37
+ fromDeskReportSettings: () => fromDeskReportSettings,
38
+ orderReportRows: () => orderReportRows,
39
+ parseDeskOrderBy: () => parseDeskOrderBy,
40
+ parseReportFiltersParam: () => parseReportFiltersParam,
41
+ reportColumnsFromMeta: () => reportColumnsFromMeta,
42
+ resolveSelectedColumns: () => resolveSelectedColumns,
43
+ toDeskReportSettings: () => toDeskReportSettings
44
+ });
45
+ module.exports = __toCommonJS(reportViewModel_exports);
46
+ var import_filterFields = require("../filterFields.cjs");
47
+ const VALUELESS_FIELDTYPES = /* @__PURE__ */new Set(["Section Break", "Column Break", "Tab Break", "HTML", "Table", "Table MultiSelect", "Button", "Image", "Fold", "Heading"]);
48
+ const REPORT_NUMERIC_FIELDTYPES = /* @__PURE__ */new Set(["Int", "Float", "Currency", "Percent", "Rating", "Duration"]);
49
+ const WIDE_FIELDTYPES = /* @__PURE__ */new Set(["Small Text", "Text", "Long Text", "Text Editor", "Markdown Editor", "Code", "JSON"]);
50
+ const REPORT_PAGE_SIZES = [20, 100, 500];
51
+ const DEFAULT_REPORT_PAGE_SIZE = REPORT_PAGE_SIZES[0];
52
+ function defaultColumnWidth(fieldtype) {
53
+ if (fieldtype === "Check") return 90;
54
+ if (REPORT_NUMERIC_FIELDTYPES.has(fieldtype)) return 110;
55
+ if (fieldtype === "Date") return 120;
56
+ if (fieldtype === "Datetime") return 165;
57
+ if (WIDE_FIELDTYPES.has(fieldtype)) return 240;
58
+ return 160;
59
+ }
60
+ function columnAlign(fieldtype) {
61
+ if (fieldtype === "Check") return "center";
62
+ return REPORT_NUMERIC_FIELDTYPES.has(fieldtype) ? "right" : "left";
63
+ }
64
+ function toColumnDef(field) {
65
+ const fieldtype = String(field.fieldtype);
66
+ return {
67
+ fieldname: field.fieldname,
68
+ label: field.label || field.fieldname,
69
+ fieldtype,
70
+ kind: (0, import_filterFields.fieldKind)(fieldtype),
71
+ options: field.options,
72
+ width: defaultColumnWidth(fieldtype),
73
+ align: columnAlign(fieldtype)
74
+ };
75
+ }
76
+ function standardReportColumns() {
77
+ return [{
78
+ fieldname: "name",
79
+ label: "ID",
80
+ fieldtype: "Data",
81
+ kind: "text",
82
+ width: 160,
83
+ align: "left"
84
+ }, {
85
+ fieldname: "owner",
86
+ label: "Created By",
87
+ fieldtype: "Link",
88
+ kind: "link",
89
+ options: "User",
90
+ width: 160,
91
+ align: "left"
92
+ }, {
93
+ fieldname: "creation",
94
+ label: "Created On",
95
+ fieldtype: "Datetime",
96
+ kind: "date",
97
+ width: 165,
98
+ align: "left"
99
+ }, {
100
+ fieldname: "modified",
101
+ label: "Last Updated On",
102
+ fieldtype: "Datetime",
103
+ kind: "date",
104
+ width: 165,
105
+ align: "left"
106
+ }, {
107
+ fieldname: "modified_by",
108
+ label: "Last Updated By",
109
+ fieldtype: "Link",
110
+ kind: "link",
111
+ options: "User",
112
+ width: 160,
113
+ align: "left"
114
+ }];
115
+ }
116
+ function reportColumnsFromMeta(meta) {
117
+ const out = [];
118
+ const seen = /* @__PURE__ */new Set();
119
+ const push = column => {
120
+ if (!column.fieldname || seen.has(column.fieldname)) return;
121
+ seen.add(column.fieldname);
122
+ out.push(column);
123
+ };
124
+ push(standardReportColumns()[0]);
125
+ for (const field of meta?.fields ?? []) {
126
+ const fieldtype = String(field.fieldtype);
127
+ if (VALUELESS_FIELDTYPES.has(fieldtype) || fieldtype.startsWith("Table")) continue;
128
+ push(toColumnDef(field));
129
+ }
130
+ for (const standard of standardReportColumns()) push(standard);
131
+ return out;
132
+ }
133
+ function defaultReportFieldnames(meta) {
134
+ const out = [];
135
+ const seen = /* @__PURE__ */new Set();
136
+ const push = fieldname => {
137
+ if (!fieldname || seen.has(fieldname)) return;
138
+ seen.add(fieldname);
139
+ out.push(fieldname);
140
+ };
141
+ const pickable = field => {
142
+ const fieldtype = String(field.fieldtype);
143
+ return !VALUELESS_FIELDTYPES.has(fieldtype) && !fieldtype.startsWith("Table") && field.report_hide !== 1;
144
+ };
145
+ const fields = meta?.fields ?? [];
146
+ push("name");
147
+ const status = fields.find(field => field.fieldname === "status");
148
+ if (status && pickable(status)) push("status");
149
+ push(meta?.title_field);
150
+ push(meta?.image_field);
151
+ const flagged = fields.filter(field => pickable(field) && (field.in_list_view === 1 || field.in_standard_filter === 1));
152
+ for (const field of flagged) push(field.fieldname);
153
+ for (const field of flagged) {
154
+ if (String(field.fieldtype) !== "Currency" || !field.options) continue;
155
+ push(field.options.includes(":") ? field.options.split(":")[1] : field.options);
156
+ }
157
+ push("modified");
158
+ return out;
159
+ }
160
+ function resolveSelectedColumns(all, fieldnames) {
161
+ const byName = new Map(all.map(column => [column.fieldname, column]));
162
+ const out = [];
163
+ for (const fieldname of fieldnames) {
164
+ const column = byName.get(fieldname);
165
+ if (column) out.push(column);
166
+ }
167
+ return out;
168
+ }
169
+ const COMPARISON_PREFIXES = [">=", "<=", "!=", ">", "<", "="];
170
+ const CHECK_TRUE = /* @__PURE__ */new Set(["1", "true", "yes", "y", "\u2713"]);
171
+ const CHECK_FALSE = /* @__PURE__ */new Set(["0", "false", "no", "n"]);
172
+ function columnFilterTuple(column, raw) {
173
+ const text = raw.trim();
174
+ if (!text) return null;
175
+ switch (column.kind) {
176
+ case "check":
177
+ {
178
+ const lowered = text.toLowerCase();
179
+ if (CHECK_TRUE.has(lowered)) return [column.fieldname, "=", 1];
180
+ if (CHECK_FALSE.has(lowered)) return [column.fieldname, "=", 0];
181
+ return null;
182
+ }
183
+ case "select":
184
+ {
185
+ const match = (0, import_filterFields.selectOptionsFromField)(column.options).find(option => option.value.toLowerCase() === text.toLowerCase());
186
+ if (match) return [column.fieldname, "=", match.value];
187
+ return [column.fieldname, "like", text.includes("%") ? text : `%${text}%`];
188
+ }
189
+ case "number":
190
+ case "date":
191
+ {
192
+ for (const prefix of COMPARISON_PREFIXES) {
193
+ if (text.startsWith(prefix)) {
194
+ const value = text.slice(prefix.length).trim();
195
+ return value ? [column.fieldname, prefix, value] : null;
196
+ }
197
+ }
198
+ return [column.fieldname, "=", text];
199
+ }
200
+ default:
201
+ return [column.fieldname, "like", text.includes("%") ? text : `%${text}%`];
202
+ }
203
+ }
204
+ function columnFilterTuples(columns, filters) {
205
+ const out = [];
206
+ for (const column of columns) {
207
+ const raw = filters[column.fieldname];
208
+ if (raw === void 0) continue;
209
+ const tuple = columnFilterTuple(column, raw);
210
+ if (tuple) out.push(tuple);
211
+ }
212
+ return out;
213
+ }
214
+ function parseReportFiltersParam(raw) {
215
+ if (typeof raw !== "string" || !raw) return void 0;
216
+ const candidates = [raw];
217
+ try {
218
+ const decoded = decodeURIComponent(raw);
219
+ if (decoded !== raw) candidates.push(decoded);
220
+ } catch {}
221
+ for (const candidate of candidates) {
222
+ try {
223
+ const parsed = JSON.parse(candidate);
224
+ if (!Array.isArray(parsed)) continue;
225
+ const filters = [];
226
+ for (const tuple of parsed) {
227
+ if (Array.isArray(tuple) && tuple.length === 3 && typeof tuple[0] === "string" && typeof tuple[1] === "string") {
228
+ filters.push([tuple[0], tuple[1], tuple[2]]);
229
+ }
230
+ }
231
+ if (filters.length > 0) return filters;
232
+ } catch {}
233
+ }
234
+ return void 0;
235
+ }
236
+ const BACKTICK_FIELD_RE = /`tab([^`]+)`\.`([^`]+)`/;
237
+ function toDeskFieldExpr(doctype, fieldname) {
238
+ return `\`tab${doctype}\`.\`${fieldname}\``;
239
+ }
240
+ function parseDeskOrderBy(orderBy) {
241
+ if (typeof orderBy !== "string" || !orderBy.trim()) return void 0;
242
+ const [expr, direction] = orderBy.trim().split(/\s+/);
243
+ const backticked = expr.match(BACKTICK_FIELD_RE);
244
+ const field = backticked ? backticked[2] : expr.replace(/`/g, "");
245
+ if (!field) return void 0;
246
+ return {
247
+ field,
248
+ order: direction?.toLowerCase() === "asc" ? "asc" : "desc"
249
+ };
250
+ }
251
+ function toDeskReportSettings(doctype, config) {
252
+ const sort = config.sort ?? {
253
+ field: "modified",
254
+ order: "desc"
255
+ };
256
+ return {
257
+ fields: config.fieldnames.map(fieldname => [fieldname, doctype]),
258
+ filters: config.filters.map(([fieldname, operator, value]) => [doctype, fieldname, operator, value]),
259
+ order_by: `${toDeskFieldExpr(doctype, sort.field)} ${sort.order}`,
260
+ add_totals_row: config.addTotals ? 1 : 0,
261
+ page_length: config.pageSize ?? DEFAULT_REPORT_PAGE_SIZE,
262
+ column_widths: {},
263
+ group_by: config.groupBy ? {
264
+ group_by: toDeskFieldExpr(doctype, config.groupBy),
265
+ aggregate_function: "count",
266
+ aggregate_on: null
267
+ } : null
268
+ };
269
+ }
270
+ function fromDeskReportSettings(doctype, json) {
271
+ if (!json || typeof json !== "object") return void 0;
272
+ const raw = json;
273
+ const fieldnames = [];
274
+ if (Array.isArray(raw.fields)) {
275
+ for (const entry of raw.fields) {
276
+ if (typeof entry === "string") {
277
+ fieldnames.push(entry);
278
+ } else if (Array.isArray(entry) && typeof entry[0] === "string") {
279
+ const fieldDoctype = typeof entry[1] === "string" ? entry[1] : doctype;
280
+ if (fieldDoctype === doctype) fieldnames.push(entry[0]);
281
+ }
282
+ }
283
+ }
284
+ const filters = [];
285
+ if (Array.isArray(raw.filters)) {
286
+ for (const entry of raw.filters) {
287
+ if (!Array.isArray(entry)) continue;
288
+ if (entry.length === 4) {
289
+ const [filterDoctype, fieldname, operator, value] = entry;
290
+ if (filterDoctype === doctype && typeof fieldname === "string" && typeof operator === "string") {
291
+ filters.push([fieldname, operator, value]);
292
+ }
293
+ } else if (entry.length === 3 && typeof entry[0] === "string" && typeof entry[1] === "string") {
294
+ filters.push([entry[0], entry[1], entry[2]]);
295
+ }
296
+ }
297
+ }
298
+ const groupByRaw = raw.group_by;
299
+ const groupByExpr = typeof groupByRaw?.group_by === "string" ? groupByRaw.group_by : void 0;
300
+ const groupByMatch = groupByExpr?.match(BACKTICK_FIELD_RE);
301
+ return {
302
+ fieldnames,
303
+ filters,
304
+ sort: parseDeskOrderBy(raw.order_by),
305
+ pageSize: typeof raw.page_length === "number" && raw.page_length > 0 ? raw.page_length : void 0,
306
+ groupBy: groupByMatch ? groupByMatch[2] : null,
307
+ addTotals: raw.add_totals_row === 1
308
+ };
309
+ }
310
+ function isNullish(value) {
311
+ return value === null || value === void 0;
312
+ }
313
+ function compareCellValues(a, b) {
314
+ if (isNullish(a) && isNullish(b)) return 0;
315
+ if (isNullish(a)) return 1;
316
+ if (isNullish(b)) return -1;
317
+ if (typeof a === "number" && typeof b === "number") return a - b;
318
+ const left = String(a);
319
+ const right = String(b);
320
+ return left < right ? -1 : left > right ? 1 : 0;
321
+ }
322
+ function orderReportRows(rows, sort, groupBy) {
323
+ const direction = sort.order === "asc" ? 1 : -1;
324
+ const sorted = [...rows];
325
+ sorted.sort((a, b) => {
326
+ if (groupBy) {
327
+ const grouped = compareCellValues(a[groupBy], b[groupBy]);
328
+ if (grouped !== 0) return grouped;
329
+ }
330
+ const left = a[sort.field];
331
+ const right = b[sort.field];
332
+ const ordered = isNullish(left) || isNullish(right) ? compareCellValues(left, right) : direction * compareCellValues(left, right);
333
+ return ordered || compareCellValues(a.name, b.name);
334
+ });
335
+ return sorted;
336
+ }
337
+ function buildGridRows(orderedRows, pageStart, pageSize, groupBy) {
338
+ const page = orderedRows.slice(pageStart, pageStart + pageSize);
339
+ const out = [];
340
+ let previousGroup;
341
+ const counts = /* @__PURE__ */new Map();
342
+ if (groupBy) {
343
+ for (const row of orderedRows) {
344
+ const groupKey = String(row[groupBy] ?? "");
345
+ counts.set(groupKey, (counts.get(groupKey) ?? 0) + 1);
346
+ }
347
+ }
348
+ page.forEach((row, index) => {
349
+ if (groupBy) {
350
+ const groupKey = String(row[groupBy] ?? "");
351
+ if (previousGroup === void 0 || groupKey !== previousGroup) {
352
+ previousGroup = groupKey;
353
+ out.push({
354
+ kind: "group",
355
+ key: `group:${groupKey}:${pageStart + index}`,
356
+ value: row[groupBy],
357
+ count: counts.get(groupKey) ?? 0
358
+ });
359
+ }
360
+ }
361
+ out.push({
362
+ kind: "row",
363
+ key: row.name,
364
+ row,
365
+ index: pageStart + index + 1
366
+ });
367
+ });
368
+ return out;
369
+ }
370
+ function computeTotals(columns, rows) {
371
+ if (rows.length === 0) return [];
372
+ return columns.filter(column => REPORT_NUMERIC_FIELDTYPES.has(column.fieldtype)).map(column => ({
373
+ fieldname: column.fieldname,
374
+ fieldtype: column.fieldtype,
375
+ value: rows.reduce((sum, row) => sum + (Number(row[column.fieldname]) || 0), 0)
376
+ }));
377
+ }
378
+ function escapeCsvCell(value) {
379
+ if (value === null || value === void 0) return "";
380
+ const text = String(value);
381
+ return /[",\n]/.test(text) ? `"${text.replace(/"/g, '""')}"` : text;
382
+ }
383
+ function buildReportCsv(columns, rows) {
384
+ const lines = [columns.map(column => escapeCsvCell(column.label)).join(","), ...rows.map(row => columns.map(column => escapeCsvCell(row[column.fieldname])).join(","))];
385
+ return lines.join("\n");
386
+ }