@multiplatform.one/backoffice 7.34.3 → 7.35.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 (867) hide show
  1. package/dist/cjs/chrome/BackofficeAwesomebar.cjs +14 -7
  2. package/dist/cjs/chrome/BackofficeAwesomebar.native.js +14 -7
  3. package/dist/cjs/chrome/BackofficeAwesomebar.native.js.map +1 -1
  4. package/dist/cjs/chrome/CommandPalette.cjs +23 -17
  5. package/dist/cjs/chrome/CommandPalette.native.js +25 -17
  6. package/dist/cjs/chrome/CommandPalette.native.js.map +1 -1
  7. package/dist/cjs/chrome/NotificationsButton.cjs +3 -1
  8. package/dist/cjs/chrome/NotificationsButton.native.js +3 -1
  9. package/dist/cjs/chrome/NotificationsButton.native.js.map +1 -1
  10. package/dist/cjs/chrome/UserMenu.cjs +144 -78
  11. package/dist/cjs/chrome/UserMenu.native.js +158 -91
  12. package/dist/cjs/chrome/UserMenu.native.js.map +1 -1
  13. package/dist/cjs/chrome/awesomebar-data.cjs +45 -18
  14. package/dist/cjs/chrome/awesomebar-data.native.js +45 -17
  15. package/dist/cjs/chrome/awesomebar-data.native.js.map +1 -1
  16. package/dist/cjs/chrome/command-palette-model.cjs +8 -7
  17. package/dist/cjs/chrome/command-palette-model.native.js +10 -7
  18. package/dist/cjs/chrome/command-palette-model.native.js.map +1 -1
  19. package/dist/cjs/chrome/notifications-data.cjs +2 -38
  20. package/dist/cjs/chrome/notifications-data.native.js +2 -39
  21. package/dist/cjs/chrome/notifications-data.native.js.map +1 -1
  22. package/dist/cjs/chrome/notifications-panel.cjs +3 -4
  23. package/dist/cjs/chrome/notifications-panel.native.js +3 -4
  24. package/dist/cjs/chrome/notifications-panel.native.js.map +1 -1
  25. package/dist/cjs/chrome/user-session.cjs +20 -11
  26. package/dist/cjs/chrome/user-session.native.js +21 -13
  27. package/dist/cjs/chrome/user-session.native.js.map +1 -1
  28. package/dist/cjs/config/BackofficeProvider.cjs +3 -1
  29. package/dist/cjs/config/BackofficeProvider.native.js +3 -1
  30. package/dist/cjs/config/BackofficeProvider.native.js.map +1 -1
  31. package/dist/cjs/config/capabilities.cjs +3 -0
  32. package/dist/cjs/config/capabilities.native.js +3 -0
  33. package/dist/cjs/config/capabilities.native.js.map +1 -1
  34. package/dist/cjs/desk/Desk.cjs +17 -0
  35. package/dist/cjs/desk/Desk.native.js +17 -0
  36. package/dist/cjs/desk/Desk.native.js.map +1 -1
  37. package/dist/cjs/desk/DeskSurface.cjs +10 -0
  38. package/dist/cjs/desk/DeskSurface.native.js +10 -0
  39. package/dist/cjs/desk/DeskSurface.native.js.map +1 -1
  40. package/dist/cjs/desk/resolveDeskPath.cjs +6 -0
  41. package/dist/cjs/desk/resolveDeskPath.native.js +6 -0
  42. package/dist/cjs/desk/resolveDeskPath.native.js.map +1 -1
  43. package/dist/cjs/desk/target.cjs +5 -0
  44. package/dist/cjs/desk/target.native.js +5 -0
  45. package/dist/cjs/desk/target.native.js.map +1 -1
  46. package/dist/cjs/form/DocFormScreen.cjs +24 -3
  47. package/dist/cjs/form/DocFormScreen.native.js +27 -6
  48. package/dist/cjs/form/DocFormScreen.native.js.map +1 -1
  49. package/dist/cjs/form/FormConnections.cjs +2 -2
  50. package/dist/cjs/form/FormConnections.native.js +2 -2
  51. package/dist/cjs/form/FormConnections.native.js.map +1 -1
  52. package/dist/cjs/form/FormErrorBoundary.cjs +1 -1
  53. package/dist/cjs/form/FormErrorBoundary.native.js +1 -1
  54. package/dist/cjs/form/FormErrorBoundary.native.js.map +1 -1
  55. package/dist/cjs/form/FormSidebarPanel.cjs +1 -1
  56. package/dist/cjs/form/FormSidebarPanel.native.js +1 -1
  57. package/dist/cjs/form/FormSidebarPanel.native.js.map +1 -1
  58. package/dist/cjs/form/FormTimeline.cjs +1 -2
  59. package/dist/cjs/form/FormTimeline.native.js +1 -2
  60. package/dist/cjs/form/FormTimeline.native.js.map +1 -1
  61. package/dist/cjs/form/FormToolbar.cjs +97 -87
  62. package/dist/cjs/form/FormToolbar.native.js +98 -94
  63. package/dist/cjs/form/FormToolbar.native.js.map +1 -1
  64. package/dist/cjs/formBuilder/DoctypePicker.cjs +89 -0
  65. package/dist/cjs/formBuilder/DoctypePicker.native.js +98 -0
  66. package/dist/cjs/formBuilder/DoctypePicker.native.js.map +1 -0
  67. package/dist/cjs/formBuilder/FieldPalette.cjs +148 -0
  68. package/dist/cjs/formBuilder/FieldPalette.native.js +165 -0
  69. package/dist/cjs/formBuilder/FieldPalette.native.js.map +1 -0
  70. package/dist/cjs/formBuilder/FieldPropertiesPanel.cjs +186 -0
  71. package/dist/cjs/formBuilder/FieldPropertiesPanel.native.js +237 -0
  72. package/dist/cjs/formBuilder/FieldPropertiesPanel.native.js.map +1 -0
  73. package/dist/cjs/formBuilder/FormBuilderCanvas.cjs +407 -0
  74. package/dist/cjs/formBuilder/FormBuilderCanvas.native.js +472 -0
  75. package/dist/cjs/formBuilder/FormBuilderCanvas.native.js.map +1 -0
  76. package/dist/cjs/formBuilder/FormBuilderScreen.cjs +448 -0
  77. package/dist/cjs/formBuilder/FormBuilderScreen.native.js +537 -0
  78. package/dist/cjs/formBuilder/FormBuilderScreen.native.js.map +1 -0
  79. package/dist/cjs/formBuilder/api.cjs +160 -0
  80. package/dist/cjs/formBuilder/api.native.js +193 -0
  81. package/dist/cjs/formBuilder/api.native.js.map +1 -0
  82. package/dist/cjs/formBuilder/fieldtypes.cjs +114 -0
  83. package/dist/cjs/formBuilder/fieldtypes.native.js +133 -0
  84. package/dist/cjs/formBuilder/fieldtypes.native.js.map +1 -0
  85. package/dist/cjs/formBuilder/index.cjs +68 -0
  86. package/dist/cjs/formBuilder/index.native.js +71 -0
  87. package/dist/cjs/formBuilder/index.native.js.map +1 -0
  88. package/dist/cjs/formBuilder/model.cjs +466 -0
  89. package/dist/cjs/formBuilder/model.native.js +714 -0
  90. package/dist/cjs/formBuilder/model.native.js.map +1 -0
  91. package/dist/cjs/formBuilder/useFormBuilderDrag.cjs +399 -0
  92. package/dist/cjs/formBuilder/useFormBuilderDrag.native.js +434 -0
  93. package/dist/cjs/formBuilder/useFormBuilderDrag.native.js.map +1 -0
  94. package/dist/cjs/i18n/en.cjs +294 -4
  95. package/dist/cjs/i18n/en.native.js +294 -4
  96. package/dist/cjs/i18n/en.native.js.map +1 -1
  97. package/dist/cjs/index.cjs +41 -1
  98. package/dist/cjs/index.native.js +40 -0
  99. package/dist/cjs/index.native.js.map +1 -1
  100. package/dist/cjs/list/DoctypeListScreen.cjs +147 -43
  101. package/dist/cjs/list/DoctypeListScreen.native.js +164 -56
  102. package/dist/cjs/list/DoctypeListScreen.native.js.map +1 -1
  103. package/dist/cjs/list/ListFilterBar.cjs +8 -4
  104. package/dist/cjs/list/ListFilterBar.native.js +8 -4
  105. package/dist/cjs/list/ListFilterBar.native.js.map +1 -1
  106. package/dist/cjs/list/ListSidebar.cjs +4 -3
  107. package/dist/cjs/list/ListSidebar.native.js +4 -3
  108. package/dist/cjs/list/ListSidebar.native.js.map +1 -1
  109. package/dist/cjs/list/filter-chips.cjs +10 -4
  110. package/dist/cjs/list/filter-chips.native.js +10 -4
  111. package/dist/cjs/list/filter-chips.native.js.map +1 -1
  112. package/dist/cjs/list/filter-editor.cjs +1 -10
  113. package/dist/cjs/list/filter-editor.native.js +1 -10
  114. package/dist/cjs/list/filter-editor.native.js.map +1 -1
  115. package/dist/cjs/list/filter-saved.cjs +0 -1
  116. package/dist/cjs/list/filter-saved.native.js +0 -1
  117. package/dist/cjs/list/filter-saved.native.js.map +1 -1
  118. package/dist/cjs/list/filter-sort.cjs +0 -1
  119. package/dist/cjs/list/filter-sort.native.js +0 -1
  120. package/dist/cjs/list/filter-sort.native.js.map +1 -1
  121. package/dist/cjs/list/filter-standard.cjs +1 -3
  122. package/dist/cjs/list/filter-standard.native.js +1 -3
  123. package/dist/cjs/list/filter-standard.native.js.map +1 -1
  124. package/dist/cjs/list/list-tools-sheet.cjs +10 -3
  125. package/dist/cjs/list/list-tools-sheet.native.js +12 -3
  126. package/dist/cjs/list/list-tools-sheet.native.js.map +1 -1
  127. package/dist/cjs/navigation/paths.cjs +5 -0
  128. package/dist/cjs/navigation/paths.native.js +7 -0
  129. package/dist/cjs/navigation/paths.native.js.map +1 -1
  130. package/dist/cjs/report/QueryReportScreen.cjs +1 -1
  131. package/dist/cjs/report/QueryReportScreen.native.js +1 -1
  132. package/dist/cjs/report/QueryReportScreen.native.js.map +1 -1
  133. package/dist/cjs/report/queryReportFilterBar.cjs +3 -8
  134. package/dist/cjs/report/queryReportFilterBar.native.js +3 -8
  135. package/dist/cjs/report/queryReportFilterBar.native.js.map +1 -1
  136. package/dist/cjs/shared/sessionUser.cjs +107 -0
  137. package/dist/cjs/shared/sessionUser.native.js +137 -0
  138. package/dist/cjs/shared/sessionUser.native.js.map +1 -0
  139. package/dist/cjs/shared/useSessionUserId.cjs +2 -26
  140. package/dist/cjs/shared/useSessionUserId.native.js +2 -28
  141. package/dist/cjs/shared/useSessionUserId.native.js.map +1 -1
  142. package/dist/cjs/shell/BackofficeShell.cjs +129 -86
  143. package/dist/cjs/shell/BackofficeShell.native.js +146 -99
  144. package/dist/cjs/shell/BackofficeShell.native.js.map +1 -1
  145. package/dist/cjs/shell/HomeRedirect.cjs +17 -21
  146. package/dist/cjs/shell/HomeRedirect.native.js +17 -20
  147. package/dist/cjs/shell/HomeRedirect.native.js.map +1 -1
  148. package/dist/cjs/shell/WorkspaceSidebar.cjs +53 -25
  149. package/dist/cjs/shell/WorkspaceSidebar.native.js +55 -25
  150. package/dist/cjs/shell/WorkspaceSidebar.native.js.map +1 -1
  151. package/dist/cjs/shell/shellSidebarSlot.cjs +31 -0
  152. package/dist/cjs/shell/shellSidebarSlot.native.js +34 -0
  153. package/dist/cjs/shell/shellSidebarSlot.native.js.map +1 -0
  154. package/dist/cjs/shell/useWorkspaces.cjs +25 -37
  155. package/dist/cjs/shell/useWorkspaces.native.js +27 -41
  156. package/dist/cjs/shell/useWorkspaces.native.js.map +1 -1
  157. package/dist/cjs/views/DashboardView.cjs +2 -2
  158. package/dist/cjs/views/DashboardView.native.js +2 -2
  159. package/dist/cjs/views/DashboardView.native.js.map +1 -1
  160. package/dist/cjs/views/ImageView.cjs +14 -5
  161. package/dist/cjs/views/ImageView.native.js +14 -5
  162. package/dist/cjs/views/ImageView.native.js.map +1 -1
  163. package/dist/cjs/views/ViewHeader.cjs +17 -6
  164. package/dist/cjs/views/ViewHeader.native.js +17 -6
  165. package/dist/cjs/views/ViewHeader.native.js.map +1 -1
  166. package/dist/cjs/views/ViewSwitcherMenu.cjs +10 -9
  167. package/dist/cjs/views/ViewSwitcherMenu.native.js +10 -9
  168. package/dist/cjs/views/ViewSwitcherMenu.native.js.map +1 -1
  169. package/dist/cjs/views/viewAvailability.cjs +17 -9
  170. package/dist/cjs/views/viewAvailability.native.js +18 -8
  171. package/dist/cjs/views/viewAvailability.native.js.map +1 -1
  172. package/dist/cjs/views/viewMeta.cjs +24 -1
  173. package/dist/cjs/views/viewMeta.native.js +30 -1
  174. package/dist/cjs/views/viewMeta.native.js.map +1 -1
  175. package/dist/cjs/workspace/WorkspaceChartBlock.cjs +1 -1
  176. package/dist/cjs/workspace/WorkspaceChartBlock.native.js +1 -1
  177. package/dist/cjs/workspace/WorkspaceChartBlock.native.js.map +1 -1
  178. package/dist/cjs/workspace/WorkspaceLinkDirectory.cjs +2 -2
  179. package/dist/cjs/workspace/WorkspaceLinkDirectory.native.js +2 -2
  180. package/dist/cjs/workspace/WorkspaceLinkDirectory.native.js.map +1 -1
  181. package/dist/cjs/workspace/WorkspaceRecents.cjs +1 -1
  182. package/dist/cjs/workspace/WorkspaceRecents.native.js +1 -1
  183. package/dist/cjs/workspace/WorkspaceRecents.native.js.map +1 -1
  184. package/dist/cjs/workspace/WorkspaceShortcut.cjs +1 -1
  185. package/dist/cjs/workspace/WorkspaceShortcut.native.js +1 -1
  186. package/dist/cjs/workspace/WorkspaceShortcut.native.js.map +1 -1
  187. package/dist/esm/chrome/BackofficeAwesomebar.mjs +15 -8
  188. package/dist/esm/chrome/BackofficeAwesomebar.mjs.map +1 -1
  189. package/dist/esm/chrome/BackofficeAwesomebar.native.js +15 -8
  190. package/dist/esm/chrome/BackofficeAwesomebar.native.js.map +1 -1
  191. package/dist/esm/chrome/CommandPalette.mjs +25 -19
  192. package/dist/esm/chrome/CommandPalette.mjs.map +1 -1
  193. package/dist/esm/chrome/CommandPalette.native.js +27 -19
  194. package/dist/esm/chrome/CommandPalette.native.js.map +1 -1
  195. package/dist/esm/chrome/NotificationsButton.mjs +4 -2
  196. package/dist/esm/chrome/NotificationsButton.mjs.map +1 -1
  197. package/dist/esm/chrome/NotificationsButton.native.js +4 -2
  198. package/dist/esm/chrome/NotificationsButton.native.js.map +1 -1
  199. package/dist/esm/chrome/UserMenu.mjs +146 -80
  200. package/dist/esm/chrome/UserMenu.mjs.map +1 -1
  201. package/dist/esm/chrome/UserMenu.native.js +160 -93
  202. package/dist/esm/chrome/UserMenu.native.js.map +1 -1
  203. package/dist/esm/chrome/awesomebar-data.mjs +45 -18
  204. package/dist/esm/chrome/awesomebar-data.mjs.map +1 -1
  205. package/dist/esm/chrome/awesomebar-data.native.js +45 -17
  206. package/dist/esm/chrome/awesomebar-data.native.js.map +1 -1
  207. package/dist/esm/chrome/command-palette-model.mjs +8 -7
  208. package/dist/esm/chrome/command-palette-model.mjs.map +1 -1
  209. package/dist/esm/chrome/command-palette-model.native.js +10 -7
  210. package/dist/esm/chrome/command-palette-model.native.js.map +1 -1
  211. package/dist/esm/chrome/notifications-data.mjs +3 -39
  212. package/dist/esm/chrome/notifications-data.mjs.map +1 -1
  213. package/dist/esm/chrome/notifications-data.native.js +3 -40
  214. package/dist/esm/chrome/notifications-data.native.js.map +1 -1
  215. package/dist/esm/chrome/notifications-panel.mjs +4 -5
  216. package/dist/esm/chrome/notifications-panel.mjs.map +1 -1
  217. package/dist/esm/chrome/notifications-panel.native.js +4 -5
  218. package/dist/esm/chrome/notifications-panel.native.js.map +1 -1
  219. package/dist/esm/chrome/user-session.mjs +20 -11
  220. package/dist/esm/chrome/user-session.mjs.map +1 -1
  221. package/dist/esm/chrome/user-session.native.js +21 -13
  222. package/dist/esm/chrome/user-session.native.js.map +1 -1
  223. package/dist/esm/config/BackofficeProvider.mjs +3 -1
  224. package/dist/esm/config/BackofficeProvider.mjs.map +1 -1
  225. package/dist/esm/config/BackofficeProvider.native.js +3 -1
  226. package/dist/esm/config/BackofficeProvider.native.js.map +1 -1
  227. package/dist/esm/config/capabilities.mjs +3 -0
  228. package/dist/esm/config/capabilities.mjs.map +1 -1
  229. package/dist/esm/config/capabilities.native.js +3 -0
  230. package/dist/esm/config/capabilities.native.js.map +1 -1
  231. package/dist/esm/desk/Desk.mjs +17 -0
  232. package/dist/esm/desk/Desk.mjs.map +1 -1
  233. package/dist/esm/desk/Desk.native.js +17 -0
  234. package/dist/esm/desk/Desk.native.js.map +1 -1
  235. package/dist/esm/desk/DeskSurface.mjs +10 -0
  236. package/dist/esm/desk/DeskSurface.mjs.map +1 -1
  237. package/dist/esm/desk/DeskSurface.native.js +10 -0
  238. package/dist/esm/desk/DeskSurface.native.js.map +1 -1
  239. package/dist/esm/desk/resolveDeskPath.mjs +6 -0
  240. package/dist/esm/desk/resolveDeskPath.mjs.map +1 -1
  241. package/dist/esm/desk/resolveDeskPath.native.js +6 -0
  242. package/dist/esm/desk/resolveDeskPath.native.js.map +1 -1
  243. package/dist/esm/desk/target.mjs +5 -0
  244. package/dist/esm/desk/target.mjs.map +1 -1
  245. package/dist/esm/desk/target.native.js +5 -0
  246. package/dist/esm/desk/target.native.js.map +1 -1
  247. package/dist/esm/form/DocFormScreen.mjs +24 -3
  248. package/dist/esm/form/DocFormScreen.mjs.map +1 -1
  249. package/dist/esm/form/DocFormScreen.native.js +27 -6
  250. package/dist/esm/form/DocFormScreen.native.js.map +1 -1
  251. package/dist/esm/form/FormConnections.mjs +2 -2
  252. package/dist/esm/form/FormConnections.mjs.map +1 -1
  253. package/dist/esm/form/FormConnections.native.js +2 -2
  254. package/dist/esm/form/FormConnections.native.js.map +1 -1
  255. package/dist/esm/form/FormErrorBoundary.mjs +1 -1
  256. package/dist/esm/form/FormErrorBoundary.mjs.map +1 -1
  257. package/dist/esm/form/FormErrorBoundary.native.js +1 -1
  258. package/dist/esm/form/FormErrorBoundary.native.js.map +1 -1
  259. package/dist/esm/form/FormSidebarPanel.mjs +1 -1
  260. package/dist/esm/form/FormSidebarPanel.mjs.map +1 -1
  261. package/dist/esm/form/FormSidebarPanel.native.js +1 -1
  262. package/dist/esm/form/FormSidebarPanel.native.js.map +1 -1
  263. package/dist/esm/form/FormTimeline.mjs +1 -2
  264. package/dist/esm/form/FormTimeline.mjs.map +1 -1
  265. package/dist/esm/form/FormTimeline.native.js +1 -2
  266. package/dist/esm/form/FormTimeline.native.js.map +1 -1
  267. package/dist/esm/form/FormToolbar.mjs +99 -89
  268. package/dist/esm/form/FormToolbar.mjs.map +1 -1
  269. package/dist/esm/form/FormToolbar.native.js +100 -96
  270. package/dist/esm/form/FormToolbar.native.js.map +1 -1
  271. package/dist/esm/formBuilder/DoctypePicker.mjs +64 -0
  272. package/dist/esm/formBuilder/DoctypePicker.mjs.map +1 -0
  273. package/dist/esm/formBuilder/DoctypePicker.native.js +70 -0
  274. package/dist/esm/formBuilder/DoctypePicker.native.js.map +1 -0
  275. package/dist/esm/formBuilder/FieldPalette.mjs +123 -0
  276. package/dist/esm/formBuilder/FieldPalette.mjs.map +1 -0
  277. package/dist/esm/formBuilder/FieldPalette.native.js +137 -0
  278. package/dist/esm/formBuilder/FieldPalette.native.js.map +1 -0
  279. package/dist/esm/formBuilder/FieldPropertiesPanel.mjs +161 -0
  280. package/dist/esm/formBuilder/FieldPropertiesPanel.mjs.map +1 -0
  281. package/dist/esm/formBuilder/FieldPropertiesPanel.native.js +209 -0
  282. package/dist/esm/formBuilder/FieldPropertiesPanel.native.js.map +1 -0
  283. package/dist/esm/formBuilder/FormBuilderCanvas.mjs +382 -0
  284. package/dist/esm/formBuilder/FormBuilderCanvas.mjs.map +1 -0
  285. package/dist/esm/formBuilder/FormBuilderCanvas.native.js +444 -0
  286. package/dist/esm/formBuilder/FormBuilderCanvas.native.js.map +1 -0
  287. package/dist/esm/formBuilder/FormBuilderScreen.mjs +423 -0
  288. package/dist/esm/formBuilder/FormBuilderScreen.mjs.map +1 -0
  289. package/dist/esm/formBuilder/FormBuilderScreen.native.js +509 -0
  290. package/dist/esm/formBuilder/FormBuilderScreen.native.js.map +1 -0
  291. package/dist/esm/formBuilder/api.mjs +129 -0
  292. package/dist/esm/formBuilder/api.mjs.map +1 -0
  293. package/dist/esm/formBuilder/api.native.js +159 -0
  294. package/dist/esm/formBuilder/api.native.js.map +1 -0
  295. package/dist/esm/formBuilder/fieldtypes.mjs +82 -0
  296. package/dist/esm/formBuilder/fieldtypes.mjs.map +1 -0
  297. package/dist/esm/formBuilder/fieldtypes.native.js +98 -0
  298. package/dist/esm/formBuilder/fieldtypes.native.js.map +1 -0
  299. package/dist/esm/formBuilder/index.mjs +6 -0
  300. package/dist/esm/formBuilder/index.mjs.map +1 -0
  301. package/dist/esm/formBuilder/index.native.js +6 -0
  302. package/dist/esm/formBuilder/index.native.js.map +1 -0
  303. package/dist/esm/formBuilder/model.mjs +420 -0
  304. package/dist/esm/formBuilder/model.mjs.map +1 -0
  305. package/dist/esm/formBuilder/model.native.js +665 -0
  306. package/dist/esm/formBuilder/model.native.js.map +1 -0
  307. package/dist/esm/formBuilder/useFormBuilderDrag.mjs +374 -0
  308. package/dist/esm/formBuilder/useFormBuilderDrag.mjs.map +1 -0
  309. package/dist/esm/formBuilder/useFormBuilderDrag.native.js +406 -0
  310. package/dist/esm/formBuilder/useFormBuilderDrag.native.js.map +1 -0
  311. package/dist/esm/i18n/en.mjs +294 -4
  312. package/dist/esm/i18n/en.mjs.map +1 -1
  313. package/dist/esm/i18n/en.native.js +294 -4
  314. package/dist/esm/i18n/en.native.js.map +1 -1
  315. package/dist/esm/index.mjs +3 -2
  316. package/dist/esm/index.mjs.map +1 -1
  317. package/dist/esm/index.native.js +3 -2
  318. package/dist/esm/index.native.js.map +1 -1
  319. package/dist/esm/list/DoctypeListScreen.mjs +150 -46
  320. package/dist/esm/list/DoctypeListScreen.mjs.map +1 -1
  321. package/dist/esm/list/DoctypeListScreen.native.js +167 -59
  322. package/dist/esm/list/DoctypeListScreen.native.js.map +1 -1
  323. package/dist/esm/list/ListFilterBar.mjs +9 -5
  324. package/dist/esm/list/ListFilterBar.mjs.map +1 -1
  325. package/dist/esm/list/ListFilterBar.native.js +9 -5
  326. package/dist/esm/list/ListFilterBar.native.js.map +1 -1
  327. package/dist/esm/list/ListSidebar.mjs +4 -3
  328. package/dist/esm/list/ListSidebar.mjs.map +1 -1
  329. package/dist/esm/list/ListSidebar.native.js +4 -3
  330. package/dist/esm/list/ListSidebar.native.js.map +1 -1
  331. package/dist/esm/list/filter-chips.mjs +10 -4
  332. package/dist/esm/list/filter-chips.mjs.map +1 -1
  333. package/dist/esm/list/filter-chips.native.js +10 -4
  334. package/dist/esm/list/filter-chips.native.js.map +1 -1
  335. package/dist/esm/list/filter-editor.mjs +1 -10
  336. package/dist/esm/list/filter-editor.mjs.map +1 -1
  337. package/dist/esm/list/filter-editor.native.js +1 -10
  338. package/dist/esm/list/filter-editor.native.js.map +1 -1
  339. package/dist/esm/list/filter-saved.mjs +0 -1
  340. package/dist/esm/list/filter-saved.mjs.map +1 -1
  341. package/dist/esm/list/filter-saved.native.js +0 -1
  342. package/dist/esm/list/filter-saved.native.js.map +1 -1
  343. package/dist/esm/list/filter-sort.mjs +0 -1
  344. package/dist/esm/list/filter-sort.mjs.map +1 -1
  345. package/dist/esm/list/filter-sort.native.js +0 -1
  346. package/dist/esm/list/filter-sort.native.js.map +1 -1
  347. package/dist/esm/list/filter-standard.mjs +1 -3
  348. package/dist/esm/list/filter-standard.mjs.map +1 -1
  349. package/dist/esm/list/filter-standard.native.js +1 -3
  350. package/dist/esm/list/filter-standard.native.js.map +1 -1
  351. package/dist/esm/list/list-tools-sheet.mjs +10 -3
  352. package/dist/esm/list/list-tools-sheet.mjs.map +1 -1
  353. package/dist/esm/list/list-tools-sheet.native.js +12 -3
  354. package/dist/esm/list/list-tools-sheet.native.js.map +1 -1
  355. package/dist/esm/navigation/paths.mjs +5 -1
  356. package/dist/esm/navigation/paths.mjs.map +1 -1
  357. package/dist/esm/navigation/paths.native.js +7 -1
  358. package/dist/esm/navigation/paths.native.js.map +1 -1
  359. package/dist/esm/report/QueryReportScreen.mjs +1 -1
  360. package/dist/esm/report/QueryReportScreen.mjs.map +1 -1
  361. package/dist/esm/report/QueryReportScreen.native.js +1 -1
  362. package/dist/esm/report/QueryReportScreen.native.js.map +1 -1
  363. package/dist/esm/report/queryReportFilterBar.mjs +3 -8
  364. package/dist/esm/report/queryReportFilterBar.mjs.map +1 -1
  365. package/dist/esm/report/queryReportFilterBar.native.js +3 -8
  366. package/dist/esm/report/queryReportFilterBar.native.js.map +1 -1
  367. package/dist/esm/shared/sessionUser.mjs +78 -0
  368. package/dist/esm/shared/sessionUser.mjs.map +1 -0
  369. package/dist/esm/shared/sessionUser.native.js +105 -0
  370. package/dist/esm/shared/sessionUser.native.js.map +1 -0
  371. package/dist/esm/shared/useSessionUserId.mjs +2 -26
  372. package/dist/esm/shared/useSessionUserId.mjs.map +1 -1
  373. package/dist/esm/shared/useSessionUserId.native.js +2 -28
  374. package/dist/esm/shared/useSessionUserId.native.js.map +1 -1
  375. package/dist/esm/shell/BackofficeShell.mjs +132 -89
  376. package/dist/esm/shell/BackofficeShell.mjs.map +1 -1
  377. package/dist/esm/shell/BackofficeShell.native.js +149 -102
  378. package/dist/esm/shell/BackofficeShell.native.js.map +1 -1
  379. package/dist/esm/shell/HomeRedirect.mjs +20 -24
  380. package/dist/esm/shell/HomeRedirect.mjs.map +1 -1
  381. package/dist/esm/shell/HomeRedirect.native.js +20 -23
  382. package/dist/esm/shell/HomeRedirect.native.js.map +1 -1
  383. package/dist/esm/shell/WorkspaceSidebar.mjs +55 -27
  384. package/dist/esm/shell/WorkspaceSidebar.mjs.map +1 -1
  385. package/dist/esm/shell/WorkspaceSidebar.native.js +57 -27
  386. package/dist/esm/shell/WorkspaceSidebar.native.js.map +1 -1
  387. package/dist/esm/shell/shellSidebarSlot.mjs +3 -0
  388. package/dist/esm/shell/shellSidebarSlot.mjs.map +1 -0
  389. package/dist/esm/shell/shellSidebarSlot.native.js +3 -0
  390. package/dist/esm/shell/shellSidebarSlot.native.js.map +1 -0
  391. package/dist/esm/shell/useWorkspaces.mjs +28 -40
  392. package/dist/esm/shell/useWorkspaces.mjs.map +1 -1
  393. package/dist/esm/shell/useWorkspaces.native.js +30 -44
  394. package/dist/esm/shell/useWorkspaces.native.js.map +1 -1
  395. package/dist/esm/views/DashboardView.mjs +2 -2
  396. package/dist/esm/views/DashboardView.mjs.map +1 -1
  397. package/dist/esm/views/DashboardView.native.js +2 -2
  398. package/dist/esm/views/DashboardView.native.js.map +1 -1
  399. package/dist/esm/views/ImageView.mjs +15 -6
  400. package/dist/esm/views/ImageView.mjs.map +1 -1
  401. package/dist/esm/views/ImageView.native.js +15 -6
  402. package/dist/esm/views/ImageView.native.js.map +1 -1
  403. package/dist/esm/views/ViewHeader.mjs +18 -7
  404. package/dist/esm/views/ViewHeader.mjs.map +1 -1
  405. package/dist/esm/views/ViewHeader.native.js +18 -7
  406. package/dist/esm/views/ViewHeader.native.js.map +1 -1
  407. package/dist/esm/views/ViewSwitcherMenu.mjs +11 -10
  408. package/dist/esm/views/ViewSwitcherMenu.mjs.map +1 -1
  409. package/dist/esm/views/ViewSwitcherMenu.native.js +11 -10
  410. package/dist/esm/views/ViewSwitcherMenu.native.js.map +1 -1
  411. package/dist/esm/views/viewAvailability.mjs +17 -9
  412. package/dist/esm/views/viewAvailability.mjs.map +1 -1
  413. package/dist/esm/views/viewAvailability.native.js +18 -8
  414. package/dist/esm/views/viewAvailability.native.js.map +1 -1
  415. package/dist/esm/views/viewMeta.mjs +23 -1
  416. package/dist/esm/views/viewMeta.mjs.map +1 -1
  417. package/dist/esm/views/viewMeta.native.js +29 -1
  418. package/dist/esm/views/viewMeta.native.js.map +1 -1
  419. package/dist/esm/workspace/WorkspaceChartBlock.mjs +1 -1
  420. package/dist/esm/workspace/WorkspaceChartBlock.mjs.map +1 -1
  421. package/dist/esm/workspace/WorkspaceChartBlock.native.js +1 -1
  422. package/dist/esm/workspace/WorkspaceChartBlock.native.js.map +1 -1
  423. package/dist/esm/workspace/WorkspaceLinkDirectory.mjs +2 -2
  424. package/dist/esm/workspace/WorkspaceLinkDirectory.mjs.map +1 -1
  425. package/dist/esm/workspace/WorkspaceLinkDirectory.native.js +2 -2
  426. package/dist/esm/workspace/WorkspaceLinkDirectory.native.js.map +1 -1
  427. package/dist/esm/workspace/WorkspaceRecents.mjs +2 -2
  428. package/dist/esm/workspace/WorkspaceRecents.mjs.map +1 -1
  429. package/dist/esm/workspace/WorkspaceRecents.native.js +2 -2
  430. package/dist/esm/workspace/WorkspaceRecents.native.js.map +1 -1
  431. package/dist/esm/workspace/WorkspaceShortcut.mjs +2 -2
  432. package/dist/esm/workspace/WorkspaceShortcut.mjs.map +1 -1
  433. package/dist/esm/workspace/WorkspaceShortcut.native.js +2 -2
  434. package/dist/esm/workspace/WorkspaceShortcut.native.js.map +1 -1
  435. package/dist/jsx/chrome/BackofficeAwesomebar.mjs +15 -8
  436. package/dist/jsx/chrome/BackofficeAwesomebar.mjs.map +1 -1
  437. package/dist/jsx/chrome/BackofficeAwesomebar.native.js +14 -7
  438. package/dist/jsx/chrome/BackofficeAwesomebar.native.js.map +1 -1
  439. package/dist/jsx/chrome/CommandPalette.mjs +25 -19
  440. package/dist/jsx/chrome/CommandPalette.mjs.map +1 -1
  441. package/dist/jsx/chrome/CommandPalette.native.js +25 -17
  442. package/dist/jsx/chrome/CommandPalette.native.js.map +1 -1
  443. package/dist/jsx/chrome/NotificationsButton.mjs +4 -2
  444. package/dist/jsx/chrome/NotificationsButton.mjs.map +1 -1
  445. package/dist/jsx/chrome/NotificationsButton.native.js +3 -1
  446. package/dist/jsx/chrome/NotificationsButton.native.js.map +1 -1
  447. package/dist/jsx/chrome/UserMenu.mjs +146 -80
  448. package/dist/jsx/chrome/UserMenu.mjs.map +1 -1
  449. package/dist/jsx/chrome/UserMenu.native.js +158 -91
  450. package/dist/jsx/chrome/UserMenu.native.js.map +1 -1
  451. package/dist/jsx/chrome/awesomebar-data.mjs +45 -18
  452. package/dist/jsx/chrome/awesomebar-data.mjs.map +1 -1
  453. package/dist/jsx/chrome/awesomebar-data.native.js +45 -17
  454. package/dist/jsx/chrome/awesomebar-data.native.js.map +1 -1
  455. package/dist/jsx/chrome/command-palette-model.mjs +8 -7
  456. package/dist/jsx/chrome/command-palette-model.mjs.map +1 -1
  457. package/dist/jsx/chrome/command-palette-model.native.js +10 -7
  458. package/dist/jsx/chrome/command-palette-model.native.js.map +1 -1
  459. package/dist/jsx/chrome/notifications-data.mjs +3 -39
  460. package/dist/jsx/chrome/notifications-data.mjs.map +1 -1
  461. package/dist/jsx/chrome/notifications-data.native.js +2 -39
  462. package/dist/jsx/chrome/notifications-data.native.js.map +1 -1
  463. package/dist/jsx/chrome/notifications-panel.mjs +4 -5
  464. package/dist/jsx/chrome/notifications-panel.mjs.map +1 -1
  465. package/dist/jsx/chrome/notifications-panel.native.js +3 -4
  466. package/dist/jsx/chrome/notifications-panel.native.js.map +1 -1
  467. package/dist/jsx/chrome/user-session.mjs +20 -11
  468. package/dist/jsx/chrome/user-session.mjs.map +1 -1
  469. package/dist/jsx/chrome/user-session.native.js +21 -13
  470. package/dist/jsx/chrome/user-session.native.js.map +1 -1
  471. package/dist/jsx/config/BackofficeProvider.mjs +3 -1
  472. package/dist/jsx/config/BackofficeProvider.mjs.map +1 -1
  473. package/dist/jsx/config/BackofficeProvider.native.js +3 -1
  474. package/dist/jsx/config/BackofficeProvider.native.js.map +1 -1
  475. package/dist/jsx/config/capabilities.mjs +3 -0
  476. package/dist/jsx/config/capabilities.mjs.map +1 -1
  477. package/dist/jsx/config/capabilities.native.js +3 -0
  478. package/dist/jsx/config/capabilities.native.js.map +1 -1
  479. package/dist/jsx/desk/Desk.mjs +17 -0
  480. package/dist/jsx/desk/Desk.mjs.map +1 -1
  481. package/dist/jsx/desk/Desk.native.js +17 -0
  482. package/dist/jsx/desk/Desk.native.js.map +1 -1
  483. package/dist/jsx/desk/DeskSurface.mjs +10 -0
  484. package/dist/jsx/desk/DeskSurface.mjs.map +1 -1
  485. package/dist/jsx/desk/DeskSurface.native.js +10 -0
  486. package/dist/jsx/desk/DeskSurface.native.js.map +1 -1
  487. package/dist/jsx/desk/resolveDeskPath.mjs +6 -0
  488. package/dist/jsx/desk/resolveDeskPath.mjs.map +1 -1
  489. package/dist/jsx/desk/resolveDeskPath.native.js +6 -0
  490. package/dist/jsx/desk/resolveDeskPath.native.js.map +1 -1
  491. package/dist/jsx/desk/target.mjs +5 -0
  492. package/dist/jsx/desk/target.mjs.map +1 -1
  493. package/dist/jsx/desk/target.native.js +5 -0
  494. package/dist/jsx/desk/target.native.js.map +1 -1
  495. package/dist/jsx/form/DocFormScreen.mjs +24 -3
  496. package/dist/jsx/form/DocFormScreen.mjs.map +1 -1
  497. package/dist/jsx/form/DocFormScreen.native.js +27 -6
  498. package/dist/jsx/form/DocFormScreen.native.js.map +1 -1
  499. package/dist/jsx/form/FormConnections.mjs +2 -2
  500. package/dist/jsx/form/FormConnections.mjs.map +1 -1
  501. package/dist/jsx/form/FormConnections.native.js +2 -2
  502. package/dist/jsx/form/FormConnections.native.js.map +1 -1
  503. package/dist/jsx/form/FormErrorBoundary.mjs +1 -1
  504. package/dist/jsx/form/FormErrorBoundary.mjs.map +1 -1
  505. package/dist/jsx/form/FormErrorBoundary.native.js +1 -1
  506. package/dist/jsx/form/FormErrorBoundary.native.js.map +1 -1
  507. package/dist/jsx/form/FormSidebarPanel.mjs +1 -1
  508. package/dist/jsx/form/FormSidebarPanel.mjs.map +1 -1
  509. package/dist/jsx/form/FormSidebarPanel.native.js +1 -1
  510. package/dist/jsx/form/FormSidebarPanel.native.js.map +1 -1
  511. package/dist/jsx/form/FormTimeline.mjs +1 -2
  512. package/dist/jsx/form/FormTimeline.mjs.map +1 -1
  513. package/dist/jsx/form/FormTimeline.native.js +1 -2
  514. package/dist/jsx/form/FormTimeline.native.js.map +1 -1
  515. package/dist/jsx/form/FormToolbar.mjs +99 -89
  516. package/dist/jsx/form/FormToolbar.mjs.map +1 -1
  517. package/dist/jsx/form/FormToolbar.native.js +98 -94
  518. package/dist/jsx/form/FormToolbar.native.js.map +1 -1
  519. package/dist/jsx/formBuilder/DoctypePicker.mjs +64 -0
  520. package/dist/jsx/formBuilder/DoctypePicker.mjs.map +1 -0
  521. package/dist/jsx/formBuilder/DoctypePicker.native.js +98 -0
  522. package/dist/jsx/formBuilder/DoctypePicker.native.js.map +1 -0
  523. package/dist/jsx/formBuilder/FieldPalette.mjs +123 -0
  524. package/dist/jsx/formBuilder/FieldPalette.mjs.map +1 -0
  525. package/dist/jsx/formBuilder/FieldPalette.native.js +165 -0
  526. package/dist/jsx/formBuilder/FieldPalette.native.js.map +1 -0
  527. package/dist/jsx/formBuilder/FieldPropertiesPanel.mjs +161 -0
  528. package/dist/jsx/formBuilder/FieldPropertiesPanel.mjs.map +1 -0
  529. package/dist/jsx/formBuilder/FieldPropertiesPanel.native.js +237 -0
  530. package/dist/jsx/formBuilder/FieldPropertiesPanel.native.js.map +1 -0
  531. package/dist/jsx/formBuilder/FormBuilderCanvas.mjs +382 -0
  532. package/dist/jsx/formBuilder/FormBuilderCanvas.mjs.map +1 -0
  533. package/dist/jsx/formBuilder/FormBuilderCanvas.native.js +472 -0
  534. package/dist/jsx/formBuilder/FormBuilderCanvas.native.js.map +1 -0
  535. package/dist/jsx/formBuilder/FormBuilderScreen.mjs +423 -0
  536. package/dist/jsx/formBuilder/FormBuilderScreen.mjs.map +1 -0
  537. package/dist/jsx/formBuilder/FormBuilderScreen.native.js +537 -0
  538. package/dist/jsx/formBuilder/FormBuilderScreen.native.js.map +1 -0
  539. package/dist/jsx/formBuilder/api.mjs +129 -0
  540. package/dist/jsx/formBuilder/api.mjs.map +1 -0
  541. package/dist/jsx/formBuilder/api.native.js +193 -0
  542. package/dist/jsx/formBuilder/api.native.js.map +1 -0
  543. package/dist/jsx/formBuilder/fieldtypes.mjs +82 -0
  544. package/dist/jsx/formBuilder/fieldtypes.mjs.map +1 -0
  545. package/dist/jsx/formBuilder/fieldtypes.native.js +133 -0
  546. package/dist/jsx/formBuilder/fieldtypes.native.js.map +1 -0
  547. package/dist/jsx/formBuilder/index.mjs +6 -0
  548. package/dist/jsx/formBuilder/index.mjs.map +1 -0
  549. package/dist/jsx/formBuilder/index.native.js +71 -0
  550. package/dist/jsx/formBuilder/index.native.js.map +1 -0
  551. package/dist/jsx/formBuilder/model.mjs +420 -0
  552. package/dist/jsx/formBuilder/model.mjs.map +1 -0
  553. package/dist/jsx/formBuilder/model.native.js +714 -0
  554. package/dist/jsx/formBuilder/model.native.js.map +1 -0
  555. package/dist/jsx/formBuilder/useFormBuilderDrag.mjs +374 -0
  556. package/dist/jsx/formBuilder/useFormBuilderDrag.mjs.map +1 -0
  557. package/dist/jsx/formBuilder/useFormBuilderDrag.native.js +434 -0
  558. package/dist/jsx/formBuilder/useFormBuilderDrag.native.js.map +1 -0
  559. package/dist/jsx/i18n/en.mjs +294 -4
  560. package/dist/jsx/i18n/en.mjs.map +1 -1
  561. package/dist/jsx/i18n/en.native.js +294 -4
  562. package/dist/jsx/i18n/en.native.js.map +1 -1
  563. package/dist/jsx/index.js +3 -2
  564. package/dist/jsx/index.js.map +1 -1
  565. package/dist/jsx/index.mjs +3 -2
  566. package/dist/jsx/index.mjs.map +1 -1
  567. package/dist/jsx/index.native.js +40 -0
  568. package/dist/jsx/index.native.js.map +1 -1
  569. package/dist/jsx/list/DoctypeListScreen.mjs +150 -46
  570. package/dist/jsx/list/DoctypeListScreen.mjs.map +1 -1
  571. package/dist/jsx/list/DoctypeListScreen.native.js +164 -56
  572. package/dist/jsx/list/DoctypeListScreen.native.js.map +1 -1
  573. package/dist/jsx/list/ListFilterBar.mjs +9 -5
  574. package/dist/jsx/list/ListFilterBar.mjs.map +1 -1
  575. package/dist/jsx/list/ListFilterBar.native.js +8 -4
  576. package/dist/jsx/list/ListFilterBar.native.js.map +1 -1
  577. package/dist/jsx/list/ListSidebar.mjs +4 -3
  578. package/dist/jsx/list/ListSidebar.mjs.map +1 -1
  579. package/dist/jsx/list/ListSidebar.native.js +4 -3
  580. package/dist/jsx/list/ListSidebar.native.js.map +1 -1
  581. package/dist/jsx/list/filter-chips.mjs +10 -4
  582. package/dist/jsx/list/filter-chips.mjs.map +1 -1
  583. package/dist/jsx/list/filter-chips.native.js +10 -4
  584. package/dist/jsx/list/filter-chips.native.js.map +1 -1
  585. package/dist/jsx/list/filter-editor.mjs +1 -10
  586. package/dist/jsx/list/filter-editor.mjs.map +1 -1
  587. package/dist/jsx/list/filter-editor.native.js +1 -10
  588. package/dist/jsx/list/filter-editor.native.js.map +1 -1
  589. package/dist/jsx/list/filter-saved.mjs +0 -1
  590. package/dist/jsx/list/filter-saved.mjs.map +1 -1
  591. package/dist/jsx/list/filter-saved.native.js +0 -1
  592. package/dist/jsx/list/filter-saved.native.js.map +1 -1
  593. package/dist/jsx/list/filter-sort.mjs +0 -1
  594. package/dist/jsx/list/filter-sort.mjs.map +1 -1
  595. package/dist/jsx/list/filter-sort.native.js +0 -1
  596. package/dist/jsx/list/filter-sort.native.js.map +1 -1
  597. package/dist/jsx/list/filter-standard.mjs +1 -3
  598. package/dist/jsx/list/filter-standard.mjs.map +1 -1
  599. package/dist/jsx/list/filter-standard.native.js +1 -3
  600. package/dist/jsx/list/filter-standard.native.js.map +1 -1
  601. package/dist/jsx/list/list-tools-sheet.mjs +10 -3
  602. package/dist/jsx/list/list-tools-sheet.mjs.map +1 -1
  603. package/dist/jsx/list/list-tools-sheet.native.js +12 -3
  604. package/dist/jsx/list/list-tools-sheet.native.js.map +1 -1
  605. package/dist/jsx/navigation/paths.mjs +5 -1
  606. package/dist/jsx/navigation/paths.mjs.map +1 -1
  607. package/dist/jsx/navigation/paths.native.js +7 -0
  608. package/dist/jsx/navigation/paths.native.js.map +1 -1
  609. package/dist/jsx/report/QueryReportScreen.mjs +1 -1
  610. package/dist/jsx/report/QueryReportScreen.mjs.map +1 -1
  611. package/dist/jsx/report/QueryReportScreen.native.js +1 -1
  612. package/dist/jsx/report/QueryReportScreen.native.js.map +1 -1
  613. package/dist/jsx/report/queryReportFilterBar.mjs +3 -8
  614. package/dist/jsx/report/queryReportFilterBar.mjs.map +1 -1
  615. package/dist/jsx/report/queryReportFilterBar.native.js +3 -8
  616. package/dist/jsx/report/queryReportFilterBar.native.js.map +1 -1
  617. package/dist/jsx/shared/sessionUser.mjs +78 -0
  618. package/dist/jsx/shared/sessionUser.mjs.map +1 -0
  619. package/dist/jsx/shared/sessionUser.native.js +137 -0
  620. package/dist/jsx/shared/sessionUser.native.js.map +1 -0
  621. package/dist/jsx/shared/useSessionUserId.mjs +2 -26
  622. package/dist/jsx/shared/useSessionUserId.mjs.map +1 -1
  623. package/dist/jsx/shared/useSessionUserId.native.js +2 -28
  624. package/dist/jsx/shared/useSessionUserId.native.js.map +1 -1
  625. package/dist/jsx/shell/BackofficeShell.mjs +132 -89
  626. package/dist/jsx/shell/BackofficeShell.mjs.map +1 -1
  627. package/dist/jsx/shell/BackofficeShell.native.js +146 -99
  628. package/dist/jsx/shell/BackofficeShell.native.js.map +1 -1
  629. package/dist/jsx/shell/HomeRedirect.mjs +20 -24
  630. package/dist/jsx/shell/HomeRedirect.mjs.map +1 -1
  631. package/dist/jsx/shell/HomeRedirect.native.js +17 -20
  632. package/dist/jsx/shell/HomeRedirect.native.js.map +1 -1
  633. package/dist/jsx/shell/WorkspaceSidebar.mjs +55 -27
  634. package/dist/jsx/shell/WorkspaceSidebar.mjs.map +1 -1
  635. package/dist/jsx/shell/WorkspaceSidebar.native.js +55 -25
  636. package/dist/jsx/shell/WorkspaceSidebar.native.js.map +1 -1
  637. package/dist/jsx/shell/shellSidebarSlot.mjs +3 -0
  638. package/dist/jsx/shell/shellSidebarSlot.mjs.map +1 -0
  639. package/dist/jsx/shell/shellSidebarSlot.native.js +34 -0
  640. package/dist/jsx/shell/shellSidebarSlot.native.js.map +1 -0
  641. package/dist/jsx/shell/useWorkspaces.mjs +28 -40
  642. package/dist/jsx/shell/useWorkspaces.mjs.map +1 -1
  643. package/dist/jsx/shell/useWorkspaces.native.js +27 -41
  644. package/dist/jsx/shell/useWorkspaces.native.js.map +1 -1
  645. package/dist/jsx/views/DashboardView.mjs +2 -2
  646. package/dist/jsx/views/DashboardView.mjs.map +1 -1
  647. package/dist/jsx/views/DashboardView.native.js +2 -2
  648. package/dist/jsx/views/DashboardView.native.js.map +1 -1
  649. package/dist/jsx/views/ImageView.mjs +15 -6
  650. package/dist/jsx/views/ImageView.mjs.map +1 -1
  651. package/dist/jsx/views/ImageView.native.js +14 -5
  652. package/dist/jsx/views/ImageView.native.js.map +1 -1
  653. package/dist/jsx/views/ViewHeader.mjs +18 -7
  654. package/dist/jsx/views/ViewHeader.mjs.map +1 -1
  655. package/dist/jsx/views/ViewHeader.native.js +17 -6
  656. package/dist/jsx/views/ViewHeader.native.js.map +1 -1
  657. package/dist/jsx/views/ViewSwitcherMenu.mjs +11 -10
  658. package/dist/jsx/views/ViewSwitcherMenu.mjs.map +1 -1
  659. package/dist/jsx/views/ViewSwitcherMenu.native.js +10 -9
  660. package/dist/jsx/views/ViewSwitcherMenu.native.js.map +1 -1
  661. package/dist/jsx/views/viewAvailability.mjs +17 -9
  662. package/dist/jsx/views/viewAvailability.mjs.map +1 -1
  663. package/dist/jsx/views/viewAvailability.native.js +18 -8
  664. package/dist/jsx/views/viewAvailability.native.js.map +1 -1
  665. package/dist/jsx/views/viewMeta.mjs +23 -1
  666. package/dist/jsx/views/viewMeta.mjs.map +1 -1
  667. package/dist/jsx/views/viewMeta.native.js +30 -1
  668. package/dist/jsx/views/viewMeta.native.js.map +1 -1
  669. package/dist/jsx/workspace/WorkspaceChartBlock.mjs +1 -1
  670. package/dist/jsx/workspace/WorkspaceChartBlock.mjs.map +1 -1
  671. package/dist/jsx/workspace/WorkspaceChartBlock.native.js +1 -1
  672. package/dist/jsx/workspace/WorkspaceChartBlock.native.js.map +1 -1
  673. package/dist/jsx/workspace/WorkspaceLinkDirectory.mjs +2 -2
  674. package/dist/jsx/workspace/WorkspaceLinkDirectory.mjs.map +1 -1
  675. package/dist/jsx/workspace/WorkspaceLinkDirectory.native.js +2 -2
  676. package/dist/jsx/workspace/WorkspaceLinkDirectory.native.js.map +1 -1
  677. package/dist/jsx/workspace/WorkspaceRecents.mjs +2 -2
  678. package/dist/jsx/workspace/WorkspaceRecents.mjs.map +1 -1
  679. package/dist/jsx/workspace/WorkspaceRecents.native.js +1 -1
  680. package/dist/jsx/workspace/WorkspaceRecents.native.js.map +1 -1
  681. package/dist/jsx/workspace/WorkspaceShortcut.mjs +2 -2
  682. package/dist/jsx/workspace/WorkspaceShortcut.mjs.map +1 -1
  683. package/dist/jsx/workspace/WorkspaceShortcut.native.js +1 -1
  684. package/dist/jsx/workspace/WorkspaceShortcut.native.js.map +1 -1
  685. package/package.json +12 -12
  686. package/src/backofficeScreens.designLaw.spec.ts +27 -0
  687. package/src/chrome/BackofficeAwesomebar.tsx +18 -9
  688. package/src/chrome/CommandPalette.spec.tsx +31 -0
  689. package/src/chrome/CommandPalette.tsx +47 -31
  690. package/src/chrome/NotificationsButton.screen.spec.tsx +1 -0
  691. package/src/chrome/NotificationsButton.tsx +4 -2
  692. package/src/chrome/UserMenu.screen.spec.tsx +76 -6
  693. package/src/chrome/UserMenu.tsx +174 -110
  694. package/src/chrome/awesomebar-data.tsx +28 -19
  695. package/src/chrome/command-palette-model.spec.tsx +148 -0
  696. package/src/chrome/command-palette-model.ts +13 -5
  697. package/src/chrome/notifications-data.tsx +3 -50
  698. package/src/chrome/notifications-panel.tsx +3 -6
  699. package/src/chrome/user-session.tsx +26 -15
  700. package/src/config/BackofficeProvider.spec.tsx +6 -2
  701. package/src/config/BackofficeProvider.tsx +10 -0
  702. package/src/config/capabilities.spec.ts +13 -0
  703. package/src/config/capabilities.ts +4 -0
  704. package/src/desk/Desk.spec.tsx +48 -0
  705. package/src/desk/Desk.tsx +25 -1
  706. package/src/desk/DeskSurface.spec.tsx +2 -0
  707. package/src/desk/DeskSurface.tsx +8 -0
  708. package/src/desk/resolveDeskPath.spec.ts +20 -0
  709. package/src/desk/resolveDeskPath.ts +6 -1
  710. package/src/desk/target.ts +3 -0
  711. package/src/form/DocFormScreen.guest.screen.spec.tsx +7 -3
  712. package/src/form/DocFormScreen.rights.spec.tsx +113 -8
  713. package/src/form/DocFormScreen.tsx +65 -44
  714. package/src/form/FormConnections.tsx +2 -2
  715. package/src/form/FormErrorBoundary.spec.tsx +2 -3
  716. package/src/form/FormErrorBoundary.tsx +1 -1
  717. package/src/form/FormSidebarPanel.tsx +1 -1
  718. package/src/form/FormTimeline.tsx +0 -1
  719. package/src/form/FormToolbar.screen.spec.tsx +90 -29
  720. package/src/form/FormToolbar.tsx +98 -132
  721. package/src/formBuilder/DoctypePicker.tsx +72 -0
  722. package/src/formBuilder/FieldPalette.tsx +119 -0
  723. package/src/formBuilder/FieldPropertiesPanel.tsx +213 -0
  724. package/src/formBuilder/FormBuilderCanvas.tsx +468 -0
  725. package/src/formBuilder/FormBuilderScreen.screen.spec.tsx +392 -0
  726. package/src/formBuilder/FormBuilderScreen.stories.tsx +122 -0
  727. package/src/formBuilder/FormBuilderScreen.tsx +491 -0
  728. package/src/formBuilder/api.spec.ts +301 -0
  729. package/src/formBuilder/api.ts +198 -0
  730. package/src/formBuilder/fieldtypes.ts +140 -0
  731. package/src/formBuilder/index.ts +58 -0
  732. package/src/formBuilder/model.spec.ts +401 -0
  733. package/src/formBuilder/model.ts +522 -0
  734. package/src/formBuilder/useFormBuilderDrag.spec.tsx +170 -0
  735. package/src/formBuilder/useFormBuilderDrag.ts +498 -0
  736. package/src/i18n/en.ts +293 -3
  737. package/src/index.ts +58 -1
  738. package/src/list/DoctypeListScreen.guest.screen.spec.tsx +144 -4
  739. package/src/list/DoctypeListScreen.tsx +213 -88
  740. package/src/list/ListFilterBar.screen.spec.tsx +1 -1
  741. package/src/list/ListFilterBar.tsx +16 -6
  742. package/src/list/ListSidebar.tsx +11 -2
  743. package/src/list/filter-chips.tsx +19 -4
  744. package/src/list/filter-editor.tsx +1 -10
  745. package/src/list/filter-saved.tsx +0 -1
  746. package/src/list/filter-sort.tsx +0 -1
  747. package/src/list/filter-standard.tsx +1 -3
  748. package/src/list/list-tools-sheet.tsx +32 -13
  749. package/src/navigation/paths.spec.ts +19 -0
  750. package/src/navigation/paths.ts +8 -0
  751. package/src/report/DoctypeReportView.screen.spec.tsx +12 -0
  752. package/src/report/QueryReportScreen.tsx +1 -1
  753. package/src/report/queryReportFilterBar.tsx +0 -5
  754. package/src/shared/sessionUser.spec.tsx +119 -0
  755. package/src/shared/sessionUser.ts +80 -0
  756. package/src/shared/useSessionUserId.ts +2 -40
  757. package/src/shell/BackofficeShell.spec.tsx +115 -3
  758. package/src/shell/BackofficeShell.tsx +186 -116
  759. package/src/shell/HomeRedirect.spec.tsx +89 -0
  760. package/src/shell/HomeRedirect.tsx +31 -20
  761. package/src/shell/WorkspaceSidebar.spec.tsx +15 -0
  762. package/src/shell/WorkspaceSidebar.tsx +58 -29
  763. package/src/shell/shellSidebarSlot.spec.tsx +178 -0
  764. package/src/shell/shellSidebarSlot.tsx +7 -0
  765. package/src/shell/useWorkspaces.spec.tsx +45 -0
  766. package/src/shell/useWorkspaces.ts +27 -62
  767. package/src/views/DashboardView.tsx +2 -2
  768. package/src/views/ImageView.tsx +19 -3
  769. package/src/views/ViewHeader.tsx +13 -14
  770. package/src/views/ViewSwitcherMenu.spec.tsx +3 -0
  771. package/src/views/ViewSwitcherMenu.tsx +11 -10
  772. package/src/views/viewAvailability.spec.ts +45 -12
  773. package/src/views/viewAvailability.ts +27 -24
  774. package/src/views/viewMeta.ts +30 -0
  775. package/src/workspace/WorkspaceChartBlock.tsx +1 -1
  776. package/src/workspace/WorkspaceLinkDirectory.tsx +2 -2
  777. package/src/workspace/WorkspaceRecents.tsx +9 -2
  778. package/src/workspace/WorkspaceShortcut.tsx +12 -2
  779. package/types/chrome/BackofficeAwesomebar.d.ts.map +1 -1
  780. package/types/chrome/CommandPalette.d.ts +7 -1
  781. package/types/chrome/CommandPalette.d.ts.map +1 -1
  782. package/types/chrome/NotificationsButton.d.ts.map +1 -1
  783. package/types/chrome/UserMenu.d.ts.map +1 -1
  784. package/types/chrome/awesomebar-data.d.ts +4 -3
  785. package/types/chrome/awesomebar-data.d.ts.map +1 -1
  786. package/types/chrome/command-palette-model.d.ts +1 -0
  787. package/types/chrome/command-palette-model.d.ts.map +1 -1
  788. package/types/chrome/notifications-data.d.ts.map +1 -1
  789. package/types/chrome/notifications-panel.d.ts.map +1 -1
  790. package/types/chrome/user-session.d.ts.map +1 -1
  791. package/types/config/BackofficeProvider.d.ts +7 -1
  792. package/types/config/BackofficeProvider.d.ts.map +1 -1
  793. package/types/config/capabilities.d.ts +3 -0
  794. package/types/config/capabilities.d.ts.map +1 -1
  795. package/types/desk/Desk.d.ts +2 -1
  796. package/types/desk/Desk.d.ts.map +1 -1
  797. package/types/desk/DeskSurface.d.ts.map +1 -1
  798. package/types/desk/resolveDeskPath.d.ts +4 -1
  799. package/types/desk/resolveDeskPath.d.ts.map +1 -1
  800. package/types/desk/target.d.ts +3 -0
  801. package/types/desk/target.d.ts.map +1 -1
  802. package/types/form/DocFormScreen.d.ts +1 -1
  803. package/types/form/DocFormScreen.d.ts.map +1 -1
  804. package/types/form/FormTimeline.d.ts.map +1 -1
  805. package/types/form/FormToolbar.d.ts +5 -32
  806. package/types/form/FormToolbar.d.ts.map +1 -1
  807. package/types/formBuilder/DoctypePicker.d.ts +2 -0
  808. package/types/formBuilder/DoctypePicker.d.ts.map +1 -0
  809. package/types/formBuilder/FieldPalette.d.ts +6 -0
  810. package/types/formBuilder/FieldPalette.d.ts.map +1 -0
  811. package/types/formBuilder/FieldPropertiesPanel.d.ts +10 -0
  812. package/types/formBuilder/FieldPropertiesPanel.d.ts.map +1 -0
  813. package/types/formBuilder/FormBuilderCanvas.d.ts +17 -0
  814. package/types/formBuilder/FormBuilderCanvas.d.ts.map +1 -0
  815. package/types/formBuilder/FormBuilderScreen.d.ts +7 -0
  816. package/types/formBuilder/FormBuilderScreen.d.ts.map +1 -0
  817. package/types/formBuilder/api.d.ts +32 -0
  818. package/types/formBuilder/api.d.ts.map +1 -0
  819. package/types/formBuilder/fieldtypes.d.ts +21 -0
  820. package/types/formBuilder/fieldtypes.d.ts.map +1 -0
  821. package/types/formBuilder/index.d.ts +5 -0
  822. package/types/formBuilder/index.d.ts.map +1 -0
  823. package/types/formBuilder/model.d.ts +76 -0
  824. package/types/formBuilder/model.d.ts.map +1 -0
  825. package/types/formBuilder/useFormBuilderDrag.d.ts +44 -0
  826. package/types/formBuilder/useFormBuilderDrag.d.ts.map +1 -0
  827. package/types/i18n/en.d.ts +293 -3
  828. package/types/i18n/en.d.ts.map +1 -1
  829. package/types/index.d.ts +4 -3
  830. package/types/index.d.ts.map +1 -1
  831. package/types/list/DoctypeListScreen.d.ts.map +1 -1
  832. package/types/list/ListFilterBar.d.ts +10 -4
  833. package/types/list/ListFilterBar.d.ts.map +1 -1
  834. package/types/list/ListSidebar.d.ts +7 -1
  835. package/types/list/ListSidebar.d.ts.map +1 -1
  836. package/types/list/filter-chips.d.ts +9 -1
  837. package/types/list/filter-chips.d.ts.map +1 -1
  838. package/types/list/filter-saved.d.ts.map +1 -1
  839. package/types/list/filter-sort.d.ts.map +1 -1
  840. package/types/list/list-tools-sheet.d.ts +9 -1
  841. package/types/list/list-tools-sheet.d.ts.map +1 -1
  842. package/types/navigation/paths.d.ts +3 -0
  843. package/types/navigation/paths.d.ts.map +1 -1
  844. package/types/report/queryReportFilterBar.d.ts.map +1 -1
  845. package/types/shared/sessionUser.d.ts +10 -0
  846. package/types/shared/sessionUser.d.ts.map +1 -0
  847. package/types/shared/useSessionUserId.d.ts +0 -4
  848. package/types/shared/useSessionUserId.d.ts.map +1 -1
  849. package/types/shell/BackofficeShell.d.ts +6 -1
  850. package/types/shell/BackofficeShell.d.ts.map +1 -1
  851. package/types/shell/HomeRedirect.d.ts +3 -1
  852. package/types/shell/HomeRedirect.d.ts.map +1 -1
  853. package/types/shell/WorkspaceSidebar.d.ts.map +1 -1
  854. package/types/shell/shellSidebarSlot.d.ts +2 -0
  855. package/types/shell/shellSidebarSlot.d.ts.map +1 -0
  856. package/types/shell/useWorkspaces.d.ts +4 -5
  857. package/types/shell/useWorkspaces.d.ts.map +1 -1
  858. package/types/views/ImageView.d.ts.map +1 -1
  859. package/types/views/ViewHeader.d.ts +1 -10
  860. package/types/views/ViewHeader.d.ts.map +1 -1
  861. package/types/views/ViewSwitcherMenu.d.ts.map +1 -1
  862. package/types/views/viewAvailability.d.ts +12 -15
  863. package/types/views/viewAvailability.d.ts.map +1 -1
  864. package/types/views/viewMeta.d.ts +10 -0
  865. package/types/views/viewMeta.d.ts.map +1 -1
  866. package/types/workspace/WorkspaceRecents.d.ts.map +1 -1
  867. package/types/workspace/WorkspaceShortcut.d.ts.map +1 -1
@@ -76,6 +76,7 @@ export interface CommandPaletteModel {
76
76
  items: CommandPaletteItem[];
77
77
  /** Global search in flight for the debounced query. */
78
78
  searching: boolean;
79
+ searchUnavailable: boolean;
79
80
  /** The trimmed query the sections were built from. */
80
81
  query: string;
81
82
  /** Trimmed query is non-empty. */
@@ -135,8 +136,16 @@ export function useCommandPaletteModel({
135
136
  const capabilities = useBackofficeCapabilities();
136
137
  const isDoctypeAllowed = useIsDoctypeAllowed();
137
138
 
138
- const { catalog } = useAwesomebarCatalog();
139
- const { hits, searching } = useGlobalSearch(debouncedQuery);
139
+ const { catalog } = useAwesomebarCatalog(open);
140
+ const remote = useGlobalSearch(open ? debouncedQuery.trim() : "");
141
+ const trimmed = query.trim();
142
+ const searching =
143
+ open && Boolean(trimmed) && (trimmed !== debouncedQuery.trim() || remote.searching);
144
+ const searchUnavailable = open && remote.query === trimmed && remote.error;
145
+ const hits = useMemo(
146
+ () => (remote.query === trimmed ? remote.hits : []),
147
+ [remote.query, remote.hits, trimmed],
148
+ );
140
149
  const [recents, setRecents] = useState<RecentItem[]>([]);
141
150
 
142
151
  // Fresh recents on every open (another surface may have pushed a visit
@@ -152,8 +161,6 @@ export function useCommandPaletteModel({
152
161
  };
153
162
  }, [open]);
154
163
 
155
- const trimmed = query.trim();
156
-
157
164
  const sections = useMemo<CommandPaletteSection[]>(() => {
158
165
  const next: CommandPaletteSection[] = [];
159
166
 
@@ -284,8 +291,9 @@ export function useCommandPaletteModel({
284
291
  sections,
285
292
  items,
286
293
  searching,
294
+ searchUnavailable,
287
295
  query: trimmed,
288
296
  hasQuery: Boolean(trimmed),
289
- noResults: Boolean(trimmed) && !searching && items.length === 0,
297
+ noResults: Boolean(trimmed) && !searching && !searchUnavailable && items.length === 0,
290
298
  };
291
299
  }
@@ -24,7 +24,8 @@ import {
24
24
  type FrappeApp,
25
25
  } from "@multiplatform.one/frappe";
26
26
  import { useFrappeConfig } from "@multiplatform.one/frappe-ui";
27
- import { useCallback, useEffect, useMemo, useState } from "react";
27
+ import { useCallback, useMemo, useState } from "react";
28
+ import { useSessionIdentity } from "../shared/sessionUser";
28
29
  import { useFrappeApp } from "../shared/useFrappeApp";
29
30
  import { parseFrappeTimestamp, stripHtmlToText } from "./notifications-utils";
30
31
 
@@ -72,54 +73,6 @@ const MARK_ALL_AS_READ_METHOD =
72
73
  // Session user (module cache — one fetch per FrappeApp per session)
73
74
  // ---------------------------------------------------------------------------
74
75
 
75
- const sessionUserCache = new WeakMap<FrappeApp, Promise<string | undefined>>();
76
-
77
- interface SessionUserState {
78
- user?: string;
79
- /** True once the probe settled (Guest / unreachable resolve to no user). */
80
- resolved: boolean;
81
- }
82
-
83
- function useNotificationsSessionUser(fixtureMode: boolean): SessionUserState {
84
- const app = useFrappeApp();
85
- const [state, setState] = useState<SessionUserState>({ resolved: false });
86
-
87
- useEffect(() => {
88
- // Fixture mode has no session endpoint; report resolved-with-no-user.
89
- // No app (no provider config) settles the same way so the panel never
90
- // skeletons forever.
91
- if (fixtureMode || !app) {
92
- setState({ resolved: true });
93
- return;
94
- }
95
- let cancelled = false;
96
- let promise = sessionUserCache.get(app);
97
- if (!promise) {
98
- promise = app
99
- .call()
100
- .get<{ message?: string }>("frappe.auth.get_logged_user")
101
- .then((res) => {
102
- const user = res.payload?.message;
103
- return user && user !== "Guest" ? user : undefined;
104
- })
105
- .catch(() => {
106
- // Evict failed probes so a later mount can retry.
107
- sessionUserCache.delete(app);
108
- return undefined;
109
- });
110
- sessionUserCache.set(app, promise);
111
- }
112
- promise.then((user) => {
113
- if (!cancelled) setState({ user, resolved: true });
114
- });
115
- return () => {
116
- cancelled = true;
117
- };
118
- }, [app, fixtureMode]);
119
-
120
- return state;
121
- }
122
-
123
76
  // ---------------------------------------------------------------------------
124
77
  // Mark-as-read RPCs
125
78
  // ---------------------------------------------------------------------------
@@ -174,7 +127,7 @@ export function useNotifications(): UseNotificationsResult {
174
127
  const config = useFrappeConfig();
175
128
  const app = useFrappeApp();
176
129
  const fixtureMode = Boolean(config?.fixtures);
177
- const { user: sessionUser, resolved: sessionResolved } = useNotificationsSessionUser(fixtureMode);
130
+ const { user: sessionUser, resolved: sessionResolved } = useSessionIdentity();
178
131
 
179
132
  // Stable connection config (fresh identities would churn the collection).
180
133
  const connectionConfig = useMemo(
@@ -5,6 +5,7 @@
5
5
  * the popover/sheet shell live in NotificationsButton.
6
6
  */
7
7
  import {
8
+ componentColors,
8
9
  Avatar,
9
10
  Button,
10
11
  EmptyState,
@@ -91,7 +92,7 @@ function NotificationRow({ item, onPress }: { item: NotificationItem; onPress: (
91
92
  width="$0.75"
92
93
  height="$0.75"
93
94
  borderRadius={1000}
94
- backgroundColor="$accentBackground"
95
+ backgroundColor={componentColors.indicator.mark}
95
96
  />
96
97
  </View>
97
98
  )}
@@ -180,13 +181,9 @@ export function NotificationsPanel({
180
181
  <NotificationSkeletonRows />
181
182
  ) : items.length === 0 ? (
182
183
  <EmptyState
183
- compact
184
+ size="$3"
184
185
  paddingVertical="$6"
185
186
  title={t("notifications.emptyTitle", "No new notifications")}
186
- description={t(
187
- "notifications.emptyDescription",
188
- "Mentions, assignments, and shares will show up here.",
189
- )}
190
187
  />
191
188
  ) : (
192
189
  <YStack>
@@ -7,8 +7,14 @@ import React from "react";
7
7
  * frappe.client.get_value(User, <name>, ["full_name","user_image","email"]).
8
8
  */
9
9
  import type { FrappeApp } from "@multiplatform.one/frappe";
10
- import { useFrappeConfig } from "@multiplatform.one/frappe-ui";
10
+ import { useFrappeConfig, type FrappeConfig } from "@multiplatform.one/frappe-ui";
11
11
  import { useEffect, useMemo, useState } from "react";
12
+ import {
13
+ clearSessionIdentityCache,
14
+ loadSessionUser,
15
+ sessionUserKey,
16
+ useSessionRevision,
17
+ } from "../shared/sessionUser";
12
18
  import { useFrappeApp } from "../shared/useFrappeApp";
13
19
 
14
20
  export interface SessionUserInfo {
@@ -26,14 +32,12 @@ interface UserDocBits {
26
32
  email?: string;
27
33
  }
28
34
 
29
- // Keyed by FrappeApp instance: a different bench/auth config gets its own
30
- // entry (useFrappeApp memoizes apps per config). Failed fetches self-evict
31
- // so the next mount retries.
32
- let sessionCache = new WeakMap<FrappeApp, Promise<SessionUserInfo>>();
35
+ const sessionCache = new Map<string, Promise<SessionUserInfo>>();
33
36
 
34
37
  /** Logout hygiene: drops every cached session-user fetch in this module. */
35
38
  export function clearSessionUserCache(): void {
36
- sessionCache = new WeakMap();
39
+ sessionCache.clear();
40
+ clearSessionIdentityCache();
37
41
  }
38
42
 
39
43
  /** Resolve a User.user_image value (usually "/files/…") to an absolute URL. */
@@ -47,8 +51,13 @@ export function resolveUserImageUrl(
47
51
  return `${baseURL.replace(/\/+$/, "")}${userImage.startsWith("/") ? "" : "/"}${userImage}`;
48
52
  }
49
53
 
50
- async function fetchSessionUserInfo(app: FrappeApp, baseURL: string): Promise<SessionUserInfo> {
51
- const user = await app.auth().getLoggedInUser();
54
+ async function fetchSessionUserInfo(
55
+ app: FrappeApp,
56
+ config: FrappeConfig,
57
+ ): Promise<SessionUserInfo> {
58
+ const user = await loadSessionUser(config);
59
+ const baseURL = config.baseURL ?? "";
60
+ if (user === "Guest") return { user, fullName: user };
52
61
  if (!user) throw new Error("No session user");
53
62
  // Param format probed against the bench: filters takes the plain docname,
54
63
  // fieldname a JSON array (the http client JSON-encodes non-string params).
@@ -74,26 +83,28 @@ export function useSessionUserInfo(): {
74
83
  } {
75
84
  const app = useFrappeApp();
76
85
  const config = useFrappeConfig();
77
- const baseURL = config?.baseURL ?? "";
86
+ const revision = useSessionRevision();
87
+ const key = config ? sessionUserKey(config) : "";
78
88
  const [info, setInfo] = useState<SessionUserInfo | undefined>(undefined);
79
89
  const [loading, setLoading] = useState(true);
80
90
  const [error, setError] = useState<Error | undefined>(undefined);
81
91
 
82
92
  useEffect(() => {
83
- if (!app) {
93
+ if (!app || !config || config.fixtures) {
84
94
  setInfo(undefined);
85
95
  setLoading(false);
86
96
  return;
87
97
  }
88
98
  let cancelled = false;
89
- let promise = sessionCache.get(app);
99
+ let promise = sessionCache.get(key);
90
100
  if (!promise) {
91
- promise = fetchSessionUserInfo(app, baseURL);
92
- sessionCache.set(app, promise);
101
+ promise = fetchSessionUserInfo(app, config);
102
+ sessionCache.set(key, promise);
93
103
  promise.catch(() => {
94
- if (sessionCache.get(app) === promise) sessionCache.delete(app);
104
+ if (sessionCache.get(key) === promise) sessionCache.delete(key);
95
105
  });
96
106
  }
107
+ setInfo(undefined);
97
108
  setLoading(true);
98
109
  setError(undefined);
99
110
  promise
@@ -110,7 +121,7 @@ export function useSessionUserInfo(): {
110
121
  return () => {
111
122
  cancelled = true;
112
123
  };
113
- }, [app, baseURL]);
124
+ }, [app, key, config, revision]);
114
125
 
115
126
  return useMemo(() => ({ info, loading, error }), [info, loading, error]);
116
127
  }
@@ -53,13 +53,14 @@ function renderShell(props: Partial<BackofficeProviderProps> = {}) {
53
53
 
54
54
  describe("BackofficeProvider capability flags", () => {
55
55
  it("renders the full chrome by default", () => {
56
- const { container } = renderShell();
56
+ renderShell();
57
57
 
58
58
  expect(screen.getByTestId("backoffice-shell")).toBeTruthy();
59
59
  expect(screen.getByTestId("backoffice-awesomebar")).toBeTruthy();
60
60
  expect(screen.getByTestId("backoffice-notifications-button")).toBeTruthy();
61
61
  expect(screen.getByTestId("backoffice-help-trigger")).toBeTruthy();
62
- expect(container.querySelector('[aria-label="User menu"]')).toBeTruthy();
62
+ expect(screen.getByRole("button", { name: "Log in" })).toBeTruthy();
63
+ fireEvent.click(screen.getByRole("button", { name: "Toggle sidebar" }));
63
64
  expect(screen.getByTestId("backoffice-sidebar-rail")).toBeTruthy();
64
65
  expect(screen.getByText("page body")).toBeTruthy();
65
66
  });
@@ -79,7 +80,9 @@ describe("BackofficeProvider capability flags", () => {
79
80
  expect(screen.queryByTestId("backoffice-notifications-button")).toBeNull();
80
81
  expect(screen.queryByTestId("backoffice-help-trigger")).toBeNull();
81
82
  expect(container.querySelector('[aria-label="User menu"]')).toBeNull();
83
+ expect(screen.queryByRole("button", { name: "Log in" })).toBeNull();
82
84
  expect(screen.queryByTestId("backoffice-sidebar-rail")).toBeNull();
85
+ expect(screen.queryByTestId("backoffice-sidebar-toggle")).toBeNull();
83
86
  // Content always renders — flags remove chrome, not the page.
84
87
  expect(screen.getByText("page body")).toBeTruthy();
85
88
  });
@@ -98,6 +101,7 @@ describe("BackofficeProvider capability flags", () => {
98
101
  slots: { renderSidebarFooter: () => <div data-testid="host-sidebar-footer">custom</div> },
99
102
  });
100
103
 
104
+ fireEvent.click(screen.getByRole("button", { name: "Toggle sidebar" }));
101
105
  expect(screen.getByTestId("host-sidebar-footer")).toBeTruthy();
102
106
  });
103
107
  });
@@ -80,6 +80,11 @@ export interface BackofficeAppearance {
80
80
  setScheme: (scheme: "light" | "dark" | "system") => void;
81
81
  }
82
82
 
83
+ export interface BackofficeAuth {
84
+ login: () => void | Promise<void>;
85
+ logout?: () => void | Promise<void>;
86
+ }
87
+
83
88
  /** Result contract of a host navigation blocker (one's useBlocker shape). */
84
89
  export interface BackofficeNavigationBlocker {
85
90
  blocked: boolean;
@@ -167,6 +172,7 @@ export interface BackofficeProviderProps {
167
172
  slots?: BackofficeSlots;
168
173
  /** Color-scheme adapter for the user menu's "Toggle Theme". */
169
174
  appearance?: BackofficeAppearance;
175
+ auth?: BackofficeAuth;
170
176
  /** Router-integration hooks (navigation blocker, …). */
171
177
  integrations?: BackofficeIntegrations;
172
178
  /** Event bus — every notable backoffice action lands here. */
@@ -189,6 +195,7 @@ export interface BackofficeConfig {
189
195
  actions: BackofficeActions;
190
196
  slots: BackofficeSlots;
191
197
  appearance?: BackofficeAppearance;
198
+ auth?: BackofficeAuth;
192
199
  integrations?: BackofficeIntegrations;
193
200
  /** Emit an event to the host's `onEvent` bus (no-op when unset). */
194
201
  emitEvent: (event: BackofficeEvent) => void;
@@ -262,6 +269,7 @@ export function BackofficeProvider({
262
269
  actions,
263
270
  slots,
264
271
  appearance,
272
+ auth,
265
273
  integrations,
266
274
  onEvent,
267
275
  i18nInstance,
@@ -333,6 +341,7 @@ export function BackofficeProvider({
333
341
  actions: actions ?? {},
334
342
  slots: slots ?? {},
335
343
  appearance,
344
+ auth,
336
345
  integrations,
337
346
  emitEvent,
338
347
  }),
@@ -346,6 +355,7 @@ export function BackofficeProvider({
346
355
  actions,
347
356
  slots,
348
357
  appearance,
358
+ auth,
349
359
  integrations,
350
360
  emitEvent,
351
361
  ],
@@ -0,0 +1,13 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { resolveCapabilities } from "./capabilities";
3
+
4
+ describe("form builder capability", () => {
5
+ it("defaults on and accepts boolean or configured opt-outs", () => {
6
+ expect(resolveCapabilities().formBuilder.enabled).toBe(true);
7
+ expect(resolveCapabilities({ formBuilder: false }).formBuilder.enabled).toBe(false);
8
+ expect(resolveCapabilities({ formBuilder: { enabled: false } }).formBuilder.enabled).toBe(
9
+ false,
10
+ );
11
+ expect(resolveCapabilities({ formBuilder: {} }).formBuilder.enabled).toBe(true);
12
+ });
13
+ });
@@ -46,6 +46,8 @@ export interface BackofficeCapabilities {
46
46
  newDoc?: CapabilityInput;
47
47
  /** List bulk-action bar (multi-select edit/assign/tag/delete). */
48
48
  bulkActions?: CapabilityInput;
49
+ /** Form layout editor and its document-menu entry. Defaults on. */
50
+ formBuilder?: CapabilityInput;
49
51
  /** Form sidebar attachments section. */
50
52
  attachments?: CapabilityInput;
51
53
  /** Form activity timeline (comments, versions, communications). */
@@ -86,6 +88,7 @@ export interface ResolvedBackofficeCapabilities {
86
88
  views: ResolvedCapability & { allow: readonly BackofficeView[] };
87
89
  newDoc: ResolvedCapability;
88
90
  bulkActions: ResolvedCapability;
91
+ formBuilder: ResolvedCapability;
89
92
  attachments: ResolvedCapability;
90
93
  timeline: ResolvedCapability;
91
94
  assignments: ResolvedCapability;
@@ -143,6 +146,7 @@ export function resolveCapabilities(
143
146
  }),
144
147
  newDoc: resolveFlag<ResolvedCapability>(input.newDoc, { enabled: true }),
145
148
  bulkActions: resolveFlag<ResolvedCapability>(input.bulkActions, { enabled: true }),
149
+ formBuilder: resolveFlag<ResolvedCapability>(input.formBuilder, { enabled: true }),
146
150
  attachments: resolveFlag<ResolvedCapability>(input.attachments, { enabled: true }),
147
151
  timeline: resolveFlag<ResolvedCapability>(input.timeline, { enabled: true }),
148
152
  assignments: resolveFlag<ResolvedCapability>(input.assignments, { enabled: true }),
@@ -21,6 +21,13 @@ import { createMemoryNavigator } from "../navigation/navigator";
21
21
  import { Desk } from "./Desk";
22
22
  import type { DeskSurfaceProps } from "./DeskSurface";
23
23
  import { useDeskScope } from "./scope";
24
+ import { guessDeskTarget } from "./target";
25
+
26
+ vi.mock("../formBuilder/FormBuilderScreen", () => ({
27
+ FormBuilderScreen: ({ doctype }: { doctype?: string }) => (
28
+ <div data-testid="builder-screen">{doctype ?? "picker"}</div>
29
+ ),
30
+ }));
24
31
 
25
32
  const MOCK_HOST = "https://desk-assembly.mock.test";
26
33
 
@@ -360,3 +367,44 @@ describe("<Desk frappe> under an ambient FrappeProvider", () => {
360
367
  expect(screen.getByTestId("probe-connection").textContent).toBe(AMBIENT_HOST);
361
368
  });
362
369
  });
370
+
371
+ describe("<Desk /> form builder dispatch", () => {
372
+ it("guesses builder targets for navigation interception", () => {
373
+ expect(guessDeskTarget("/admin/customize-form?doc_type=Sales%20Order", "/admin")).toEqual({
374
+ kind: "form-builder",
375
+ doctype: "Sales Order",
376
+ });
377
+ });
378
+ it.each([undefined, "Sales Order"])("opens the builder for %s", (doctype) => {
379
+ const path = doctype
380
+ ? `/customize-form?doc_type=${encodeURIComponent(doctype)}`
381
+ : "/customize-form";
382
+ renderWithProviders(<Desk frappe={frappe()} basePath="/admin" path={path} />);
383
+ expect(screen.getByTestId("builder-screen").textContent).toBe(doctype ?? "picker");
384
+ });
385
+
386
+ it("supports a form-builder surface override", () => {
387
+ renderWithProviders(
388
+ <Desk
389
+ frappe={frappe()}
390
+ path="/customize-form?doc_type=ToDo"
391
+ surfaces={{ "form-builder": { ToDo: SurfaceProbe } }}
392
+ />,
393
+ );
394
+ expect(screen.getByTestId("probe-form-builder").textContent).toContain('"ToDo"');
395
+ });
396
+
397
+ it("blocks the builder and its overrides when the capability is off", () => {
398
+ renderWithProviders(
399
+ <Desk
400
+ frappe={frappe()}
401
+ path="/customize-form"
402
+ capabilities={{ formBuilder: false }}
403
+ surfaces={{ "form-builder": SurfaceProbe }}
404
+ />,
405
+ );
406
+ expect(screen.getByText("Not found")).toBeTruthy();
407
+ expect(screen.queryByTestId("builder-screen")).toBeNull();
408
+ expect(screen.queryByTestId("probe-form-builder")).toBeNull();
409
+ });
410
+ });
package/src/desk/Desk.tsx CHANGED
@@ -18,6 +18,7 @@ import {
18
18
  BackofficeProvider,
19
19
  type BackofficeActions,
20
20
  type BackofficeAppearance,
21
+ type BackofficeAuth,
21
22
  type BackofficeFrappeConfig,
22
23
  type BackofficeIntegrations,
23
24
  } from "../config/BackofficeProvider";
@@ -99,6 +100,7 @@ export interface DeskProps {
99
100
  slots?: BackofficeSlots;
100
101
  /** Color-scheme adapter for the user menu's "Toggle Theme". */
101
102
  appearance?: BackofficeAppearance;
103
+ auth?: BackofficeAuth;
102
104
  /** Router-integration hooks (navigation blocker, …). */
103
105
  integrations?: BackofficeIntegrations;
104
106
 
@@ -233,6 +235,7 @@ export function Desk(props: DeskProps) {
233
235
  actions={props.actions}
234
236
  slots={props.slots}
235
237
  appearance={props.appearance}
238
+ auth={props.auth}
236
239
  integrations={props.integrations}
237
240
  onEvent={props.onEvent}
238
241
  >
@@ -300,5 +303,26 @@ function DeskBody({
300
303
  </YStack>
301
304
  );
302
305
  }
303
- return <BackofficeShell>{surface}</BackofficeShell>;
306
+ return (
307
+ <BackofficeShell title={target ? deskTargetTitle(target) : undefined}>
308
+ {surface}
309
+ </BackofficeShell>
310
+ );
311
+ }
312
+
313
+ /** The surface name a compact banner shows; home falls back to the desk title. */
314
+ function deskTargetTitle(target: DeskTarget): string | undefined {
315
+ switch (target.kind) {
316
+ case "list":
317
+ case "view":
318
+ case "new":
319
+ case "form":
320
+ return target.doctype;
321
+ case "workspace":
322
+ return target.workspace;
323
+ case "report":
324
+ return target.reportName;
325
+ default:
326
+ return undefined;
327
+ }
304
328
  }
@@ -80,6 +80,7 @@ const everyKind: DeskTarget[] = [
80
80
  { kind: "view", doctype: TASK_DOCTYPE, view: "kanban" },
81
81
  { kind: "new", doctype: TASK_DOCTYPE },
82
82
  { kind: "form", doctype: TASK_DOCTYPE, name: "QDT-0001" },
83
+ { kind: "form-builder", doctype: TASK_DOCTYPE },
83
84
  { kind: "report", reportName: "Open Tasks" },
84
85
  { kind: "not-found", slug: "nope" },
85
86
  ];
@@ -100,6 +101,7 @@ describe("<DeskSurface />", () => {
100
101
  new: Probe,
101
102
  form: Probe,
102
103
  report: Probe,
104
+ "form-builder": Probe,
103
105
  "not-found": Probe,
104
106
  }}
105
107
  />,
@@ -9,6 +9,8 @@
9
9
  */
10
10
  import { Spinner, YStack } from "@multiplatform.one/components";
11
11
  import { useMemo, type ComponentType } from "react";
12
+ import { useBackofficeCapabilities } from "../config/BackofficeProvider";
13
+ import { FormBuilderScreen } from "../formBuilder/FormBuilderScreen";
12
14
  import { setCreatePrefill } from "../form/createPrefill";
13
15
  import { DocFormScreen } from "../form/DocFormScreen";
14
16
  import { DoctypeListScreen } from "../list/DoctypeListScreen";
@@ -85,6 +87,10 @@ export function DeskSurface({
85
87
  initialFilters,
86
88
  views,
87
89
  }: DeskSurfaceHostProps) {
90
+ const capabilities = useBackofficeCapabilities();
91
+ if (target.kind === "form-builder" && !capabilities.formBuilder.enabled) {
92
+ return <NotFoundScreen />;
93
+ }
88
94
  const Override = resolveOverride(overrides, target);
89
95
  if (Override) return <Override target={target} readOnly={readOnly} />;
90
96
 
@@ -115,6 +121,8 @@ export function DeskSurface({
115
121
  // returns, so this branch and a bare <FrappeForm> resolve a doctype
116
122
  // the same way.
117
123
  return <DocFormScreen doctype={target.doctype} name={target.name} readOnly={readOnly} />;
124
+ case "form-builder":
125
+ return <FormBuilderScreen doctype={target.doctype} />;
118
126
  case "report":
119
127
  return <QueryReportScreen reportName={target.reportName} />;
120
128
  case "not-found":
@@ -172,3 +172,23 @@ describe("resolveDeskPath rejections", () => {
172
172
  });
173
173
  });
174
174
  });
175
+
176
+ describe("form builder addresses", () => {
177
+ it("reserves the single customize-form segment for the picker", () => {
178
+ expect(resolveDeskPath("/backoffice/customize-form")).toEqual({
179
+ kind: "form-builder",
180
+ doctype: undefined,
181
+ });
182
+ expect(
183
+ resolveDeskPath("/admin/customize-form", "/admin", { doc_type: ["Sales Order", "ToDo"] }),
184
+ ).toEqual({ kind: "form-builder", doctype: "Sales Order" });
185
+ });
186
+
187
+ it("keeps named Customize Form documents on the form route", () => {
188
+ expect(resolveDeskPath("/backoffice/customize-form/Sales%20Order")).toEqual({
189
+ kind: "slug-name",
190
+ slug: "customize-form",
191
+ name: "Sales Order",
192
+ });
193
+ });
194
+ });
@@ -32,6 +32,7 @@ export interface DeskViewParams {
32
32
  */
33
33
  export type DeskAddress =
34
34
  | { kind: "home" }
35
+ | { kind: "form-builder"; doctype?: string }
35
36
  | { kind: "slug"; slug: string; filtersParam?: string; sortParam?: string }
36
37
  | {
37
38
  kind: "slug-view";
@@ -58,7 +59,7 @@ function decode(segment: string): string {
58
59
 
59
60
  /**
60
61
  * Resolve `path` (no query string; query lives in `params`, One-router
61
- * semantics) against the six route shapes `createBackofficePaths` writes.
62
+ * semantics) against the seven route shapes `createBackofficePaths` writes.
62
63
  * Paths outside `basePath` resolve to `not-found`.
63
64
  */
64
65
  export function resolveDeskPath(
@@ -77,6 +78,10 @@ export function resolveDeskPath(
77
78
  const segments = rest.split("/").filter(Boolean).map(decode);
78
79
  if (segments.length === 0) return { kind: "home" };
79
80
 
81
+ if (segments.length === 1 && segments[0] === "customize-form") {
82
+ return { kind: "form-builder", doctype: first(params.doc_type) };
83
+ }
84
+
80
85
  if (segments[0] === "query-report") {
81
86
  if (segments.length === 2 && segments[1]) {
82
87
  return { kind: "report", reportName: segments[1], filtersParam: first(params.filters) };
@@ -20,6 +20,7 @@ import { resolveDeskPath, type DeskAddress, type DeskViewParams } from "./resolv
20
20
 
21
21
  export type DeskTarget =
22
22
  | { kind: "home" }
23
+ | { kind: "form-builder"; doctype?: string }
23
24
  | { kind: "workspace"; workspace: string }
24
25
  | { kind: "list"; doctype: string; filtersParam?: string; sortParam?: string }
25
26
  | {
@@ -72,6 +73,8 @@ function addressToTarget(
72
73
  switch (address.kind) {
73
74
  case "home":
74
75
  return { kind: "home" };
76
+ case "form-builder":
77
+ return { kind: "form-builder", doctype: address.doctype };
75
78
  case "report":
76
79
  return { kind: "report", reportName: address.reportName, filtersParam: address.filtersParam };
77
80
  case "not-found":
@@ -121,6 +121,10 @@ describe("DocFormScreen with DocType meta refused (LC-96)", () => {
121
121
  expect(screen.queryByText(/Could not load/)).toBeNull();
122
122
  expect(screen.queryByLabelText("Owner", { exact: true })).toBeNull();
123
123
  expect(button("Save")).toBeUndefined();
124
+ expect(screen.queryByTestId("form-toolbar-footer")).toBeNull();
125
+ expect(
126
+ screen.getByTestId("form-toolbar").contains(screen.getByTestId("form-toolbar-menu")),
127
+ ).toBe(true);
124
128
  expect(metaReads).toBe(1);
125
129
  });
126
130
 
@@ -149,13 +153,13 @@ describe("DocFormScreen with DocType meta refused (LC-96)", () => {
149
153
  expect(screen.queryByRole("button", { name: /retry/i })).toBeNull();
150
154
  });
151
155
 
152
- it("says the reader can't create, with each server message on its own line", async () => {
156
+ it("explains a create refusal without exposing server internals", async () => {
153
157
  renderForm("new");
154
158
  const state = await screen.findByTestId("frappe-form-not-permitted", {}, settle);
155
159
  expect(state.textContent).toContain(`You can't create ${doctype}`);
156
160
  const lines = Array.from(state.querySelectorAll("p")).map((node) => node.textContent);
157
- expect(lines).toContain("You are not permitted to access this resource. Login to access");
158
- expect(lines).toContain("Function frappe.desk.form.load.getdoctype is not whitelisted.");
161
+ expect(lines).toContain("You don't have permission to create this document.");
162
+ expect(state.textContent).not.toMatch(/frappe\.|whitelisted|Function/);
159
163
  expect(lines.some((line) => line?.includes("accessFunction"))).toBe(false);
160
164
  expect(button("Save")).toBeUndefined();
161
165
  });