@multiplatform.one/backoffice 6.3.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 (414) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +310 -0
  3. package/dist/cjs/chrome/BackofficeAwesomebar.cjs +95 -0
  4. package/dist/cjs/chrome/BackofficeAwesomebar.native.js +106 -0
  5. package/dist/cjs/chrome/BackofficeAwesomebar.native.js.map +1 -0
  6. package/dist/cjs/chrome/CommandPalette.cjs +453 -0
  7. package/dist/cjs/chrome/CommandPalette.native.js +505 -0
  8. package/dist/cjs/chrome/CommandPalette.native.js.map +1 -0
  9. package/dist/cjs/chrome/HelpMenu.cjs +131 -0
  10. package/dist/cjs/chrome/HelpMenu.native.js +145 -0
  11. package/dist/cjs/chrome/HelpMenu.native.js.map +1 -0
  12. package/dist/cjs/chrome/NotificationsButton.cjs +112 -0
  13. package/dist/cjs/chrome/NotificationsButton.native.js +115 -0
  14. package/dist/cjs/chrome/NotificationsButton.native.js.map +1 -0
  15. package/dist/cjs/chrome/UserMenu.cjs +158 -0
  16. package/dist/cjs/chrome/UserMenu.native.js +186 -0
  17. package/dist/cjs/chrome/UserMenu.native.js.map +1 -0
  18. package/dist/cjs/chrome/awesomebar-data.cjs +173 -0
  19. package/dist/cjs/chrome/awesomebar-data.native.js +233 -0
  20. package/dist/cjs/chrome/awesomebar-data.native.js.map +1 -0
  21. package/dist/cjs/chrome/command-palette-model.cjs +208 -0
  22. package/dist/cjs/chrome/command-palette-model.native.js +301 -0
  23. package/dist/cjs/chrome/command-palette-model.native.js.map +1 -0
  24. package/dist/cjs/chrome/help-about-dialog.cjs +136 -0
  25. package/dist/cjs/chrome/help-about-dialog.native.js +146 -0
  26. package/dist/cjs/chrome/help-about-dialog.native.js.map +1 -0
  27. package/dist/cjs/chrome/help-shortcuts-dialog.cjs +155 -0
  28. package/dist/cjs/chrome/help-shortcuts-dialog.native.js +168 -0
  29. package/dist/cjs/chrome/help-shortcuts-dialog.native.js.map +1 -0
  30. package/dist/cjs/chrome/notifications-data.cjs +190 -0
  31. package/dist/cjs/chrome/notifications-data.native.js +271 -0
  32. package/dist/cjs/chrome/notifications-data.native.js.map +1 -0
  33. package/dist/cjs/chrome/notifications-panel.cjs +171 -0
  34. package/dist/cjs/chrome/notifications-panel.native.js +189 -0
  35. package/dist/cjs/chrome/notifications-panel.native.js.map +1 -0
  36. package/dist/cjs/chrome/notifications-utils.cjs +43 -0
  37. package/dist/cjs/chrome/notifications-utils.native.js +46 -0
  38. package/dist/cjs/chrome/notifications-utils.native.js.map +1 -0
  39. package/dist/cjs/chrome/shortcuts.cjs +58 -0
  40. package/dist/cjs/chrome/shortcuts.native.js +72 -0
  41. package/dist/cjs/chrome/shortcuts.native.js.map +1 -0
  42. package/dist/cjs/chrome/user-session.cjs +100 -0
  43. package/dist/cjs/chrome/user-session.native.js +120 -0
  44. package/dist/cjs/chrome/user-session.native.js.map +1 -0
  45. package/dist/cjs/config/BackofficeProvider.cjs +164 -0
  46. package/dist/cjs/config/BackofficeProvider.native.js +217 -0
  47. package/dist/cjs/config/BackofficeProvider.native.js.map +1 -0
  48. package/dist/cjs/config/capabilities.cjs +123 -0
  49. package/dist/cjs/config/capabilities.native.js +155 -0
  50. package/dist/cjs/config/capabilities.native.js.map +1 -0
  51. package/dist/cjs/config/events.cjs +18 -0
  52. package/dist/cjs/config/events.native.js +21 -0
  53. package/dist/cjs/config/events.native.js.map +1 -0
  54. package/dist/cjs/config/slots.cjs +18 -0
  55. package/dist/cjs/config/slots.native.js +21 -0
  56. package/dist/cjs/config/slots.native.js.map +1 -0
  57. package/dist/cjs/i18n/en.cjs +101 -0
  58. package/dist/cjs/i18n/en.native.js +104 -0
  59. package/dist/cjs/i18n/en.native.js.map +1 -0
  60. package/dist/cjs/i18n/index.cjs +77 -0
  61. package/dist/cjs/i18n/index.native.js +102 -0
  62. package/dist/cjs/i18n/index.native.js.map +1 -0
  63. package/dist/cjs/index.cjs +109 -0
  64. package/dist/cjs/index.native.js +112 -0
  65. package/dist/cjs/index.native.js.map +1 -0
  66. package/dist/cjs/navigation/navigator.cjs +144 -0
  67. package/dist/cjs/navigation/navigator.native.js +307 -0
  68. package/dist/cjs/navigation/navigator.native.js.map +1 -0
  69. package/dist/cjs/navigation/paths.cjs +103 -0
  70. package/dist/cjs/navigation/paths.native.js +143 -0
  71. package/dist/cjs/navigation/paths.native.js.map +1 -0
  72. package/dist/cjs/oneAdapter/index.cjs +53 -0
  73. package/dist/cjs/oneAdapter/index.native.js +64 -0
  74. package/dist/cjs/oneAdapter/index.native.js.map +1 -0
  75. package/dist/cjs/shared/useFrappeApp.cjs +56 -0
  76. package/dist/cjs/shared/useFrappeApp.native.js +60 -0
  77. package/dist/cjs/shared/useFrappeApp.native.js.map +1 -0
  78. package/dist/cjs/shell/BackofficeShell.cjs +194 -0
  79. package/dist/cjs/shell/BackofficeShell.native.js +223 -0
  80. package/dist/cjs/shell/BackofficeShell.native.js.map +1 -0
  81. package/dist/cjs/shell/WorkspaceSidebar.cjs +115 -0
  82. package/dist/cjs/shell/WorkspaceSidebar.native.js +143 -0
  83. package/dist/cjs/shell/WorkspaceSidebar.native.js.map +1 -0
  84. package/dist/cjs/shell/useWorkspaces.cjs +131 -0
  85. package/dist/cjs/shell/useWorkspaces.native.js +173 -0
  86. package/dist/cjs/shell/useWorkspaces.native.js.map +1 -0
  87. package/dist/cjs/shell/workspaceIcons.cjs +64 -0
  88. package/dist/cjs/shell/workspaceIcons.native.js +67 -0
  89. package/dist/cjs/shell/workspaceIcons.native.js.map +1 -0
  90. package/dist/esm/chrome/BackofficeAwesomebar.mjs +70 -0
  91. package/dist/esm/chrome/BackofficeAwesomebar.mjs.map +1 -0
  92. package/dist/esm/chrome/BackofficeAwesomebar.native.js +78 -0
  93. package/dist/esm/chrome/BackofficeAwesomebar.native.js.map +1 -0
  94. package/dist/esm/chrome/CommandPalette.mjs +428 -0
  95. package/dist/esm/chrome/CommandPalette.mjs.map +1 -0
  96. package/dist/esm/chrome/CommandPalette.native.js +477 -0
  97. package/dist/esm/chrome/CommandPalette.native.js.map +1 -0
  98. package/dist/esm/chrome/HelpMenu.mjs +106 -0
  99. package/dist/esm/chrome/HelpMenu.mjs.map +1 -0
  100. package/dist/esm/chrome/HelpMenu.native.js +117 -0
  101. package/dist/esm/chrome/HelpMenu.native.js.map +1 -0
  102. package/dist/esm/chrome/NotificationsButton.mjs +87 -0
  103. package/dist/esm/chrome/NotificationsButton.mjs.map +1 -0
  104. package/dist/esm/chrome/NotificationsButton.native.js +87 -0
  105. package/dist/esm/chrome/NotificationsButton.native.js.map +1 -0
  106. package/dist/esm/chrome/UserMenu.mjs +133 -0
  107. package/dist/esm/chrome/UserMenu.mjs.map +1 -0
  108. package/dist/esm/chrome/UserMenu.native.js +147 -0
  109. package/dist/esm/chrome/UserMenu.native.js.map +1 -0
  110. package/dist/esm/chrome/awesomebar-data.mjs +144 -0
  111. package/dist/esm/chrome/awesomebar-data.mjs.map +1 -0
  112. package/dist/esm/chrome/awesomebar-data.native.js +190 -0
  113. package/dist/esm/chrome/awesomebar-data.native.js.map +1 -0
  114. package/dist/esm/chrome/command-palette-model.mjs +183 -0
  115. package/dist/esm/chrome/command-palette-model.mjs.map +1 -0
  116. package/dist/esm/chrome/command-palette-model.native.js +273 -0
  117. package/dist/esm/chrome/command-palette-model.native.js.map +1 -0
  118. package/dist/esm/chrome/help-about-dialog.mjs +111 -0
  119. package/dist/esm/chrome/help-about-dialog.mjs.map +1 -0
  120. package/dist/esm/chrome/help-about-dialog.native.js +118 -0
  121. package/dist/esm/chrome/help-about-dialog.native.js.map +1 -0
  122. package/dist/esm/chrome/help-shortcuts-dialog.mjs +130 -0
  123. package/dist/esm/chrome/help-shortcuts-dialog.mjs.map +1 -0
  124. package/dist/esm/chrome/help-shortcuts-dialog.native.js +140 -0
  125. package/dist/esm/chrome/help-shortcuts-dialog.native.js.map +1 -0
  126. package/dist/esm/chrome/notifications-data.mjs +165 -0
  127. package/dist/esm/chrome/notifications-data.mjs.map +1 -0
  128. package/dist/esm/chrome/notifications-data.native.js +232 -0
  129. package/dist/esm/chrome/notifications-data.native.js.map +1 -0
  130. package/dist/esm/chrome/notifications-panel.mjs +146 -0
  131. package/dist/esm/chrome/notifications-panel.mjs.map +1 -0
  132. package/dist/esm/chrome/notifications-panel.native.js +161 -0
  133. package/dist/esm/chrome/notifications-panel.native.js.map +1 -0
  134. package/dist/esm/chrome/notifications-utils.mjs +17 -0
  135. package/dist/esm/chrome/notifications-utils.mjs.map +1 -0
  136. package/dist/esm/chrome/notifications-utils.native.js +17 -0
  137. package/dist/esm/chrome/notifications-utils.native.js.map +1 -0
  138. package/dist/esm/chrome/shortcuts.mjs +33 -0
  139. package/dist/esm/chrome/shortcuts.mjs.map +1 -0
  140. package/dist/esm/chrome/shortcuts.native.js +44 -0
  141. package/dist/esm/chrome/shortcuts.native.js.map +1 -0
  142. package/dist/esm/chrome/user-session.mjs +73 -0
  143. package/dist/esm/chrome/user-session.mjs.map +1 -0
  144. package/dist/esm/chrome/user-session.native.js +79 -0
  145. package/dist/esm/chrome/user-session.native.js.map +1 -0
  146. package/dist/esm/config/BackofficeProvider.mjs +132 -0
  147. package/dist/esm/config/BackofficeProvider.mjs.map +1 -0
  148. package/dist/esm/config/BackofficeProvider.native.js +171 -0
  149. package/dist/esm/config/BackofficeProvider.native.js.map +1 -0
  150. package/dist/esm/config/capabilities.mjs +97 -0
  151. package/dist/esm/config/capabilities.mjs.map +1 -0
  152. package/dist/esm/config/capabilities.native.js +126 -0
  153. package/dist/esm/config/capabilities.native.js.map +1 -0
  154. package/dist/esm/config/events.mjs +2 -0
  155. package/dist/esm/config/events.mjs.map +1 -0
  156. package/dist/esm/config/events.native.js +2 -0
  157. package/dist/esm/config/events.native.js.map +1 -0
  158. package/dist/esm/config/slots.mjs +2 -0
  159. package/dist/esm/config/slots.mjs.map +1 -0
  160. package/dist/esm/config/slots.native.js +2 -0
  161. package/dist/esm/config/slots.native.js.map +1 -0
  162. package/dist/esm/i18n/en.mjs +76 -0
  163. package/dist/esm/i18n/en.mjs.map +1 -0
  164. package/dist/esm/i18n/en.native.js +76 -0
  165. package/dist/esm/i18n/en.native.js.map +1 -0
  166. package/dist/esm/i18n/index.mjs +40 -0
  167. package/dist/esm/i18n/index.mjs.map +1 -0
  168. package/dist/esm/i18n/index.native.js +62 -0
  169. package/dist/esm/i18n/index.native.js.map +1 -0
  170. package/dist/esm/index.mjs +26 -0
  171. package/dist/esm/index.mjs.map +1 -0
  172. package/dist/esm/index.native.js +26 -0
  173. package/dist/esm/index.native.js.map +1 -0
  174. package/dist/esm/navigation/navigator.mjs +115 -0
  175. package/dist/esm/navigation/navigator.mjs.map +1 -0
  176. package/dist/esm/navigation/navigator.native.js +275 -0
  177. package/dist/esm/navigation/navigator.native.js.map +1 -0
  178. package/dist/esm/navigation/paths.mjs +66 -0
  179. package/dist/esm/navigation/paths.mjs.map +1 -0
  180. package/dist/esm/navigation/paths.native.js +103 -0
  181. package/dist/esm/navigation/paths.native.js.map +1 -0
  182. package/dist/esm/oneAdapter/index.mjs +28 -0
  183. package/dist/esm/oneAdapter/index.mjs.map +1 -0
  184. package/dist/esm/oneAdapter/index.native.js +36 -0
  185. package/dist/esm/oneAdapter/index.native.js.map +1 -0
  186. package/dist/esm/shared/useFrappeApp.mjs +31 -0
  187. package/dist/esm/shared/useFrappeApp.mjs.map +1 -0
  188. package/dist/esm/shared/useFrappeApp.native.js +32 -0
  189. package/dist/esm/shared/useFrappeApp.native.js.map +1 -0
  190. package/dist/esm/shell/BackofficeShell.mjs +169 -0
  191. package/dist/esm/shell/BackofficeShell.mjs.map +1 -0
  192. package/dist/esm/shell/BackofficeShell.native.js +195 -0
  193. package/dist/esm/shell/BackofficeShell.native.js.map +1 -0
  194. package/dist/esm/shell/WorkspaceSidebar.mjs +89 -0
  195. package/dist/esm/shell/WorkspaceSidebar.mjs.map +1 -0
  196. package/dist/esm/shell/WorkspaceSidebar.native.js +114 -0
  197. package/dist/esm/shell/WorkspaceSidebar.native.js.map +1 -0
  198. package/dist/esm/shell/useWorkspaces.mjs +104 -0
  199. package/dist/esm/shell/useWorkspaces.mjs.map +1 -0
  200. package/dist/esm/shell/useWorkspaces.native.js +143 -0
  201. package/dist/esm/shell/useWorkspaces.native.js.map +1 -0
  202. package/dist/esm/shell/workspaceIcons.mjs +39 -0
  203. package/dist/esm/shell/workspaceIcons.mjs.map +1 -0
  204. package/dist/esm/shell/workspaceIcons.native.js +39 -0
  205. package/dist/esm/shell/workspaceIcons.native.js.map +1 -0
  206. package/dist/jsx/chrome/BackofficeAwesomebar.mjs +70 -0
  207. package/dist/jsx/chrome/BackofficeAwesomebar.mjs.map +1 -0
  208. package/dist/jsx/chrome/BackofficeAwesomebar.native.js +106 -0
  209. package/dist/jsx/chrome/BackofficeAwesomebar.native.js.map +1 -0
  210. package/dist/jsx/chrome/CommandPalette.mjs +428 -0
  211. package/dist/jsx/chrome/CommandPalette.mjs.map +1 -0
  212. package/dist/jsx/chrome/CommandPalette.native.js +505 -0
  213. package/dist/jsx/chrome/CommandPalette.native.js.map +1 -0
  214. package/dist/jsx/chrome/HelpMenu.mjs +106 -0
  215. package/dist/jsx/chrome/HelpMenu.mjs.map +1 -0
  216. package/dist/jsx/chrome/HelpMenu.native.js +145 -0
  217. package/dist/jsx/chrome/HelpMenu.native.js.map +1 -0
  218. package/dist/jsx/chrome/NotificationsButton.mjs +87 -0
  219. package/dist/jsx/chrome/NotificationsButton.mjs.map +1 -0
  220. package/dist/jsx/chrome/NotificationsButton.native.js +115 -0
  221. package/dist/jsx/chrome/NotificationsButton.native.js.map +1 -0
  222. package/dist/jsx/chrome/UserMenu.mjs +133 -0
  223. package/dist/jsx/chrome/UserMenu.mjs.map +1 -0
  224. package/dist/jsx/chrome/UserMenu.native.js +186 -0
  225. package/dist/jsx/chrome/UserMenu.native.js.map +1 -0
  226. package/dist/jsx/chrome/awesomebar-data.mjs +144 -0
  227. package/dist/jsx/chrome/awesomebar-data.mjs.map +1 -0
  228. package/dist/jsx/chrome/awesomebar-data.native.js +233 -0
  229. package/dist/jsx/chrome/awesomebar-data.native.js.map +1 -0
  230. package/dist/jsx/chrome/command-palette-model.mjs +183 -0
  231. package/dist/jsx/chrome/command-palette-model.mjs.map +1 -0
  232. package/dist/jsx/chrome/command-palette-model.native.js +301 -0
  233. package/dist/jsx/chrome/command-palette-model.native.js.map +1 -0
  234. package/dist/jsx/chrome/help-about-dialog.mjs +111 -0
  235. package/dist/jsx/chrome/help-about-dialog.mjs.map +1 -0
  236. package/dist/jsx/chrome/help-about-dialog.native.js +146 -0
  237. package/dist/jsx/chrome/help-about-dialog.native.js.map +1 -0
  238. package/dist/jsx/chrome/help-shortcuts-dialog.mjs +130 -0
  239. package/dist/jsx/chrome/help-shortcuts-dialog.mjs.map +1 -0
  240. package/dist/jsx/chrome/help-shortcuts-dialog.native.js +168 -0
  241. package/dist/jsx/chrome/help-shortcuts-dialog.native.js.map +1 -0
  242. package/dist/jsx/chrome/notifications-data.mjs +165 -0
  243. package/dist/jsx/chrome/notifications-data.mjs.map +1 -0
  244. package/dist/jsx/chrome/notifications-data.native.js +271 -0
  245. package/dist/jsx/chrome/notifications-data.native.js.map +1 -0
  246. package/dist/jsx/chrome/notifications-panel.mjs +146 -0
  247. package/dist/jsx/chrome/notifications-panel.mjs.map +1 -0
  248. package/dist/jsx/chrome/notifications-panel.native.js +189 -0
  249. package/dist/jsx/chrome/notifications-panel.native.js.map +1 -0
  250. package/dist/jsx/chrome/notifications-utils.mjs +17 -0
  251. package/dist/jsx/chrome/notifications-utils.mjs.map +1 -0
  252. package/dist/jsx/chrome/notifications-utils.native.js +46 -0
  253. package/dist/jsx/chrome/notifications-utils.native.js.map +1 -0
  254. package/dist/jsx/chrome/shortcuts.mjs +33 -0
  255. package/dist/jsx/chrome/shortcuts.mjs.map +1 -0
  256. package/dist/jsx/chrome/shortcuts.native.js +72 -0
  257. package/dist/jsx/chrome/shortcuts.native.js.map +1 -0
  258. package/dist/jsx/chrome/user-session.mjs +73 -0
  259. package/dist/jsx/chrome/user-session.mjs.map +1 -0
  260. package/dist/jsx/chrome/user-session.native.js +120 -0
  261. package/dist/jsx/chrome/user-session.native.js.map +1 -0
  262. package/dist/jsx/config/BackofficeProvider.mjs +132 -0
  263. package/dist/jsx/config/BackofficeProvider.mjs.map +1 -0
  264. package/dist/jsx/config/BackofficeProvider.native.js +217 -0
  265. package/dist/jsx/config/BackofficeProvider.native.js.map +1 -0
  266. package/dist/jsx/config/capabilities.mjs +97 -0
  267. package/dist/jsx/config/capabilities.mjs.map +1 -0
  268. package/dist/jsx/config/capabilities.native.js +155 -0
  269. package/dist/jsx/config/capabilities.native.js.map +1 -0
  270. package/dist/jsx/config/events.mjs +2 -0
  271. package/dist/jsx/config/events.mjs.map +1 -0
  272. package/dist/jsx/config/events.native.js +21 -0
  273. package/dist/jsx/config/events.native.js.map +1 -0
  274. package/dist/jsx/config/slots.mjs +2 -0
  275. package/dist/jsx/config/slots.mjs.map +1 -0
  276. package/dist/jsx/config/slots.native.js +21 -0
  277. package/dist/jsx/config/slots.native.js.map +1 -0
  278. package/dist/jsx/i18n/en.mjs +76 -0
  279. package/dist/jsx/i18n/en.mjs.map +1 -0
  280. package/dist/jsx/i18n/en.native.js +104 -0
  281. package/dist/jsx/i18n/en.native.js.map +1 -0
  282. package/dist/jsx/i18n/index.mjs +40 -0
  283. package/dist/jsx/i18n/index.mjs.map +1 -0
  284. package/dist/jsx/i18n/index.native.js +102 -0
  285. package/dist/jsx/i18n/index.native.js.map +1 -0
  286. package/dist/jsx/index.js +26 -0
  287. package/dist/jsx/index.js.map +1 -0
  288. package/dist/jsx/index.mjs +26 -0
  289. package/dist/jsx/index.mjs.map +1 -0
  290. package/dist/jsx/index.native.js +112 -0
  291. package/dist/jsx/index.native.js.map +1 -0
  292. package/dist/jsx/navigation/navigator.mjs +115 -0
  293. package/dist/jsx/navigation/navigator.mjs.map +1 -0
  294. package/dist/jsx/navigation/navigator.native.js +307 -0
  295. package/dist/jsx/navigation/navigator.native.js.map +1 -0
  296. package/dist/jsx/navigation/paths.mjs +66 -0
  297. package/dist/jsx/navigation/paths.mjs.map +1 -0
  298. package/dist/jsx/navigation/paths.native.js +143 -0
  299. package/dist/jsx/navigation/paths.native.js.map +1 -0
  300. package/dist/jsx/oneAdapter/index.mjs +28 -0
  301. package/dist/jsx/oneAdapter/index.mjs.map +1 -0
  302. package/dist/jsx/oneAdapter/index.native.js +64 -0
  303. package/dist/jsx/oneAdapter/index.native.js.map +1 -0
  304. package/dist/jsx/shared/useFrappeApp.mjs +31 -0
  305. package/dist/jsx/shared/useFrappeApp.mjs.map +1 -0
  306. package/dist/jsx/shared/useFrappeApp.native.js +60 -0
  307. package/dist/jsx/shared/useFrappeApp.native.js.map +1 -0
  308. package/dist/jsx/shell/BackofficeShell.mjs +169 -0
  309. package/dist/jsx/shell/BackofficeShell.mjs.map +1 -0
  310. package/dist/jsx/shell/BackofficeShell.native.js +223 -0
  311. package/dist/jsx/shell/BackofficeShell.native.js.map +1 -0
  312. package/dist/jsx/shell/WorkspaceSidebar.mjs +89 -0
  313. package/dist/jsx/shell/WorkspaceSidebar.mjs.map +1 -0
  314. package/dist/jsx/shell/WorkspaceSidebar.native.js +143 -0
  315. package/dist/jsx/shell/WorkspaceSidebar.native.js.map +1 -0
  316. package/dist/jsx/shell/useWorkspaces.mjs +104 -0
  317. package/dist/jsx/shell/useWorkspaces.mjs.map +1 -0
  318. package/dist/jsx/shell/useWorkspaces.native.js +173 -0
  319. package/dist/jsx/shell/useWorkspaces.native.js.map +1 -0
  320. package/dist/jsx/shell/workspaceIcons.mjs +39 -0
  321. package/dist/jsx/shell/workspaceIcons.mjs.map +1 -0
  322. package/dist/jsx/shell/workspaceIcons.native.js +67 -0
  323. package/dist/jsx/shell/workspaceIcons.native.js.map +1 -0
  324. package/package.json +123 -0
  325. package/src/chrome/BackofficeAwesomebar.tsx +89 -0
  326. package/src/chrome/CommandPalette.spec.tsx +252 -0
  327. package/src/chrome/CommandPalette.tsx +520 -0
  328. package/src/chrome/HelpMenu.tsx +119 -0
  329. package/src/chrome/NotificationsButton.tsx +87 -0
  330. package/src/chrome/UserMenu.tsx +173 -0
  331. package/src/chrome/awesomebar-data.tsx +252 -0
  332. package/src/chrome/command-palette-model.ts +291 -0
  333. package/src/chrome/help-about-dialog.tsx +130 -0
  334. package/src/chrome/help-shortcuts-dialog.tsx +144 -0
  335. package/src/chrome/notifications-data.tsx +287 -0
  336. package/src/chrome/notifications-panel.tsx +175 -0
  337. package/src/chrome/notifications-utils.tsx +44 -0
  338. package/src/chrome/shortcuts.ts +53 -0
  339. package/src/chrome/user-session.tsx +116 -0
  340. package/src/config/BackofficeProvider.spec.tsx +126 -0
  341. package/src/config/BackofficeProvider.tsx +315 -0
  342. package/src/config/capabilities.ts +172 -0
  343. package/src/config/events.ts +19 -0
  344. package/src/config/slots.ts +28 -0
  345. package/src/i18n/en.ts +83 -0
  346. package/src/i18n/index.ts +69 -0
  347. package/src/index.ts +150 -0
  348. package/src/navigation/navigator.spec.ts +106 -0
  349. package/src/navigation/navigator.ts +209 -0
  350. package/src/navigation/paths.ts +146 -0
  351. package/src/oneAdapter/index.tsx +61 -0
  352. package/src/shared/useFrappeApp.ts +39 -0
  353. package/src/shell/BackofficeShell.tsx +222 -0
  354. package/src/shell/WorkspaceSidebar.tsx +119 -0
  355. package/src/shell/useWorkspaces.ts +202 -0
  356. package/src/shell/workspaceIcons.ts +76 -0
  357. package/types/chrome/BackofficeAwesomebar.d.ts +12 -0
  358. package/types/chrome/BackofficeAwesomebar.d.ts.map +1 -0
  359. package/types/chrome/CommandPalette.d.ts +6 -0
  360. package/types/chrome/CommandPalette.d.ts.map +1 -0
  361. package/types/chrome/HelpMenu.d.ts +2 -0
  362. package/types/chrome/HelpMenu.d.ts.map +1 -0
  363. package/types/chrome/NotificationsButton.d.ts +2 -0
  364. package/types/chrome/NotificationsButton.d.ts.map +1 -0
  365. package/types/chrome/UserMenu.d.ts +6 -0
  366. package/types/chrome/UserMenu.d.ts.map +1 -0
  367. package/types/chrome/awesomebar-data.d.ts +52 -0
  368. package/types/chrome/awesomebar-data.d.ts.map +1 -0
  369. package/types/chrome/command-palette-model.d.ts +47 -0
  370. package/types/chrome/command-palette-model.d.ts.map +1 -0
  371. package/types/chrome/help-about-dialog.d.ts +12 -0
  372. package/types/chrome/help-about-dialog.d.ts.map +1 -0
  373. package/types/chrome/help-shortcuts-dialog.d.ts +6 -0
  374. package/types/chrome/help-shortcuts-dialog.d.ts.map +1 -0
  375. package/types/chrome/notifications-data.d.ts +34 -0
  376. package/types/chrome/notifications-data.d.ts.map +1 -0
  377. package/types/chrome/notifications-panel.d.ts +11 -0
  378. package/types/chrome/notifications-panel.d.ts.map +1 -0
  379. package/types/chrome/notifications-utils.d.ts +21 -0
  380. package/types/chrome/notifications-utils.d.ts.map +1 -0
  381. package/types/chrome/shortcuts.d.ts +6 -0
  382. package/types/chrome/shortcuts.d.ts.map +1 -0
  383. package/types/chrome/user-session.d.ts +19 -0
  384. package/types/chrome/user-session.d.ts.map +1 -0
  385. package/types/config/BackofficeProvider.d.ts +128 -0
  386. package/types/config/BackofficeProvider.d.ts.map +1 -0
  387. package/types/config/capabilities.d.ts +109 -0
  388. package/types/config/capabilities.d.ts.map +1 -0
  389. package/types/config/events.d.ts +39 -0
  390. package/types/config/events.d.ts.map +1 -0
  391. package/types/config/slots.d.ts +32 -0
  392. package/types/config/slots.d.ts.map +1 -0
  393. package/types/i18n/en.d.ts +83 -0
  394. package/types/i18n/en.d.ts.map +1 -0
  395. package/types/i18n/index.d.ts +27 -0
  396. package/types/i18n/index.d.ts.map +1 -0
  397. package/types/index.d.ts +55 -0
  398. package/types/index.d.ts.map +1 -0
  399. package/types/navigation/navigator.d.ts +98 -0
  400. package/types/navigation/navigator.d.ts.map +1 -0
  401. package/types/navigation/paths.d.ts +60 -0
  402. package/types/navigation/paths.d.ts.map +1 -0
  403. package/types/oneAdapter/index.d.ts +8 -0
  404. package/types/oneAdapter/index.d.ts.map +1 -0
  405. package/types/shared/useFrappeApp.d.ts +10 -0
  406. package/types/shared/useFrappeApp.d.ts.map +1 -0
  407. package/types/shell/BackofficeShell.d.ts +10 -0
  408. package/types/shell/BackofficeShell.d.ts.map +1 -0
  409. package/types/shell/WorkspaceSidebar.d.ts +9 -0
  410. package/types/shell/WorkspaceSidebar.d.ts.map +1 -0
  411. package/types/shell/useWorkspaces.d.ts +43 -0
  412. package/types/shell/useWorkspaces.d.ts.map +1 -0
  413. package/types/shell/workspaceIcons.d.ts +9 -0
  414. package/types/shell/workspaceIcons.d.ts.map +1 -0
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Live Workspace data for the backoffice shell.
3
+ *
4
+ * Reads the "Workspace" doctype through the live client (realtime updates,
5
+ * fixture support) and derives the desk sidebar structure: the session
6
+ * user's private workspaces on top, then public workspaces ordered by
7
+ * sequence_id and nested via parent_page.
8
+ *
9
+ * Connection comes exclusively from the ambient FrappeProvider (mounted by
10
+ * BackofficeProvider) — without one the hook settles on an empty, non-loading
11
+ * result so isolated mounts stay deterministic.
12
+ */
13
+ import {
14
+ HttpClient,
15
+ useFrappeCollection,
16
+ useLiveQuery,
17
+ type AuthConfig,
18
+ type FixtureProvider,
19
+ } from "@multiplatform.one/frappe";
20
+ import { useFrappeConfig, type FrappeConfig } from "@multiplatform.one/frappe-ui";
21
+ import { useEffect, useMemo, useState } from "react";
22
+
23
+ export interface WorkspaceDoc {
24
+ name: string;
25
+ doctype: string;
26
+ title?: string;
27
+ icon?: string;
28
+ parent_page?: string;
29
+ public?: 0 | 1;
30
+ for_user?: string;
31
+ sequence_id?: number;
32
+ module?: string;
33
+ is_hidden?: 0 | 1;
34
+ }
35
+
36
+ const WORKSPACE_FIELDS = [
37
+ "name",
38
+ "title",
39
+ "icon",
40
+ "parent_page",
41
+ "public",
42
+ "for_user",
43
+ "sequence_id",
44
+ "module",
45
+ "is_hidden",
46
+ ] as const;
47
+
48
+ // ---------------------------------------------------------------------------
49
+ // Session user (module cache — one fetch per session)
50
+ // ---------------------------------------------------------------------------
51
+
52
+ const sessionUserCache = new Map<string, Promise<string | undefined>>();
53
+
54
+ async function fetchSessionUser(
55
+ baseURL: string,
56
+ auth?: FrappeConfig["auth"],
57
+ ): Promise<string | undefined> {
58
+ const client = new HttpClient(baseURL, auth as AuthConfig | undefined);
59
+ const res = await client.get<{ message?: string }>("/api/method/frappe.auth.get_logged_user");
60
+ const user = res.payload?.message;
61
+ return user && user !== "Guest" ? user : undefined;
62
+ }
63
+
64
+ /**
65
+ * The frappe session user ("Administrator", …), or undefined while loading,
66
+ * for Guest sessions, in fixture mode, without a provider, or when the
67
+ * endpoint is unreachable.
68
+ */
69
+ export function useSessionUser(): string | undefined {
70
+ const config = useFrappeConfig();
71
+ const baseURL = config?.baseURL;
72
+ const auth = config?.auth;
73
+ const fixtures = config?.fixtures;
74
+ const [user, setUser] = useState<string | undefined>(undefined);
75
+
76
+ useEffect(() => {
77
+ // Fixture mode has no session endpoint; keep the private section off.
78
+ // No provider config → no bench to ask.
79
+ if (fixtures || !baseURL) return;
80
+ let cancelled = false;
81
+ let promise = sessionUserCache.get(baseURL);
82
+ if (!promise) {
83
+ promise = fetchSessionUser(baseURL, auth).catch(() => {
84
+ sessionUserCache.delete(baseURL);
85
+ return undefined;
86
+ });
87
+ sessionUserCache.set(baseURL, promise);
88
+ }
89
+ promise.then((value) => {
90
+ if (!cancelled) setUser(value);
91
+ });
92
+ return () => {
93
+ cancelled = true;
94
+ };
95
+ // `auth` is session-stable; the cache is keyed by baseURL.
96
+ // oxlint-disable-next-line exhaustive-deps
97
+ }, [baseURL, fixtures]);
98
+
99
+ return user;
100
+ }
101
+
102
+ // ---------------------------------------------------------------------------
103
+ // Workspaces
104
+ // ---------------------------------------------------------------------------
105
+
106
+ export interface WorkspacesResult {
107
+ /** All visible workspaces, sorted by sequence_id. */
108
+ workspaces: WorkspaceDoc[];
109
+ /** Session user's private workspaces (desk shows these on top). */
110
+ privateWorkspaces: WorkspaceDoc[];
111
+ /** Public root workspaces (no parent_page), ordered by sequence_id. */
112
+ publicRoots: WorkspaceDoc[];
113
+ /** Children of a public workspace, keyed by parent name. */
114
+ childrenByParent: Map<string, WorkspaceDoc[]>;
115
+ /** True until the first snapshot arrives (always true server-side). */
116
+ isLoading: boolean;
117
+ /** Session user, once known (never set in fixture mode). */
118
+ sessionUser?: string;
119
+ }
120
+
121
+ function bySequence(a: WorkspaceDoc, b: WorkspaceDoc): number {
122
+ const seqA = Number(a.sequence_id ?? 0);
123
+ const seqB = Number(b.sequence_id ?? 0);
124
+ if (seqA !== seqB) return seqA - seqB;
125
+ return (a.title || a.name).localeCompare(b.title || b.name);
126
+ }
127
+
128
+ export function useWorkspaces(): WorkspacesResult {
129
+ const config = useFrappeConfig();
130
+ const sessionUser = useSessionUser();
131
+
132
+ // Stable connection config: a fresh object identity per render would
133
+ // re-run the collection hook's internal effects (DeskSidebar precedent).
134
+ const connectionConfig = useMemo(
135
+ () =>
136
+ config
137
+ ? {
138
+ baseURL: config.baseURL,
139
+ socketPort: config.socketPort,
140
+ auth: config.auth,
141
+ syncOptions: config.syncOptions,
142
+ socketOptions: config.socketOptions,
143
+ fixtures: config.fixtures as FixtureProvider | undefined,
144
+ }
145
+ : undefined,
146
+ [config],
147
+ );
148
+
149
+ const collection = useFrappeCollection<WorkspaceDoc>(connectionConfig, "Workspace", {
150
+ fields: WORKSPACE_FIELDS as unknown as (keyof WorkspaceDoc & string)[],
151
+ });
152
+ const { data: rawData, isLoading } = useLiveQuery(
153
+ (q) => (collection ? q.from({ _workspace: collection }) : null),
154
+ [collection],
155
+ );
156
+
157
+ return useMemo<WorkspacesResult>(() => {
158
+ const all = ((rawData as WorkspaceDoc[] | undefined) ?? [])
159
+ .filter((w) => w.name && !w.is_hidden)
160
+ .sort(bySequence);
161
+
162
+ const privateWorkspaces = sessionUser
163
+ ? all.filter((w) => !w.public && w.for_user === sessionUser)
164
+ : [];
165
+
166
+ const publicWorkspaces = all.filter((w) => Boolean(w.public));
167
+ const publicNames = new Set(publicWorkspaces.map((w) => w.name));
168
+ const publicRoots: WorkspaceDoc[] = [];
169
+ const childrenByParent = new Map<string, WorkspaceDoc[]>();
170
+ for (const workspace of publicWorkspaces) {
171
+ // Treat a dangling parent_page as a root so the workspace never vanishes.
172
+ if (workspace.parent_page && publicNames.has(workspace.parent_page)) {
173
+ const siblings = childrenByParent.get(workspace.parent_page) ?? [];
174
+ siblings.push(workspace);
175
+ childrenByParent.set(workspace.parent_page, siblings);
176
+ } else {
177
+ publicRoots.push(workspace);
178
+ }
179
+ }
180
+
181
+ return {
182
+ workspaces: all,
183
+ privateWorkspaces,
184
+ publicRoots,
185
+ childrenByParent,
186
+ // No provider config → settle empty instead of skeleting forever.
187
+ isLoading: connectionConfig ? Boolean(isLoading) || collection === undefined : false,
188
+ sessionUser,
189
+ };
190
+ }, [rawData, isLoading, collection, connectionConfig, sessionUser]);
191
+ }
192
+
193
+ /**
194
+ * The workspace the backoffice home should land on — desk parity: the
195
+ * user's first private workspace, else the first public workspace by
196
+ * sequence order.
197
+ */
198
+ export function useDefaultWorkspace(): { workspace?: string; isLoading: boolean } {
199
+ const { privateWorkspaces, publicRoots, isLoading } = useWorkspaces();
200
+ const workspace = privateWorkspaces[0]?.name ?? publicRoots[0]?.name;
201
+ return { workspace, isLoading };
202
+ }
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Best-effort map from frappe desk icon names (Workspace.icon holds symbols
3
+ * from frappe's timeless icon sprite) to @phosphor-icons/react equivalents.
4
+ * Unknown names fall back to a generic workspace glyph.
5
+ */
6
+ import {
7
+ BuildingsIcon,
8
+ CalculatorIcon,
9
+ CalendarIcon,
10
+ ChatCircleIcon,
11
+ CoinsIcon,
12
+ EnvelopeIcon,
13
+ FactoryIcon,
14
+ FileIcon,
15
+ FirstAidKitIcon,
16
+ GaugeIcon,
17
+ GearIcon,
18
+ GlobeIcon,
19
+ GraduationCapIcon,
20
+ HandshakeIcon,
21
+ HeartIcon,
22
+ IdentificationCardIcon,
23
+ ImageIcon,
24
+ KanbanIcon,
25
+ LifebuoyIcon,
26
+ PackageIcon,
27
+ PlantIcon,
28
+ PlugsConnectedIcon,
29
+ RocketLaunchIcon,
30
+ SealCheckIcon,
31
+ ShoppingCartIcon,
32
+ SquaresFourIcon,
33
+ StorefrontIcon,
34
+ UsersIcon,
35
+ WrenchIcon,
36
+ type Icon,
37
+ } from "@phosphor-icons/react";
38
+
39
+ const FRAPPE_ICON_MAP: Record<string, Icon> = {
40
+ accounting: CalculatorIcon,
41
+ agriculture: PlantIcon,
42
+ assets: BuildingsIcon,
43
+ buying: ShoppingCartIcon,
44
+ calendar: CalendarIcon,
45
+ chat: ChatCircleIcon,
46
+ crm: HandshakeIcon,
47
+ dashboard: GaugeIcon,
48
+ education: GraduationCapIcon,
49
+ email: EnvelopeIcon,
50
+ file: FileIcon,
51
+ "getting-started": RocketLaunchIcon,
52
+ healthcare: FirstAidKitIcon,
53
+ hr: IdentificationCardIcon,
54
+ "image-view": ImageIcon,
55
+ integration: PlugsConnectedIcon,
56
+ manufacturing: FactoryIcon,
57
+ "money-coins-1": CoinsIcon,
58
+ "non-profit": HeartIcon,
59
+ organization: BuildingsIcon,
60
+ project: KanbanIcon,
61
+ quality: SealCheckIcon,
62
+ retail: StorefrontIcon,
63
+ selling: StorefrontIcon,
64
+ setting: GearIcon,
65
+ settings: GearIcon,
66
+ stock: PackageIcon,
67
+ support: LifebuoyIcon,
68
+ tool: WrenchIcon,
69
+ users: UsersIcon,
70
+ website: GlobeIcon,
71
+ };
72
+
73
+ /** Resolve a frappe workspace icon name to a phosphor icon component. */
74
+ export function workspaceIcon(name?: string): Icon {
75
+ return (name && FRAPPE_ICON_MAP[name]) || SquaresFourIcon;
76
+ }
@@ -0,0 +1,12 @@
1
+ import type { Ref } from "react";
2
+ /** Imperative surface for the shell's global shortcuts (Mod+K / Mod+G). */
3
+ export interface BackofficeAwesomebarHandle {
4
+ /** Open the command palette (focus lands in its search input on web). */
5
+ focus: () => void;
6
+ }
7
+ export interface BackofficeAwesomebarProps {
8
+ /** Populated for the shell so useBackofficeShortcuts can open the palette. */
9
+ focusRef?: Ref<BackofficeAwesomebarHandle>;
10
+ }
11
+ export declare function BackofficeAwesomebar({ focusRef }?: BackofficeAwesomebarProps): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=BackofficeAwesomebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackofficeAwesomebar.d.ts","sourceRoot":"","sources":["../../src/chrome/BackofficeAwesomebar.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAMjC,2EAA2E;AAC3E,MAAM,WAAW,0BAA0B;IACzC,yEAAyE;IACzE,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,GAAG,CAAC,0BAA0B,CAAC,CAAC;CAC5C;AAaD,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,GAAE,yBAA8B,2CA8ChF"}
@@ -0,0 +1,6 @@
1
+ export interface CommandPaletteProps {
2
+ open: boolean;
3
+ onOpenChange: (open: boolean) => void;
4
+ }
5
+ export declare function CommandPalette({ open, onOpenChange }: CommandPaletteProps): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=CommandPalette.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandPalette.d.ts","sourceRoot":"","sources":["../../src/chrome/CommandPalette.tsx"],"names":[],"mappings":"AAwDA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAED,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,mBAAmB,2CAyPzE"}
@@ -0,0 +1,2 @@
1
+ export declare function HelpMenu(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=HelpMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HelpMenu.d.ts","sourceRoot":"","sources":["../../src/chrome/HelpMenu.tsx"],"names":[],"mappings":"AAiDA,wBAAgB,QAAQ,4CAqEvB"}
@@ -0,0 +1,2 @@
1
+ export declare function NotificationsButton(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=NotificationsButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationsButton.d.ts","sourceRoot":"","sources":["../../src/chrome/NotificationsButton.tsx"],"names":[],"mappings":"AAoBA,wBAAgB,mBAAmB,4CAkElC"}
@@ -0,0 +1,6 @@
1
+ export interface UserMenuProps {
2
+ /** Open the menu on mount (stories/tests only). */
3
+ defaultOpen?: boolean;
4
+ }
5
+ export declare function UserMenu({ defaultOpen }?: UserMenuProps): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=UserMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserMenu.d.ts","sourceRoot":"","sources":["../../src/chrome/UserMenu.tsx"],"names":[],"mappings":"AA0BA,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,QAAQ,CAAC,EAAE,WAAW,EAAE,GAAE,aAAkB,2CA6I3D"}
@@ -0,0 +1,52 @@
1
+ export interface AwesomebarWorkspace {
2
+ name: string;
3
+ title: string;
4
+ }
5
+ export interface AwesomebarCatalog {
6
+ doctypes: string[];
7
+ workspaces: AwesomebarWorkspace[];
8
+ }
9
+ export interface AwesomebarCatalogState {
10
+ catalog?: AwesomebarCatalog;
11
+ /** Catalog fetch failed (e.g. Guest 403 on the DocType list). */
12
+ error: boolean;
13
+ }
14
+ /**
15
+ * DocType + Workspace name catalog from the ambient FrappeProvider (fixtures
16
+ * honored in stories/tests), fetched once per session. SSR-safe: the fetch
17
+ * runs in an effect. Without a provider the catalog stays empty.
18
+ */
19
+ export declare function useAwesomebarCatalog(): AwesomebarCatalogState;
20
+ /** Row shape returned by frappe.utils.global_search.search. */
21
+ export interface GlobalSearchHit {
22
+ doctype: string;
23
+ name: string;
24
+ content: string;
25
+ }
26
+ export interface GlobalSearchState {
27
+ hits: GlobalSearchHit[];
28
+ searching: boolean;
29
+ }
30
+ /**
31
+ * Document hits from the desk full-text index for an (already debounced)
32
+ * query. Empty query clears without fetching. Failures degrade to no hits —
33
+ * the nav-command and workspace sections still render.
34
+ */
35
+ export declare function useGlobalSearch(query: string, limit?: number): GlobalSearchState;
36
+ /**
37
+ * Global-search `content` is "Label: value ||| Label2: value2" — flatten the
38
+ * separators to a middot snippet and cap the length for one-line display.
39
+ */
40
+ export declare function toContentSnippet(content: string, maxLength?: number): string;
41
+ export interface RecentItem {
42
+ label: string;
43
+ path: string;
44
+ }
45
+ /** Newest-first recent documents from the shared desk store. */
46
+ export declare function readRecentItems(): Promise<RecentItem[]>;
47
+ /**
48
+ * Case-insensitive substring match over names: prefix matches rank first,
49
+ * shorter names break ties (best-match-first, desk-style).
50
+ */
51
+ export declare function rankNameMatches(query: string, names: readonly string[], limit: number): string[];
52
+ //# sourceMappingURL=awesomebar-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"awesomebar-data.d.ts","sourceRoot":"","sources":["../../src/chrome/awesomebar-data.tsx"],"names":[],"mappings":"AAiBA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,mBAAmB,EAAE,CAAC;CACnC;AA0DD,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,iEAAiE;IACjE,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,sBAAsB,CA6B7D;AAMD,+DAA+D;AAC/D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,iBAAiB,CA4C5E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM,CAUzE;AAOD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAID,gEAAgE;AAChE,wBAAsB,eAAe,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAO7D;AAMD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAahG"}
@@ -0,0 +1,47 @@
1
+ import type { FC } from "react";
2
+ interface IconProps {
3
+ size?: number | string;
4
+ color?: string;
5
+ }
6
+ export type CommandPaletteSectionId = "recents" | "actions" | "navigation" | "documents";
7
+ export interface CommandPaletteItem {
8
+ id: string;
9
+ label: string;
10
+ /** Muted one-line detail under the label (document content snippet). */
11
+ description?: string;
12
+ /** Right-aligned type badge ("Workspace", "DocType", the hit's doctype). */
13
+ badge?: string;
14
+ icon: FC<IconProps>;
15
+ path: string;
16
+ }
17
+ export interface CommandPaletteSection {
18
+ id: CommandPaletteSectionId;
19
+ /** Translated section header. */
20
+ label: string;
21
+ items: CommandPaletteItem[];
22
+ }
23
+ export interface CommandPaletteModel {
24
+ /** Non-empty sections in fixed order (recents → actions → navigation → documents). */
25
+ sections: CommandPaletteSection[];
26
+ /** Section items flattened in render order — the roving-highlight index space. */
27
+ items: CommandPaletteItem[];
28
+ /** Global search in flight for the debounced query. */
29
+ searching: boolean;
30
+ /** The trimmed query the sections were built from. */
31
+ query: string;
32
+ /** Trimmed query is non-empty. */
33
+ hasQuery: boolean;
34
+ /** A settled non-empty query produced zero rows (honest empty state). */
35
+ noResults: boolean;
36
+ }
37
+ export interface UseCommandPaletteModelOptions {
38
+ /** Raw query (drives catalog-derived sections synchronously). */
39
+ query: string;
40
+ /** Debounced query (drives the global_search RPC). */
41
+ debouncedQuery: string;
42
+ /** Palette visibility — recents are re-read on every open. */
43
+ open: boolean;
44
+ }
45
+ export declare function useCommandPaletteModel({ query, debouncedQuery, open, }: UseCommandPaletteModelOptions): CommandPaletteModel;
46
+ export {};
47
+ //# sourceMappingURL=command-palette-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-palette-model.d.ts","sourceRoot":"","sources":["../../src/chrome/command-palette-model.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAsBhC,UAAU,SAAS;IACjB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,CAAC;AAEzF,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,uBAAuB,CAAC;IAC5B,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,kBAAkB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,sFAAsF;IACtF,QAAQ,EAAE,qBAAqB,EAAE,CAAC;IAClC,kFAAkF;IAClF,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,uDAAuD;IACvD,SAAS,EAAE,OAAO,CAAC;IACnB,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,yEAAyE;IACzE,SAAS,EAAE,OAAO,CAAC;CACpB;AAkCD,MAAM,WAAW,6BAA6B;IAC5C,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAC;IACvB,8DAA8D;IAC9D,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAgB,sBAAsB,CAAC,EACrC,KAAK,EACL,cAAc,EACd,IAAI,GACL,EAAE,6BAA6B,GAAG,mBAAmB,CAgKrD"}
@@ -0,0 +1,12 @@
1
+ export interface FrappeAppVersion {
2
+ title?: string;
3
+ description?: string;
4
+ branch?: string;
5
+ version?: string;
6
+ }
7
+ export interface HelpAboutDialogProps {
8
+ open: boolean;
9
+ onOpenChange: (open: boolean) => void;
10
+ }
11
+ export declare function HelpAboutDialog({ open, onOpenChange }: HelpAboutDialogProps): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=help-about-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-about-dialog.d.ts","sourceRoot":"","sources":["../../src/chrome/help-about-dialog.tsx"],"names":[],"mappings":"AAuBA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAED,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,oBAAoB,2CA0F3E"}
@@ -0,0 +1,6 @@
1
+ export interface HelpShortcutsDialogProps {
2
+ open: boolean;
3
+ onOpenChange: (open: boolean) => void;
4
+ }
5
+ export declare function HelpShortcutsDialog({ open, onOpenChange }: HelpShortcutsDialogProps): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=help-shortcuts-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-shortcuts-dialog.d.ts","sourceRoot":"","sources":["../../src/chrome/help-shortcuts-dialog.tsx"],"names":[],"mappings":"AAmBA,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAqED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,wBAAwB,2CAoDnF"}
@@ -0,0 +1,34 @@
1
+ export interface NotificationLogDoc {
2
+ name: string;
3
+ doctype: string;
4
+ subject?: string;
5
+ type?: string;
6
+ document_type?: string;
7
+ document_name?: string;
8
+ read?: 0 | 1;
9
+ from_user?: string;
10
+ creation?: string;
11
+ }
12
+ /** A Notification Log row prepared for display. */
13
+ export interface NotificationItem extends NotificationLogDoc {
14
+ /** Server `read` merged with local optimistic mark-as-read overrides. */
15
+ unread: boolean;
16
+ /** Subject with HTML stripped ("Jane mentioned you in a comment: …"). */
17
+ subjectText: string;
18
+ /** `creation` as epoch ms (undefined when unparseable). */
19
+ timestampMs?: number;
20
+ }
21
+ export interface UseNotificationsResult {
22
+ /** Prepared rows, newest first. */
23
+ items: NotificationItem[];
24
+ /** Unread rows within the window (badge value). */
25
+ unreadCount: number;
26
+ /** True until the session probe + first collection snapshot settle. */
27
+ isLoading: boolean;
28
+ /** Mark one notification read (optimistic; reverts if the RPC fails). */
29
+ markAsRead: (name: string) => Promise<void>;
30
+ /** Mark every unread notification read (optimistic; reverts on failure). */
31
+ markAllAsRead: () => Promise<void>;
32
+ }
33
+ export declare function useNotifications(): UseNotificationsResult;
34
+ //# sourceMappingURL=notifications-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications-data.d.ts","sourceRoot":"","sources":["../../src/chrome/notifications-data.tsx"],"names":[],"mappings":"AA8BA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,mDAAmD;AACnD,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,yEAAyE;IACzE,MAAM,EAAE,OAAO,CAAC;IAChB,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA6GD,MAAM,WAAW,sBAAsB;IACrC,mCAAmC;IACnC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,SAAS,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,4EAA4E;IAC5E,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED,wBAAgB,gBAAgB,IAAI,sBAAsB,CAkHzD"}
@@ -0,0 +1,11 @@
1
+ import type { NotificationItem } from "./notifications-data";
2
+ export interface NotificationsPanelProps {
3
+ items: readonly NotificationItem[];
4
+ isLoading: boolean;
5
+ /** Panel width — a fixed measure when floating, "100%" in sheet mode. */
6
+ width?: number | string;
7
+ onItemPress: (item: NotificationItem) => void;
8
+ onMarkAllRead: () => void;
9
+ }
10
+ export declare function NotificationsPanel({ items, isLoading, width, onItemPress, onMarkAllRead, }: NotificationsPanelProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=notifications-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications-panel.d.ts","sourceRoot":"","sources":["../../src/chrome/notifications-panel.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,WAAW,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC9C,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AA0ED,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,SAAS,EACT,KAAK,EACL,WAAW,EACX,aAAa,GACd,EAAE,uBAAuB,2CA8DzB"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Tiny pure helpers for the notifications panel. Notification Log subjects
3
+ * arrive as HTML fragments ('<b>Jane</b> mentioned you in <a>…</a>') and
4
+ * timestamps in frappe's "YYYY-MM-DD HH:mm:ss.ffffff" register.
5
+ */
6
+ /**
7
+ * Strip HTML tags from a Notification Log subject and return readable text.
8
+ * Closing block tags / <br> become spaces so "<div>a</div><div>b</div>"
9
+ * reads "a b"; basic entities are decoded (&amp; last so "&amp;lt;" stays
10
+ * literal "&lt;"); whitespace collapses to single spaces.
11
+ */
12
+ export declare function stripHtmlToText(html: string | null | undefined): string;
13
+ /**
14
+ * Parse a frappe timestamp ("2026-08-12 09:34:09.025850") to epoch ms.
15
+ * The space separator and microsecond precision trip Safari/JSC, so
16
+ * normalize to ISO-ish ("T" separator, milliseconds) before Date parsing.
17
+ * Frappe emits server-local wall time with no zone; parsing as local time
18
+ * matches how desk renders it. Unparseable input → undefined.
19
+ */
20
+ export declare function parseFrappeTimestamp(value: string | null | undefined): number | undefined;
21
+ //# sourceMappingURL=notifications-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications-utils.d.ts","sourceRoot":"","sources":["../../src/chrome/notifications-utils.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAYvE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAUzF"}
@@ -0,0 +1,6 @@
1
+ export interface BackofficeShortcutHandlers {
2
+ /** Focus the awesomebar / global search (Mod+K, Mod+G). */
3
+ onFocusSearch?: () => void;
4
+ }
5
+ export declare function useBackofficeShortcuts(handlers: BackofficeShortcutHandlers): void;
6
+ //# sourceMappingURL=shortcuts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shortcuts.d.ts","sourceRoot":"","sources":["../../src/chrome/shortcuts.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,0BAA0B;IACzC,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;CAC5B;AASD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,0BAA0B,GAAG,IAAI,CAuBjF"}
@@ -0,0 +1,19 @@
1
+ export interface SessionUserInfo {
2
+ /** Session user docname (e.g. "Administrator" or an email login). */
3
+ user: string;
4
+ fullName: string;
5
+ email?: string;
6
+ /** Absolute avatar URL (User.user_image resolved against the bench). */
7
+ imageUrl?: string;
8
+ }
9
+ /** Logout hygiene: drops every cached session-user fetch in this module. */
10
+ export declare function clearSessionUserCache(): void;
11
+ /** Resolve a User.user_image value (usually "/files/…") to an absolute URL. */
12
+ export declare function resolveUserImageUrl(userImage: string | null | undefined, baseURL: string): string | undefined;
13
+ /** Module-cached session-user info from the ambient Frappe connection. */
14
+ export declare function useSessionUserInfo(): {
15
+ info?: SessionUserInfo;
16
+ loading: boolean;
17
+ error?: Error;
18
+ };
19
+ //# sourceMappingURL=user-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-session.d.ts","sourceRoot":"","sources":["../../src/chrome/user-session.tsx"],"names":[],"mappings":"AAaA,MAAM,WAAW,eAAe;IAC9B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAaD,4EAA4E;AAC5E,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACpC,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,SAAS,CAKpB;AAqBD,0EAA0E;AAC1E,wBAAgB,kBAAkB,IAAI;IACpC,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CA0CA"}