@multiplatform.one/frappe-ui 6.6.0 → 7.0.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 (516) hide show
  1. package/dist/cjs/FrappeAssignment.cjs +2 -0
  2. package/dist/cjs/FrappeAssignment.native.js +2 -0
  3. package/dist/cjs/FrappeAssignment.native.js.map +1 -1
  4. package/dist/cjs/FrappeCalendar.cjs +5 -7
  5. package/dist/cjs/FrappeCalendar.native.js +5 -9
  6. package/dist/cjs/FrappeCalendar.native.js.map +1 -1
  7. package/dist/cjs/FrappeChartCard.cjs +2 -0
  8. package/dist/cjs/FrappeChartCard.native.js +2 -0
  9. package/dist/cjs/FrappeChartCard.native.js.map +1 -1
  10. package/dist/cjs/FrappeDashboard.cjs +11 -22
  11. package/dist/cjs/FrappeDashboard.native.js +20 -22
  12. package/dist/cjs/FrappeDashboard.native.js.map +1 -1
  13. package/dist/cjs/FrappeForm.cjs +3 -1
  14. package/dist/cjs/FrappeForm.native.js +3 -1
  15. package/dist/cjs/FrappeForm.native.js.map +1 -1
  16. package/dist/cjs/FrappeGantt.cjs +5 -7
  17. package/dist/cjs/FrappeGantt.native.js +5 -9
  18. package/dist/cjs/FrappeGantt.native.js.map +1 -1
  19. package/dist/cjs/FrappeImageView.cjs +3 -1
  20. package/dist/cjs/FrappeImageView.native.js +3 -1
  21. package/dist/cjs/FrappeImageView.native.js.map +1 -1
  22. package/dist/cjs/FrappeKPICard.cjs +2 -0
  23. package/dist/cjs/FrappeKPICard.native.js +2 -0
  24. package/dist/cjs/FrappeKPICard.native.js.map +1 -1
  25. package/dist/cjs/FrappeKanban.cjs +3 -1
  26. package/dist/cjs/FrappeKanban.native.js +3 -1
  27. package/dist/cjs/FrappeKanban.native.js.map +1 -1
  28. package/dist/cjs/FrappeLikedBy.cjs +2 -0
  29. package/dist/cjs/FrappeLikedBy.native.js +2 -0
  30. package/dist/cjs/FrappeLikedBy.native.js.map +1 -1
  31. package/dist/cjs/FrappeList.cjs +3 -1
  32. package/dist/cjs/FrappeList.native.js +3 -1
  33. package/dist/cjs/FrappeList.native.js.map +1 -1
  34. package/dist/cjs/FrappeListView.cjs +6 -12
  35. package/dist/cjs/FrappeListView.native.js +13 -12
  36. package/dist/cjs/FrappeListView.native.js.map +1 -1
  37. package/dist/cjs/FrappeProvider.cjs +5 -1
  38. package/dist/cjs/FrappeProvider.native.js +5 -1
  39. package/dist/cjs/FrappeProvider.native.js.map +1 -1
  40. package/dist/cjs/FrappeReportBuilder.cjs +2 -0
  41. package/dist/cjs/FrappeReportBuilder.native.js +2 -0
  42. package/dist/cjs/FrappeReportBuilder.native.js.map +1 -1
  43. package/dist/cjs/FrappeReportView.cjs +23 -45
  44. package/dist/cjs/FrappeReportView.native.js +35 -50
  45. package/dist/cjs/FrappeReportView.native.js.map +1 -1
  46. package/dist/cjs/FrappeTable.cjs +105 -31
  47. package/dist/cjs/FrappeTable.native.js +140 -42
  48. package/dist/cjs/FrappeTable.native.js.map +1 -1
  49. package/dist/cjs/FrappeTreeView.cjs +3 -1
  50. package/dist/cjs/FrappeTreeView.native.js +3 -1
  51. package/dist/cjs/FrappeTreeView.native.js.map +1 -1
  52. package/dist/cjs/SyncErrorNotice.cjs +76 -0
  53. package/dist/cjs/SyncErrorNotice.native.js +92 -0
  54. package/dist/cjs/SyncErrorNotice.native.js.map +1 -0
  55. package/dist/cjs/commentActions.cjs +120 -0
  56. package/dist/cjs/commentActions.native.js +129 -0
  57. package/dist/cjs/commentActions.native.js.map +1 -0
  58. package/dist/cjs/components/attachments.cjs +2 -0
  59. package/dist/cjs/components/attachments.native.js +2 -0
  60. package/dist/cjs/components/attachments.native.js.map +1 -1
  61. package/dist/cjs/components/tags.cjs +5 -0
  62. package/dist/cjs/components/tags.native.js +5 -0
  63. package/dist/cjs/components/tags.native.js.map +1 -1
  64. package/dist/cjs/components/timeline.cjs +29 -2
  65. package/dist/cjs/components/timeline.native.js +33 -2
  66. package/dist/cjs/components/timeline.native.js.map +1 -1
  67. package/dist/cjs/desk/DeskFormSidebar.cjs +2 -0
  68. package/dist/cjs/desk/DeskFormSidebar.native.js +2 -0
  69. package/dist/cjs/desk/DeskFormSidebar.native.js.map +1 -1
  70. package/dist/cjs/fieldRegistry.cjs +2 -0
  71. package/dist/cjs/fieldRegistry.native.js +2 -0
  72. package/dist/cjs/fieldRegistry.native.js.map +1 -1
  73. package/dist/cjs/fields/Date/index.cjs +71 -7
  74. package/dist/cjs/fields/Date/index.native.js +325 -37
  75. package/dist/cjs/fields/Date/index.native.js.map +1 -1
  76. package/dist/cjs/fields/Date/types.cjs +18 -0
  77. package/dist/cjs/fields/Date/types.native.js +21 -0
  78. package/dist/cjs/fields/Date/types.native.js.map +1 -0
  79. package/dist/cjs/fields/Date/wire.cjs +4 -8
  80. package/dist/cjs/fields/Date/wire.native.js +4 -11
  81. package/dist/cjs/fields/Date/wire.native.js.map +1 -1
  82. package/dist/cjs/fields/DynamicLink.cjs +2 -0
  83. package/dist/cjs/fields/DynamicLink.native.js +2 -0
  84. package/dist/cjs/fields/DynamicLink.native.js.map +1 -1
  85. package/dist/cjs/fields/FileUpload.cjs +2 -0
  86. package/dist/cjs/fields/FileUpload.native.js +2 -0
  87. package/dist/cjs/fields/FileUpload.native.js.map +1 -1
  88. package/dist/cjs/fields/TableMultiSelect.cjs +6 -1
  89. package/dist/cjs/fields/TableMultiSelect.native.js +6 -1
  90. package/dist/cjs/fields/TableMultiSelect.native.js.map +1 -1
  91. package/dist/cjs/frappeStoryTarget.cjs +88 -0
  92. package/dist/cjs/frappeStoryTarget.native.js +100 -0
  93. package/dist/cjs/frappeStoryTarget.native.js.map +1 -1
  94. package/dist/cjs/frappeUsers.cjs +2 -0
  95. package/dist/cjs/frappeUsers.native.js +2 -0
  96. package/dist/cjs/frappeUsers.native.js.map +1 -1
  97. package/dist/cjs/index.cjs +17 -4
  98. package/dist/cjs/index.native.js +17 -4
  99. package/dist/cjs/index.native.js.map +1 -1
  100. package/dist/cjs/liveErrors.cjs +5 -1
  101. package/dist/cjs/liveErrors.native.js +5 -1
  102. package/dist/cjs/liveErrors.native.js.map +1 -1
  103. package/dist/cjs/useFrappeAggregate.cjs +13 -1
  104. package/dist/cjs/useFrappeAggregate.native.js +14 -1
  105. package/dist/cjs/useFrappeAggregate.native.js.map +1 -1
  106. package/dist/cjs/useFrappeFacets.cjs +329 -0
  107. package/dist/cjs/useFrappeFacets.native.js +632 -0
  108. package/dist/cjs/useFrappeFacets.native.js.map +1 -0
  109. package/dist/esm/FrappeAssignment.mjs +2 -0
  110. package/dist/esm/FrappeAssignment.mjs.map +1 -1
  111. package/dist/esm/FrappeAssignment.native.js +2 -0
  112. package/dist/esm/FrappeAssignment.native.js.map +1 -1
  113. package/dist/esm/FrappeCalendar.mjs +6 -8
  114. package/dist/esm/FrappeCalendar.mjs.map +1 -1
  115. package/dist/esm/FrappeCalendar.native.js +6 -10
  116. package/dist/esm/FrappeCalendar.native.js.map +1 -1
  117. package/dist/esm/FrappeChartCard.mjs +2 -0
  118. package/dist/esm/FrappeChartCard.mjs.map +1 -1
  119. package/dist/esm/FrappeChartCard.native.js +2 -0
  120. package/dist/esm/FrappeChartCard.native.js.map +1 -1
  121. package/dist/esm/FrappeDashboard.mjs +12 -19
  122. package/dist/esm/FrappeDashboard.mjs.map +1 -1
  123. package/dist/esm/FrappeDashboard.native.js +23 -21
  124. package/dist/esm/FrappeDashboard.native.js.map +1 -1
  125. package/dist/esm/FrappeForm.mjs +3 -1
  126. package/dist/esm/FrappeForm.mjs.map +1 -1
  127. package/dist/esm/FrappeForm.native.js +3 -1
  128. package/dist/esm/FrappeForm.native.js.map +1 -1
  129. package/dist/esm/FrappeGantt.mjs +6 -8
  130. package/dist/esm/FrappeGantt.mjs.map +1 -1
  131. package/dist/esm/FrappeGantt.native.js +6 -10
  132. package/dist/esm/FrappeGantt.native.js.map +1 -1
  133. package/dist/esm/FrappeImageView.mjs +3 -1
  134. package/dist/esm/FrappeImageView.mjs.map +1 -1
  135. package/dist/esm/FrappeImageView.native.js +3 -1
  136. package/dist/esm/FrappeImageView.native.js.map +1 -1
  137. package/dist/esm/FrappeKPICard.mjs +2 -0
  138. package/dist/esm/FrappeKPICard.mjs.map +1 -1
  139. package/dist/esm/FrappeKPICard.native.js +2 -0
  140. package/dist/esm/FrappeKPICard.native.js.map +1 -1
  141. package/dist/esm/FrappeKanban.mjs +3 -1
  142. package/dist/esm/FrappeKanban.mjs.map +1 -1
  143. package/dist/esm/FrappeKanban.native.js +3 -1
  144. package/dist/esm/FrappeKanban.native.js.map +1 -1
  145. package/dist/esm/FrappeLikedBy.mjs +2 -0
  146. package/dist/esm/FrappeLikedBy.mjs.map +1 -1
  147. package/dist/esm/FrappeLikedBy.native.js +2 -0
  148. package/dist/esm/FrappeLikedBy.native.js.map +1 -1
  149. package/dist/esm/FrappeList.mjs +3 -1
  150. package/dist/esm/FrappeList.mjs.map +1 -1
  151. package/dist/esm/FrappeList.native.js +3 -1
  152. package/dist/esm/FrappeList.native.js.map +1 -1
  153. package/dist/esm/FrappeListView.mjs +7 -13
  154. package/dist/esm/FrappeListView.mjs.map +1 -1
  155. package/dist/esm/FrappeListView.native.js +15 -14
  156. package/dist/esm/FrappeListView.native.js.map +1 -1
  157. package/dist/esm/FrappeProvider.mjs +5 -1
  158. package/dist/esm/FrappeProvider.mjs.map +1 -1
  159. package/dist/esm/FrappeProvider.native.js +5 -1
  160. package/dist/esm/FrappeProvider.native.js.map +1 -1
  161. package/dist/esm/FrappeReportBuilder.mjs +2 -0
  162. package/dist/esm/FrappeReportBuilder.mjs.map +1 -1
  163. package/dist/esm/FrappeReportBuilder.native.js +2 -0
  164. package/dist/esm/FrappeReportBuilder.native.js.map +1 -1
  165. package/dist/esm/FrappeReportView.mjs +26 -49
  166. package/dist/esm/FrappeReportView.mjs.map +1 -1
  167. package/dist/esm/FrappeReportView.native.js +38 -54
  168. package/dist/esm/FrappeReportView.native.js.map +1 -1
  169. package/dist/esm/FrappeTable.mjs +107 -33
  170. package/dist/esm/FrappeTable.mjs.map +1 -1
  171. package/dist/esm/FrappeTable.native.js +142 -44
  172. package/dist/esm/FrappeTable.native.js.map +1 -1
  173. package/dist/esm/FrappeTreeView.mjs +3 -1
  174. package/dist/esm/FrappeTreeView.mjs.map +1 -1
  175. package/dist/esm/FrappeTreeView.native.js +3 -1
  176. package/dist/esm/FrappeTreeView.native.js.map +1 -1
  177. package/dist/esm/SyncErrorNotice.mjs +51 -0
  178. package/dist/esm/SyncErrorNotice.mjs.map +1 -0
  179. package/dist/esm/SyncErrorNotice.native.js +53 -0
  180. package/dist/esm/SyncErrorNotice.native.js.map +1 -0
  181. package/dist/esm/commentActions.mjs +95 -0
  182. package/dist/esm/commentActions.mjs.map +1 -0
  183. package/dist/esm/commentActions.native.js +101 -0
  184. package/dist/esm/commentActions.native.js.map +1 -0
  185. package/dist/esm/components/attachments.mjs +2 -0
  186. package/dist/esm/components/attachments.mjs.map +1 -1
  187. package/dist/esm/components/attachments.native.js +2 -0
  188. package/dist/esm/components/attachments.native.js.map +1 -1
  189. package/dist/esm/components/tags.mjs +5 -0
  190. package/dist/esm/components/tags.mjs.map +1 -1
  191. package/dist/esm/components/tags.native.js +5 -0
  192. package/dist/esm/components/tags.native.js.map +1 -1
  193. package/dist/esm/components/timeline.mjs +31 -4
  194. package/dist/esm/components/timeline.mjs.map +1 -1
  195. package/dist/esm/components/timeline.native.js +35 -4
  196. package/dist/esm/components/timeline.native.js.map +1 -1
  197. package/dist/esm/desk/DeskFormSidebar.mjs +2 -0
  198. package/dist/esm/desk/DeskFormSidebar.mjs.map +1 -1
  199. package/dist/esm/desk/DeskFormSidebar.native.js +2 -0
  200. package/dist/esm/desk/DeskFormSidebar.native.js.map +1 -1
  201. package/dist/esm/fieldRegistry.mjs +2 -0
  202. package/dist/esm/fieldRegistry.mjs.map +1 -1
  203. package/dist/esm/fieldRegistry.native.js +2 -0
  204. package/dist/esm/fieldRegistry.native.js.map +1 -1
  205. package/dist/esm/fields/Date/index.mjs +73 -9
  206. package/dist/esm/fields/Date/index.mjs.map +1 -1
  207. package/dist/esm/fields/Date/index.native.js +315 -38
  208. package/dist/esm/fields/Date/index.native.js.map +1 -1
  209. package/dist/esm/fields/Date/types.mjs +2 -0
  210. package/dist/esm/fields/Date/types.mjs.map +1 -0
  211. package/dist/esm/fields/Date/types.native.js +2 -0
  212. package/dist/esm/fields/Date/types.native.js.map +1 -0
  213. package/dist/esm/fields/Date/wire.mjs +4 -8
  214. package/dist/esm/fields/Date/wire.mjs.map +1 -1
  215. package/dist/esm/fields/Date/wire.native.js +4 -11
  216. package/dist/esm/fields/Date/wire.native.js.map +1 -1
  217. package/dist/esm/fields/DynamicLink.mjs +2 -0
  218. package/dist/esm/fields/DynamicLink.mjs.map +1 -1
  219. package/dist/esm/fields/DynamicLink.native.js +2 -0
  220. package/dist/esm/fields/DynamicLink.native.js.map +1 -1
  221. package/dist/esm/fields/FileUpload.mjs +2 -0
  222. package/dist/esm/fields/FileUpload.mjs.map +1 -1
  223. package/dist/esm/fields/FileUpload.native.js +2 -0
  224. package/dist/esm/fields/FileUpload.native.js.map +1 -1
  225. package/dist/esm/fields/TableMultiSelect.mjs +7 -2
  226. package/dist/esm/fields/TableMultiSelect.mjs.map +1 -1
  227. package/dist/esm/fields/TableMultiSelect.native.js +7 -2
  228. package/dist/esm/fields/TableMultiSelect.native.js.map +1 -1
  229. package/dist/esm/frappeStoryTarget.mjs +88 -2
  230. package/dist/esm/frappeStoryTarget.mjs.map +1 -1
  231. package/dist/esm/frappeStoryTarget.native.js +100 -2
  232. package/dist/esm/frappeStoryTarget.native.js.map +1 -1
  233. package/dist/esm/frappeUsers.mjs +2 -0
  234. package/dist/esm/frappeUsers.mjs.map +1 -1
  235. package/dist/esm/frappeUsers.native.js +2 -0
  236. package/dist/esm/frappeUsers.native.js.map +1 -1
  237. package/dist/esm/index.mjs +7 -3
  238. package/dist/esm/index.mjs.map +1 -1
  239. package/dist/esm/index.native.js +7 -3
  240. package/dist/esm/index.native.js.map +1 -1
  241. package/dist/esm/liveErrors.mjs +5 -1
  242. package/dist/esm/liveErrors.mjs.map +1 -1
  243. package/dist/esm/liveErrors.native.js +5 -1
  244. package/dist/esm/liveErrors.native.js.map +1 -1
  245. package/dist/esm/useFrappeAggregate.mjs +13 -1
  246. package/dist/esm/useFrappeAggregate.mjs.map +1 -1
  247. package/dist/esm/useFrappeAggregate.native.js +14 -1
  248. package/dist/esm/useFrappeAggregate.native.js.map +1 -1
  249. package/dist/esm/useFrappeFacets.mjs +299 -0
  250. package/dist/esm/useFrappeFacets.mjs.map +1 -0
  251. package/dist/esm/useFrappeFacets.native.js +599 -0
  252. package/dist/esm/useFrappeFacets.native.js.map +1 -0
  253. package/dist/jsx/FrappeAssignment.mjs +2 -0
  254. package/dist/jsx/FrappeAssignment.mjs.map +1 -1
  255. package/dist/jsx/FrappeAssignment.native.js +2 -0
  256. package/dist/jsx/FrappeAssignment.native.js.map +1 -1
  257. package/dist/jsx/FrappeCalendar.mjs +6 -8
  258. package/dist/jsx/FrappeCalendar.mjs.map +1 -1
  259. package/dist/jsx/FrappeCalendar.native.js +5 -9
  260. package/dist/jsx/FrappeCalendar.native.js.map +1 -1
  261. package/dist/jsx/FrappeChartCard.mjs +2 -0
  262. package/dist/jsx/FrappeChartCard.mjs.map +1 -1
  263. package/dist/jsx/FrappeChartCard.native.js +2 -0
  264. package/dist/jsx/FrappeChartCard.native.js.map +1 -1
  265. package/dist/jsx/FrappeDashboard.mjs +12 -19
  266. package/dist/jsx/FrappeDashboard.mjs.map +1 -1
  267. package/dist/jsx/FrappeDashboard.native.js +20 -22
  268. package/dist/jsx/FrappeDashboard.native.js.map +1 -1
  269. package/dist/jsx/FrappeForm.mjs +3 -1
  270. package/dist/jsx/FrappeForm.mjs.map +1 -1
  271. package/dist/jsx/FrappeForm.native.js +3 -1
  272. package/dist/jsx/FrappeForm.native.js.map +1 -1
  273. package/dist/jsx/FrappeGantt.mjs +6 -8
  274. package/dist/jsx/FrappeGantt.mjs.map +1 -1
  275. package/dist/jsx/FrappeGantt.native.js +5 -9
  276. package/dist/jsx/FrappeGantt.native.js.map +1 -1
  277. package/dist/jsx/FrappeImageView.mjs +3 -1
  278. package/dist/jsx/FrappeImageView.mjs.map +1 -1
  279. package/dist/jsx/FrappeImageView.native.js +3 -1
  280. package/dist/jsx/FrappeImageView.native.js.map +1 -1
  281. package/dist/jsx/FrappeKPICard.mjs +2 -0
  282. package/dist/jsx/FrappeKPICard.mjs.map +1 -1
  283. package/dist/jsx/FrappeKPICard.native.js +2 -0
  284. package/dist/jsx/FrappeKPICard.native.js.map +1 -1
  285. package/dist/jsx/FrappeKanban.mjs +3 -1
  286. package/dist/jsx/FrappeKanban.mjs.map +1 -1
  287. package/dist/jsx/FrappeKanban.native.js +3 -1
  288. package/dist/jsx/FrappeKanban.native.js.map +1 -1
  289. package/dist/jsx/FrappeLikedBy.mjs +2 -0
  290. package/dist/jsx/FrappeLikedBy.mjs.map +1 -1
  291. package/dist/jsx/FrappeLikedBy.native.js +2 -0
  292. package/dist/jsx/FrappeLikedBy.native.js.map +1 -1
  293. package/dist/jsx/FrappeList.mjs +3 -1
  294. package/dist/jsx/FrappeList.mjs.map +1 -1
  295. package/dist/jsx/FrappeList.native.js +3 -1
  296. package/dist/jsx/FrappeList.native.js.map +1 -1
  297. package/dist/jsx/FrappeListView.mjs +7 -13
  298. package/dist/jsx/FrappeListView.mjs.map +1 -1
  299. package/dist/jsx/FrappeListView.native.js +13 -12
  300. package/dist/jsx/FrappeListView.native.js.map +1 -1
  301. package/dist/jsx/FrappeProvider.mjs +5 -1
  302. package/dist/jsx/FrappeProvider.mjs.map +1 -1
  303. package/dist/jsx/FrappeProvider.native.js +5 -1
  304. package/dist/jsx/FrappeProvider.native.js.map +1 -1
  305. package/dist/jsx/FrappeReportBuilder.mjs +2 -0
  306. package/dist/jsx/FrappeReportBuilder.mjs.map +1 -1
  307. package/dist/jsx/FrappeReportBuilder.native.js +2 -0
  308. package/dist/jsx/FrappeReportBuilder.native.js.map +1 -1
  309. package/dist/jsx/FrappeReportView.mjs +26 -49
  310. package/dist/jsx/FrappeReportView.mjs.map +1 -1
  311. package/dist/jsx/FrappeReportView.native.js +35 -50
  312. package/dist/jsx/FrappeReportView.native.js.map +1 -1
  313. package/dist/jsx/FrappeTable.mjs +107 -33
  314. package/dist/jsx/FrappeTable.mjs.map +1 -1
  315. package/dist/jsx/FrappeTable.native.js +140 -42
  316. package/dist/jsx/FrappeTable.native.js.map +1 -1
  317. package/dist/jsx/FrappeTreeView.mjs +3 -1
  318. package/dist/jsx/FrappeTreeView.mjs.map +1 -1
  319. package/dist/jsx/FrappeTreeView.native.js +3 -1
  320. package/dist/jsx/FrappeTreeView.native.js.map +1 -1
  321. package/dist/jsx/SyncErrorNotice.mjs +51 -0
  322. package/dist/jsx/SyncErrorNotice.mjs.map +1 -0
  323. package/dist/jsx/SyncErrorNotice.native.js +92 -0
  324. package/dist/jsx/SyncErrorNotice.native.js.map +1 -0
  325. package/dist/jsx/commentActions.mjs +95 -0
  326. package/dist/jsx/commentActions.mjs.map +1 -0
  327. package/dist/jsx/commentActions.native.js +129 -0
  328. package/dist/jsx/commentActions.native.js.map +1 -0
  329. package/dist/jsx/components/attachments.mjs +2 -0
  330. package/dist/jsx/components/attachments.mjs.map +1 -1
  331. package/dist/jsx/components/attachments.native.js +2 -0
  332. package/dist/jsx/components/attachments.native.js.map +1 -1
  333. package/dist/jsx/components/tags.mjs +5 -0
  334. package/dist/jsx/components/tags.mjs.map +1 -1
  335. package/dist/jsx/components/tags.native.js +5 -0
  336. package/dist/jsx/components/tags.native.js.map +1 -1
  337. package/dist/jsx/components/timeline.mjs +31 -4
  338. package/dist/jsx/components/timeline.mjs.map +1 -1
  339. package/dist/jsx/components/timeline.native.js +33 -2
  340. package/dist/jsx/components/timeline.native.js.map +1 -1
  341. package/dist/jsx/desk/DeskFormSidebar.mjs +2 -0
  342. package/dist/jsx/desk/DeskFormSidebar.mjs.map +1 -1
  343. package/dist/jsx/desk/DeskFormSidebar.native.js +2 -0
  344. package/dist/jsx/desk/DeskFormSidebar.native.js.map +1 -1
  345. package/dist/jsx/fieldRegistry.mjs +2 -0
  346. package/dist/jsx/fieldRegistry.mjs.map +1 -1
  347. package/dist/jsx/fieldRegistry.native.js +2 -0
  348. package/dist/jsx/fieldRegistry.native.js.map +1 -1
  349. package/dist/jsx/fields/Date/index.mjs +73 -9
  350. package/dist/jsx/fields/Date/index.mjs.map +1 -1
  351. package/dist/jsx/fields/Date/index.native.js +325 -37
  352. package/dist/jsx/fields/Date/index.native.js.map +1 -1
  353. package/dist/jsx/fields/Date/types.mjs +2 -0
  354. package/dist/jsx/fields/Date/types.mjs.map +1 -0
  355. package/dist/jsx/fields/Date/types.native.js +21 -0
  356. package/dist/jsx/fields/Date/types.native.js.map +1 -0
  357. package/dist/jsx/fields/Date/wire.mjs +4 -8
  358. package/dist/jsx/fields/Date/wire.mjs.map +1 -1
  359. package/dist/jsx/fields/Date/wire.native.js +4 -11
  360. package/dist/jsx/fields/Date/wire.native.js.map +1 -1
  361. package/dist/jsx/fields/DynamicLink.mjs +2 -0
  362. package/dist/jsx/fields/DynamicLink.mjs.map +1 -1
  363. package/dist/jsx/fields/DynamicLink.native.js +2 -0
  364. package/dist/jsx/fields/DynamicLink.native.js.map +1 -1
  365. package/dist/jsx/fields/FileUpload.mjs +2 -0
  366. package/dist/jsx/fields/FileUpload.mjs.map +1 -1
  367. package/dist/jsx/fields/FileUpload.native.js +2 -0
  368. package/dist/jsx/fields/FileUpload.native.js.map +1 -1
  369. package/dist/jsx/fields/TableMultiSelect.mjs +7 -2
  370. package/dist/jsx/fields/TableMultiSelect.mjs.map +1 -1
  371. package/dist/jsx/fields/TableMultiSelect.native.js +6 -1
  372. package/dist/jsx/fields/TableMultiSelect.native.js.map +1 -1
  373. package/dist/jsx/frappeStoryTarget.mjs +88 -2
  374. package/dist/jsx/frappeStoryTarget.mjs.map +1 -1
  375. package/dist/jsx/frappeStoryTarget.native.js +100 -0
  376. package/dist/jsx/frappeStoryTarget.native.js.map +1 -1
  377. package/dist/jsx/frappeUsers.mjs +2 -0
  378. package/dist/jsx/frappeUsers.mjs.map +1 -1
  379. package/dist/jsx/frappeUsers.native.js +2 -0
  380. package/dist/jsx/frappeUsers.native.js.map +1 -1
  381. package/dist/jsx/index.js +7 -3
  382. package/dist/jsx/index.js.map +1 -1
  383. package/dist/jsx/index.mjs +7 -3
  384. package/dist/jsx/index.mjs.map +1 -1
  385. package/dist/jsx/index.native.js +17 -4
  386. package/dist/jsx/index.native.js.map +1 -1
  387. package/dist/jsx/liveErrors.mjs +5 -1
  388. package/dist/jsx/liveErrors.mjs.map +1 -1
  389. package/dist/jsx/liveErrors.native.js +5 -1
  390. package/dist/jsx/liveErrors.native.js.map +1 -1
  391. package/dist/jsx/useFrappeAggregate.mjs +13 -1
  392. package/dist/jsx/useFrappeAggregate.mjs.map +1 -1
  393. package/dist/jsx/useFrappeAggregate.native.js +14 -1
  394. package/dist/jsx/useFrappeAggregate.native.js.map +1 -1
  395. package/dist/jsx/useFrappeFacets.mjs +299 -0
  396. package/dist/jsx/useFrappeFacets.mjs.map +1 -0
  397. package/dist/jsx/useFrappeFacets.native.js +632 -0
  398. package/dist/jsx/useFrappeFacets.native.js.map +1 -0
  399. package/package.json +21 -21
  400. package/src/FormSidebar.stories.tsx +88 -10
  401. package/src/FrappeAssignment.tsx +2 -0
  402. package/src/FrappeCalendar.tsx +12 -7
  403. package/src/FrappeChartCard.tsx +9 -2
  404. package/src/FrappeDashboard.spec.tsx +95 -0
  405. package/src/FrappeDashboard.tsx +20 -41
  406. package/src/FrappeForm.stories.tsx +53 -46
  407. package/src/FrappeForm.tsx +11 -1
  408. package/src/FrappeGantt.tsx +12 -7
  409. package/src/FrappeImageView.tsx +11 -1
  410. package/src/FrappeKPICard.stories.tsx +4 -1
  411. package/src/FrappeKPICard.tsx +2 -0
  412. package/src/FrappeKanban.tsx +4 -0
  413. package/src/FrappeLikedBy.stories.tsx +26 -10
  414. package/src/FrappeLikedBy.tsx +2 -0
  415. package/src/FrappeList.tsx +11 -1
  416. package/src/FrappeListView.spec.tsx +144 -0
  417. package/src/FrappeListView.tsx +11 -23
  418. package/src/FrappeProvider.tsx +30 -2
  419. package/src/FrappeReportBuilder.tsx +2 -0
  420. package/src/FrappeReportView.spec.tsx +140 -16
  421. package/src/FrappeReportView.stories.tsx +12 -6
  422. package/src/FrappeReportView.tsx +62 -61
  423. package/src/FrappeTable.keepRows.spec.tsx +200 -0
  424. package/src/FrappeTable.retryStorm.spec.tsx +140 -0
  425. package/src/FrappeTable.spec.tsx +222 -0
  426. package/src/FrappeTable.tsx +211 -54
  427. package/src/FrappeTreeView.tsx +11 -1
  428. package/src/SyncErrorNotice.spec.tsx +60 -0
  429. package/src/SyncErrorNotice.tsx +81 -0
  430. package/src/commentActions.ts +157 -0
  431. package/src/components/attachments.tsx +2 -0
  432. package/src/components/tags.tsx +14 -1
  433. package/src/components/timeline.optimistic.spec.tsx +106 -0
  434. package/src/components/timeline.tsx +36 -4
  435. package/src/desk/DeskFormSidebar.tsx +2 -0
  436. package/src/fieldRegistry.ts +2 -0
  437. package/src/fields/Date/index.native.tsx +410 -0
  438. package/src/fields/Date/index.tsx +138 -57
  439. package/src/fields/Date/nativePresentation.spec.tsx +251 -0
  440. package/src/fields/Date/typeParity.spec.tsx +480 -0
  441. package/src/fields/Date/types.ts +53 -0
  442. package/src/fields/Date/wire.spec.ts +63 -1
  443. package/src/fields/Date/wire.ts +17 -17
  444. package/src/fields/DynamicLink.tsx +2 -0
  445. package/src/fields/FileUpload.tsx +2 -0
  446. package/src/fields/TableMultiSelect.tsx +6 -3
  447. package/src/frappeStoryTarget.tsx +104 -1
  448. package/src/frappeUsers.ts +2 -0
  449. package/src/index.spec.ts +62 -0
  450. package/src/index.ts +36 -2
  451. package/src/liveErrors.spec.ts +50 -0
  452. package/src/liveErrors.ts +11 -1
  453. package/src/useFrappeAggregate.ts +20 -1
  454. package/src/useFrappeFacets.spec.tsx +436 -0
  455. package/src/useFrappeFacets.ts +568 -0
  456. package/types/FrappeAssignment.d.ts.map +1 -1
  457. package/types/FrappeCalendar.d.ts.map +1 -1
  458. package/types/FrappeChartCard.d.ts +1 -2
  459. package/types/FrappeChartCard.d.ts.map +1 -1
  460. package/types/FrappeDashboard.d.ts +0 -1
  461. package/types/FrappeDashboard.d.ts.map +1 -1
  462. package/types/FrappeForm.d.ts.map +1 -1
  463. package/types/FrappeGantt.d.ts.map +1 -1
  464. package/types/FrappeKPICard.d.ts.map +1 -1
  465. package/types/FrappeKanban.d.ts.map +1 -1
  466. package/types/FrappeLikedBy.d.ts.map +1 -1
  467. package/types/FrappeList.d.ts.map +1 -1
  468. package/types/FrappeListView.d.ts.map +1 -1
  469. package/types/FrappeProvider.d.ts +18 -1
  470. package/types/FrappeProvider.d.ts.map +1 -1
  471. package/types/FrappeReportBuilder.d.ts.map +1 -1
  472. package/types/FrappeReportView.d.ts +22 -15
  473. package/types/FrappeReportView.d.ts.map +1 -1
  474. package/types/FrappeTable.d.ts +21 -2
  475. package/types/FrappeTable.d.ts.map +1 -1
  476. package/types/FrappeTreeView.d.ts.map +1 -1
  477. package/types/SyncErrorNotice.d.ts +38 -0
  478. package/types/SyncErrorNotice.d.ts.map +1 -0
  479. package/types/commentActions.d.ts +46 -0
  480. package/types/commentActions.d.ts.map +1 -0
  481. package/types/components/attachments.d.ts.map +1 -1
  482. package/types/components/tags.d.ts.map +1 -1
  483. package/types/components/timeline.d.ts.map +1 -1
  484. package/types/desk/DeskFormSidebar.d.ts.map +1 -1
  485. package/types/fieldRegistry.d.ts.map +1 -1
  486. package/types/fields/Date/index.d.ts +22 -12
  487. package/types/fields/Date/index.d.ts.map +1 -1
  488. package/types/fields/Date/index.native.d.ts +14 -0
  489. package/types/fields/Date/index.native.d.ts.map +1 -0
  490. package/types/fields/Date/types.d.ts +27 -0
  491. package/types/fields/Date/types.d.ts.map +1 -0
  492. package/types/fields/Date/wire.d.ts +13 -9
  493. package/types/fields/Date/wire.d.ts.map +1 -1
  494. package/types/fields/DynamicLink.d.ts.map +1 -1
  495. package/types/fields/FileUpload.d.ts.map +1 -1
  496. package/types/fields/TableMultiSelect.d.ts.map +1 -1
  497. package/types/frappeStoryTarget.d.ts +19 -1
  498. package/types/frappeStoryTarget.d.ts.map +1 -1
  499. package/types/frappeUsers.d.ts.map +1 -1
  500. package/types/index.d.ts +6 -2
  501. package/types/index.d.ts.map +1 -1
  502. package/types/liveErrors.d.ts +4 -0
  503. package/types/liveErrors.d.ts.map +1 -1
  504. package/types/useFrappeAggregate.d.ts +4 -0
  505. package/types/useFrappeAggregate.d.ts.map +1 -1
  506. package/types/useFrappeFacets.d.ts +143 -0
  507. package/types/useFrappeFacets.d.ts.map +1 -0
  508. package/dist/cjs/fields/Date/date.native.js +0 -277
  509. package/dist/cjs/fields/Date/date.native.js.map +0 -1
  510. package/dist/esm/fields/Date/date.native.js +0 -238
  511. package/dist/esm/fields/Date/date.native.js.map +0 -1
  512. package/dist/jsx/fields/Date/date.native.js +0 -277
  513. package/dist/jsx/fields/Date/date.native.js.map +0 -1
  514. package/src/fields/Date/date.native.tsx +0 -299
  515. package/types/fields/Date/date.native.d.ts +0 -19
  516. package/types/fields/Date/date.native.d.ts.map +0 -1
@@ -0,0 +1,568 @@
1
+ /**
2
+ * useFrappeFacets — reusable facet counts for a doctype list, promoted from
3
+ * the backoffice list-sidebar data layer (sidebar-stats) so any table header
4
+ * can feed DataTableFacetMenu. Verified against a live bench:
5
+ *
6
+ * - `frappe.desk.listview.get_group_by_count` (POST {doctype,
7
+ * current_filters, field}) → `{ message: [{ name, count }] }`, ordered by
8
+ * count desc. For `field: "assigned_to"` the server aggregates the ToDo
9
+ * assignment table per user (System Users, non-cancelled assignments) —
10
+ * the proper desk semantics for the JSON-array `_assign` column. Used for
11
+ * the Assigned To and Created By facets (desk list_sidebar_group_by.js
12
+ * parity, including the Guest/Administrator scrub and "Me" pinning via
13
+ * `scrubUserFacetRows`).
14
+ *
15
+ * - `frappe.desk.reportview.get_sidebar_stats` (POST {stats, doctype,
16
+ * filters}) → `{ message: { stats: { [fieldname]: [label, count][] } } }`.
17
+ * `_user_tags` entries are per-tag (comma-split server-side) plus a
18
+ * trailing translated `["No Tags", n]` row; other columns are raw grouped
19
+ * values (empties excluded server-side). Used for the Tags, status, and
20
+ * arbitrary column facets (e.g. `module`). NOTE: `stats` and `filters`
21
+ * MUST be JSON-encoded strings — the endpoint json.loads() them and 500s
22
+ * on raw arrays.
23
+ *
24
+ * Desk parity on filter context: each facet's counts are computed with
25
+ * every OTHER active filter applied (tuples on the facet's own fieldname
26
+ * excluded — `filtersExcludingField`), mirroring desk's group-by sidebar.
27
+ *
28
+ * Revalidation is STALE-WHILE-VISIBLE: after a facet's first load, a
29
+ * doctype-scoped filter change keeps the shown options rendered and marks
30
+ * the facet `isStale` while the new counts reconcile in place — menus never
31
+ * blank while the user composes filters. `isLoading` is first-load only.
32
+ *
33
+ * Fixture mode (`connection.fixtures` — Storybook / tests): counts are
34
+ * computed client-side from the fixture rows via `matchesFilters` (the
35
+ * frappe operator set) and no network is touched.
36
+ */
37
+ import {
38
+ CallModule,
39
+ HttpClient,
40
+ matchesFilters,
41
+ type AuthConfig,
42
+ type FixtureProvider,
43
+ } from "@multiplatform.one/frappe";
44
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
45
+ import { useFrappeConfig } from "./FrappeProvider";
46
+
47
+ /** One frappe filter tuple — `[fieldname, operator, value]`. */
48
+ export type FrappeFacetFilter = [string, string, unknown];
49
+ export type FrappeFacetFilters = FrappeFacetFilter[];
50
+
51
+ /**
52
+ * Server-side label of the pseudo tag row (frappe translates it, so this
53
+ * detection — like desk's own `label == "No Tags"` compare — only works on
54
+ * English benches; non-English benches show it as a regular tag row).
55
+ */
56
+ export const NO_TAGS_LABEL = "No Tags";
57
+
58
+ export interface FrappeFacetOption {
59
+ /** Raw facet value (user id, tag, status value). */
60
+ value: string;
61
+ count: number;
62
+ /** True for the server's synthetic "No Tags" row. */
63
+ isNoTags?: boolean;
64
+ }
65
+
66
+ export interface FrappeFacetState {
67
+ /**
68
+ * Undefined until the first load resolves (or after a doctype swap);
69
+ * kept POPULATED during revalidation — pair with `isStale`.
70
+ */
71
+ options?: FrappeFacetOption[];
72
+ /** First load in flight — nothing to show yet. */
73
+ isLoading: boolean;
74
+ /** Revalidation in flight — shown options may be outdated. */
75
+ isStale: boolean;
76
+ error?: Error;
77
+ }
78
+
79
+ /** Connection shape shared with the other frappe-ui widgets. */
80
+ export interface FrappeFacetsConnection {
81
+ baseURL: string;
82
+ auth?: { useToken?: boolean; token?: string | (() => string | Promise<string>); type?: string };
83
+ fixtures?: FixtureProvider;
84
+ }
85
+
86
+ export interface UseFrappeFacetsOptions {
87
+ /** Override the ambient FrappeProvider connection. */
88
+ connection?: FrappeFacetsConnection;
89
+ /** Fieldname of the doctype's status/workflow Select field, when present. */
90
+ statusFieldname?: string;
91
+ /**
92
+ * Extra column facets via get_sidebar_stats (e.g. `["module"]`) — results
93
+ * land under `columns[fieldname]`.
94
+ */
95
+ columns?: readonly string[];
96
+ /** Set false to pause fetching (default true). */
97
+ enabled?: boolean;
98
+ }
99
+
100
+ export interface UseFrappeFacetsResult {
101
+ /** Unscrubbed user rows — pass through scrubUserFacetRows() to render. */
102
+ assigned: FrappeFacetState;
103
+ /** Unscrubbed user rows — pass through scrubUserFacetRows() to render. */
104
+ owner: FrappeFacetState;
105
+ tags: FrappeFacetState;
106
+ /** Empty-idle unless `statusFieldname` is set. */
107
+ status: FrappeFacetState;
108
+ /** Extra column facets, keyed by fieldname (see `options.columns`). */
109
+ columns: Record<string, FrappeFacetState>;
110
+ /** Immediate refetch of every facet. */
111
+ refresh: () => void;
112
+ }
113
+
114
+ // ── Pure helpers (desk list_sidebar_group_by.js parity) ───────
115
+
116
+ /** Tuples on `fieldname` removed — the "other" filters for that facet. */
117
+ export function filtersExcludingField(
118
+ filters: FrappeFacetFilters,
119
+ fieldname: string,
120
+ ): FrappeFacetFilters {
121
+ return filters.filter((filter) => filter[0] !== fieldname);
122
+ }
123
+
124
+ /** Exact-tuple active check (fieldname + operator + stringified value). */
125
+ export function isFacetFilterActive(
126
+ filters: FrappeFacetFilters,
127
+ tuple: FrappeFacetFilter,
128
+ ): boolean {
129
+ return filters.some(
130
+ (filter) =>
131
+ filter[0] === tuple[0] &&
132
+ String(filter[1]).toLowerCase() === String(tuple[1]).toLowerCase() &&
133
+ String(filter[2]) === String(tuple[2]),
134
+ );
135
+ }
136
+
137
+ /**
138
+ * Desk toggle semantics (list_sidebar_group_by.js setup_filter_by): clicking
139
+ * a row first clears every filter on that facet's fieldname, then applies
140
+ * the row's tuple unless it was already active (toggle off / replace).
141
+ */
142
+ export function toggleFacetFilter(
143
+ filters: FrappeFacetFilters,
144
+ tuple: FrappeFacetFilter,
145
+ ): FrappeFacetFilters {
146
+ const active = isFacetFilterActive(filters, tuple);
147
+ const rest = filtersExcludingField(filters, tuple[0]);
148
+ return active ? rest : [...rest, tuple];
149
+ }
150
+
151
+ /**
152
+ * Desk scrub for the user facets (list_sidebar_group_by.js): hide the
153
+ * Guest/Administrator noise — except the session user, who is pinned to
154
+ * the top ("Me"). Pure, applied at render time; skipped entirely while the
155
+ * session user is unknown so an Administrator-only bench still shows rows.
156
+ */
157
+ export function scrubUserFacetRows(
158
+ rows: FrappeFacetOption[],
159
+ sessionUser?: string,
160
+ ): FrappeFacetOption[] {
161
+ if (!sessionUser) return rows;
162
+ const current = rows.find((row) => row.value === sessionUser);
163
+ const rest = rows.filter((row) => !["Guest", "Administrator", sessionUser].includes(row.value));
164
+ return current ? [current, ...rest] : rest;
165
+ }
166
+
167
+ // ── Server fetchers ───────────────────────────────────────────
168
+
169
+ // One RPC client per connection — facets sharing a bench share it.
170
+ const callCache = new Map<string, CallModule>();
171
+
172
+ function getCall(connection: FrappeFacetsConnection): CallModule {
173
+ const key = `${connection.baseURL}:${connection.auth?.token ?? ""}:${connection.auth?.type ?? ""}`;
174
+ let call = callCache.get(key);
175
+ if (!call) {
176
+ const authConfig: AuthConfig | undefined = connection.auth
177
+ ? {
178
+ useToken: connection.auth.useToken,
179
+ token: connection.auth.token,
180
+ type: connection.auth.type as AuthConfig["type"],
181
+ }
182
+ : undefined;
183
+ call = new CallModule(new HttpClient(connection.baseURL, authConfig));
184
+ callCache.set(key, call);
185
+ }
186
+ return call;
187
+ }
188
+
189
+ interface GroupByCountRow {
190
+ name: string | null;
191
+ count: number;
192
+ }
193
+
194
+ async function fetchGroupByCount(
195
+ call: CallModule,
196
+ doctype: string,
197
+ currentFilters: FrappeFacetFilters,
198
+ field: "assigned_to" | "owner",
199
+ ): Promise<FrappeFacetOption[]> {
200
+ const res = await call.post<{ message?: GroupByCountRow[] }>(
201
+ "frappe.desk.listview.get_group_by_count",
202
+ {
203
+ doctype,
204
+ current_filters: JSON.stringify(currentFilters),
205
+ field,
206
+ },
207
+ );
208
+ const rows = res.payload?.message ?? [];
209
+ // Null groups ("Not Set") and zero counts are dropped like desk does; the
210
+ // session-user scrub happens at render time (scrubUserFacetRows) so rows
211
+ // don't need a refetch when the session user resolves.
212
+ return rows
213
+ .filter((row): row is GroupByCountRow & { name: string } => !!row.name && row.count !== 0)
214
+ .map((row) => ({ value: row.name, count: Number(row.count) || 0 }));
215
+ }
216
+
217
+ async function fetchColumnStats(
218
+ call: CallModule,
219
+ doctype: string,
220
+ fieldname: string,
221
+ currentFilters: FrappeFacetFilters,
222
+ ): Promise<[string, number][]> {
223
+ const res = await call.post<{ message?: { stats?: Record<string, [string, number][]> } }>(
224
+ "frappe.desk.reportview.get_sidebar_stats",
225
+ {
226
+ doctype,
227
+ stats: JSON.stringify([fieldname]),
228
+ filters: JSON.stringify(currentFilters),
229
+ },
230
+ );
231
+ return res.payload?.message?.stats?.[fieldname] ?? [];
232
+ }
233
+
234
+ function mapTagStats(entries: [string, number][]): FrappeFacetOption[] {
235
+ return entries
236
+ .map(([label, count]) => ({
237
+ value: String(label),
238
+ count: Number(count) || 0,
239
+ isNoTags: String(label) === NO_TAGS_LABEL,
240
+ }))
241
+ .filter((row) => row.value !== "" && (!row.isNoTags || row.count > 0));
242
+ }
243
+
244
+ function mapColumnStats(entries: [string, number][]): FrappeFacetOption[] {
245
+ return entries
246
+ .map(([value, count]) => ({ value: String(value), count: Number(count) || 0 }))
247
+ .filter((row) => row.value !== "")
248
+ .sort((a, b) => b.count - a.count || a.value.localeCompare(b.value));
249
+ }
250
+
251
+ // ── Fixture mode (Storybook / tests) ──────────────────────────
252
+
253
+ function parseAssignedUsers(raw: unknown): string[] {
254
+ if (Array.isArray(raw)) {
255
+ return raw.filter((user): user is string => typeof user === "string" && !!user);
256
+ }
257
+ if (typeof raw !== "string" || !raw) return [];
258
+ try {
259
+ const parsed = JSON.parse(raw);
260
+ return Array.isArray(parsed)
261
+ ? parsed.filter((user): user is string => typeof user === "string" && !!user)
262
+ : [];
263
+ } catch {
264
+ return [];
265
+ }
266
+ }
267
+
268
+ function toSortedCounts(counts: Map<string, number>): FrappeFacetOption[] {
269
+ return [...counts.entries()]
270
+ .map(([value, count]) => ({ value, count }))
271
+ .sort((a, b) => b.count - a.count || a.value.localeCompare(b.value));
272
+ }
273
+
274
+ interface FixtureFacets {
275
+ assigned: FrappeFacetOption[];
276
+ owner: FrappeFacetOption[];
277
+ tags: FrappeFacetOption[];
278
+ status?: FrappeFacetOption[];
279
+ columns: Record<string, FrappeFacetOption[]>;
280
+ }
281
+
282
+ async function fetchFixtureFacets(
283
+ fixtures: FixtureProvider,
284
+ doctype: string,
285
+ filters: FrappeFacetFilters,
286
+ statusFieldname?: string,
287
+ columnFieldnames?: readonly string[],
288
+ ): Promise<FixtureFacets> {
289
+ const all = (await fixtures.getList(doctype)) as Record<string, unknown>[];
290
+ const rowsFor = (fieldname: string) => {
291
+ const others = filtersExcludingField(filters, fieldname);
292
+ if (others.length === 0) return all;
293
+ // matchesFilters implements the frappe operator set (like/not like/…),
294
+ // which the fixture provider's own getList filtering does not.
295
+ return all.filter((row) =>
296
+ matchesFilters(
297
+ row as Parameters<typeof matchesFilters>[0],
298
+ others as Parameters<typeof matchesFilters>[1],
299
+ ),
300
+ );
301
+ };
302
+
303
+ const assignedCounts = new Map<string, number>();
304
+ for (const row of rowsFor("_assign")) {
305
+ for (const user of parseAssignedUsers(row._assign)) {
306
+ assignedCounts.set(user, (assignedCounts.get(user) ?? 0) + 1);
307
+ }
308
+ }
309
+
310
+ const ownerCounts = new Map<string, number>();
311
+ for (const row of rowsFor("owner")) {
312
+ if (typeof row.owner === "string" && row.owner) {
313
+ ownerCounts.set(row.owner, (ownerCounts.get(row.owner) ?? 0) + 1);
314
+ }
315
+ }
316
+
317
+ const tagCounts = new Map<string, number>();
318
+ let noTagCount = 0;
319
+ for (const row of rowsFor("_user_tags")) {
320
+ const tags = String((row._user_tags as string | undefined) ?? "")
321
+ .split(",")
322
+ .map((tag) => tag.trim())
323
+ .filter(Boolean);
324
+ if (tags.length === 0) {
325
+ noTagCount += 1;
326
+ continue;
327
+ }
328
+ for (const tag of tags) tagCounts.set(tag, (tagCounts.get(tag) ?? 0) + 1);
329
+ }
330
+ const tags = toSortedCounts(tagCounts);
331
+ if (tags.length > 0 && noTagCount > 0) {
332
+ tags.push({ value: NO_TAGS_LABEL, count: noTagCount, isNoTags: true });
333
+ }
334
+
335
+ const countColumn = (fieldname: string): FrappeFacetOption[] => {
336
+ const counts = new Map<string, number>();
337
+ for (const row of rowsFor(fieldname)) {
338
+ const value = row[fieldname];
339
+ if (value !== undefined && value !== null && value !== "") {
340
+ counts.set(String(value), (counts.get(String(value)) ?? 0) + 1);
341
+ }
342
+ }
343
+ return toSortedCounts(counts);
344
+ };
345
+
346
+ const columns: Record<string, FrappeFacetOption[]> = {};
347
+ for (const fieldname of columnFieldnames ?? []) {
348
+ columns[fieldname] = countColumn(fieldname);
349
+ }
350
+
351
+ return {
352
+ assigned: toSortedCounts(assignedCounts),
353
+ owner: toSortedCounts(ownerCounts),
354
+ tags,
355
+ status: statusFieldname ? countColumn(statusFieldname) : undefined,
356
+ columns,
357
+ };
358
+ }
359
+
360
+ // ── Hook ──────────────────────────────────────────────────────
361
+
362
+ type BuiltinFacetKey = "assigned" | "owner" | "tags" | "status";
363
+
364
+ interface FacetsState {
365
+ assigned: FrappeFacetState;
366
+ owner: FrappeFacetState;
367
+ tags: FrappeFacetState;
368
+ status: FrappeFacetState;
369
+ columns: Record<string, FrappeFacetState>;
370
+ }
371
+
372
+ const IDLE_FACET: FrappeFacetState = { isLoading: false, isStale: false };
373
+
374
+ function initialState(columnFieldnames: readonly string[]): FacetsState {
375
+ return {
376
+ assigned: { isLoading: true, isStale: false },
377
+ owner: { isLoading: true, isStale: false },
378
+ tags: { isLoading: true, isStale: false },
379
+ status: IDLE_FACET,
380
+ columns: Object.fromEntries(
381
+ columnFieldnames.map((fieldname) => [fieldname, { isLoading: true, isStale: false }]),
382
+ ),
383
+ };
384
+ }
385
+
386
+ /**
387
+ * Facet counts for a doctype list (Assigned To / Created By / Tags / status
388
+ * / arbitrary columns), revalidating stale-while-visible whenever the
389
+ * doctype, the (serialized) filters, or the facet set change. Per-facet
390
+ * results land independently so fast facets render before slow ones.
391
+ *
392
+ * @example
393
+ * ```tsx
394
+ * const facets = useFrappeFacets(doctype, filters, {
395
+ * statusFieldname: "status",
396
+ * columns: ["module"],
397
+ * });
398
+ * <DataTableFacetMenu
399
+ * label={t("Created By")}
400
+ * loading={facets.owner.isLoading || facets.owner.isStale}
401
+ * options={scrubUserFacetRows(facets.owner.options ?? [], sessionUser).map((row) => ({
402
+ * value: row.value,
403
+ * label: row.value === sessionUser ? t("Me") : row.value,
404
+ * count: row.count,
405
+ * }))}
406
+ * />
407
+ * ```
408
+ */
409
+ export function useFrappeFacets(
410
+ doctype: string,
411
+ filters: FrappeFacetFilters,
412
+ options?: UseFrappeFacetsOptions,
413
+ ): UseFrappeFacetsResult {
414
+ const ambient = useFrappeConfig();
415
+ const connection = options?.connection ?? ambient;
416
+ const statusFieldname = options?.statusFieldname;
417
+ const enabled = options?.enabled !== false && !!doctype && !!connection;
418
+
419
+ // Value-identity keys: hosts may pass fresh arrays each render.
420
+ const filtersKey = JSON.stringify(filters ?? []);
421
+ const columnsKey = JSON.stringify(options?.columns ?? []);
422
+ const columnFieldnames = useMemo(
423
+ () => JSON.parse(columnsKey) as string[],
424
+ [columnsKey],
425
+ );
426
+
427
+ const [state, setState] = useState<FacetsState>(() => initialState(columnFieldnames));
428
+ const [generation, setGeneration] = useState(0);
429
+
430
+ // Facet-set identity — a swap resets hard (different domain, no stale
431
+ // options to keep); a filter change within the identity revalidates SWR.
432
+ const identity = `${connection?.baseURL ?? ""}:${doctype}:${statusFieldname ?? ""}:${columnsKey}`;
433
+ const identityRef = useRef(identity);
434
+ const fetchSeq = useRef(0);
435
+
436
+ const connectionRef = useRef(connection);
437
+ connectionRef.current = connection;
438
+
439
+ useEffect(() => {
440
+ if (!enabled) return;
441
+ const conn = connectionRef.current;
442
+ if (!conn) return;
443
+ const seq = ++fetchSeq.current;
444
+ const activeFilters = JSON.parse(filtersKey) as FrappeFacetFilters;
445
+
446
+ if (identityRef.current !== identity) {
447
+ identityRef.current = identity;
448
+ setState(initialState(columnFieldnames));
449
+ } else {
450
+ // SWR revalidation: keep options rendered, flag facets stale (first
451
+ // loads stay isLoading).
452
+ setState((prev) => {
453
+ const revalidate = (facet: FrappeFacetState): FrappeFacetState =>
454
+ facet.options !== undefined
455
+ ? { ...facet, isStale: true, error: undefined }
456
+ : { ...facet, isLoading: true, error: undefined };
457
+ return {
458
+ assigned: revalidate(prev.assigned),
459
+ owner: revalidate(prev.owner),
460
+ tags: revalidate(prev.tags),
461
+ status: statusFieldname ? revalidate(prev.status) : IDLE_FACET,
462
+ columns: Object.fromEntries(
463
+ columnFieldnames.map((fieldname) => [
464
+ fieldname,
465
+ revalidate(prev.columns[fieldname] ?? { isLoading: true, isStale: false }),
466
+ ]),
467
+ ),
468
+ };
469
+ });
470
+ }
471
+
472
+ const done = (key: BuiltinFacetKey | ["columns", string], rows: FrappeFacetOption[]) => {
473
+ if (seq !== fetchSeq.current) return; // a newer fetch won
474
+ setState((prev) =>
475
+ Array.isArray(key)
476
+ ? {
477
+ ...prev,
478
+ columns: {
479
+ ...prev.columns,
480
+ [key[1]]: { options: rows, isLoading: false, isStale: false },
481
+ },
482
+ }
483
+ : { ...prev, [key]: { options: rows, isLoading: false, isStale: false } },
484
+ );
485
+ };
486
+ const fail = (key: BuiltinFacetKey | ["columns", string], error: unknown) => {
487
+ if (seq !== fetchSeq.current) return;
488
+ const failed = (facet: FrappeFacetState): FrappeFacetState => ({
489
+ ...facet,
490
+ isLoading: false,
491
+ isStale: false,
492
+ error: error instanceof Error ? error : new Error(String(error)),
493
+ });
494
+ setState((prev) =>
495
+ Array.isArray(key)
496
+ ? {
497
+ ...prev,
498
+ columns: {
499
+ ...prev.columns,
500
+ [key[1]]: failed(prev.columns[key[1]] ?? IDLE_FACET),
501
+ },
502
+ }
503
+ : { ...prev, [key]: failed(prev[key]) },
504
+ );
505
+ };
506
+
507
+ if (conn.fixtures) {
508
+ fetchFixtureFacets(conn.fixtures, doctype, activeFilters, statusFieldname, columnFieldnames)
509
+ .then((facets) => {
510
+ done("assigned", facets.assigned);
511
+ done("owner", facets.owner);
512
+ done("tags", facets.tags);
513
+ if (statusFieldname) done("status", facets.status ?? []);
514
+ for (const fieldname of columnFieldnames) {
515
+ done(["columns", fieldname], facets.columns[fieldname] ?? []);
516
+ }
517
+ })
518
+ .catch((error) => {
519
+ fail("assigned", error);
520
+ fail("owner", error);
521
+ fail("tags", error);
522
+ if (statusFieldname) fail("status", error);
523
+ for (const fieldname of columnFieldnames) fail(["columns", fieldname], error);
524
+ });
525
+ return;
526
+ }
527
+
528
+ const call = getCall(conn);
529
+ fetchGroupByCount(call, doctype, filtersExcludingField(activeFilters, "_assign"), "assigned_to")
530
+ .then((rows) => done("assigned", rows))
531
+ .catch((error) => fail("assigned", error));
532
+
533
+ fetchGroupByCount(call, doctype, filtersExcludingField(activeFilters, "owner"), "owner")
534
+ .then((rows) => done("owner", rows))
535
+ .catch((error) => fail("owner", error));
536
+
537
+ fetchColumnStats(call, doctype, "_user_tags", filtersExcludingField(activeFilters, "_user_tags"))
538
+ .then((entries) => done("tags", mapTagStats(entries)))
539
+ .catch((error) => fail("tags", error));
540
+
541
+ if (statusFieldname) {
542
+ fetchColumnStats(call, doctype, statusFieldname, filtersExcludingField(activeFilters, statusFieldname))
543
+ .then((entries) => done("status", mapColumnStats(entries)))
544
+ .catch((error) => fail("status", error));
545
+ }
546
+
547
+ for (const fieldname of columnFieldnames) {
548
+ fetchColumnStats(call, doctype, fieldname, filtersExcludingField(activeFilters, fieldname))
549
+ .then((entries) => done(["columns", fieldname], mapColumnStats(entries)))
550
+ .catch((error) => fail(["columns", fieldname], error));
551
+ }
552
+ // oxlint-disable-next-line exhaustive-deps -- identity/filtersKey are the value-exact deps
553
+ }, [enabled, identity, filtersKey, generation]);
554
+
555
+ const refresh = useCallback(() => setGeneration((current) => current + 1), []);
556
+
557
+ return useMemo(
558
+ () => ({
559
+ assigned: state.assigned,
560
+ owner: state.owner,
561
+ tags: state.tags,
562
+ status: state.status,
563
+ columns: state.columns,
564
+ refresh,
565
+ }),
566
+ [state, refresh],
567
+ );
568
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"FrappeAssignment.d.ts","sourceRoot":"","sources":["../src/FrappeAssignment.tsx"],"names":[],"mappings":"AAsBA,OAAO,EAAwB,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAYjE,sDAAsD;AACtD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,sDAAsD;IACtD,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,2DAA2D;IAC3D,SAAS,EAAE,UAAU,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,MAAM,CAAC;IACnF,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,yDAAyD;IACzD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,8DAA8D;IAC9D,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;CACzC;AASD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,SAAS,GACvC,0BAA0B,CAW5B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,UAAU,CAeb;AAoUD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,2CAM5D"}
1
+ {"version":3,"file":"FrappeAssignment.d.ts","sourceRoot":"","sources":["../src/FrappeAssignment.tsx"],"names":[],"mappings":"AAsBA,OAAO,EAAwB,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAYjE,sDAAsD;AACtD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,sDAAsD;IACtD,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,2DAA2D;IAC3D,SAAS,EAAE,UAAU,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,MAAM,CAAC;IACnF,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,yDAAyD;IACzD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,8DAA8D;IAC9D,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;CACzC;AASD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,SAAS,GACvC,0BAA0B,CAW5B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,UAAU,CAeb;AAsUD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,2CAM5D"}
@@ -1 +1 @@
1
- {"version":3,"file":"FrappeCalendar.d.ts","sourceRoot":"","sources":["../src/FrappeCalendar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FrappeCalendar.d.ts","sourceRoot":"","sources":["../src/FrappeCalendar.tsx"],"names":[],"mappings":"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"}
@@ -16,8 +16,7 @@
16
16
  * returns no groups, and a subtle stale dim while a post-event refetch is
17
17
  * in flight.
18
18
  */
19
- import { type ChartConfig } from "@multiplatform.one/components";
20
- import { type ChartCardProps } from "./FrappeDashboard";
19
+ import { type ChartCardProps, type ChartConfig } from "@multiplatform.one/components";
21
20
  import { type FrappeAggregateOperation } from "./useFrappeAggregate";
22
21
  /** Live data source for a chart series: one data point per group. */
23
22
  export interface FrappeChartDataSource {
@@ -1 +1 @@
1
- {"version":3,"file":"FrappeChartCard.d.ts","sourceRoot":"","sources":["../src/FrappeChartCard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAA2B,KAAK,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAK1F,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAE9B,qEAAqE;AACrE,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,SAAS,CAAC,EAAE,wBAAwB,CAAC;IACrC,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrE,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;IAC1E,8EAA8E;IAC9E,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG;QAAE,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC;IACnE,iEAAiE;IACjE,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA+BD,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,UAAU,EACV,OAAO,EACP,IAAI,EACJ,WAAW,EACX,GAAG,cAAc,EAClB,EAAE,oBAAoB,2CAwFtB;AAED,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"FrappeChartCard.d.ts","sourceRoot":"","sources":["../src/FrappeChartCard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;AAOvC,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAE9B,qEAAqE;AACrE,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,SAAS,CAAC,EAAE,wBAAwB,CAAC;IACrC,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrE,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;IAC1E,8EAA8E;IAC9E,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG;QAAE,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC;IACnE,iEAAiE;IACjE,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA+BD,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,UAAU,EACV,OAAO,EACP,IAAI,EACJ,WAAW,EACX,GAAG,cAAc,EAClB,EAAE,oBAAoB,2CA0FtB;AAED,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC"}
@@ -50,7 +50,6 @@ export declare function FrappeDashboard<TDoc extends {
50
50
  name: string;
51
51
  doctype: string;
52
52
  }>({ baseURL, auth, syncOptions, title, description, widgets: staticWidgets, dataSource, transformData, columns, gap, padding, autoRefresh, refreshInterval, loading, error, ...stackProps }: FrappeDashboardProps<TDoc>): import("react/jsx-runtime").JSX.Element;
53
- export { KPICard, calculateTrend, calculatePercentageChange, aggregateData, type DashboardWidget, type KPICardConfig, type KPICardProps, type ChartConfig, type ChartCardProps, type ChartDataPoint, type ChartType, type TrendDirection, } from "@multiplatform.one/components";
54
53
  /**
55
54
  * ChartCard bridge that sanitizes series rows before render: values are
56
55
  * coerced to numbers and rows without a finite value (missing, NaN,
@@ -1 +1 @@
1
- {"version":3,"file":"FrappeDashboard.d.ts","sourceRoot":"","sources":["../src/FrappeDashboard.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FrappeDashboard.d.ts","sourceRoot":"","sources":["../src/FrappeDashboard.tsx"],"names":[],"mappings":"AAKA,OAAO,EAGL,KAAK,cAAc,EAEnB,KAAK,eAAe,EACrB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAA4D,MAAM,OAAO,CAAC;AAGjF,OAAO,EAAwB,KAAK,WAAW,EAAM,MAAM,SAAS,CAAC;AAIrE;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,IAAI;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,IAAI,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACpE,YAAY,CAAC,EAAE;QACb,KAAK,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC;QAC3B,SAAS,EAAE,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;QACnD,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC;KAC/B,EAAE,CAAC;CACL;AAED,MAAM,WAAW,oBAAoB,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAE,SAAQ,IAAI,CAChG,WAAW,EACX,UAAU,CACX;IACC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChG,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACvC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,eAAe,EAAE,CAAC;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,SAAS,CAAC;CAC3C;AA8LD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,EAC9E,OAAO,EACP,IAAI,EACJ,WAAW,EACX,KAAK,EACL,WAAW,EACX,OAAO,EAAE,aAAa,EACtB,UAAU,EACV,aAAa,EACb,OAAW,EACX,GAAQ,EACR,OAAY,EACZ,WAAmB,EACnB,eAAoB,EACpB,OAAO,EACP,KAAK,EACL,GAAG,UAAU,EACd,EAAE,oBAAoB,CAAC,IAAI,CAAC,2CAgH5B;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,EAAE,cAAc,2CAatE"}
@@ -1 +1 @@
1
- {"version":3,"file":"FrappeForm.d.ts","sourceRoot":"","sources":["../src/FrappeForm.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FrappeForm.d.ts","sourceRoot":"","sources":["../src/FrappeForm.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FrappeGantt.d.ts","sourceRoot":"","sources":["../src/FrappeGantt.tsx"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,+BAA+B,CAAC;AACvC,OAAc,EAAkC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC9E,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAQzD,MAAM,WAAW,gBAAgB,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAE,SAAQ,IAAI,CAC5F,WAAW,EACX,UAAU,CACX;IACC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,IAAI,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACpE,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC;IACjC,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC;IAC/B,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC;IACjC,8GAA8G;IAC9G,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC;IACjC,2CAA2C;IAC3C,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC3C;;;;;OAKG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E,gFAAgF;IAChF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,iEAAiE;IACjE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACvB,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAiBD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,EAC1E,OAAO,EACP,IAAI,EACJ,WAAW,EACX,OAAO,EACP,MAAM,EACN,OAAO,EACP,UAAoD,EACpD,QAAgD,EAChD,UAA6C,EAC7C,UAAU,EACV,IAAa,EACb,WAAW,EACX,UAAU,EACV,cAAc,EACd,OAAO,EACP,KAAK,EACL,MAAM,EACN,SAAgB,EAChB,cAAqB,EACrB,gBAAuB,EACvB,cAAkB,EAClB,WAAW,EACX,GAAG,UAAU,EACd,EAAE,gBAAgB,CAAC,IAAI,CAAC,2CA8KxB"}
1
+ {"version":3,"file":"FrappeGantt.d.ts","sourceRoot":"","sources":["../src/FrappeGantt.tsx"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,+BAA+B,CAAC;AACvC,OAAc,EAAkC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC9E,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAazD,MAAM,WAAW,gBAAgB,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAE,SAAQ,IAAI,CAC5F,WAAW,EACX,UAAU,CACX;IACC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,IAAI,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACpE,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC;IACjC,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC;IAC/B,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC;IACjC,8GAA8G;IAC9G,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC;IACjC,2CAA2C;IAC3C,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC3C;;;;;OAKG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E,gFAAgF;IAChF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,iEAAiE;IACjE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACvB,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAaD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,EAC1E,OAAO,EACP,IAAI,EACJ,WAAW,EACX,OAAO,EACP,MAAM,EACN,OAAO,EACP,UAAoD,EACpD,QAAgD,EAChD,UAA6C,EAC7C,UAAU,EACV,IAAa,EACb,WAAW,EACX,UAAU,EACV,cAAc,EACd,OAAO,EACP,KAAK,EACL,MAAM,EACN,SAAgB,EAChB,cAAqB,EACrB,gBAAuB,EACvB,cAAkB,EAClB,WAAW,EACX,GAAG,UAAU,EACd,EAAE,gBAAgB,CAAC,IAAI,CAAC,2CAkLxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"FrappeKPICard.d.ts","sourceRoot":"","sources":["../src/FrappeKPICard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAGzD,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAE9B,wCAAwC;AACxC,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,wBAAwB,CAAC;IACrC,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrE,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;IACvE;;;OAGG;IACH,MAAM,EAAE,aAAa,CAAC;IACtB,iEAAiE;IACjE,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA8BD,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,UAAU,EACV,OAAO,EACP,IAAI,EACJ,WAAW,EACX,GAAG,UAAU,EACd,EAAE,kBAAkB,2CA+DpB;AAED,YAAY,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"FrappeKPICard.d.ts","sourceRoot":"","sources":["../src/FrappeKPICard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAGzD,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAE9B,wCAAwC;AACxC,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,wBAAwB,CAAC;IACrC,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrE,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;IACvE;;;OAGG;IACH,MAAM,EAAE,aAAa,CAAC;IACtB,iEAAiE;IACjE,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA8BD,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,UAAU,EACV,OAAO,EACP,IAAI,EACJ,WAAW,EACX,GAAG,UAAU,EACd,EAAE,kBAAkB,2CAiEpB;AAED,YAAY,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC"}