@multiplatform.one/backoffice 7.34.4 → 7.36.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 (811) hide show
  1. package/dist/cjs/chrome/BackofficeAwesomebar.cjs +8 -3
  2. package/dist/cjs/chrome/BackofficeAwesomebar.native.js +8 -3
  3. package/dist/cjs/chrome/BackofficeAwesomebar.native.js.map +1 -1
  4. package/dist/cjs/chrome/CommandPalette.cjs +19 -15
  5. package/dist/cjs/chrome/CommandPalette.native.js +21 -15
  6. package/dist/cjs/chrome/CommandPalette.native.js.map +1 -1
  7. package/dist/cjs/chrome/NotificationsButton.cjs +2 -1
  8. package/dist/cjs/chrome/NotificationsButton.native.js +2 -1
  9. package/dist/cjs/chrome/NotificationsButton.native.js.map +1 -1
  10. package/dist/cjs/chrome/UserMenu.cjs +143 -77
  11. package/dist/cjs/chrome/UserMenu.native.js +157 -90
  12. package/dist/cjs/chrome/UserMenu.native.js.map +1 -1
  13. package/dist/cjs/chrome/notifications-panel.cjs +3 -4
  14. package/dist/cjs/chrome/notifications-panel.native.js +3 -4
  15. package/dist/cjs/chrome/notifications-panel.native.js.map +1 -1
  16. package/dist/cjs/chrome/user-session.cjs +2 -1
  17. package/dist/cjs/chrome/user-session.native.js +2 -1
  18. package/dist/cjs/chrome/user-session.native.js.map +1 -1
  19. package/dist/cjs/config/BackofficeProvider.cjs +3 -1
  20. package/dist/cjs/config/BackofficeProvider.native.js +3 -1
  21. package/dist/cjs/config/BackofficeProvider.native.js.map +1 -1
  22. package/dist/cjs/config/capabilities.cjs +3 -0
  23. package/dist/cjs/config/capabilities.native.js +3 -0
  24. package/dist/cjs/config/capabilities.native.js.map +1 -1
  25. package/dist/cjs/desk/Desk.cjs +17 -0
  26. package/dist/cjs/desk/Desk.native.js +17 -0
  27. package/dist/cjs/desk/Desk.native.js.map +1 -1
  28. package/dist/cjs/desk/DeskSurface.cjs +10 -0
  29. package/dist/cjs/desk/DeskSurface.native.js +10 -0
  30. package/dist/cjs/desk/DeskSurface.native.js.map +1 -1
  31. package/dist/cjs/desk/resolveDeskPath.cjs +6 -0
  32. package/dist/cjs/desk/resolveDeskPath.native.js +6 -0
  33. package/dist/cjs/desk/resolveDeskPath.native.js.map +1 -1
  34. package/dist/cjs/desk/target.cjs +5 -0
  35. package/dist/cjs/desk/target.native.js +5 -0
  36. package/dist/cjs/desk/target.native.js.map +1 -1
  37. package/dist/cjs/form/DocFormScreen.cjs +24 -3
  38. package/dist/cjs/form/DocFormScreen.native.js +27 -6
  39. package/dist/cjs/form/DocFormScreen.native.js.map +1 -1
  40. package/dist/cjs/form/FormConnections.cjs +2 -2
  41. package/dist/cjs/form/FormConnections.native.js +2 -2
  42. package/dist/cjs/form/FormConnections.native.js.map +1 -1
  43. package/dist/cjs/form/FormErrorBoundary.cjs +1 -1
  44. package/dist/cjs/form/FormErrorBoundary.native.js +1 -1
  45. package/dist/cjs/form/FormErrorBoundary.native.js.map +1 -1
  46. package/dist/cjs/form/FormSidebarPanel.cjs +1 -1
  47. package/dist/cjs/form/FormSidebarPanel.native.js +1 -1
  48. package/dist/cjs/form/FormSidebarPanel.native.js.map +1 -1
  49. package/dist/cjs/form/FormTimeline.cjs +1 -2
  50. package/dist/cjs/form/FormTimeline.native.js +1 -2
  51. package/dist/cjs/form/FormTimeline.native.js.map +1 -1
  52. package/dist/cjs/form/FormToolbar.cjs +97 -87
  53. package/dist/cjs/form/FormToolbar.native.js +98 -94
  54. package/dist/cjs/form/FormToolbar.native.js.map +1 -1
  55. package/dist/cjs/formBuilder/DoctypePicker.cjs +89 -0
  56. package/dist/cjs/formBuilder/DoctypePicker.native.js +98 -0
  57. package/dist/cjs/formBuilder/DoctypePicker.native.js.map +1 -0
  58. package/dist/cjs/formBuilder/FieldPalette.cjs +148 -0
  59. package/dist/cjs/formBuilder/FieldPalette.native.js +165 -0
  60. package/dist/cjs/formBuilder/FieldPalette.native.js.map +1 -0
  61. package/dist/cjs/formBuilder/FieldPropertiesPanel.cjs +186 -0
  62. package/dist/cjs/formBuilder/FieldPropertiesPanel.native.js +237 -0
  63. package/dist/cjs/formBuilder/FieldPropertiesPanel.native.js.map +1 -0
  64. package/dist/cjs/formBuilder/FormBuilderCanvas.cjs +407 -0
  65. package/dist/cjs/formBuilder/FormBuilderCanvas.native.js +472 -0
  66. package/dist/cjs/formBuilder/FormBuilderCanvas.native.js.map +1 -0
  67. package/dist/cjs/formBuilder/FormBuilderScreen.cjs +448 -0
  68. package/dist/cjs/formBuilder/FormBuilderScreen.native.js +537 -0
  69. package/dist/cjs/formBuilder/FormBuilderScreen.native.js.map +1 -0
  70. package/dist/cjs/formBuilder/api.cjs +160 -0
  71. package/dist/cjs/formBuilder/api.native.js +193 -0
  72. package/dist/cjs/formBuilder/api.native.js.map +1 -0
  73. package/dist/cjs/formBuilder/fieldtypes.cjs +114 -0
  74. package/dist/cjs/formBuilder/fieldtypes.native.js +133 -0
  75. package/dist/cjs/formBuilder/fieldtypes.native.js.map +1 -0
  76. package/dist/cjs/formBuilder/index.cjs +68 -0
  77. package/dist/cjs/formBuilder/index.native.js +71 -0
  78. package/dist/cjs/formBuilder/index.native.js.map +1 -0
  79. package/dist/cjs/formBuilder/model.cjs +466 -0
  80. package/dist/cjs/formBuilder/model.native.js +714 -0
  81. package/dist/cjs/formBuilder/model.native.js.map +1 -0
  82. package/dist/cjs/formBuilder/useFormBuilderDrag.cjs +399 -0
  83. package/dist/cjs/formBuilder/useFormBuilderDrag.native.js +434 -0
  84. package/dist/cjs/formBuilder/useFormBuilderDrag.native.js.map +1 -0
  85. package/dist/cjs/i18n/en.cjs +294 -4
  86. package/dist/cjs/i18n/en.native.js +294 -4
  87. package/dist/cjs/i18n/en.native.js.map +1 -1
  88. package/dist/cjs/index.cjs +41 -1
  89. package/dist/cjs/index.native.js +40 -0
  90. package/dist/cjs/index.native.js.map +1 -1
  91. package/dist/cjs/list/DoctypeListScreen.cjs +138 -40
  92. package/dist/cjs/list/DoctypeListScreen.native.js +155 -55
  93. package/dist/cjs/list/DoctypeListScreen.native.js.map +1 -1
  94. package/dist/cjs/list/ListFilterBar.cjs +8 -4
  95. package/dist/cjs/list/ListFilterBar.native.js +8 -4
  96. package/dist/cjs/list/ListFilterBar.native.js.map +1 -1
  97. package/dist/cjs/list/ListSidebar.cjs +4 -3
  98. package/dist/cjs/list/ListSidebar.native.js +4 -3
  99. package/dist/cjs/list/ListSidebar.native.js.map +1 -1
  100. package/dist/cjs/list/filter-chips.cjs +10 -4
  101. package/dist/cjs/list/filter-chips.native.js +10 -4
  102. package/dist/cjs/list/filter-chips.native.js.map +1 -1
  103. package/dist/cjs/list/filter-editor.cjs +1 -10
  104. package/dist/cjs/list/filter-editor.native.js +1 -10
  105. package/dist/cjs/list/filter-editor.native.js.map +1 -1
  106. package/dist/cjs/list/filter-saved.cjs +0 -1
  107. package/dist/cjs/list/filter-saved.native.js +0 -1
  108. package/dist/cjs/list/filter-saved.native.js.map +1 -1
  109. package/dist/cjs/list/filter-sort.cjs +0 -1
  110. package/dist/cjs/list/filter-sort.native.js +0 -1
  111. package/dist/cjs/list/filter-sort.native.js.map +1 -1
  112. package/dist/cjs/list/filter-standard.cjs +1 -3
  113. package/dist/cjs/list/filter-standard.native.js +1 -3
  114. package/dist/cjs/list/filter-standard.native.js.map +1 -1
  115. package/dist/cjs/list/list-tools-sheet.cjs +10 -3
  116. package/dist/cjs/list/list-tools-sheet.native.js +12 -3
  117. package/dist/cjs/list/list-tools-sheet.native.js.map +1 -1
  118. package/dist/cjs/navigation/paths.cjs +5 -0
  119. package/dist/cjs/navigation/paths.native.js +7 -0
  120. package/dist/cjs/navigation/paths.native.js.map +1 -1
  121. package/dist/cjs/report/QueryReportScreen.cjs +1 -1
  122. package/dist/cjs/report/QueryReportScreen.native.js +1 -1
  123. package/dist/cjs/report/QueryReportScreen.native.js.map +1 -1
  124. package/dist/cjs/report/queryReportFilterBar.cjs +3 -8
  125. package/dist/cjs/report/queryReportFilterBar.native.js +3 -8
  126. package/dist/cjs/report/queryReportFilterBar.native.js.map +1 -1
  127. package/dist/cjs/shared/sessionUser.cjs +21 -3
  128. package/dist/cjs/shared/sessionUser.native.js +44 -3
  129. package/dist/cjs/shared/sessionUser.native.js.map +1 -1
  130. package/dist/cjs/shell/BackofficeShell.cjs +127 -88
  131. package/dist/cjs/shell/BackofficeShell.native.js +144 -101
  132. package/dist/cjs/shell/BackofficeShell.native.js.map +1 -1
  133. package/dist/cjs/shell/HomeRedirect.cjs +17 -21
  134. package/dist/cjs/shell/HomeRedirect.native.js +17 -20
  135. package/dist/cjs/shell/HomeRedirect.native.js.map +1 -1
  136. package/dist/cjs/shell/WorkspaceSidebar.cjs +53 -25
  137. package/dist/cjs/shell/WorkspaceSidebar.native.js +55 -25
  138. package/dist/cjs/shell/WorkspaceSidebar.native.js.map +1 -1
  139. package/dist/cjs/shell/shellSidebarSlot.cjs +31 -0
  140. package/dist/cjs/shell/shellSidebarSlot.native.js +34 -0
  141. package/dist/cjs/shell/shellSidebarSlot.native.js.map +1 -0
  142. package/dist/cjs/shell/useWorkspaces.cjs +23 -6
  143. package/dist/cjs/shell/useWorkspaces.native.js +25 -6
  144. package/dist/cjs/shell/useWorkspaces.native.js.map +1 -1
  145. package/dist/cjs/views/DashboardView.cjs +2 -2
  146. package/dist/cjs/views/DashboardView.native.js +2 -2
  147. package/dist/cjs/views/DashboardView.native.js.map +1 -1
  148. package/dist/cjs/views/ImageView.cjs +14 -5
  149. package/dist/cjs/views/ImageView.native.js +14 -5
  150. package/dist/cjs/views/ImageView.native.js.map +1 -1
  151. package/dist/cjs/views/ViewHeader.cjs +17 -6
  152. package/dist/cjs/views/ViewHeader.native.js +17 -6
  153. package/dist/cjs/views/ViewHeader.native.js.map +1 -1
  154. package/dist/cjs/views/ViewSwitcherMenu.cjs +10 -9
  155. package/dist/cjs/views/ViewSwitcherMenu.native.js +10 -9
  156. package/dist/cjs/views/ViewSwitcherMenu.native.js.map +1 -1
  157. package/dist/cjs/views/viewAvailability.cjs +17 -9
  158. package/dist/cjs/views/viewAvailability.native.js +18 -8
  159. package/dist/cjs/views/viewAvailability.native.js.map +1 -1
  160. package/dist/cjs/views/viewMeta.cjs +24 -1
  161. package/dist/cjs/views/viewMeta.native.js +30 -1
  162. package/dist/cjs/views/viewMeta.native.js.map +1 -1
  163. package/dist/cjs/workspace/WorkspaceChartBlock.cjs +1 -1
  164. package/dist/cjs/workspace/WorkspaceChartBlock.native.js +1 -1
  165. package/dist/cjs/workspace/WorkspaceChartBlock.native.js.map +1 -1
  166. package/dist/cjs/workspace/WorkspaceLinkDirectory.cjs +2 -2
  167. package/dist/cjs/workspace/WorkspaceLinkDirectory.native.js +2 -2
  168. package/dist/cjs/workspace/WorkspaceLinkDirectory.native.js.map +1 -1
  169. package/dist/cjs/workspace/WorkspaceRecents.cjs +1 -1
  170. package/dist/cjs/workspace/WorkspaceRecents.native.js +1 -1
  171. package/dist/cjs/workspace/WorkspaceRecents.native.js.map +1 -1
  172. package/dist/cjs/workspace/WorkspaceShortcut.cjs +1 -1
  173. package/dist/cjs/workspace/WorkspaceShortcut.native.js +1 -1
  174. package/dist/cjs/workspace/WorkspaceShortcut.native.js.map +1 -1
  175. package/dist/esm/chrome/BackofficeAwesomebar.mjs +9 -4
  176. package/dist/esm/chrome/BackofficeAwesomebar.mjs.map +1 -1
  177. package/dist/esm/chrome/BackofficeAwesomebar.native.js +9 -4
  178. package/dist/esm/chrome/BackofficeAwesomebar.native.js.map +1 -1
  179. package/dist/esm/chrome/CommandPalette.mjs +21 -17
  180. package/dist/esm/chrome/CommandPalette.mjs.map +1 -1
  181. package/dist/esm/chrome/CommandPalette.native.js +23 -17
  182. package/dist/esm/chrome/CommandPalette.native.js.map +1 -1
  183. package/dist/esm/chrome/NotificationsButton.mjs +3 -2
  184. package/dist/esm/chrome/NotificationsButton.mjs.map +1 -1
  185. package/dist/esm/chrome/NotificationsButton.native.js +3 -2
  186. package/dist/esm/chrome/NotificationsButton.native.js.map +1 -1
  187. package/dist/esm/chrome/UserMenu.mjs +145 -79
  188. package/dist/esm/chrome/UserMenu.mjs.map +1 -1
  189. package/dist/esm/chrome/UserMenu.native.js +159 -92
  190. package/dist/esm/chrome/UserMenu.native.js.map +1 -1
  191. package/dist/esm/chrome/notifications-panel.mjs +4 -5
  192. package/dist/esm/chrome/notifications-panel.mjs.map +1 -1
  193. package/dist/esm/chrome/notifications-panel.native.js +4 -5
  194. package/dist/esm/chrome/notifications-panel.native.js.map +1 -1
  195. package/dist/esm/chrome/user-session.mjs +3 -2
  196. package/dist/esm/chrome/user-session.mjs.map +1 -1
  197. package/dist/esm/chrome/user-session.native.js +3 -2
  198. package/dist/esm/chrome/user-session.native.js.map +1 -1
  199. package/dist/esm/config/BackofficeProvider.mjs +3 -1
  200. package/dist/esm/config/BackofficeProvider.mjs.map +1 -1
  201. package/dist/esm/config/BackofficeProvider.native.js +3 -1
  202. package/dist/esm/config/BackofficeProvider.native.js.map +1 -1
  203. package/dist/esm/config/capabilities.mjs +3 -0
  204. package/dist/esm/config/capabilities.mjs.map +1 -1
  205. package/dist/esm/config/capabilities.native.js +3 -0
  206. package/dist/esm/config/capabilities.native.js.map +1 -1
  207. package/dist/esm/desk/Desk.mjs +17 -0
  208. package/dist/esm/desk/Desk.mjs.map +1 -1
  209. package/dist/esm/desk/Desk.native.js +17 -0
  210. package/dist/esm/desk/Desk.native.js.map +1 -1
  211. package/dist/esm/desk/DeskSurface.mjs +10 -0
  212. package/dist/esm/desk/DeskSurface.mjs.map +1 -1
  213. package/dist/esm/desk/DeskSurface.native.js +10 -0
  214. package/dist/esm/desk/DeskSurface.native.js.map +1 -1
  215. package/dist/esm/desk/resolveDeskPath.mjs +6 -0
  216. package/dist/esm/desk/resolveDeskPath.mjs.map +1 -1
  217. package/dist/esm/desk/resolveDeskPath.native.js +6 -0
  218. package/dist/esm/desk/resolveDeskPath.native.js.map +1 -1
  219. package/dist/esm/desk/target.mjs +5 -0
  220. package/dist/esm/desk/target.mjs.map +1 -1
  221. package/dist/esm/desk/target.native.js +5 -0
  222. package/dist/esm/desk/target.native.js.map +1 -1
  223. package/dist/esm/form/DocFormScreen.mjs +24 -3
  224. package/dist/esm/form/DocFormScreen.mjs.map +1 -1
  225. package/dist/esm/form/DocFormScreen.native.js +27 -6
  226. package/dist/esm/form/DocFormScreen.native.js.map +1 -1
  227. package/dist/esm/form/FormConnections.mjs +2 -2
  228. package/dist/esm/form/FormConnections.mjs.map +1 -1
  229. package/dist/esm/form/FormConnections.native.js +2 -2
  230. package/dist/esm/form/FormConnections.native.js.map +1 -1
  231. package/dist/esm/form/FormErrorBoundary.mjs +1 -1
  232. package/dist/esm/form/FormErrorBoundary.mjs.map +1 -1
  233. package/dist/esm/form/FormErrorBoundary.native.js +1 -1
  234. package/dist/esm/form/FormErrorBoundary.native.js.map +1 -1
  235. package/dist/esm/form/FormSidebarPanel.mjs +1 -1
  236. package/dist/esm/form/FormSidebarPanel.mjs.map +1 -1
  237. package/dist/esm/form/FormSidebarPanel.native.js +1 -1
  238. package/dist/esm/form/FormSidebarPanel.native.js.map +1 -1
  239. package/dist/esm/form/FormTimeline.mjs +1 -2
  240. package/dist/esm/form/FormTimeline.mjs.map +1 -1
  241. package/dist/esm/form/FormTimeline.native.js +1 -2
  242. package/dist/esm/form/FormTimeline.native.js.map +1 -1
  243. package/dist/esm/form/FormToolbar.mjs +99 -89
  244. package/dist/esm/form/FormToolbar.mjs.map +1 -1
  245. package/dist/esm/form/FormToolbar.native.js +100 -96
  246. package/dist/esm/form/FormToolbar.native.js.map +1 -1
  247. package/dist/esm/formBuilder/DoctypePicker.mjs +64 -0
  248. package/dist/esm/formBuilder/DoctypePicker.mjs.map +1 -0
  249. package/dist/esm/formBuilder/DoctypePicker.native.js +70 -0
  250. package/dist/esm/formBuilder/DoctypePicker.native.js.map +1 -0
  251. package/dist/esm/formBuilder/FieldPalette.mjs +123 -0
  252. package/dist/esm/formBuilder/FieldPalette.mjs.map +1 -0
  253. package/dist/esm/formBuilder/FieldPalette.native.js +137 -0
  254. package/dist/esm/formBuilder/FieldPalette.native.js.map +1 -0
  255. package/dist/esm/formBuilder/FieldPropertiesPanel.mjs +161 -0
  256. package/dist/esm/formBuilder/FieldPropertiesPanel.mjs.map +1 -0
  257. package/dist/esm/formBuilder/FieldPropertiesPanel.native.js +209 -0
  258. package/dist/esm/formBuilder/FieldPropertiesPanel.native.js.map +1 -0
  259. package/dist/esm/formBuilder/FormBuilderCanvas.mjs +382 -0
  260. package/dist/esm/formBuilder/FormBuilderCanvas.mjs.map +1 -0
  261. package/dist/esm/formBuilder/FormBuilderCanvas.native.js +444 -0
  262. package/dist/esm/formBuilder/FormBuilderCanvas.native.js.map +1 -0
  263. package/dist/esm/formBuilder/FormBuilderScreen.mjs +423 -0
  264. package/dist/esm/formBuilder/FormBuilderScreen.mjs.map +1 -0
  265. package/dist/esm/formBuilder/FormBuilderScreen.native.js +509 -0
  266. package/dist/esm/formBuilder/FormBuilderScreen.native.js.map +1 -0
  267. package/dist/esm/formBuilder/api.mjs +129 -0
  268. package/dist/esm/formBuilder/api.mjs.map +1 -0
  269. package/dist/esm/formBuilder/api.native.js +159 -0
  270. package/dist/esm/formBuilder/api.native.js.map +1 -0
  271. package/dist/esm/formBuilder/fieldtypes.mjs +82 -0
  272. package/dist/esm/formBuilder/fieldtypes.mjs.map +1 -0
  273. package/dist/esm/formBuilder/fieldtypes.native.js +98 -0
  274. package/dist/esm/formBuilder/fieldtypes.native.js.map +1 -0
  275. package/dist/esm/formBuilder/index.mjs +6 -0
  276. package/dist/esm/formBuilder/index.mjs.map +1 -0
  277. package/dist/esm/formBuilder/index.native.js +6 -0
  278. package/dist/esm/formBuilder/index.native.js.map +1 -0
  279. package/dist/esm/formBuilder/model.mjs +420 -0
  280. package/dist/esm/formBuilder/model.mjs.map +1 -0
  281. package/dist/esm/formBuilder/model.native.js +665 -0
  282. package/dist/esm/formBuilder/model.native.js.map +1 -0
  283. package/dist/esm/formBuilder/useFormBuilderDrag.mjs +374 -0
  284. package/dist/esm/formBuilder/useFormBuilderDrag.mjs.map +1 -0
  285. package/dist/esm/formBuilder/useFormBuilderDrag.native.js +406 -0
  286. package/dist/esm/formBuilder/useFormBuilderDrag.native.js.map +1 -0
  287. package/dist/esm/i18n/en.mjs +294 -4
  288. package/dist/esm/i18n/en.mjs.map +1 -1
  289. package/dist/esm/i18n/en.native.js +294 -4
  290. package/dist/esm/i18n/en.native.js.map +1 -1
  291. package/dist/esm/index.mjs +3 -2
  292. package/dist/esm/index.mjs.map +1 -1
  293. package/dist/esm/index.native.js +3 -2
  294. package/dist/esm/index.native.js.map +1 -1
  295. package/dist/esm/list/DoctypeListScreen.mjs +141 -43
  296. package/dist/esm/list/DoctypeListScreen.mjs.map +1 -1
  297. package/dist/esm/list/DoctypeListScreen.native.js +158 -58
  298. package/dist/esm/list/DoctypeListScreen.native.js.map +1 -1
  299. package/dist/esm/list/ListFilterBar.mjs +9 -5
  300. package/dist/esm/list/ListFilterBar.mjs.map +1 -1
  301. package/dist/esm/list/ListFilterBar.native.js +9 -5
  302. package/dist/esm/list/ListFilterBar.native.js.map +1 -1
  303. package/dist/esm/list/ListSidebar.mjs +4 -3
  304. package/dist/esm/list/ListSidebar.mjs.map +1 -1
  305. package/dist/esm/list/ListSidebar.native.js +4 -3
  306. package/dist/esm/list/ListSidebar.native.js.map +1 -1
  307. package/dist/esm/list/filter-chips.mjs +10 -4
  308. package/dist/esm/list/filter-chips.mjs.map +1 -1
  309. package/dist/esm/list/filter-chips.native.js +10 -4
  310. package/dist/esm/list/filter-chips.native.js.map +1 -1
  311. package/dist/esm/list/filter-editor.mjs +1 -10
  312. package/dist/esm/list/filter-editor.mjs.map +1 -1
  313. package/dist/esm/list/filter-editor.native.js +1 -10
  314. package/dist/esm/list/filter-editor.native.js.map +1 -1
  315. package/dist/esm/list/filter-saved.mjs +0 -1
  316. package/dist/esm/list/filter-saved.mjs.map +1 -1
  317. package/dist/esm/list/filter-saved.native.js +0 -1
  318. package/dist/esm/list/filter-saved.native.js.map +1 -1
  319. package/dist/esm/list/filter-sort.mjs +0 -1
  320. package/dist/esm/list/filter-sort.mjs.map +1 -1
  321. package/dist/esm/list/filter-sort.native.js +0 -1
  322. package/dist/esm/list/filter-sort.native.js.map +1 -1
  323. package/dist/esm/list/filter-standard.mjs +1 -3
  324. package/dist/esm/list/filter-standard.mjs.map +1 -1
  325. package/dist/esm/list/filter-standard.native.js +1 -3
  326. package/dist/esm/list/filter-standard.native.js.map +1 -1
  327. package/dist/esm/list/list-tools-sheet.mjs +10 -3
  328. package/dist/esm/list/list-tools-sheet.mjs.map +1 -1
  329. package/dist/esm/list/list-tools-sheet.native.js +12 -3
  330. package/dist/esm/list/list-tools-sheet.native.js.map +1 -1
  331. package/dist/esm/navigation/paths.mjs +5 -1
  332. package/dist/esm/navigation/paths.mjs.map +1 -1
  333. package/dist/esm/navigation/paths.native.js +7 -1
  334. package/dist/esm/navigation/paths.native.js.map +1 -1
  335. package/dist/esm/report/QueryReportScreen.mjs +1 -1
  336. package/dist/esm/report/QueryReportScreen.mjs.map +1 -1
  337. package/dist/esm/report/QueryReportScreen.native.js +1 -1
  338. package/dist/esm/report/QueryReportScreen.native.js.map +1 -1
  339. package/dist/esm/report/queryReportFilterBar.mjs +3 -8
  340. package/dist/esm/report/queryReportFilterBar.mjs.map +1 -1
  341. package/dist/esm/report/queryReportFilterBar.native.js +3 -8
  342. package/dist/esm/report/queryReportFilterBar.native.js.map +1 -1
  343. package/dist/esm/shared/sessionUser.mjs +21 -4
  344. package/dist/esm/shared/sessionUser.mjs.map +1 -1
  345. package/dist/esm/shared/sessionUser.native.js +44 -4
  346. package/dist/esm/shared/sessionUser.native.js.map +1 -1
  347. package/dist/esm/shell/BackofficeShell.mjs +130 -91
  348. package/dist/esm/shell/BackofficeShell.mjs.map +1 -1
  349. package/dist/esm/shell/BackofficeShell.native.js +147 -104
  350. package/dist/esm/shell/BackofficeShell.native.js.map +1 -1
  351. package/dist/esm/shell/HomeRedirect.mjs +20 -24
  352. package/dist/esm/shell/HomeRedirect.mjs.map +1 -1
  353. package/dist/esm/shell/HomeRedirect.native.js +20 -23
  354. package/dist/esm/shell/HomeRedirect.native.js.map +1 -1
  355. package/dist/esm/shell/WorkspaceSidebar.mjs +55 -27
  356. package/dist/esm/shell/WorkspaceSidebar.mjs.map +1 -1
  357. package/dist/esm/shell/WorkspaceSidebar.native.js +57 -27
  358. package/dist/esm/shell/WorkspaceSidebar.native.js.map +1 -1
  359. package/dist/esm/shell/shellSidebarSlot.mjs +3 -0
  360. package/dist/esm/shell/shellSidebarSlot.mjs.map +1 -0
  361. package/dist/esm/shell/shellSidebarSlot.native.js +3 -0
  362. package/dist/esm/shell/shellSidebarSlot.native.js.map +1 -0
  363. package/dist/esm/shell/useWorkspaces.mjs +25 -8
  364. package/dist/esm/shell/useWorkspaces.mjs.map +1 -1
  365. package/dist/esm/shell/useWorkspaces.native.js +27 -8
  366. package/dist/esm/shell/useWorkspaces.native.js.map +1 -1
  367. package/dist/esm/views/DashboardView.mjs +2 -2
  368. package/dist/esm/views/DashboardView.mjs.map +1 -1
  369. package/dist/esm/views/DashboardView.native.js +2 -2
  370. package/dist/esm/views/DashboardView.native.js.map +1 -1
  371. package/dist/esm/views/ImageView.mjs +15 -6
  372. package/dist/esm/views/ImageView.mjs.map +1 -1
  373. package/dist/esm/views/ImageView.native.js +15 -6
  374. package/dist/esm/views/ImageView.native.js.map +1 -1
  375. package/dist/esm/views/ViewHeader.mjs +18 -7
  376. package/dist/esm/views/ViewHeader.mjs.map +1 -1
  377. package/dist/esm/views/ViewHeader.native.js +18 -7
  378. package/dist/esm/views/ViewHeader.native.js.map +1 -1
  379. package/dist/esm/views/ViewSwitcherMenu.mjs +11 -10
  380. package/dist/esm/views/ViewSwitcherMenu.mjs.map +1 -1
  381. package/dist/esm/views/ViewSwitcherMenu.native.js +11 -10
  382. package/dist/esm/views/ViewSwitcherMenu.native.js.map +1 -1
  383. package/dist/esm/views/viewAvailability.mjs +17 -9
  384. package/dist/esm/views/viewAvailability.mjs.map +1 -1
  385. package/dist/esm/views/viewAvailability.native.js +18 -8
  386. package/dist/esm/views/viewAvailability.native.js.map +1 -1
  387. package/dist/esm/views/viewMeta.mjs +23 -1
  388. package/dist/esm/views/viewMeta.mjs.map +1 -1
  389. package/dist/esm/views/viewMeta.native.js +29 -1
  390. package/dist/esm/views/viewMeta.native.js.map +1 -1
  391. package/dist/esm/workspace/WorkspaceChartBlock.mjs +1 -1
  392. package/dist/esm/workspace/WorkspaceChartBlock.mjs.map +1 -1
  393. package/dist/esm/workspace/WorkspaceChartBlock.native.js +1 -1
  394. package/dist/esm/workspace/WorkspaceChartBlock.native.js.map +1 -1
  395. package/dist/esm/workspace/WorkspaceLinkDirectory.mjs +2 -2
  396. package/dist/esm/workspace/WorkspaceLinkDirectory.mjs.map +1 -1
  397. package/dist/esm/workspace/WorkspaceLinkDirectory.native.js +2 -2
  398. package/dist/esm/workspace/WorkspaceLinkDirectory.native.js.map +1 -1
  399. package/dist/esm/workspace/WorkspaceRecents.mjs +2 -2
  400. package/dist/esm/workspace/WorkspaceRecents.mjs.map +1 -1
  401. package/dist/esm/workspace/WorkspaceRecents.native.js +2 -2
  402. package/dist/esm/workspace/WorkspaceRecents.native.js.map +1 -1
  403. package/dist/esm/workspace/WorkspaceShortcut.mjs +2 -2
  404. package/dist/esm/workspace/WorkspaceShortcut.mjs.map +1 -1
  405. package/dist/esm/workspace/WorkspaceShortcut.native.js +2 -2
  406. package/dist/esm/workspace/WorkspaceShortcut.native.js.map +1 -1
  407. package/dist/jsx/chrome/BackofficeAwesomebar.mjs +9 -4
  408. package/dist/jsx/chrome/BackofficeAwesomebar.mjs.map +1 -1
  409. package/dist/jsx/chrome/BackofficeAwesomebar.native.js +8 -3
  410. package/dist/jsx/chrome/BackofficeAwesomebar.native.js.map +1 -1
  411. package/dist/jsx/chrome/CommandPalette.mjs +21 -17
  412. package/dist/jsx/chrome/CommandPalette.mjs.map +1 -1
  413. package/dist/jsx/chrome/CommandPalette.native.js +21 -15
  414. package/dist/jsx/chrome/CommandPalette.native.js.map +1 -1
  415. package/dist/jsx/chrome/NotificationsButton.mjs +3 -2
  416. package/dist/jsx/chrome/NotificationsButton.mjs.map +1 -1
  417. package/dist/jsx/chrome/NotificationsButton.native.js +2 -1
  418. package/dist/jsx/chrome/NotificationsButton.native.js.map +1 -1
  419. package/dist/jsx/chrome/UserMenu.mjs +145 -79
  420. package/dist/jsx/chrome/UserMenu.mjs.map +1 -1
  421. package/dist/jsx/chrome/UserMenu.native.js +157 -90
  422. package/dist/jsx/chrome/UserMenu.native.js.map +1 -1
  423. package/dist/jsx/chrome/notifications-panel.mjs +4 -5
  424. package/dist/jsx/chrome/notifications-panel.mjs.map +1 -1
  425. package/dist/jsx/chrome/notifications-panel.native.js +3 -4
  426. package/dist/jsx/chrome/notifications-panel.native.js.map +1 -1
  427. package/dist/jsx/chrome/user-session.mjs +3 -2
  428. package/dist/jsx/chrome/user-session.mjs.map +1 -1
  429. package/dist/jsx/chrome/user-session.native.js +2 -1
  430. package/dist/jsx/chrome/user-session.native.js.map +1 -1
  431. package/dist/jsx/config/BackofficeProvider.mjs +3 -1
  432. package/dist/jsx/config/BackofficeProvider.mjs.map +1 -1
  433. package/dist/jsx/config/BackofficeProvider.native.js +3 -1
  434. package/dist/jsx/config/BackofficeProvider.native.js.map +1 -1
  435. package/dist/jsx/config/capabilities.mjs +3 -0
  436. package/dist/jsx/config/capabilities.mjs.map +1 -1
  437. package/dist/jsx/config/capabilities.native.js +3 -0
  438. package/dist/jsx/config/capabilities.native.js.map +1 -1
  439. package/dist/jsx/desk/Desk.mjs +17 -0
  440. package/dist/jsx/desk/Desk.mjs.map +1 -1
  441. package/dist/jsx/desk/Desk.native.js +17 -0
  442. package/dist/jsx/desk/Desk.native.js.map +1 -1
  443. package/dist/jsx/desk/DeskSurface.mjs +10 -0
  444. package/dist/jsx/desk/DeskSurface.mjs.map +1 -1
  445. package/dist/jsx/desk/DeskSurface.native.js +10 -0
  446. package/dist/jsx/desk/DeskSurface.native.js.map +1 -1
  447. package/dist/jsx/desk/resolveDeskPath.mjs +6 -0
  448. package/dist/jsx/desk/resolveDeskPath.mjs.map +1 -1
  449. package/dist/jsx/desk/resolveDeskPath.native.js +6 -0
  450. package/dist/jsx/desk/resolveDeskPath.native.js.map +1 -1
  451. package/dist/jsx/desk/target.mjs +5 -0
  452. package/dist/jsx/desk/target.mjs.map +1 -1
  453. package/dist/jsx/desk/target.native.js +5 -0
  454. package/dist/jsx/desk/target.native.js.map +1 -1
  455. package/dist/jsx/form/DocFormScreen.mjs +24 -3
  456. package/dist/jsx/form/DocFormScreen.mjs.map +1 -1
  457. package/dist/jsx/form/DocFormScreen.native.js +27 -6
  458. package/dist/jsx/form/DocFormScreen.native.js.map +1 -1
  459. package/dist/jsx/form/FormConnections.mjs +2 -2
  460. package/dist/jsx/form/FormConnections.mjs.map +1 -1
  461. package/dist/jsx/form/FormConnections.native.js +2 -2
  462. package/dist/jsx/form/FormConnections.native.js.map +1 -1
  463. package/dist/jsx/form/FormErrorBoundary.mjs +1 -1
  464. package/dist/jsx/form/FormErrorBoundary.mjs.map +1 -1
  465. package/dist/jsx/form/FormErrorBoundary.native.js +1 -1
  466. package/dist/jsx/form/FormErrorBoundary.native.js.map +1 -1
  467. package/dist/jsx/form/FormSidebarPanel.mjs +1 -1
  468. package/dist/jsx/form/FormSidebarPanel.mjs.map +1 -1
  469. package/dist/jsx/form/FormSidebarPanel.native.js +1 -1
  470. package/dist/jsx/form/FormSidebarPanel.native.js.map +1 -1
  471. package/dist/jsx/form/FormTimeline.mjs +1 -2
  472. package/dist/jsx/form/FormTimeline.mjs.map +1 -1
  473. package/dist/jsx/form/FormTimeline.native.js +1 -2
  474. package/dist/jsx/form/FormTimeline.native.js.map +1 -1
  475. package/dist/jsx/form/FormToolbar.mjs +99 -89
  476. package/dist/jsx/form/FormToolbar.mjs.map +1 -1
  477. package/dist/jsx/form/FormToolbar.native.js +98 -94
  478. package/dist/jsx/form/FormToolbar.native.js.map +1 -1
  479. package/dist/jsx/formBuilder/DoctypePicker.mjs +64 -0
  480. package/dist/jsx/formBuilder/DoctypePicker.mjs.map +1 -0
  481. package/dist/jsx/formBuilder/DoctypePicker.native.js +98 -0
  482. package/dist/jsx/formBuilder/DoctypePicker.native.js.map +1 -0
  483. package/dist/jsx/formBuilder/FieldPalette.mjs +123 -0
  484. package/dist/jsx/formBuilder/FieldPalette.mjs.map +1 -0
  485. package/dist/jsx/formBuilder/FieldPalette.native.js +165 -0
  486. package/dist/jsx/formBuilder/FieldPalette.native.js.map +1 -0
  487. package/dist/jsx/formBuilder/FieldPropertiesPanel.mjs +161 -0
  488. package/dist/jsx/formBuilder/FieldPropertiesPanel.mjs.map +1 -0
  489. package/dist/jsx/formBuilder/FieldPropertiesPanel.native.js +237 -0
  490. package/dist/jsx/formBuilder/FieldPropertiesPanel.native.js.map +1 -0
  491. package/dist/jsx/formBuilder/FormBuilderCanvas.mjs +382 -0
  492. package/dist/jsx/formBuilder/FormBuilderCanvas.mjs.map +1 -0
  493. package/dist/jsx/formBuilder/FormBuilderCanvas.native.js +472 -0
  494. package/dist/jsx/formBuilder/FormBuilderCanvas.native.js.map +1 -0
  495. package/dist/jsx/formBuilder/FormBuilderScreen.mjs +423 -0
  496. package/dist/jsx/formBuilder/FormBuilderScreen.mjs.map +1 -0
  497. package/dist/jsx/formBuilder/FormBuilderScreen.native.js +537 -0
  498. package/dist/jsx/formBuilder/FormBuilderScreen.native.js.map +1 -0
  499. package/dist/jsx/formBuilder/api.mjs +129 -0
  500. package/dist/jsx/formBuilder/api.mjs.map +1 -0
  501. package/dist/jsx/formBuilder/api.native.js +193 -0
  502. package/dist/jsx/formBuilder/api.native.js.map +1 -0
  503. package/dist/jsx/formBuilder/fieldtypes.mjs +82 -0
  504. package/dist/jsx/formBuilder/fieldtypes.mjs.map +1 -0
  505. package/dist/jsx/formBuilder/fieldtypes.native.js +133 -0
  506. package/dist/jsx/formBuilder/fieldtypes.native.js.map +1 -0
  507. package/dist/jsx/formBuilder/index.mjs +6 -0
  508. package/dist/jsx/formBuilder/index.mjs.map +1 -0
  509. package/dist/jsx/formBuilder/index.native.js +71 -0
  510. package/dist/jsx/formBuilder/index.native.js.map +1 -0
  511. package/dist/jsx/formBuilder/model.mjs +420 -0
  512. package/dist/jsx/formBuilder/model.mjs.map +1 -0
  513. package/dist/jsx/formBuilder/model.native.js +714 -0
  514. package/dist/jsx/formBuilder/model.native.js.map +1 -0
  515. package/dist/jsx/formBuilder/useFormBuilderDrag.mjs +374 -0
  516. package/dist/jsx/formBuilder/useFormBuilderDrag.mjs.map +1 -0
  517. package/dist/jsx/formBuilder/useFormBuilderDrag.native.js +434 -0
  518. package/dist/jsx/formBuilder/useFormBuilderDrag.native.js.map +1 -0
  519. package/dist/jsx/i18n/en.mjs +294 -4
  520. package/dist/jsx/i18n/en.mjs.map +1 -1
  521. package/dist/jsx/i18n/en.native.js +294 -4
  522. package/dist/jsx/i18n/en.native.js.map +1 -1
  523. package/dist/jsx/index.js +3 -2
  524. package/dist/jsx/index.js.map +1 -1
  525. package/dist/jsx/index.mjs +3 -2
  526. package/dist/jsx/index.mjs.map +1 -1
  527. package/dist/jsx/index.native.js +40 -0
  528. package/dist/jsx/index.native.js.map +1 -1
  529. package/dist/jsx/list/DoctypeListScreen.mjs +141 -43
  530. package/dist/jsx/list/DoctypeListScreen.mjs.map +1 -1
  531. package/dist/jsx/list/DoctypeListScreen.native.js +155 -55
  532. package/dist/jsx/list/DoctypeListScreen.native.js.map +1 -1
  533. package/dist/jsx/list/ListFilterBar.mjs +9 -5
  534. package/dist/jsx/list/ListFilterBar.mjs.map +1 -1
  535. package/dist/jsx/list/ListFilterBar.native.js +8 -4
  536. package/dist/jsx/list/ListFilterBar.native.js.map +1 -1
  537. package/dist/jsx/list/ListSidebar.mjs +4 -3
  538. package/dist/jsx/list/ListSidebar.mjs.map +1 -1
  539. package/dist/jsx/list/ListSidebar.native.js +4 -3
  540. package/dist/jsx/list/ListSidebar.native.js.map +1 -1
  541. package/dist/jsx/list/filter-chips.mjs +10 -4
  542. package/dist/jsx/list/filter-chips.mjs.map +1 -1
  543. package/dist/jsx/list/filter-chips.native.js +10 -4
  544. package/dist/jsx/list/filter-chips.native.js.map +1 -1
  545. package/dist/jsx/list/filter-editor.mjs +1 -10
  546. package/dist/jsx/list/filter-editor.mjs.map +1 -1
  547. package/dist/jsx/list/filter-editor.native.js +1 -10
  548. package/dist/jsx/list/filter-editor.native.js.map +1 -1
  549. package/dist/jsx/list/filter-saved.mjs +0 -1
  550. package/dist/jsx/list/filter-saved.mjs.map +1 -1
  551. package/dist/jsx/list/filter-saved.native.js +0 -1
  552. package/dist/jsx/list/filter-saved.native.js.map +1 -1
  553. package/dist/jsx/list/filter-sort.mjs +0 -1
  554. package/dist/jsx/list/filter-sort.mjs.map +1 -1
  555. package/dist/jsx/list/filter-sort.native.js +0 -1
  556. package/dist/jsx/list/filter-sort.native.js.map +1 -1
  557. package/dist/jsx/list/filter-standard.mjs +1 -3
  558. package/dist/jsx/list/filter-standard.mjs.map +1 -1
  559. package/dist/jsx/list/filter-standard.native.js +1 -3
  560. package/dist/jsx/list/filter-standard.native.js.map +1 -1
  561. package/dist/jsx/list/list-tools-sheet.mjs +10 -3
  562. package/dist/jsx/list/list-tools-sheet.mjs.map +1 -1
  563. package/dist/jsx/list/list-tools-sheet.native.js +12 -3
  564. package/dist/jsx/list/list-tools-sheet.native.js.map +1 -1
  565. package/dist/jsx/navigation/paths.mjs +5 -1
  566. package/dist/jsx/navigation/paths.mjs.map +1 -1
  567. package/dist/jsx/navigation/paths.native.js +7 -0
  568. package/dist/jsx/navigation/paths.native.js.map +1 -1
  569. package/dist/jsx/report/QueryReportScreen.mjs +1 -1
  570. package/dist/jsx/report/QueryReportScreen.mjs.map +1 -1
  571. package/dist/jsx/report/QueryReportScreen.native.js +1 -1
  572. package/dist/jsx/report/QueryReportScreen.native.js.map +1 -1
  573. package/dist/jsx/report/queryReportFilterBar.mjs +3 -8
  574. package/dist/jsx/report/queryReportFilterBar.mjs.map +1 -1
  575. package/dist/jsx/report/queryReportFilterBar.native.js +3 -8
  576. package/dist/jsx/report/queryReportFilterBar.native.js.map +1 -1
  577. package/dist/jsx/shared/sessionUser.mjs +21 -4
  578. package/dist/jsx/shared/sessionUser.mjs.map +1 -1
  579. package/dist/jsx/shared/sessionUser.native.js +44 -3
  580. package/dist/jsx/shared/sessionUser.native.js.map +1 -1
  581. package/dist/jsx/shell/BackofficeShell.mjs +130 -91
  582. package/dist/jsx/shell/BackofficeShell.mjs.map +1 -1
  583. package/dist/jsx/shell/BackofficeShell.native.js +144 -101
  584. package/dist/jsx/shell/BackofficeShell.native.js.map +1 -1
  585. package/dist/jsx/shell/HomeRedirect.mjs +20 -24
  586. package/dist/jsx/shell/HomeRedirect.mjs.map +1 -1
  587. package/dist/jsx/shell/HomeRedirect.native.js +17 -20
  588. package/dist/jsx/shell/HomeRedirect.native.js.map +1 -1
  589. package/dist/jsx/shell/WorkspaceSidebar.mjs +55 -27
  590. package/dist/jsx/shell/WorkspaceSidebar.mjs.map +1 -1
  591. package/dist/jsx/shell/WorkspaceSidebar.native.js +55 -25
  592. package/dist/jsx/shell/WorkspaceSidebar.native.js.map +1 -1
  593. package/dist/jsx/shell/shellSidebarSlot.mjs +3 -0
  594. package/dist/jsx/shell/shellSidebarSlot.mjs.map +1 -0
  595. package/dist/jsx/shell/shellSidebarSlot.native.js +34 -0
  596. package/dist/jsx/shell/shellSidebarSlot.native.js.map +1 -0
  597. package/dist/jsx/shell/useWorkspaces.mjs +25 -8
  598. package/dist/jsx/shell/useWorkspaces.mjs.map +1 -1
  599. package/dist/jsx/shell/useWorkspaces.native.js +25 -6
  600. package/dist/jsx/shell/useWorkspaces.native.js.map +1 -1
  601. package/dist/jsx/views/DashboardView.mjs +2 -2
  602. package/dist/jsx/views/DashboardView.mjs.map +1 -1
  603. package/dist/jsx/views/DashboardView.native.js +2 -2
  604. package/dist/jsx/views/DashboardView.native.js.map +1 -1
  605. package/dist/jsx/views/ImageView.mjs +15 -6
  606. package/dist/jsx/views/ImageView.mjs.map +1 -1
  607. package/dist/jsx/views/ImageView.native.js +14 -5
  608. package/dist/jsx/views/ImageView.native.js.map +1 -1
  609. package/dist/jsx/views/ViewHeader.mjs +18 -7
  610. package/dist/jsx/views/ViewHeader.mjs.map +1 -1
  611. package/dist/jsx/views/ViewHeader.native.js +17 -6
  612. package/dist/jsx/views/ViewHeader.native.js.map +1 -1
  613. package/dist/jsx/views/ViewSwitcherMenu.mjs +11 -10
  614. package/dist/jsx/views/ViewSwitcherMenu.mjs.map +1 -1
  615. package/dist/jsx/views/ViewSwitcherMenu.native.js +10 -9
  616. package/dist/jsx/views/ViewSwitcherMenu.native.js.map +1 -1
  617. package/dist/jsx/views/viewAvailability.mjs +17 -9
  618. package/dist/jsx/views/viewAvailability.mjs.map +1 -1
  619. package/dist/jsx/views/viewAvailability.native.js +18 -8
  620. package/dist/jsx/views/viewAvailability.native.js.map +1 -1
  621. package/dist/jsx/views/viewMeta.mjs +23 -1
  622. package/dist/jsx/views/viewMeta.mjs.map +1 -1
  623. package/dist/jsx/views/viewMeta.native.js +30 -1
  624. package/dist/jsx/views/viewMeta.native.js.map +1 -1
  625. package/dist/jsx/workspace/WorkspaceChartBlock.mjs +1 -1
  626. package/dist/jsx/workspace/WorkspaceChartBlock.mjs.map +1 -1
  627. package/dist/jsx/workspace/WorkspaceChartBlock.native.js +1 -1
  628. package/dist/jsx/workspace/WorkspaceChartBlock.native.js.map +1 -1
  629. package/dist/jsx/workspace/WorkspaceLinkDirectory.mjs +2 -2
  630. package/dist/jsx/workspace/WorkspaceLinkDirectory.mjs.map +1 -1
  631. package/dist/jsx/workspace/WorkspaceLinkDirectory.native.js +2 -2
  632. package/dist/jsx/workspace/WorkspaceLinkDirectory.native.js.map +1 -1
  633. package/dist/jsx/workspace/WorkspaceRecents.mjs +2 -2
  634. package/dist/jsx/workspace/WorkspaceRecents.mjs.map +1 -1
  635. package/dist/jsx/workspace/WorkspaceRecents.native.js +1 -1
  636. package/dist/jsx/workspace/WorkspaceRecents.native.js.map +1 -1
  637. package/dist/jsx/workspace/WorkspaceShortcut.mjs +2 -2
  638. package/dist/jsx/workspace/WorkspaceShortcut.mjs.map +1 -1
  639. package/dist/jsx/workspace/WorkspaceShortcut.native.js +1 -1
  640. package/dist/jsx/workspace/WorkspaceShortcut.native.js.map +1 -1
  641. package/package.json +12 -12
  642. package/src/backofficeScreens.designLaw.spec.ts +27 -0
  643. package/src/chrome/BackofficeAwesomebar.tsx +8 -4
  644. package/src/chrome/CommandPalette.spec.tsx +19 -0
  645. package/src/chrome/CommandPalette.tsx +38 -24
  646. package/src/chrome/NotificationsButton.screen.spec.tsx +1 -0
  647. package/src/chrome/NotificationsButton.tsx +3 -2
  648. package/src/chrome/UserMenu.screen.spec.tsx +77 -7
  649. package/src/chrome/UserMenu.tsx +173 -109
  650. package/src/chrome/notifications-panel.tsx +3 -6
  651. package/src/chrome/user-session.tsx +8 -2
  652. package/src/config/BackofficeProvider.spec.tsx +6 -2
  653. package/src/config/BackofficeProvider.tsx +10 -0
  654. package/src/config/capabilities.spec.ts +13 -0
  655. package/src/config/capabilities.ts +4 -0
  656. package/src/desk/Desk.spec.tsx +48 -0
  657. package/src/desk/Desk.tsx +25 -1
  658. package/src/desk/DeskPokemon.stories.tsx +177 -0
  659. package/src/desk/DeskSurface.spec.tsx +2 -0
  660. package/src/desk/DeskSurface.tsx +8 -0
  661. package/src/desk/resolveDeskPath.spec.ts +20 -0
  662. package/src/desk/resolveDeskPath.ts +6 -1
  663. package/src/desk/target.ts +3 -0
  664. package/src/form/DocFormScreen.guest.screen.spec.tsx +4 -0
  665. package/src/form/DocFormScreen.rights.spec.tsx +113 -8
  666. package/src/form/DocFormScreen.tsx +65 -44
  667. package/src/form/FormConnections.tsx +2 -2
  668. package/src/form/FormErrorBoundary.spec.tsx +2 -3
  669. package/src/form/FormErrorBoundary.tsx +1 -1
  670. package/src/form/FormSidebarPanel.tsx +1 -1
  671. package/src/form/FormTimeline.tsx +0 -1
  672. package/src/form/FormToolbar.screen.spec.tsx +90 -29
  673. package/src/form/FormToolbar.tsx +98 -132
  674. package/src/formBuilder/DoctypePicker.tsx +72 -0
  675. package/src/formBuilder/FieldPalette.tsx +119 -0
  676. package/src/formBuilder/FieldPropertiesPanel.tsx +213 -0
  677. package/src/formBuilder/FormBuilderCanvas.tsx +468 -0
  678. package/src/formBuilder/FormBuilderScreen.screen.spec.tsx +392 -0
  679. package/src/formBuilder/FormBuilderScreen.stories.tsx +122 -0
  680. package/src/formBuilder/FormBuilderScreen.tsx +491 -0
  681. package/src/formBuilder/api.spec.ts +301 -0
  682. package/src/formBuilder/api.ts +198 -0
  683. package/src/formBuilder/fieldtypes.ts +140 -0
  684. package/src/formBuilder/index.ts +58 -0
  685. package/src/formBuilder/model.spec.ts +401 -0
  686. package/src/formBuilder/model.ts +522 -0
  687. package/src/formBuilder/useFormBuilderDrag.spec.tsx +170 -0
  688. package/src/formBuilder/useFormBuilderDrag.ts +498 -0
  689. package/src/i18n/en.ts +293 -3
  690. package/src/index.ts +58 -1
  691. package/src/list/DoctypeListScreen.guest.screen.spec.tsx +63 -2
  692. package/src/list/DoctypeListScreen.tsx +204 -85
  693. package/src/list/ListFilterBar.screen.spec.tsx +1 -1
  694. package/src/list/ListFilterBar.tsx +16 -6
  695. package/src/list/ListSidebar.tsx +11 -2
  696. package/src/list/filter-chips.tsx +19 -4
  697. package/src/list/filter-editor.tsx +1 -10
  698. package/src/list/filter-saved.tsx +0 -1
  699. package/src/list/filter-sort.tsx +0 -1
  700. package/src/list/filter-standard.tsx +1 -3
  701. package/src/list/list-tools-sheet.tsx +32 -13
  702. package/src/navigation/paths.spec.ts +19 -0
  703. package/src/navigation/paths.ts +8 -0
  704. package/src/report/QueryReportScreen.tsx +1 -1
  705. package/src/report/queryReportFilterBar.tsx +0 -5
  706. package/src/shared/sessionUser.spec.tsx +14 -1
  707. package/src/shared/sessionUser.ts +27 -6
  708. package/src/shell/BackofficeShell.spec.tsx +93 -10
  709. package/src/shell/BackofficeShell.tsx +184 -116
  710. package/src/shell/HomeRedirect.spec.tsx +89 -0
  711. package/src/shell/HomeRedirect.tsx +31 -20
  712. package/src/shell/WorkspaceSidebar.spec.tsx +15 -0
  713. package/src/shell/WorkspaceSidebar.tsx +58 -29
  714. package/src/shell/shellSidebarSlot.spec.tsx +178 -0
  715. package/src/shell/shellSidebarSlot.tsx +7 -0
  716. package/src/shell/useWorkspaces.spec.tsx +45 -0
  717. package/src/shell/useWorkspaces.ts +24 -8
  718. package/src/views/DashboardView.tsx +2 -2
  719. package/src/views/ImageView.tsx +19 -3
  720. package/src/views/ViewHeader.tsx +13 -14
  721. package/src/views/ViewSwitcherMenu.spec.tsx +3 -0
  722. package/src/views/ViewSwitcherMenu.tsx +11 -10
  723. package/src/views/viewAvailability.spec.ts +45 -12
  724. package/src/views/viewAvailability.ts +27 -24
  725. package/src/views/viewMeta.ts +30 -0
  726. package/src/workspace/WorkspaceChartBlock.tsx +1 -1
  727. package/src/workspace/WorkspaceLinkDirectory.tsx +2 -2
  728. package/src/workspace/WorkspaceRecents.tsx +9 -2
  729. package/src/workspace/WorkspaceShortcut.tsx +12 -2
  730. package/types/chrome/BackofficeAwesomebar.d.ts.map +1 -1
  731. package/types/chrome/CommandPalette.d.ts +7 -1
  732. package/types/chrome/CommandPalette.d.ts.map +1 -1
  733. package/types/chrome/NotificationsButton.d.ts.map +1 -1
  734. package/types/chrome/UserMenu.d.ts.map +1 -1
  735. package/types/chrome/notifications-panel.d.ts.map +1 -1
  736. package/types/chrome/user-session.d.ts.map +1 -1
  737. package/types/config/BackofficeProvider.d.ts +7 -1
  738. package/types/config/BackofficeProvider.d.ts.map +1 -1
  739. package/types/config/capabilities.d.ts +3 -0
  740. package/types/config/capabilities.d.ts.map +1 -1
  741. package/types/desk/Desk.d.ts +2 -1
  742. package/types/desk/Desk.d.ts.map +1 -1
  743. package/types/desk/DeskSurface.d.ts.map +1 -1
  744. package/types/desk/resolveDeskPath.d.ts +4 -1
  745. package/types/desk/resolveDeskPath.d.ts.map +1 -1
  746. package/types/desk/target.d.ts +3 -0
  747. package/types/desk/target.d.ts.map +1 -1
  748. package/types/form/DocFormScreen.d.ts +1 -1
  749. package/types/form/DocFormScreen.d.ts.map +1 -1
  750. package/types/form/FormTimeline.d.ts.map +1 -1
  751. package/types/form/FormToolbar.d.ts +5 -32
  752. package/types/form/FormToolbar.d.ts.map +1 -1
  753. package/types/formBuilder/DoctypePicker.d.ts +2 -0
  754. package/types/formBuilder/DoctypePicker.d.ts.map +1 -0
  755. package/types/formBuilder/FieldPalette.d.ts +6 -0
  756. package/types/formBuilder/FieldPalette.d.ts.map +1 -0
  757. package/types/formBuilder/FieldPropertiesPanel.d.ts +10 -0
  758. package/types/formBuilder/FieldPropertiesPanel.d.ts.map +1 -0
  759. package/types/formBuilder/FormBuilderCanvas.d.ts +17 -0
  760. package/types/formBuilder/FormBuilderCanvas.d.ts.map +1 -0
  761. package/types/formBuilder/FormBuilderScreen.d.ts +7 -0
  762. package/types/formBuilder/FormBuilderScreen.d.ts.map +1 -0
  763. package/types/formBuilder/api.d.ts +32 -0
  764. package/types/formBuilder/api.d.ts.map +1 -0
  765. package/types/formBuilder/fieldtypes.d.ts +21 -0
  766. package/types/formBuilder/fieldtypes.d.ts.map +1 -0
  767. package/types/formBuilder/index.d.ts +5 -0
  768. package/types/formBuilder/index.d.ts.map +1 -0
  769. package/types/formBuilder/model.d.ts +76 -0
  770. package/types/formBuilder/model.d.ts.map +1 -0
  771. package/types/formBuilder/useFormBuilderDrag.d.ts +44 -0
  772. package/types/formBuilder/useFormBuilderDrag.d.ts.map +1 -0
  773. package/types/i18n/en.d.ts +293 -3
  774. package/types/i18n/en.d.ts.map +1 -1
  775. package/types/index.d.ts +4 -3
  776. package/types/index.d.ts.map +1 -1
  777. package/types/list/DoctypeListScreen.d.ts.map +1 -1
  778. package/types/list/ListFilterBar.d.ts +10 -4
  779. package/types/list/ListFilterBar.d.ts.map +1 -1
  780. package/types/list/ListSidebar.d.ts +7 -1
  781. package/types/list/ListSidebar.d.ts.map +1 -1
  782. package/types/list/filter-chips.d.ts +9 -1
  783. package/types/list/filter-chips.d.ts.map +1 -1
  784. package/types/list/filter-saved.d.ts.map +1 -1
  785. package/types/list/filter-sort.d.ts.map +1 -1
  786. package/types/list/list-tools-sheet.d.ts +9 -1
  787. package/types/list/list-tools-sheet.d.ts.map +1 -1
  788. package/types/navigation/paths.d.ts +3 -0
  789. package/types/navigation/paths.d.ts.map +1 -1
  790. package/types/report/queryReportFilterBar.d.ts.map +1 -1
  791. package/types/shared/sessionUser.d.ts +1 -0
  792. package/types/shared/sessionUser.d.ts.map +1 -1
  793. package/types/shell/BackofficeShell.d.ts +6 -1
  794. package/types/shell/BackofficeShell.d.ts.map +1 -1
  795. package/types/shell/HomeRedirect.d.ts +3 -1
  796. package/types/shell/HomeRedirect.d.ts.map +1 -1
  797. package/types/shell/WorkspaceSidebar.d.ts.map +1 -1
  798. package/types/shell/shellSidebarSlot.d.ts +2 -0
  799. package/types/shell/shellSidebarSlot.d.ts.map +1 -0
  800. package/types/shell/useWorkspaces.d.ts +4 -0
  801. package/types/shell/useWorkspaces.d.ts.map +1 -1
  802. package/types/views/ImageView.d.ts.map +1 -1
  803. package/types/views/ViewHeader.d.ts +1 -10
  804. package/types/views/ViewHeader.d.ts.map +1 -1
  805. package/types/views/ViewSwitcherMenu.d.ts.map +1 -1
  806. package/types/views/viewAvailability.d.ts +12 -15
  807. package/types/views/viewAvailability.d.ts.map +1 -1
  808. package/types/views/viewMeta.d.ts +10 -0
  809. package/types/views/viewMeta.d.ts.map +1 -1
  810. package/types/workspace/WorkspaceRecents.d.ts.map +1 -1
  811. package/types/workspace/WorkspaceShortcut.d.ts.map +1 -1
@@ -6,20 +6,22 @@
6
6
  * indented under their parent). Data is live via useWorkspaces; paths come
7
7
  * from the BackofficeProvider (basePath-aware).
8
8
  *
9
- * LC-72 STACK-OUTER: rows are one stacked group (first/last outer corners,
10
- * interiors square); hover/press/selection inherit that geometry.
11
- * LC-71: selected = accent fill; keyboard focus paints an inset ring on the
12
- * row, never a selection border on every sibling. The column-edge hairline
13
- * is owned by BackofficeShell so it spans the full rail height (footer
14
- * included) — this nav paints none.
9
+ * Rows are one stacked group split by inset hairlines; each row is a
10
+ * rounded pill so the selected row's neutral fill reads as a tab, not as a
11
+ * slice of the group. LC-71/LC-05: selected = the neutral selection fill;
12
+ * keyboard focus paints an inset ring on the row, never a selection border
13
+ * on every sibling. The column-edge hairline is owned by BackofficeShell so
14
+ * it spans the full rail height (footer included) — this nav paints none.
15
15
  */
16
16
  import {
17
+ componentColors,
17
18
  ScrollView,
18
19
  Separator,
19
20
  SizableText,
20
21
  Spinner,
21
22
  XStack,
22
23
  YStack,
24
+ useTheme,
23
25
  type SidebarItem,
24
26
  type SidebarSection,
25
27
  } from "@multiplatform.one/components";
@@ -27,10 +29,9 @@ import {
27
29
  ensureFocusVisibleRing,
28
30
  getGroupPosition,
29
31
  hairline,
30
- stackRadiusProps,
31
- useReadableTextOn,
32
32
  useResolvedKnobs,
33
33
  } from "@multiplatform.one/theme";
34
+ import type { Icon as PhosphorIcon } from "@phosphor-icons/react";
34
35
  import { useMemo } from "react";
35
36
  import { useTranslation } from "react-i18next";
36
37
  import { useBackofficePaths } from "../config/BackofficeProvider";
@@ -57,18 +58,13 @@ function workspaceItem(
57
58
  ): SidebarItem {
58
59
  const path = paths.workspace(workspace.name);
59
60
  const IconComponent = workspaceIcon(workspace.icon, workspace.name);
60
- const icon = (
61
- // Depth-based inset carried by the icon slot — the Sidebar row API has
62
- // no nesting support, so children indent icon+label via this wrapper.
63
- <XStack paddingLeft={depth > 0 ? depth * 16 : 0}>
64
- <IconComponent size={16} />
65
- </XStack>
66
- );
61
+ const active = activePath === path;
62
+ const icon = <NavIcon Icon={IconComponent} depth={depth} active={active} />;
67
63
  return {
68
64
  label: workspace.title || workspace.name,
69
65
  value: path,
70
66
  icon,
71
- active: activePath === path,
67
+ active,
72
68
  onPress: onNavigate ? () => onNavigate(path) : undefined,
73
69
  };
74
70
  }
@@ -95,6 +91,28 @@ function flattenTree(
95
91
  return items;
96
92
  }
97
93
 
94
+ /**
95
+ * Phosphor takes a resolved colour string, not a token: native renders an
96
+ * uncoloured glyph black, which vanishes on the dark scheme.
97
+ */
98
+ function NavIcon({ Icon, depth, active }: { Icon: PhosphorIcon; depth: number; active: boolean }) {
99
+ const theme = useTheme();
100
+ const { knobProps } = useResolvedKnobs();
101
+ const size = Number(knobProps.controlIcon?.width) || 20;
102
+ const color = (active ? theme.color12 : theme.color10)?.val;
103
+ return (
104
+ // Depth-based inset carried by the icon slot — the Sidebar row API has
105
+ // no nesting support, so children indent icon+label via this wrapper.
106
+ <XStack paddingLeft={depth > 0 ? depth * size : 0}>
107
+ <Icon
108
+ size={size}
109
+ weight={active ? "fill" : "regular"}
110
+ {...(typeof color === "string" ? { color } : {})}
111
+ />
112
+ </XStack>
113
+ );
114
+ }
115
+
98
116
  function NavRow({
99
117
  item,
100
118
  position,
@@ -103,10 +121,9 @@ function NavRow({
103
121
  position: ReturnType<typeof getGroupPosition>;
104
122
  }) {
105
123
  const { knobProps } = useResolvedKnobs();
106
- const onAccent = useReadableTextOn("$accentBackground");
107
124
  const rowPad = knobProps.panelPadding.padding;
108
- const corners = stackRadiusProps(position, knobProps.borderRadius.borderRadius);
109
- const ink = item.active && onAccent ? onAccent : undefined;
125
+ const corners = knobProps.borderRadius;
126
+ const ink = item.active ? componentColors.selection.ink : undefined;
110
127
  return (
111
128
  <XStack
112
129
  role="button"
@@ -115,20 +132,21 @@ function NavRow({
115
132
  data-group-position={position}
116
133
  data-active={item.active ? "true" : "false"}
117
134
  alignItems="center"
118
- gap="$2"
135
+ gap="$3"
119
136
  minHeight={knobProps.sizeToken}
120
137
  paddingHorizontal={rowPad}
121
138
  paddingVertical="$2"
122
139
  overflow="hidden"
123
140
  userSelect="none"
124
141
  {...corners}
125
- backgroundColor={item.active ? "$accentBackground" : "transparent"}
142
+ {...({ color: ink } as Record<string, unknown>)}
143
+ backgroundColor={item.active ? componentColors.selection.background : "transparent"}
126
144
  hoverStyle={{
127
- backgroundColor: item.active ? "$accentBackground" : "$color3",
145
+ backgroundColor: item.active ? componentColors.selection.hover : "$color3",
128
146
  ...corners,
129
147
  }}
130
148
  pressStyle={{
131
- backgroundColor: item.active ? "$accentBackground" : "$color4",
149
+ backgroundColor: item.active ? componentColors.selection.press : "$color4",
132
150
  ...corners,
133
151
  }}
134
152
  cursor={item.onPress ? "pointer" : "default"}
@@ -138,7 +156,7 @@ function NavRow({
138
156
  focusStyle={{ outlineWidth: 0 }}
139
157
  focusVisibleStyle={ensureFocusVisibleRing({
140
158
  outlineOffset: -2,
141
- outlineColor: ink ?? "$outlineColor",
159
+ outlineColor: "$outlineColor",
142
160
  })}
143
161
  onKeyDown={
144
162
  ((e: { key?: string; preventDefault?: () => void }) => {
@@ -150,7 +168,14 @@ function NavRow({
150
168
  }
151
169
  >
152
170
  {item.icon}
153
- <SizableText size="$3" numberOfLines={1} flex={1} flexShrink={1} fontWeight="400" color={ink}>
171
+ <SizableText
172
+ size="$4"
173
+ numberOfLines={1}
174
+ flex={1}
175
+ flexShrink={1}
176
+ fontWeight="400"
177
+ color="$color12"
178
+ >
154
179
  {item.label}
155
180
  </SizableText>
156
181
  </XStack>
@@ -161,9 +186,9 @@ function WorkspaceNav({ sections }: { sections: SidebarSection[] }) {
161
186
  const { knobProps } = useResolvedKnobs();
162
187
  const rowPad = knobProps.panelPadding.padding;
163
188
  return (
164
- <YStack width={WORKSPACE_SIDEBAR_WIDTH} flex={1} height="100%" minHeight={0}>
189
+ <YStack width="100%" flex={1} height="100%" minHeight={0}>
165
190
  <ScrollView flex={1}>
166
- <YStack {...knobProps.panelPadding} paddingHorizontal={0} {...knobProps.gapLg}>
191
+ <YStack {...knobProps.panelPadding} paddingHorizontal="$2" {...knobProps.gapLg}>
167
192
  {sections.map((section, sectionIdx) => (
168
193
  <YStack key={section.title ?? sectionIdx} {...knobProps.gap}>
169
194
  {section.title ? (
@@ -183,7 +208,11 @@ function WorkspaceNav({ sections }: { sections: SidebarSection[] }) {
183
208
  const position = getGroupPosition(itemIdx, section.items.length);
184
209
  return (
185
210
  <YStack key={String(item.value ?? item.label)}>
186
- {itemIdx > 0 ? <Separator {...hairline.line} /> : null}
211
+ {itemIdx > 0 ? (
212
+ <YStack paddingHorizontal={rowPad}>
213
+ <Separator {...hairline.line} />
214
+ </YStack>
215
+ ) : null}
187
216
  <NavRow item={item} position={position} />
188
217
  </YStack>
189
218
  );
@@ -227,7 +256,7 @@ export function WorkspaceSidebar({ activePath, onNavigate }: WorkspaceSidebarPro
227
256
  if (isLoading && sections.length === 0) {
228
257
  return (
229
258
  <YStack
230
- width={WORKSPACE_SIDEBAR_WIDTH}
259
+ width="100%"
231
260
  flex={1}
232
261
  height="100%"
233
262
  alignItems="center"
@@ -0,0 +1,178 @@
1
+ /**
2
+ * LC-101 ONE-SIDEBAR: a page's secondary panel stacks under the shell nav
3
+ * in the one sidebar column, collapses, and never opens a second column.
4
+ */
5
+ import React from "react";
6
+ import { ListPageLayout } from "@multiplatform.one/components";
7
+ import { InMemoryFixtureProvider } from "@multiplatform.one/frappe";
8
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
9
+ import { cleanup, fireEvent, screen, waitFor } from "@testing-library/react";
10
+ import { afterEach, describe, expect, it } from "vitest";
11
+ import { BackofficeProvider } from "../config/BackofficeProvider";
12
+ import { Desk } from "../desk/Desk";
13
+ import { createMemoryNavigator } from "../navigation/navigator";
14
+ import { BackofficeShell } from "./BackofficeShell";
15
+ import { useShellSidebarPanel } from "./shellSidebarSlot";
16
+
17
+ const MOCK_HOST = "https://backoffice-one-sidebar.mock.test";
18
+
19
+ afterEach(cleanup);
20
+
21
+ const fixtures = () =>
22
+ new InMemoryFixtureProvider({
23
+ Workspace: [
24
+ {
25
+ name: "Tools",
26
+ doctype: "Workspace",
27
+ title: "Tools",
28
+ icon: "tool",
29
+ parent_page: "",
30
+ public: 1,
31
+ for_user: "",
32
+ sequence_id: 1,
33
+ module: "Automation",
34
+ is_hidden: 0,
35
+ },
36
+ ],
37
+ DocType: [{ name: "ToDo", doctype: "DocType" }],
38
+ ToDo: [{ name: "T-0001", doctype: "ToDo", description: "Water plants", status: "Open" }],
39
+ "Notification Log": [],
40
+ });
41
+
42
+ function PanelPage({ onTaken }: { onTaken?: (taken: boolean) => void }) {
43
+ const taken = useShellSidebarPanel({
44
+ title: "Group by",
45
+ content: <div data-testid="page-panel-body">facets</div>,
46
+ });
47
+ onTaken?.(taken);
48
+ return <div>page body</div>;
49
+ }
50
+
51
+ function renderShell(page: React.ReactNode, sidebar = true) {
52
+ return renderWithProviders(
53
+ <BackofficeProvider
54
+ frappe={{ baseURL: MOCK_HOST, fixtures: fixtures() }}
55
+ navigation={createMemoryNavigator("/backoffice")}
56
+ capabilities={{ sidebar }}
57
+ >
58
+ <BackofficeShell>{page}</BackofficeShell>
59
+ </BackofficeProvider>,
60
+ );
61
+ }
62
+
63
+ describe("shell sidebar slot (LC-101 ONE-SIDEBAR)", () => {
64
+ it("stacks the page panel under the nav inside the one rail", async () => {
65
+ let taken = false;
66
+ renderShell(<PanelPage onTaken={(value) => (taken = value)} />);
67
+ fireEvent.click(screen.getByRole("button", { name: "Toggle sidebar" }));
68
+ const rail = screen.getByTestId("backoffice-sidebar-rail");
69
+ await waitFor(() => expect(screen.getByTestId("page-panel-body")).toBeTruthy());
70
+ expect(rail.contains(screen.getByTestId("page-panel-body"))).toBe(true);
71
+ expect(taken).toBe(true);
72
+ // One column: one navigation landmark, no second rail.
73
+ expect(screen.getAllByTestId("backoffice-sidebar-rail")).toHaveLength(1);
74
+ });
75
+
76
+ it("keeps the registered page panel when the hamburger closes and reopens the rail", async () => {
77
+ let taken = false;
78
+ renderShell(<PanelPage onTaken={(value) => (taken = value)} />);
79
+ expect(taken).toBe(true);
80
+ expect(screen.queryByTestId("page-panel-body")).toBeNull();
81
+ const toggle = screen.getByRole("button", { name: "Toggle sidebar" });
82
+
83
+ fireEvent.click(toggle);
84
+ await screen.findByTestId("page-panel-body");
85
+ fireEvent.click(toggle);
86
+ expect(screen.queryByTestId("page-panel-body")).toBeNull();
87
+ expect(taken).toBe(true);
88
+
89
+ fireEvent.click(toggle);
90
+ const panel = await screen.findByTestId("page-panel-body");
91
+ expect(screen.getByTestId("backoffice-sidebar-rail").contains(panel)).toBe(true);
92
+ expect(screen.getByRole("main").contains(panel)).toBe(false);
93
+ });
94
+
95
+ it("takes a list template's sidebar into the shell rail", async () => {
96
+ renderShell(
97
+ <ListPageLayout
98
+ sidebar={<div data-testid="template-filters">filters</div>}
99
+ sidebarLabel="Filters"
100
+ >
101
+ <div>records</div>
102
+ </ListPageLayout>,
103
+ );
104
+ expect(screen.queryByTestId("list-page-sidebar")).toBeNull();
105
+ expect(screen.queryByTestId("template-filters")).toBeNull();
106
+ fireEvent.click(screen.getByRole("button", { name: "Toggle sidebar" }));
107
+ const filters = await screen.findByTestId("template-filters");
108
+ expect(screen.getByTestId("backoffice-sidebar-rail").contains(filters)).toBe(true);
109
+ expect(screen.getByRole("main").contains(filters)).toBe(false);
110
+ expect(screen.getByTestId("backoffice-shell-page-panel-toggle").textContent).toBe("Filters");
111
+ });
112
+
113
+ it("leaves an outer page panel registered when a nested template has no sidebar", async () => {
114
+ renderShell(
115
+ <>
116
+ <PanelPage />
117
+ <ListPageLayout>
118
+ <div>records</div>
119
+ </ListPageLayout>
120
+ </>,
121
+ );
122
+ fireEvent.click(screen.getByRole("button", { name: "Toggle sidebar" }));
123
+ expect(await screen.findByTestId("page-panel-body")).toBeTruthy();
124
+ });
125
+
126
+ it("collapses the stacked group from its header", async () => {
127
+ renderShell(<PanelPage />);
128
+ fireEvent.click(screen.getByRole("button", { name: "Toggle sidebar" }));
129
+ const toggle = await screen.findByTestId("backoffice-shell-page-panel-toggle");
130
+ expect(toggle.getAttribute("aria-expanded")).toBe("true");
131
+ fireEvent.click(toggle);
132
+ await waitFor(() => expect(screen.queryByTestId("page-panel-body")).toBeNull());
133
+ expect(toggle.getAttribute("aria-expanded")).toBe("false");
134
+ });
135
+
136
+ it("withdraws the panel when the page unmounts", async () => {
137
+ const view = renderShell(<PanelPage />);
138
+ fireEvent.click(screen.getByRole("button", { name: "Toggle sidebar" }));
139
+ await screen.findByTestId("page-panel-body");
140
+ view.rerender(
141
+ <BackofficeProvider
142
+ frappe={{ baseURL: MOCK_HOST, fixtures: fixtures() }}
143
+ navigation={createMemoryNavigator("/backoffice")}
144
+ >
145
+ <BackofficeShell>
146
+ <div>other page</div>
147
+ </BackofficeShell>
148
+ </BackofficeProvider>,
149
+ );
150
+ await waitFor(() => expect(screen.queryByTestId("backoffice-shell-page-panel")).toBeNull());
151
+ });
152
+
153
+ it("offers no slot when the shell draws no rail, so the page keeps its own column", () => {
154
+ let taken = true;
155
+ renderShell(<PanelPage onTaken={(value) => (taken = value)} />, false);
156
+ expect(taken).toBe(false);
157
+ expect(screen.queryByTestId("backoffice-shell-page-panel")).toBeNull();
158
+ });
159
+ });
160
+
161
+ describe("desk list (LC-101 ONE-SIDEBAR)", () => {
162
+ it("puts the list's facet panel in the shell rail, never in a column beside it", async () => {
163
+ renderWithProviders(
164
+ <Desk
165
+ frappe={{ baseURL: MOCK_HOST, fixtures: fixtures() }}
166
+ navigation={createMemoryNavigator("/backoffice/todo")}
167
+ />,
168
+ );
169
+ fireEvent.click(screen.getByRole("button", { name: "Toggle sidebar" }));
170
+ const panel = await screen.findByLabelText("List filters sidebar", undefined, {
171
+ timeout: 8000,
172
+ });
173
+ const rail = screen.getByTestId("backoffice-sidebar-rail");
174
+ expect(rail.contains(panel)).toBe(true);
175
+ expect(screen.getAllByLabelText("List filters sidebar")).toHaveLength(1);
176
+ expect(screen.getByRole("main").contains(panel)).toBe(false);
177
+ });
178
+ });
@@ -0,0 +1,7 @@
1
+ export {
2
+ ShellSidebarSlotProvider,
3
+ useHasShellSidebarSlot,
4
+ useShellSidebarPanel,
5
+ useShellSidebarSlotState,
6
+ type ShellSidebarPanel,
7
+ } from "@multiplatform.one/components";
@@ -25,6 +25,12 @@ import type { ReactNode } from "react";
25
25
  import { afterEach, beforeEach, describe, expect, it, vi, type MockInstance } from "vitest";
26
26
  import { useWorkspaces } from "./useWorkspaces";
27
27
 
28
+ const sessionIdentity = vi.hoisted(() => ({ resolved: true }));
29
+ vi.mock("../shared/sessionUser", async (importOriginal) => ({
30
+ ...(await importOriginal<typeof import("../shared/sessionUser")>()),
31
+ useSessionIdentity: () => sessionIdentity,
32
+ }));
33
+
28
34
  const makeFixtures = () =>
29
35
  new InMemoryFixtureProvider({
30
36
  Workspace: [
@@ -60,6 +66,7 @@ describe("useWorkspaces teardown", () => {
60
66
  );
61
67
 
62
68
  beforeEach(() => {
69
+ sessionIdentity.resolved = true;
63
70
  errorSpy = vi.spyOn(console, "error").mockImplementation(() => {});
64
71
  });
65
72
 
@@ -67,6 +74,44 @@ describe("useWorkspaces teardown", () => {
67
74
  errorSpy.mockRestore();
68
75
  });
69
76
 
77
+ it("exposes a refused initial sync instead of reporting an empty account", async () => {
78
+ const fixtures = makeFixtures();
79
+ const error = Object.assign(new Error("Forbidden"), { status: 403 });
80
+ const reads = vi.spyOn(fixtures, "getList").mockRejectedValue(error);
81
+ const wrapper = ({ children }: { children: ReactNode }) => (
82
+ <FrappeProvider baseURL="http://workspace-refused.fixtures.local" fixtures={fixtures}>
83
+ {children}
84
+ </FrappeProvider>
85
+ );
86
+ const { result, unmount } = renderHook(() => useWorkspaces(), { wrapper });
87
+ await waitFor(() => expect(result.current.isLoading).toBe(false));
88
+ expect(result.current.error).toBe(error);
89
+ expect(result.current.refused).toBe(true);
90
+ expect(result.current.workspaces).toEqual([]);
91
+ expect(reads).toHaveBeenCalledTimes(1);
92
+ unmount();
93
+ });
94
+
95
+ it("waits for session identity after a refused workspace sync", async () => {
96
+ sessionIdentity.resolved = false;
97
+ const fixtures = makeFixtures();
98
+ const error = Object.assign(new Error("Forbidden"), { status: 403 });
99
+ vi.spyOn(fixtures, "getList").mockRejectedValue(error);
100
+ const wrapper = ({ children }: { children: ReactNode }) => (
101
+ <FrappeProvider baseURL="http://workspace-session-pending.fixtures.local" fixtures={fixtures}>
102
+ {children}
103
+ </FrappeProvider>
104
+ );
105
+ const { result, rerender, unmount } = renderHook(() => useWorkspaces(), { wrapper });
106
+ await waitFor(() => expect(result.current.error).toBe(error));
107
+ expect(result.current.isLoading).toBe(true);
108
+ sessionIdentity.resolved = true;
109
+ rerender();
110
+ expect(result.current.isLoading).toBe(false);
111
+ expect(result.current.refused).toBe(true);
112
+ unmount();
113
+ });
114
+
70
115
  it(
71
116
  "unmount → natural wind-down → remount: no live-query errors, data reloads",
72
117
  { timeout: 20000 },
@@ -11,8 +11,9 @@
11
11
  * result so isolated mounts stay deterministic.
12
12
  */
13
13
  import { useFrappeCollection, useLiveQuery, type FixtureProvider } from "@multiplatform.one/frappe";
14
- import { useFrappeConfig } from "@multiplatform.one/frappe-ui";
15
- import { useMemo } from "react";
14
+ import { isPermissionError, useFrappeConfig } from "@multiplatform.one/frappe-ui";
15
+ import { useMemo, useState } from "react";
16
+ import { useSessionIdentity } from "../shared/sessionUser";
16
17
  import { useSessionUserId } from "../shared/useSessionUserId";
17
18
 
18
19
  export interface WorkspaceDoc {
@@ -53,6 +54,8 @@ export function useSessionUser(): string | undefined {
53
54
  // ---------------------------------------------------------------------------
54
55
 
55
56
  export interface WorkspacesResult {
57
+ error?: unknown;
58
+ refused: boolean;
56
59
  /** All visible workspaces, sorted by sequence_id. */
57
60
  workspaces: WorkspaceDoc[];
58
61
  /** Session user's private workspaces (desk shows these on top). */
@@ -76,7 +79,8 @@ function bySequence(a: WorkspaceDoc, b: WorkspaceDoc): number {
76
79
 
77
80
  export function useWorkspaces(): WorkspacesResult {
78
81
  const config = useFrappeConfig();
79
- const sessionUser = useSessionUser();
82
+ const { user: sessionUser, resolved: sessionResolved } = useSessionIdentity();
83
+ const [failure, setFailure] = useState<{ connection: unknown; error: unknown }>();
80
84
 
81
85
  // Stable connection config: a fresh object identity per render would
82
86
  // re-run the collection hook's internal effects (DeskSidebar precedent).
@@ -99,7 +103,9 @@ export function useWorkspaces(): WorkspacesResult {
99
103
 
100
104
  const collection = useFrappeCollection<WorkspaceDoc>(connectionConfig, "Workspace", {
101
105
  fields: WORKSPACE_FIELDS as unknown as (keyof WorkspaceDoc & string)[],
106
+ onSyncError: (error) => setFailure({ connection: connectionConfig, error }),
102
107
  });
108
+ const error = failure?.connection === connectionConfig ? failure?.error : undefined;
103
109
  const { data: rawData, isLoading } = useLiveQuery(
104
110
  (q) => (collection ? q.from({ _workspace: collection }) : null),
105
111
  [collection],
@@ -130,15 +136,20 @@ export function useWorkspaces(): WorkspacesResult {
130
136
  }
131
137
 
132
138
  return {
139
+ error,
140
+ refused: isPermissionError(error),
133
141
  workspaces: all,
134
142
  privateWorkspaces,
135
143
  publicRoots,
136
144
  childrenByParent,
137
145
  // No provider config → settle empty instead of skeleting forever.
138
- isLoading: connectionConfig ? Boolean(isLoading) || collection === undefined : false,
146
+ // A refused sync settles, but only once the session identity is known.
147
+ isLoading: connectionConfig
148
+ ? !sessionResolved || (!error && (Boolean(isLoading) || collection === undefined))
149
+ : false,
139
150
  sessionUser,
140
151
  };
141
- }, [rawData, isLoading, collection, connectionConfig, sessionUser]);
152
+ }, [rawData, isLoading, collection, connectionConfig, sessionUser, sessionResolved, error]);
142
153
  }
143
154
 
144
155
  /**
@@ -146,8 +157,13 @@ export function useWorkspaces(): WorkspacesResult {
146
157
  * user's first private workspace, else the first public workspace by
147
158
  * sequence order.
148
159
  */
149
- export function useDefaultWorkspace(): { workspace?: string; isLoading: boolean } {
150
- const { privateWorkspaces, publicRoots, isLoading } = useWorkspaces();
160
+ export function useDefaultWorkspace(): {
161
+ workspace?: string;
162
+ isLoading: boolean;
163
+ error?: unknown;
164
+ refused: boolean;
165
+ } {
166
+ const { privateWorkspaces, publicRoots, isLoading, error, refused } = useWorkspaces();
151
167
  const workspace = privateWorkspaces[0]?.name ?? publicRoots[0]?.name;
152
- return { workspace, isLoading };
168
+ return { workspace, isLoading, error, refused };
153
169
  }
@@ -178,14 +178,14 @@ export function DashboardView({ doctype }: DashboardViewProps) {
178
178
  <ChartSkeletonCard height={CHART_HEIGHT} />
179
179
  ) : weekly.error ? (
180
180
  <AsyncBoundary
181
- compact
181
+ size="$3"
182
182
  error={weekly.error}
183
183
  errorTitle={t("views.weeklyChartFailed", "Couldn't load weekly activity")}
184
184
  onRetry={weekly.refresh}
185
185
  />
186
186
  ) : weekly.isEmpty ? (
187
187
  <AsyncBoundary
188
- compact
188
+ size="$3"
189
189
  empty
190
190
  emptyTitle={t("views.weeklyChartEmpty", "No recent activity")}
191
191
  emptyDescription={t(
@@ -8,7 +8,7 @@ import { useTranslation } from "react-i18next";
8
8
  import { useBackofficeNavigator, useBackofficePaths } from "../config/BackofficeProvider";
9
9
  import { BACKOFFICE_I18N_NAMESPACE } from "../i18n";
10
10
  import { useDeskScope } from "../desk/scope";
11
- import { detectCardFields, detectImageField, useViewMeta, type AnyDoc } from "./viewMeta";
11
+ import { detectCardFields, detectImageField, useViewSource, type AnyDoc } from "./viewMeta";
12
12
  import { ViewError, ViewLoading, ViewUnsupported } from "./ViewStates";
13
13
 
14
14
  // The `one` compiler breaks explicit JSX generics — instantiate once.
@@ -24,9 +24,25 @@ export function ImageView({ doctype }: ImageViewProps) {
24
24
  const deskScope = useDeskScope();
25
25
  const navigator = useBackofficeNavigator();
26
26
  const paths = useBackofficePaths();
27
- const { meta, isLoading: isMetaLoading, error: metaError } = useViewMeta(doctype);
27
+ const {
28
+ layoutMeta: meta,
29
+ loading: isMetaLoading,
30
+ error: metaError,
31
+ metaRefused,
32
+ recordShape,
33
+ } = useViewSource(doctype);
28
34
 
29
- if (isMetaLoading) return <ViewLoading />;
35
+ if (isMetaLoading || (metaRefused && recordShape.status === "pending")) return <ViewLoading />;
36
+ if (metaRefused && !meta)
37
+ return (
38
+ <ViewUnsupported
39
+ doctype={doctype}
40
+ title={t("views.imageNotPermitted", "You can't open the {{doctype}} image view", {
41
+ doctype,
42
+ })}
43
+ description={metaError?.message}
44
+ />
45
+ );
30
46
  if (metaError && !meta) return <ViewError doctype={doctype} error={metaError} />;
31
47
  if (!meta) return <ViewLoading />;
32
48
 
@@ -20,24 +20,23 @@ import { BACKOFFICE_I18N_NAMESPACE } from "../i18n";
20
20
  import type { BackofficeView } from "../navigation/paths";
21
21
  import { deskViewUrl } from "../shared/deskLinks";
22
22
  import { deriveAvailableViews } from "./viewAvailability";
23
- import { useViewMeta } from "./viewMeta";
23
+ import { useViewMeta, useViewSource } from "./viewMeta";
24
24
  import { ViewSwitcherMenu } from "./ViewSwitcherMenu";
25
25
 
26
26
  export { useViewLabels } from "./ViewSwitcherMenu";
27
27
 
28
- /**
29
- * Views this doctype can actually render, derived from meta by
30
- * `deriveAvailableViews` (viewAvailability.ts documents each view's desk
31
- * precondition). The provider's `capabilities.views.allow` gates the offer
32
- * list too. Conditional views stay hidden until meta confirms them;
33
- * `current` is always included so the switcher stays honest about where you
34
- * are (e.g. a deep link to /view/tree on a flat doctype, which renders its
35
- * own unsupported state).
36
- */
37
- export function useAvailableViews(doctype: string, current?: BackofficeView): BackofficeView[] {
38
- const { meta } = useViewMeta(doctype);
28
+ export function useAvailableViews(doctype: string, _current?: BackofficeView): BackofficeView[] {
29
+ const { meta, metaRefused, recordShape } = useViewSource(doctype);
30
+ const { rights } = useDocRights(useFrappeConfig(), meta);
39
31
  const { views } = useBackofficeCapabilities();
40
- return deriveAvailableViews(meta, { current, allow: views.enabled ? views.allow : [] });
32
+ return deriveAvailableViews(
33
+ meta
34
+ ? { kind: "meta", meta, rights }
35
+ : metaRefused && recordShape.fields
36
+ ? { kind: "record", fields: recordShape.fields }
37
+ : undefined,
38
+ { allow: views.enabled ? views.allow : [] },
39
+ );
41
40
  }
42
41
 
43
42
  export interface ViewHeaderProps {
@@ -53,7 +52,7 @@ export function ViewHeader({ doctype, view }: ViewHeaderProps) {
53
52
  const { frappe } = useBackofficeConfig();
54
53
  const { t } = useTranslation(BACKOFFICE_I18N_NAMESPACE);
55
54
  const { knobProps } = useResolvedKnobs();
56
- const availableViews = useAvailableViews(doctype, view);
55
+ const availableViews = useAvailableViews(doctype);
57
56
  const { meta } = useViewMeta(doctype);
58
57
  const { rights } = useDocRights(useFrappeConfig(), meta);
59
58
  // Desk counterpart of this exact view (fixture mode has no desk).
@@ -20,6 +20,9 @@ describe("ViewSwitcherMenu", () => {
20
20
  />,
21
21
  );
22
22
  expect(getByTestId("list-view-switcher")).toBeTruthy();
23
+ for (const icon of getByTestId("list-view-switcher").querySelectorAll("svg")) {
24
+ expect(icon.getAttribute("fill")).not.toBe("currentColor");
25
+ }
23
26
  // Segments would paint every label in the toolbar. The menu keeps them
24
27
  // inside the dropdown — only the current view is visible at rest.
25
28
  expect(queryByText("Report")).toBeNull();