@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
@@ -8,7 +8,8 @@
8
8
  * asserted by inspecting the element they produce (the adapters under test
9
9
  * are plain functions without hooks, so calling them directly is safe).
10
10
  */
11
- import { Combobox, ImageField } from "@multiplatform.one/forms";
11
+ import { Button, Combobox, ImageField } from "@multiplatform.one/forms";
12
+ import type { FrappeFieldType } from "@multiplatform.one/frappe";
12
13
  import type React from "react";
13
14
  import { describe, expect, it } from "vitest";
14
15
  import {
@@ -18,6 +19,7 @@ import {
18
19
  type ChildTableFieldDef,
19
20
  type FieldRenderProps,
20
21
  } from "./fieldRegistry";
22
+ import { Icon } from "./fields/Icon";
21
23
  import { Link } from "./fields/Link";
22
24
  import { Rating } from "./fields/Rating";
23
25
 
@@ -81,6 +83,16 @@ describe("fieldtypeToTableField (cell context)", () => {
81
83
  expect(element.props.compact).toBe(true);
82
84
  });
83
85
 
86
+ it("maps Icon to the Icon picker cell (compact), honoring render context", () => {
87
+ const render = customRenderOf(fieldtypeToTableField("Icon"));
88
+ const element = render("mail", {}, () => {});
89
+ expect(element.type).toBe(Icon);
90
+ expect(element.props.value).toBe("mail");
91
+ expect(element.props.compact).toBe(true);
92
+ const readOnlyElement = render("mail", {}, () => {}, { readOnly: true, disabled: false });
93
+ expect(readOnlyElement.props.readOnly).toBe(true);
94
+ });
95
+
84
96
  it("Rating star count comes from df.options (stock cint(df.options) || 5)", () => {
85
97
  const render = customRenderOf(fieldtypeToTableField("Rating", "7"));
86
98
  const element = render(0.5, {}, () => {});
@@ -224,4 +236,122 @@ describe("form adapters (registry context)", () => {
224
236
  it("unregistered fieldtypes resolve to undefined (SchemaForm renders the honest fallback)", () => {
225
237
  expect(getFieldComponent("Some Custom Type")).toBeUndefined();
226
238
  });
239
+
240
+ it("Attach and Attach Image forward the library feed (MPO-53 AC-11 clobber guard)", () => {
241
+ // 035867446 rewrote these adapters and silently dropped the
242
+ // library/libraryFiles/libraryFolder pass-through, severing Attach's
243
+ // choose-from-library tab from every schema-driven form. The feed is part
244
+ // of the adapter contract; this pins it.
245
+ const files = [
246
+ { name: "inv-1", file_name: "invoice.pdf", folder: "Home", file_url: "/files/invoice.pdf" },
247
+ ];
248
+ for (const fieldtype of ["Attach", "Attach Image"]) {
249
+ const Component = getFieldComponent(fieldtype)!;
250
+ const element = (Component as Function)(
251
+ propsFor({ value: null, libraryFiles: files, libraryFolder: "Home" }),
252
+ ) as InspectableElement;
253
+ expect(element.props.library).toBe(true);
254
+ expect(element.props.libraryFiles).toBe(files);
255
+ expect(element.props.libraryFolder).toBe("Home");
256
+ }
257
+ const AttachComponent = getFieldComponent("Attach")!;
258
+ const disabledTab = (AttachComponent as Function)(
259
+ propsFor({ value: null, library: false }),
260
+ ) as InspectableElement;
261
+ expect(disabledTab.props.library).toBe(false);
262
+ });
263
+
264
+ it("Icon is registered and adapts to the Icon picker", () => {
265
+ const IconComponent = getFieldComponent("Icon")!;
266
+ expect(IconComponent).toBeDefined();
267
+ const element = (IconComponent as Function)(
268
+ propsFor({
269
+ value: "mail",
270
+ fieldMeta: { type: "Icon", name: "workspace_icon" },
271
+ }),
272
+ ) as InspectableElement;
273
+ expect(element.type).toBe(Icon);
274
+ expect(element.props.value).toBe("mail");
275
+ });
276
+
277
+ it("union-minus-registry holds no real fieldtype (layout breaks only)", () => {
278
+ // Every FrappeFieldType member from public/frappe/src/doctype.ts. A real
279
+ // fieldtype missing from the registry renders the unsupported-type string
280
+ // (the MPO-51 Icon hole, reopened once already by 035867446's registry
281
+ // rewrite), so this list is asserted against the registry wholesale.
282
+ const frappeFieldTypes: readonly FrappeFieldType[] = [
283
+ "Autocomplete",
284
+ "Attach",
285
+ "Attach Image",
286
+ "Barcode",
287
+ "Button",
288
+ "Check",
289
+ "Code",
290
+ "Color",
291
+ "Column Break",
292
+ "Currency",
293
+ "Data",
294
+ "Date",
295
+ "Datetime",
296
+ "Duration",
297
+ "Dynamic Link",
298
+ "Float",
299
+ "Geolocation",
300
+ "HTML",
301
+ "HTML Editor",
302
+ "Heading",
303
+ "Icon",
304
+ "Image",
305
+ "Int",
306
+ "JSON",
307
+ "Link",
308
+ "Long Text",
309
+ "Markdown Editor",
310
+ "Password",
311
+ "Percent",
312
+ "Phone",
313
+ "Rating",
314
+ "Read Only",
315
+ "Section Break",
316
+ "Select",
317
+ "Signature",
318
+ "Small Text",
319
+ "Tab Break",
320
+ "Table",
321
+ "Table MultiSelect",
322
+ "Text",
323
+ "Text Editor",
324
+ "Time",
325
+ ];
326
+ const unregistered = frappeFieldTypes.filter((fieldtype) => !getFieldComponent(fieldtype));
327
+ // The three layout breaks never get adapters — FormSection / FormGrid /
328
+ // Tabs serve them structurally.
329
+ const layoutBreaks = ["Column Break", "Section Break", "Tab Break"];
330
+ for (const layoutBreak of layoutBreaks) {
331
+ expect(unregistered).toContain(layoutBreak);
332
+ }
333
+ expect(unregistered).not.toContain("Icon");
334
+ // "Button" is transiently tolerated here: its adapter (a8f8f52bd) was
335
+ // reverted by the same 035867446 rewrite and is being restored on
336
+ // lane/MPO-51-button-fieldtype. Drop it from this allowlist when that
337
+ // lands — the Button spec below pins the adapter itself.
338
+ for (const fieldtype of unregistered) {
339
+ expect([...layoutBreaks, "Button"]).toContain(fieldtype);
340
+ }
341
+ });
342
+
343
+ it("Button is in the FrappeFieldType union and adapts to the house Button", () => {
344
+ const fieldtype: FrappeFieldType = "Button";
345
+ expect(fieldtype).toBe("Button");
346
+ const ButtonComponent = getFieldComponent("Button")!;
347
+ expect(ButtonComponent).toBeDefined();
348
+ const element = (ButtonComponent as Function)(
349
+ propsFor({
350
+ label: "Make Payment Entry",
351
+ fieldMeta: { type: "Button", name: "make_payment_entry" },
352
+ }),
353
+ ) as InspectableElement;
354
+ expect(element.type).toBe(Button);
355
+ expect(element.props.children).toBe("Make Payment Entry");
356
+ });
227
357
  });
@@ -9,7 +9,7 @@
9
9
  import React, { useMemo } from "react";
10
10
  import type { ComponentType } from "react";
11
11
  import { useDocTypeMeta } from "@multiplatform.one/frappe";
12
- import { CheckboxGroup, Combobox, ImageField } from "@multiplatform.one/forms";
12
+ import { Button, CheckboxGroup, Combobox, ImageField, Skeleton } from "@multiplatform.one/forms";
13
13
 
14
14
  import { Barcode } from "./fields/Barcode";
15
15
  import { useFrappeConfig } from "./FrappeProvider";
@@ -26,6 +26,7 @@ import { TimePicker } from "./fields/TimePicker";
26
26
  import { Geolocation } from "./fields/Geolocation";
27
27
  import { Heading } from "./fields/Heading";
28
28
  import { Html } from "./fields/HTML";
29
+ import { Icon } from "./fields/Icon";
29
30
  import { Link } from "./fields/Link";
30
31
  import { LongText } from "./fields/LongText";
31
32
  import { MarkdownEditorField } from "./fields/MarkdownEditor";
@@ -165,6 +166,10 @@ function disabledInputBlock(props: FieldRenderProps) {
165
166
  return props.disabled ? { inputProps: { readOnly: true, tabIndex: -1 } } : undefined;
166
167
  }
167
168
 
169
+ function disabledTextAreaBlock(props: FieldRenderProps) {
170
+ return props.disabled ? { textAreaProps: { readOnly: true, tabIndex: -1 } } : undefined;
171
+ }
172
+
168
173
  function DataAdapter(props: FieldRenderProps) {
169
174
  return React.createElement(Data, {
170
175
  label: props.label,
@@ -391,6 +396,20 @@ function ColorAdapter(props: FieldRenderProps) {
391
396
  });
392
397
  }
393
398
 
399
+ function IconAdapter(props: FieldRenderProps) {
400
+ const rawOptions = props.fieldMeta?.options ?? props.options ?? "";
401
+ return React.createElement(Icon, {
402
+ label: props.label,
403
+ value: props.value ?? "",
404
+ onChange: props.onChange,
405
+ disabled: props.disabled,
406
+ required: props.required,
407
+ error: props.error,
408
+ options: typeof rawOptions === "string" ? rawOptions : undefined,
409
+ ...passthroughProps(props),
410
+ });
411
+ }
412
+
394
413
  function SmallTextAdapter(props: FieldRenderProps) {
395
414
  return React.createElement(SmallText, {
396
415
  label: props.label,
@@ -400,7 +419,7 @@ function SmallTextAdapter(props: FieldRenderProps) {
400
419
  required: props.required,
401
420
  error: props.error,
402
421
  ...passthroughProps(props),
403
- ...disabledInputBlock(props),
422
+ ...disabledTextAreaBlock(props),
404
423
  });
405
424
  }
406
425
 
@@ -413,14 +432,20 @@ function LongTextAdapter(props: FieldRenderProps) {
413
432
  required: props.required,
414
433
  error: props.error,
415
434
  ...passthroughProps(props),
416
- ...disabledInputBlock(props),
435
+ ...disabledTextAreaBlock(props),
417
436
  });
418
437
  }
419
438
 
420
439
  function TextEditorAdapter(props: FieldRenderProps) {
421
440
  return React.createElement(
422
441
  React.Suspense,
423
- { fallback: React.createElement("div", null, "Loading editor...") },
442
+ {
443
+ fallback: React.createElement(Skeleton, {
444
+ width: "100%",
445
+ height: 160,
446
+ "aria-label": "Loading editor",
447
+ }),
448
+ },
424
449
  React.createElement(LazyTextEditor, {
425
450
  label: props.label,
426
451
  value: props.value ?? "",
@@ -635,6 +660,41 @@ function HeadingAdapter(props: FieldRenderProps) {
635
660
  });
636
661
  }
637
662
 
663
+ /**
664
+ * Frappe `Button` is an ACTION field: it carries no stored value, so it is
665
+ * not a layout break and must not be swallowed by schemaForm. The house
666
+ * Button is the renderer slot; label copy is the DocField author's
667
+ * (DG-ACT-02) and the adapter never sets `accent`, so a form's own submit
668
+ * keeps the one primary (DG-ACT-01).
669
+ *
670
+ * LC-14: `onChange` is the canonical channel for fields that hold a VALUE.
671
+ * A Button holds none, so the adapter never fires it — a press would
672
+ * otherwise write a doc field that does not exist. Press wiring arrives on
673
+ * `onPress` through a field override (DG-CTRL-06, the eject hatch); with no
674
+ * override the button renders inert rather than inventing a doc write.
675
+ *
676
+ * Restored after the MPO-60 fieldRegistry rewrite (035867446) merged over
677
+ * the MPO-51 registration (a8f8f52bd, gitlab.com !77) and silently dropped
678
+ * it — CI runs only `turbo run build` (MPO-78), so the red spec never
679
+ * surfaced.
680
+ */
681
+ function ButtonAdapter(props: FieldRenderProps) {
682
+ const disabled = Boolean(props.disabled || props.readOnly);
683
+ const reason =
684
+ (typeof props.disabledReason === "string" && props.disabledReason.trim()) ||
685
+ props.helperText ||
686
+ (typeof props.fieldMeta?.description === "string" ? props.fieldMeta.description : undefined) ||
687
+ (props.readOnly ? "Read only" : undefined);
688
+ return React.createElement(Button, {
689
+ disabled,
690
+ disabledReason: disabled ? String(reason ?? "Unavailable") : undefined,
691
+ skeleton: props.skeleton,
692
+ compact: props.compact,
693
+ onPress: disabled ? undefined : props.onPress,
694
+ children: props.label,
695
+ });
696
+ }
697
+
638
698
  // ---------------------------------------------------------------------------
639
699
  // Adapter components — new field types (forms integration)
640
700
  // ---------------------------------------------------------------------------
@@ -770,6 +830,11 @@ function FileUploadAdapter(props: FieldRenderProps) {
770
830
  disabled: props.disabled,
771
831
  required: props.required,
772
832
  error: props.error,
833
+ // Attach's choose-from-library tab (FileBrowser, MPO-53 AC-11). The feed
834
+ // rides the registry so schema-driven Attach fields reach the library.
835
+ library: props.library !== false,
836
+ libraryFiles: props.libraryFiles,
837
+ libraryFolder: props.libraryFolder,
773
838
  ...passthroughProps(props),
774
839
  });
775
840
  }
@@ -782,6 +847,9 @@ function FileUploadImageAdapter(props: FieldRenderProps) {
782
847
  disabled: props.disabled,
783
848
  required: props.required,
784
849
  error: props.error,
850
+ library: props.library !== false,
851
+ libraryFiles: props.libraryFiles,
852
+ libraryFolder: props.libraryFolder,
785
853
  ...passthroughProps(props),
786
854
  isImage: true,
787
855
  });
@@ -940,6 +1008,25 @@ export function fieldtypeToTableField(
940
1008
  return { field: "timepicker" };
941
1009
  case "Color":
942
1010
  return { field: "colorpicker" };
1011
+ case "Icon":
1012
+ return {
1013
+ field: "custom",
1014
+ fieldProps: {
1015
+ render: (
1016
+ value: unknown,
1017
+ _rowData: unknown,
1018
+ onCellChange: (v: unknown) => void,
1019
+ context?: DataTableCellRenderContext,
1020
+ ) =>
1021
+ React.createElement(Icon, {
1022
+ value: value === null || value === undefined ? "" : String(value),
1023
+ onChange: onCellChange,
1024
+ compact: true,
1025
+ readOnly: context?.readOnly,
1026
+ disabled: context?.disabled,
1027
+ }),
1028
+ },
1029
+ };
943
1030
  case "Rating": {
944
1031
  // Frappe stores Rating as a 0–1 fraction of the star count (df.options,
945
1032
  // default 5). The generic rating cell treats values as star counts, so
@@ -1265,6 +1352,12 @@ export function initDefaultRegistry(): void {
1265
1352
  // Color
1266
1353
  registerField("Color", ColorAdapter);
1267
1354
 
1355
+ // Icon — picker over the DG-IDN-06 drawn set (MPO-51). MPO-22's Icon
1356
+ // line points here instead of restating the gap. Registration was first
1357
+ // landed by 3b0cf9902 and silently reverted by 035867446 (MPO-60), whose
1358
+ // registry rewrite was cut from a pre-MPO-51 base; this restores it.
1359
+ registerField("Icon", IconAdapter);
1360
+
1268
1361
  // Text types
1269
1362
  registerField("Small Text", SmallTextAdapter);
1270
1363
  registerField("Long Text", LongTextAdapter);
@@ -1298,6 +1391,9 @@ export function initDefaultRegistry(): void {
1298
1391
  // Heading
1299
1392
  registerField("Heading", HeadingAdapter);
1300
1393
 
1394
+ // Button — desk action field (MPO-51). Not a layout break; not a value.
1395
+ registerField("Button", ButtonAdapter);
1396
+
1301
1397
  // Rating
1302
1398
  registerField("Rating", RatingAdapter);
1303
1399
 
@@ -1,6 +1,9 @@
1
1
  import { action } from "@multiplatform.one/storybook";
2
+ import { DataTable, type DataTableColumn } from "@multiplatform.one/table";
2
3
  import { useState } from "react";
3
4
  import { YStack } from "tamagui";
5
+ import { fieldtypeToTableField } from "../../fieldRegistry";
6
+ import { FrappeStoryProvider } from "../../frappeStoryTarget";
4
7
  import { Barcode, type BarcodeProps } from ".";
5
8
 
6
9
  export default {
@@ -73,3 +76,32 @@ ContractProbe.args = {
73
76
  value: "5901234123457",
74
77
  enableScan: false,
75
78
  } as Partial<StoryProps>;
79
+
80
+ type BarcodeRow = { id: string; label: string; value: string };
81
+
82
+ export const InTable = {
83
+ name: "In table",
84
+ render: function InTableRender() {
85
+ const [data, setData] = useState<BarcodeRow[]>([
86
+ { id: "1", label: "Alpha", value: "5901234123457" },
87
+ { id: "2", label: "Beta", value: "0123456789012" },
88
+ { id: "3", label: "Gamma", value: "" },
89
+ ]);
90
+ const columns: DataTableColumn<BarcodeRow>[] = [
91
+ { accessorKey: "label", header: "Row" },
92
+ { accessorKey: "value", header: "SKU", ...fieldtypeToTableField("Barcode") },
93
+ ];
94
+ return (
95
+ <FrappeStoryProvider>
96
+ <YStack width="100%" height={320}>
97
+ <DataTable
98
+ data={data}
99
+ columns={columns}
100
+ enablePagination={false}
101
+ onDataChange={setData}
102
+ />
103
+ </YStack>
104
+ </FrappeStoryProvider>
105
+ );
106
+ },
107
+ };
@@ -0,0 +1,27 @@
1
+ // Design-law: Check is a thin Checkbox adapter. Never circular at any radius.
2
+ import { Preset } from "@multiplatform.one/theme";
3
+ import { cleanup } from "@testing-library/react";
4
+ import { afterEach, describe, expect, it } from "vitest";
5
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
6
+ import { Check } from "./index";
7
+
8
+ afterEach(cleanup);
9
+
10
+ describe("Check design-law — compose forms Checkbox", () => {
11
+ it("renders the house checkbox glyph box", () => {
12
+ const result = renderWithProviders(<Check label="Accept" />);
13
+ expect(result.container.querySelector("[data-checkbox-box='true']")).toBeTruthy();
14
+ });
15
+
16
+ it("stays non-circular at radius=full (checkbox override)", () => {
17
+ const result = renderWithProviders(
18
+ <Preset overrides={{ borderRadius: "full" }}>
19
+ <Check label="Accept" value />
20
+ </Preset>,
21
+ );
22
+ const box = result.container.querySelector("[data-checkbox-box='true']") as HTMLElement | null;
23
+ expect(box).toBeTruthy();
24
+ const radius = box?.style.borderRadius || getComputedStyle(box as Element).borderRadius;
25
+ expect(radius).not.toMatch(/50%|9999|999px/);
26
+ });
27
+ });
@@ -1,6 +1,9 @@
1
1
  import { action } from "@multiplatform.one/storybook";
2
+ import { DataTable, type DataTableColumn } from "@multiplatform.one/table";
2
3
  import { useState } from "react";
3
4
  import { YStack } from "tamagui";
5
+ import { fieldtypeToTableField } from "../../fieldRegistry";
6
+ import { FrappeStoryProvider } from "../../frappeStoryTarget";
4
7
  import { Check, type CheckProps } from ".";
5
8
 
6
9
  export default {
@@ -58,3 +61,58 @@ AllStates.parameters = {
58
61
  },
59
62
  },
60
63
  };
64
+
65
+ interface CheckCellRow {
66
+ id: string;
67
+ label: string;
68
+ value: boolean;
69
+ }
70
+
71
+ const checkCellRows: CheckCellRow[] = [
72
+ { id: "1", label: "Alpha", value: true },
73
+ { id: "2", label: "Beta", value: false },
74
+ { id: "3", label: "Gamma", value: false },
75
+ ];
76
+
77
+ const checkCellColumns: DataTableColumn<CheckCellRow>[] = [
78
+ { accessorKey: "label", header: "Row" },
79
+ {
80
+ accessorKey: "value",
81
+ header: "Check",
82
+ ...fieldtypeToTableField("Check"),
83
+ } as DataTableColumn<CheckCellRow>,
84
+ ];
85
+
86
+ function InTableStory() {
87
+ const [data, setData] = useState(checkCellRows);
88
+ return (
89
+ <YStack width="100%" height={280}>
90
+ <DataTable
91
+ data={data}
92
+ columns={checkCellColumns as DataTableColumn<Record<string, any>>[]}
93
+ enablePagination={false}
94
+ onDataChange={(next: Record<string, any>[]) => {
95
+ setData(next as CheckCellRow[]);
96
+ action("onDataChange")(next);
97
+ }}
98
+ aria-label="Check cell editor table"
99
+ />
100
+ </YStack>
101
+ );
102
+ }
103
+
104
+ /** 3-row DataTable mapped through fieldtypeToTableField("Check") — in-cell checkbox. */
105
+ export const InTable = () => (
106
+ <FrappeStoryProvider>
107
+ <InTableStory />
108
+ </FrappeStoryProvider>
109
+ );
110
+ InTable.storyName = "In table";
111
+ InTable.parameters = {
112
+ docs: {
113
+ description: {
114
+ story:
115
+ "Check inside a table cell: the registry maps the fieldtype to an in-cell checkbox. Three rows of mock DocType data; toggles commit through onDataChange.",
116
+ },
117
+ },
118
+ };
@@ -1,3 +1,9 @@
1
+ /**
2
+ * Frappe Check field — thin adapter over forms Checkbox.
3
+ *
4
+ * Design-law lives on this file: compose Checkbox, do not fork its chrome.
5
+ * Radius stays NEVER circular (Checkbox clamp / per-component override).
6
+ */
1
7
  import type { FormFieldProps, FieldComponentProps } from "@multiplatform.one/forms";
2
8
  import { Checkbox as FormsCheckbox } from "@multiplatform.one/forms";
3
9
  import type { DeepKeys } from "@tanstack/form-core";
@@ -75,7 +81,7 @@ export function Check<
75
81
  id={fieldProps.id}
76
82
  size={fieldProps.size}
77
83
  checked={value}
78
- onCheckedChange={(checked) => onChange?.(checked === true)}
84
+ onChange={(checked) => onChange?.(checked === true)}
79
85
  onBlur={onBlur}
80
86
  disabled={disabled}
81
87
  checkboxProps={checkboxProps as any}
@@ -1,8 +1,11 @@
1
1
  import { Form, type AnyFormApi } from "@multiplatform.one/forms";
2
2
  import { action } from "@multiplatform.one/storybook";
3
+ import { DataTable, type DataTableColumn } from "@multiplatform.one/table";
3
4
  import { useForm } from "@tanstack/react-form";
4
5
  import { useState } from "react";
5
6
  import { Theme, YStack } from "tamagui";
7
+ import { fieldtypeToTableField } from "../../fieldRegistry";
8
+ import { FrappeStoryProvider } from "../../frappeStoryTarget";
6
9
  import { CodeEditorField, frappeCodeLanguage, type CodeEditorFieldProps } from ".";
7
10
 
8
11
  const PYTHON_FIXTURE = `import frappe
@@ -141,3 +144,32 @@ DarkScheme.args = {
141
144
  value: PYTHON_FIXTURE,
142
145
  language: "python",
143
146
  } as Partial<StoryProps>;
147
+
148
+ type CodeRow = { id: string; label: string; value: string };
149
+
150
+ export const InTable = {
151
+ name: "In table",
152
+ render: function InTableRender() {
153
+ const [data, setData] = useState<CodeRow[]>([
154
+ { id: "1", label: "Alpha", value: PYTHON_FIXTURE },
155
+ { id: "2", label: "Beta", value: JSON_FIXTURE },
156
+ { id: "3", label: "Gamma", value: "" },
157
+ ]);
158
+ const columns: DataTableColumn<CodeRow>[] = [
159
+ { accessorKey: "label", header: "Row" },
160
+ { accessorKey: "value", header: "Script", ...fieldtypeToTableField("Code") },
161
+ ];
162
+ return (
163
+ <FrappeStoryProvider>
164
+ <YStack width="100%" height={320}>
165
+ <DataTable
166
+ data={data}
167
+ columns={columns}
168
+ enablePagination={false}
169
+ onDataChange={setData}
170
+ />
171
+ </YStack>
172
+ </FrappeStoryProvider>
173
+ );
174
+ },
175
+ };
@@ -0,0 +1,21 @@
1
+ // Design-law: Color is a thin ColorPicker adapter. Do not fork picker chrome.
2
+ import { cleanup, screen } from "@testing-library/react";
3
+ import { afterEach, describe, expect, it, vi } from "vitest";
4
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
5
+ import { Color } from "./index";
6
+
7
+ afterEach(cleanup);
8
+
9
+ describe("Color design-law — compose forms ColorPicker", () => {
10
+ it("renders the house color field (hex input, no forked chrome)", () => {
11
+ const result = renderWithProviders(<Color label="Brand" value="#10B981" onChange={vi.fn()} />);
12
+ const input = result.container.querySelector("input") as HTMLInputElement | null;
13
+ expect(input).toBeTruthy();
14
+ expect(screen.getByText("Brand")).toBeTruthy();
15
+ });
16
+
17
+ it("forwards skeleton and hides the input", () => {
18
+ const result = renderWithProviders(<Color label="Brand" skeleton />);
19
+ expect(result.container.querySelector("input")).toBeNull();
20
+ });
21
+ });
@@ -1,6 +1,9 @@
1
1
  import { action } from "@multiplatform.one/storybook";
2
+ import { DataTable, type DataTableColumn } from "@multiplatform.one/table";
2
3
  import { useState } from "react";
3
4
  import { YStack } from "tamagui";
5
+ import { fieldtypeToTableField } from "../../fieldRegistry";
6
+ import { FrappeStoryProvider } from "../../frappeStoryTarget";
4
7
  import { Color, type ColorProps } from ".";
5
8
 
6
9
  export default {
@@ -68,3 +71,33 @@ AllStates.parameters = {
68
71
  },
69
72
  },
70
73
  };
74
+
75
+ interface ColorRow {
76
+ id: string;
77
+ label: string;
78
+ value: string;
79
+ }
80
+
81
+ export const InTable = () => {
82
+ const [data, setData] = useState<ColorRow[]>([
83
+ { id: "1", label: "Alpha", value: "#10B981" },
84
+ { id: "2", label: "Beta", value: "#F59E0B" },
85
+ { id: "3", label: "Gamma", value: "" },
86
+ ]);
87
+ const columns: DataTableColumn<ColorRow>[] = [
88
+ { accessorKey: "label", header: "Row" },
89
+ {
90
+ accessorKey: "value",
91
+ header: "Color",
92
+ ...fieldtypeToTableField("Color"),
93
+ },
94
+ ];
95
+ return (
96
+ <FrappeStoryProvider>
97
+ <YStack width="100%" height={280}>
98
+ <DataTable data={data} columns={columns} enablePagination={false} onDataChange={setData} />
99
+ </YStack>
100
+ </FrappeStoryProvider>
101
+ );
102
+ };
103
+ InTable.storyName = "In table";
@@ -1,3 +1,9 @@
1
+ /**
2
+ * Frappe Color field — thin adapter over forms ColorPicker.
3
+ *
4
+ * Design-law lives on this file: compose ColorPicker, do not fork its chrome.
5
+ * Canonical change is `onChange` (LC-14); a chosen hex is value data.
6
+ */
1
7
  import type { FormFieldProps, FieldComponentProps } from "@multiplatform.one/forms";
2
8
  import { ColorPicker as FormsColorPicker } from "@multiplatform.one/forms";
3
9
  import type { DeepKeys } from "@tanstack/form-core";
@@ -68,7 +74,7 @@ export function Color<
68
74
  form={form}
69
75
  validators={validators}
70
76
  value={value as string | undefined}
71
- onValueChange={onChange as ((v: string) => void) | undefined}
77
+ onChange={onChange as ((v: string) => void) | undefined}
72
78
  defaultValue={defaultValue as string}
73
79
  label={fieldProps.label}
74
80
  labelProps={fieldProps.labelProps}
@@ -0,0 +1,26 @@
1
+ // Design-law: Data is a thin Input adapter. Do not fork Input chrome.
2
+ import { cleanup } from "@testing-library/react";
3
+ import { afterEach, describe, expect, it } from "vitest";
4
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
5
+ import { Data } from "./index";
6
+
7
+ afterEach(cleanup);
8
+
9
+ describe("Data design-law — compose forms Input", () => {
10
+ it("renders the house Input box (data-ring-target=box)", () => {
11
+ const result = renderWithProviders(<Data label="Name" />);
12
+ expect(result.container.querySelector("input")).toBeTruthy();
13
+ expect(result.container.querySelector("[data-ring-target='box']")).toBeTruthy();
14
+ });
15
+
16
+ it("forwards skeleton and hides the input", () => {
17
+ const result = renderWithProviders(<Data label="Name" skeleton />);
18
+ expect(result.container.querySelector("input")).toBeNull();
19
+ });
20
+
21
+ it("forwards readOnly onto the input", () => {
22
+ const result = renderWithProviders(<Data label="Name" readOnly value="locked" />);
23
+ const input = result.container.querySelector("input") as HTMLInputElement | null;
24
+ expect(input?.readOnly || input?.getAttribute("aria-readonly")).toBeTruthy();
25
+ });
26
+ });