@multiplatform.one/frappe-ui 7.67.0 → 7.68.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 (268) hide show
  1. package/dist/cjs/FileBrowser/index.cjs +15 -25
  2. package/dist/cjs/FileBrowser/index.native.js +15 -25
  3. package/dist/cjs/FileBrowser/index.native.js.map +1 -1
  4. package/dist/cjs/FormSidebar.cjs +34 -22
  5. package/dist/cjs/FormSidebar.native.js +38 -24
  6. package/dist/cjs/FormSidebar.native.js.map +1 -1
  7. package/dist/cjs/FrappeAssignment.cjs +0 -3
  8. package/dist/cjs/FrappeAssignment.native.js +0 -3
  9. package/dist/cjs/FrappeAssignment.native.js.map +1 -1
  10. package/dist/cjs/FrappeDashboard.cjs +0 -2
  11. package/dist/cjs/FrappeDashboard.native.js +0 -2
  12. package/dist/cjs/FrappeDashboard.native.js.map +1 -1
  13. package/dist/cjs/FrappeForm.cjs +6 -5
  14. package/dist/cjs/FrappeForm.native.js +6 -5
  15. package/dist/cjs/FrappeForm.native.js.map +1 -1
  16. package/dist/cjs/FrappeFormActions.cjs +20 -30
  17. package/dist/cjs/FrappeFormActions.native.js +23 -31
  18. package/dist/cjs/FrappeFormActions.native.js.map +1 -1
  19. package/dist/cjs/FrappeKanban.cjs +0 -1
  20. package/dist/cjs/FrappeKanban.native.js +0 -1
  21. package/dist/cjs/FrappeKanban.native.js.map +1 -1
  22. package/dist/cjs/FrappeLikedBy.cjs +1 -1
  23. package/dist/cjs/FrappeLikedBy.native.js +1 -1
  24. package/dist/cjs/FrappeLikedBy.native.js.map +1 -1
  25. package/dist/cjs/FrappeListView.cjs +0 -1
  26. package/dist/cjs/FrappeListView.native.js +0 -1
  27. package/dist/cjs/FrappeListView.native.js.map +1 -1
  28. package/dist/cjs/FrappeReportView.cjs +2 -4
  29. package/dist/cjs/FrappeReportView.native.js +2 -4
  30. package/dist/cjs/FrappeReportView.native.js.map +1 -1
  31. package/dist/cjs/desk/DeskShell.cjs +0 -1
  32. package/dist/cjs/desk/DeskShell.native.js +0 -1
  33. package/dist/cjs/desk/DeskShell.native.js.map +1 -1
  34. package/dist/cjs/fields/FileUpload.cjs +50 -58
  35. package/dist/cjs/fields/FileUpload.native.js +50 -56
  36. package/dist/cjs/fields/FileUpload.native.js.map +1 -1
  37. package/dist/cjs/list/ListControls.cjs +1 -3
  38. package/dist/cjs/list/ListControls.native.js +1 -3
  39. package/dist/cjs/list/ListControls.native.js.map +1 -1
  40. package/dist/cjs/list/ListControlsSheet.cjs +5 -15
  41. package/dist/cjs/list/ListControlsSheet.native.js +7 -17
  42. package/dist/cjs/list/ListControlsSheet.native.js.map +1 -1
  43. package/dist/cjs/list/ListSidebarToolbar.cjs +5 -20
  44. package/dist/cjs/list/ListSidebarToolbar.native.js +7 -22
  45. package/dist/cjs/list/ListSidebarToolbar.native.js.map +1 -1
  46. package/dist/cjs/list/RecordCard.cjs +2 -14
  47. package/dist/cjs/list/RecordCard.native.js +2 -10
  48. package/dist/cjs/list/RecordCard.native.js.map +1 -1
  49. package/dist/cjs/list/ShufflePanel.cjs +0 -2
  50. package/dist/cjs/list/ShufflePanel.native.js +0 -2
  51. package/dist/cjs/list/ShufflePanel.native.js.map +1 -1
  52. package/dist/cjs/list/listColumns.cjs +1 -1
  53. package/dist/cjs/list/listColumns.native.js +1 -1
  54. package/dist/cjs/list/listColumns.native.js.map +1 -1
  55. package/dist/cjs/record/RecordPage.cjs +4 -10
  56. package/dist/cjs/record/RecordPage.native.js +4 -10
  57. package/dist/cjs/record/RecordPage.native.js.map +1 -1
  58. package/dist/cjs/report/ReportViewToolbar.cjs +8 -10
  59. package/dist/cjs/report/ReportViewToolbar.native.js +8 -10
  60. package/dist/cjs/report/ReportViewToolbar.native.js.map +1 -1
  61. package/dist/esm/FileBrowser/index.mjs +16 -26
  62. package/dist/esm/FileBrowser/index.mjs.map +1 -1
  63. package/dist/esm/FileBrowser/index.native.js +16 -26
  64. package/dist/esm/FileBrowser/index.native.js.map +1 -1
  65. package/dist/esm/FormSidebar.mjs +37 -25
  66. package/dist/esm/FormSidebar.mjs.map +1 -1
  67. package/dist/esm/FormSidebar.native.js +41 -27
  68. package/dist/esm/FormSidebar.native.js.map +1 -1
  69. package/dist/esm/FrappeAssignment.mjs +0 -3
  70. package/dist/esm/FrappeAssignment.mjs.map +1 -1
  71. package/dist/esm/FrappeAssignment.native.js +0 -3
  72. package/dist/esm/FrappeAssignment.native.js.map +1 -1
  73. package/dist/esm/FrappeDashboard.mjs +0 -2
  74. package/dist/esm/FrappeDashboard.mjs.map +1 -1
  75. package/dist/esm/FrappeDashboard.native.js +0 -2
  76. package/dist/esm/FrappeDashboard.native.js.map +1 -1
  77. package/dist/esm/FrappeForm.mjs +7 -6
  78. package/dist/esm/FrappeForm.mjs.map +1 -1
  79. package/dist/esm/FrappeForm.native.js +7 -6
  80. package/dist/esm/FrappeForm.native.js.map +1 -1
  81. package/dist/esm/FrappeFormActions.mjs +22 -32
  82. package/dist/esm/FrappeFormActions.mjs.map +1 -1
  83. package/dist/esm/FrappeFormActions.native.js +25 -33
  84. package/dist/esm/FrappeFormActions.native.js.map +1 -1
  85. package/dist/esm/FrappeKanban.mjs +0 -1
  86. package/dist/esm/FrappeKanban.mjs.map +1 -1
  87. package/dist/esm/FrappeKanban.native.js +0 -1
  88. package/dist/esm/FrappeKanban.native.js.map +1 -1
  89. package/dist/esm/FrappeLikedBy.mjs +1 -1
  90. package/dist/esm/FrappeLikedBy.mjs.map +1 -1
  91. package/dist/esm/FrappeLikedBy.native.js +1 -1
  92. package/dist/esm/FrappeLikedBy.native.js.map +1 -1
  93. package/dist/esm/FrappeListView.mjs +0 -1
  94. package/dist/esm/FrappeListView.mjs.map +1 -1
  95. package/dist/esm/FrappeListView.native.js +0 -1
  96. package/dist/esm/FrappeListView.native.js.map +1 -1
  97. package/dist/esm/FrappeReportView.mjs +3 -5
  98. package/dist/esm/FrappeReportView.mjs.map +1 -1
  99. package/dist/esm/FrappeReportView.native.js +3 -5
  100. package/dist/esm/FrappeReportView.native.js.map +1 -1
  101. package/dist/esm/desk/DeskShell.mjs +0 -1
  102. package/dist/esm/desk/DeskShell.mjs.map +1 -1
  103. package/dist/esm/desk/DeskShell.native.js +0 -1
  104. package/dist/esm/desk/DeskShell.native.js.map +1 -1
  105. package/dist/esm/fields/FileUpload.mjs +53 -61
  106. package/dist/esm/fields/FileUpload.mjs.map +1 -1
  107. package/dist/esm/fields/FileUpload.native.js +53 -59
  108. package/dist/esm/fields/FileUpload.native.js.map +1 -1
  109. package/dist/esm/list/ListControls.mjs +1 -3
  110. package/dist/esm/list/ListControls.mjs.map +1 -1
  111. package/dist/esm/list/ListControls.native.js +1 -3
  112. package/dist/esm/list/ListControls.native.js.map +1 -1
  113. package/dist/esm/list/ListControlsSheet.mjs +6 -16
  114. package/dist/esm/list/ListControlsSheet.mjs.map +1 -1
  115. package/dist/esm/list/ListControlsSheet.native.js +8 -18
  116. package/dist/esm/list/ListControlsSheet.native.js.map +1 -1
  117. package/dist/esm/list/ListSidebarToolbar.mjs +6 -21
  118. package/dist/esm/list/ListSidebarToolbar.mjs.map +1 -1
  119. package/dist/esm/list/ListSidebarToolbar.native.js +8 -23
  120. package/dist/esm/list/ListSidebarToolbar.native.js.map +1 -1
  121. package/dist/esm/list/RecordCard.mjs +2 -14
  122. package/dist/esm/list/RecordCard.mjs.map +1 -1
  123. package/dist/esm/list/RecordCard.native.js +2 -10
  124. package/dist/esm/list/RecordCard.native.js.map +1 -1
  125. package/dist/esm/list/ShufflePanel.mjs +0 -2
  126. package/dist/esm/list/ShufflePanel.mjs.map +1 -1
  127. package/dist/esm/list/ShufflePanel.native.js +0 -2
  128. package/dist/esm/list/ShufflePanel.native.js.map +1 -1
  129. package/dist/esm/list/listColumns.mjs +1 -1
  130. package/dist/esm/list/listColumns.mjs.map +1 -1
  131. package/dist/esm/list/listColumns.native.js +1 -1
  132. package/dist/esm/list/listColumns.native.js.map +1 -1
  133. package/dist/esm/record/RecordPage.mjs +4 -10
  134. package/dist/esm/record/RecordPage.mjs.map +1 -1
  135. package/dist/esm/record/RecordPage.native.js +4 -10
  136. package/dist/esm/record/RecordPage.native.js.map +1 -1
  137. package/dist/esm/report/ReportViewToolbar.mjs +9 -11
  138. package/dist/esm/report/ReportViewToolbar.mjs.map +1 -1
  139. package/dist/esm/report/ReportViewToolbar.native.js +9 -11
  140. package/dist/esm/report/ReportViewToolbar.native.js.map +1 -1
  141. package/dist/jsx/FileBrowser/index.mjs +16 -26
  142. package/dist/jsx/FileBrowser/index.mjs.map +1 -1
  143. package/dist/jsx/FileBrowser/index.native.js +15 -25
  144. package/dist/jsx/FileBrowser/index.native.js.map +1 -1
  145. package/dist/jsx/FormSidebar.mjs +37 -25
  146. package/dist/jsx/FormSidebar.mjs.map +1 -1
  147. package/dist/jsx/FormSidebar.native.js +38 -24
  148. package/dist/jsx/FormSidebar.native.js.map +1 -1
  149. package/dist/jsx/FrappeAssignment.mjs +0 -3
  150. package/dist/jsx/FrappeAssignment.mjs.map +1 -1
  151. package/dist/jsx/FrappeAssignment.native.js +0 -3
  152. package/dist/jsx/FrappeAssignment.native.js.map +1 -1
  153. package/dist/jsx/FrappeDashboard.mjs +0 -2
  154. package/dist/jsx/FrappeDashboard.mjs.map +1 -1
  155. package/dist/jsx/FrappeDashboard.native.js +0 -2
  156. package/dist/jsx/FrappeDashboard.native.js.map +1 -1
  157. package/dist/jsx/FrappeForm.mjs +7 -6
  158. package/dist/jsx/FrappeForm.mjs.map +1 -1
  159. package/dist/jsx/FrappeForm.native.js +6 -5
  160. package/dist/jsx/FrappeForm.native.js.map +1 -1
  161. package/dist/jsx/FrappeFormActions.mjs +22 -32
  162. package/dist/jsx/FrappeFormActions.mjs.map +1 -1
  163. package/dist/jsx/FrappeFormActions.native.js +23 -31
  164. package/dist/jsx/FrappeFormActions.native.js.map +1 -1
  165. package/dist/jsx/FrappeKanban.mjs +0 -1
  166. package/dist/jsx/FrappeKanban.mjs.map +1 -1
  167. package/dist/jsx/FrappeKanban.native.js +0 -1
  168. package/dist/jsx/FrappeKanban.native.js.map +1 -1
  169. package/dist/jsx/FrappeLikedBy.mjs +1 -1
  170. package/dist/jsx/FrappeLikedBy.mjs.map +1 -1
  171. package/dist/jsx/FrappeLikedBy.native.js +1 -1
  172. package/dist/jsx/FrappeLikedBy.native.js.map +1 -1
  173. package/dist/jsx/FrappeListView.mjs +0 -1
  174. package/dist/jsx/FrappeListView.mjs.map +1 -1
  175. package/dist/jsx/FrappeListView.native.js +0 -1
  176. package/dist/jsx/FrappeListView.native.js.map +1 -1
  177. package/dist/jsx/FrappeReportView.mjs +3 -5
  178. package/dist/jsx/FrappeReportView.mjs.map +1 -1
  179. package/dist/jsx/FrappeReportView.native.js +2 -4
  180. package/dist/jsx/FrappeReportView.native.js.map +1 -1
  181. package/dist/jsx/desk/DeskShell.mjs +0 -1
  182. package/dist/jsx/desk/DeskShell.mjs.map +1 -1
  183. package/dist/jsx/desk/DeskShell.native.js +0 -1
  184. package/dist/jsx/desk/DeskShell.native.js.map +1 -1
  185. package/dist/jsx/fields/FileUpload.mjs +53 -61
  186. package/dist/jsx/fields/FileUpload.mjs.map +1 -1
  187. package/dist/jsx/fields/FileUpload.native.js +50 -56
  188. package/dist/jsx/fields/FileUpload.native.js.map +1 -1
  189. package/dist/jsx/list/ListControls.mjs +1 -3
  190. package/dist/jsx/list/ListControls.mjs.map +1 -1
  191. package/dist/jsx/list/ListControls.native.js +1 -3
  192. package/dist/jsx/list/ListControls.native.js.map +1 -1
  193. package/dist/jsx/list/ListControlsSheet.mjs +6 -16
  194. package/dist/jsx/list/ListControlsSheet.mjs.map +1 -1
  195. package/dist/jsx/list/ListControlsSheet.native.js +7 -17
  196. package/dist/jsx/list/ListControlsSheet.native.js.map +1 -1
  197. package/dist/jsx/list/ListSidebarToolbar.mjs +6 -21
  198. package/dist/jsx/list/ListSidebarToolbar.mjs.map +1 -1
  199. package/dist/jsx/list/ListSidebarToolbar.native.js +7 -22
  200. package/dist/jsx/list/ListSidebarToolbar.native.js.map +1 -1
  201. package/dist/jsx/list/RecordCard.mjs +2 -14
  202. package/dist/jsx/list/RecordCard.mjs.map +1 -1
  203. package/dist/jsx/list/RecordCard.native.js +2 -10
  204. package/dist/jsx/list/RecordCard.native.js.map +1 -1
  205. package/dist/jsx/list/ShufflePanel.mjs +0 -2
  206. package/dist/jsx/list/ShufflePanel.mjs.map +1 -1
  207. package/dist/jsx/list/ShufflePanel.native.js +0 -2
  208. package/dist/jsx/list/ShufflePanel.native.js.map +1 -1
  209. package/dist/jsx/list/listColumns.mjs +1 -1
  210. package/dist/jsx/list/listColumns.mjs.map +1 -1
  211. package/dist/jsx/list/listColumns.native.js +1 -1
  212. package/dist/jsx/list/listColumns.native.js.map +1 -1
  213. package/dist/jsx/record/RecordPage.mjs +4 -10
  214. package/dist/jsx/record/RecordPage.mjs.map +1 -1
  215. package/dist/jsx/record/RecordPage.native.js +4 -10
  216. package/dist/jsx/record/RecordPage.native.js.map +1 -1
  217. package/dist/jsx/report/ReportViewToolbar.mjs +9 -11
  218. package/dist/jsx/report/ReportViewToolbar.mjs.map +1 -1
  219. package/dist/jsx/report/ReportViewToolbar.native.js +8 -10
  220. package/dist/jsx/report/ReportViewToolbar.native.js.map +1 -1
  221. package/package.json +16 -16
  222. package/src/FileBrowser/index.tsx +11 -15
  223. package/src/FormSidebar.tsx +52 -32
  224. package/src/FrappeAssignment.tsx +0 -3
  225. package/src/FrappeDashboard.spec.tsx +7 -3
  226. package/src/FrappeDashboard.tsx +0 -2
  227. package/src/FrappeForm.connections.spec.tsx +2 -2
  228. package/src/FrappeForm.deskSemantics.spec.tsx +2 -2
  229. package/src/FrappeForm.lifecycle.spec.tsx +27 -27
  230. package/src/FrappeForm.tsx +11 -7
  231. package/src/FrappeFormActions.tsx +24 -38
  232. package/src/FrappeKanban.tsx +0 -1
  233. package/src/FrappeLikedBy.tsx +1 -1
  234. package/src/FrappeListView.spec.tsx +7 -3
  235. package/src/FrappeListView.tsx +0 -1
  236. package/src/FrappeReportView.tsx +3 -6
  237. package/src/desk/DeskShell.tsx +0 -1
  238. package/src/desk/deskDocumentRoutes.spec.tsx +7 -4
  239. package/src/fields/Date/typeParity.spec.tsx +6 -4
  240. package/src/fields/FileUpload.spec.tsx +18 -3
  241. package/src/fields/FileUpload.tsx +64 -68
  242. package/src/list/ListControls.tsx +1 -3
  243. package/src/list/ListControlsSheet.tsx +10 -12
  244. package/src/list/ListSidebarToolbar.tsx +7 -18
  245. package/src/list/RecordCard.native.tsx +2 -7
  246. package/src/list/RecordCard.tsx +2 -8
  247. package/src/list/ShufflePanel.tsx +0 -2
  248. package/src/list/listColumns.tsx +1 -1
  249. package/src/record/RecordPage.tsx +2 -10
  250. package/src/report/ReportViewToolbar.tsx +9 -11
  251. package/src/useFrappeForm.spec.tsx +1 -1
  252. package/types/FileBrowser/index.d.ts.map +1 -1
  253. package/types/FormSidebar.d.ts.map +1 -1
  254. package/types/FrappeAssignment.d.ts.map +1 -1
  255. package/types/FrappeDashboard.d.ts.map +1 -1
  256. package/types/FrappeFormActions.d.ts.map +1 -1
  257. package/types/FrappeKanban.d.ts.map +1 -1
  258. package/types/FrappeReportView.d.ts.map +1 -1
  259. package/types/desk/DeskShell.d.ts.map +1 -1
  260. package/types/fields/FileUpload.d.ts.map +1 -1
  261. package/types/list/ListControls.d.ts.map +1 -1
  262. package/types/list/ListControlsSheet.d.ts.map +1 -1
  263. package/types/list/ListSidebarToolbar.d.ts.map +1 -1
  264. package/types/list/RecordCard.d.ts.map +1 -1
  265. package/types/list/RecordCard.native.d.ts.map +1 -1
  266. package/types/list/ShufflePanel.d.ts.map +1 -1
  267. package/types/record/RecordPage.d.ts.map +1 -1
  268. package/types/report/ReportViewToolbar.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","ReportViewToolbar_exports","ReportViewToolbar","module","exports","import_jsx_runtime","require","import_components","import_forms","import_theme","import_react","import_react2","import_react_i18next","import_filterFields","import_measures","param","columns","selected","onToggleColumn","onResetColumns","groupBy","onGroupByChange","baseFilters","onClearBaseFilters","columnFilterCount","onClearColumnFilters","savedReports","currentReport","onSelectReport","onSaveReport","onDeleteReport","onExport","exportDisabled","t","useTranslation","knobProps","useResolvedKnobs","saveOpen","setSaveOpen","useState","saveName","setSaveName","confirmDelete","setConfirmDelete","selectedSet","Set","groupByColumn","find","column","fieldname","currentSummary","report","handleSaveAs","handleSaveAs2","trim","start","jsxs","Fragment","children","DropdownMenu","jsx","Trigger","asChild","Button","size","chromeless","icon","ColumnsIcon","defaultValue","enabled","length","total","Content","maxHeight","overlayListMaxHeight","Label","map","isSelected","has","lastSelected","CheckboxItem","checked","disabled","disabledReason","onCheckedChange","label","Separator","Item","onSelect","RowsIcon","field","closeOnSelect","StackIcon","reportName","FloppyDiskIcon","onPress","Popover","placement","open","onOpenChange","PopoverContent","panelPadding","Arrow","borderWidth","borderColor","XStack","gap","alignItems","minWidth","dialogBodyMinWidth","YStack","flex","Input","onChangeText","placeholder","inputProps","accent","disabledReasonPlacement","tuple","index","Chip","variant","color","filterTupleLabel","XIcon"],"sources":["../../../src/report/ReportViewToolbar.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","ReportViewToolbar_exports","ReportViewToolbar","module","exports","import_jsx_runtime","require","import_components","import_forms","import_theme","import_react","import_react2","import_react_i18next","import_filterFields","import_measures","param","columns","selected","onToggleColumn","onResetColumns","groupBy","onGroupByChange","baseFilters","onClearBaseFilters","columnFilterCount","onClearColumnFilters","savedReports","currentReport","onSelectReport","onSaveReport","onDeleteReport","onExport","exportDisabled","t","useTranslation","knobProps","useResolvedKnobs","saveOpen","setSaveOpen","useState","saveName","setSaveName","confirmDelete","setConfirmDelete","selectedSet","Set","groupByColumn","find","column","fieldname","currentSummary","report","handleSaveAs","handleSaveAs2","trim","start","jsxs","Fragment","children","DropdownMenu","jsx","Trigger","asChild","Button","size","chromeless","icon","ColumnsIcon","defaultValue","enabled","length","total","Content","maxHeight","overlayListMaxHeight","Label","map","isSelected","has","lastSelected","CheckboxItem","checked","disabled","disabledReason","onCheckedChange","label","Separator","Item","onSelect","RowsIcon","field","closeOnSelect","StackIcon","reportName","ActionButton","kind","primary","onPress","Popover","placement","open","onOpenChange","FloppyDiskIcon","PopoverContent","panelPadding","Arrow","borderWidth","borderColor","XStack","gap","alignItems","minWidth","dialogBodyMinWidth","YStack","flex","Input","onChangeText","placeholder","inputProps","disabledReasonPlacement","tuple","index","Chip","variant","color","filterTupleLabel","XIcon"],"sources":["../../../src/report/ReportViewToolbar.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multiplatform.one/frappe-ui",
3
- "version": "7.67.0",
3
+ "version": "7.68.0",
4
4
  "description": "Pre-wired Tamagui components for Frappe doctypes with live data",
5
5
  "keywords": [
6
6
  "cross-platform",
@@ -72,18 +72,18 @@
72
72
  "access": "public"
73
73
  },
74
74
  "dependencies": {
75
- "@multiplatform.one/components": "^7.67.0",
76
- "@multiplatform.one/desktop": "^7.67.0",
77
- "@multiplatform.one/forms": "^7.67.0",
78
- "@multiplatform.one/frappe": "^7.67.0",
79
- "@multiplatform.one/i18n": "^7.67.0",
80
- "@multiplatform.one/markdown": "^7.67.0",
81
- "@multiplatform.one/platform": "^7.67.0",
82
- "@multiplatform.one/rich-text": "^7.67.0",
83
- "@multiplatform.one/router": "^7.67.0",
84
- "@multiplatform.one/store": "^7.67.0",
85
- "@multiplatform.one/table": "^7.67.0",
86
- "@multiplatform.one/theme": "^7.67.0",
75
+ "@multiplatform.one/components": "^7.68.0",
76
+ "@multiplatform.one/desktop": "^7.68.0",
77
+ "@multiplatform.one/forms": "^7.68.0",
78
+ "@multiplatform.one/frappe": "^7.68.0",
79
+ "@multiplatform.one/i18n": "^7.68.0",
80
+ "@multiplatform.one/markdown": "^7.68.0",
81
+ "@multiplatform.one/platform": "^7.68.0",
82
+ "@multiplatform.one/rich-text": "^7.68.0",
83
+ "@multiplatform.one/router": "^7.68.0",
84
+ "@multiplatform.one/store": "^7.68.0",
85
+ "@multiplatform.one/table": "^7.68.0",
86
+ "@multiplatform.one/theme": "^7.68.0",
87
87
  "@phosphor-icons/react": "^2.1.10",
88
88
  "@tamagui/colors": "2.7.6",
89
89
  "@tanstack/db": "0.8.0",
@@ -100,9 +100,9 @@
100
100
  "tamagui": "2.7.6"
101
101
  },
102
102
  "devDependencies": {
103
- "@multiplatform.one/config": "7.67.0",
104
- "@multiplatform.one/storybook": "7.67.0",
105
- "@multiplatform.one/test-utils": "7.67.0",
103
+ "@multiplatform.one/config": "7.68.0",
104
+ "@multiplatform.one/storybook": "7.68.0",
105
+ "@multiplatform.one/test-utils": "7.68.0",
106
106
  "@tamagui/build": "2.7.6",
107
107
  "@testing-library/jest-dom": "^7.0.1",
108
108
  "@testing-library/react": "^16.3.3",
@@ -8,6 +8,8 @@ import {
8
8
  ViewSwitcher,
9
9
  type TreeNode,
10
10
  Text,
11
+ ActionButton,
12
+ IconButton,
11
13
  } from "@multiplatform.one/components";
12
14
  import { Button, Checkbox, FileUpload, Input } from "@multiplatform.one/forms";
13
15
  import { DataTable, type DataTableColumn } from "@multiplatform.one/table";
@@ -197,19 +199,11 @@ function BulkBar({
197
199
  marginBottom={placement === "bottom" ? "$3" : 0}
198
200
  >
199
201
  <Text fontSize="$3">{t("{{count}} selected", { count })}</Text>
200
- <Button size="$4" chromeless icon={DownloadSimpleIcon} onPress={onDownload}>
201
- {t("Download")}
202
- </Button>
203
- <Button size="$4" chromeless icon={UploadSimpleIcon} onPress={onMove}>
204
- {t("Move")}
205
- </Button>
206
- <Button size="$4" chromeless icon={TrashIcon} onPress={onDelete}>
207
- {t("Delete")}
208
- </Button>
202
+ <IconButton icon={DownloadSimpleIcon} aria-label={t("Download")} onPress={onDownload} />
203
+ <IconButton icon={UploadSimpleIcon} aria-label={t("Move")} onPress={onMove} />
204
+ <ActionButton kind="delete" onPress={onDelete} />
209
205
  <XStack flex={1} />
210
- <Button size="$4" chromeless icon={XIcon} onPress={onClear}>
211
- {t("Clear")}
212
- </Button>
206
+ <IconButton icon={XIcon} aria-label={t("Clear")} onPress={onClear} />
213
207
  </XStack>
214
208
  );
215
209
  }
@@ -471,9 +465,11 @@ export function FileBrowser({
471
465
  />
472
466
  </YStack>
473
467
  {onUpload ? (
474
- <Button size="$4" icon={UploadSimpleIcon} onPress={() => setUploadOpen(true)}>
475
- {t("Upload")}
476
- </Button>
468
+ <IconButton
469
+ icon={UploadSimpleIcon}
470
+ aria-label={t("Upload")}
471
+ onPress={() => setUploadOpen(true)}
472
+ />
477
473
  ) : null}
478
474
  </XStack>
479
475
  );
@@ -18,6 +18,7 @@
18
18
  */
19
19
 
20
20
  import {
21
+ ActionButton,
21
22
  Avatar,
22
23
  Image,
23
24
  Sidebar,
@@ -26,7 +27,7 @@ import {
26
27
  } from "@multiplatform.one/components";
27
28
  import { Button } from "@multiplatform.one/forms";
28
29
  import { useResolvedKnobs } from "@multiplatform.one/theme";
29
- import { ImageSquareIcon, PlusIcon, UploadIcon, UserIcon, XIcon } from "@phosphor-icons/react";
30
+ import { ImageSquareIcon, PlusIcon, UserIcon, XIcon } from "@phosphor-icons/react";
30
31
  import React from "react";
31
32
  import { useTranslation } from "react-i18next";
32
33
  import { XStack, YStack, useTheme } from "tamagui";
@@ -129,19 +130,59 @@ export function FormSidebar({
129
130
 
130
131
  const resolvedImageLabel = imageLabel ?? t("Document image");
131
132
 
133
+ // LC-260 ICONS-OVER-WORDS: Replace and Remove are their symbols, floating
134
+ // over the image on the LC-176 media plate.
135
+ const imageActions =
136
+ imageUrl && (onImageAdd || onImageRemove)
137
+ ? (overMedia: boolean) => (
138
+ <>
139
+ {onImageAdd ? (
140
+ <ActionButton
141
+ kind="replace"
142
+ label={t("Replace image")}
143
+ overMedia={overMedia}
144
+ onPress={onImageAdd}
145
+ />
146
+ ) : null}
147
+ {onImageRemove ? (
148
+ <ActionButton
149
+ kind="remove"
150
+ label={t("Remove image")}
151
+ overMedia={overMedia}
152
+ onPress={onImageRemove}
153
+ />
154
+ ) : null}
155
+ </>
156
+ )
157
+ : undefined;
158
+
132
159
  const imageBlock =
133
160
  imageUrl || onImageAdd ? (
134
161
  <YStack alignItems="center" gap="$2">
135
162
  {imageUrl ? (
136
- <Image
137
- {...knobProps.containerRadius}
138
- src={imageBroken ? undefined : imageUrl}
139
- alt={resolvedImageLabel}
140
- width={imageSize}
141
- height={imageSize}
142
- objectFit="contain"
143
- onError={() => setErroredUrl(imageUrl)}
144
- />
163
+ <YStack position="relative">
164
+ <Image
165
+ {...knobProps.containerRadius}
166
+ src={imageBroken ? undefined : imageUrl}
167
+ alt={resolvedImageLabel}
168
+ width={imageSize}
169
+ height={imageSize}
170
+ objectFit="contain"
171
+ onError={() => setErroredUrl(imageUrl)}
172
+ />
173
+ {imageActions && !imageBroken ? (
174
+ <XStack
175
+ data-form-sidebar="image-actions"
176
+ position="absolute"
177
+ top="$2"
178
+ right="$2"
179
+ zIndex={1}
180
+ gap="$2"
181
+ >
182
+ {imageActions(true)}
183
+ </XStack>
184
+ ) : null}
185
+ </YStack>
145
186
  ) : (
146
187
  <Button
147
188
  chromeless
@@ -155,28 +196,7 @@ export function FormSidebar({
155
196
  {t("Image failed to load")}
156
197
  </Text>
157
198
  ) : null}
158
- {imageUrl && (onImageAdd || onImageRemove) ? (
159
- <XStack gap="$2">
160
- {onImageAdd ? (
161
- <Button
162
- size="$2"
163
- chromeless
164
- icon={UploadIcon}
165
- aria-label={t("Replace image")}
166
- onPress={onImageAdd}
167
- />
168
- ) : null}
169
- {onImageRemove ? (
170
- <Button
171
- size="$2"
172
- chromeless
173
- icon={XIcon}
174
- aria-label={t("Remove image")}
175
- onPress={onImageRemove}
176
- />
177
- ) : null}
178
- </XStack>
179
- ) : null}
199
+ {imageBroken && imageActions ? <XStack gap="$2">{imageActions(false)}</XStack> : null}
180
200
  </YStack>
181
201
  ) : null;
182
202
 
@@ -196,7 +196,6 @@ function AssignmentRow({
196
196
  {onComplete ? (
197
197
  <Button
198
198
  size="$2"
199
- circular
200
199
  chromeless
201
200
  disabled={disabled}
202
201
  aria-label={t("Mark assignment complete")}
@@ -207,7 +206,6 @@ function AssignmentRow({
207
206
  {onRemove ? (
208
207
  <Button
209
208
  size="$2"
210
- circular
211
209
  chromeless
212
210
  disabled={disabled}
213
211
  aria-label={t("Remove assignment")}
@@ -386,7 +384,6 @@ function FrappeAssignmentBody({
386
384
  {canMutate ? (
387
385
  <Button
388
386
  size="$2"
389
- circular
390
387
  chromeless
391
388
  aria-label={t("Add assignment")}
392
389
  onPress={() => setAddOpen((prev) => !prev)}
@@ -78,10 +78,14 @@ describe("FrappeDashboard refresh press floor (LC-54 amendment)", () => {
78
78
  expect(refresh.className).not.toMatch(negativeMarginAtom);
79
79
  const token = refresh.getAttribute("data-size-token") as SizeTokens;
80
80
  const px = Number(getVariableValue(getSize(token)));
81
- expect(refresh.className).toContain(`_mih-${px}px`);
82
- expect(refresh.className).toContain(`_miw-${px}px`);
81
+ // LC-176: the bare glyph sits in a square box at its control height, inside
82
+ // the token box, and slop restores the 44pt press floor.
83
+ const box = Number(/(?:^| )_mih-(\d+)px/.exec(refresh.className)?.[1]);
84
+ expect(refresh.className).toContain(`_miw-${box}px`);
85
+ expect(box).toBeGreaterThan(0);
86
+ expect(box).toBeLessThanOrEqual(px);
83
87
  const slop = Number(refresh.getAttribute("data-mp-press-slop") ?? 0);
84
- expect(px + slop * 2).toBeGreaterThanOrEqual(44);
88
+ expect(box + slop * 2).toBeGreaterThanOrEqual(44);
85
89
  });
86
90
 
87
91
  it("hover feedback rides the button's own in-slot box (house channel)", () => {
@@ -206,7 +206,6 @@ function LiveDashboardContent<TDoc extends { name: string; doctype: string }>({
206
206
  `loading` (not bare `disabled`) is the derived busy state. */}
207
207
  <Button
208
208
  size="$2"
209
- circular
210
209
  icon={ArrowsClockwiseIcon}
211
210
  onPress={onRefresh}
212
211
  loading={isRefreshing || isLiveLoading}
@@ -328,7 +327,6 @@ export function FrappeDashboard<TDoc extends { name: string; doctype: string }>(
328
327
  {/* LC-54: house Button, own-box floor (see the live-path refresh). */}
329
328
  <Button
330
329
  size="$2"
331
- circular
332
330
  icon={ArrowsClockwiseIcon}
333
331
  onPress={bumpRefresh}
334
332
  loading={isRefreshing}
@@ -128,13 +128,13 @@ describe("FrappeForm connections, schema mode", () => {
128
128
 
129
129
  it("a new record has no connections yet", async () => {
130
130
  renderForm({});
131
- await waitFor(() => expect(screen.getByText("Save")).toBeTruthy());
131
+ await waitFor(() => expect(screen.getByLabelText("Save")).toBeTruthy());
132
132
  expect(screen.queryByText("Connections")).toBeNull();
133
133
  });
134
134
 
135
135
  it("showConnections={false} leaves the tab out", async () => {
136
136
  renderForm({ name: "bulbasaur", showConnections: false });
137
- await waitFor(() => expect(screen.getByText("Save")).toBeTruthy());
137
+ await waitFor(() => expect(screen.getByLabelText("Save")).toBeTruthy());
138
138
  expect(screen.queryByText("Connections")).toBeNull();
139
139
  });
140
140
  });
@@ -192,7 +192,7 @@ describe("FrappeForm resolves a doctype through the desk form engine", () => {
192
192
  it("save refuses an empty field that mandatory_depends_on made required", async () => {
193
193
  renderForm({ name: "LOAN-APPROVED", roles: ["Loan Officer"] });
194
194
  await expectProbe("status", "val=Approved");
195
- fireEvent.click(screen.getByText("Save"));
195
+ fireEvent.click(screen.getByLabelText("Save"));
196
196
  await expectProbe("reason", "err=Reason is required");
197
197
  });
198
198
 
@@ -276,7 +276,7 @@ describe("FrappeForm resolves a doctype through the desk form engine", () => {
276
276
  renderForm();
277
277
  await screen.findByTestId("probe-status");
278
278
  expect(screen.getByText("Name")).toBeTruthy();
279
- fireEvent.click(screen.getByText("Save"));
279
+ fireEvent.click(screen.getByLabelText("Save"));
280
280
  await waitFor(() => {
281
281
  expect(screen.getByText("Name is required")).toBeTruthy();
282
282
  });
@@ -132,7 +132,7 @@ describe("FrappeForm runs the desk docstatus lifecycle", () => {
132
132
  renderForm(fixtures, { name: "LOAN-DRAFT" });
133
133
  await expectProbe("employee_name", "val=Ada Lovelace");
134
134
  await expectStatus("draft");
135
- expect(screen.queryByText("Save")).toBeNull();
135
+ expect(screen.queryByLabelText("Save")).toBeNull();
136
136
 
137
137
  fireEvent.click(screen.getByText("Submit"));
138
138
  await waitFor(() => expect(confirm).toHaveBeenCalledWith("Permanently Submit LOAN-DRAFT?"));
@@ -172,7 +172,7 @@ describe("FrappeForm runs the desk docstatus lifecycle", () => {
172
172
 
173
173
  fireEvent.click(screen.getByTestId("set-remarks"));
174
174
  await expectStatus("notSaved");
175
- expect(screen.getByText("Save")).toBeTruthy();
175
+ expect(screen.getByLabelText("Save")).toBeTruthy();
176
176
  expect(screen.queryByText("Submit")).toBeNull();
177
177
  });
178
178
 
@@ -185,8 +185,8 @@ describe("FrappeForm runs the desk docstatus lifecycle", () => {
185
185
  onAmend: vi.fn(),
186
186
  });
187
187
  await expectStatus("submitted");
188
- expect(screen.queryByText("Delete")).toBeNull();
189
- expect(screen.getByText("Close")).toBeTruthy();
188
+ expect(screen.queryByLabelText("Delete")).toBeNull();
189
+ expect(screen.getByLabelText("Close")).toBeTruthy();
190
190
  expect(screen.getByTestId("frappe-form-cancel-document").textContent).toContain(
191
191
  "Cancel Document",
192
192
  );
@@ -196,7 +196,7 @@ describe("FrappeForm runs the desk docstatus lifecycle", () => {
196
196
  await expectStatus("cancelled");
197
197
  await waitFor(async () => expect(await docstatusOf(fixtures, "LOAN-SUBMITTED")).toBe(2));
198
198
  expect(screen.getByText("Amend")).toBeTruthy();
199
- expect(screen.getByText("Delete")).toBeTruthy();
199
+ expect(screen.getByLabelText("Delete")).toBeTruthy();
200
200
  });
201
201
 
202
202
  it("an allow_on_submit edit turns Cancel into Update, which keeps the document submitted", async () => {
@@ -205,10 +205,10 @@ describe("FrappeForm runs the desk docstatus lifecycle", () => {
205
205
  await expectStatus("submitted");
206
206
 
207
207
  fireEvent.click(screen.getByTestId("set-remarks"));
208
- await waitFor(() => expect(screen.getByText("Update")).toBeTruthy());
208
+ await waitFor(() => expect(screen.getByLabelText("Update")).toBeTruthy());
209
209
  expect(screen.queryByTestId("frappe-form-cancel-document")).toBeNull();
210
210
 
211
- fireEvent.click(screen.getByText("Update"));
211
+ fireEvent.click(screen.getByLabelText("Update"));
212
212
  await waitFor(async () =>
213
213
  expect((await fixtures.getDoc("Asset Loan", "LOAN-SUBMITTED"))?.remarks).toBe("edited"),
214
214
  );
@@ -255,7 +255,7 @@ describe("FrappeForm runs the desk docstatus lifecycle", () => {
255
255
  await expectStatus("notSaved");
256
256
  await expectProbe("employee_name", "val=Katherine Johnson");
257
257
  await expectProbe("serial_no", "ro=false");
258
- fireEvent.click(screen.getByText("Save"));
258
+ fireEvent.click(screen.getByLabelText("Save"));
259
259
  await waitFor(async () => {
260
260
  const amendments = await fixtures.getList("Asset Loan", {
261
261
  filters: { amended_from: "LOAN-CANCELLED" },
@@ -279,7 +279,7 @@ describe("FrappeForm runs the desk docstatus lifecycle", () => {
279
279
  renderForm(corpus(), { name: "LOAN-SUBMITTED", roles: ["Loan Officer"], onCancel: vi.fn() });
280
280
  await expectStatus("submitted");
281
281
  expect(screen.queryByTestId("frappe-form-cancel-document")).toBeNull();
282
- expect(screen.getByText("Cancel")).toBeTruthy();
282
+ expect(screen.getByLabelText("Cancel")).toBeTruthy();
283
283
  cleanup();
284
284
 
285
285
  renderForm(corpus(), { name: "LOAN-CANCELLED", roles: ["Loan Officer"], onAmend: vi.fn() });
@@ -289,7 +289,7 @@ describe("FrappeForm runs the desk docstatus lifecycle", () => {
289
289
 
290
290
  renderForm(corpus(), { name: "LOAN-DRAFT", roles: ["Loan Clerk"] });
291
291
  await expectStatus("draft");
292
- expect(screen.getByText("Save")).toBeTruthy();
292
+ expect(screen.getByLabelText("Save")).toBeTruthy();
293
293
  expect(screen.queryByText("Submit")).toBeNull();
294
294
  });
295
295
 
@@ -305,7 +305,7 @@ describe("FrappeForm runs the desk docstatus lifecycle", () => {
305
305
  renderForm(corpus(), { name: "LOAN-SUBMITTED", roles: ["Auditor"], onCancel: vi.fn() });
306
306
  await expectStatus("submitted");
307
307
  expect(screen.queryByTestId("frappe-form-cancel-document")).toBeNull();
308
- expect(screen.getByText("Cancel")).toBeTruthy();
308
+ expect(screen.getByLabelText("Cancel")).toBeTruthy();
309
309
  cleanup();
310
310
 
311
311
  renderForm(corpus(), { name: "LOAN-CANCELLED", roles: ["Auditor"], onAmend: vi.fn() });
@@ -326,11 +326,11 @@ describe("a read-only record view keeps desk's lifecycle beside Edit", () => {
326
326
  const onEdit = vi.fn();
327
327
  renderForm(fixtures, { name: "LOAN-DRAFT", onEdit, onCancel: vi.fn(), onDelete: vi.fn() });
328
328
  await expectStatus("draft");
329
- expect(screen.queryByText("Save")).toBeNull();
330
- expect(screen.queryByText("Cancel")).toBeNull();
331
- expect(screen.getByText("Delete")).toBeTruthy();
329
+ expect(screen.queryByLabelText("Save")).toBeNull();
330
+ expect(screen.queryByLabelText("Cancel")).toBeNull();
331
+ expect(screen.getByLabelText("Delete")).toBeTruthy();
332
332
 
333
- fireEvent.click(screen.getByText("Edit"));
333
+ fireEvent.click(screen.getByLabelText("Edit"));
334
334
  expect(onEdit).toHaveBeenCalledTimes(1);
335
335
 
336
336
  fireEvent.click(screen.getByText("Submit"));
@@ -338,30 +338,30 @@ describe("a read-only record view keeps desk's lifecycle beside Edit", () => {
338
338
  await waitFor(async () => expect(await docstatusOf(fixtures, "LOAN-DRAFT")).toBe(1));
339
339
  await expectStatus("submitted");
340
340
  expect(screen.getByText("Cancel Document")).toBeTruthy();
341
- expect(screen.getByText("Edit")).toBeTruthy();
342
- expect(screen.queryByText("Delete")).toBeNull();
341
+ expect(screen.getByLabelText("Edit")).toBeTruthy();
342
+ expect(screen.queryByLabelText("Delete")).toBeNull();
343
343
  });
344
344
 
345
345
  it("a submitted document offers Cancel Document, and its allow_on_submit field keeps Edit", async () => {
346
346
  const fixtures = corpus();
347
347
  renderForm(fixtures, { name: "LOAN-SUBMITTED", onEdit: vi.fn(), onCancel: vi.fn() });
348
348
  await expectStatus("submitted");
349
- expect(screen.getByText("Edit")).toBeTruthy();
350
- expect(screen.queryByText("Cancel")).toBeNull();
351
- expect(screen.queryByText("Close")).toBeNull();
349
+ expect(screen.getByLabelText("Edit")).toBeTruthy();
350
+ expect(screen.queryByLabelText("Cancel")).toBeNull();
351
+ expect(screen.queryByLabelText("Close")).toBeNull();
352
352
 
353
353
  fireEvent.click(screen.getByText("Cancel Document"));
354
354
  await waitFor(() => expect(confirm).toHaveBeenCalledWith("Permanently Cancel LOAN-SUBMITTED?"));
355
355
  await waitFor(async () => expect(await docstatusOf(fixtures, "LOAN-SUBMITTED")).toBe(2));
356
356
  await expectStatus("cancelled");
357
- expect(screen.queryByText("Edit")).toBeNull();
357
+ expect(screen.queryByLabelText("Edit")).toBeNull();
358
358
  });
359
359
 
360
360
  it("a cancelled document offers Amend and no Edit", async () => {
361
361
  const onAmend = vi.fn();
362
362
  renderForm(corpus(), { name: "LOAN-CANCELLED", onEdit: vi.fn(), onAmend });
363
363
  await expectStatus("cancelled");
364
- expect(screen.queryByText("Edit")).toBeNull();
364
+ expect(screen.queryByLabelText("Edit")).toBeNull();
365
365
 
366
366
  fireEvent.click(screen.getByText("Amend"));
367
367
  await waitFor(() => expect(onAmend).toHaveBeenCalled());
@@ -374,7 +374,7 @@ describe("a submittable doctype's routed pages", () => {
374
374
  const pushed = renderPage(corpus(), "/loans/LOAN-DRAFT");
375
375
  await expectStatus("draft");
376
376
  expect(screen.getByText("Submit")).toBeTruthy();
377
- expect(screen.queryByText("Save")).toBeNull();
377
+ expect(screen.queryByLabelText("Save")).toBeNull();
378
378
 
379
379
  // LC-145: Submit is the bar's one action, so Edit rides the "…" menu.
380
380
  fireEvent.click(screen.getByTestId("frappe-form-menu"));
@@ -386,14 +386,14 @@ describe("a submittable doctype's routed pages", () => {
386
386
  const pushed = renderPage(corpus(), "/loans/LOAN-DRAFT/edit");
387
387
  await expectStatus("draft");
388
388
  expect(screen.getByText("Submit")).toBeTruthy();
389
- expect(screen.queryByText("Edit")).toBeNull();
389
+ expect(screen.queryByLabelText("Edit")).toBeNull();
390
390
 
391
391
  fireEvent.click(screen.getByTestId("set-remarks"));
392
392
  await expectStatus("notSaved");
393
- expect(screen.getByText("Save")).toBeTruthy();
393
+ expect(screen.getByLabelText("Save")).toBeTruthy();
394
394
  expect(screen.queryByText("Submit")).toBeNull();
395
395
 
396
- fireEvent.click(screen.getAllByText("Cancel")[0]);
396
+ fireEvent.click(screen.getAllByLabelText(/^(Cancel|Back to .+ list)$/)[0]!);
397
397
  expect(pushed).toEqual(["/loans/LOAN-DRAFT"]);
398
398
  });
399
399
 
@@ -449,7 +449,7 @@ describe("the leave button stays live while a write is in flight (LC-30)", () =>
449
449
  const onCancel = vi.fn();
450
450
  renderForm(fixtures, { name: "LOAN-SUBMITTED", onCancel });
451
451
  await expectStatus("submitted");
452
- expect(screen.getByTestId("frappe-form-close").textContent).toContain("Close");
452
+ expect(screen.getByTestId("frappe-form-close").getAttribute("aria-label")).toBe("Close");
453
453
 
454
454
  fireEvent.click(screen.getByTestId("frappe-form-cancel-document"));
455
455
  await waitFor(() =>
@@ -23,7 +23,7 @@ import type React from "react";
23
23
  import { useEffect, useMemo, useState } from "react";
24
24
  import type { TFunction } from "i18next";
25
25
  import { useTranslation } from "react-i18next";
26
- import { Button, Input, formCommonColors } from "@multiplatform.one/forms";
26
+ import { IconButton, Input, formCommonColors, standardActions } from "@multiplatform.one/forms";
27
27
  import { Text as TamaguiText, XStack, YStack } from "tamagui";
28
28
  import { hairlineWidth, useResolvedKnobs } from "@multiplatform.one/theme";
29
29
  import { useFrappeConfig } from "./FrappeProvider";
@@ -677,13 +677,17 @@ function FrappeFormView<TDoc extends { name: string; doctype: string }>({
677
677
  <YStack flex={1} backgroundColor="$background" testID="frappe-form-route-editor">
678
678
  <XStack alignItems="center" gap="$2" paddingHorizontal="$2" paddingVertical="$1">
679
679
  <XStack flex={1} flexBasis={0} justifyContent="flex-start">
680
- <Button
681
- chromeless
680
+ <IconButton
681
+ icon={standardActions.cancel.icon}
682
+ edge="start"
683
+ data-mp-action="cancel"
682
684
  onPress={onCancel ? handleCancel : routePage.onBack}
683
- aria-label={onCancel ? undefined : t("Back to {{doctype}} list", { doctype })}
684
- >
685
- {t("Cancel")}
686
- </Button>
685
+ aria-label={
686
+ onCancel
687
+ ? t(standardActions.cancel.label)
688
+ : t("Back to {{doctype}} list", { doctype })
689
+ }
690
+ />
687
691
  </XStack>
688
692
  <Text
689
693
  flexShrink={1}