@multiplatform.one/backoffice 7.4.0 → 7.5.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 (444) hide show
  1. package/dist/cjs/chrome/HelpMenu.cjs +13 -7
  2. package/dist/cjs/chrome/HelpMenu.native.js +14 -7
  3. package/dist/cjs/chrome/HelpMenu.native.js.map +1 -1
  4. package/dist/cjs/chrome/NotificationsButton.cjs +5 -1
  5. package/dist/cjs/chrome/NotificationsButton.native.js +5 -1
  6. package/dist/cjs/chrome/NotificationsButton.native.js.map +1 -1
  7. package/dist/cjs/chrome/UserMenu.cjs +13 -8
  8. package/dist/cjs/chrome/UserMenu.native.js +13 -8
  9. package/dist/cjs/chrome/UserMenu.native.js.map +1 -1
  10. package/dist/cjs/chrome/help-about-dialog.cjs +2 -2
  11. package/dist/cjs/chrome/help-about-dialog.native.js +2 -2
  12. package/dist/cjs/chrome/help-shortcuts-dialog.cjs +6 -3
  13. package/dist/cjs/chrome/help-shortcuts-dialog.native.js +6 -3
  14. package/dist/cjs/chrome/help-shortcuts-dialog.native.js.map +1 -1
  15. package/dist/cjs/chrome/notifications-panel.cjs +11 -6
  16. package/dist/cjs/chrome/notifications-panel.native.js +11 -6
  17. package/dist/cjs/chrome/notifications-panel.native.js.map +1 -1
  18. package/dist/cjs/form/FormConnections.cjs +2 -1
  19. package/dist/cjs/form/FormConnections.native.js +2 -1
  20. package/dist/cjs/form/FormConnections.native.js.map +1 -1
  21. package/dist/cjs/form/FormErrorBoundary.cjs +1 -1
  22. package/dist/cjs/form/FormErrorBoundary.native.js +1 -1
  23. package/dist/cjs/form/FormHeaderCluster.cjs +7 -3
  24. package/dist/cjs/form/FormHeaderCluster.native.js +8 -4
  25. package/dist/cjs/form/FormHeaderCluster.native.js.map +1 -1
  26. package/dist/cjs/form/FormSidebarPanel.cjs +9 -8
  27. package/dist/cjs/form/FormSidebarPanel.native.js +10 -9
  28. package/dist/cjs/form/FormSidebarPanel.native.js.map +1 -1
  29. package/dist/cjs/form/FormTimeline.cjs +14 -13
  30. package/dist/cjs/form/FormTimeline.native.js +15 -13
  31. package/dist/cjs/form/FormTimeline.native.js.map +1 -1
  32. package/dist/cjs/form/FormToolbar.cjs +16 -16
  33. package/dist/cjs/form/FormToolbar.native.js +17 -17
  34. package/dist/cjs/form/FormToolbar.native.js.map +1 -1
  35. package/dist/cjs/form/sidebar-people.cjs +2 -2
  36. package/dist/cjs/form/sidebar-people.native.js +2 -2
  37. package/dist/cjs/form/sidebar-people.native.js.map +1 -1
  38. package/dist/cjs/list/DoctypeListScreen.cjs +7 -3
  39. package/dist/cjs/list/DoctypeListScreen.native.js +7 -3
  40. package/dist/cjs/list/DoctypeListScreen.native.js.map +1 -1
  41. package/dist/cjs/list/ListBulkActionsBar.cjs +27 -23
  42. package/dist/cjs/list/ListBulkActionsBar.native.js +27 -23
  43. package/dist/cjs/list/ListBulkActionsBar.native.js.map +1 -1
  44. package/dist/cjs/list/ListFilterBar.cjs +10 -5
  45. package/dist/cjs/list/ListFilterBar.native.js +11 -5
  46. package/dist/cjs/list/ListFilterBar.native.js.map +1 -1
  47. package/dist/cjs/list/list-tools-sheet.cjs +9 -4
  48. package/dist/cjs/list/list-tools-sheet.native.js +10 -4
  49. package/dist/cjs/list/list-tools-sheet.native.js.map +1 -1
  50. package/dist/cjs/list/listColumns.cjs +20 -29
  51. package/dist/cjs/list/listColumns.native.js +24 -29
  52. package/dist/cjs/list/listColumns.native.js.map +1 -1
  53. package/dist/cjs/list/sidebar-section.cjs +8 -14
  54. package/dist/cjs/list/sidebar-section.native.js +8 -14
  55. package/dist/cjs/list/sidebar-section.native.js.map +1 -1
  56. package/dist/cjs/report/QueryReportScreen.cjs +6 -2
  57. package/dist/cjs/report/QueryReportScreen.native.js +6 -2
  58. package/dist/cjs/report/QueryReportScreen.native.js.map +1 -1
  59. package/dist/cjs/report/queryReportFilterBar.cjs +1 -1
  60. package/dist/cjs/report/queryReportFilterBar.native.js +1 -1
  61. package/dist/cjs/report/queryReportFilterBar.native.js.map +1 -1
  62. package/dist/cjs/report/report-grid.cjs +4 -4
  63. package/dist/cjs/report/report-grid.native.js +4 -4
  64. package/dist/cjs/report/report-toolbar.cjs +5 -11
  65. package/dist/cjs/report/report-toolbar.native.js +5 -11
  66. package/dist/cjs/report/report-toolbar.native.js.map +1 -1
  67. package/dist/cjs/shell/BackofficeShell.cjs +7 -6
  68. package/dist/cjs/shell/BackofficeShell.native.js +7 -6
  69. package/dist/cjs/shell/BackofficeShell.native.js.map +1 -1
  70. package/dist/cjs/shell/WorkspaceSidebar.cjs +2 -2
  71. package/dist/cjs/shell/WorkspaceSidebar.native.js +2 -2
  72. package/dist/cjs/shell/WorkspaceSidebar.native.js.map +1 -1
  73. package/dist/cjs/views/KanbanView.cjs +4 -4
  74. package/dist/cjs/views/KanbanView.native.js +4 -4
  75. package/dist/cjs/views/KanbanView.native.js.map +1 -1
  76. package/dist/cjs/views/ViewHeader.cjs +2 -2
  77. package/dist/cjs/views/ViewHeader.native.js +2 -2
  78. package/dist/cjs/views/ViewHeader.native.js.map +1 -1
  79. package/dist/cjs/views/ViewStates.cjs +2 -1
  80. package/dist/cjs/views/ViewStates.native.js +2 -1
  81. package/dist/cjs/views/ViewStates.native.js.map +1 -1
  82. package/dist/cjs/views/kanban-board-controls.cjs +12 -7
  83. package/dist/cjs/views/kanban-board-controls.native.js +14 -7
  84. package/dist/cjs/views/kanban-board-controls.native.js.map +1 -1
  85. package/dist/cjs/views/report-controls.cjs +16 -16
  86. package/dist/cjs/views/report-controls.native.js +16 -16
  87. package/dist/cjs/views/report-controls.native.js.map +1 -1
  88. package/dist/cjs/workspace/WorkspaceChartBlock.cjs +6 -5
  89. package/dist/cjs/workspace/WorkspaceChartBlock.native.js +6 -5
  90. package/dist/cjs/workspace/WorkspaceChartBlock.native.js.map +1 -1
  91. package/dist/cjs/workspace/WorkspaceLinkCard.cjs +15 -10
  92. package/dist/cjs/workspace/WorkspaceLinkCard.native.js +15 -10
  93. package/dist/cjs/workspace/WorkspaceLinkCard.native.js.map +1 -1
  94. package/dist/cjs/workspace/WorkspaceNumberCard.cjs +12 -10
  95. package/dist/cjs/workspace/WorkspaceNumberCard.native.js +12 -10
  96. package/dist/cjs/workspace/WorkspaceNumberCard.native.js.map +1 -1
  97. package/dist/cjs/workspace/WorkspaceQuickList.cjs +9 -7
  98. package/dist/cjs/workspace/WorkspaceQuickList.native.js +9 -7
  99. package/dist/cjs/workspace/WorkspaceQuickList.native.js.map +1 -1
  100. package/dist/cjs/workspace/WorkspaceRecents.cjs +5 -3
  101. package/dist/cjs/workspace/WorkspaceRecents.native.js +6 -4
  102. package/dist/cjs/workspace/WorkspaceRecents.native.js.map +1 -1
  103. package/dist/cjs/workspace/WorkspaceShortcut.cjs +16 -23
  104. package/dist/cjs/workspace/WorkspaceShortcut.native.js +17 -24
  105. package/dist/cjs/workspace/WorkspaceShortcut.native.js.map +1 -1
  106. package/dist/esm/chrome/HelpMenu.mjs +13 -7
  107. package/dist/esm/chrome/HelpMenu.mjs.map +1 -1
  108. package/dist/esm/chrome/HelpMenu.native.js +14 -7
  109. package/dist/esm/chrome/HelpMenu.native.js.map +1 -1
  110. package/dist/esm/chrome/NotificationsButton.mjs +5 -1
  111. package/dist/esm/chrome/NotificationsButton.mjs.map +1 -1
  112. package/dist/esm/chrome/NotificationsButton.native.js +5 -1
  113. package/dist/esm/chrome/NotificationsButton.native.js.map +1 -1
  114. package/dist/esm/chrome/UserMenu.mjs +13 -8
  115. package/dist/esm/chrome/UserMenu.mjs.map +1 -1
  116. package/dist/esm/chrome/UserMenu.native.js +13 -8
  117. package/dist/esm/chrome/UserMenu.native.js.map +1 -1
  118. package/dist/esm/chrome/help-about-dialog.mjs +2 -2
  119. package/dist/esm/chrome/help-about-dialog.native.js +2 -2
  120. package/dist/esm/chrome/help-shortcuts-dialog.mjs +6 -3
  121. package/dist/esm/chrome/help-shortcuts-dialog.mjs.map +1 -1
  122. package/dist/esm/chrome/help-shortcuts-dialog.native.js +6 -3
  123. package/dist/esm/chrome/help-shortcuts-dialog.native.js.map +1 -1
  124. package/dist/esm/chrome/notifications-panel.mjs +12 -7
  125. package/dist/esm/chrome/notifications-panel.mjs.map +1 -1
  126. package/dist/esm/chrome/notifications-panel.native.js +12 -7
  127. package/dist/esm/chrome/notifications-panel.native.js.map +1 -1
  128. package/dist/esm/form/FormConnections.mjs +2 -1
  129. package/dist/esm/form/FormConnections.mjs.map +1 -1
  130. package/dist/esm/form/FormConnections.native.js +2 -1
  131. package/dist/esm/form/FormConnections.native.js.map +1 -1
  132. package/dist/esm/form/FormErrorBoundary.mjs +1 -1
  133. package/dist/esm/form/FormErrorBoundary.native.js +1 -1
  134. package/dist/esm/form/FormHeaderCluster.mjs +8 -4
  135. package/dist/esm/form/FormHeaderCluster.mjs.map +1 -1
  136. package/dist/esm/form/FormHeaderCluster.native.js +9 -5
  137. package/dist/esm/form/FormHeaderCluster.native.js.map +1 -1
  138. package/dist/esm/form/FormSidebarPanel.mjs +9 -8
  139. package/dist/esm/form/FormSidebarPanel.mjs.map +1 -1
  140. package/dist/esm/form/FormSidebarPanel.native.js +10 -9
  141. package/dist/esm/form/FormSidebarPanel.native.js.map +1 -1
  142. package/dist/esm/form/FormTimeline.mjs +14 -13
  143. package/dist/esm/form/FormTimeline.mjs.map +1 -1
  144. package/dist/esm/form/FormTimeline.native.js +15 -13
  145. package/dist/esm/form/FormTimeline.native.js.map +1 -1
  146. package/dist/esm/form/FormToolbar.mjs +17 -17
  147. package/dist/esm/form/FormToolbar.mjs.map +1 -1
  148. package/dist/esm/form/FormToolbar.native.js +18 -18
  149. package/dist/esm/form/FormToolbar.native.js.map +1 -1
  150. package/dist/esm/form/sidebar-people.mjs +2 -2
  151. package/dist/esm/form/sidebar-people.mjs.map +1 -1
  152. package/dist/esm/form/sidebar-people.native.js +2 -2
  153. package/dist/esm/form/sidebar-people.native.js.map +1 -1
  154. package/dist/esm/list/DoctypeListScreen.mjs +8 -4
  155. package/dist/esm/list/DoctypeListScreen.mjs.map +1 -1
  156. package/dist/esm/list/DoctypeListScreen.native.js +8 -4
  157. package/dist/esm/list/DoctypeListScreen.native.js.map +1 -1
  158. package/dist/esm/list/ListBulkActionsBar.mjs +22 -18
  159. package/dist/esm/list/ListBulkActionsBar.mjs.map +1 -1
  160. package/dist/esm/list/ListBulkActionsBar.native.js +22 -18
  161. package/dist/esm/list/ListBulkActionsBar.native.js.map +1 -1
  162. package/dist/esm/list/ListFilterBar.mjs +10 -5
  163. package/dist/esm/list/ListFilterBar.mjs.map +1 -1
  164. package/dist/esm/list/ListFilterBar.native.js +11 -5
  165. package/dist/esm/list/ListFilterBar.native.js.map +1 -1
  166. package/dist/esm/list/list-tools-sheet.mjs +9 -4
  167. package/dist/esm/list/list-tools-sheet.mjs.map +1 -1
  168. package/dist/esm/list/list-tools-sheet.native.js +10 -4
  169. package/dist/esm/list/list-tools-sheet.native.js.map +1 -1
  170. package/dist/esm/list/listColumns.mjs +21 -30
  171. package/dist/esm/list/listColumns.mjs.map +1 -1
  172. package/dist/esm/list/listColumns.native.js +25 -30
  173. package/dist/esm/list/listColumns.native.js.map +1 -1
  174. package/dist/esm/list/sidebar-section.mjs +9 -15
  175. package/dist/esm/list/sidebar-section.mjs.map +1 -1
  176. package/dist/esm/list/sidebar-section.native.js +9 -15
  177. package/dist/esm/list/sidebar-section.native.js.map +1 -1
  178. package/dist/esm/report/QueryReportScreen.mjs +6 -2
  179. package/dist/esm/report/QueryReportScreen.mjs.map +1 -1
  180. package/dist/esm/report/QueryReportScreen.native.js +6 -2
  181. package/dist/esm/report/QueryReportScreen.native.js.map +1 -1
  182. package/dist/esm/report/queryReportFilterBar.mjs +1 -1
  183. package/dist/esm/report/queryReportFilterBar.mjs.map +1 -1
  184. package/dist/esm/report/queryReportFilterBar.native.js +1 -1
  185. package/dist/esm/report/queryReportFilterBar.native.js.map +1 -1
  186. package/dist/esm/report/report-grid.mjs +4 -4
  187. package/dist/esm/report/report-grid.native.js +4 -4
  188. package/dist/esm/report/report-toolbar.mjs +6 -12
  189. package/dist/esm/report/report-toolbar.mjs.map +1 -1
  190. package/dist/esm/report/report-toolbar.native.js +6 -12
  191. package/dist/esm/report/report-toolbar.native.js.map +1 -1
  192. package/dist/esm/shell/BackofficeShell.mjs +6 -5
  193. package/dist/esm/shell/BackofficeShell.mjs.map +1 -1
  194. package/dist/esm/shell/BackofficeShell.native.js +6 -5
  195. package/dist/esm/shell/BackofficeShell.native.js.map +1 -1
  196. package/dist/esm/shell/WorkspaceSidebar.mjs +2 -2
  197. package/dist/esm/shell/WorkspaceSidebar.mjs.map +1 -1
  198. package/dist/esm/shell/WorkspaceSidebar.native.js +2 -2
  199. package/dist/esm/shell/WorkspaceSidebar.native.js.map +1 -1
  200. package/dist/esm/views/KanbanView.mjs +4 -4
  201. package/dist/esm/views/KanbanView.mjs.map +1 -1
  202. package/dist/esm/views/KanbanView.native.js +4 -4
  203. package/dist/esm/views/KanbanView.native.js.map +1 -1
  204. package/dist/esm/views/ViewHeader.mjs +2 -2
  205. package/dist/esm/views/ViewHeader.mjs.map +1 -1
  206. package/dist/esm/views/ViewHeader.native.js +2 -2
  207. package/dist/esm/views/ViewHeader.native.js.map +1 -1
  208. package/dist/esm/views/ViewStates.mjs +2 -1
  209. package/dist/esm/views/ViewStates.mjs.map +1 -1
  210. package/dist/esm/views/ViewStates.native.js +2 -1
  211. package/dist/esm/views/ViewStates.native.js.map +1 -1
  212. package/dist/esm/views/kanban-board-controls.mjs +12 -7
  213. package/dist/esm/views/kanban-board-controls.mjs.map +1 -1
  214. package/dist/esm/views/kanban-board-controls.native.js +14 -7
  215. package/dist/esm/views/kanban-board-controls.native.js.map +1 -1
  216. package/dist/esm/views/report-controls.mjs +18 -18
  217. package/dist/esm/views/report-controls.mjs.map +1 -1
  218. package/dist/esm/views/report-controls.native.js +18 -18
  219. package/dist/esm/views/report-controls.native.js.map +1 -1
  220. package/dist/esm/workspace/WorkspaceChartBlock.mjs +7 -6
  221. package/dist/esm/workspace/WorkspaceChartBlock.mjs.map +1 -1
  222. package/dist/esm/workspace/WorkspaceChartBlock.native.js +7 -6
  223. package/dist/esm/workspace/WorkspaceChartBlock.native.js.map +1 -1
  224. package/dist/esm/workspace/WorkspaceLinkCard.mjs +16 -11
  225. package/dist/esm/workspace/WorkspaceLinkCard.mjs.map +1 -1
  226. package/dist/esm/workspace/WorkspaceLinkCard.native.js +16 -11
  227. package/dist/esm/workspace/WorkspaceLinkCard.native.js.map +1 -1
  228. package/dist/esm/workspace/WorkspaceNumberCard.mjs +13 -11
  229. package/dist/esm/workspace/WorkspaceNumberCard.mjs.map +1 -1
  230. package/dist/esm/workspace/WorkspaceNumberCard.native.js +13 -11
  231. package/dist/esm/workspace/WorkspaceNumberCard.native.js.map +1 -1
  232. package/dist/esm/workspace/WorkspaceQuickList.mjs +10 -8
  233. package/dist/esm/workspace/WorkspaceQuickList.mjs.map +1 -1
  234. package/dist/esm/workspace/WorkspaceQuickList.native.js +10 -8
  235. package/dist/esm/workspace/WorkspaceQuickList.native.js.map +1 -1
  236. package/dist/esm/workspace/WorkspaceRecents.mjs +6 -4
  237. package/dist/esm/workspace/WorkspaceRecents.mjs.map +1 -1
  238. package/dist/esm/workspace/WorkspaceRecents.native.js +7 -5
  239. package/dist/esm/workspace/WorkspaceRecents.native.js.map +1 -1
  240. package/dist/esm/workspace/WorkspaceShortcut.mjs +17 -24
  241. package/dist/esm/workspace/WorkspaceShortcut.mjs.map +1 -1
  242. package/dist/esm/workspace/WorkspaceShortcut.native.js +18 -25
  243. package/dist/esm/workspace/WorkspaceShortcut.native.js.map +1 -1
  244. package/dist/jsx/chrome/HelpMenu.mjs +13 -7
  245. package/dist/jsx/chrome/HelpMenu.mjs.map +1 -1
  246. package/dist/jsx/chrome/HelpMenu.native.js +14 -7
  247. package/dist/jsx/chrome/HelpMenu.native.js.map +1 -1
  248. package/dist/jsx/chrome/NotificationsButton.mjs +5 -1
  249. package/dist/jsx/chrome/NotificationsButton.mjs.map +1 -1
  250. package/dist/jsx/chrome/NotificationsButton.native.js +5 -1
  251. package/dist/jsx/chrome/NotificationsButton.native.js.map +1 -1
  252. package/dist/jsx/chrome/UserMenu.mjs +13 -8
  253. package/dist/jsx/chrome/UserMenu.mjs.map +1 -1
  254. package/dist/jsx/chrome/UserMenu.native.js +13 -8
  255. package/dist/jsx/chrome/UserMenu.native.js.map +1 -1
  256. package/dist/jsx/chrome/help-about-dialog.mjs +2 -2
  257. package/dist/jsx/chrome/help-about-dialog.native.js +2 -2
  258. package/dist/jsx/chrome/help-shortcuts-dialog.mjs +6 -3
  259. package/dist/jsx/chrome/help-shortcuts-dialog.mjs.map +1 -1
  260. package/dist/jsx/chrome/help-shortcuts-dialog.native.js +6 -3
  261. package/dist/jsx/chrome/help-shortcuts-dialog.native.js.map +1 -1
  262. package/dist/jsx/chrome/notifications-panel.mjs +12 -7
  263. package/dist/jsx/chrome/notifications-panel.mjs.map +1 -1
  264. package/dist/jsx/chrome/notifications-panel.native.js +11 -6
  265. package/dist/jsx/chrome/notifications-panel.native.js.map +1 -1
  266. package/dist/jsx/form/FormConnections.mjs +2 -1
  267. package/dist/jsx/form/FormConnections.mjs.map +1 -1
  268. package/dist/jsx/form/FormConnections.native.js +2 -1
  269. package/dist/jsx/form/FormConnections.native.js.map +1 -1
  270. package/dist/jsx/form/FormErrorBoundary.mjs +1 -1
  271. package/dist/jsx/form/FormErrorBoundary.native.js +1 -1
  272. package/dist/jsx/form/FormHeaderCluster.mjs +8 -4
  273. package/dist/jsx/form/FormHeaderCluster.mjs.map +1 -1
  274. package/dist/jsx/form/FormHeaderCluster.native.js +8 -4
  275. package/dist/jsx/form/FormHeaderCluster.native.js.map +1 -1
  276. package/dist/jsx/form/FormSidebarPanel.mjs +9 -8
  277. package/dist/jsx/form/FormSidebarPanel.mjs.map +1 -1
  278. package/dist/jsx/form/FormSidebarPanel.native.js +10 -9
  279. package/dist/jsx/form/FormSidebarPanel.native.js.map +1 -1
  280. package/dist/jsx/form/FormTimeline.mjs +14 -13
  281. package/dist/jsx/form/FormTimeline.mjs.map +1 -1
  282. package/dist/jsx/form/FormTimeline.native.js +15 -13
  283. package/dist/jsx/form/FormTimeline.native.js.map +1 -1
  284. package/dist/jsx/form/FormToolbar.mjs +17 -17
  285. package/dist/jsx/form/FormToolbar.mjs.map +1 -1
  286. package/dist/jsx/form/FormToolbar.native.js +17 -17
  287. package/dist/jsx/form/FormToolbar.native.js.map +1 -1
  288. package/dist/jsx/form/sidebar-people.mjs +2 -2
  289. package/dist/jsx/form/sidebar-people.mjs.map +1 -1
  290. package/dist/jsx/form/sidebar-people.native.js +2 -2
  291. package/dist/jsx/form/sidebar-people.native.js.map +1 -1
  292. package/dist/jsx/list/DoctypeListScreen.mjs +8 -4
  293. package/dist/jsx/list/DoctypeListScreen.mjs.map +1 -1
  294. package/dist/jsx/list/DoctypeListScreen.native.js +7 -3
  295. package/dist/jsx/list/DoctypeListScreen.native.js.map +1 -1
  296. package/dist/jsx/list/ListBulkActionsBar.mjs +22 -18
  297. package/dist/jsx/list/ListBulkActionsBar.mjs.map +1 -1
  298. package/dist/jsx/list/ListBulkActionsBar.native.js +27 -23
  299. package/dist/jsx/list/ListBulkActionsBar.native.js.map +1 -1
  300. package/dist/jsx/list/ListFilterBar.mjs +10 -5
  301. package/dist/jsx/list/ListFilterBar.mjs.map +1 -1
  302. package/dist/jsx/list/ListFilterBar.native.js +11 -5
  303. package/dist/jsx/list/ListFilterBar.native.js.map +1 -1
  304. package/dist/jsx/list/list-tools-sheet.mjs +9 -4
  305. package/dist/jsx/list/list-tools-sheet.mjs.map +1 -1
  306. package/dist/jsx/list/list-tools-sheet.native.js +10 -4
  307. package/dist/jsx/list/list-tools-sheet.native.js.map +1 -1
  308. package/dist/jsx/list/listColumns.mjs +21 -30
  309. package/dist/jsx/list/listColumns.mjs.map +1 -1
  310. package/dist/jsx/list/listColumns.native.js +24 -29
  311. package/dist/jsx/list/listColumns.native.js.map +1 -1
  312. package/dist/jsx/list/sidebar-section.mjs +9 -15
  313. package/dist/jsx/list/sidebar-section.mjs.map +1 -1
  314. package/dist/jsx/list/sidebar-section.native.js +8 -14
  315. package/dist/jsx/list/sidebar-section.native.js.map +1 -1
  316. package/dist/jsx/report/QueryReportScreen.mjs +6 -2
  317. package/dist/jsx/report/QueryReportScreen.mjs.map +1 -1
  318. package/dist/jsx/report/QueryReportScreen.native.js +6 -2
  319. package/dist/jsx/report/QueryReportScreen.native.js.map +1 -1
  320. package/dist/jsx/report/queryReportFilterBar.mjs +1 -1
  321. package/dist/jsx/report/queryReportFilterBar.mjs.map +1 -1
  322. package/dist/jsx/report/queryReportFilterBar.native.js +1 -1
  323. package/dist/jsx/report/queryReportFilterBar.native.js.map +1 -1
  324. package/dist/jsx/report/report-grid.mjs +4 -4
  325. package/dist/jsx/report/report-grid.native.js +4 -4
  326. package/dist/jsx/report/report-toolbar.mjs +6 -12
  327. package/dist/jsx/report/report-toolbar.mjs.map +1 -1
  328. package/dist/jsx/report/report-toolbar.native.js +5 -11
  329. package/dist/jsx/report/report-toolbar.native.js.map +1 -1
  330. package/dist/jsx/shell/BackofficeShell.mjs +6 -5
  331. package/dist/jsx/shell/BackofficeShell.mjs.map +1 -1
  332. package/dist/jsx/shell/BackofficeShell.native.js +7 -6
  333. package/dist/jsx/shell/BackofficeShell.native.js.map +1 -1
  334. package/dist/jsx/shell/WorkspaceSidebar.mjs +2 -2
  335. package/dist/jsx/shell/WorkspaceSidebar.mjs.map +1 -1
  336. package/dist/jsx/shell/WorkspaceSidebar.native.js +2 -2
  337. package/dist/jsx/shell/WorkspaceSidebar.native.js.map +1 -1
  338. package/dist/jsx/views/KanbanView.mjs +4 -4
  339. package/dist/jsx/views/KanbanView.mjs.map +1 -1
  340. package/dist/jsx/views/KanbanView.native.js +4 -4
  341. package/dist/jsx/views/KanbanView.native.js.map +1 -1
  342. package/dist/jsx/views/ViewHeader.mjs +2 -2
  343. package/dist/jsx/views/ViewHeader.mjs.map +1 -1
  344. package/dist/jsx/views/ViewHeader.native.js +2 -2
  345. package/dist/jsx/views/ViewHeader.native.js.map +1 -1
  346. package/dist/jsx/views/ViewStates.mjs +2 -1
  347. package/dist/jsx/views/ViewStates.mjs.map +1 -1
  348. package/dist/jsx/views/ViewStates.native.js +2 -1
  349. package/dist/jsx/views/ViewStates.native.js.map +1 -1
  350. package/dist/jsx/views/kanban-board-controls.mjs +12 -7
  351. package/dist/jsx/views/kanban-board-controls.mjs.map +1 -1
  352. package/dist/jsx/views/kanban-board-controls.native.js +14 -7
  353. package/dist/jsx/views/kanban-board-controls.native.js.map +1 -1
  354. package/dist/jsx/views/report-controls.mjs +18 -18
  355. package/dist/jsx/views/report-controls.mjs.map +1 -1
  356. package/dist/jsx/views/report-controls.native.js +16 -16
  357. package/dist/jsx/views/report-controls.native.js.map +1 -1
  358. package/dist/jsx/workspace/WorkspaceChartBlock.mjs +7 -6
  359. package/dist/jsx/workspace/WorkspaceChartBlock.mjs.map +1 -1
  360. package/dist/jsx/workspace/WorkspaceChartBlock.native.js +6 -5
  361. package/dist/jsx/workspace/WorkspaceChartBlock.native.js.map +1 -1
  362. package/dist/jsx/workspace/WorkspaceLinkCard.mjs +16 -11
  363. package/dist/jsx/workspace/WorkspaceLinkCard.mjs.map +1 -1
  364. package/dist/jsx/workspace/WorkspaceLinkCard.native.js +15 -10
  365. package/dist/jsx/workspace/WorkspaceLinkCard.native.js.map +1 -1
  366. package/dist/jsx/workspace/WorkspaceNumberCard.mjs +13 -11
  367. package/dist/jsx/workspace/WorkspaceNumberCard.mjs.map +1 -1
  368. package/dist/jsx/workspace/WorkspaceNumberCard.native.js +12 -10
  369. package/dist/jsx/workspace/WorkspaceNumberCard.native.js.map +1 -1
  370. package/dist/jsx/workspace/WorkspaceQuickList.mjs +10 -8
  371. package/dist/jsx/workspace/WorkspaceQuickList.mjs.map +1 -1
  372. package/dist/jsx/workspace/WorkspaceQuickList.native.js +9 -7
  373. package/dist/jsx/workspace/WorkspaceQuickList.native.js.map +1 -1
  374. package/dist/jsx/workspace/WorkspaceRecents.mjs +6 -4
  375. package/dist/jsx/workspace/WorkspaceRecents.mjs.map +1 -1
  376. package/dist/jsx/workspace/WorkspaceRecents.native.js +6 -4
  377. package/dist/jsx/workspace/WorkspaceRecents.native.js.map +1 -1
  378. package/dist/jsx/workspace/WorkspaceShortcut.mjs +17 -24
  379. package/dist/jsx/workspace/WorkspaceShortcut.mjs.map +1 -1
  380. package/dist/jsx/workspace/WorkspaceShortcut.native.js +17 -24
  381. package/dist/jsx/workspace/WorkspaceShortcut.native.js.map +1 -1
  382. package/package.json +12 -12
  383. package/src/backofficeScreens.designLaw.spec.ts +160 -0
  384. package/src/chrome/HelpMenu.tsx +11 -7
  385. package/src/chrome/NotificationsButton.tsx +3 -1
  386. package/src/chrome/UserMenu.tsx +17 -12
  387. package/src/chrome/help-about-dialog.tsx +2 -2
  388. package/src/chrome/help-shortcuts-dialog.tsx +4 -3
  389. package/src/chrome/notifications-panel.tsx +8 -5
  390. package/src/form/FormConnections.tsx +1 -1
  391. package/src/form/FormErrorBoundary.tsx +1 -1
  392. package/src/form/FormHeaderCluster.tsx +10 -4
  393. package/src/form/FormSidebarPanel.tsx +9 -8
  394. package/src/form/FormTimeline.tsx +17 -12
  395. package/src/form/FormToolbar.tsx +18 -18
  396. package/src/form/sidebar-people.tsx +1 -1
  397. package/src/list/DoctypeListScreen.tsx +10 -3
  398. package/src/list/ListBulkActionsBar.tsx +32 -17
  399. package/src/list/ListFilterBar.tsx +8 -5
  400. package/src/list/list-tools-sheet.tsx +7 -4
  401. package/src/list/listColumns.tsx +30 -32
  402. package/src/list/sidebar-section.tsx +14 -14
  403. package/src/report/QueryReportScreen.tsx +3 -1
  404. package/src/report/queryReportFilterBar.tsx +1 -1
  405. package/src/report/report-grid.tsx +4 -4
  406. package/src/report/report-toolbar.tsx +4 -13
  407. package/src/shell/BackofficeShell.tsx +5 -11
  408. package/src/shell/WorkspaceSidebar.tsx +2 -9
  409. package/src/views/KanbanView.tsx +3 -3
  410. package/src/views/ViewHeader.tsx +2 -2
  411. package/src/views/ViewStates.tsx +2 -1
  412. package/src/views/kanban-board-controls.tsx +10 -7
  413. package/src/views/report-controls.tsx +17 -18
  414. package/src/workspace/WorkspaceChartBlock.tsx +5 -5
  415. package/src/workspace/WorkspaceLinkCard.tsx +12 -10
  416. package/src/workspace/WorkspaceNumberCard.tsx +9 -9
  417. package/src/workspace/WorkspaceQuickList.tsx +9 -8
  418. package/src/workspace/WorkspaceRecents.tsx +5 -4
  419. package/src/workspace/WorkspaceShortcut.tsx +11 -25
  420. package/types/chrome/HelpMenu.d.ts.map +1 -1
  421. package/types/chrome/NotificationsButton.d.ts.map +1 -1
  422. package/types/chrome/UserMenu.d.ts.map +1 -1
  423. package/types/chrome/help-shortcuts-dialog.d.ts.map +1 -1
  424. package/types/chrome/notifications-panel.d.ts.map +1 -1
  425. package/types/form/FormHeaderCluster.d.ts.map +1 -1
  426. package/types/form/FormSidebarPanel.d.ts.map +1 -1
  427. package/types/form/FormTimeline.d.ts.map +1 -1
  428. package/types/list/DoctypeListScreen.d.ts.map +1 -1
  429. package/types/list/ListBulkActionsBar.d.ts.map +1 -1
  430. package/types/list/ListFilterBar.d.ts.map +1 -1
  431. package/types/list/list-tools-sheet.d.ts.map +1 -1
  432. package/types/list/listColumns.d.ts.map +1 -1
  433. package/types/list/sidebar-section.d.ts.map +1 -1
  434. package/types/report/QueryReportScreen.d.ts.map +1 -1
  435. package/types/report/report-toolbar.d.ts.map +1 -1
  436. package/types/shell/BackofficeShell.d.ts.map +1 -1
  437. package/types/shell/WorkspaceSidebar.d.ts.map +1 -1
  438. package/types/views/ViewStates.d.ts.map +1 -1
  439. package/types/views/kanban-board-controls.d.ts.map +1 -1
  440. package/types/views/report-controls.d.ts.map +1 -1
  441. package/types/workspace/WorkspaceLinkCard.d.ts.map +1 -1
  442. package/types/workspace/WorkspaceQuickList.d.ts.map +1 -1
  443. package/types/workspace/WorkspaceRecents.d.ts.map +1 -1
  444. package/types/workspace/WorkspaceShortcut.d.ts.map +1 -1
@@ -0,0 +1,160 @@
1
+ /**
2
+ * MPO-60 design-law source contracts for remaining Screens/Backoffice chrome.
3
+ * Rulings: /tmp/cursor-mpo-lanes/RULINGS-2026-08-28.md (R7 weight 400; R6 size
4
+ * table; R2 single-line pill). `one` stays behind ./one-adapter.
5
+ */
6
+ import fs from "node:fs";
7
+ import path from "node:path";
8
+ import { describe, expect, it } from "vitest";
9
+
10
+ const srcDir = path.resolve(__dirname);
11
+ const repoRoot = path.resolve(__dirname, "../../..");
12
+
13
+ function read(rel: string): string {
14
+ return fs.readFileSync(path.resolve(srcDir, rel), "utf-8");
15
+ }
16
+
17
+ describe("Backoffice screens — design-law 100%", () => {
18
+ it("does not import one outside oneAdapter", () => {
19
+ const adapter = read("oneAdapter/index.tsx");
20
+ expect(adapter).toMatch(/from ["']one["']/);
21
+ const walk = (dir: string) => {
22
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
23
+ const full = path.join(dir, entry.name);
24
+ if (entry.isDirectory()) {
25
+ if (entry.name === "oneAdapter") continue;
26
+ walk(full);
27
+ continue;
28
+ }
29
+ if (!/\.(tsx|ts)$/.test(entry.name) || entry.name.includes(".spec.")) continue;
30
+ const source = fs.readFileSync(full, "utf-8");
31
+ expect(source, full).not.toMatch(/from ["']one["']/);
32
+ expect(source, full).not.toMatch(/from ["']one\//);
33
+ }
34
+ };
35
+ walk(srcDir);
36
+ });
37
+
38
+ it("ListBulkActionsBar rides complete surface fragments and R7 weight 400", () => {
39
+ const source = read("list/ListBulkActionsBar.tsx");
40
+ expect(source).toContain("useResolvedKnobs");
41
+ expect(source).toContain("knobProps.surface");
42
+ expect(source).toContain("knobProps.borderRadius");
43
+ expect(source).toContain("knobProps.panelPadding");
44
+ expect(source).toContain('fontWeight="400"');
45
+ expect(source).not.toMatch(/fontWeight="600"|fontWeight="500"/);
46
+ expect(source).toMatch(/import \{ Button \} from "@multiplatform.one\/forms"/);
47
+ });
48
+
49
+ it("KanbanView card title uses the label fragment, not sizeToken as fontSize (LC-65)", () => {
50
+ const source = read("views/KanbanView.tsx");
51
+ expect(source).not.toMatch(/fontSize=\{knobProps\.sizeToken\}/);
52
+ expect(source).toContain("knobProps.label");
53
+ expect(source).not.toMatch(/fontWeight="500"|fontWeight="700"/);
54
+ });
55
+
56
+ it("FormToolbar title rides pageTitle + heading; icons ride controlIcon", () => {
57
+ const source = read("form/FormToolbar.tsx");
58
+ expect(source).toContain("knobProps.pageTitle");
59
+ expect(source).toContain("knobProps.heading");
60
+ expect(source).toContain("controlIcon");
61
+ expect(source).toContain("iconSize");
62
+ expect(source).not.toMatch(/size=\{16\}|size=\{18\}/);
63
+ });
64
+
65
+ it("DoctypeListScreen and QueryReportScreen page frames spread gap + panelPadding", () => {
66
+ const list = read("list/DoctypeListScreen.tsx");
67
+ expect(list).toContain("knobProps.panelPadding");
68
+ expect(list).toContain("knobProps.pageTitle");
69
+ const report = read("report/QueryReportScreen.tsx");
70
+ expect(report).toContain("knobProps.panelPadding");
71
+ expect(report).toContain("knobProps.gap");
72
+ });
73
+
74
+ it("report filter chips are catalog Chip, not a private 999-radius pill", () => {
75
+ const source = read("views/report-controls.tsx");
76
+ expect(source).toContain("<Chip");
77
+ expect(source).not.toMatch(/borderRadius=\{999\}/);
78
+ expect(source).toContain("formatNumber");
79
+ expect(source).not.toContain("toLocaleString");
80
+ });
81
+
82
+ it("list indicator pills and report toolbar filters are catalog Chip, not 999-radius wells", () => {
83
+ expect(read("list/listColumns.tsx")).toContain("<Chip");
84
+ expect(read("list/listColumns.tsx")).not.toMatch(/borderRadius=\{999\}/);
85
+ expect(read("report/report-toolbar.tsx")).toContain("<Chip");
86
+ expect(read("report/report-toolbar.tsx")).not.toMatch(/borderRadius=\{999\}/);
87
+ });
88
+
89
+ it("Workspace shortcut counts are catalog Chip; labels and titles weight 400", () => {
90
+ const shortcut = read("workspace/WorkspaceShortcut.tsx");
91
+ expect(shortcut).toContain("<Chip");
92
+ expect(shortcut).toContain("knobProps.label");
93
+ expect(shortcut).toContain("controlIcon");
94
+ expect(shortcut).not.toMatch(/borderRadius=\{1000\}|borderRadius=\{999\}/);
95
+ expect(shortcut).not.toMatch(/fontWeight="600"|fontWeight="500"|fontWeight="700"/);
96
+ expect(shortcut).not.toMatch(/size=\{16\}|size=\{14\}/);
97
+ const recents = read("workspace/WorkspaceRecents.tsx");
98
+ expect(recents).toContain("knobProps.label");
99
+ expect(recents).toContain("controlIcon");
100
+ expect(recents).not.toMatch(/size=\{14\}/);
101
+ for (const rel of [
102
+ "workspace/WorkspaceNumberCard.tsx",
103
+ "workspace/WorkspaceQuickList.tsx",
104
+ "workspace/WorkspaceChartBlock.tsx",
105
+ "workspace/WorkspaceLinkCard.tsx",
106
+ ]) {
107
+ const source = read(rel);
108
+ expect(source, rel).toMatch(/knobProps\.(heading|label)/);
109
+ expect(source, rel).not.toMatch(/fontWeight="600"|fontWeight="500"|fontWeight="700"/);
110
+ }
111
+ });
112
+
113
+ it("query-report filter bar spreads gap + panelPadding", () => {
114
+ const source = read("report/queryReportFilterBar.tsx");
115
+ expect(source).toContain("knobProps.gap");
116
+ expect(source).toContain("knobProps.panelPadding");
117
+ expect(source).not.toMatch(/gap="\$2"/);
118
+ });
119
+
120
+ it("listed Screens/Backoffice stories export named meta with status stable", () => {
121
+ const stories = [
122
+ "features/backoffice/views/CalendarView.stories.tsx",
123
+ "features/backoffice/views/DashboardView.stories.tsx",
124
+ "features/backoffice/form/DocFormScreen.stories.tsx",
125
+ "features/backoffice/list/DoctypeListScreen.stories.tsx",
126
+ "features/backoffice/report/DoctypeReportView.stories.tsx",
127
+ "features/backoffice/form/FormConnections.stories.tsx",
128
+ "features/backoffice/form/FormDialogs.stories.tsx",
129
+ "features/backoffice/form/FormSidebarPanel.stories.tsx",
130
+ "features/backoffice/form/FormTimeline.stories.tsx",
131
+ "features/backoffice/form/FormToolbar.stories.tsx",
132
+ "features/backoffice/form/FormToolbarPager.stories.tsx",
133
+ "features/backoffice/chrome/HelpMenu.stories.tsx",
134
+ "features/backoffice/views/ImageView.stories.tsx",
135
+ "features/backoffice/views/KanbanView.stories.tsx",
136
+ "features/backoffice/views/KanbanBoardControls.stories.tsx",
137
+ "features/backoffice/list/ListBulkActionsBar.stories.tsx",
138
+ "features/backoffice/list/ListBulkDialogs.stories.tsx",
139
+ "features/backoffice/list/ListFilterBar.stories.tsx",
140
+ "features/backoffice/list/ListSidebar.stories.tsx",
141
+ "features/backoffice/chrome/NotificationsButton.stories.tsx",
142
+ "features/backoffice/report/QueryReportScreen.stories.tsx",
143
+ "features/backoffice/report/QueryReportFilters.stories.tsx",
144
+ "features/backoffice/quickEntry/QuickEntryDialog.stories.tsx",
145
+ "features/backoffice/views/ReportView.stories.tsx",
146
+ "features/backoffice/shell/BackofficeShell.stories.tsx",
147
+ "features/backoffice/chrome/UserMenu.stories.tsx",
148
+ "features/backoffice/views/ViewHeader.stories.tsx",
149
+ "features/backoffice/workspace/WorkspaceScreen.stories.tsx",
150
+ "features/todos/Todos.stories.tsx",
151
+ "features/wallet/Wallet.stories.tsx",
152
+ ];
153
+ for (const rel of stories) {
154
+ const source = fs.readFileSync(path.join(repoRoot, rel), "utf-8");
155
+ expect(source, rel).toContain("const meta =");
156
+ expect(source, rel).toContain("export default meta");
157
+ expect(source, rel).toContain('status: { type: "stable" }');
158
+ }
159
+ });
160
+ });
@@ -7,7 +7,8 @@
7
7
  //
8
8
  // Catalog DropdownMenu (not a padded Popover of Buttons): SP-EDGE rows,
9
9
  // LC-71 keyboard ring on the focused item, LC-21 COMMIT close-on-pick.
10
- import { Button, DropdownMenu } from "@multiplatform.one/components";
10
+ import { DropdownMenu } from "@multiplatform.one/components";
11
+ import { Button } from "@multiplatform.one/forms";
11
12
  import { openUrl } from "@multiplatform.one/platform";
12
13
  import {
13
14
  BookOpenIcon,
@@ -17,6 +18,7 @@ import {
17
18
  KeyboardIcon,
18
19
  QuestionIcon,
19
20
  } from "@phosphor-icons/react";
21
+ import { useResolvedKnobs } from "@multiplatform.one/theme";
20
22
  import { useState } from "react";
21
23
  import { useTranslation } from "react-i18next";
22
24
  import { BACKOFFICE_I18N_NAMESPACE } from "../i18n";
@@ -29,6 +31,8 @@ const REPORT_ISSUE_URL = "https://github.com/frappe/frappe/issues";
29
31
 
30
32
  export function HelpMenu() {
31
33
  const { t } = useTranslation(BACKOFFICE_I18N_NAMESPACE);
34
+ const { knobProps } = useResolvedKnobs();
35
+ const iconSize = Number(knobProps.controlIcon?.width) || 16;
32
36
  const [menuOpen, setMenuOpen] = useState(false);
33
37
  const [aboutOpen, setAboutOpen] = useState(false);
34
38
  const [shortcutsOpen, setShortcutsOpen] = useState(false);
@@ -48,7 +52,7 @@ export function HelpMenu() {
48
52
  <Button
49
53
  chromeless
50
54
  circular
51
- size="$3"
55
+ size={knobProps.sizeToken}
52
56
  icon={QuestionIcon}
53
57
  aria-label={t("help.label", "Help")}
54
58
  data-testid="backoffice-help-trigger"
@@ -56,21 +60,21 @@ export function HelpMenu() {
56
60
  </DropdownMenu.Trigger>
57
61
  <DropdownMenu.Content minWidth={220} data-testid="backoffice-help-menu">
58
62
  <DropdownMenu.Item
59
- icon={<BookOpenIcon size={16} />}
63
+ icon={<BookOpenIcon size={iconSize} />}
60
64
  onSelect={() => openLink(DOCUMENTATION_URL)}
61
65
  data-testid="backoffice-help-documentation"
62
66
  >
63
67
  {t("help.documentation", "Documentation")}
64
68
  </DropdownMenu.Item>
65
69
  <DropdownMenu.Item
66
- icon={<ChatsCircleIcon size={16} />}
70
+ icon={<ChatsCircleIcon size={iconSize} />}
67
71
  onSelect={() => openLink(USER_FORUM_URL)}
68
72
  data-testid="backoffice-help-forum"
69
73
  >
70
74
  {t("help.userForum", "User Forum")}
71
75
  </DropdownMenu.Item>
72
76
  <DropdownMenu.Item
73
- icon={<BugIcon size={16} />}
77
+ icon={<BugIcon size={iconSize} />}
74
78
  onSelect={() => openLink(REPORT_ISSUE_URL)}
75
79
  data-testid="backoffice-help-report-issue"
76
80
  >
@@ -78,14 +82,14 @@ export function HelpMenu() {
78
82
  </DropdownMenu.Item>
79
83
  <DropdownMenu.Separator />
80
84
  <DropdownMenu.Item
81
- icon={<KeyboardIcon size={16} />}
85
+ icon={<KeyboardIcon size={iconSize} />}
82
86
  onSelect={() => openDialog(setShortcutsOpen)}
83
87
  data-testid="backoffice-help-shortcuts"
84
88
  >
85
89
  {t("help.keyboardShortcuts", "Keyboard Shortcuts")}
86
90
  </DropdownMenu.Item>
87
91
  <DropdownMenu.Item
88
- icon={<InfoIcon size={16} />}
92
+ icon={<InfoIcon size={iconSize} />}
89
93
  onSelect={() => openDialog(setAboutOpen)}
90
94
  data-testid="backoffice-help-about"
91
95
  >
@@ -7,6 +7,7 @@ import { Badge } from "@multiplatform.one/components";
7
7
  // its own glyph (LC-54, LC-53 icon slot).
8
8
  import { Button, FloatingPanel, useViewportGtSm } from "@multiplatform.one/forms";
9
9
  import { BellIcon } from "@phosphor-icons/react";
10
+ import { useResolvedKnobs } from "@multiplatform.one/theme";
10
11
  import { useCallback, useState } from "react";
11
12
  import { useTranslation } from "react-i18next";
12
13
  import {
@@ -23,6 +24,7 @@ const PANEL_WIDTH = 400;
23
24
 
24
25
  export function NotificationsButton() {
25
26
  const { t } = useTranslation(BACKOFFICE_I18N_NAMESPACE);
27
+ const { knobProps } = useResolvedKnobs();
26
28
  const navigator = useBackofficeNavigator();
27
29
  const paths = useBackofficePaths();
28
30
  const { emitEvent } = useBackofficeConfig();
@@ -70,7 +72,7 @@ export function NotificationsButton() {
70
72
  <Button
71
73
  chromeless
72
74
  circular
73
- size="$3"
75
+ size={knobProps.sizeToken}
74
76
  icon={BellIcon}
75
77
  aria-label={label}
76
78
  data-testid="backoffice-notifications-button"
@@ -3,15 +3,10 @@
3
3
  // hosts without one get a disabled item (GJS/story parity). The logout and
4
4
  // theme items are individually gated by the userMenu capability config.
5
5
  import React from "react";
6
- import {
7
- Avatar,
8
- Button,
9
- DropdownMenu,
10
- SizableText,
11
- YStack,
12
- isWeb,
13
- } from "@multiplatform.one/components";
6
+ import { Avatar, DropdownMenu, SizableText, YStack, isWeb } from "@multiplatform.one/components";
7
+ import { Button } from "@multiplatform.one/forms";
14
8
  import { useFrappeConfig } from "@multiplatform.one/frappe-ui";
9
+ import { useResolvedKnobs } from "@multiplatform.one/theme";
15
10
  import { useCallback } from "react";
16
11
  import { useTranslation } from "react-i18next";
17
12
  import {
@@ -31,6 +26,7 @@ export interface UserMenuProps {
31
26
 
32
27
  export function UserMenu({ defaultOpen }: UserMenuProps = {}) {
33
28
  const { t } = useTranslation(BACKOFFICE_I18N_NAMESPACE);
29
+ const { knobProps } = useResolvedKnobs();
34
30
  const navigator = useBackofficeNavigator();
35
31
  const paths = useBackofficePaths();
36
32
  const { appearance } = useBackofficeConfig();
@@ -86,15 +82,24 @@ export function UserMenu({ defaultOpen }: UserMenuProps = {}) {
86
82
  return (
87
83
  <DropdownMenu placement="bottom-end" defaultOpen={defaultOpen}>
88
84
  <DropdownMenu.Trigger asChild>
89
- <Button chromeless circular size="$3" aria-label={t("userMenu.label", "User menu")}>
90
- <Avatar size={26} src={info?.imageUrl} name={info?.fullName ?? info?.user} />
85
+ <Button
86
+ chromeless
87
+ circular
88
+ size={knobProps.sizeToken}
89
+ aria-label={t("userMenu.label", "User menu")}
90
+ >
91
+ <Avatar
92
+ size={knobProps.sizeToken === "$5" ? "$3" : knobProps.sizeToken === "$3" ? "$1" : "$2"}
93
+ src={info?.imageUrl}
94
+ name={info?.fullName ?? info?.user}
95
+ />
91
96
  </Button>
92
97
  </DropdownMenu.Trigger>
93
98
  <DropdownMenu.Content minWidth={240}>
94
99
  {info ? (
95
100
  <>
96
- <YStack paddingHorizontal="$3" paddingVertical="$2.5" gap="$0.5">
97
- <SizableText size="$3" fontWeight="600" numberOfLines={1}>
101
+ <YStack {...knobProps.panelPadding} {...knobProps.gap} paddingVertical="$2">
102
+ <SizableText {...knobProps.label} fontWeight="400" numberOfLines={1}>
98
103
  {info.fullName}
99
104
  </SizableText>
100
105
  {info.email ? (
@@ -91,7 +91,7 @@ export function HelpAboutDialog({ open, onOpenChange }: HelpAboutDialogProps) {
91
91
  </Paragraph>
92
92
  </Dialog.Description>
93
93
  <YStack gap="$2" marginTop="$2">
94
- <SizableText size="$2" fontWeight="700" color="$color10" textTransform="uppercase">
94
+ <SizableText size="$2" fontWeight="400" color="$color10" textTransform="uppercase">
95
95
  {t("help.installedApps", "Installed Apps")}
96
96
  </SizableText>
97
97
  {loading && (
@@ -107,7 +107,7 @@ export function HelpAboutDialog({ open, onOpenChange }: HelpAboutDialogProps) {
107
107
  {!loading &&
108
108
  entries.map(([key, info]) => (
109
109
  <XStack key={key} gap="$3" alignItems="baseline" justifyContent="space-between">
110
- <SizableText size="$3" fontWeight="600" flex={1} numberOfLines={1}>
110
+ <SizableText size="$3" fontWeight="400" flex={1} numberOfLines={1}>
111
111
  {info.title || key}
112
112
  </SizableText>
113
113
  <SizableText size="$3" color="$color11" flexShrink={0}>
@@ -14,6 +14,7 @@ import {
14
14
  XStack,
15
15
  YStack,
16
16
  } from "@multiplatform.one/components";
17
+ import { useResolvedKnobs } from "@multiplatform.one/theme";
17
18
  import { useTranslation } from "react-i18next";
18
19
  import { BACKOFFICE_I18N_NAMESPACE } from "../i18n";
19
20
 
@@ -34,18 +35,18 @@ function getModLabel(): string {
34
35
  }
35
36
 
36
37
  function KeyChip({ label }: { label: string }) {
38
+ const { knobProps } = useResolvedKnobs();
37
39
  return (
38
40
  <XStack
39
- borderWidth={1}
41
+ {...knobProps.borderRadius}
40
42
  borderColor="$borderColor"
41
43
  backgroundColor="$color2"
42
- borderRadius="$2"
43
44
  paddingHorizontal="$2"
44
45
  paddingVertical="$1"
45
46
  minWidth={28}
46
47
  justifyContent="center"
47
48
  >
48
- <SizableText size="$1" fontWeight="600">
49
+ <SizableText size="$1" fontWeight="400">
49
50
  {label}
50
51
  </SizableText>
51
52
  </XStack>
@@ -21,6 +21,7 @@ import {
21
21
  ensureFocusVisibleRing,
22
22
  formatRelativeTimestamp,
23
23
  menuRowFrame,
24
+ useResolvedKnobs,
24
25
  } from "@multiplatform.one/theme";
25
26
  import { GearSixIcon } from "@phosphor-icons/react";
26
27
  import { useTranslation } from "react-i18next";
@@ -38,13 +39,14 @@ export interface NotificationsPanelProps {
38
39
 
39
40
  function NotificationRow({ item, onPress }: { item: NotificationItem; onPress: () => void }) {
40
41
  const { t } = useTranslation(BACKOFFICE_I18N_NAMESPACE);
42
+ const { knobProps } = useResolvedKnobs();
41
43
  const subject = item.subjectText || t("notifications.untitled", "Notification");
42
44
  const relative = formatRelativeTimestamp(item.timestampMs ?? item.creation);
43
45
  return (
44
46
  <XStack
45
47
  {...menuRowFrame}
46
48
  alignItems="flex-start"
47
- gap="$3"
49
+ {...knobProps.gap}
48
50
  paddingVertical="$2.5"
49
51
  // LC-71: unread is SELECTED fill; the ring is keyboard-only on this row.
50
52
  backgroundColor={item.unread ? "$color2" : "transparent"}
@@ -69,15 +71,15 @@ function NotificationRow({ item, onPress }: { item: NotificationItem; onPress: (
69
71
  <Avatar name={item.from_user || "?"} size="$2.5" />
70
72
  <YStack flex={1} minWidth={0} gap="$1">
71
73
  <Text
72
- fontSize="$3"
73
- fontWeight={item.unread ? "600" : "400"}
74
+ {...knobProps.label}
75
+ fontWeight="400"
74
76
  color={item.unread ? "$color12" : "$color11"}
75
77
  numberOfLines={2}
76
78
  >
77
79
  {subject}
78
80
  </Text>
79
81
  {relative ? (
80
- <Text fontSize="$2" color="$color9">
82
+ <Text {...knobProps.label} color="$color9">
81
83
  {relative}
82
84
  </Text>
83
85
  ) : null}
@@ -127,6 +129,7 @@ export function NotificationsPanel({
127
129
  onMarkAllRead,
128
130
  }: NotificationsPanelProps) {
129
131
  const { t } = useTranslation(BACKOFFICE_I18N_NAMESPACE);
132
+ const { knobProps } = useResolvedKnobs();
130
133
  const hasUnread = items.some((item) => item.unread);
131
134
 
132
135
  return (
@@ -138,7 +141,7 @@ export function NotificationsPanel({
138
141
  data-testid="backoffice-notifications-panel"
139
142
  >
140
143
  <XStack alignItems="center" gap="$2" paddingHorizontal="$3" paddingVertical="$2">
141
- <SizableText size="$4" fontWeight="700" flex={1} numberOfLines={1}>
144
+ <SizableText {...knobProps.heading} flex={1} numberOfLines={1}>
142
145
  {t("notifications.title", "Notifications")}
143
146
  </SizableText>
144
147
  <Button
@@ -162,7 +162,7 @@ function ConnectionGroupCard({ group, docname, counts, countsLoading }: Connecti
162
162
  return (
163
163
  <Card flexBasis={240} flexGrow={1} flexShrink={1}>
164
164
  <YStack {...knobProps.panelPadding} {...knobProps.gap}>
165
- <SizableText size="$4" fontWeight="700">
165
+ <SizableText size="$4" {...knobProps.heading} fontWeight="400">
166
166
  {group.label || t("connections.referenceGroup", "Reference")}
167
167
  </SizableText>
168
168
  <Separator />
@@ -74,7 +74,7 @@ function FormErrorFallback({
74
74
  return (
75
75
  <YStack {...knobProps.gap} minWidth={0} testID={testID}>
76
76
  {label ? (
77
- <Text fontSize="$3" fontWeight="600" color="$color11" numberOfLines={1}>
77
+ <Text fontSize="$3" fontWeight="400" color="$color11" numberOfLines={1}>
78
78
  {label}
79
79
  </Text>
80
80
  ) : null}
@@ -14,7 +14,7 @@
14
14
  import { XStack, useTheme } from "@multiplatform.one/components";
15
15
  import { Button } from "@multiplatform.one/forms";
16
16
  import { useFrappeConfig } from "@multiplatform.one/frappe-ui";
17
- import { pressTargetStyle } from "@multiplatform.one/theme";
17
+ import { pressTargetStyle, useResolvedKnobs } from "@multiplatform.one/theme";
18
18
  import { BellIcon, HeartIcon, UserCirclePlusIcon } from "@phosphor-icons/react";
19
19
  import { useState } from "react";
20
20
  import { useTranslation } from "react-i18next";
@@ -48,6 +48,8 @@ export function FormHeaderCluster({
48
48
  onRefresh,
49
49
  }: FormHeaderClusterProps) {
50
50
  const { t } = useTranslation(BACKOFFICE_I18N_NAMESPACE);
51
+ const { knobProps } = useResolvedKnobs();
52
+ const iconSize = Number(knobProps.controlIcon?.width) || 16;
51
53
  const app = useFrappeApp();
52
54
  const config = useFrappeConfig();
53
55
  const capabilities = useBackofficeCapabilities();
@@ -130,7 +132,7 @@ export function FormHeaderCluster({
130
132
  <Button
131
133
  chromeless
132
134
  {...pressFloor}
133
- icon={<UserCirclePlusIcon size={18} color={mutedColor} />}
135
+ icon={<UserCirclePlusIcon size={iconSize} color={mutedColor} />}
134
136
  loading={busy === "assign"}
135
137
  aria-label={t("assignTitle", "Add assignment")}
136
138
  onPress={() => setAssignOpen(true)}
@@ -142,7 +144,7 @@ export function FormHeaderCluster({
142
144
  {...pressFloor}
143
145
  icon={
144
146
  <HeartIcon
145
- size={18}
147
+ size={iconSize}
146
148
  weight={likedByMe ? "fill" : "regular"}
147
149
  color={likedByMe ? likedColor : mutedColor}
148
150
  />
@@ -166,7 +168,11 @@ export function FormHeaderCluster({
166
168
  chromeless
167
169
  {...pressFloor}
168
170
  icon={
169
- <BellIcon size={18} weight={isFollowed ? "fill" : "regular"} color={mutedColor} />
171
+ <BellIcon
172
+ size={iconSize}
173
+ weight={isFollowed ? "fill" : "regular"}
174
+ color={mutedColor}
175
+ />
170
176
  }
171
177
  loading={busy === "follow"}
172
178
  aria-pressed={isFollowed}
@@ -171,7 +171,7 @@ export function SidebarAccordionTrigger({
171
171
  focusVisibleStyle={ensureFocusVisibleRing({ outlineOffset: -2 })}
172
172
  >
173
173
  <XStack flex={1} alignItems="center" gap="$2">
174
- <Text fontSize="$3" fontWeight="600" color="$color12" numberOfLines={1}>
174
+ <Text fontSize="$3" fontWeight="400" color="$color12" numberOfLines={1}>
175
175
  {section.title}
176
176
  </Text>
177
177
  <Chip size="$2" variant="subtle" color="gray">
@@ -195,6 +195,7 @@ export function FormSidebarPanel({
195
195
  }: FormSidebarPanelProps) {
196
196
  const { t } = useTranslation(BACKOFFICE_I18N_NAMESPACE);
197
197
  const { knobProps } = useResolvedKnobs();
198
+ const iconSize = Number(knobProps.controlIcon?.width) || 14;
198
199
  const theme = useTheme();
199
200
  const app = useFrappeApp();
200
201
  const config = useFrappeConfig();
@@ -362,7 +363,7 @@ export function FormSidebarPanel({
362
363
  key: "assigned",
363
364
  title: t("assignedTo", "Assigned To"),
364
365
  count: assignedCount,
365
- icon: <UsersIcon size={14} color={iconColor} />,
366
+ icon: <UsersIcon size={iconSize} color={iconColor} />,
366
367
  content: (
367
368
  // The accordion header owns the section title, so the widget's own
368
369
  // label slot is blanked (label="") — its add affordance and live
@@ -389,7 +390,7 @@ export function FormSidebarPanel({
389
390
  key: "attachments",
390
391
  title: t("attachments", "Attachments"),
391
392
  count: attachmentCount,
392
- icon: <PaperclipIcon size={14} color={iconColor} />,
393
+ icon: <PaperclipIcon size={iconSize} color={iconColor} />,
393
394
  content: (
394
395
  <SidebarAttachments
395
396
  items={attachments}
@@ -411,7 +412,7 @@ export function FormSidebarPanel({
411
412
  key: "tags",
412
413
  title: t("tags", "Tags"),
413
414
  count: tagCount,
414
- icon: <TagIcon size={14} color={iconColor} />,
415
+ icon: <TagIcon size={iconSize} color={iconColor} />,
415
416
  content: (
416
417
  <Tags
417
418
  compact
@@ -441,7 +442,7 @@ export function FormSidebarPanel({
441
442
  key: "shared",
442
443
  title: t("sharedWith", "Shared With"),
443
444
  count: shareCount,
444
- icon: <ShareNetworkIcon size={14} color={iconColor} />,
445
+ icon: <ShareNetworkIcon size={iconSize} color={iconColor} />,
445
446
  content: (
446
447
  <YStack {...knobProps.gap}>
447
448
  <SidebarPeopleList
@@ -456,7 +457,7 @@ export function FormSidebarPanel({
456
457
  <Button
457
458
  size="$2"
458
459
  outlined
459
- icon={<PlusIcon size={14} />}
460
+ icon={<PlusIcon size={iconSize} />}
460
461
  loading={busy}
461
462
  onPress={() => setShareOpen(true)}
462
463
  testID="form-sidebar-share"
@@ -471,7 +472,7 @@ export function FormSidebarPanel({
471
472
  key: "liked",
472
473
  title: t("likedBy", "Liked By"),
473
474
  count: likeCount,
474
- icon: <HeartIcon size={14} color={iconColor} />,
475
+ icon: <HeartIcon size={iconSize} color={iconColor} />,
475
476
  content: (
476
477
  // Live `_liked_by` heart + avatar cluster; the toggle mirrors the
477
478
  // header cluster's heart and both refresh the shared docinfo.
@@ -581,7 +582,7 @@ export function FormSidebarPanel({
581
582
  <YStack gap="$1.5" {...knobProps.panelPadding} paddingTop="$2">
582
583
  {metadata.map((entry) => (
583
584
  <XStack key={entry.key} gap="$2" alignItems="center">
584
- <ClockIcon size={14} color={iconColor} />
585
+ <ClockIcon size={iconSize} color={iconColor} />
585
586
  <Text flex={1} fontSize="$1" color="$color11">
586
587
  {entry.label}
587
588
  </Text>