@multiplatform.one/frappe-ui 7.4.0 → 7.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +661 -0
  8. package/dist/cjs/FileBrowser/index.native.js +735 -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 +15 -3
  74. package/dist/cjs/fieldRegistry.native.js +15 -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 +197 -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 +636 -0
  151. package/dist/esm/FileBrowser/index.mjs.map +1 -0
  152. package/dist/esm/FileBrowser/index.native.js +707 -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 +16 -4
  239. package/dist/esm/fieldRegistry.mjs.map +1 -1
  240. package/dist/esm/fieldRegistry.native.js +16 -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 +199 -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 +636 -0
  341. package/dist/jsx/FileBrowser/index.mjs.map +1 -0
  342. package/dist/jsx/FileBrowser/index.native.js +735 -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 +16 -4
  429. package/dist/jsx/fieldRegistry.mjs.map +1 -1
  430. package/dist/jsx/fieldRegistry.native.js +15 -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 +197 -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 +268 -0
  527. package/src/FileBrowser/FileBrowser.stories.tsx +93 -0
  528. package/src/FileBrowser/folderTree.ts +62 -0
  529. package/src/FileBrowser/index.tsx +724 -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 +17 -1
  569. package/src/fieldRegistry.ts +14 -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 +243 -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
@@ -8,6 +8,7 @@ import {
8
8
  import React, { useCallback, useMemo, useState, type ReactNode } from "react";
9
9
  import { Text, YStack, type YStackProps } from "tamagui";
10
10
  import { useTranslation } from "react-i18next";
11
+ import { formCommonColors } from "@multiplatform.one/forms";
11
12
  import {
12
13
  formatCalendarDate,
13
14
  parseCalendarDate,
@@ -251,7 +252,7 @@ export function FrappeGantt<TDoc extends { name: string; doctype: string }>({
251
252
  return (
252
253
  <YStack {...knobProps.gap}>
253
254
  <FrappeConnectionIndicator config={connectionConfig} />
254
- {actionError && (
255
+ {actionError ? (
255
256
  <YStack
256
257
  {...knobProps.panelPadding}
257
258
  {...knobProps.borderRadius}
@@ -259,12 +260,14 @@ export function FrappeGantt<TDoc extends { name: string; doctype: string }>({
259
260
  borderColor="$red7"
260
261
  borderWidth={1}
261
262
  >
262
- <Text color="$red11">{t("Action failed")}</Text>
263
- <Text color="$color10" fontSize="$2">
263
+ <Text color={formCommonColors.error} {...knobProps.label}>
264
+ {t("Action failed")}
265
+ </Text>
266
+ <Text color={formCommonColors.muted} {...knobProps.label}>
264
267
  {actionError.message}
265
268
  </Text>
266
269
  </YStack>
267
- )}
270
+ ) : null}
268
271
  <GanttView
269
272
  {...knobProps.borderRadius}
270
273
  tasks={tasks}
@@ -1,10 +1,10 @@
1
1
  import { useDocTypeMeta, useFrappeCollection, useLiveQuery } from "@multiplatform.one/frappe";
2
- import { AsyncSkeleton, ImageGrid } from "@multiplatform.one/components";
2
+ import { AsyncSkeleton, Card, ImageGrid } from "@multiplatform.one/components";
3
3
  import { ImageSquareIcon } from "@phosphor-icons/react";
4
4
  import React, { useMemo } from "react";
5
5
  import { useTranslation } from "react-i18next";
6
- import { Spinner } from "@multiplatform.one/forms";
7
- import { Card, Image, Text, YStack, type YStackProps } from "tamagui";
6
+ import { Spinner, formCommonColors } from "@multiplatform.one/forms";
7
+ import { Image, Text, YStack, type YStackProps } from "tamagui";
8
8
  import { useResolvedKnobs } from "@multiplatform.one/theme";
9
9
  import { useFrappeConfig } from "./FrappeProvider";
10
10
  import { FrappeReconnectIndicator } from "./FrappeReconnectIndicator";
@@ -134,7 +134,7 @@ export function FrappeImageView<TDoc extends { name: string; doctype: string }>(
134
134
  {...(stackProps as any)}
135
135
  >
136
136
  <Spinner size="large" />
137
- <Text color="$color10" marginTop="$2">
137
+ <Text color={formCommonColors.muted} {...knobProps.body} marginTop="$2">
138
138
  {t("Loading {{doctype}}...", { doctype })}
139
139
  </Text>
140
140
  </YStack>
@@ -265,12 +265,15 @@ function FrappeImageViewClient<TDoc extends { name: string; doctype: string }>({
265
265
  );
266
266
  }
267
267
 
268
- // No image field configured
268
+ // No image field configured. R11: state is chrome outside the tile (no pip).
269
269
  if (!effectiveImageField) {
270
+ const iconSize = Number(knobProps.controlIcon?.width) || 16;
270
271
  return (
271
272
  <YStack {...knobProps.panelPadding} alignItems="center" {...knobProps.gap} {...stackProps}>
272
- <ImageSquareIcon size={48} color="$color8" />
273
- <Text color="$color10">{t("No image field configured for {{doctype}}", { doctype })}</Text>
273
+ <ImageSquareIcon size={iconSize * 2} color={formCommonColors.muted} />
274
+ <Text color={formCommonColors.muted} {...knobProps.body}>
275
+ {t("No image field configured for {{doctype}}", { doctype })}
276
+ </Text>
274
277
  </YStack>
275
278
  );
276
279
  }
@@ -329,15 +332,13 @@ function FrappeImageCard({
329
332
  const imageUrl = getImageUrl(doc[imageField], baseURL);
330
333
  const title = doc[titleField] || doc.name;
331
334
  const subtitle = subtitleField ? doc[subtitleField] : undefined;
335
+ const iconSize = Number(knobProps.controlIcon?.width) || 16;
332
336
 
333
337
  return (
334
- // Bento product-card anatomy: PADDED card frame (cardSurface carries the
335
- // padding) with an inner-rounded image block, texts below; separation by
336
- // soft elevation, no outline border.
338
+ // Catalog Card owns cardSurface (no cherry-picked radius). Inner media
339
+ // radius stays UNCLAMPED (R11). No status pip on the tile.
337
340
  <Card
338
341
  testID={`${doctype.toLowerCase()}-card-${doc.name}`}
339
- {...knobProps.cardSurface}
340
- elevation={knobProps.elevation}
341
342
  cursor="pointer"
342
343
  hoverStyle={{ scale: 1.02 }}
343
344
  pressStyle={{ scale: 0.98 }}
@@ -356,40 +357,40 @@ function FrappeImageCard({
356
357
  aspectRatio={1}
357
358
  objectFit="cover"
358
359
  backgroundColor="$color2"
359
- borderRadius="$3"
360
+ {...knobProps.borderRadius}
360
361
  />
361
362
  ) : (
362
363
  <YStack
363
364
  width="100%"
364
365
  aspectRatio={1}
365
366
  backgroundColor="$color2"
366
- borderRadius="$3"
367
+ {...knobProps.borderRadius}
367
368
  alignItems="center"
368
369
  justifyContent="center"
369
370
  >
370
- <ImageSquareIcon size={48} color="$color8" />
371
+ <ImageSquareIcon size={iconSize * 2} color={formCommonColors.muted} />
371
372
  </YStack>
372
373
  )}
373
- <Card.Footer paddingTop="$3">
374
- <YStack gap="$1">
374
+ <Card.Footer>
375
+ <YStack {...knobProps.gap}>
375
376
  <Text
376
377
  testID={`${doctype.toLowerCase()}-name-${doc.name}`}
378
+ {...knobProps.heading}
377
379
  fontWeight="400"
378
- fontSize="$5"
379
380
  numberOfLines={1}
380
381
  >
381
382
  {String(title)}
382
383
  </Text>
383
- {subtitle != null && (
384
+ {subtitle != null ? (
384
385
  <Text
385
386
  testID={`${doctype.toLowerCase()}-subtitle-${doc.name}`}
386
- color="$color10"
387
- fontSize="$3"
387
+ color={formCommonColors.muted}
388
+ {...knobProps.label}
388
389
  numberOfLines={1}
389
390
  >
390
391
  {String(subtitle)}
391
392
  </Text>
392
- )}
393
+ ) : null}
393
394
  </YStack>
394
395
  </Card.Footer>
395
396
  </Card>
@@ -7,6 +7,7 @@ import { action } from "@multiplatform.one/storybook";
7
7
  import { CurrencyDollarIcon } from "@phosphor-icons/react";
8
8
  import { XStack } from "tamagui";
9
9
  import { FrappeKPICard } from "./FrappeKPICard";
10
+ import { FrappeProvider } from "./FrappeProvider";
10
11
  import { FrappeStoryProvider } from "./frappeStoryTarget";
11
12
 
12
13
  export default {
@@ -18,12 +19,81 @@ export default {
18
19
  docs: {
19
20
  description: {
20
21
  component:
21
- "KPICard as re-exported by @multiplatform.one/frappe-ui (the 'Frappe KPICard' bridge). It is the same component object as the components-package KPICard; these stories exercise the bridge surface and value edge cases.",
22
+ "KPICard as re-exported by @multiplatform.one/frappe-ui (the 'Frappe KPICard' bridge). It is the same component object as the components-package KPICard; these stories exercise the bridge surface and value edge cases. Live aggregate stories are network-hermetic (G-15/D-05): counts 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.",
22
23
  },
23
24
  },
24
25
  },
25
26
  };
26
27
 
28
+ // ---------------------------------------------------------------------------
29
+ // Hermetic story host (G-15 story honesty / D-05, closes UX-P18).
30
+ //
31
+ // LiveToDoCount previously wrapped FrappeStoryProvider, whose fallback
32
+ // baseURL is https://demo.frappe.cloud (and which is a no-op on native
33
+ // Kitchen Sink / TestFlight). Fixture rows then never reached
34
+ // useFrappeAggregate, and any DocType-meta fetch CORS-failed. MOCK_HOST
35
+ // keeps the same code path (real fetch, real meta shape) without leaving
36
+ // the machine; counts render from InMemoryFixtureProvider.
37
+ // ---------------------------------------------------------------------------
38
+
39
+ const MOCK_HOST = "https://frappekpicard.mock.test";
40
+
41
+ function todoMetaRaw(name: string) {
42
+ return {
43
+ name,
44
+ module: "Desk",
45
+ title_field: "description",
46
+ fields: [
47
+ { fieldname: "description", fieldtype: "Text Editor", label: "Description", in_list_view: 1 },
48
+ {
49
+ fieldname: "status",
50
+ fieldtype: "Select",
51
+ label: "Status",
52
+ options: "Open\nClosed",
53
+ in_list_view: 1,
54
+ in_standard_filter: 1,
55
+ },
56
+ ],
57
+ permissions: [{ role: "All", read: 1, write: 1, create: 1 }],
58
+ };
59
+ }
60
+
61
+ function jsonResponse(body: unknown, status = 200): Response {
62
+ return new Response(JSON.stringify(body), {
63
+ status,
64
+ headers: { "Content-Type": "application/json" },
65
+ });
66
+ }
67
+
68
+ (() => {
69
+ if (typeof window === "undefined") return;
70
+ const w = window as unknown as Record<string, unknown>;
71
+ if (w.__frappeKpiCardMockFetch) return;
72
+ w.__frappeKpiCardMockFetch = true;
73
+ const realFetch = window.fetch.bind(window);
74
+ window.fetch = async (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {
75
+ const urlStr =
76
+ typeof input === "string" ? input : input instanceof URL ? input.toString() : input.url;
77
+ if (urlStr.startsWith(MOCK_HOST)) {
78
+ const url = new URL(urlStr);
79
+ if (url.pathname === "/api/method/frappe.desk.form.load.getdoctype") {
80
+ const doctype = url.searchParams.get("doctype") || "ToDo";
81
+ return jsonResponse({ docs: [todoMetaRaw(decodeURIComponent(doctype))] });
82
+ }
83
+ const metaMatch = url.pathname.match(/^\/api\/resource\/DocType\/(.+)$/);
84
+ if (metaMatch)
85
+ return jsonResponse({ data: todoMetaRaw(decodeURIComponent(metaMatch[1])) });
86
+ if (url.pathname === "/api/resource/DocType") {
87
+ return jsonResponse({ data: [{ name: "ToDo", module: "Desk" }] });
88
+ }
89
+ // Everything else (guest field-peek, counts): empty, never the network.
90
+ // Scalar counts still come from InMemoryFixtureProvider, not this body.
91
+ return jsonResponse({ data: [] });
92
+ }
93
+ return realFetch(input as RequestInfo, init);
94
+ };
95
+ })();
96
+
27
97
  export const Main = () => (
28
98
  <KPICard
29
99
  config={{
@@ -146,20 +216,20 @@ export const LongTitle = () => (
146
216
  );
147
217
 
148
218
  // ---------------------------------------------------------------------------
149
- // Live aggregate (FrappeKPICard + dataSource): the value is a server-side
150
- // aggregate over the bench doctype, refetched (debounced) on realtime
151
- // list_update / doc_update / doc_deleted events. Bench when reachable,
152
- // fixtures otherwise (FrappeStoryProvider fallback).
219
+ // Hermetic aggregate (FrappeKPICard + dataSource): counts come from
220
+ // InMemoryFixtureProvider against MOCK_HOST. No bench, no demo.frappe.cloud.
153
221
  // ---------------------------------------------------------------------------
154
222
 
155
- const liveTodoFixtures = [
223
+ const todoFixtures = [
156
224
  { name: "TD-1", doctype: "ToDo", description: "Fixture todo A", status: "Open" },
157
225
  { name: "TD-2", doctype: "ToDo", description: "Fixture todo B", status: "Open" },
158
226
  { name: "TD-3", doctype: "ToDo", description: "Fixture todo C", status: "Closed" },
159
227
  ];
160
228
 
161
- export const LiveToDoCount = () => (
162
- <FrappeStoryProvider fixtures={new InMemoryFixtureProvider({ ToDo: liveTodoFixtures })}>
229
+ const makeTodoFixtures = () => new InMemoryFixtureProvider({ ToDo: todoFixtures });
230
+
231
+ function ToDoCountCards() {
232
+ return (
163
233
  <XStack gap="$3" flexWrap="wrap">
164
234
  <FrappeKPICard
165
235
  width={280}
@@ -174,13 +244,43 @@ export const LiveToDoCount = () => (
174
244
  dataSource={{ doctype: "ToDo", filters: { status: "Open" } }}
175
245
  />
176
246
  </XStack>
177
- </FrappeStoryProvider>
247
+ );
248
+ }
249
+
250
+ /** Default path: fixture counts on MOCK_HOST (Kitchen Sink / TestFlight). */
251
+ export const LiveToDoCount = () => (
252
+ <FrappeProvider baseURL={MOCK_HOST} fixtures={makeTodoFixtures()}>
253
+ <ToDoCountCards />
254
+ </FrappeProvider>
178
255
  );
179
256
  LiveToDoCount.parameters = {
180
257
  docs: {
181
258
  description: {
182
259
  story:
183
- "LIVE server-side count of ToDo documents (frappe.client.get_count), refetched with a 300ms coalescing window on realtime events. Both cards watch the same doctype and share one refcounted realtime room subscription. Create/delete a ToDo on the bench and the numbers update in place — no reload.",
260
+ "Hermetic server-side count of fixture ToDo documents (3 total, 2 Open) via useFrappeAggregate + InMemoryFixtureProvider. DocType meta is served by the in-story fetch mock at https://frappekpicard.mock.test nothing leaves the machine.",
261
+ },
262
+ },
263
+ };
264
+
265
+ // ---------------------------------------------------------------------------
266
+ // Live bench story — real aggregates when the bench is reachable
267
+ // ---------------------------------------------------------------------------
268
+
269
+ /**
270
+ * Live aggregates against the real bench: frappe.client.get_count, refetched
271
+ * with a 300ms coalescing window on realtime list_update / doc_update /
272
+ * doc_deleted. Falls back to the same fixtures when the bench is down.
273
+ */
274
+ export const Live = () => (
275
+ <FrappeStoryProvider fixtures={makeTodoFixtures()}>
276
+ <ToDoCountCards />
277
+ </FrappeStoryProvider>
278
+ );
279
+ Live.parameters = {
280
+ docs: {
281
+ description: {
282
+ story:
283
+ "LIVE server-side count of ToDo documents (frappe.client.get_count), refetched with a 300ms coalescing window on realtime events. Both cards watch the same doctype and share one refcounted realtime room subscription. Create/delete a ToDo on the bench and the numbers update in place — no reload. Fixture fallback when the bench is down.",
184
284
  },
185
285
  },
186
286
  };
@@ -14,14 +14,14 @@
14
14
  */
15
15
  import {
16
16
  AsyncBoundary,
17
+ Card,
17
18
  KPICard,
18
19
  Skeleton,
19
20
  type KPICardConfig,
20
21
  } from "@multiplatform.one/components";
21
22
  import React, { useMemo } from "react";
22
23
  import { useTranslation } from "react-i18next";
23
- import { Card, YStack, type YStackProps } from "tamagui";
24
- import { useResolvedKnobs } from "@multiplatform.one/theme";
24
+ import { type YStackProps } from "tamagui";
25
25
  import { useFrappeConfig } from "./FrappeProvider";
26
26
  import {
27
27
  useFrappeAggregate,
@@ -56,28 +56,12 @@ export interface FrappeKPICardProps extends Omit<YStackProps, "children"> {
56
56
 
57
57
  /** Card-shaped skeleton so the live KPI's first load doesn't jump layout. */
58
58
  function KPICardSkeleton(stackProps: YStackProps) {
59
- const { knobProps } = useResolvedKnobs();
60
59
  const { t } = useTranslation();
61
60
  return (
62
- <Card
63
- size={knobProps.sizeToken}
64
- borderRadius={knobProps.borderRadius.borderRadius}
65
- elevation={knobProps.elevation}
66
- borderWidth={1}
67
- borderColor="$borderColor"
68
- aria-busy
69
- aria-label={t("Loading")}
70
- {...stackProps}
71
- >
72
- <Card.Header {...knobProps.panelPadding}>
73
- <Skeleton width="50%" height={12} />
74
- </Card.Header>
75
- <Card.Footer {...knobProps.panelPadding}>
76
- <YStack {...knobProps.gap}>
77
- <Skeleton width="70%" height={28} />
78
- <Skeleton width="40%" height={12} />
79
- </YStack>
80
- </Card.Footer>
61
+ <Card aria-busy aria-label={t("Loading")} {...stackProps}>
62
+ <Skeleton width="50%" />
63
+ <Skeleton width="70%" />
64
+ <Skeleton width="40%" />
81
65
  </Card>
82
66
  );
83
67
  }
@@ -14,12 +14,117 @@ export default {
14
14
  docs: {
15
15
  description: {
16
16
  component:
17
- "Kanban over useFrappeCollection / useLiveQuery; card moves persist status via collection.update. Stories use InMemoryFixtureProvider (live path + fixtures, not a static columns/items prop).",
17
+ "Kanban over useFrappeCollection / useLiveQuery; card moves persist status via collection.update. 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.",
18
18
  },
19
19
  },
20
20
  },
21
21
  };
22
22
 
23
+ // ---------------------------------------------------------------------------
24
+ // Hermetic story host (G-15 story honesty / D-05, closes UX-P18).
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; ERR_HOST is the deliberate
31
+ // failure host for the error-state story.
32
+ // ---------------------------------------------------------------------------
33
+
34
+ const MOCK_HOST = "https://frappekanban.mock.test";
35
+ const ERR_HOST = "https://forbidden.frappekanban.mock.test";
36
+
37
+ function todoMetaRaw(name: string) {
38
+ return {
39
+ name,
40
+ module: "Desk",
41
+ title_field: "description",
42
+ fields: [
43
+ { fieldname: "description", fieldtype: "Text", label: "Description", in_list_view: 1 },
44
+ {
45
+ fieldname: "status",
46
+ fieldtype: "Select",
47
+ label: "Status",
48
+ options: "Open\nWorking\nPending Review\nCompleted",
49
+ in_list_view: 1,
50
+ in_standard_filter: 1,
51
+ },
52
+ ],
53
+ permissions: [{ role: "All", read: 1, write: 1, create: 1 }],
54
+ };
55
+ }
56
+
57
+ function bugMetaRaw(name: string) {
58
+ return {
59
+ name,
60
+ module: "QA",
61
+ title_field: "title",
62
+ fields: [
63
+ { fieldname: "title", fieldtype: "Data", label: "Title", in_list_view: 1 },
64
+ {
65
+ fieldname: "severity",
66
+ fieldtype: "Select",
67
+ label: "Severity",
68
+ options: "Critical\nHigh\nMedium\nLow",
69
+ in_list_view: 1,
70
+ },
71
+ {
72
+ fieldname: "status",
73
+ fieldtype: "Select",
74
+ label: "Status",
75
+ options: "New\nConfirmed\nIn Progress\nTesting\nClosed",
76
+ in_list_view: 1,
77
+ in_standard_filter: 1,
78
+ },
79
+ ],
80
+ permissions: [{ role: "All", read: 1, write: 1, create: 1 }],
81
+ };
82
+ }
83
+
84
+ function metaFor(doctype: string) {
85
+ return doctype === "Bug" ? bugMetaRaw(doctype) : todoMetaRaw(doctype);
86
+ }
87
+
88
+ function jsonResponse(body: unknown, status = 200): Response {
89
+ return new Response(JSON.stringify(body), {
90
+ status,
91
+ headers: { "Content-Type": "application/json" },
92
+ });
93
+ }
94
+
95
+ (() => {
96
+ if (typeof window === "undefined") return;
97
+ const w = window as unknown as Record<string, unknown>;
98
+ if (w.__frappeKanbanMockFetch) return;
99
+ w.__frappeKanbanMockFetch = true;
100
+ const realFetch = window.fetch.bind(window);
101
+ window.fetch = async (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {
102
+ const urlStr =
103
+ typeof input === "string" ? input : input instanceof URL ? input.toString() : input.url;
104
+ if (urlStr.startsWith(ERR_HOST)) return jsonResponse({ message: "Not permitted" }, 403);
105
+ if (urlStr.startsWith(MOCK_HOST)) {
106
+ const url = new URL(urlStr);
107
+ if (url.pathname === "/api/method/frappe.desk.form.load.getdoctype") {
108
+ const doctype = url.searchParams.get("doctype") || "ToDo";
109
+ return jsonResponse({ docs: [metaFor(doctype)] });
110
+ }
111
+ const metaMatch = url.pathname.match(/^\/api\/resource\/DocType\/(.+)$/);
112
+ if (metaMatch) return jsonResponse({ data: metaFor(decodeURIComponent(metaMatch[1])) });
113
+ if (url.pathname === "/api/resource/DocType") {
114
+ return jsonResponse({
115
+ data: [
116
+ { name: "ToDo", module: "Desk" },
117
+ { name: "Bug", module: "QA" },
118
+ ],
119
+ });
120
+ }
121
+ // Everything else (guest field-peek, counts): empty, never the network.
122
+ return jsonResponse({ data: [] });
123
+ }
124
+ return realFetch(input as RequestInfo, init);
125
+ };
126
+ })();
127
+
23
128
  interface ToDo {
24
129
  name: string;
25
130
  doctype: string;
@@ -45,7 +150,7 @@ const todoColumns: KanbanColumn[] = [
45
150
 
46
151
  export const Default = () => (
47
152
  <FrappeProvider
48
- baseURL="https://demo.frappe.cloud"
153
+ baseURL={MOCK_HOST}
49
154
  fixtures={new InMemoryFixtureProvider({ ToDo: todoFixtures })}
50
155
  >
51
156
  <FrappeKanban<ToDo>
@@ -70,7 +175,7 @@ Default.parameters = {
70
175
  Default.storyName = "Main";
71
176
  export const WithCardCreation = () => (
72
177
  <FrappeProvider
73
- baseURL="https://demo.frappe.cloud"
178
+ baseURL={MOCK_HOST}
74
179
  fixtures={new InMemoryFixtureProvider({ ToDo: todoFixtures })}
75
180
  >
76
181
  <FrappeKanban<ToDo>
@@ -206,7 +311,7 @@ const bugColumns: KanbanColumn[] = [
206
311
 
207
312
  export const BugTracker = () => (
208
313
  <FrappeProvider
209
- baseURL="https://demo.frappe.cloud"
314
+ baseURL={MOCK_HOST}
210
315
  fixtures={new InMemoryFixtureProvider({ Bug: bugFixtures })}
211
316
  >
212
317
  <FrappeKanban<Bug>
@@ -242,7 +347,7 @@ class PendingFixtureProvider extends InMemoryFixtureProvider {
242
347
 
243
348
  /** Collection stuck syncing with an empty board: the kanban skeleton renders (LC-20 / DG-ST-02). */
244
349
  export const Loading = () => (
245
- <FrappeProvider baseURL="https://demo.frappe.cloud" fixtures={new PendingFixtureProvider()}>
350
+ <FrappeProvider baseURL={MOCK_HOST} fixtures={new PendingFixtureProvider()}>
246
351
  <FrappeKanban<ToDo>
247
352
  doctype="ToDo"
248
353
  columns={todoColumns}
@@ -256,7 +361,7 @@ export const Loading = () => (
256
361
  /** Zero documents, no failure — configured columns render with per-column "No items" (empty ≠ error). */
257
362
  export const Empty = () => (
258
363
  <FrappeProvider
259
- baseURL="https://demo.frappe.cloud"
364
+ baseURL={MOCK_HOST}
260
365
  fixtures={new InMemoryFixtureProvider({ ToDo: [] })}
261
366
  >
262
367
  <FrappeKanban<ToDo>
@@ -270,11 +375,12 @@ export const Empty = () => (
270
375
  );
271
376
 
272
377
  /**
273
- * Live collection against an unreachable host with no fixtures: the `error`
274
- * render prop shows instead of empty board chrome (DG-ST-01 / SB-M-806 pattern).
378
+ * Collection that fails with no fixtures: the `error` render prop shows
379
+ * instead of empty board chrome (DG-ST-01 / SB-M-806 pattern). The failure
380
+ * is served hermetically — the in-story mock answers ERR_HOST with 403.
275
381
  */
276
382
  export const LoadError = () => (
277
- <FrappeProvider baseURL="https://frappe-kanban-error.mock.test">
383
+ <FrappeProvider baseURL={ERR_HOST}>
278
384
  <FrappeKanban<ToDo>
279
385
  doctype="ToDo"
280
386
  columns={todoColumns}
@@ -1,10 +1,11 @@
1
1
  import { useFrappeCollection, useLiveQuery } from "@multiplatform.one/frappe";
2
2
  import {
3
3
  Kanban,
4
+ componentColors,
4
5
  type KanbanColumn as GenericKanbanColumn,
5
6
  type KanbanProps,
6
7
  } from "@multiplatform.one/components";
7
- import { Button } from "@multiplatform.one/forms";
8
+ import { Button, formCommonColors } from "@multiplatform.one/forms";
8
9
  import { PlusIcon } from "@phosphor-icons/react";
9
10
  import React, { useMemo, useCallback, useState } from "react";
10
11
  import { useTranslation } from "react-i18next";
@@ -176,7 +177,7 @@ export function FrappeKanban<TDoc extends { name: string; doctype: string }>({
176
177
  id: "__unassigned__",
177
178
  title: t("Unassigned"),
178
179
  items: unknown,
179
- color: "#94A3B8",
180
+ color: componentColors.text.subtle,
180
181
  });
181
182
  }
182
183
  return result;
@@ -193,12 +194,12 @@ export function FrappeKanban<TDoc extends { name: string; doctype: string }>({
193
194
  ? (item as Record<string, unknown>)[descriptionField]
194
195
  : undefined;
195
196
  return (
196
- <YStack {...knobProps.panelPadding}>
197
- <Text fontWeight="500" fontSize={knobProps.sizeToken}>
197
+ <YStack {...knobProps.panelPadding} {...knobProps.gap}>
198
+ <Text {...knobProps.label} {...knobProps.textWeight}>
198
199
  {(title as React.ReactNode) || item.name}
199
200
  </Text>
200
201
  {desc != null && desc !== "" && (
201
- <Text fontSize="$2" color="$color10" marginTop="$1">
202
+ <Text color={formCommonColors.muted} {...knobProps.body}>
202
203
  {String(desc)}
203
204
  </Text>
204
205
  )}
@@ -257,7 +258,7 @@ export function FrappeKanban<TDoc extends { name: string; doctype: string }>({
257
258
  size="$2"
258
259
  circular
259
260
  chromeless
260
- icon={<PlusIcon size={14} />}
261
+ icon={PlusIcon}
261
262
  aria-label={t("Add card to {{column}}", { column: column.title })}
262
263
  onPress={() => {
263
264
  setActionError(null);
@@ -300,13 +301,13 @@ export function FrappeKanban<TDoc extends { name: string; doctype: string }>({
300
301
  {actionError && (
301
302
  <YStack
302
303
  {...knobProps.panelPadding}
303
- {...knobProps.borderRadius}
304
+ {...knobProps.containerRadius}
304
305
  backgroundColor="$red2"
305
306
  borderColor="$red7"
306
307
  borderWidth={1}
307
308
  >
308
- <Text color="$red11">{t("Action failed")}</Text>
309
- <Text color="$color10" fontSize="$2">
309
+ <Text color={formCommonColors.error}>{t("Action failed")}</Text>
310
+ <Text color={formCommonColors.muted} {...knobProps.body}>
310
311
  {actionError.message}
311
312
  </Text>
312
313
  </YStack>