@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
@@ -36,7 +36,6 @@ var import_frappe = require("@multiplatform.one/frappe");
36
36
  var import_components = require("@multiplatform.one/components");
37
37
  var import_schemaForm = require("./schemaForm/index.native.js");
38
38
  var import_FormSidebar = require("./FormSidebar.native.js");
39
- var import_db = require("@tanstack/db");
40
39
  var import_react2 = require("@phosphor-icons/react");
41
40
  var import_react3 = require("react");
42
41
  var import_react_i18next = require("react-i18next");
@@ -47,70 +46,22 @@ var import_FrappeProvider = require("./FrappeProvider.native.js");
47
46
  var import_FrappeReconnectIndicator = require("./FrappeReconnectIndicator.native.js");
48
47
  var import_timeline = require("./components/timeline.native.js");
49
48
  var import_desktop = require("@multiplatform.one/desktop");
50
- var import_fetchFrom = require("./formEngine/fetchFrom.native.js");
51
- var import_fieldPermissions = require("./formEngine/fieldPermissions.native.js");
52
- var import_formActions = require("./formEngine/formActions.native.js");
53
- var import_formLayout = require("./formEngine/formLayout.native.js");
54
- var import_createPrefill = require("./formEngine/createPrefill.native.js");
55
49
  var import_docLifecycle = require("./formEngine/docLifecycle.native.js");
56
- var import_useAmendedAs = require("./formEngine/useAmendedAs.native.js");
57
- var import_useDocRights = require("./formEngine/useDocRights.native.js");
58
- var import_useFormEngine = require("./formEngine/useFormEngine.native.js");
59
50
  var import_FrappeFormActions = require("./FrappeFormActions.native.js");
60
51
  var import_frappeConnections = require("./frappeConnections.native.js");
61
52
  var import_FrappeFormConnections = require("./FrappeFormConnections.native.js");
62
53
  var import_FrappeNotConfigured = require("./FrappeNotConfigured.native.js");
63
54
  var import_FrappeRowsReader = require("./FrappeRowsReader.native.js");
55
+ var import_liveErrors = require("./liveErrors.native.js");
56
+ var import_recordShape = require("./recordShape.native.js");
64
57
  var import_frappeNavigation = require("./frappeNavigation.native.js");
65
- function _instanceof(left, right) {
66
- "@swc/helpers - instanceof";
67
-
68
- if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
69
- return !!right[Symbol.hasInstance](left);
70
- } else {
71
- return left instanceof right;
72
- }
73
- }
74
- function isEmptyFieldValue(value) {
75
- if (value === void 0 || value === null) return true;
76
- if (typeof value === "string" && value.trim() === "") return true;
77
- if (Array.isArray(value) && value.length === 0) return true;
78
- return false;
79
- }
80
- function sectionsToLayoutFields(sections) {
81
- var fields = [];
82
- sections.forEach(function (section, sectionIndex) {
83
- fields.push({
84
- fieldname: `__section_${sectionIndex}`,
85
- fieldtype: section.tab ? "Tab Break" : "Section Break",
86
- label: section.label,
87
- collapsible: section.collapsible ? 1 : 0
88
- });
89
- section.columns.forEach(function (column, columnIndex) {
90
- if (columnIndex > 0) {
91
- fields.push({
92
- fieldname: `__column_${sectionIndex}_${columnIndex}`,
93
- fieldtype: "Column Break"
94
- });
95
- }
96
- fields.push(...column.fields);
97
- });
98
- });
99
- return fields;
100
- }
101
- var documentBookkeeping = /* @__PURE__ */new Set(["name", "owner", "creation", "modified", "modified_by", "docstatus", "idx", "doctype", "_user_tags", "_comments", "_assign", "_liked_by", "_seen"]);
102
- function fieldsFromDocument(doc) {
103
- return Object.entries(doc).filter(function (param) {
104
- var [key, value] = param;
105
- return !key.startsWith("$") && !documentBookkeeping.has(key) && (value === null || typeof value === "string" || typeof value === "number");
106
- }).map(function (param) {
107
- var [key, value] = param;
58
+ var import_useFrappeForm = require("./useFrappeForm.native.js");
59
+ function schemaFieldsFromRecord(doc) {
60
+ return (0, import_recordShape.fieldsFromRecord)(doc).map(function (field) {
108
61
  return {
109
- name: key,
110
- label: key.replace(/_/g, " ").replace(/(^|\s)\S/g, function (c) {
111
- return c.toUpperCase();
112
- }),
113
- type: typeof value === "number" ? Number.isInteger(value) ? "Int" : "Float" : "Data",
62
+ name: field.fieldname,
63
+ label: field.label,
64
+ type: field.fieldtype,
114
65
  readOnly: true
115
66
  };
116
67
  });
@@ -280,21 +231,50 @@ function FrappeFormRoute(param) {
280
231
  }
281
232
  });
282
233
  }
283
- function FrappeFormBody(param) {
234
+ function FrappeFormBody(props) {
235
+ if (props.form) return /* @__PURE__ */(0, import_jsx_runtime.jsx)(FrappeFormView, {
236
+ ...props,
237
+ form: props.form
238
+ });
239
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(FrappeFormOwned, {
240
+ ...props
241
+ });
242
+ }
243
+ function FrappeFormOwned(props) {
244
+ var _props_baseURL, _props_showSidebar;
245
+ var config = (0, import_FrappeProvider.useFrappeConfig)();
246
+ if (!((_props_baseURL = props.baseURL) !== null && _props_baseURL !== void 0 ? _props_baseURL : config === null || config === void 0 ? void 0 : config.baseURL)) {
247
+ throw new Error("FrappeForm requires baseURL prop or FrappeProvider with baseURL");
248
+ }
249
+ var form = (0, import_useFrappeForm.useFrappeForm)({
250
+ doctype: props.doctype,
251
+ name: props.name,
252
+ baseURL: props.baseURL,
253
+ auth: props.auth,
254
+ syncOptions: props.syncOptions,
255
+ fields: props.fields,
256
+ sections: props.sections,
257
+ hideFields: props.hideFields,
258
+ hideSections: props.hideSections,
259
+ roles: props.roles,
260
+ readShares: (_props_showSidebar = props.showSidebar) !== null && _props_showSidebar !== void 0 ? _props_showSidebar : true,
261
+ disabled: props.disabled,
262
+ initialDoc: props.initialDoc
263
+ });
264
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(FrappeFormView, {
265
+ ...props,
266
+ form
267
+ });
268
+ }
269
+ function FrappeFormView(param) {
284
270
  var {
285
- baseURL,
286
- auth,
287
- syncOptions,
271
+ form,
288
272
  doctype,
289
273
  name,
290
- fields,
291
274
  children,
292
275
  overrides,
293
- hideFields,
294
276
  readOnlyFields,
295
- sections,
296
277
  order,
297
- roles,
298
278
  onSave,
299
279
  onCancel,
300
280
  onDelete,
@@ -303,81 +283,57 @@ function FrappeFormBody(param) {
303
283
  showToolbar = true,
304
284
  showSidebar = true,
305
285
  showTimeline = true,
286
+ showBanners = true,
306
287
  disabled = false,
307
288
  sectionHeadingLevel,
308
289
  connections,
309
290
  showConnections = true,
310
- initialDoc,
291
+ extraTabs,
292
+ renderFieldWrapper,
293
+ renderTab,
311
294
  loadingFallback,
312
295
  notFoundFallback,
313
296
  errorFallback,
314
297
  routePage
315
298
  } = param;
316
- var _ref, _ref1;
299
+ var _ref;
317
300
  var _tabItems_, _tabItems_1;
318
- var config = (0, import_FrappeProvider.useFrappeConfig)();
319
301
  var {
320
302
  knobProps
321
303
  } = (0, import_theme.useResolvedKnobs)();
322
304
  var {
323
305
  t
324
306
  } = (0, import_react_i18next.useTranslation)();
325
- var seedDoc = name && initialDoc && initialDoc.name === name ? initialDoc : void 0;
326
- var seedRef = (0, import_react3.useRef)(seedDoc);
327
- seedRef.current = seedDoc;
328
- var [localDoc, setLocalDoc] = (0, import_react3.useState)(function () {
329
- return seedDoc !== null && seedDoc !== void 0 ? seedDoc : {};
330
- });
331
- var [baselineDoc, setBaselineDoc] = (0, import_react3.useState)(function () {
332
- return seedDoc;
333
- });
334
- var [docError, setDocError] = (0, import_react3.useState)(null);
335
- var [conflictFields, setConflictFields] = (0, import_react3.useState)([]);
336
- var [wasDeleted, setWasDeleted] = (0, import_react3.useState)(false);
337
- var [isSubmitting, setIsSubmitting] = (0, import_react3.useState)(false);
338
- var [errors, setErrors] = (0, import_react3.useState)({});
339
- var [activeTab, setActiveTab] = (0, import_react3.useState)(void 0);
340
- var everLoadedRef = (0, import_react3.useRef)(false);
341
- var localDocRef = (0, import_react3.useRef)(localDoc);
342
- localDocRef.current = localDoc;
343
- var baselineRef = (0, import_react3.useRef)(baselineDoc);
344
- baselineRef.current = baselineDoc;
345
- var createDraftRef = (0, import_react3.useRef)(void 0);
346
- var finalBaseURL = baseURL !== null && baseURL !== void 0 ? baseURL : config === null || config === void 0 ? void 0 : config.baseURL;
347
- var finalAuth = auth !== null && auth !== void 0 ? auth : config === null || config === void 0 ? void 0 : config.auth;
348
- var finalSyncOptions = syncOptions !== null && syncOptions !== void 0 ? syncOptions : config === null || config === void 0 ? void 0 : config.syncOptions;
349
- if (!finalBaseURL) {
350
- throw new Error("FrappeForm requires baseURL prop or FrappeProvider with baseURL");
351
- }
352
- var frappeConfig = (0, import_react3.useMemo)(function () {
353
- return {
354
- baseURL: finalBaseURL,
355
- socketPort: config === null || config === void 0 ? void 0 : config.socketPort,
356
- siteName: config === null || config === void 0 ? void 0 : config.siteName,
357
- socketBaseURL: config === null || config === void 0 ? void 0 : config.socketBaseURL,
358
- auth: finalAuth,
359
- syncOptions: finalSyncOptions,
360
- realtime: config === null || config === void 0 ? void 0 : config.realtime,
361
- fixtures: config === null || config === void 0 ? void 0 : config.fixtures
362
- };
363
- }, [finalBaseURL, config === null || config === void 0 ? void 0 : config.socketPort, config === null || config === void 0 ? void 0 : config.siteName, config === null || config === void 0 ? void 0 : config.socketBaseURL, config === null || config === void 0 ? void 0 : config.realtime, finalAuth, finalSyncOptions, config === null || config === void 0 ? void 0 : config.fixtures]);
364
307
  var {
365
308
  meta,
366
- isLoading: isMetaLoading,
367
- error: metaError
368
- } = (0, import_frappe.useDocTypeMeta)(frappeConfig, doctype);
369
- var isSubmittable = !!(meta === null || meta === void 0 ? void 0 : meta.is_submittable);
309
+ metaLoading: isMetaLoading,
310
+ metaError,
311
+ doc: localDoc,
312
+ baseline: baselineDoc,
313
+ setValue,
314
+ errors,
315
+ isSubmitting,
316
+ docstatus,
317
+ isSubmittable,
318
+ rights,
319
+ rightsPending,
320
+ canWrite: canWriteRecord,
321
+ wasDeleted,
322
+ conflictFields,
323
+ docError,
324
+ tabs: formTabs,
325
+ promptNamed,
326
+ activeTab,
327
+ setActiveTab,
328
+ amendedAs
329
+ } = form;
330
+ var frappeConfig = form.connection;
370
331
  var isCreate = !name;
371
- var docstatus = Number((_ref = baselineDoc === null || baselineDoc === void 0 ? void 0 : baselineDoc.docstatus) !== null && _ref !== void 0 ? _ref : 0);
372
- var layoutFields = (0, import_react3.useMemo)(function () {
373
- if (!meta) return void 0;
374
- return sections ? sectionsToLayoutFields(sections) : meta.fields;
375
- }, [meta, sections]);
376
- var amendedAs = (0, import_useAmendedAs.useAmendedAs)(isSubmittable && docstatus === 2 ? frappeConfig : void 0, doctype, name);
332
+ var hasUnsavedChanges = form.isDirty;
377
333
  var readsWithoutMeta = !children && !meta && Boolean(metaError) && Boolean(name);
378
334
  var recordTabs = (0, import_react3.useMemo)(function () {
379
335
  if (!readsWithoutMeta || !baselineDoc) return void 0;
380
- var recordFields = fieldsFromDocument(baselineDoc);
336
+ var recordFields = schemaFieldsFromRecord(baselineDoc);
381
337
  return [{
382
338
  key: "__details",
383
339
  label: t("Details"),
@@ -391,97 +347,7 @@ function FrappeFormBody(param) {
391
347
  }
392
348
  }];
393
349
  }, [readsWithoutMeta, baselineDoc, t]);
394
- var promptNamed = isCreate && !!meta && (0, import_formLayout.isPromptNamed)(meta.autoname, meta.naming_rule);
395
- var fetchMap = (0, import_react3.useMemo)(function () {
396
- return meta ? (0, import_fetchFrom.buildFetchMap)(meta.fields) : void 0;
397
- }, [meta]);
398
- var handleDocSyncError = (0, import_react3.useCallback)(function (err) {
399
- setDocError(_instanceof(err, Error) ? err : new Error(String(err)));
400
- }, []);
401
- var docCollection = (0, import_frappe.useFrappeCollection)(name ? frappeConfig : void 0, doctype, {
402
- fields,
403
- filters: name ? {
404
- name
405
- } : void 0,
406
- onSyncError: handleDocSyncError
407
- });
408
- var {
409
- data: rawDocData,
410
- isLoading: isDocLoading
411
- } = (0, import_frappe.useLiveQuery)(function (q) {
412
- if (!docCollection || !name) return null;
413
- return q.from({
414
- _doc: docCollection
415
- }).where(function (param2) {
416
- var {
417
- _doc
418
- } = param2;
419
- if (!_doc) return (0, import_db.eq)(name, name);
420
- return (0, import_db.eq)(_doc.name, name);
421
- });
422
- }, [docCollection, name]);
423
- var liveDoc = (0, import_react3.useMemo)(function () {
424
- var _arr_;
425
- var arr = Array.isArray(rawDocData) ? rawDocData : rawDocData ? [rawDocData] : [];
426
- var doc = (_arr_ = arr[0]) !== null && _arr_ !== void 0 ? _arr_ : null;
427
- return doc ? {
428
- data: doc,
429
- isLoading: isDocLoading
430
- } : name ? {
431
- data: null,
432
- isLoading: isDocLoading
433
- } : null;
434
- }, [rawDocData, isDocLoading, name]);
435
- var collection = (0, import_frappe.useFrappeCollection)(name ? void 0 : frappeConfig, doctype, {
436
- fields
437
- });
438
- var shareCollection = (0, import_frappe.useFrappeCollection)(showSidebar && name ? frappeConfig : void 0, "DocShare", {
439
- fields: ["name", "user", "everyone", "read", "write", "share"],
440
- filters: {
441
- share_doctype: doctype,
442
- share_name: name
443
- }
444
- });
445
- var {
446
- data: rawShareRows
447
- } = (0, import_frappe.useLiveQuery)(function (q) {
448
- return shareCollection ? q.from({
449
- _share: shareCollection
450
- }) : null;
451
- }, [shareCollection]);
452
- var shareRows = (0, import_react3.useMemo)(function () {
453
- return shareCollection ? rawShareRows !== null && rawShareRows !== void 0 ? rawShareRows : [] : void 0;
454
- }, [shareCollection, rawShareRows]);
455
- var owner = baselineDoc === null || baselineDoc === void 0 ? void 0 : baselineDoc.owner;
456
- var {
457
- rights,
458
- pending: rightsPending,
459
- roles: effectiveRoles
460
- } = (0, import_useDocRights.useDocRights)(frappeConfig, meta, {
461
- roles,
462
- owner: typeof owner === "string" ? owner : void 0,
463
- shares: shareRows
464
- });
465
- var permLevels = (0, import_react3.useMemo)(function () {
466
- return (0, import_fieldPermissions.buildPermLevelMatrix)(meta === null || meta === void 0 ? void 0 : meta.permissions, effectiveRoles);
467
- }, [meta === null || meta === void 0 ? void 0 : meta.permissions, effectiveRoles]);
468
- var formTabs = (0, import_react3.useMemo)(function () {
469
- if (!layoutFields) return void 0;
470
- return (0, import_formLayout.buildFormTabs)({
471
- fields: layoutFields,
472
- doc: {
473
- ...localDoc,
474
- __islocal: isCreate ? 1 : 0
475
- },
476
- docstatus,
477
- formReadOnly: !!(meta === null || meta === void 0 ? void 0 : meta.read_only),
478
- isCreate,
479
- detailsLabel: t("Details"),
480
- permLevels,
481
- hiddenFields: hideFields
482
- });
483
- }, [layoutFields, localDoc, docstatus, meta === null || meta === void 0 ? void 0 : meta.read_only, isCreate, permLevels, hideFields, t]);
484
- var assignmentCollection = (0, import_frappe.useFrappeCollection)(showSidebar && name && !frappeConfig.fixtures ? frappeConfig : void 0, "ToDo", {
350
+ var assignmentCollection = (0, import_frappe.useFrappeCollection)(showSidebar && name && frappeConfig && !frappeConfig.fixtures ? frappeConfig : void 0, "ToDo", {
485
351
  fields: ["name", "allocated_to", "status", "reference_type", "reference_name"],
486
352
  filters: {
487
353
  reference_type: doctype,
@@ -499,16 +365,6 @@ function FrappeFormBody(param) {
499
365
  var assignmentRows = (0, import_react3.useMemo)(function () {
500
366
  return assignmentCollection ? rawAssignmentRows !== null && rawAssignmentRows !== void 0 ? rawAssignmentRows : [] : void 0;
501
367
  }, [assignmentCollection, rawAssignmentRows]);
502
- (0, import_react3.useEffect)(function () {
503
- everLoadedRef.current = false;
504
- if (name) createDraftRef.current = void 0;
505
- setWasDeleted(false);
506
- setConflictFields([]);
507
- setDocError(null);
508
- var seed = seedRef.current;
509
- setBaselineDoc(seed);
510
- if (seed) setLocalDoc(seed);
511
- }, [doctype, name]);
512
368
  var effectiveConnections = (0, import_react3.useMemo)(function () {
513
369
  return connections !== null && connections !== void 0 ? connections : (0, import_frappeConnections.connectionsFromMeta)(meta);
514
370
  }, [connections, meta]);
@@ -576,395 +432,48 @@ function FrappeFormBody(param) {
576
432
  var _connectionSnapshots_link_doctype;
577
433
  return (_ref2 = (_connectionSnapshots_link_doctype = connectionSnapshots[link.doctype]) === null || _connectionSnapshots_link_doctype === void 0 ? void 0 : _connectionSnapshots_link_doctype.isLoading) !== null && _ref2 !== void 0 ? _ref2 : true;
578
434
  });
579
- (0, import_frappe.useFrappeDoctypeEvents)(name ? frappeConfig : void 0, doctype, function (event) {
580
- if (event.type !== "doc_deleted") return;
581
- var payload = event.payload;
582
- if ((payload === null || payload === void 0 ? void 0 : payload.name) === name) setWasDeleted(true);
583
- }, Boolean(name));
584
- (0, import_react3.useEffect)(function () {
585
- var incoming = liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.data;
586
- if (incoming) {
587
- everLoadedRef.current = true;
588
- setWasDeleted(false);
589
- var baseline = baselineRef.current;
590
- if (!baseline) {
591
- setBaselineDoc(incoming);
592
- setLocalDoc(incoming);
593
- return;
594
- }
595
- var local = localDocRef.current;
596
- var merged = {
597
- ...incoming
598
- };
599
- var newConflicts = [];
600
- var _iteratorNormalCompletion = true,
601
- _didIteratorError = false,
602
- _iteratorError = void 0;
603
- try {
604
- for (var _iterator = Object.keys(local)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
605
- var key = _step.value;
606
- var localValue = local[key];
607
- if (localValue === baseline[key]) continue;
608
- merged[key] = localValue;
609
- var remote = incoming[key];
610
- if (remote !== baseline[key] && remote !== localValue) newConflicts.push(key);
611
- }
612
- } catch (err) {
613
- _didIteratorError = true;
614
- _iteratorError = err;
615
- } finally {
616
- try {
617
- if (!_iteratorNormalCompletion && _iterator.return != null) {
618
- _iterator.return();
619
- }
620
- } finally {
621
- if (_didIteratorError) {
622
- throw _iteratorError;
623
- }
624
- }
625
- }
626
- setBaselineDoc(incoming);
627
- setLocalDoc(merged);
628
- if (newConflicts.length > 0) {
629
- setConflictFields(function (prev) {
630
- return Array.from(/* @__PURE__ */new Set([...prev, ...newConflicts]));
631
- });
632
- }
633
- } else if (name && everLoadedRef.current && !(liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.isLoading)) {
634
- setWasDeleted(true);
635
- } else if (!name) {
636
- var _createDraftRef_current;
637
- if (((_createDraftRef_current = createDraftRef.current) === null || _createDraftRef_current === void 0 ? void 0 : _createDraftRef_current.doctype) !== doctype) {
638
- createDraftRef.current = {
639
- doctype,
640
- values: (0, import_createPrefill.takeCreatePrefill)(doctype)
641
- };
642
- }
643
- setLocalDoc({
644
- ...createDraftRef.current.values,
645
- doctype
646
- });
647
- }
648
- }, [liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.data, liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.isLoading, doctype, name]);
649
- var dirtyFieldNames = (0, import_react3.useMemo)(function () {
650
- var local = localDoc;
651
- var base = baselineDoc;
652
- var dirty = [];
653
- var _iteratorNormalCompletion = true,
654
- _didIteratorError = false,
655
- _iteratorError = void 0;
656
- try {
657
- for (var _iterator = Object.keys(local)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
658
- var key = _step.value;
659
- if (key === "doctype" || key === "name") continue;
660
- if (base ? local[key] !== base[key] : local[key] !== void 0) dirty.push(key);
661
- }
662
- } catch (err) {
663
- _didIteratorError = true;
664
- _iteratorError = err;
665
- } finally {
666
- try {
667
- if (!_iteratorNormalCompletion && _iterator.return != null) {
668
- _iterator.return();
669
- }
670
- } finally {
671
- if (_didIteratorError) {
672
- throw _iteratorError;
673
- }
674
- }
675
- }
676
- return dirty;
677
- }, [localDoc, baselineDoc]);
678
- var hasUnsavedChanges = dirtyFieldNames.length > 0;
679
- var runFetchFrom = function runFetchFrom2(field, value) {
680
- var rules = fetchMap === null || fetchMap === void 0 ? void 0 : fetchMap.get(field);
681
- if (!rules || rules.length === 0) return;
682
- var applyPatch = function applyPatch2(fetched2) {
683
- setLocalDoc(function (prev) {
684
- var current = prev;
685
- if (current[field] !== value) return prev;
686
- var patch = (0, import_fetchFrom.applyFetchedValues)(rules, fetched2, current);
687
- return Object.keys(patch).length > 0 ? {
688
- ...current,
689
- ...patch
690
- } : prev;
691
- });
692
- };
693
- if (isEmptyFieldValue(value)) {
694
- applyPatch({});
695
- return;
696
- }
697
- var linkField = meta === null || meta === void 0 ? void 0 : meta.fields.find(function (metaField) {
698
- return metaField.fieldname === field;
699
- });
700
- var targetDoctype = typeof (linkField === null || linkField === void 0 ? void 0 : linkField.options) === "string" ? linkField.options : "";
701
- if (!targetDoctype) return;
702
- var sources = Array.from(new Set(rules.map(function (rule) {
703
- return rule.source;
704
- })));
705
- var fixtures = frappeConfig.fixtures;
706
- var fetched = fixtures ? fixtures.getDoc(targetDoctype, String(value), sources).then(function (doc) {
707
- return doc !== null && doc !== void 0 ? doc : {};
708
- }) : (0, import_formActions.validateLink)((0, import_formActions.createHttpClient)(frappeConfig), targetDoctype, String(value), sources);
709
- fetched.then(applyPatch).catch(function () {
710
- return void 0;
711
- });
712
- };
713
- var setValue = function setValue2(field, value) {
714
- setLocalDoc(function (prev) {
715
- return {
716
- ...prev,
717
- [field]: value
718
- };
719
- });
720
- setErrors(function (prev) {
721
- var newErrors = {
722
- ...prev
723
- };
724
- delete newErrors[String(field)];
725
- return newErrors;
726
- });
727
- runFetchFrom(String(field), value);
728
- };
729
- var validateRequiredFields = function validateRequiredFields2() {
730
- if (!formTabs) return {};
731
- var validationErrors = {};
732
- var doc = localDoc;
733
- if (promptNamed && isEmptyFieldValue(doc.name)) {
734
- validationErrors.name = t("Name is required");
735
- }
736
- var _iteratorNormalCompletion = true,
737
- _didIteratorError = false,
738
- _iteratorError = void 0;
739
- try {
740
- for (var _iterator = formTabs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
741
- var tab = _step.value;
742
- var _iteratorNormalCompletion1 = true,
743
- _didIteratorError1 = false,
744
- _iteratorError1 = void 0;
745
- try {
746
- for (var _iterator1 = tab.schema.fields[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
747
- var field = _step1.value;
748
- if (!field.required) continue;
749
- if (isEmptyFieldValue(doc[field.name])) {
750
- validationErrors[field.name] = t("{{label}} is required", {
751
- label: field.label || field.name
752
- });
753
- }
754
- }
755
- } catch (err) {
756
- _didIteratorError1 = true;
757
- _iteratorError1 = err;
758
- } finally {
759
- try {
760
- if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
761
- _iterator1.return();
762
- }
763
- } finally {
764
- if (_didIteratorError1) {
765
- throw _iteratorError1;
766
- }
767
- }
768
- }
769
- }
770
- } catch (err) {
771
- _didIteratorError = true;
772
- _iteratorError = err;
773
- } finally {
774
- try {
775
- if (!_iteratorNormalCompletion && _iterator.return != null) {
776
- _iterator.return();
777
- }
778
- } finally {
779
- if (_didIteratorError) {
780
- throw _iteratorError;
781
- }
782
- }
783
- }
784
- return validationErrors;
785
- };
786
- var canWriteRecord = isCreate ? rights.create : rights.write;
787
435
  var handleSave = async function handleSave2() {
788
- if (wasDeleted || !canWriteRecord) return;
789
- var requiredErrors = validateRequiredFields();
790
- if (Object.keys(requiredErrors).length > 0) {
791
- setErrors(requiredErrors);
792
- return;
793
- }
794
- setIsSubmitting(true);
795
- setErrors({});
796
- try {
797
- if (name) {
798
- if (!docCollection) return;
799
- var changedFields = dirtyFieldNames;
800
- if (changedFields.length > 0) {
801
- var local = localDoc;
802
- var tx = docCollection.update(name, function (draft) {
803
- var _iteratorNormalCompletion2 = true,
804
- _didIteratorError2 = false,
805
- _iteratorError2 = void 0;
806
- try {
807
- for (var _iterator2 = changedFields[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
808
- var key = _step2.value;
809
- draft[key] = local[key];
810
- }
811
- } catch (err) {
812
- _didIteratorError2 = true;
813
- _iteratorError2 = err;
814
- } finally {
815
- try {
816
- if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
817
- _iterator2.return();
818
- }
819
- } finally {
820
- if (_didIteratorError2) {
821
- throw _iteratorError2;
822
- }
823
- }
824
- }
825
- });
826
- await tx.isPersisted.promise;
827
- }
828
- setConflictFields([]);
829
- } else {
830
- var _localDoc_name, _ref2;
831
- var _getFrappeSyncModule;
832
- if (!collection) return;
833
- var temporaryName = (_localDoc_name = localDoc.name) !== null && _localDoc_name !== void 0 ? _localDoc_name : `new-${Date.now()}`;
834
- var docToInsert = {
835
- ...localDoc,
836
- doctype,
837
- name: temporaryName
838
- };
839
- var tx1 = collection.insert(docToInsert);
840
- await tx1.isPersisted.promise;
841
- var createdName = (_ref2 = (_getFrappeSyncModule = (0, import_frappe.getFrappeSyncModule)(frappeConfig)) === null || _getFrappeSyncModule === void 0 ? void 0 : _getFrappeSyncModule.createdName(temporaryName)) !== null && _ref2 !== void 0 ? _ref2 : temporaryName;
842
- onSave === null || onSave === void 0 ? void 0 : onSave({
843
- ...localDoc,
844
- name: createdName
845
- });
846
- return;
847
- }
848
- onSave === null || onSave === void 0 ? void 0 : onSave(localDoc);
849
- } catch (err1) {
850
- var e = err1;
851
- if ((e === null || e === void 0 ? void 0 : e.exc_type) === "ValidationError") {
852
- var validationErrors = {};
853
- if (e._server_messages) {
854
- try {
855
- var messages = JSON.parse(e._server_messages);
856
- var _iteratorNormalCompletion = true,
857
- _didIteratorError = false,
858
- _iteratorError = void 0;
859
- try {
860
- for (var _iterator = messages[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
861
- var msg = _step.value;
862
- var parsed = typeof msg === "string" ? JSON.parse(msg) : msg;
863
- if (parsed.message) {
864
- validationErrors.general = parsed.message;
865
- }
866
- }
867
- } catch (err) {
868
- _didIteratorError = true;
869
- _iteratorError = err;
870
- } finally {
871
- try {
872
- if (!_iteratorNormalCompletion && _iterator.return != null) {
873
- _iterator.return();
874
- }
875
- } finally {
876
- if (_didIteratorError) {
877
- throw _iteratorError;
878
- }
879
- }
880
- }
881
- } catch (unused) {
882
- validationErrors.general = t("Validation error occurred");
883
- }
884
- }
885
- setErrors(validationErrors);
886
- } else {
887
- setErrors({
888
- general: (e === null || e === void 0 ? void 0 : e.message) || t("Failed to save document")
889
- });
890
- }
891
- } finally {
892
- setIsSubmitting(false);
893
- }
436
+ var saved = await form.save();
437
+ if (!saved) return;
438
+ onSave === null || onSave === void 0 ? void 0 : onSave(isCreate ? {
439
+ ...localDoc,
440
+ name: saved
441
+ } : localDoc);
894
442
  };
895
443
  var handleCancel = function handleCancel2() {
896
- if (baselineDoc) {
897
- setLocalDoc(baselineDoc);
898
- } else if (liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.data) {
899
- setLocalDoc(liveDoc.data);
900
- } else {
901
- setLocalDoc({
902
- doctype
903
- });
904
- }
905
- setConflictFields([]);
906
- setErrors({});
444
+ form.reset();
907
445
  onCancel === null || onCancel === void 0 ? void 0 : onCancel();
908
446
  };
909
447
  var handleDelete = async function handleDelete2() {
910
- if (!docCollection || !name || wasDeleted || !rights.delete) return;
448
+ if (!name || wasDeleted || !rights.delete) return;
911
449
  if (!(await import_desktop.dialog.confirm(t("Delete this {{doctype}}?", {
912
450
  doctype
913
451
  })))) return;
914
- setIsSubmitting(true);
915
- setErrors({});
916
- try {
917
- var tx = docCollection.delete(name);
918
- await tx.isPersisted.promise;
919
- onDelete === null || onDelete === void 0 ? void 0 : onDelete(localDoc);
920
- } catch (err) {
921
- setErrors({
922
- general: (err === null || err === void 0 ? void 0 : err.message) || t("Failed to delete")
923
- });
924
- } finally {
925
- setIsSubmitting(false);
926
- }
452
+ if (await form.remove()) onDelete === null || onDelete === void 0 ? void 0 : onDelete(localDoc);
927
453
  };
928
- var transitionDocstatus = async function transitionDocstatus2(to, question, failure) {
929
- if (!docCollection || !name || wasDeleted || !rights[to === 1 ? "submit" : "cancel"]) return;
930
- if (to === 1) {
931
- var requiredErrors = validateRequiredFields();
932
- if (Object.keys(requiredErrors).length > 0) {
933
- setErrors(requiredErrors);
934
- return;
935
- }
936
- }
937
- if (!(await import_desktop.dialog.confirm(question))) return;
938
- setIsSubmitting(true);
939
- setErrors({});
940
- try {
941
- var tx = docCollection.update(name, function (draft) {
942
- draft.docstatus = to;
943
- });
944
- await tx.isPersisted.promise;
945
- } catch (err) {
946
- setErrors({
947
- general: (0, import_useFormEngine.extractServerError)(err, failure)
948
- });
949
- } finally {
950
- setIsSubmitting(false);
454
+ var handleSubmitDocument = async function handleSubmitDocument2() {
455
+ if (!name || wasDeleted || !rights.submit) return;
456
+ var requiredErrors = form.validate();
457
+ if (Object.keys(requiredErrors).length > 0) {
458
+ form.setErrors(requiredErrors);
459
+ return;
951
460
  }
952
- };
953
- var handleSubmitDocument = function handleSubmitDocument2() {
954
- return transitionDocstatus(1, t("Permanently Submit {{name}}?", {
461
+ if (!(await import_desktop.dialog.confirm(t("Permanently Submit {{name}}?", {
955
462
  name
956
- }), t("Failed to submit"));
463
+ })))) return;
464
+ await form.submitDocument();
957
465
  };
958
- var handleCancelDocument = function handleCancelDocument2() {
959
- return transitionDocstatus(2, t("Permanently Cancel {{name}}?", {
466
+ var handleCancelDocument = async function handleCancelDocument2() {
467
+ if (!name || wasDeleted || !rights.cancel) return;
468
+ if (!(await import_desktop.dialog.confirm(t("Permanently Cancel {{name}}?", {
960
469
  name
961
- }), t("Failed to cancel"));
470
+ })))) return;
471
+ await form.cancelDocument();
962
472
  };
963
473
  var handleAmend = function handleAmend2() {
964
- if (!meta || !name || !onAmend || !rights.amend) return;
965
- var draft = (0, import_docLifecycle.buildAmendValues)(meta.fields, localDoc, name);
966
- (0, import_createPrefill.setCreatePrefill)(doctype, draft);
967
- onAmend(draft);
474
+ if (!onAmend) return;
475
+ var draft = form.amend();
476
+ if (draft) onAmend(draft);
968
477
  };
969
478
  var titleField = meta === null || meta === void 0 ? void 0 : meta.title_field;
970
479
  var titleValue = titleField ? localDoc[titleField] : void 0;
@@ -1026,27 +535,34 @@ function FrappeFormBody(param) {
1026
535
  }));
1027
536
  }
1028
537
  if (!children && metaError && !meta && !name) {
1029
- return frame(/* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
538
+ return frame((0, import_liveErrors.isPermissionError)(metaError) ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.EmptyState, {
539
+ testID: "frappe-form-not-permitted",
540
+ title: t("You can't create {{doctype}}", {
541
+ doctype
542
+ }),
543
+ description: metaError.message
544
+ }) : /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.AsyncBoundary, {
1030
545
  ...knobProps.panelPadding,
1031
- alignItems: "center",
1032
- ...knobProps.gap,
1033
- children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
1034
- color: import_forms.formCommonColors.error,
1035
- ...knobProps.body,
1036
- children: t("Failed to load {{doctype}} form", {
1037
- doctype
1038
- })
1039
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
1040
- color: import_forms.formCommonColors.muted,
1041
- ...knobProps.body,
1042
- children: metaError.message
1043
- })]
546
+ error: metaError,
547
+ errorTitle: t("Failed to load {{doctype}} form", {
548
+ doctype
549
+ })
1044
550
  }));
1045
551
  }
1046
- var isDocReading = Boolean(name) && (!docCollection || Boolean(liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.isLoading));
1047
- var showsSeed = Boolean(seedDoc) && isDocReading;
1048
- if (name && docError && !(liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.data) && !wasDeleted) {
552
+ if (name && form.status === "error" && docError) {
1049
553
  if (errorFallback !== void 0) return frame(errorFallback);
554
+ if ((0, import_liveErrors.isPermissionError)(docError)) {
555
+ return frame(/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.EmptyState, {
556
+ testID: "frappe-form-not-permitted",
557
+ title: t("You can't open {{doctype}} {{name}}", {
558
+ doctype,
559
+ name
560
+ }),
561
+ description: t("Your session can't read this {{doctype}}.", {
562
+ doctype
563
+ })
564
+ }));
565
+ }
1050
566
  return frame(/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.AsyncBoundary, {
1051
567
  ...knobProps.panelPadding,
1052
568
  error: docError,
@@ -1055,7 +571,7 @@ function FrappeFormBody(param) {
1055
571
  })
1056
572
  }));
1057
573
  }
1058
- if (name && isDocReading && !showsSeed && !wasDeleted) {
574
+ if (name && form.status === "loading") {
1059
575
  if (loadingFallback !== void 0) return frame(loadingFallback);
1060
576
  return frame(/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
1061
577
  ...knobProps.panelPadding,
@@ -1065,7 +581,7 @@ function FrappeFormBody(param) {
1065
581
  })
1066
582
  }));
1067
583
  }
1068
- if (name && !isDocReading && !(liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.data) && !wasDeleted) {
584
+ if (name && form.status === "notFound") {
1069
585
  if (notFoundFallback !== void 0) return frame(notFoundFallback);
1070
586
  return frame(/* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
1071
587
  ...knobProps.panelPadding,
@@ -1115,7 +631,7 @@ function FrappeFormBody(param) {
1115
631
  var toolbarShown = showToolbar && !readsWithoutMeta && Boolean(indicator || docAction || showDelete || showEdit || showClose);
1116
632
  var shownTabs = formTabs !== null && formTabs !== void 0 ? formTabs : recordTabs;
1117
633
  var imageFieldName = meta === null || meta === void 0 ? void 0 : meta.image_field;
1118
- var sidebarImageUrl = imageFieldName ? resolveFileUrl(localDoc[imageFieldName], finalBaseURL) : void 0;
634
+ var sidebarImageUrl = imageFieldName ? resolveFileUrl(localDoc[imageFieldName], frappeConfig === null || frappeConfig === void 0 ? void 0 : frappeConfig.baseURL) : void 0;
1119
635
  var conflictLabels = conflictFields.map(function (fieldname) {
1120
636
  var field = meta === null || meta === void 0 ? void 0 : meta.fields.find(function (metaField) {
1121
637
  return metaField.fieldname === fieldname;
@@ -1123,25 +639,27 @@ function FrappeFormBody(param) {
1123
639
  return (field === null || field === void 0 ? void 0 : field.label) || fieldname;
1124
640
  }).join(", ");
1125
641
  var formTabItems = (shownTabs !== null && shownTabs !== void 0 ? shownTabs : []).map(function (tab) {
642
+ var content = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_schemaForm.SchemaForm, {
643
+ schema: tab.schema,
644
+ doc: localDoc,
645
+ setValue: function setValue1(field, value) {
646
+ return setValue(field, value);
647
+ },
648
+ errors,
649
+ disabled: fieldsDisabled,
650
+ overrides,
651
+ readOnlyFields,
652
+ sectionHeadingLevel,
653
+ order,
654
+ renderFieldWrapper
655
+ });
1126
656
  return {
1127
657
  value: tab.key,
1128
658
  label: tab.label,
1129
- content: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_schemaForm.SchemaForm, {
1130
- schema: tab.schema,
1131
- doc: localDoc,
1132
- setValue: function setValue1(field, value) {
1133
- return setValue(field, value);
1134
- },
1135
- errors,
1136
- disabled: fieldsDisabled,
1137
- overrides,
1138
- readOnlyFields,
1139
- sectionHeadingLevel,
1140
- order
1141
- })
659
+ content: renderTab ? renderTab(tab, content) : content
1142
660
  };
1143
661
  });
1144
- var tabItems = showConnections && name && effectiveConnections.length > 0 ? [...formTabItems, {
662
+ var tabItems = [...formTabItems, ...(showConnections && name && frappeConfig && effectiveConnections.length > 0 ? [{
1145
663
  value: "__connections",
1146
664
  label: t("Connections"),
1147
665
  content: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FrappeFormConnections.FrappeFormConnections, {
@@ -1149,14 +667,14 @@ function FrappeFormBody(param) {
1149
667
  connections: effectiveConnections,
1150
668
  name
1151
669
  })
1152
- }] : formTabItems;
670
+ }] : []), ...(extraTabs !== null && extraTabs !== void 0 ? extraTabs : [])];
1153
671
  var effectiveTab = activeTab && tabItems.some(function (tab) {
1154
672
  return tab.value === activeTab;
1155
673
  }) ? activeTab : (_tabItems_ = tabItems[0]) === null || _tabItems_ === void 0 ? void 0 : _tabItems_.value;
1156
674
  var localName = localDoc.name;
1157
675
  var sidebar = showSidebar && name && meta ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FormSidebar.FormSidebar, {
1158
676
  imageUrl: sidebarImageUrl,
1159
- sections: buildSidebarSections(localDoc, shareRows, t, assignmentRows),
677
+ sections: buildSidebarSections(localDoc, form.shareRows, t, assignmentRows),
1160
678
  metadata: mapDocToSidebarMetadata(localDoc, t)
1161
679
  }) : void 0;
1162
680
  return frame(
@@ -1170,16 +688,16 @@ function FrappeFormBody(param) {
1170
688
  flexGrow: 1,
1171
689
  flexShrink: 1,
1172
690
  flexBasis: "auto",
1173
- children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FrappeReconnectIndicator.FrappeReconnectIndicator, {
691
+ children: [frappeConfig ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FrappeReconnectIndicator.FrappeReconnectIndicator, {
1174
692
  config: frappeConfig
1175
- }), connectionReads.map(function (read) {
693
+ }) : null, frappeConfig ? connectionReads.map(function (read) {
1176
694
  return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FrappeRowsReader.FrappeRowsReader, {
1177
695
  connection: frappeConfig,
1178
696
  doctype: read.link.doctype,
1179
697
  options: read.options,
1180
698
  onChange: read.onChange
1181
699
  }, read.link.doctype);
1182
- }), wasDeleted && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
700
+ }) : null, showBanners && wasDeleted && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
1183
701
  role: "alert",
1184
702
  alignItems: "center",
1185
703
  ...knobProps.containerRadius,
@@ -1195,7 +713,7 @@ function FrappeFormBody(param) {
1195
713
  doctype
1196
714
  })
1197
715
  })
1198
- }), !wasDeleted && conflictFields.length > 0 && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
716
+ }), showBanners && !wasDeleted && conflictFields.length > 0 && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
1199
717
  role: "status",
1200
718
  alignItems: "center",
1201
719
  ...knobProps.containerRadius,
@@ -1252,7 +770,7 @@ function FrappeFormBody(param) {
1252
770
  value: effectiveTab,
1253
771
  onChange: setActiveTab,
1254
772
  lazyMount: true
1255
- }) : (_ref1 = (_tabItems_1 = tabItems[0]) === null || _tabItems_1 === void 0 ? void 0 : _tabItems_1.content) !== null && _ref1 !== void 0 ? _ref1 : null]
773
+ }) : (_ref = (_tabItems_1 = tabItems[0]) === null || _tabItems_1 === void 0 ? void 0 : _tabItems_1.content) !== null && _ref !== void 0 ? _ref : null]
1256
774
  }) :
1257
775
  // Metadata unavailable (should be covered by metaError branch above)
1258
776
  /* @__PURE__ */
@@ -1267,6 +785,7 @@ function FrappeFormBody(param) {
1267
785
  }), errors.general && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
1268
786
  color: import_forms.formCommonColors.error,
1269
787
  ...knobProps.body,
788
+ role: "alert",
1270
789
  children: errors.general
1271
790
  }), toolbarShown && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FrappeFormActions.FrappeFormActions, {
1272
791
  indicator,