@multiplatform.one/frappe-ui 7.4.1 → 7.6.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 (722) hide show
  1. package/dist/cjs/FileBrowser/AttachLibrary.cjs +111 -0
  2. package/dist/cjs/FileBrowser/AttachLibrary.native.js +115 -0
  3. package/dist/cjs/FileBrowser/AttachLibrary.native.js.map +1 -0
  4. package/dist/cjs/FileBrowser/folderTree.cjs +84 -0
  5. package/dist/cjs/FileBrowser/folderTree.native.js +94 -0
  6. package/dist/cjs/FileBrowser/folderTree.native.js.map +1 -0
  7. package/dist/cjs/FileBrowser/index.cjs +690 -0
  8. package/dist/cjs/FileBrowser/index.native.js +781 -0
  9. package/dist/cjs/FileBrowser/index.native.js.map +1 -0
  10. package/dist/cjs/FileBrowser/types.cjs +18 -0
  11. package/dist/cjs/FileBrowser/types.native.js +21 -0
  12. package/dist/cjs/FileBrowser/types.native.js.map +1 -0
  13. package/dist/cjs/FileBrowser/viewPersistence.cjs +55 -0
  14. package/dist/cjs/FileBrowser/viewPersistence.native.js +60 -0
  15. package/dist/cjs/FileBrowser/viewPersistence.native.js.map +1 -0
  16. package/dist/cjs/FormSidebar.cjs +47 -47
  17. package/dist/cjs/FormSidebar.native.js +48 -50
  18. package/dist/cjs/FormSidebar.native.js.map +1 -1
  19. package/dist/cjs/FrappeAssignment.cjs +18 -13
  20. package/dist/cjs/FrappeAssignment.native.js +19 -13
  21. package/dist/cjs/FrappeAssignment.native.js.map +1 -1
  22. package/dist/cjs/FrappeCalendar.cjs +11 -10
  23. package/dist/cjs/FrappeCalendar.native.js +11 -10
  24. package/dist/cjs/FrappeCalendar.native.js.map +1 -1
  25. package/dist/cjs/FrappeChartCard.cjs +6 -15
  26. package/dist/cjs/FrappeChartCard.native.js +6 -15
  27. package/dist/cjs/FrappeChartCard.native.js.map +1 -1
  28. package/dist/cjs/FrappeDashboard.cjs +12 -9
  29. package/dist/cjs/FrappeDashboard.native.js +12 -9
  30. package/dist/cjs/FrappeDashboard.native.js.map +1 -1
  31. package/dist/cjs/FrappeForm.cjs +36 -25
  32. package/dist/cjs/FrappeForm.native.js +36 -25
  33. package/dist/cjs/FrappeForm.native.js.map +1 -1
  34. package/dist/cjs/FrappeGantt.cjs +7 -5
  35. package/dist/cjs/FrappeGantt.native.js +7 -5
  36. package/dist/cjs/FrappeGantt.native.js.map +1 -1
  37. package/dist/cjs/FrappeImageView.cjs +22 -22
  38. package/dist/cjs/FrappeImageView.native.js +24 -22
  39. package/dist/cjs/FrappeImageView.native.js.map +1 -1
  40. package/dist/cjs/FrappeKPICard.cjs +7 -29
  41. package/dist/cjs/FrappeKPICard.native.js +7 -29
  42. package/dist/cjs/FrappeKPICard.native.js.map +1 -1
  43. package/dist/cjs/FrappeKanban.cjs +11 -13
  44. package/dist/cjs/FrappeKanban.native.js +11 -13
  45. package/dist/cjs/FrappeKanban.native.js.map +1 -1
  46. package/dist/cjs/FrappeLikedBy.cjs +5 -5
  47. package/dist/cjs/FrappeLikedBy.native.js +6 -6
  48. package/dist/cjs/FrappeLikedBy.native.js.map +1 -1
  49. package/dist/cjs/FrappeListView.cjs +32 -33
  50. package/dist/cjs/FrappeListView.native.js +37 -39
  51. package/dist/cjs/FrappeListView.native.js.map +1 -1
  52. package/dist/cjs/FrappeReportBuilder.cjs +30 -46
  53. package/dist/cjs/FrappeReportBuilder.native.js +30 -42
  54. package/dist/cjs/FrappeReportBuilder.native.js.map +1 -1
  55. package/dist/cjs/FrappeReportView.cjs +5 -5
  56. package/dist/cjs/FrappeReportView.native.js +5 -5
  57. package/dist/cjs/FrappeReportView.native.js.map +1 -1
  58. package/dist/cjs/FrappeTreeView.cjs +9 -6
  59. package/dist/cjs/FrappeTreeView.native.js +10 -6
  60. package/dist/cjs/FrappeTreeView.native.js.map +1 -1
  61. package/dist/cjs/desk/DeskFormPage.cjs +3 -3
  62. package/dist/cjs/desk/DeskFormPage.native.js +3 -3
  63. package/dist/cjs/desk/DeskFormPage.native.js.map +1 -1
  64. package/dist/cjs/desk/DeskListPage.cjs +2 -2
  65. package/dist/cjs/desk/DeskListPage.native.js +2 -2
  66. package/dist/cjs/desk/DeskListPage.native.js.map +1 -1
  67. package/dist/cjs/desk/DeskShell.cjs +58 -38
  68. package/dist/cjs/desk/DeskShell.native.js +63 -44
  69. package/dist/cjs/desk/DeskShell.native.js.map +1 -1
  70. package/dist/cjs/desk/awesomebar.cjs +28 -16
  71. package/dist/cjs/desk/awesomebar.native.js +28 -16
  72. package/dist/cjs/desk/awesomebar.native.js.map +1 -1
  73. package/dist/cjs/fieldRegistry.cjs +64 -3
  74. package/dist/cjs/fieldRegistry.native.js +69 -3
  75. package/dist/cjs/fieldRegistry.native.js.map +1 -1
  76. package/dist/cjs/fields/Check/index.cjs +1 -1
  77. package/dist/cjs/fields/Check/index.native.js +1 -1
  78. package/dist/cjs/fields/Check/index.native.js.map +1 -1
  79. package/dist/cjs/fields/Color/index.cjs +1 -1
  80. package/dist/cjs/fields/Color/index.native.js +1 -1
  81. package/dist/cjs/fields/Color/index.native.js.map +1 -1
  82. package/dist/cjs/fields/Data/index.native.js.map +1 -1
  83. package/dist/cjs/fields/Date/index.native.js +47 -34
  84. package/dist/cjs/fields/Date/index.native.js.map +1 -1
  85. package/dist/cjs/fields/Date/sheetKeyboard.cjs +54 -0
  86. package/dist/cjs/fields/Date/sheetKeyboard.native.js +57 -0
  87. package/dist/cjs/fields/Date/sheetKeyboard.native.js.map +1 -0
  88. package/dist/cjs/fields/DynamicLink.cjs +37 -128
  89. package/dist/cjs/fields/DynamicLink.native.js +40 -138
  90. package/dist/cjs/fields/DynamicLink.native.js.map +1 -1
  91. package/dist/cjs/fields/FileUpload.cjs +233 -50
  92. package/dist/cjs/fields/FileUpload.native.js +242 -51
  93. package/dist/cjs/fields/FileUpload.native.js.map +1 -1
  94. package/dist/cjs/fields/FileUploadField/index.cjs +53 -20
  95. package/dist/cjs/fields/FileUploadField/index.native.js +56 -20
  96. package/dist/cjs/fields/FileUploadField/index.native.js.map +1 -1
  97. package/dist/cjs/fields/HTML/index.cjs +30 -51
  98. package/dist/cjs/fields/HTML/index.native.js +30 -51
  99. package/dist/cjs/fields/HTML/index.native.js.map +1 -1
  100. package/dist/cjs/fields/Icon/index.cjs +73 -0
  101. package/dist/cjs/fields/Icon/index.native.js +76 -0
  102. package/dist/cjs/fields/Icon/index.native.js.map +1 -0
  103. package/dist/cjs/fields/Link.cjs +34 -8
  104. package/dist/cjs/fields/Link.native.js +35 -9
  105. package/dist/cjs/fields/Link.native.js.map +1 -1
  106. package/dist/cjs/fields/LinkTree.cjs +114 -0
  107. package/dist/cjs/fields/LinkTree.native.js +125 -0
  108. package/dist/cjs/fields/LinkTree.native.js.map +1 -0
  109. package/dist/cjs/fields/LongText/index.cjs +6 -4
  110. package/dist/cjs/fields/LongText/index.native.js +6 -4
  111. package/dist/cjs/fields/LongText/index.native.js.map +1 -1
  112. package/dist/cjs/fields/Numeric/index.native.js.map +1 -1
  113. package/dist/cjs/fields/Password/index.cjs +178 -16
  114. package/dist/cjs/fields/Password/index.native.js +186 -16
  115. package/dist/cjs/fields/Password/index.native.js.map +1 -1
  116. package/dist/cjs/fields/Phone/index.native.js.map +1 -1
  117. package/dist/cjs/fields/ReadOnly/index.cjs +34 -48
  118. package/dist/cjs/fields/ReadOnly/index.native.js +34 -46
  119. package/dist/cjs/fields/ReadOnly/index.native.js.map +1 -1
  120. package/dist/cjs/fields/Select/index.cjs +1 -1
  121. package/dist/cjs/fields/Select/index.native.js +1 -1
  122. package/dist/cjs/fields/Select/index.native.js.map +1 -1
  123. package/dist/cjs/fields/SmallText/index.cjs +4 -3
  124. package/dist/cjs/fields/SmallText/index.native.js +4 -3
  125. package/dist/cjs/fields/SmallText/index.native.js.map +1 -1
  126. package/dist/cjs/fields/TableMultiSelect.cjs +39 -150
  127. package/dist/cjs/fields/TableMultiSelect.native.js +44 -171
  128. package/dist/cjs/fields/TableMultiSelect.native.js.map +1 -1
  129. package/dist/cjs/fields/TextEditor/index.cjs +26 -293
  130. package/dist/cjs/index.cjs +9 -0
  131. package/dist/cjs/index.native.js +9 -0
  132. package/dist/cjs/index.native.js.map +1 -1
  133. package/dist/cjs/schemaForm/SchemaWizard.cjs +182 -0
  134. package/dist/cjs/schemaForm/SchemaWizard.native.js +232 -0
  135. package/dist/cjs/schemaForm/SchemaWizard.native.js.map +1 -0
  136. package/dist/cjs/schemaForm/index.cjs +1 -1
  137. package/dist/cjs/schemaForm/index.native.js +1 -1
  138. package/dist/cjs/schemaForm/index.native.js.map +1 -1
  139. package/dist/cjs/shared/useKeyboardInset.cjs +48 -0
  140. package/dist/cjs/shared/useKeyboardInset.native.js +53 -0
  141. package/dist/cjs/shared/useKeyboardInset.native.js.map +1 -0
  142. package/dist/esm/FileBrowser/AttachLibrary.mjs +86 -0
  143. package/dist/esm/FileBrowser/AttachLibrary.mjs.map +1 -0
  144. package/dist/esm/FileBrowser/AttachLibrary.native.js +87 -0
  145. package/dist/esm/FileBrowser/AttachLibrary.native.js.map +1 -0
  146. package/dist/esm/FileBrowser/folderTree.mjs +52 -0
  147. package/dist/esm/FileBrowser/folderTree.mjs.map +1 -0
  148. package/dist/esm/FileBrowser/folderTree.native.js +59 -0
  149. package/dist/esm/FileBrowser/folderTree.native.js.map +1 -0
  150. package/dist/esm/FileBrowser/index.mjs +665 -0
  151. package/dist/esm/FileBrowser/index.mjs.map +1 -0
  152. package/dist/esm/FileBrowser/index.native.js +753 -0
  153. package/dist/esm/FileBrowser/index.native.js.map +1 -0
  154. package/dist/esm/FileBrowser/types.mjs +2 -0
  155. package/dist/esm/FileBrowser/types.mjs.map +1 -0
  156. package/dist/esm/FileBrowser/types.native.js +2 -0
  157. package/dist/esm/FileBrowser/types.native.js.map +1 -0
  158. package/dist/esm/FileBrowser/viewPersistence.mjs +29 -0
  159. package/dist/esm/FileBrowser/viewPersistence.mjs.map +1 -0
  160. package/dist/esm/FileBrowser/viewPersistence.native.js +31 -0
  161. package/dist/esm/FileBrowser/viewPersistence.native.js.map +1 -0
  162. package/dist/esm/FormSidebar.mjs +46 -46
  163. package/dist/esm/FormSidebar.mjs.map +1 -1
  164. package/dist/esm/FormSidebar.native.js +47 -49
  165. package/dist/esm/FormSidebar.native.js.map +1 -1
  166. package/dist/esm/FrappeAssignment.mjs +19 -14
  167. package/dist/esm/FrappeAssignment.mjs.map +1 -1
  168. package/dist/esm/FrappeAssignment.native.js +20 -14
  169. package/dist/esm/FrappeAssignment.native.js.map +1 -1
  170. package/dist/esm/FrappeCalendar.mjs +12 -11
  171. package/dist/esm/FrappeCalendar.mjs.map +1 -1
  172. package/dist/esm/FrappeCalendar.native.js +12 -11
  173. package/dist/esm/FrappeCalendar.native.js.map +1 -1
  174. package/dist/esm/FrappeChartCard.mjs +7 -16
  175. package/dist/esm/FrappeChartCard.mjs.map +1 -1
  176. package/dist/esm/FrappeChartCard.native.js +7 -16
  177. package/dist/esm/FrappeChartCard.native.js.map +1 -1
  178. package/dist/esm/FrappeDashboard.mjs +12 -9
  179. package/dist/esm/FrappeDashboard.mjs.map +1 -1
  180. package/dist/esm/FrappeDashboard.native.js +12 -9
  181. package/dist/esm/FrappeDashboard.native.js.map +1 -1
  182. package/dist/esm/FrappeForm.mjs +35 -24
  183. package/dist/esm/FrappeForm.mjs.map +1 -1
  184. package/dist/esm/FrappeForm.native.js +35 -24
  185. package/dist/esm/FrappeForm.native.js.map +1 -1
  186. package/dist/esm/FrappeGantt.mjs +7 -5
  187. package/dist/esm/FrappeGantt.mjs.map +1 -1
  188. package/dist/esm/FrappeGantt.native.js +7 -5
  189. package/dist/esm/FrappeGantt.native.js.map +1 -1
  190. package/dist/esm/FrappeImageView.mjs +23 -23
  191. package/dist/esm/FrappeImageView.mjs.map +1 -1
  192. package/dist/esm/FrappeImageView.native.js +25 -23
  193. package/dist/esm/FrappeImageView.native.js.map +1 -1
  194. package/dist/esm/FrappeKPICard.mjs +7 -29
  195. package/dist/esm/FrappeKPICard.mjs.map +1 -1
  196. package/dist/esm/FrappeKPICard.native.js +7 -29
  197. package/dist/esm/FrappeKPICard.native.js.map +1 -1
  198. package/dist/esm/FrappeKanban.mjs +13 -15
  199. package/dist/esm/FrappeKanban.mjs.map +1 -1
  200. package/dist/esm/FrappeKanban.native.js +13 -15
  201. package/dist/esm/FrappeKanban.native.js.map +1 -1
  202. package/dist/esm/FrappeLikedBy.mjs +6 -6
  203. package/dist/esm/FrappeLikedBy.mjs.map +1 -1
  204. package/dist/esm/FrappeLikedBy.native.js +7 -7
  205. package/dist/esm/FrappeLikedBy.native.js.map +1 -1
  206. package/dist/esm/FrappeListView.mjs +33 -34
  207. package/dist/esm/FrappeListView.mjs.map +1 -1
  208. package/dist/esm/FrappeListView.native.js +38 -40
  209. package/dist/esm/FrappeListView.native.js.map +1 -1
  210. package/dist/esm/FrappeReportBuilder.mjs +27 -43
  211. package/dist/esm/FrappeReportBuilder.mjs.map +1 -1
  212. package/dist/esm/FrappeReportBuilder.native.js +27 -39
  213. package/dist/esm/FrappeReportBuilder.native.js.map +1 -1
  214. package/dist/esm/FrappeReportView.mjs +6 -6
  215. package/dist/esm/FrappeReportView.mjs.map +1 -1
  216. package/dist/esm/FrappeReportView.native.js +6 -6
  217. package/dist/esm/FrappeReportView.native.js.map +1 -1
  218. package/dist/esm/FrappeTreeView.mjs +9 -6
  219. package/dist/esm/FrappeTreeView.mjs.map +1 -1
  220. package/dist/esm/FrappeTreeView.native.js +10 -6
  221. package/dist/esm/FrappeTreeView.native.js.map +1 -1
  222. package/dist/esm/desk/DeskFormPage.mjs +3 -3
  223. package/dist/esm/desk/DeskFormPage.mjs.map +1 -1
  224. package/dist/esm/desk/DeskFormPage.native.js +3 -3
  225. package/dist/esm/desk/DeskFormPage.native.js.map +1 -1
  226. package/dist/esm/desk/DeskListPage.mjs +2 -2
  227. package/dist/esm/desk/DeskListPage.mjs.map +1 -1
  228. package/dist/esm/desk/DeskListPage.native.js +2 -2
  229. package/dist/esm/desk/DeskListPage.native.js.map +1 -1
  230. package/dist/esm/desk/DeskShell.mjs +48 -28
  231. package/dist/esm/desk/DeskShell.mjs.map +1 -1
  232. package/dist/esm/desk/DeskShell.native.js +52 -33
  233. package/dist/esm/desk/DeskShell.native.js.map +1 -1
  234. package/dist/esm/desk/awesomebar.mjs +29 -17
  235. package/dist/esm/desk/awesomebar.mjs.map +1 -1
  236. package/dist/esm/desk/awesomebar.native.js +29 -17
  237. package/dist/esm/desk/awesomebar.native.js.map +1 -1
  238. package/dist/esm/fieldRegistry.mjs +65 -4
  239. package/dist/esm/fieldRegistry.mjs.map +1 -1
  240. package/dist/esm/fieldRegistry.native.js +70 -4
  241. package/dist/esm/fieldRegistry.native.js.map +1 -1
  242. package/dist/esm/fields/Check/index.mjs +1 -1
  243. package/dist/esm/fields/Check/index.mjs.map +1 -1
  244. package/dist/esm/fields/Check/index.native.js +1 -1
  245. package/dist/esm/fields/Check/index.native.js.map +1 -1
  246. package/dist/esm/fields/Color/index.mjs +1 -1
  247. package/dist/esm/fields/Color/index.mjs.map +1 -1
  248. package/dist/esm/fields/Color/index.native.js +1 -1
  249. package/dist/esm/fields/Color/index.native.js.map +1 -1
  250. package/dist/esm/fields/Data/index.mjs.map +1 -1
  251. package/dist/esm/fields/Data/index.native.js.map +1 -1
  252. package/dist/esm/fields/Date/index.native.js +46 -33
  253. package/dist/esm/fields/Date/index.native.js.map +1 -1
  254. package/dist/esm/fields/Date/sheetKeyboard.mjs +21 -0
  255. package/dist/esm/fields/Date/sheetKeyboard.mjs.map +1 -0
  256. package/dist/esm/fields/Date/sheetKeyboard.native.js +21 -0
  257. package/dist/esm/fields/Date/sheetKeyboard.native.js.map +1 -0
  258. package/dist/esm/fields/DynamicLink.mjs +37 -128
  259. package/dist/esm/fields/DynamicLink.mjs.map +1 -1
  260. package/dist/esm/fields/DynamicLink.native.js +40 -138
  261. package/dist/esm/fields/DynamicLink.native.js.map +1 -1
  262. package/dist/esm/fields/FileUpload.mjs +234 -51
  263. package/dist/esm/fields/FileUpload.mjs.map +1 -1
  264. package/dist/esm/fields/FileUpload.native.js +243 -52
  265. package/dist/esm/fields/FileUpload.native.js.map +1 -1
  266. package/dist/esm/fields/FileUploadField/index.mjs +55 -22
  267. package/dist/esm/fields/FileUploadField/index.mjs.map +1 -1
  268. package/dist/esm/fields/FileUploadField/index.native.js +58 -22
  269. package/dist/esm/fields/FileUploadField/index.native.js.map +1 -1
  270. package/dist/esm/fields/HTML/index.mjs +33 -54
  271. package/dist/esm/fields/HTML/index.mjs.map +1 -1
  272. package/dist/esm/fields/HTML/index.native.js +33 -54
  273. package/dist/esm/fields/HTML/index.native.js.map +1 -1
  274. package/dist/esm/fields/Icon/index.mjs +48 -0
  275. package/dist/esm/fields/Icon/index.mjs.map +1 -0
  276. package/dist/esm/fields/Icon/index.native.js +48 -0
  277. package/dist/esm/fields/Icon/index.native.js.map +1 -0
  278. package/dist/esm/fields/Link.mjs +35 -9
  279. package/dist/esm/fields/Link.mjs.map +1 -1
  280. package/dist/esm/fields/Link.native.js +36 -10
  281. package/dist/esm/fields/Link.native.js.map +1 -1
  282. package/dist/esm/fields/LinkTree.mjs +89 -0
  283. package/dist/esm/fields/LinkTree.mjs.map +1 -0
  284. package/dist/esm/fields/LinkTree.native.js +97 -0
  285. package/dist/esm/fields/LinkTree.native.js.map +1 -0
  286. package/dist/esm/fields/LongText/index.mjs +7 -5
  287. package/dist/esm/fields/LongText/index.mjs.map +1 -1
  288. package/dist/esm/fields/LongText/index.native.js +7 -5
  289. package/dist/esm/fields/LongText/index.native.js.map +1 -1
  290. package/dist/esm/fields/Numeric/index.mjs.map +1 -1
  291. package/dist/esm/fields/Numeric/index.native.js.map +1 -1
  292. package/dist/esm/fields/Password/index.mjs +180 -18
  293. package/dist/esm/fields/Password/index.mjs.map +1 -1
  294. package/dist/esm/fields/Password/index.native.js +188 -18
  295. package/dist/esm/fields/Password/index.native.js.map +1 -1
  296. package/dist/esm/fields/Phone/index.mjs.map +1 -1
  297. package/dist/esm/fields/Phone/index.native.js.map +1 -1
  298. package/dist/esm/fields/ReadOnly/index.mjs +36 -50
  299. package/dist/esm/fields/ReadOnly/index.mjs.map +1 -1
  300. package/dist/esm/fields/ReadOnly/index.native.js +36 -48
  301. package/dist/esm/fields/ReadOnly/index.native.js.map +1 -1
  302. package/dist/esm/fields/Select/index.mjs +1 -1
  303. package/dist/esm/fields/Select/index.mjs.map +1 -1
  304. package/dist/esm/fields/Select/index.native.js +1 -1
  305. package/dist/esm/fields/Select/index.native.js.map +1 -1
  306. package/dist/esm/fields/SmallText/index.mjs +5 -4
  307. package/dist/esm/fields/SmallText/index.mjs.map +1 -1
  308. package/dist/esm/fields/SmallText/index.native.js +5 -4
  309. package/dist/esm/fields/SmallText/index.native.js.map +1 -1
  310. package/dist/esm/fields/TableMultiSelect.mjs +41 -152
  311. package/dist/esm/fields/TableMultiSelect.mjs.map +1 -1
  312. package/dist/esm/fields/TableMultiSelect.native.js +46 -173
  313. package/dist/esm/fields/TableMultiSelect.native.js.map +1 -1
  314. package/dist/esm/fields/TextEditor/index.mjs +28 -284
  315. package/dist/esm/fields/TextEditor/index.mjs.map +1 -1
  316. package/dist/esm/index.mjs +5 -1
  317. package/dist/esm/index.mjs.map +1 -1
  318. package/dist/esm/index.native.js +5 -1
  319. package/dist/esm/index.native.js.map +1 -1
  320. package/dist/esm/schemaForm/SchemaWizard.mjs +156 -0
  321. package/dist/esm/schemaForm/SchemaWizard.mjs.map +1 -0
  322. package/dist/esm/schemaForm/SchemaWizard.native.js +203 -0
  323. package/dist/esm/schemaForm/SchemaWizard.native.js.map +1 -0
  324. package/dist/esm/schemaForm/index.mjs +1 -1
  325. package/dist/esm/schemaForm/index.mjs.map +1 -1
  326. package/dist/esm/schemaForm/index.native.js +1 -1
  327. package/dist/esm/schemaForm/index.native.js.map +1 -1
  328. package/dist/esm/shared/useKeyboardInset.mjs +23 -0
  329. package/dist/esm/shared/useKeyboardInset.mjs.map +1 -0
  330. package/dist/esm/shared/useKeyboardInset.native.js +25 -0
  331. package/dist/esm/shared/useKeyboardInset.native.js.map +1 -0
  332. package/dist/jsx/FileBrowser/AttachLibrary.mjs +86 -0
  333. package/dist/jsx/FileBrowser/AttachLibrary.mjs.map +1 -0
  334. package/dist/jsx/FileBrowser/AttachLibrary.native.js +115 -0
  335. package/dist/jsx/FileBrowser/AttachLibrary.native.js.map +1 -0
  336. package/dist/jsx/FileBrowser/folderTree.mjs +52 -0
  337. package/dist/jsx/FileBrowser/folderTree.mjs.map +1 -0
  338. package/dist/jsx/FileBrowser/folderTree.native.js +94 -0
  339. package/dist/jsx/FileBrowser/folderTree.native.js.map +1 -0
  340. package/dist/jsx/FileBrowser/index.mjs +665 -0
  341. package/dist/jsx/FileBrowser/index.mjs.map +1 -0
  342. package/dist/jsx/FileBrowser/index.native.js +781 -0
  343. package/dist/jsx/FileBrowser/index.native.js.map +1 -0
  344. package/dist/jsx/FileBrowser/types.mjs +2 -0
  345. package/dist/jsx/FileBrowser/types.mjs.map +1 -0
  346. package/dist/jsx/FileBrowser/types.native.js +21 -0
  347. package/dist/jsx/FileBrowser/types.native.js.map +1 -0
  348. package/dist/jsx/FileBrowser/viewPersistence.mjs +29 -0
  349. package/dist/jsx/FileBrowser/viewPersistence.mjs.map +1 -0
  350. package/dist/jsx/FileBrowser/viewPersistence.native.js +60 -0
  351. package/dist/jsx/FileBrowser/viewPersistence.native.js.map +1 -0
  352. package/dist/jsx/FormSidebar.mjs +46 -46
  353. package/dist/jsx/FormSidebar.mjs.map +1 -1
  354. package/dist/jsx/FormSidebar.native.js +48 -50
  355. package/dist/jsx/FormSidebar.native.js.map +1 -1
  356. package/dist/jsx/FrappeAssignment.mjs +19 -14
  357. package/dist/jsx/FrappeAssignment.mjs.map +1 -1
  358. package/dist/jsx/FrappeAssignment.native.js +19 -13
  359. package/dist/jsx/FrappeAssignment.native.js.map +1 -1
  360. package/dist/jsx/FrappeCalendar.mjs +12 -11
  361. package/dist/jsx/FrappeCalendar.mjs.map +1 -1
  362. package/dist/jsx/FrappeCalendar.native.js +11 -10
  363. package/dist/jsx/FrappeCalendar.native.js.map +1 -1
  364. package/dist/jsx/FrappeChartCard.mjs +7 -16
  365. package/dist/jsx/FrappeChartCard.mjs.map +1 -1
  366. package/dist/jsx/FrappeChartCard.native.js +6 -15
  367. package/dist/jsx/FrappeChartCard.native.js.map +1 -1
  368. package/dist/jsx/FrappeDashboard.mjs +12 -9
  369. package/dist/jsx/FrappeDashboard.mjs.map +1 -1
  370. package/dist/jsx/FrappeDashboard.native.js +12 -9
  371. package/dist/jsx/FrappeDashboard.native.js.map +1 -1
  372. package/dist/jsx/FrappeForm.mjs +35 -24
  373. package/dist/jsx/FrappeForm.mjs.map +1 -1
  374. package/dist/jsx/FrappeForm.native.js +36 -25
  375. package/dist/jsx/FrappeForm.native.js.map +1 -1
  376. package/dist/jsx/FrappeGantt.mjs +7 -5
  377. package/dist/jsx/FrappeGantt.mjs.map +1 -1
  378. package/dist/jsx/FrappeGantt.native.js +7 -5
  379. package/dist/jsx/FrappeGantt.native.js.map +1 -1
  380. package/dist/jsx/FrappeImageView.mjs +23 -23
  381. package/dist/jsx/FrappeImageView.mjs.map +1 -1
  382. package/dist/jsx/FrappeImageView.native.js +24 -22
  383. package/dist/jsx/FrappeImageView.native.js.map +1 -1
  384. package/dist/jsx/FrappeKPICard.mjs +7 -29
  385. package/dist/jsx/FrappeKPICard.mjs.map +1 -1
  386. package/dist/jsx/FrappeKPICard.native.js +7 -29
  387. package/dist/jsx/FrappeKPICard.native.js.map +1 -1
  388. package/dist/jsx/FrappeKanban.mjs +13 -15
  389. package/dist/jsx/FrappeKanban.mjs.map +1 -1
  390. package/dist/jsx/FrappeKanban.native.js +11 -13
  391. package/dist/jsx/FrappeKanban.native.js.map +1 -1
  392. package/dist/jsx/FrappeLikedBy.mjs +6 -6
  393. package/dist/jsx/FrappeLikedBy.mjs.map +1 -1
  394. package/dist/jsx/FrappeLikedBy.native.js +6 -6
  395. package/dist/jsx/FrappeLikedBy.native.js.map +1 -1
  396. package/dist/jsx/FrappeListView.mjs +33 -34
  397. package/dist/jsx/FrappeListView.mjs.map +1 -1
  398. package/dist/jsx/FrappeListView.native.js +37 -39
  399. package/dist/jsx/FrappeListView.native.js.map +1 -1
  400. package/dist/jsx/FrappeReportBuilder.mjs +27 -43
  401. package/dist/jsx/FrappeReportBuilder.mjs.map +1 -1
  402. package/dist/jsx/FrappeReportBuilder.native.js +30 -42
  403. package/dist/jsx/FrappeReportBuilder.native.js.map +1 -1
  404. package/dist/jsx/FrappeReportView.mjs +6 -6
  405. package/dist/jsx/FrappeReportView.mjs.map +1 -1
  406. package/dist/jsx/FrappeReportView.native.js +5 -5
  407. package/dist/jsx/FrappeReportView.native.js.map +1 -1
  408. package/dist/jsx/FrappeTreeView.mjs +9 -6
  409. package/dist/jsx/FrappeTreeView.mjs.map +1 -1
  410. package/dist/jsx/FrappeTreeView.native.js +10 -6
  411. package/dist/jsx/FrappeTreeView.native.js.map +1 -1
  412. package/dist/jsx/desk/DeskFormPage.mjs +3 -3
  413. package/dist/jsx/desk/DeskFormPage.mjs.map +1 -1
  414. package/dist/jsx/desk/DeskFormPage.native.js +3 -3
  415. package/dist/jsx/desk/DeskFormPage.native.js.map +1 -1
  416. package/dist/jsx/desk/DeskListPage.mjs +2 -2
  417. package/dist/jsx/desk/DeskListPage.mjs.map +1 -1
  418. package/dist/jsx/desk/DeskListPage.native.js +2 -2
  419. package/dist/jsx/desk/DeskListPage.native.js.map +1 -1
  420. package/dist/jsx/desk/DeskShell.mjs +48 -28
  421. package/dist/jsx/desk/DeskShell.mjs.map +1 -1
  422. package/dist/jsx/desk/DeskShell.native.js +63 -44
  423. package/dist/jsx/desk/DeskShell.native.js.map +1 -1
  424. package/dist/jsx/desk/awesomebar.mjs +29 -17
  425. package/dist/jsx/desk/awesomebar.mjs.map +1 -1
  426. package/dist/jsx/desk/awesomebar.native.js +28 -16
  427. package/dist/jsx/desk/awesomebar.native.js.map +1 -1
  428. package/dist/jsx/fieldRegistry.mjs +65 -4
  429. package/dist/jsx/fieldRegistry.mjs.map +1 -1
  430. package/dist/jsx/fieldRegistry.native.js +69 -3
  431. package/dist/jsx/fieldRegistry.native.js.map +1 -1
  432. package/dist/jsx/fields/Check/index.mjs +1 -1
  433. package/dist/jsx/fields/Check/index.mjs.map +1 -1
  434. package/dist/jsx/fields/Check/index.native.js +1 -1
  435. package/dist/jsx/fields/Check/index.native.js.map +1 -1
  436. package/dist/jsx/fields/Color/index.mjs +1 -1
  437. package/dist/jsx/fields/Color/index.mjs.map +1 -1
  438. package/dist/jsx/fields/Color/index.native.js +1 -1
  439. package/dist/jsx/fields/Color/index.native.js.map +1 -1
  440. package/dist/jsx/fields/Data/index.mjs.map +1 -1
  441. package/dist/jsx/fields/Data/index.native.js.map +1 -1
  442. package/dist/jsx/fields/Date/index.native.js +47 -34
  443. package/dist/jsx/fields/Date/index.native.js.map +1 -1
  444. package/dist/jsx/fields/Date/sheetKeyboard.mjs +21 -0
  445. package/dist/jsx/fields/Date/sheetKeyboard.mjs.map +1 -0
  446. package/dist/jsx/fields/Date/sheetKeyboard.native.js +57 -0
  447. package/dist/jsx/fields/Date/sheetKeyboard.native.js.map +1 -0
  448. package/dist/jsx/fields/DynamicLink.mjs +37 -128
  449. package/dist/jsx/fields/DynamicLink.mjs.map +1 -1
  450. package/dist/jsx/fields/DynamicLink.native.js +40 -138
  451. package/dist/jsx/fields/DynamicLink.native.js.map +1 -1
  452. package/dist/jsx/fields/FileUpload.mjs +234 -51
  453. package/dist/jsx/fields/FileUpload.mjs.map +1 -1
  454. package/dist/jsx/fields/FileUpload.native.js +242 -51
  455. package/dist/jsx/fields/FileUpload.native.js.map +1 -1
  456. package/dist/jsx/fields/FileUploadField/index.mjs +55 -22
  457. package/dist/jsx/fields/FileUploadField/index.mjs.map +1 -1
  458. package/dist/jsx/fields/FileUploadField/index.native.js +56 -20
  459. package/dist/jsx/fields/FileUploadField/index.native.js.map +1 -1
  460. package/dist/jsx/fields/HTML/index.mjs +33 -54
  461. package/dist/jsx/fields/HTML/index.mjs.map +1 -1
  462. package/dist/jsx/fields/HTML/index.native.js +30 -51
  463. package/dist/jsx/fields/HTML/index.native.js.map +1 -1
  464. package/dist/jsx/fields/Icon/index.mjs +48 -0
  465. package/dist/jsx/fields/Icon/index.mjs.map +1 -0
  466. package/dist/jsx/fields/Icon/index.native.js +76 -0
  467. package/dist/jsx/fields/Icon/index.native.js.map +1 -0
  468. package/dist/jsx/fields/Link.mjs +35 -9
  469. package/dist/jsx/fields/Link.mjs.map +1 -1
  470. package/dist/jsx/fields/Link.native.js +35 -9
  471. package/dist/jsx/fields/Link.native.js.map +1 -1
  472. package/dist/jsx/fields/LinkTree.mjs +89 -0
  473. package/dist/jsx/fields/LinkTree.mjs.map +1 -0
  474. package/dist/jsx/fields/LinkTree.native.js +125 -0
  475. package/dist/jsx/fields/LinkTree.native.js.map +1 -0
  476. package/dist/jsx/fields/LongText/index.mjs +7 -5
  477. package/dist/jsx/fields/LongText/index.mjs.map +1 -1
  478. package/dist/jsx/fields/LongText/index.native.js +6 -4
  479. package/dist/jsx/fields/LongText/index.native.js.map +1 -1
  480. package/dist/jsx/fields/Numeric/index.mjs.map +1 -1
  481. package/dist/jsx/fields/Numeric/index.native.js.map +1 -1
  482. package/dist/jsx/fields/Password/index.mjs +180 -18
  483. package/dist/jsx/fields/Password/index.mjs.map +1 -1
  484. package/dist/jsx/fields/Password/index.native.js +186 -16
  485. package/dist/jsx/fields/Password/index.native.js.map +1 -1
  486. package/dist/jsx/fields/Phone/index.mjs.map +1 -1
  487. package/dist/jsx/fields/Phone/index.native.js.map +1 -1
  488. package/dist/jsx/fields/ReadOnly/index.mjs +36 -50
  489. package/dist/jsx/fields/ReadOnly/index.mjs.map +1 -1
  490. package/dist/jsx/fields/ReadOnly/index.native.js +34 -46
  491. package/dist/jsx/fields/ReadOnly/index.native.js.map +1 -1
  492. package/dist/jsx/fields/Select/index.mjs +1 -1
  493. package/dist/jsx/fields/Select/index.mjs.map +1 -1
  494. package/dist/jsx/fields/Select/index.native.js +1 -1
  495. package/dist/jsx/fields/Select/index.native.js.map +1 -1
  496. package/dist/jsx/fields/SmallText/index.mjs +5 -4
  497. package/dist/jsx/fields/SmallText/index.mjs.map +1 -1
  498. package/dist/jsx/fields/SmallText/index.native.js +4 -3
  499. package/dist/jsx/fields/SmallText/index.native.js.map +1 -1
  500. package/dist/jsx/fields/TableMultiSelect.mjs +41 -152
  501. package/dist/jsx/fields/TableMultiSelect.mjs.map +1 -1
  502. package/dist/jsx/fields/TableMultiSelect.native.js +44 -171
  503. package/dist/jsx/fields/TableMultiSelect.native.js.map +1 -1
  504. package/dist/jsx/fields/TextEditor/index.mjs +28 -284
  505. package/dist/jsx/fields/TextEditor/index.mjs.map +1 -1
  506. package/dist/jsx/index.js +5 -1
  507. package/dist/jsx/index.js.map +1 -1
  508. package/dist/jsx/index.mjs +5 -1
  509. package/dist/jsx/index.mjs.map +1 -1
  510. package/dist/jsx/index.native.js +9 -0
  511. package/dist/jsx/index.native.js.map +1 -1
  512. package/dist/jsx/schemaForm/SchemaWizard.mjs +156 -0
  513. package/dist/jsx/schemaForm/SchemaWizard.mjs.map +1 -0
  514. package/dist/jsx/schemaForm/SchemaWizard.native.js +232 -0
  515. package/dist/jsx/schemaForm/SchemaWizard.native.js.map +1 -0
  516. package/dist/jsx/schemaForm/index.mjs +1 -1
  517. package/dist/jsx/schemaForm/index.mjs.map +1 -1
  518. package/dist/jsx/schemaForm/index.native.js +1 -1
  519. package/dist/jsx/schemaForm/index.native.js.map +1 -1
  520. package/dist/jsx/shared/useKeyboardInset.mjs +23 -0
  521. package/dist/jsx/shared/useKeyboardInset.mjs.map +1 -0
  522. package/dist/jsx/shared/useKeyboardInset.native.js +53 -0
  523. package/dist/jsx/shared/useKeyboardInset.native.js.map +1 -0
  524. package/package.json +16 -16
  525. package/src/FileBrowser/AttachLibrary.tsx +90 -0
  526. package/src/FileBrowser/FileBrowser.spec.tsx +273 -0
  527. package/src/FileBrowser/FileBrowser.stories.tsx +97 -0
  528. package/src/FileBrowser/folderTree.ts +62 -0
  529. package/src/FileBrowser/index.tsx +765 -0
  530. package/src/FileBrowser/types.ts +61 -0
  531. package/src/FileBrowser/viewPersistence.ts +37 -0
  532. package/src/FormSidebar.stories.tsx +82 -25
  533. package/src/FormSidebar.tsx +51 -37
  534. package/src/FrappeAssignment.stories.tsx +158 -12
  535. package/src/FrappeAssignment.tsx +11 -9
  536. package/src/FrappeCalendar.stories.tsx +85 -9
  537. package/src/FrappeCalendar.tsx +9 -9
  538. package/src/FrappeChartCard.stories.tsx +107 -14
  539. package/src/FrappeChartCard.tsx +5 -12
  540. package/src/FrappeDashboard.stories.tsx +79 -9
  541. package/src/FrappeDashboard.tsx +8 -8
  542. package/src/FrappeForm.tsx +36 -24
  543. package/src/FrappeGantt.stories.tsx +73 -4
  544. package/src/FrappeGantt.tsx +7 -4
  545. package/src/FrappeImageView.tsx +23 -22
  546. package/src/FrappeKPICard.stories.tsx +110 -10
  547. package/src/FrappeKPICard.tsx +6 -22
  548. package/src/FrappeKanban.stories.tsx +115 -9
  549. package/src/FrappeKanban.tsx +10 -9
  550. package/src/FrappeLikedBy.stories.tsx +82 -10
  551. package/src/FrappeLikedBy.tsx +6 -6
  552. package/src/FrappeList.stories.tsx +85 -8
  553. package/src/FrappeListView.spec.tsx +59 -0
  554. package/src/FrappeListView.tsx +27 -30
  555. package/src/FrappeProvider.stories.tsx +53 -2
  556. package/src/FrappeReportBuilder.tsx +21 -34
  557. package/src/FrappeReportView.tsx +4 -4
  558. package/src/FrappeTreeView.tsx +8 -4
  559. package/src/components/attachments.stories.tsx +79 -7
  560. package/src/components/tags.stories.tsx +131 -6
  561. package/src/components/timeline.stories.tsx +128 -7
  562. package/src/desk/Awesomebar.stories.tsx +3 -2
  563. package/src/desk/DeskFormPage.tsx +3 -2
  564. package/src/desk/DeskListPage.tsx +2 -1
  565. package/src/desk/DeskShell.stories.tsx +21 -2
  566. package/src/desk/DeskShell.tsx +56 -39
  567. package/src/desk/awesomebar.tsx +33 -22
  568. package/src/fieldRegistry.spec.tsx +131 -1
  569. package/src/fieldRegistry.ts +100 -4
  570. package/src/fields/Barcode/Barcode.stories.tsx +32 -0
  571. package/src/fields/Check/Check.spec.tsx +27 -0
  572. package/src/fields/Check/Check.stories.tsx +58 -0
  573. package/src/fields/Check/index.tsx +7 -1
  574. package/src/fields/CodeEditor/CodeEditor.stories.tsx +32 -0
  575. package/src/fields/Color/Color.spec.tsx +21 -0
  576. package/src/fields/Color/Color.stories.tsx +33 -0
  577. package/src/fields/Color/index.tsx +7 -1
  578. package/src/fields/Data/Data.spec.tsx +26 -0
  579. package/src/fields/Data/Data.stories.tsx +58 -0
  580. package/src/fields/Data/index.tsx +6 -0
  581. package/src/fields/Date/Date.stories.tsx +32 -0
  582. package/src/fields/Date/Datetime.stories.tsx +32 -0
  583. package/src/fields/Date/index.native.tsx +45 -33
  584. package/src/fields/Date/nativePresentation.spec.tsx +20 -0
  585. package/src/fields/Date/sheetKeyboard.spec.ts +51 -0
  586. package/src/fields/Date/sheetKeyboard.ts +37 -0
  587. package/src/fields/DateRange/DateRange.stories.tsx +41 -0
  588. package/src/fields/Duration/Duration.stories.tsx +32 -0
  589. package/src/fields/DynamicLink.stories.tsx +115 -14
  590. package/src/fields/DynamicLink.tsx +43 -125
  591. package/src/fields/FileUpload.tsx +273 -54
  592. package/src/fields/FileUploadField/FileUploadField.stories.tsx +87 -0
  593. package/src/fields/FileUploadField/index.tsx +73 -25
  594. package/src/fields/FrappeFileUpload.stories.tsx +32 -0
  595. package/src/fields/Geolocation/Geolocation.stories.tsx +33 -0
  596. package/src/fields/HTML/Html.stories.tsx +59 -0
  597. package/src/fields/HTML/index.tsx +25 -34
  598. package/src/fields/Heading/Heading.stories.tsx +63 -2
  599. package/src/fields/Icon/index.tsx +90 -0
  600. package/src/fields/Link.spec.tsx +10 -0
  601. package/src/fields/Link.stories.tsx +161 -2
  602. package/src/fields/Link.tree.spec.tsx +111 -0
  603. package/src/fields/Link.tsx +36 -19
  604. package/src/fields/LinkTree.tsx +102 -0
  605. package/src/fields/LongText/LongText.stories.tsx +66 -0
  606. package/src/fields/LongText/index.tsx +13 -5
  607. package/src/fields/MarkdownEditor/MarkdownEditor.stories.tsx +36 -0
  608. package/src/fields/MentionInput/MentionInput.stories.tsx +44 -0
  609. package/src/fields/Numeric/Numeric.spec.tsx +7 -0
  610. package/src/fields/Numeric/Numeric.stories.tsx +32 -0
  611. package/src/fields/Numeric/index.tsx +7 -0
  612. package/src/fields/OTPInput/OTPInput.stories.tsx +33 -0
  613. package/src/fields/Password/Password.spec.tsx +119 -0
  614. package/src/fields/Password/Password.stories.tsx +58 -0
  615. package/src/fields/Password/index.tsx +234 -23
  616. package/src/fields/Phone/Phone.stories.tsx +33 -0
  617. package/src/fields/Phone/index.tsx +4 -0
  618. package/src/fields/Progress/Progress.stories.tsx +32 -0
  619. package/src/fields/RadioGroup/RadioGroup.stories.tsx +37 -0
  620. package/src/fields/Rating/Rating.stories.tsx +33 -0
  621. package/src/fields/ReadOnly/ReadOnly.stories.tsx +54 -0
  622. package/src/fields/ReadOnly/index.tsx +41 -55
  623. package/src/fields/Select/Select.stories.tsx +43 -0
  624. package/src/fields/Select/index.tsx +5 -1
  625. package/src/fields/Signature/Signature.stories.tsx +32 -0
  626. package/src/fields/Slider/Slider.stories.tsx +32 -0
  627. package/src/fields/SmallText/SmallText.stories.tsx +58 -0
  628. package/src/fields/SmallText/index.tsx +9 -4
  629. package/src/fields/Switch/Switch.stories.tsx +33 -0
  630. package/src/fields/TableMultiSelect.spec.tsx +26 -5
  631. package/src/fields/TableMultiSelect.stories.tsx +90 -14
  632. package/src/fields/TableMultiSelect.tsx +55 -177
  633. package/src/fields/TextEditor/TextEditor.spec.tsx +5 -3
  634. package/src/fields/TextEditor/TextEditor.stories.tsx +66 -0
  635. package/src/fields/TextEditor/index.tsx +32 -299
  636. package/src/fields/TimePicker/TimePicker.stories.tsx +32 -0
  637. package/src/fields/ToggleGroup/ToggleGroup.stories.tsx +35 -0
  638. package/src/frappeRemainder.designLaw.spec.ts +176 -0
  639. package/src/frappeViews.designLaw.spec.ts +94 -0
  640. package/src/index.ts +18 -1
  641. package/src/schemaForm/SchemaForm.spec.tsx +154 -0
  642. package/src/schemaForm/SchemaForm.stories.tsx +27 -0
  643. package/src/schemaForm/SchemaWizard.spec.tsx +134 -0
  644. package/src/schemaForm/SchemaWizard.stories.tsx +94 -0
  645. package/src/schemaForm/SchemaWizard.tsx +192 -0
  646. package/src/schemaForm/index.tsx +3 -4
  647. package/src/shared/useKeyboardInset.ts +45 -0
  648. package/types/FileBrowser/AttachLibrary.d.ts +13 -0
  649. package/types/FileBrowser/AttachLibrary.d.ts.map +1 -0
  650. package/types/FileBrowser/folderTree.d.ts +15 -0
  651. package/types/FileBrowser/folderTree.d.ts.map +1 -0
  652. package/types/FileBrowser/index.d.ts +4 -0
  653. package/types/FileBrowser/index.d.ts.map +1 -0
  654. package/types/FileBrowser/types.d.ts +59 -0
  655. package/types/FileBrowser/types.d.ts.map +1 -0
  656. package/types/FileBrowser/viewPersistence.d.ts +4 -0
  657. package/types/FileBrowser/viewPersistence.d.ts.map +1 -0
  658. package/types/FormSidebar.d.ts.map +1 -1
  659. package/types/FrappeAssignment.d.ts.map +1 -1
  660. package/types/FrappeChartCard.d.ts.map +1 -1
  661. package/types/FrappeDashboard.d.ts.map +1 -1
  662. package/types/FrappeForm.d.ts.map +1 -1
  663. package/types/FrappeGantt.d.ts.map +1 -1
  664. package/types/FrappeImageView.d.ts.map +1 -1
  665. package/types/FrappeKPICard.d.ts.map +1 -1
  666. package/types/FrappeKanban.d.ts.map +1 -1
  667. package/types/FrappeListView.d.ts.map +1 -1
  668. package/types/FrappeReportBuilder.d.ts.map +1 -1
  669. package/types/FrappeReportView.d.ts.map +1 -1
  670. package/types/FrappeTreeView.d.ts.map +1 -1
  671. package/types/desk/DeskFormPage.d.ts.map +1 -1
  672. package/types/desk/DeskListPage.d.ts.map +1 -1
  673. package/types/desk/DeskShell.d.ts +4 -2
  674. package/types/desk/DeskShell.d.ts.map +1 -1
  675. package/types/desk/awesomebar.d.ts.map +1 -1
  676. package/types/fieldRegistry.d.ts.map +1 -1
  677. package/types/fields/Check/index.d.ts +6 -0
  678. package/types/fields/Check/index.d.ts.map +1 -1
  679. package/types/fields/Color/index.d.ts +6 -0
  680. package/types/fields/Color/index.d.ts.map +1 -1
  681. package/types/fields/Data/index.d.ts +6 -0
  682. package/types/fields/Data/index.d.ts.map +1 -1
  683. package/types/fields/Date/index.native.d.ts +5 -0
  684. package/types/fields/Date/index.native.d.ts.map +1 -1
  685. package/types/fields/Date/sheetKeyboard.d.ts +19 -0
  686. package/types/fields/Date/sheetKeyboard.d.ts.map +1 -0
  687. package/types/fields/DynamicLink.d.ts.map +1 -1
  688. package/types/fields/FileUpload.d.ts +11 -1
  689. package/types/fields/FileUpload.d.ts.map +1 -1
  690. package/types/fields/FileUploadField/index.d.ts +8 -1
  691. package/types/fields/FileUploadField/index.d.ts.map +1 -1
  692. package/types/fields/HTML/index.d.ts.map +1 -1
  693. package/types/fields/Icon/index.d.ts +15 -0
  694. package/types/fields/Icon/index.d.ts.map +1 -0
  695. package/types/fields/Link.d.ts +6 -1
  696. package/types/fields/Link.d.ts.map +1 -1
  697. package/types/fields/LinkTree.d.ts +3 -0
  698. package/types/fields/LinkTree.d.ts.map +1 -0
  699. package/types/fields/LongText/index.d.ts +4 -0
  700. package/types/fields/LongText/index.d.ts.map +1 -1
  701. package/types/fields/Numeric/index.d.ts +7 -0
  702. package/types/fields/Numeric/index.d.ts.map +1 -1
  703. package/types/fields/Password/index.d.ts +1 -0
  704. package/types/fields/Password/index.d.ts.map +1 -1
  705. package/types/fields/Phone/index.d.ts +4 -0
  706. package/types/fields/Phone/index.d.ts.map +1 -1
  707. package/types/fields/ReadOnly/index.d.ts.map +1 -1
  708. package/types/fields/Select/index.d.ts +4 -0
  709. package/types/fields/Select/index.d.ts.map +1 -1
  710. package/types/fields/SmallText/index.d.ts +4 -0
  711. package/types/fields/SmallText/index.d.ts.map +1 -1
  712. package/types/fields/TableMultiSelect.d.ts +2 -1
  713. package/types/fields/TableMultiSelect.d.ts.map +1 -1
  714. package/types/fields/TextEditor/index.d.ts +2 -3
  715. package/types/fields/TextEditor/index.d.ts.map +1 -1
  716. package/types/index.d.ts +7 -1
  717. package/types/index.d.ts.map +1 -1
  718. package/types/schemaForm/SchemaWizard.d.ts +20 -0
  719. package/types/schemaForm/SchemaWizard.d.ts.map +1 -0
  720. package/types/schemaForm/index.d.ts.map +1 -1
  721. package/types/shared/useKeyboardInset.d.ts +18 -0
  722. package/types/shared/useKeyboardInset.d.ts.map +1 -0
@@ -2,6 +2,7 @@ import { InMemoryFixtureProvider } from "@multiplatform.one/frappe";
2
2
  import { action } from "@multiplatform.one/storybook";
3
3
  import { formatAbsoluteDateTime } from "@multiplatform.one/theme";
4
4
  import { FrappeProvider } from "../FrappeProvider";
5
+ import { FrappeStoryProvider } from "../frappeStoryTarget";
5
6
  import { Timeline, type FrappeComment, type FrappeVersion } from "./timeline";
6
7
 
7
8
  export default {
@@ -13,12 +14,99 @@ export default {
13
14
  docs: {
14
15
  description: {
15
16
  component:
16
- "Frappe bridge for the generic Timeline: merges Comment and Version documents into TimelineEntry[], sorted newest-first, with a relative-time formatter by default.",
17
+ "Frappe bridge for the generic Timeline: merges Comment and Version documents into TimelineEntry[], sorted newest-first. Fixture stories are network-hermetic (G-15/D-05): documents come from InMemoryFixtureProvider and DocType meta from an in-story fetch mock, so nothing leaves the machine. The separately-named Live story is the live-bench arm — it targets STORYBOOK_FRAPPE_URL when reachable and falls back to fixtures otherwise.",
17
18
  },
18
19
  },
19
20
  },
20
21
  };
21
22
 
23
+ // ---------------------------------------------------------------------------
24
+ // Hermetic story host (G-15 story honesty / D-05).
25
+ //
26
+ // Fixture-backed stories previously pointed at https://demo.frappe.cloud. The
27
+ // fixture provider serves the *collection*, but DocType meta still resolves
28
+ // over HTTP — so those stories fired a real cross-origin request the browser
29
+ // rejected with CORS. MOCK_HOST keeps the same code path (real fetch, real
30
+ // meta shape) without leaving the machine.
31
+ // ---------------------------------------------------------------------------
32
+
33
+ const MOCK_HOST = "https://frappetimeline.mock.test";
34
+
35
+ function commentMetaRaw(name: string) {
36
+ return {
37
+ name,
38
+ module: "Core",
39
+ title_field: "content",
40
+ fields: [
41
+ { fieldname: "comment_type", fieldtype: "Select", label: "Comment Type" },
42
+ { fieldname: "content", fieldtype: "Text Editor", label: "Content" },
43
+ { fieldname: "comment_by", fieldtype: "Data", label: "Comment By" },
44
+ { fieldname: "reference_doctype", fieldtype: "Link", label: "Reference Document Type" },
45
+ { fieldname: "reference_name", fieldtype: "Dynamic Link", label: "Reference Name" },
46
+ { fieldname: "creation", fieldtype: "Datetime", label: "Created On" },
47
+ ],
48
+ permissions: [{ role: "All", read: 1, write: 1, create: 1 }],
49
+ };
50
+ }
51
+
52
+ function versionMetaRaw(name: string) {
53
+ return {
54
+ name,
55
+ module: "Core",
56
+ fields: [
57
+ { fieldname: "ref_doctype", fieldtype: "Link", label: "Reference Document Type" },
58
+ { fieldname: "docname", fieldtype: "Dynamic Link", label: "Document Name" },
59
+ { fieldname: "data", fieldtype: "Code", label: "Data" },
60
+ { fieldname: "creation", fieldtype: "Datetime", label: "Created On" },
61
+ ],
62
+ permissions: [{ role: "All", read: 1 }],
63
+ };
64
+ }
65
+
66
+ function metaFor(doctype: string) {
67
+ if (doctype === "Version") return versionMetaRaw(doctype);
68
+ return commentMetaRaw(doctype);
69
+ }
70
+
71
+ function jsonResponse(body: unknown, status = 200): Response {
72
+ return new Response(JSON.stringify(body), {
73
+ status,
74
+ headers: { "Content-Type": "application/json" },
75
+ });
76
+ }
77
+
78
+ (() => {
79
+ if (typeof window === "undefined") return;
80
+ const w = window as unknown as Record<string, unknown>;
81
+ if (w.__frappeTimelineMockFetch) return;
82
+ w.__frappeTimelineMockFetch = true;
83
+ const realFetch = window.fetch.bind(window);
84
+ window.fetch = async (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {
85
+ const urlStr =
86
+ typeof input === "string" ? input : input instanceof URL ? input.toString() : input.url;
87
+ if (urlStr.startsWith(MOCK_HOST)) {
88
+ const url = new URL(urlStr);
89
+ if (url.pathname === "/api/method/frappe.desk.form.load.getdoctype") {
90
+ const doctype = url.searchParams.get("doctype") || "Comment";
91
+ return jsonResponse({ docs: [metaFor(doctype)] });
92
+ }
93
+ const metaMatch = url.pathname.match(/^\/api\/resource\/DocType\/(.+)$/);
94
+ if (metaMatch) return jsonResponse({ data: metaFor(decodeURIComponent(metaMatch[1])) });
95
+ if (url.pathname === "/api/resource/DocType") {
96
+ return jsonResponse({
97
+ data: [
98
+ { name: "Comment", module: "Core" },
99
+ { name: "Version", module: "Core" },
100
+ ],
101
+ });
102
+ }
103
+ // Everything else (guest field-peek, counts): empty, never the network.
104
+ return jsonResponse({ data: [] });
105
+ }
106
+ return realFetch(input as RequestInfo, init);
107
+ };
108
+ })();
109
+
22
110
  const now = Date.now();
23
111
  const iso = (minutesAgo: number) => new Date(now - minutesAgo * 60_000).toISOString();
24
112
 
@@ -93,7 +181,7 @@ const makeFixtures = () =>
93
181
  new InMemoryFixtureProvider({ Comment: commentFixtures, Version: versionFixtures });
94
182
 
95
183
  export const Main = () => (
96
- <FrappeProvider baseURL="https://demo.frappe.cloud" fixtures={makeFixtures()}>
184
+ <FrappeProvider baseURL={MOCK_HOST} fixtures={makeFixtures()}>
97
185
  <Timeline
98
186
  doctype="Task"
99
187
  docname="TASK-001"
@@ -107,7 +195,7 @@ Main.storyName = "Main";
107
195
 
108
196
  /** Version/attachment/assignment entries hidden; only plain comments remain. */
109
197
  export const CommentsOnly = () => (
110
- <FrappeProvider baseURL="https://demo.frappe.cloud" fixtures={makeFixtures()}>
198
+ <FrappeProvider baseURL={MOCK_HOST} fixtures={makeFixtures()}>
111
199
  <Timeline
112
200
  doctype="Task"
113
201
  docname="TASK-001"
@@ -122,7 +210,7 @@ export const CommentsOnly = () => (
122
210
 
123
211
  /** No entries at all: base Timeline empty state plus comment input. */
124
212
  export const Empty = () => (
125
- <FrappeProvider baseURL="https://demo.frappe.cloud" fixtures={makeFixtures()}>
213
+ <FrappeProvider baseURL={MOCK_HOST} fixtures={makeFixtures()}>
126
214
  <Timeline
127
215
  doctype="Task"
128
216
  docname="TASK-EMPTY"
@@ -134,7 +222,7 @@ export const Empty = () => (
134
222
 
135
223
  /** enableAddComment=false must remove the comment composer. */
136
224
  export const ReadOnly = () => (
137
- <FrappeProvider baseURL="https://demo.frappe.cloud" fixtures={makeFixtures()}>
225
+ <FrappeProvider baseURL={MOCK_HOST} fixtures={makeFixtures()}>
138
226
  <Timeline doctype="Task" docname="TASK-001" label="Activity" enableAddComment={false} />
139
227
  </FrappeProvider>
140
228
  );
@@ -145,7 +233,7 @@ export const ReadOnly = () => (
145
233
  * (LC-12: even an ejected formatter speaks a human register, never raw ISO).
146
234
  */
147
235
  export const AbsoluteTimestamps = () => (
148
- <FrappeProvider baseURL="https://demo.frappe.cloud" fixtures={makeFixtures()}>
236
+ <FrappeProvider baseURL={MOCK_HOST} fixtures={makeFixtures()}>
149
237
  <Timeline
150
238
  doctype="Task"
151
239
  docname="TASK-001"
@@ -157,7 +245,40 @@ export const AbsoluteTimestamps = () => (
157
245
 
158
246
  /** Compact mode forwards to the base component. */
159
247
  export const Compact = () => (
160
- <FrappeProvider baseURL="https://demo.frappe.cloud" fixtures={makeFixtures()}>
248
+ <FrappeProvider baseURL={MOCK_HOST} fixtures={makeFixtures()}>
161
249
  <Timeline doctype="Task" docname="TASK-001" label="Activity" compact />
162
250
  </FrappeProvider>
163
251
  );
252
+
253
+ // ---------------------------------------------------------------------------
254
+ // Live bench story — real Comment/Version documents over the live data path
255
+ // ---------------------------------------------------------------------------
256
+
257
+ /**
258
+ * Live timeline against the real bench (STORYBOOK_FRAPPE_URL, default the
259
+ * local dev bench proxied by the Storybook dev server). Subscribes to
260
+ * Comment and Version filtered by the target document so desk comments and
261
+ * version rows appear in place. Falls back to fixtures when the bench is
262
+ * unreachable.
263
+ */
264
+ export const Live = (args: { doctype?: string; docname?: string }) => (
265
+ <FrappeStoryProvider fixtures={makeFixtures()}>
266
+ <Timeline
267
+ doctype={args.doctype || "Task"}
268
+ docname={args.docname || "TASK-001"}
269
+ label="Activity"
270
+ onAddComment={action("onAddComment")}
271
+ onEntryClick={action("onEntryClick")}
272
+ />
273
+ </FrappeStoryProvider>
274
+ );
275
+ Live.args = { doctype: "", docname: "" };
276
+ Live.argTypes = { doctype: { control: "text" }, docname: { control: "text" } };
277
+ Live.parameters = {
278
+ docs: {
279
+ description: {
280
+ story:
281
+ "Live Comment/Version feed over the real bench: realtime list_update events insert/evict rows in place. Fixture fallback (Task/TASK-001) when the bench is down.",
282
+ },
283
+ },
284
+ };
@@ -4,7 +4,7 @@ import { YStack } from "tamagui";
4
4
  import { FrappeProvider } from "../FrappeProvider";
5
5
  import { Awesomebar } from "./awesomebar";
6
6
 
7
- export default {
7
+ const meta = {
8
8
  title: "FrappeUI/Desk/Awesomebar",
9
9
  component: Awesomebar,
10
10
  tags: ["!test"],
@@ -13,7 +13,7 @@ export default {
13
13
  docs: {
14
14
  description: {
15
15
  component:
16
- "Global desk search: navigation results (DocType catalog), document results (global_search), inline math, and commands. Backed here by an in-story fetch mock. Try typing 'sales', 'todo', '2+2' or 'settings'.",
16
+ "Global desk search: navigation results (DocType catalog), document results (global_search), inline math, and commands. Trigger height comes from the LC-65 size recipe; radius=full is a pill. Backed here by an in-story fetch mock. Try typing 'sales', 'todo', '2+2' or 'settings'.",
17
17
  },
18
18
  },
19
19
  },
@@ -21,6 +21,7 @@ export default {
21
21
  basePath: { control: "text" },
22
22
  },
23
23
  };
24
+ export default meta;
24
25
 
25
26
  const MOCK_HOST = "https://awesomebar.mock.test";
26
27
  const ERR_HOST = "https://forbidden.awesomebar.mock.test";
@@ -18,7 +18,8 @@
18
18
 
19
19
  import React, { useEffect } from "react";
20
20
  import { useTranslation } from "react-i18next";
21
- import { Button, Text, YStack } from "tamagui";
21
+ import { Button, formCommonColors } from "@multiplatform.one/forms";
22
+ import { Text, YStack } from "tamagui";
22
23
  import { useResolvedKnobs } from "@multiplatform.one/theme";
23
24
  import { ArrowLeftIcon } from "@phosphor-icons/react";
24
25
  import { DeskShell } from "./DeskShell";
@@ -82,7 +83,7 @@ export function DeskFormPage({ doctype, name, onNavigate }: DeskFormPageProps) {
82
83
  {...knobProps.containerRadius}
83
84
  {...knobProps.gap}
84
85
  >
85
- <Text color="$color10" fontSize={knobProps.sizeToken} {...knobProps.body}>
86
+ <Text color={formCommonColors.muted} {...knobProps.body}>
86
87
  {t("No DocType specified")}
87
88
  </Text>
88
89
  </YStack>
@@ -12,6 +12,7 @@
12
12
 
13
13
  import React from "react";
14
14
  import { useTranslation } from "react-i18next";
15
+ import { formCommonColors } from "@multiplatform.one/forms";
15
16
  import { Text, YStack } from "tamagui";
16
17
  import { useResolvedKnobs } from "@multiplatform.one/theme";
17
18
  import { DeskShell } from "./DeskShell";
@@ -60,7 +61,7 @@ export function DeskListPage({ doctype, onNavigate }: DeskListPageProps) {
60
61
  {...knobProps.containerRadius}
61
62
  {...knobProps.gap}
62
63
  >
63
- <Text color="$color10" fontSize={knobProps.sizeToken} {...knobProps.body}>
64
+ <Text color={formCommonColors.muted} {...knobProps.body}>
64
65
  {t("No DocType specified")}
65
66
  </Text>
66
67
  </YStack>
@@ -1,6 +1,6 @@
1
1
  import { InMemoryFixtureProvider } from "@multiplatform.one/frappe";
2
2
  import { action } from "@multiplatform.one/storybook";
3
- import { Text, YStack } from "tamagui";
3
+ import { Text, YStack } from "@multiplatform.one/components";
4
4
  import { FrappeProvider } from "../FrappeProvider";
5
5
  import { DeskShell } from "./DeskShell";
6
6
 
@@ -14,7 +14,7 @@ export default {
14
14
  docs: {
15
15
  description: {
16
16
  component:
17
- "Top-level desk layout: Awesomebar header, DeskSidebar nav, breadcrumbs and main content. Navigation search is served by an in-story fetch mock.",
17
+ "Top-level desk layout: Awesomebar header, DeskSidebar nav, breadcrumbs and main content. Navigation search is served by an in-story fetch mock. Shell chrome rides house Button, phosphor icons, and surface/heading/gap/panelPadding knobs (R-NONE inverted-L).",
18
18
  },
19
19
  },
20
20
  },
@@ -140,3 +140,22 @@ export const Bare = () => (
140
140
  <DeskShell onNavigate={action("onNavigate")}>{content(1)}</DeskShell>
141
141
  </YStack>
142
142
  );
143
+
144
+ /** Compact viewport: rail collapses to a phosphor toggle + overlay drawer. */
145
+ export const Narrow = () => (
146
+ <FrappeProvider baseURL={MOCK_HOST} fixtures={new InMemoryFixtureProvider({})}>
147
+ <YStack height={640}>
148
+ <DeskShell
149
+ breadcrumbs={[{ label: "Desk", href: "/desk" }, { label: "Todo" }]}
150
+ onNavigate={action("onNavigate")}
151
+ activePath="/desk/Todo"
152
+ >
153
+ {content(3)}
154
+ </DeskShell>
155
+ </YStack>
156
+ </FrappeProvider>
157
+ );
158
+ Narrow.parameters = {
159
+ viewport: { defaultViewport: "mobile1" },
160
+ };
161
+ Narrow.storyName = "Narrow";
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * DeskShell - Top-level layout component for Frappe Desk.
3
3
  *
4
- * Composes the Awesomebar (top), DeskSidebar (left), Breadcrumbs,
4
+ * Composes the Awesomebar (top), DeskSidebar (start-edge), Breadcrumbs,
5
5
  * and a main content area into a full-page desk layout.
6
6
  *
7
7
  * Uses semantic HTML elements via Tamagui's `tag` prop for accessibility:
@@ -11,23 +11,31 @@
11
11
  *
12
12
  * Narrow viewports (<640px): sidebar becomes an overlay drawer so main
13
13
  * content keeps the full width (SB-M-1706). Banner bottom border follows
14
- * the surface borderWidth knob (SB-M-1708).
14
+ * the surface borderWidth knob (SB-M-1708). Shell chrome is R-NONE (no
15
+ * radius on the inverted-L) and consumes house Button / phosphor icons
16
+ * so knobs and DG-IDN-06 reach the banner.
15
17
  */
16
18
 
17
19
  import { useHotkey } from "@tanstack/react-hotkeys";
18
20
  import type React from "react";
19
21
  import { useCallback, useEffect, useState } from "react";
20
22
  import { useTranslation } from "react-i18next";
21
- import { Button, Text, XStack, YStack } from "tamagui";
22
- import { NARROW_BREAKPOINT, useLayoutSizeClass, useResolvedKnobs } from "@multiplatform.one/theme";
23
- import { Awesomebar } from "./awesomebar";
23
+ import { ListIcon, XIcon } from "@phosphor-icons/react";
24
24
  import {
25
25
  Breadcrumbs,
26
+ Button,
26
27
  CONTENT_MAX_WIDTH,
27
28
  PageHeadingScope,
29
+ SizableText,
30
+ SkipLink,
31
+ XStack,
32
+ YStack,
33
+ isWeb,
28
34
  useDocumentTitle,
29
35
  type BreadcrumbItem,
30
36
  } from "@multiplatform.one/components";
37
+ import { NARROW_BREAKPOINT, useLayoutSizeClass, useResolvedKnobs } from "@multiplatform.one/theme";
38
+ import { Awesomebar } from "./awesomebar";
31
39
  import { DeskSidebar } from "./DeskSidebar";
32
40
 
33
41
  // ---------------------------------------------------------------------------
@@ -67,6 +75,13 @@ function useIsNarrowDesk(): boolean {
67
75
  return useLayoutSizeClass() === "compact";
68
76
  }
69
77
 
78
+ /** Size token is a HEIGHT key — map the banner min-height from it, never fontSize. */
79
+ function bannerMinHeight(sizeToken: string): "$5" | "$6" | "$7" {
80
+ if (sizeToken === "$5") return "$7";
81
+ if (sizeToken === "$3") return "$5";
82
+ return "$6";
83
+ }
84
+
70
85
  // ---------------------------------------------------------------------------
71
86
  // Component
72
87
  // ---------------------------------------------------------------------------
@@ -80,7 +95,7 @@ export function DeskShell({
80
95
  showAwesomebar = true,
81
96
  }: DeskShellProps) {
82
97
  const { t } = useTranslation();
83
- const { knobProps } = useResolvedKnobs();
98
+ const { knobProps } = useResolvedKnobs({ component: "DeskShell" });
84
99
  const isNarrow = useIsNarrowDesk();
85
100
  const [mobileSidebarOpen, setMobileSidebarOpen] = useState(false);
86
101
 
@@ -105,6 +120,7 @@ export function DeskShell({
105
120
  useHotkey(
106
121
  "Mod+K",
107
122
  () => {
123
+ if (typeof document === "undefined") return;
108
124
  const input = document.querySelector<HTMLInputElement>("[data-awesomebar-input]");
109
125
  if (input) input.focus();
110
126
  },
@@ -118,6 +134,7 @@ export function DeskShell({
118
134
  setMobileSidebarOpen(false);
119
135
  return;
120
136
  }
137
+ if (typeof document === "undefined") return;
121
138
  if (document.activeElement instanceof HTMLElement) {
122
139
  document.activeElement.blur();
123
140
  }
@@ -127,51 +144,48 @@ export function DeskShell({
127
144
 
128
145
  const surfaceBorderWidth = knobProps.surface.borderWidth;
129
146
  const showMobileToggle = showSidebar && isNarrow;
147
+ const drawerEdge = isWeb ? { insetInlineStart: 0 } : { start: 0 };
130
148
 
131
149
  const toggleButton = showMobileToggle ? (
132
150
  <Button
133
- size="$3"
134
151
  chromeless
135
152
  circular
153
+ icon={mobileSidebarOpen ? XIcon : ListIcon}
136
154
  aria-label={t("Toggle sidebar")}
137
155
  aria-expanded={mobileSidebarOpen}
138
156
  aria-controls="desk-sidebar"
139
157
  onPress={() => setMobileSidebarOpen((open) => !open)}
140
- marginEnd="$2"
141
158
  data-testid="desk-sidebar-toggle"
142
- >
143
- <Text fontSize="$5" lineHeight="$5">
144
- {mobileSidebarOpen ? "\u2715" : "\u2630"}
145
- </Text>
146
- </Button>
159
+ />
147
160
  ) : null;
148
161
 
162
+ const chromeBorder = {
163
+ borderWidth: 0,
164
+ borderRadius: 0,
165
+ borderBottomWidth: surfaceBorderWidth,
166
+ borderBottomColor: knobProps.surface.borderColor,
167
+ } as const;
168
+
149
169
  return (
150
170
  <YStack flex={1} height="100%" width="100%" overflow="hidden" data-testid="desk-shell">
151
- {/* Header with Awesomebar */}
171
+ {isWeb ? <SkipLink targetId="desk-main">{t("Skip to content")}</SkipLink> : null}
172
+
173
+ {/* Header with Awesomebar — R-NONE full-bleed chrome; knobs own pad/gap/type. */}
152
174
  {showAwesomebar && (
153
175
  <XStack
154
176
  role="banner"
155
177
  {...knobProps.surface}
156
- // Surface knobs paint a full box border; keep only the bottom edge,
157
- // and honor borderWidth:none (SB-M-1708).
158
- borderWidth={0}
159
- borderBottomWidth={surfaceBorderWidth}
160
- borderBottomColor={knobProps.surface.borderColor}
161
- height={knobProps.sizeToken === "$5" ? "$7" : knobProps.sizeToken === "$3" ? "$5" : "$6"}
178
+ {...knobProps.gap}
179
+ {...knobProps.panelPadding}
180
+ {...chromeBorder}
181
+ minHeight={bannerMinHeight(knobProps.sizeToken)}
162
182
  alignItems="center"
163
- paddingHorizontal="$4"
164
183
  flexShrink={0}
165
184
  >
166
185
  {toggleButton}
167
- <Text
168
- fontSize={knobProps.sizeToken}
169
- marginEnd="$4"
170
- {...knobProps.heading}
171
- fontWeight="700"
172
- >
186
+ <SizableText {...knobProps.heading} {...knobProps.controlType} flexShrink={0}>
173
187
  {t("Desk")}
174
- </Text>
188
+ </SizableText>
175
189
  <Awesomebar onNavigate={handleNavigate} flex={1} minWidth={0} />
176
190
  </XStack>
177
191
  )}
@@ -179,11 +193,11 @@ export function DeskShell({
179
193
  {/* Narrow + no awesomebar: still expose the drawer toggle */}
180
194
  {!showAwesomebar && showMobileToggle && (
181
195
  <XStack
196
+ {...knobProps.surface}
197
+ {...knobProps.gap}
198
+ {...knobProps.panelPadding}
199
+ {...chromeBorder}
182
200
  alignItems="center"
183
- paddingHorizontal="$3"
184
- paddingVertical="$2"
185
- borderBottomWidth={surfaceBorderWidth}
186
- borderBottomColor={knobProps.surface.borderColor}
187
201
  flexShrink={0}
188
202
  >
189
203
  {toggleButton}
@@ -191,7 +205,7 @@ export function DeskShell({
191
205
  )}
192
206
 
193
207
  <XStack flex={1} minWidth={0} position="relative" overflow="hidden">
194
- {/* Desktop nav sidebar — in flow */}
208
+ {/* Desktop nav sidebar — in flow. Sidebar owns the painted surface. */}
195
209
  {showSidebar && !isNarrow && (
196
210
  <YStack
197
211
  role="navigation"
@@ -212,7 +226,8 @@ export function DeskShell({
212
226
  left={0}
213
227
  right={0}
214
228
  bottom={0}
215
- backgroundColor="rgba(0,0,0,0.35)"
229
+ backgroundColor="$shadowColor"
230
+ opacity={0.5}
216
231
  zIndex={10}
217
232
  onPress={() => setMobileSidebarOpen(false)}
218
233
  data-testid="desk-sidebar-scrim"
@@ -222,10 +237,11 @@ export function DeskShell({
222
237
  id="desk-sidebar"
223
238
  position="absolute"
224
239
  top={0}
225
- left={0}
226
240
  bottom={0}
227
241
  zIndex={11}
228
- backgroundColor="$background"
242
+ {...drawerEdge}
243
+ {...knobProps.surface}
244
+ borderRadius={0}
229
245
  data-testid="desk-sidebar-drawer"
230
246
  >
231
247
  <DeskSidebar onNavigate={handleNavigate} activePath={activePath} />
@@ -234,15 +250,16 @@ export function DeskShell({
234
250
  )}
235
251
 
236
252
  {/* Main content */}
237
- <YStack role="main" flex={1} minWidth={0}>
253
+ <YStack role="main" id="desk-main" tabIndex={-1} flex={1} minWidth={0} minHeight={0}>
238
254
  {/* DG-A11Y-02: one h1 budget per desk page (multiple-h1 DEV warn). */}
239
255
  <PageHeadingScope name="DeskShell">
240
256
  {/* Breadcrumbs — LC-35 WAYFINDING-CHROMELESS / Axiom 16: the
241
257
  chromeless trail sits ON the page column's alignment line.
242
258
  The shell renders above the page scaffold, so it mirrors
243
259
  Screen's content column (max-width cap + centering +
244
- panelPadding inset) to share the exact x that page templates
245
- give headings and content. */}
260
+ panelPadding inset on the inline axis) to share the exact x
261
+ that page templates give headings and content. Vertical pad
262
+ stays 0 so the trail does not inflate above the page. */}
246
263
  {breadcrumbs && breadcrumbs.length > 0 && (
247
264
  <YStack
248
265
  width="100%"
@@ -20,11 +20,11 @@ import {
20
20
  import { useHotkey } from "@tanstack/react-hotkeys";
21
21
  import { useCallback, useMemo, useRef, useState } from "react";
22
22
  import { useTranslation } from "react-i18next";
23
- import { Text, View, XStack, type XStackProps } from "tamagui";
24
- import { useResolvedKnobs } from "@multiplatform.one/theme";
25
- import { Combobox, type ComboboxOption } from "@multiplatform.one/forms";
23
+ import { Combobox, formCommonColors, type ComboboxOption } from "@multiplatform.one/forms";
26
24
  import { writeToClipboard } from "@multiplatform.one/platform";
27
25
  import { storage } from "@multiplatform.one/store";
26
+ import { useResolvedKnobs } from "@multiplatform.one/theme";
27
+ import { Text, View, XStack, isWeb, type XStackProps } from "tamagui";
28
28
  import { useFrappeConfig } from "../FrappeProvider";
29
29
 
30
30
  // ---------------------------------------------------------------------------
@@ -133,7 +133,7 @@ function matchingCommands(query: string): Array<{ label: string; path: string }>
133
133
 
134
134
  export function Awesomebar({ onNavigate, basePath = "/desk", ...stackProps }: AwesomebarProps) {
135
135
  const { t } = useTranslation();
136
- const { knobProps } = useResolvedKnobs();
136
+ const { knobProps, control } = useResolvedKnobs();
137
137
  const config = useFrappeConfig();
138
138
  const [query, setQuery] = useState("");
139
139
  const [docResults, setDocResults] = useState<DocSearchResult[]>([]);
@@ -311,34 +311,39 @@ export function Awesomebar({ onNavigate, basePath = "/desk", ...stackProps }: Aw
311
311
  useHotkey(
312
312
  "Mod+K",
313
313
  () => {
314
- // Focus the combobox trigger
315
- const trigger = document.querySelector("[data-awesomebar-trigger]") as HTMLElement;
314
+ if (!isWeb || typeof document === "undefined") return;
315
+ const trigger = document.querySelector("[data-awesomebar-trigger]") as HTMLElement | null;
316
316
  trigger?.click();
317
317
  },
318
318
  { conflictBehavior: "allow" },
319
319
  );
320
320
 
321
- // Raw px heights (documented mapping). Combobox's custom-trigger wrapper used
322
- // to collapse Tamagui `height` — pin via style + outer shell (SB-M-1703).
323
- const triggerHeight = knobProps.sizeToken === "$3" ? 32 : knobProps.sizeToken === "$5" ? 44 : 36;
321
+ // Height from the LC-65 size recipe (not a private px map). Combobox's
322
+ // custom-trigger wrapper used to collapse Tamagui `height` — pin via style
323
+ // + outer shell (SB-M-1703).
324
+ const triggerHeight = knobProps.control.height;
324
325
 
325
- // Custom trigger that shows the search input
326
326
  const renderTrigger = useCallback(
327
327
  (_selected: ComboboxOption | ComboboxOption[] | undefined, open: boolean) => (
328
328
  <XStack
329
329
  data-awesomebar-trigger
330
330
  width="100%"
331
331
  alignItems="center"
332
- height={triggerHeight}
333
- minHeight={triggerHeight}
334
- maxHeight={triggerHeight}
335
- paddingHorizontal={knobProps.sizeToken}
336
- backgroundColor={open ? "$background" : "$color2"}
332
+ cursor="text"
333
+ backgroundColor={knobProps.inputBackground}
334
+ {...knobProps.control}
337
335
  {...knobProps.inputSurface}
338
336
  {...knobProps.borderRadius}
339
- borderColor={open ? "$accentColor" : "$borderColor"}
340
- cursor="text"
341
- {...knobProps.gap}
337
+ borderColor={open ? "$borderColorFocus" : "$borderColor"}
338
+ hoverStyle={{
339
+ borderColor: "$borderColorHover",
340
+ ...control.hoverKnobProps,
341
+ }}
342
+ pressStyle={{ ...control.pressKnobProps }}
343
+ focusVisibleStyle={{
344
+ borderColor: "$borderColorFocus",
345
+ ...control.focusVisibleKnobProps,
346
+ }}
342
347
  // Inline style wins over flex-shrink collapse of the Combobox wrapper.
343
348
  style={{
344
349
  height: triggerHeight,
@@ -352,10 +357,10 @@ export function Awesomebar({ onNavigate, basePath = "/desk", ...stackProps }: Aw
352
357
  >
353
358
  <Text
354
359
  flex={1}
355
- fontSize={knobProps.sizeToken}
356
- color="$color10"
357
360
  numberOfLines={1}
361
+ color={formCommonColors.muted}
358
362
  {...knobProps.body}
363
+ {...knobProps.controlType}
359
364
  >
360
365
  {t("Search or type a command...")}
361
366
  </Text>
@@ -364,14 +369,20 @@ export function Awesomebar({ onNavigate, basePath = "/desk", ...stackProps }: Aw
364
369
  paddingVertical="$1"
365
370
  backgroundColor="$color3"
366
371
  {...knobProps.borderRadius}
372
+ borderWidth={0}
367
373
  >
368
- <Text color="$color11" fontFamily="$mono">
374
+ <Text
375
+ fontFamily="$mono"
376
+ color={formCommonColors.muted}
377
+ {...knobProps.controlType}
378
+ {...knobProps.textWeight}
379
+ >
369
380
  ⌘K
370
381
  </Text>
371
382
  </View>
372
383
  </XStack>
373
384
  ),
374
- [knobProps, t, triggerHeight],
385
+ [control, knobProps, t, triggerHeight],
375
386
  );
376
387
 
377
388
  return (