@multiplatform.one/frappe-ui 7.23.1 → 7.24.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 (698) hide show
  1. package/dist/cjs/FrappeCalendar.cjs +1 -1
  2. package/dist/cjs/FrappeCalendar.native.js +1 -1
  3. package/dist/cjs/FrappeCalendar.native.js.map +1 -1
  4. package/dist/cjs/FrappeDashboard.cjs +1 -1
  5. package/dist/cjs/FrappeDashboard.native.js +1 -1
  6. package/dist/cjs/FrappeDashboard.native.js.map +1 -1
  7. package/dist/cjs/FrappeForm.cjs +8 -0
  8. package/dist/cjs/FrappeForm.native.js +9 -0
  9. package/dist/cjs/FrappeForm.native.js.map +1 -1
  10. package/dist/cjs/FrappeImageView.cjs +1 -1
  11. package/dist/cjs/FrappeImageView.native.js +1 -1
  12. package/dist/cjs/FrappeImageView.native.js.map +1 -1
  13. package/dist/cjs/FrappeInsights.cjs +380 -0
  14. package/dist/cjs/FrappeInsights.native.js +447 -0
  15. package/dist/cjs/FrappeInsights.native.js.map +1 -0
  16. package/dist/cjs/FrappeLikedBy.cjs +5 -2
  17. package/dist/cjs/FrappeLikedBy.native.js +5 -2
  18. package/dist/cjs/FrappeLikedBy.native.js.map +1 -1
  19. package/dist/cjs/FrappeListView.cjs +406 -39
  20. package/dist/cjs/FrappeListView.native.js +469 -42
  21. package/dist/cjs/FrappeListView.native.js.map +1 -1
  22. package/dist/cjs/FrappeNotConfigured.cjs +54 -0
  23. package/dist/cjs/FrappeNotConfigured.native.js +58 -0
  24. package/dist/cjs/FrappeNotConfigured.native.js.map +1 -0
  25. package/dist/cjs/FrappeRecordView.cjs +199 -0
  26. package/dist/cjs/FrappeRecordView.native.js +218 -0
  27. package/dist/cjs/FrappeRecordView.native.js.map +1 -0
  28. package/dist/cjs/FrappeReportBuilder.cjs +2 -2
  29. package/dist/cjs/FrappeReportBuilder.native.js +2 -2
  30. package/dist/cjs/FrappeReportBuilder.native.js.map +1 -1
  31. package/dist/cjs/FrappeReportView.cjs +1 -1
  32. package/dist/cjs/FrappeReportView.native.js +2 -2
  33. package/dist/cjs/FrappeReportView.native.js.map +1 -1
  34. package/dist/cjs/FrappeTreeView.cjs +1 -1
  35. package/dist/cjs/FrappeTreeView.native.js +1 -1
  36. package/dist/cjs/desk/awesomebar.cjs +1 -1
  37. package/dist/cjs/desk/awesomebar.native.js +3 -3
  38. package/dist/cjs/desk/awesomebar.native.js.map +1 -1
  39. package/dist/cjs/fields/CodeEditor/index.cjs +1 -1
  40. package/dist/cjs/fields/CodeEditor/index.native.js +1 -1
  41. package/dist/cjs/fields/CodeEditor/index.native.js.map +1 -1
  42. package/dist/cjs/fields/Color/index.cjs +1 -0
  43. package/dist/cjs/fields/Color/index.native.js +1 -0
  44. package/dist/cjs/fields/Color/index.native.js.map +1 -1
  45. package/dist/cjs/fields/FileUpload.cjs +1 -1
  46. package/dist/cjs/fields/FileUpload.native.js +1 -1
  47. package/dist/cjs/fields/FileUpload.native.js.map +1 -1
  48. package/dist/cjs/fields/Heading/index.cjs +19 -12
  49. package/dist/cjs/fields/Heading/index.native.js +22 -13
  50. package/dist/cjs/fields/Heading/index.native.js.map +1 -1
  51. package/dist/cjs/fields/MarkdownEditor/index.cjs +2 -1
  52. package/dist/cjs/fields/MarkdownEditor/index.native.js +1 -1
  53. package/dist/cjs/fields/MarkdownEditor/index.native.js.map +1 -1
  54. package/dist/cjs/frappeNavigation.cjs +12 -2
  55. package/dist/cjs/frappeNavigation.native.js +13 -2
  56. package/dist/cjs/frappeNavigation.native.js.map +1 -1
  57. package/dist/cjs/index.cjs +34 -0
  58. package/dist/cjs/index.native.js +34 -0
  59. package/dist/cjs/index.native.js.map +1 -1
  60. package/dist/cjs/insights/InsightsFacetTags.cjs +147 -0
  61. package/dist/cjs/insights/InsightsFacetTags.native.js +165 -0
  62. package/dist/cjs/insights/InsightsFacetTags.native.js.map +1 -0
  63. package/dist/cjs/insights/InsightsKpiBand.cjs +124 -0
  64. package/dist/cjs/insights/InsightsKpiBand.native.js +133 -0
  65. package/dist/cjs/insights/InsightsKpiBand.native.js.map +1 -0
  66. package/dist/cjs/insights/InsightsLeaders.cjs +150 -0
  67. package/dist/cjs/insights/InsightsLeaders.native.js +178 -0
  68. package/dist/cjs/insights/InsightsLeaders.native.js.map +1 -0
  69. package/dist/cjs/insights/InsightsRecords.cjs +105 -0
  70. package/dist/cjs/insights/InsightsRecords.native.js +109 -0
  71. package/dist/cjs/insights/InsightsRecords.native.js.map +1 -0
  72. package/dist/cjs/insights/InsightsTable.cjs +157 -0
  73. package/dist/cjs/insights/InsightsTable.native.js +194 -0
  74. package/dist/cjs/insights/InsightsTable.native.js.map +1 -0
  75. package/dist/cjs/insights/insightsData.cjs +114 -0
  76. package/dist/cjs/insights/insightsData.native.js +220 -0
  77. package/dist/cjs/insights/insightsData.native.js.map +1 -0
  78. package/dist/cjs/insights/insightsRecord.cjs +35 -0
  79. package/dist/cjs/insights/insightsRecord.native.js +38 -0
  80. package/dist/cjs/insights/insightsRecord.native.js.map +1 -0
  81. package/dist/cjs/list/FacetBadge.cjs +62 -0
  82. package/dist/cjs/list/FacetBadge.native.js +66 -0
  83. package/dist/cjs/list/FacetBadge.native.js.map +1 -0
  84. package/dist/cjs/list/FacetRail.cjs +199 -0
  85. package/dist/cjs/list/FacetRail.native.js +223 -0
  86. package/dist/cjs/list/FacetRail.native.js.map +1 -0
  87. package/dist/cjs/list/ImageWell.cjs +111 -0
  88. package/dist/cjs/list/ImageWell.native.js +126 -0
  89. package/dist/cjs/list/ImageWell.native.js.map +1 -0
  90. package/dist/cjs/list/ListControls.cjs +226 -0
  91. package/dist/cjs/list/ListControls.native.js +252 -0
  92. package/dist/cjs/list/ListControls.native.js.map +1 -0
  93. package/dist/cjs/list/ListToastHost.cjs +54 -0
  94. package/dist/cjs/list/ListToastHost.native.js +59 -0
  95. package/dist/cjs/list/ListToastHost.native.js.map +1 -0
  96. package/dist/cjs/list/RangeFilter.cjs +122 -0
  97. package/dist/cjs/list/RangeFilter.native.js +135 -0
  98. package/dist/cjs/list/RangeFilter.native.js.map +1 -0
  99. package/dist/cjs/list/RecordCard.cjs +233 -0
  100. package/dist/cjs/list/RecordCard.native.js +173 -0
  101. package/dist/cjs/list/RecordCard.native.js.map +1 -0
  102. package/dist/cjs/list/ShufflePanel.cjs +112 -0
  103. package/dist/cjs/list/ShufflePanel.native.js +139 -0
  104. package/dist/cjs/list/ShufflePanel.native.js.map +1 -0
  105. package/dist/cjs/list/facetReading.cjs +71 -0
  106. package/dist/cjs/list/facetReading.native.js +163 -0
  107. package/dist/cjs/list/facetReading.native.js.map +1 -0
  108. package/dist/cjs/list/favorites.cjs +79 -0
  109. package/dist/cjs/list/favorites.native.js +91 -0
  110. package/dist/cjs/list/favorites.native.js.map +1 -0
  111. package/dist/cjs/list/listState.cjs +100 -0
  112. package/dist/cjs/list/listState.native.js +234 -0
  113. package/dist/cjs/list/listState.native.js.map +1 -0
  114. package/dist/cjs/list/recordLook.cjs +35 -0
  115. package/dist/cjs/list/recordLook.native.js +39 -0
  116. package/dist/cjs/list/recordLook.native.js.map +1 -0
  117. package/dist/cjs/list/useListControls.cjs +189 -0
  118. package/dist/cjs/list/useListControls.native.js +272 -0
  119. package/dist/cjs/list/useListControls.native.js.map +1 -0
  120. package/dist/cjs/record/RecordBars.cjs +200 -0
  121. package/dist/cjs/record/RecordBars.native.js +225 -0
  122. package/dist/cjs/record/RecordBars.native.js.map +1 -0
  123. package/dist/cjs/record/RecordGallery.cjs +67 -0
  124. package/dist/cjs/record/RecordGallery.native.js +75 -0
  125. package/dist/cjs/record/RecordGallery.native.js.map +1 -0
  126. package/dist/cjs/record/RecordHero.cjs +239 -0
  127. package/dist/cjs/record/RecordHero.native.js +250 -0
  128. package/dist/cjs/record/RecordHero.native.js.map +1 -0
  129. package/dist/cjs/record/RecordPage.cjs +330 -0
  130. package/dist/cjs/record/RecordPage.native.js +364 -0
  131. package/dist/cjs/record/RecordPage.native.js.map +1 -0
  132. package/dist/cjs/record/RecordPager.cjs +125 -0
  133. package/dist/cjs/record/RecordPager.native.js +130 -0
  134. package/dist/cjs/record/RecordPager.native.js.map +1 -0
  135. package/dist/cjs/record/RecordRows.cjs +126 -0
  136. package/dist/cjs/record/RecordRows.native.js +140 -0
  137. package/dist/cjs/record/RecordRows.native.js.map +1 -0
  138. package/dist/cjs/record/recordData.cjs +122 -0
  139. package/dist/cjs/record/recordData.native.js +189 -0
  140. package/dist/cjs/record/recordData.native.js.map +1 -0
  141. package/dist/cjs/record/recordSections.cjs +30 -0
  142. package/dist/cjs/record/recordSections.native.js +33 -0
  143. package/dist/cjs/record/recordSections.native.js.map +1 -0
  144. package/dist/cjs/useFrappeFacets.cjs +1 -1
  145. package/dist/cjs/useFrappeFacets.native.js +1 -1
  146. package/dist/cjs/useFrappeFacets.native.js.map +1 -1
  147. package/dist/esm/FrappeCalendar.mjs +1 -1
  148. package/dist/esm/FrappeCalendar.mjs.map +1 -1
  149. package/dist/esm/FrappeCalendar.native.js +1 -1
  150. package/dist/esm/FrappeCalendar.native.js.map +1 -1
  151. package/dist/esm/FrappeDashboard.mjs +1 -1
  152. package/dist/esm/FrappeDashboard.mjs.map +1 -1
  153. package/dist/esm/FrappeDashboard.native.js +1 -1
  154. package/dist/esm/FrappeDashboard.native.js.map +1 -1
  155. package/dist/esm/FrappeForm.mjs +8 -0
  156. package/dist/esm/FrappeForm.mjs.map +1 -1
  157. package/dist/esm/FrappeForm.native.js +9 -0
  158. package/dist/esm/FrappeForm.native.js.map +1 -1
  159. package/dist/esm/FrappeImageView.mjs +1 -1
  160. package/dist/esm/FrappeImageView.mjs.map +1 -1
  161. package/dist/esm/FrappeImageView.native.js +1 -1
  162. package/dist/esm/FrappeImageView.native.js.map +1 -1
  163. package/dist/esm/FrappeInsights.mjs +355 -0
  164. package/dist/esm/FrappeInsights.mjs.map +1 -0
  165. package/dist/esm/FrappeInsights.native.js +419 -0
  166. package/dist/esm/FrappeInsights.native.js.map +1 -0
  167. package/dist/esm/FrappeLikedBy.mjs +6 -3
  168. package/dist/esm/FrappeLikedBy.mjs.map +1 -1
  169. package/dist/esm/FrappeLikedBy.native.js +6 -3
  170. package/dist/esm/FrappeLikedBy.native.js.map +1 -1
  171. package/dist/esm/FrappeListView.mjs +410 -43
  172. package/dist/esm/FrappeListView.mjs.map +1 -1
  173. package/dist/esm/FrappeListView.native.js +473 -46
  174. package/dist/esm/FrappeListView.native.js.map +1 -1
  175. package/dist/esm/FrappeNotConfigured.mjs +29 -0
  176. package/dist/esm/FrappeNotConfigured.mjs.map +1 -0
  177. package/dist/esm/FrappeNotConfigured.native.js +30 -0
  178. package/dist/esm/FrappeNotConfigured.native.js.map +1 -0
  179. package/dist/esm/FrappeRecordView.mjs +174 -0
  180. package/dist/esm/FrappeRecordView.mjs.map +1 -0
  181. package/dist/esm/FrappeRecordView.native.js +190 -0
  182. package/dist/esm/FrappeRecordView.native.js.map +1 -0
  183. package/dist/esm/FrappeReportBuilder.mjs +2 -2
  184. package/dist/esm/FrappeReportBuilder.mjs.map +1 -1
  185. package/dist/esm/FrappeReportBuilder.native.js +2 -2
  186. package/dist/esm/FrappeReportBuilder.native.js.map +1 -1
  187. package/dist/esm/FrappeReportView.mjs +1 -1
  188. package/dist/esm/FrappeReportView.mjs.map +1 -1
  189. package/dist/esm/FrappeReportView.native.js +2 -2
  190. package/dist/esm/FrappeReportView.native.js.map +1 -1
  191. package/dist/esm/FrappeTreeView.mjs +1 -1
  192. package/dist/esm/FrappeTreeView.mjs.map +1 -1
  193. package/dist/esm/FrappeTreeView.native.js +1 -1
  194. package/dist/esm/desk/awesomebar.mjs +1 -1
  195. package/dist/esm/desk/awesomebar.mjs.map +1 -1
  196. package/dist/esm/desk/awesomebar.native.js +3 -3
  197. package/dist/esm/desk/awesomebar.native.js.map +1 -1
  198. package/dist/esm/fields/CodeEditor/index.mjs +2 -2
  199. package/dist/esm/fields/CodeEditor/index.mjs.map +1 -1
  200. package/dist/esm/fields/CodeEditor/index.native.js +2 -2
  201. package/dist/esm/fields/CodeEditor/index.native.js.map +1 -1
  202. package/dist/esm/fields/Color/index.mjs +1 -0
  203. package/dist/esm/fields/Color/index.mjs.map +1 -1
  204. package/dist/esm/fields/Color/index.native.js +1 -0
  205. package/dist/esm/fields/Color/index.native.js.map +1 -1
  206. package/dist/esm/fields/FileUpload.mjs +2 -2
  207. package/dist/esm/fields/FileUpload.mjs.map +1 -1
  208. package/dist/esm/fields/FileUpload.native.js +2 -2
  209. package/dist/esm/fields/FileUpload.native.js.map +1 -1
  210. package/dist/esm/fields/Heading/index.mjs +21 -14
  211. package/dist/esm/fields/Heading/index.mjs.map +1 -1
  212. package/dist/esm/fields/Heading/index.native.js +24 -15
  213. package/dist/esm/fields/Heading/index.native.js.map +1 -1
  214. package/dist/esm/fields/MarkdownEditor/index.mjs +2 -1
  215. package/dist/esm/fields/MarkdownEditor/index.mjs.map +1 -1
  216. package/dist/esm/fields/MarkdownEditor/index.native.js +2 -2
  217. package/dist/esm/fields/MarkdownEditor/index.native.js.map +1 -1
  218. package/dist/esm/frappeNavigation.mjs +11 -2
  219. package/dist/esm/frappeNavigation.mjs.map +1 -1
  220. package/dist/esm/frappeNavigation.native.js +12 -2
  221. package/dist/esm/frappeNavigation.native.js.map +1 -1
  222. package/dist/esm/index.mjs +14 -2
  223. package/dist/esm/index.mjs.map +1 -1
  224. package/dist/esm/index.native.js +14 -2
  225. package/dist/esm/index.native.js.map +1 -1
  226. package/dist/esm/insights/InsightsFacetTags.mjs +122 -0
  227. package/dist/esm/insights/InsightsFacetTags.mjs.map +1 -0
  228. package/dist/esm/insights/InsightsFacetTags.native.js +137 -0
  229. package/dist/esm/insights/InsightsFacetTags.native.js.map +1 -0
  230. package/dist/esm/insights/InsightsKpiBand.mjs +99 -0
  231. package/dist/esm/insights/InsightsKpiBand.mjs.map +1 -0
  232. package/dist/esm/insights/InsightsKpiBand.native.js +105 -0
  233. package/dist/esm/insights/InsightsKpiBand.native.js.map +1 -0
  234. package/dist/esm/insights/InsightsLeaders.mjs +125 -0
  235. package/dist/esm/insights/InsightsLeaders.mjs.map +1 -0
  236. package/dist/esm/insights/InsightsLeaders.native.js +150 -0
  237. package/dist/esm/insights/InsightsLeaders.native.js.map +1 -0
  238. package/dist/esm/insights/InsightsRecords.mjs +80 -0
  239. package/dist/esm/insights/InsightsRecords.mjs.map +1 -0
  240. package/dist/esm/insights/InsightsRecords.native.js +81 -0
  241. package/dist/esm/insights/InsightsRecords.native.js.map +1 -0
  242. package/dist/esm/insights/InsightsTable.mjs +132 -0
  243. package/dist/esm/insights/InsightsTable.mjs.map +1 -0
  244. package/dist/esm/insights/InsightsTable.native.js +166 -0
  245. package/dist/esm/insights/InsightsTable.native.js.map +1 -0
  246. package/dist/esm/insights/insightsData.mjs +82 -0
  247. package/dist/esm/insights/insightsData.mjs.map +1 -0
  248. package/dist/esm/insights/insightsData.native.js +185 -0
  249. package/dist/esm/insights/insightsData.native.js.map +1 -0
  250. package/dist/esm/insights/insightsRecord.mjs +9 -0
  251. package/dist/esm/insights/insightsRecord.mjs.map +1 -0
  252. package/dist/esm/insights/insightsRecord.native.js +9 -0
  253. package/dist/esm/insights/insightsRecord.native.js.map +1 -0
  254. package/dist/esm/list/FacetBadge.mjs +37 -0
  255. package/dist/esm/list/FacetBadge.mjs.map +1 -0
  256. package/dist/esm/list/FacetBadge.native.js +38 -0
  257. package/dist/esm/list/FacetBadge.native.js.map +1 -0
  258. package/dist/esm/list/FacetRail.mjs +174 -0
  259. package/dist/esm/list/FacetRail.mjs.map +1 -0
  260. package/dist/esm/list/FacetRail.native.js +195 -0
  261. package/dist/esm/list/FacetRail.native.js.map +1 -0
  262. package/dist/esm/list/ImageWell.mjs +86 -0
  263. package/dist/esm/list/ImageWell.mjs.map +1 -0
  264. package/dist/esm/list/ImageWell.native.js +98 -0
  265. package/dist/esm/list/ImageWell.native.js.map +1 -0
  266. package/dist/esm/list/ListControls.mjs +201 -0
  267. package/dist/esm/list/ListControls.mjs.map +1 -0
  268. package/dist/esm/list/ListControls.native.js +224 -0
  269. package/dist/esm/list/ListControls.native.js.map +1 -0
  270. package/dist/esm/list/ListToastHost.mjs +18 -0
  271. package/dist/esm/list/ListToastHost.mjs.map +1 -0
  272. package/dist/esm/list/ListToastHost.native.js +20 -0
  273. package/dist/esm/list/ListToastHost.native.js.map +1 -0
  274. package/dist/esm/list/RangeFilter.mjs +85 -0
  275. package/dist/esm/list/RangeFilter.mjs.map +1 -0
  276. package/dist/esm/list/RangeFilter.native.js +95 -0
  277. package/dist/esm/list/RangeFilter.native.js.map +1 -0
  278. package/dist/esm/list/RecordCard.mjs +208 -0
  279. package/dist/esm/list/RecordCard.mjs.map +1 -0
  280. package/dist/esm/list/RecordCard.native.js +145 -0
  281. package/dist/esm/list/RecordCard.native.js.map +1 -0
  282. package/dist/esm/list/ShufflePanel.mjs +87 -0
  283. package/dist/esm/list/ShufflePanel.mjs.map +1 -0
  284. package/dist/esm/list/ShufflePanel.native.js +111 -0
  285. package/dist/esm/list/ShufflePanel.native.js.map +1 -0
  286. package/dist/esm/list/facetReading.mjs +45 -0
  287. package/dist/esm/list/facetReading.mjs.map +1 -0
  288. package/dist/esm/list/facetReading.native.js +134 -0
  289. package/dist/esm/list/facetReading.native.js.map +1 -0
  290. package/dist/esm/list/favorites.mjs +50 -0
  291. package/dist/esm/list/favorites.mjs.map +1 -0
  292. package/dist/esm/list/favorites.native.js +59 -0
  293. package/dist/esm/list/favorites.native.js.map +1 -0
  294. package/dist/esm/list/listState.mjs +71 -0
  295. package/dist/esm/list/listState.mjs.map +1 -0
  296. package/dist/esm/list/listState.native.js +202 -0
  297. package/dist/esm/list/listState.native.js.map +1 -0
  298. package/dist/esm/list/recordLook.mjs +10 -0
  299. package/dist/esm/list/recordLook.mjs.map +1 -0
  300. package/dist/esm/list/recordLook.native.js +11 -0
  301. package/dist/esm/list/recordLook.native.js.map +1 -0
  302. package/dist/esm/list/useListControls.mjs +164 -0
  303. package/dist/esm/list/useListControls.mjs.map +1 -0
  304. package/dist/esm/list/useListControls.native.js +244 -0
  305. package/dist/esm/list/useListControls.native.js.map +1 -0
  306. package/dist/esm/record/RecordBars.mjs +175 -0
  307. package/dist/esm/record/RecordBars.mjs.map +1 -0
  308. package/dist/esm/record/RecordBars.native.js +197 -0
  309. package/dist/esm/record/RecordBars.native.js.map +1 -0
  310. package/dist/esm/record/RecordGallery.mjs +42 -0
  311. package/dist/esm/record/RecordGallery.mjs.map +1 -0
  312. package/dist/esm/record/RecordGallery.native.js +47 -0
  313. package/dist/esm/record/RecordGallery.native.js.map +1 -0
  314. package/dist/esm/record/RecordHero.mjs +205 -0
  315. package/dist/esm/record/RecordHero.mjs.map +1 -0
  316. package/dist/esm/record/RecordHero.native.js +213 -0
  317. package/dist/esm/record/RecordHero.native.js.map +1 -0
  318. package/dist/esm/record/RecordPage.mjs +305 -0
  319. package/dist/esm/record/RecordPage.mjs.map +1 -0
  320. package/dist/esm/record/RecordPage.native.js +336 -0
  321. package/dist/esm/record/RecordPage.native.js.map +1 -0
  322. package/dist/esm/record/RecordPager.mjs +100 -0
  323. package/dist/esm/record/RecordPager.mjs.map +1 -0
  324. package/dist/esm/record/RecordPager.native.js +102 -0
  325. package/dist/esm/record/RecordPager.native.js.map +1 -0
  326. package/dist/esm/record/RecordRows.mjs +101 -0
  327. package/dist/esm/record/RecordRows.mjs.map +1 -0
  328. package/dist/esm/record/RecordRows.native.js +112 -0
  329. package/dist/esm/record/RecordRows.native.js.map +1 -0
  330. package/dist/esm/record/recordData.mjs +92 -0
  331. package/dist/esm/record/recordData.mjs.map +1 -0
  332. package/dist/esm/record/recordData.native.js +156 -0
  333. package/dist/esm/record/recordData.native.js.map +1 -0
  334. package/dist/esm/record/recordSections.mjs +5 -0
  335. package/dist/esm/record/recordSections.mjs.map +1 -0
  336. package/dist/esm/record/recordSections.native.js +5 -0
  337. package/dist/esm/record/recordSections.native.js.map +1 -0
  338. package/dist/esm/useFrappeFacets.mjs +1 -1
  339. package/dist/esm/useFrappeFacets.mjs.map +1 -1
  340. package/dist/esm/useFrappeFacets.native.js +1 -1
  341. package/dist/esm/useFrappeFacets.native.js.map +1 -1
  342. package/dist/jsx/FrappeCalendar.mjs +1 -1
  343. package/dist/jsx/FrappeCalendar.mjs.map +1 -1
  344. package/dist/jsx/FrappeCalendar.native.js +1 -1
  345. package/dist/jsx/FrappeCalendar.native.js.map +1 -1
  346. package/dist/jsx/FrappeDashboard.mjs +1 -1
  347. package/dist/jsx/FrappeDashboard.mjs.map +1 -1
  348. package/dist/jsx/FrappeDashboard.native.js +1 -1
  349. package/dist/jsx/FrappeDashboard.native.js.map +1 -1
  350. package/dist/jsx/FrappeForm.mjs +8 -0
  351. package/dist/jsx/FrappeForm.mjs.map +1 -1
  352. package/dist/jsx/FrappeForm.native.js +9 -0
  353. package/dist/jsx/FrappeForm.native.js.map +1 -1
  354. package/dist/jsx/FrappeImageView.mjs +1 -1
  355. package/dist/jsx/FrappeImageView.mjs.map +1 -1
  356. package/dist/jsx/FrappeImageView.native.js +1 -1
  357. package/dist/jsx/FrappeImageView.native.js.map +1 -1
  358. package/dist/jsx/FrappeInsights.mjs +355 -0
  359. package/dist/jsx/FrappeInsights.mjs.map +1 -0
  360. package/dist/jsx/FrappeInsights.native.js +447 -0
  361. package/dist/jsx/FrappeInsights.native.js.map +1 -0
  362. package/dist/jsx/FrappeLikedBy.mjs +6 -3
  363. package/dist/jsx/FrappeLikedBy.mjs.map +1 -1
  364. package/dist/jsx/FrappeLikedBy.native.js +5 -2
  365. package/dist/jsx/FrappeLikedBy.native.js.map +1 -1
  366. package/dist/jsx/FrappeListView.mjs +410 -43
  367. package/dist/jsx/FrappeListView.mjs.map +1 -1
  368. package/dist/jsx/FrappeListView.native.js +469 -42
  369. package/dist/jsx/FrappeListView.native.js.map +1 -1
  370. package/dist/jsx/FrappeNotConfigured.mjs +29 -0
  371. package/dist/jsx/FrappeNotConfigured.mjs.map +1 -0
  372. package/dist/jsx/FrappeNotConfigured.native.js +58 -0
  373. package/dist/jsx/FrappeNotConfigured.native.js.map +1 -0
  374. package/dist/jsx/FrappeRecordView.mjs +174 -0
  375. package/dist/jsx/FrappeRecordView.mjs.map +1 -0
  376. package/dist/jsx/FrappeRecordView.native.js +218 -0
  377. package/dist/jsx/FrappeRecordView.native.js.map +1 -0
  378. package/dist/jsx/FrappeReportBuilder.mjs +2 -2
  379. package/dist/jsx/FrappeReportBuilder.mjs.map +1 -1
  380. package/dist/jsx/FrappeReportBuilder.native.js +2 -2
  381. package/dist/jsx/FrappeReportBuilder.native.js.map +1 -1
  382. package/dist/jsx/FrappeReportView.mjs +1 -1
  383. package/dist/jsx/FrappeReportView.mjs.map +1 -1
  384. package/dist/jsx/FrappeReportView.native.js +2 -2
  385. package/dist/jsx/FrappeReportView.native.js.map +1 -1
  386. package/dist/jsx/FrappeTreeView.mjs +1 -1
  387. package/dist/jsx/FrappeTreeView.mjs.map +1 -1
  388. package/dist/jsx/FrappeTreeView.native.js +1 -1
  389. package/dist/jsx/desk/awesomebar.mjs +1 -1
  390. package/dist/jsx/desk/awesomebar.mjs.map +1 -1
  391. package/dist/jsx/desk/awesomebar.native.js +3 -3
  392. package/dist/jsx/desk/awesomebar.native.js.map +1 -1
  393. package/dist/jsx/fields/CodeEditor/index.mjs +2 -2
  394. package/dist/jsx/fields/CodeEditor/index.mjs.map +1 -1
  395. package/dist/jsx/fields/CodeEditor/index.native.js +1 -1
  396. package/dist/jsx/fields/CodeEditor/index.native.js.map +1 -1
  397. package/dist/jsx/fields/Color/index.mjs +1 -0
  398. package/dist/jsx/fields/Color/index.mjs.map +1 -1
  399. package/dist/jsx/fields/Color/index.native.js +1 -0
  400. package/dist/jsx/fields/Color/index.native.js.map +1 -1
  401. package/dist/jsx/fields/FileUpload.mjs +2 -2
  402. package/dist/jsx/fields/FileUpload.mjs.map +1 -1
  403. package/dist/jsx/fields/FileUpload.native.js +1 -1
  404. package/dist/jsx/fields/FileUpload.native.js.map +1 -1
  405. package/dist/jsx/fields/Heading/index.mjs +21 -14
  406. package/dist/jsx/fields/Heading/index.mjs.map +1 -1
  407. package/dist/jsx/fields/Heading/index.native.js +22 -13
  408. package/dist/jsx/fields/Heading/index.native.js.map +1 -1
  409. package/dist/jsx/fields/MarkdownEditor/index.mjs +2 -1
  410. package/dist/jsx/fields/MarkdownEditor/index.mjs.map +1 -1
  411. package/dist/jsx/fields/MarkdownEditor/index.native.js +1 -1
  412. package/dist/jsx/fields/MarkdownEditor/index.native.js.map +1 -1
  413. package/dist/jsx/frappeNavigation.mjs +11 -2
  414. package/dist/jsx/frappeNavigation.mjs.map +1 -1
  415. package/dist/jsx/frappeNavigation.native.js +13 -2
  416. package/dist/jsx/frappeNavigation.native.js.map +1 -1
  417. package/dist/jsx/index.js +14 -2
  418. package/dist/jsx/index.js.map +1 -1
  419. package/dist/jsx/index.mjs +14 -2
  420. package/dist/jsx/index.mjs.map +1 -1
  421. package/dist/jsx/index.native.js +34 -0
  422. package/dist/jsx/index.native.js.map +1 -1
  423. package/dist/jsx/insights/InsightsFacetTags.mjs +122 -0
  424. package/dist/jsx/insights/InsightsFacetTags.mjs.map +1 -0
  425. package/dist/jsx/insights/InsightsFacetTags.native.js +165 -0
  426. package/dist/jsx/insights/InsightsFacetTags.native.js.map +1 -0
  427. package/dist/jsx/insights/InsightsKpiBand.mjs +99 -0
  428. package/dist/jsx/insights/InsightsKpiBand.mjs.map +1 -0
  429. package/dist/jsx/insights/InsightsKpiBand.native.js +133 -0
  430. package/dist/jsx/insights/InsightsKpiBand.native.js.map +1 -0
  431. package/dist/jsx/insights/InsightsLeaders.mjs +125 -0
  432. package/dist/jsx/insights/InsightsLeaders.mjs.map +1 -0
  433. package/dist/jsx/insights/InsightsLeaders.native.js +178 -0
  434. package/dist/jsx/insights/InsightsLeaders.native.js.map +1 -0
  435. package/dist/jsx/insights/InsightsRecords.mjs +80 -0
  436. package/dist/jsx/insights/InsightsRecords.mjs.map +1 -0
  437. package/dist/jsx/insights/InsightsRecords.native.js +109 -0
  438. package/dist/jsx/insights/InsightsRecords.native.js.map +1 -0
  439. package/dist/jsx/insights/InsightsTable.mjs +132 -0
  440. package/dist/jsx/insights/InsightsTable.mjs.map +1 -0
  441. package/dist/jsx/insights/InsightsTable.native.js +194 -0
  442. package/dist/jsx/insights/InsightsTable.native.js.map +1 -0
  443. package/dist/jsx/insights/insightsData.mjs +82 -0
  444. package/dist/jsx/insights/insightsData.mjs.map +1 -0
  445. package/dist/jsx/insights/insightsData.native.js +220 -0
  446. package/dist/jsx/insights/insightsData.native.js.map +1 -0
  447. package/dist/jsx/insights/insightsRecord.mjs +9 -0
  448. package/dist/jsx/insights/insightsRecord.mjs.map +1 -0
  449. package/dist/jsx/insights/insightsRecord.native.js +38 -0
  450. package/dist/jsx/insights/insightsRecord.native.js.map +1 -0
  451. package/dist/jsx/list/FacetBadge.mjs +37 -0
  452. package/dist/jsx/list/FacetBadge.mjs.map +1 -0
  453. package/dist/jsx/list/FacetBadge.native.js +66 -0
  454. package/dist/jsx/list/FacetBadge.native.js.map +1 -0
  455. package/dist/jsx/list/FacetRail.mjs +174 -0
  456. package/dist/jsx/list/FacetRail.mjs.map +1 -0
  457. package/dist/jsx/list/FacetRail.native.js +223 -0
  458. package/dist/jsx/list/FacetRail.native.js.map +1 -0
  459. package/dist/jsx/list/ImageWell.mjs +86 -0
  460. package/dist/jsx/list/ImageWell.mjs.map +1 -0
  461. package/dist/jsx/list/ImageWell.native.js +126 -0
  462. package/dist/jsx/list/ImageWell.native.js.map +1 -0
  463. package/dist/jsx/list/ListControls.mjs +201 -0
  464. package/dist/jsx/list/ListControls.mjs.map +1 -0
  465. package/dist/jsx/list/ListControls.native.js +252 -0
  466. package/dist/jsx/list/ListControls.native.js.map +1 -0
  467. package/dist/jsx/list/ListToastHost.mjs +18 -0
  468. package/dist/jsx/list/ListToastHost.mjs.map +1 -0
  469. package/dist/jsx/list/ListToastHost.native.js +59 -0
  470. package/dist/jsx/list/ListToastHost.native.js.map +1 -0
  471. package/dist/jsx/list/RangeFilter.mjs +85 -0
  472. package/dist/jsx/list/RangeFilter.mjs.map +1 -0
  473. package/dist/jsx/list/RangeFilter.native.js +135 -0
  474. package/dist/jsx/list/RangeFilter.native.js.map +1 -0
  475. package/dist/jsx/list/RecordCard.mjs +208 -0
  476. package/dist/jsx/list/RecordCard.mjs.map +1 -0
  477. package/dist/jsx/list/RecordCard.native.js +173 -0
  478. package/dist/jsx/list/RecordCard.native.js.map +1 -0
  479. package/dist/jsx/list/ShufflePanel.mjs +87 -0
  480. package/dist/jsx/list/ShufflePanel.mjs.map +1 -0
  481. package/dist/jsx/list/ShufflePanel.native.js +139 -0
  482. package/dist/jsx/list/ShufflePanel.native.js.map +1 -0
  483. package/dist/jsx/list/facetReading.mjs +45 -0
  484. package/dist/jsx/list/facetReading.mjs.map +1 -0
  485. package/dist/jsx/list/facetReading.native.js +163 -0
  486. package/dist/jsx/list/facetReading.native.js.map +1 -0
  487. package/dist/jsx/list/favorites.mjs +50 -0
  488. package/dist/jsx/list/favorites.mjs.map +1 -0
  489. package/dist/jsx/list/favorites.native.js +91 -0
  490. package/dist/jsx/list/favorites.native.js.map +1 -0
  491. package/dist/jsx/list/listState.mjs +71 -0
  492. package/dist/jsx/list/listState.mjs.map +1 -0
  493. package/dist/jsx/list/listState.native.js +234 -0
  494. package/dist/jsx/list/listState.native.js.map +1 -0
  495. package/dist/jsx/list/recordLook.mjs +10 -0
  496. package/dist/jsx/list/recordLook.mjs.map +1 -0
  497. package/dist/jsx/list/recordLook.native.js +39 -0
  498. package/dist/jsx/list/recordLook.native.js.map +1 -0
  499. package/dist/jsx/list/useListControls.mjs +164 -0
  500. package/dist/jsx/list/useListControls.mjs.map +1 -0
  501. package/dist/jsx/list/useListControls.native.js +272 -0
  502. package/dist/jsx/list/useListControls.native.js.map +1 -0
  503. package/dist/jsx/record/RecordBars.mjs +175 -0
  504. package/dist/jsx/record/RecordBars.mjs.map +1 -0
  505. package/dist/jsx/record/RecordBars.native.js +225 -0
  506. package/dist/jsx/record/RecordBars.native.js.map +1 -0
  507. package/dist/jsx/record/RecordGallery.mjs +42 -0
  508. package/dist/jsx/record/RecordGallery.mjs.map +1 -0
  509. package/dist/jsx/record/RecordGallery.native.js +75 -0
  510. package/dist/jsx/record/RecordGallery.native.js.map +1 -0
  511. package/dist/jsx/record/RecordHero.mjs +205 -0
  512. package/dist/jsx/record/RecordHero.mjs.map +1 -0
  513. package/dist/jsx/record/RecordHero.native.js +250 -0
  514. package/dist/jsx/record/RecordHero.native.js.map +1 -0
  515. package/dist/jsx/record/RecordPage.mjs +305 -0
  516. package/dist/jsx/record/RecordPage.mjs.map +1 -0
  517. package/dist/jsx/record/RecordPage.native.js +364 -0
  518. package/dist/jsx/record/RecordPage.native.js.map +1 -0
  519. package/dist/jsx/record/RecordPager.mjs +100 -0
  520. package/dist/jsx/record/RecordPager.mjs.map +1 -0
  521. package/dist/jsx/record/RecordPager.native.js +130 -0
  522. package/dist/jsx/record/RecordPager.native.js.map +1 -0
  523. package/dist/jsx/record/RecordRows.mjs +101 -0
  524. package/dist/jsx/record/RecordRows.mjs.map +1 -0
  525. package/dist/jsx/record/RecordRows.native.js +140 -0
  526. package/dist/jsx/record/RecordRows.native.js.map +1 -0
  527. package/dist/jsx/record/recordData.mjs +92 -0
  528. package/dist/jsx/record/recordData.mjs.map +1 -0
  529. package/dist/jsx/record/recordData.native.js +189 -0
  530. package/dist/jsx/record/recordData.native.js.map +1 -0
  531. package/dist/jsx/record/recordSections.mjs +5 -0
  532. package/dist/jsx/record/recordSections.mjs.map +1 -0
  533. package/dist/jsx/record/recordSections.native.js +33 -0
  534. package/dist/jsx/record/recordSections.native.js.map +1 -0
  535. package/dist/jsx/useFrappeFacets.mjs +1 -1
  536. package/dist/jsx/useFrappeFacets.mjs.map +1 -1
  537. package/dist/jsx/useFrappeFacets.native.js +1 -1
  538. package/dist/jsx/useFrappeFacets.native.js.map +1 -1
  539. package/package.json +16 -16
  540. package/src/FormSidebar.stories.tsx +2 -0
  541. package/src/FrappeCalendar.stories.tsx +2 -0
  542. package/src/FrappeCalendar.tsx +2 -2
  543. package/src/FrappeChartCard.stories.tsx +2 -0
  544. package/src/FrappeDashboard.stories.tsx +2 -0
  545. package/src/FrappeDashboard.tsx +2 -2
  546. package/src/FrappeForm.tsx +7 -1
  547. package/src/FrappeImageView.stories.tsx +2 -0
  548. package/src/FrappeImageView.tsx +2 -1
  549. package/src/FrappeInsights.spec.tsx +171 -0
  550. package/src/FrappeInsights.tsx +422 -0
  551. package/src/FrappeKPICard.stories.tsx +3 -3
  552. package/src/FrappeKanban.stories.tsx +4 -8
  553. package/src/FrappeLikedBy.tsx +7 -5
  554. package/src/FrappeListView.card.spec.tsx +157 -0
  555. package/src/FrappeListView.controls.spec.tsx +225 -0
  556. package/src/FrappeListView.seed.spec.tsx +30 -0
  557. package/src/FrappeListView.stories.tsx +2 -0
  558. package/src/FrappeListView.tsx +589 -45
  559. package/src/FrappeNotConfigured.tsx +29 -0
  560. package/src/FrappeRecordView.spec.tsx +276 -0
  561. package/src/FrappeRecordView.tsx +231 -0
  562. package/src/FrappeReportBuilder.tsx +4 -5
  563. package/src/FrappeReportView.tsx +1 -1
  564. package/src/FrappeTreeView.tsx +1 -1
  565. package/src/clientCache.auth.spec.tsx +94 -0
  566. package/src/desk/DeskFormSidebar.stories.tsx +2 -0
  567. package/src/desk/DeskShell.stories.tsx +12 -6
  568. package/src/desk/awesomebar.auth.spec.tsx +77 -0
  569. package/src/desk/awesomebar.tsx +1 -1
  570. package/src/fields/CodeEditor/index.tsx +8 -2
  571. package/src/fields/Color/Color.stories.tsx +2 -0
  572. package/src/fields/Color/index.tsx +1 -0
  573. package/src/fields/FileUpload.tsx +8 -2
  574. package/src/fields/Heading/index.tsx +41 -17
  575. package/src/fields/MarkdownEditor/index.native.tsx +8 -2
  576. package/src/fields/MarkdownEditor/index.tsx +8 -1
  577. package/src/fields/ReadOnly/ReadOnly.stories.tsx +2 -0
  578. package/src/frappeNavigation.loader.spec.tsx +45 -0
  579. package/src/frappeNavigation.tsx +32 -1
  580. package/src/frappeRoutes.notConfigured.spec.tsx +77 -0
  581. package/src/index.ts +53 -1
  582. package/src/insights/InsightsFacetTags.tsx +131 -0
  583. package/src/insights/InsightsKpiBand.tsx +114 -0
  584. package/src/insights/InsightsLeaders.tsx +146 -0
  585. package/src/insights/InsightsRecords.tsx +71 -0
  586. package/src/insights/InsightsTable.tsx +169 -0
  587. package/src/insights/insightsData.spec.ts +143 -0
  588. package/src/insights/insightsData.ts +122 -0
  589. package/src/insights/insightsRecord.ts +36 -0
  590. package/src/list/FacetBadge.tsx +41 -0
  591. package/src/list/FacetRail.tsx +235 -0
  592. package/src/list/ImageWell.tsx +110 -0
  593. package/src/list/ListControls.tsx +208 -0
  594. package/src/list/ListToastHost.tsx +27 -0
  595. package/src/list/RangeFilter.tsx +83 -0
  596. package/src/list/RecordCard.native.tsx +126 -0
  597. package/src/list/RecordCard.tsx +260 -0
  598. package/src/list/ShufflePanel.tsx +107 -0
  599. package/src/list/facetReading.ts +79 -0
  600. package/src/list/favorites.spec.ts +80 -0
  601. package/src/list/favorites.ts +79 -0
  602. package/src/list/listState.spec.ts +156 -0
  603. package/src/list/listState.ts +184 -0
  604. package/src/list/recordLook.ts +37 -0
  605. package/src/list/useListControls.tsx +223 -0
  606. package/src/record/RecordBars.tsx +187 -0
  607. package/src/record/RecordGallery.tsx +47 -0
  608. package/src/record/RecordHero.tsx +186 -0
  609. package/src/record/RecordPage.tsx +358 -0
  610. package/src/record/RecordPager.tsx +97 -0
  611. package/src/record/RecordRows.tsx +90 -0
  612. package/src/record/recordData.spec.ts +148 -0
  613. package/src/record/recordData.ts +124 -0
  614. package/src/record/recordSections.ts +62 -0
  615. package/src/schemaForm/SchemaForm.stories.tsx +2 -2
  616. package/src/useFrappeFacets.ts +14 -7
  617. package/types/FrappeForm.d.ts +2 -1
  618. package/types/FrappeForm.d.ts.map +1 -1
  619. package/types/FrappeImageView.d.ts.map +1 -1
  620. package/types/FrappeInsights.d.ts +55 -0
  621. package/types/FrappeInsights.d.ts.map +1 -0
  622. package/types/FrappeLikedBy.d.ts.map +1 -1
  623. package/types/FrappeListView.d.ts +85 -3
  624. package/types/FrappeListView.d.ts.map +1 -1
  625. package/types/FrappeNotConfigured.d.ts +11 -0
  626. package/types/FrappeNotConfigured.d.ts.map +1 -0
  627. package/types/FrappeRecordView.d.ts +69 -0
  628. package/types/FrappeRecordView.d.ts.map +1 -0
  629. package/types/FrappeReportBuilder.d.ts.map +1 -1
  630. package/types/fields/CodeEditor/index.d.ts.map +1 -1
  631. package/types/fields/Color/index.d.ts.map +1 -1
  632. package/types/fields/FileUpload.d.ts.map +1 -1
  633. package/types/fields/Heading/index.d.ts.map +1 -1
  634. package/types/fields/MarkdownEditor/index.d.ts.map +1 -1
  635. package/types/fields/MarkdownEditor/index.native.d.ts.map +1 -1
  636. package/types/frappeNavigation.d.ts +21 -0
  637. package/types/frappeNavigation.d.ts.map +1 -1
  638. package/types/index.d.ts +14 -2
  639. package/types/index.d.ts.map +1 -1
  640. package/types/insights/InsightsFacetTags.d.ts +11 -0
  641. package/types/insights/InsightsFacetTags.d.ts.map +1 -0
  642. package/types/insights/InsightsKpiBand.d.ts +22 -0
  643. package/types/insights/InsightsKpiBand.d.ts.map +1 -0
  644. package/types/insights/InsightsLeaders.d.ts +16 -0
  645. package/types/insights/InsightsLeaders.d.ts.map +1 -0
  646. package/types/insights/InsightsRecords.d.ts +19 -0
  647. package/types/insights/InsightsRecords.d.ts.map +1 -0
  648. package/types/insights/InsightsTable.d.ts +17 -0
  649. package/types/insights/InsightsTable.d.ts.map +1 -0
  650. package/types/insights/insightsData.d.ts +45 -0
  651. package/types/insights/insightsData.d.ts.map +1 -0
  652. package/types/insights/insightsRecord.d.ts +29 -0
  653. package/types/insights/insightsRecord.d.ts.map +1 -0
  654. package/types/list/FacetBadge.d.ts +13 -0
  655. package/types/list/FacetBadge.d.ts.map +1 -0
  656. package/types/list/FacetRail.d.ts +26 -0
  657. package/types/list/FacetRail.d.ts.map +1 -0
  658. package/types/list/ImageWell.d.ts +24 -0
  659. package/types/list/ImageWell.d.ts.map +1 -0
  660. package/types/list/ListControls.d.ts +30 -0
  661. package/types/list/ListControls.d.ts.map +1 -0
  662. package/types/list/ListToastHost.d.ts +7 -0
  663. package/types/list/ListToastHost.d.ts.map +1 -0
  664. package/types/list/RangeFilter.d.ts +14 -0
  665. package/types/list/RangeFilter.d.ts.map +1 -0
  666. package/types/list/RecordCard.d.ts +38 -0
  667. package/types/list/RecordCard.d.ts.map +1 -0
  668. package/types/list/RecordCard.native.d.ts +9 -0
  669. package/types/list/RecordCard.native.d.ts.map +1 -0
  670. package/types/list/ShufflePanel.d.ts +24 -0
  671. package/types/list/ShufflePanel.d.ts.map +1 -0
  672. package/types/list/facetReading.d.ts +33 -0
  673. package/types/list/facetReading.d.ts.map +1 -0
  674. package/types/list/favorites.d.ts +26 -0
  675. package/types/list/favorites.d.ts.map +1 -0
  676. package/types/list/listState.d.ts +94 -0
  677. package/types/list/listState.d.ts.map +1 -0
  678. package/types/list/recordLook.d.ts +25 -0
  679. package/types/list/recordLook.d.ts.map +1 -0
  680. package/types/list/useListControls.d.ts +48 -0
  681. package/types/list/useListControls.d.ts.map +1 -0
  682. package/types/record/RecordBars.d.ts +11 -0
  683. package/types/record/RecordBars.d.ts.map +1 -0
  684. package/types/record/RecordGallery.d.ts +17 -0
  685. package/types/record/RecordGallery.d.ts.map +1 -0
  686. package/types/record/RecordHero.d.ts +42 -0
  687. package/types/record/RecordHero.d.ts.map +1 -0
  688. package/types/record/RecordPage.d.ts +54 -0
  689. package/types/record/RecordPage.d.ts.map +1 -0
  690. package/types/record/RecordPager.d.ts +13 -0
  691. package/types/record/RecordPager.d.ts.map +1 -0
  692. package/types/record/RecordRows.d.ts +13 -0
  693. package/types/record/RecordRows.d.ts.map +1 -0
  694. package/types/record/recordData.d.ts +46 -0
  695. package/types/record/recordData.d.ts.map +1 -0
  696. package/types/record/recordSections.d.ts +67 -0
  697. package/types/record/recordSections.d.ts.map +1 -0
  698. package/types/useFrappeFacets.d.ts.map +1 -1
@@ -1,9 +1,15 @@
1
1
  import { InMemoryFixtureProvider } from "@multiplatform.one/frappe";
2
2
  import { action } from "@multiplatform.one/storybook";
3
3
  import { Text, YStack } from "@multiplatform.one/components";
4
+ import { sizeRecipeEscape } from "@multiplatform.one/theme";
4
5
  import { FrappeProvider } from "../FrappeProvider";
5
6
  import { DeskShell } from "./DeskShell";
6
7
 
8
+ const frameHeight = sizeRecipeEscape(
9
+ 640,
10
+ "story canvas: a fixed-height frame for a full-height screen to fill",
11
+ );
12
+
7
13
  export default {
8
14
  title: "FrappeUI/Desk/DeskShell",
9
15
  component: DeskShell,
@@ -85,7 +91,7 @@ const content = (blocks: number) => (
85
91
 
86
92
  export const Main = (args: Record<string, unknown>) => (
87
93
  <FrappeProvider baseURL={MOCK_HOST} fixtures={new InMemoryFixtureProvider({})}>
88
- <YStack height={640}>
94
+ <YStack height={frameHeight}>
89
95
  <DeskShell
90
96
  breadcrumbs={[{ label: "Desk", href: "/desk" }, { label: "Todo" }]}
91
97
  onNavigate={action("onNavigate")}
@@ -102,7 +108,7 @@ Main.storyName = "Main";
102
108
 
103
109
  export const NoSidebar = () => (
104
110
  <FrappeProvider baseURL={MOCK_HOST} fixtures={new InMemoryFixtureProvider({})}>
105
- <YStack height={640}>
111
+ <YStack height={frameHeight}>
106
112
  <DeskShell showSidebar={false} onNavigate={action("onNavigate")}>
107
113
  {content(2)}
108
114
  </DeskShell>
@@ -112,7 +118,7 @@ export const NoSidebar = () => (
112
118
 
113
119
  export const NoAwesomebar = () => (
114
120
  <FrappeProvider baseURL={MOCK_HOST} fixtures={new InMemoryFixtureProvider({})}>
115
- <YStack height={640}>
121
+ <YStack height={frameHeight}>
116
122
  <DeskShell showAwesomebar={false} onNavigate={action("onNavigate")}>
117
123
  {content(2)}
118
124
  </DeskShell>
@@ -123,7 +129,7 @@ export const NoAwesomebar = () => (
123
129
  /** Long page content must scroll inside the main area, header staying fixed. */
124
130
  export const LongContent = () => (
125
131
  <FrappeProvider baseURL={MOCK_HOST} fixtures={new InMemoryFixtureProvider({})}>
126
- <YStack height={640}>
132
+ <YStack height={frameHeight}>
127
133
  <DeskShell
128
134
  breadcrumbs={[{ label: "Desk", href: "/desk" }, { label: "Long" }]}
129
135
  onNavigate={action("onNavigate")}
@@ -136,7 +142,7 @@ export const LongContent = () => (
136
142
 
137
143
  /** No breadcrumbs, no provider config: shell must still render header + nav + content. */
138
144
  export const Bare = () => (
139
- <YStack height={640}>
145
+ <YStack height={frameHeight}>
140
146
  <DeskShell onNavigate={action("onNavigate")}>{content(1)}</DeskShell>
141
147
  </YStack>
142
148
  );
@@ -144,7 +150,7 @@ export const Bare = () => (
144
150
  /** Compact viewport: rail collapses to a phosphor toggle + overlay drawer. */
145
151
  export const Narrow = () => (
146
152
  <FrappeProvider baseURL={MOCK_HOST} fixtures={new InMemoryFixtureProvider({})}>
147
- <YStack height={640}>
153
+ <YStack height={frameHeight}>
148
154
  <DeskShell
149
155
  breadcrumbs={[{ label: "Desk", href: "/desk" }, { label: "Todo" }]}
150
156
  onNavigate={action("onNavigate")}
@@ -0,0 +1,77 @@
1
+ // The desk Awesomebar keeps its document-search client in a ref. When the
2
+ // provider's connection starts sending its token, or sends it under another
3
+ // scheme, the next search must carry the new credentials instead of going out
4
+ // on a client built for the old ones (MPO-410).
5
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
6
+ import { act, waitFor } from "@testing-library/react";
7
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
8
+ import { FrappeProvider } from "../FrappeProvider";
9
+ import { Awesomebar } from "./awesomebar";
10
+
11
+ const combobox = vi.hoisted(() => ({
12
+ search: undefined as ((query: string) => void) | undefined,
13
+ }));
14
+ vi.mock("@multiplatform.one/forms", () => ({
15
+ formCommonColors: { muted: "$color10" },
16
+ Combobox: ({ onSearch }: { onSearch?: (query: string) => void }) => {
17
+ combobox.search = onSearch;
18
+ return null;
19
+ },
20
+ }));
21
+
22
+ type Auth = { useToken: boolean; token: string; type: string };
23
+
24
+ const auth = (useToken: boolean, type = "token"): Auth => ({ useToken, token: "key:secret", type });
25
+
26
+ const changes: [string, Auth, Auth, (string | null)[]][] = [
27
+ ["starts sending its token", auth(false), auth(true), [null, "token key:secret"]],
28
+ [
29
+ "switches its token scheme",
30
+ auth(true, "token"),
31
+ auth(true, "Bearer"),
32
+ ["token key:secret", "Bearer key:secret"],
33
+ ],
34
+ ];
35
+
36
+ const searchPath = "/api/method/frappe.utils.global_search.search";
37
+ let run = 0;
38
+ let searches: (string | null)[] = [];
39
+
40
+ beforeEach(() => {
41
+ run += 1;
42
+ searches = [];
43
+ vi.stubGlobal("fetch", async (input: string | URL | Request, init?: RequestInit) => {
44
+ const url = new URL(String(input));
45
+ if (url.pathname === searchPath) {
46
+ searches.push(new Headers(init?.headers).get("Authorization"));
47
+ }
48
+ return Response.json({ message: [], data: [] });
49
+ });
50
+ });
51
+
52
+ afterEach(() => vi.unstubAllGlobals());
53
+
54
+ describe("Awesomebar document search", () => {
55
+ it.each(changes)(
56
+ "searches with the new credentials when the connection %s",
57
+ async (_, before, after, expected) => {
58
+ const baseURL = `http://awesomebar-${run}.test`;
59
+ const ui = (connectionAuth: Auth) => (
60
+ <FrappeProvider baseURL={baseURL} realtime={false} auth={connectionAuth}>
61
+ <Awesomebar />
62
+ </FrappeProvider>
63
+ );
64
+ const { rerender } = renderWithProviders(ui(before));
65
+ act(() => {
66
+ combobox.search?.("pikachu");
67
+ });
68
+ await waitFor(() => expect(searches).toHaveLength(1));
69
+ rerender(ui(after));
70
+ act(() => {
71
+ combobox.search?.("raichu");
72
+ });
73
+ await waitFor(() => expect(searches).toHaveLength(2));
74
+ expect(searches).toEqual(expected);
75
+ },
76
+ );
77
+ });
@@ -172,7 +172,7 @@ export function Awesomebar({ onNavigate, basePath = "/desk", ...stackProps }: Aw
172
172
  const httpRef = useRef<HttpClient | undefined>(undefined);
173
173
  const configKeyRef = useRef("");
174
174
  if (config?.baseURL) {
175
- const key = `${config.baseURL}:${config.auth?.token ?? ""}`;
175
+ const key = `${config.baseURL}:${config.auth?.useToken ? "t" : ""}:${config.auth?.token ?? ""}:${config.auth?.type ?? ""}`;
176
176
  if (key !== configKeyRef.current) {
177
177
  httpRef.current = createHttpClientFromConfig({
178
178
  baseURL: config.baseURL,
@@ -29,7 +29,7 @@ import {
29
29
  useResolvedValidators,
30
30
  type AnyFormApi,
31
31
  } from "@multiplatform.one/forms";
32
- import { useResolvedKnobs } from "@multiplatform.one/theme";
32
+ import { sizeRecipeForToken, useResolvedKnobs } from "@multiplatform.one/theme";
33
33
  import { useEffect, useState, type ReactNode } from "react";
34
34
  import { useTranslation } from "react-i18next";
35
35
  import type { FontSizeTokens, LabelProps, SizeTokens } from "tamagui";
@@ -183,7 +183,13 @@ export function CodeEditorField({
183
183
  if (skeleton) {
184
184
  return (
185
185
  <YStack {...knobProps.gap} width="100%">
186
- {label && <Skeleton variant="text" width="30%" height={14} />}
186
+ {label && (
187
+ <Skeleton
188
+ variant="text"
189
+ width="30%"
190
+ height={sizeRecipeForToken(knobProps.sizeToken).fontSize}
191
+ />
192
+ )}
187
193
  <Skeleton variant="rounded" width="100%" height={compact ? 120 : 200} />
188
194
  </YStack>
189
195
  );
@@ -6,6 +6,8 @@ import { fieldtypeToTableField } from "../../fieldRegistry";
6
6
  import { FrappeStoryProvider } from "../../frappeStoryTarget";
7
7
  import { Color, type ColorProps } from ".";
8
8
 
9
+ // hex-escape: Color field values are hex strings: specimen data, not paint
10
+
9
11
  export default {
10
12
  title: "FrappeUI/Color",
11
13
  component: Color,
@@ -62,6 +62,7 @@ export function Color<
62
62
  validators,
63
63
  disabled,
64
64
  value,
65
+ // hex-escape: a Color field stores hex; the placeholder shows that format and paints nothing
65
66
  placeholder = "#000000",
66
67
  _showPresets = true,
67
68
  presetColors,
@@ -1,7 +1,7 @@
1
1
  import { useFrappeCollection } from "@multiplatform.one/frappe";
2
2
  import { Skeleton } from "@multiplatform.one/forms";
3
3
  import { FileIcon, UploadIcon, XIcon } from "@phosphor-icons/react";
4
- import { useResolvedKnobs } from "@multiplatform.one/theme";
4
+ import { sizeRecipeForToken, useResolvedKnobs } from "@multiplatform.one/theme";
5
5
  import type React from "react";
6
6
  import { useCallback, useEffect, useRef, useState } from "react";
7
7
  import { useTranslation } from "react-i18next";
@@ -276,7 +276,13 @@ export function FileUpload({
276
276
  if (skeleton) {
277
277
  return (
278
278
  <YStack {...knobProps.gap}>
279
- {label && <Skeleton variant="text" width="30%" height={14} />}
279
+ {label && (
280
+ <Skeleton
281
+ variant="text"
282
+ width="30%"
283
+ height={sizeRecipeForToken(knobProps.sizeToken).fontSize}
284
+ />
285
+ )}
280
286
  <Skeleton variant="rounded" width="100%" height={minHeight} />
281
287
  </YStack>
282
288
  );
@@ -1,9 +1,20 @@
1
1
  import { useRegisterPageHeading } from "@multiplatform.one/components";
2
2
  import { Skeleton } from "@multiplatform.one/forms";
3
- import { useResolvedKnobs } from "@multiplatform.one/theme";
3
+ import { sizeRecipeEscape, useResolvedKnobs } from "@multiplatform.one/theme";
4
4
  import type React from "react";
5
5
  import { useCallback, useEffect, useId, useState } from "react";
6
- import { H1, H2, H3, H4, Separator, Text, XStack, YStack, type YStackProps } from "tamagui";
6
+ import {
7
+ getTokenValue,
8
+ H1,
9
+ H2,
10
+ H3,
11
+ H4,
12
+ Separator,
13
+ Text,
14
+ XStack,
15
+ YStack,
16
+ type YStackProps,
17
+ } from "tamagui";
7
18
 
8
19
  export type HeadingLevel = 1 | 2 | 3 | 4;
9
20
 
@@ -105,7 +116,13 @@ export function Heading({
105
116
  <YStack {...knobProps.gap} {...stackProps}>
106
117
  <Skeleton variant="text" width="45%" height={compact ? 18 : 24} />
107
118
  <Skeleton variant="text" width="70%" height={compact ? 12 : 14} />
108
- {showSeparator && <Skeleton variant="rounded" width="100%" height={1} />}
119
+ {showSeparator && (
120
+ <Skeleton
121
+ variant="rounded"
122
+ width="100%"
123
+ height={sizeRecipeEscape(1, "separator bone: the 1px rule a Separator draws")}
124
+ />
125
+ )}
109
126
  </YStack>
110
127
  );
111
128
  }
@@ -148,23 +165,30 @@ export function Heading({
148
165
  </XStack>
149
166
  );
150
167
 
168
+ const spacePx = (token: unknown) =>
169
+ Number(getTokenValue(token as Parameters<typeof getTokenValue>[0], "space")) || 0;
170
+ const descriptionGap = Math.max(0, spacePx(stackProps.gap ?? knobProps.gap.gap) - spacePx("$1"));
171
+ const showDescription = Boolean(resolvedDescription) && !isCollapsed;
172
+
151
173
  return (
152
174
  <YStack {...knobProps.gap} {...stackProps}>
153
- {headingContent}
154
- {resolvedDescription && !isCollapsed && (
155
- <Text
156
- fontSize={knobProps.sizeToken}
157
- {...knobProps.body}
158
- color="$color10"
159
- marginTop="$-1"
160
- marginBottom="$1"
161
- paddingInlineStart={canCollapse ? "$6" : undefined}
162
- >
163
- {resolvedDescription}
164
- </Text>
165
- )}
175
+ <YStack gap={descriptionGap} paddingBottom={showDescription ? "$1" : undefined}>
176
+ {headingContent}
177
+ {showDescription && (
178
+ <Text
179
+ fontSize={knobProps.sizeToken}
180
+ {...knobProps.body}
181
+ color="$color10"
182
+ paddingInlineStart={canCollapse ? "$6" : undefined}
183
+ >
184
+ {resolvedDescription}
185
+ </Text>
186
+ )}
187
+ </YStack>
166
188
  {showSeparator && (
167
- <Separator marginVertical={compact ? "$0.5" : "$1"} backgroundColor="$color5" />
189
+ <YStack paddingVertical={compact ? "$0.5" : "$1"}>
190
+ <Separator backgroundColor="$color5" />
191
+ </YStack>
168
192
  )}
169
193
  {collapsible ? (
170
194
  // Always mounted so the aria-controls target exists while collapsed
@@ -31,7 +31,7 @@ import { useEffect, useState, type ComponentType, type ReactNode } from "react";
31
31
  import { useTranslation } from "react-i18next";
32
32
  import type { FontSizeTokens, LabelProps, SizeTokens } from "tamagui";
33
33
  import { Paragraph, YStack } from "tamagui";
34
- import { useResolvedKnobs } from "@multiplatform.one/theme";
34
+ import { sizeRecipeForToken, useResolvedKnobs } from "@multiplatform.one/theme";
35
35
  import { EditorPreviewPanes, PreviewSurface } from "../shared/EditorPreviewPanes";
36
36
 
37
37
  // ---------------------------------------------------------------------------
@@ -176,7 +176,13 @@ export function MarkdownEditorField({
176
176
  if (skeleton) {
177
177
  return (
178
178
  <YStack {...knobProps.gap} width="100%">
179
- {label && <Skeleton variant="text" width="30%" height={14} />}
179
+ {label && (
180
+ <Skeleton
181
+ variant="text"
182
+ width="30%"
183
+ height={sizeRecipeForToken(knobProps.sizeToken).fontSize}
184
+ />
185
+ )}
180
186
  <Skeleton variant="rounded" width="100%" height={compact ? 120 : 200} />
181
187
  </YStack>
182
188
  );
@@ -27,6 +27,7 @@ import {
27
27
  type AnyFormApi,
28
28
  } from "@multiplatform.one/forms";
29
29
  import { RichEditor, type RichEditorRef } from "@multiplatform.one/rich-text";
30
+ import { sizeRecipeForToken } from "@multiplatform.one/theme";
30
31
  import { useEffect, useRef, useState, type ReactNode } from "react";
31
32
  import type { LabelProps, SizeTokens } from "tamagui";
32
33
  import { YStack } from "tamagui";
@@ -111,7 +112,13 @@ export function MarkdownEditorField({
111
112
  if (skeleton) {
112
113
  return (
113
114
  <YStack {...knobProps.gap} width="100%">
114
- {label && <Skeleton variant="text" width="30%" height={14} />}
115
+ {label && (
116
+ <Skeleton
117
+ variant="text"
118
+ width="30%"
119
+ height={sizeRecipeForToken(knobProps.sizeToken).fontSize}
120
+ />
121
+ )}
115
122
  <Skeleton variant="rounded" width="100%" height={compact ? 120 : 200} />
116
123
  </YStack>
117
124
  );
@@ -4,6 +4,8 @@ import { fieldtypeToTableField } from "../../fieldRegistry";
4
4
  import { FrappeStoryProvider } from "../../frappeStoryTarget";
5
5
  import { ReadOnly } from ".";
6
6
 
7
+ // hex-escape: Color field values are hex strings: specimen data, not paint
8
+
7
9
  export default {
8
10
  title: "FrappeUI/ReadOnly",
9
11
  component: ReadOnly,
@@ -0,0 +1,45 @@
1
+ // MPO-411. A routed view reads what its route's loader rendered on the server
2
+ // through the host's navigation, so an app hands the view its loader instead
3
+ // of reading the router itself.
4
+ import { render } from "@testing-library/react";
5
+ import { describe, expect, it, vi } from "vitest";
6
+ import {
7
+ FrappeNavigationProvider,
8
+ useRouteLoaderData,
9
+ type FrappeNavigation,
10
+ } from "./frappeNavigation";
11
+
12
+ const loader = async () => ({ rows: [] });
13
+
14
+ function Probe({ of, seen }: { of?: typeof loader; seen: (value: unknown) => void }) {
15
+ seen(useRouteLoaderData(of));
16
+ return null;
17
+ }
18
+
19
+ function read(navigation: FrappeNavigation | undefined, of?: typeof loader): unknown {
20
+ const seen = vi.fn();
21
+ render(
22
+ <FrappeNavigationProvider navigation={navigation}>
23
+ <Probe of={of} seen={seen} />
24
+ </FrappeNavigationProvider>,
25
+ );
26
+ return seen.mock.calls.at(-1)?.[0];
27
+ }
28
+
29
+ const base: FrappeNavigation = { usePathname: () => "/pokemon", useNavigate: () => () => {} };
30
+
31
+ describe("useRouteLoaderData", () => {
32
+ it("hands the host the loader and returns what it read", () => {
33
+ const useLoader = vi.fn(() => ({ rows: ["bulbasaur"] }));
34
+ expect(read({ ...base, useLoader }, loader)).toEqual({ rows: ["bulbasaur"] });
35
+ expect(useLoader).toHaveBeenCalledWith(loader);
36
+ });
37
+
38
+ it("reads nothing without a loader or a host that runs them", () => {
39
+ const useLoader = vi.fn(() => ({ rows: ["bulbasaur"] }));
40
+ expect(read({ ...base, useLoader })).toBeUndefined();
41
+ expect(useLoader).not.toHaveBeenCalled();
42
+ expect(read(base, loader)).toBeUndefined();
43
+ expect(read(undefined, loader)).toBeUndefined();
44
+ });
45
+ });
@@ -15,12 +15,28 @@ export interface FrappeNavigation {
15
15
  usePathname(): string;
16
16
  /** A function that pushes an href onto the history. */
17
17
  useNavigate(): (href: string) => void;
18
+ /**
19
+ * The query params of the route the caller renders in. A host without
20
+ * them leaves a routed list's controls out of the URL.
21
+ */
22
+ useSearchParams?(): Record<string, string | undefined>;
23
+ /** A function that replaces query params in place; undefined drops one. */
24
+ useSetSearchParams?(): (params: Record<string, string | undefined>) => void;
25
+ /**
26
+ * What the route's loader returned (the page it rendered on the server),
27
+ * given the loader the route exports. A host without loaders leaves it
28
+ * out, and a view reads live from the start.
29
+ */
30
+ useLoader?(loader: (...args: never[]) => unknown): unknown;
18
31
  }
19
32
 
20
33
  /** A routed view's handle on the host router. */
21
34
  export interface FrappeRouter {
22
35
  pathname: string;
23
36
  navigate(href: string): void;
37
+ /** Present when the host hands its query params to routed views. */
38
+ searchParams?: Record<string, string | undefined>;
39
+ setSearchParams?: (params: Record<string, string | undefined>) => void;
24
40
  }
25
41
 
26
42
  const FrappeNavigationContext = createContext<FrappeNavigation | undefined>(undefined);
@@ -44,6 +60,17 @@ export function useFrappeNavigation(): FrappeNavigation | undefined {
44
60
  return useContext(FrappeNavigationContext);
45
61
  }
46
62
 
63
+ /**
64
+ * What `loader` returned for the route the caller renders in, through the
65
+ * host's navigation; undefined without a loader or a host that runs them.
66
+ */
67
+ export function useRouteLoaderData(loader: ((...args: never[]) => unknown) | undefined): unknown {
68
+ const navigation = useContext(FrappeNavigationContext);
69
+ if (!loader || !navigation?.useLoader) return undefined;
70
+ // oxlint-disable-next-line rules-of-hooks -- one navigation and one loader per view
71
+ return navigation.useLoader(loader);
72
+ }
73
+
47
74
  /** The host router for a routed view, or undefined when the host gave none. */
48
75
  export function useFrappeRouter(): FrappeRouter | undefined {
49
76
  const navigation = useFrappeNavigation();
@@ -52,7 +79,11 @@ export function useFrappeRouter(): FrappeRouter | undefined {
52
79
  const pathname = navigation.usePathname();
53
80
  // oxlint-disable-next-line rules-of-hooks -- one navigation per tree
54
81
  const navigate = navigation.useNavigate();
55
- return { pathname, navigate };
82
+ // oxlint-disable-next-line rules-of-hooks -- one navigation per tree
83
+ const searchParams = navigation.useSearchParams?.();
84
+ // oxlint-disable-next-line rules-of-hooks -- one navigation per tree
85
+ const setSearchParams = navigation.useSetSearchParams?.();
86
+ return { pathname, navigate, searchParams, setSearchParams };
56
87
  }
57
88
 
58
89
  /**
@@ -0,0 +1,77 @@
1
+ // A host built with Frappe off (MPO-403): createApp mounts no FrappeProvider
2
+ // without FRAPPE_ENABLED, so a doctype's routed pages find no bench URL and no
3
+ // fixture corpus. They say the backend isn't configured instead of throwing
4
+ // and taking the route down, and they dial nothing.
5
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
6
+ import { cleanup, screen } from "@testing-library/react";
7
+ import i18next from "i18next";
8
+ import { initReactI18next } from "react-i18next";
9
+ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
10
+ import { FrappeForm } from "./FrappeForm";
11
+ import { FrappeListView } from "./FrappeListView";
12
+ import { FrappeProvider } from "./FrappeProvider";
13
+
14
+ interface Move {
15
+ name: string;
16
+ doctype: string;
17
+ move_name?: string;
18
+ }
19
+
20
+ const doctype = "Poke Move";
21
+ const route = "/moves";
22
+
23
+ let fetchSpy: ReturnType<typeof vi.fn>;
24
+
25
+ beforeAll(async () => {
26
+ await i18next.use(initReactI18next).init({
27
+ lng: "en",
28
+ interpolation: { escapeValue: false },
29
+ resources: { en: { translation: {} } },
30
+ });
31
+ });
32
+
33
+ beforeEach(() => {
34
+ fetchSpy = vi.fn(async () => {
35
+ throw new Error("a page with no bench dialled one");
36
+ });
37
+ vi.stubGlobal("fetch", fetchSpy);
38
+ });
39
+
40
+ afterEach(() => {
41
+ cleanup();
42
+ vi.restoreAllMocks();
43
+ vi.unstubAllGlobals();
44
+ });
45
+
46
+ function expectNotConfigured() {
47
+ expect(screen.getByTestId("frappe-not-configured")).toBeTruthy();
48
+ expect(screen.getByText("Frappe is not configured")).toBeTruthy();
49
+ expect(fetchSpy).not.toHaveBeenCalled();
50
+ }
51
+
52
+ describe("a doctype's pages on a host with no Frappe backend", () => {
53
+ it("the new page says the backend isn't configured", () => {
54
+ renderWithProviders(<FrappeForm<Move> doctype={doctype} route={route} />);
55
+ expectNotConfigured();
56
+ expect(screen.getByText(`${doctype} can't load without a Frappe bench URL.`)).toBeTruthy();
57
+ });
58
+
59
+ it("a record page says the backend isn't configured", () => {
60
+ renderWithProviders(<FrappeForm<Move> doctype={doctype} name="a1b2c3" />);
61
+ expectNotConfigured();
62
+ });
63
+
64
+ it("the list page says the backend isn't configured", () => {
65
+ renderWithProviders(<FrappeListView<Move> doctype={doctype} route={route} />);
66
+ expectNotConfigured();
67
+ });
68
+
69
+ it("a provider that resolved no bench URL reads the same", () => {
70
+ renderWithProviders(
71
+ <FrappeProvider realtime={false}>
72
+ <FrappeForm<Move> doctype={doctype} route={route} />
73
+ </FrappeProvider>,
74
+ );
75
+ expectNotConfigured();
76
+ });
77
+ });
package/src/index.ts CHANGED
@@ -26,6 +26,7 @@ export {
26
26
  } from "./FrappeProvider";
27
27
  export {
28
28
  FrappeNavigationProvider,
29
+ useRouteLoaderData,
29
30
  frappeRouteHref,
30
31
  frappeRouteTarget,
31
32
  useFrappeNavigation,
@@ -67,7 +68,58 @@ export {
67
68
  type SidebarPerson,
68
69
  } from "./FormSidebar";
69
70
  export { FrappeList, type FrappeListProps } from "./FrappeList";
70
- export { FrappeListView, type FrappeListViewProps, type ListViewMode } from "./FrappeListView";
71
+ export {
72
+ FrappeListView,
73
+ type FrappeListAction,
74
+ type FrappeListCard,
75
+ type FrappeListViewProps,
76
+ type ListViewMode,
77
+ } from "./FrappeListView";
78
+ export {
79
+ isListNarrowed,
80
+ listStateFilters,
81
+ listStateFromParams,
82
+ listStateOrderBy,
83
+ listStateParams,
84
+ type FrappeListControls,
85
+ type FrappeListFacet,
86
+ type FrappeListFilter,
87
+ type FrappeListParams,
88
+ type FrappeListRange,
89
+ type FrappeListSort,
90
+ type FrappeListState,
91
+ } from "./list/listState";
92
+ export {
93
+ createFavoritesStore,
94
+ favoritesKey,
95
+ favoritesStore,
96
+ toggleFavoriteIn,
97
+ useFavorites,
98
+ type FavoritesState,
99
+ type UseFavorites,
100
+ } from "./list/favorites";
101
+ export { FacetRail, type FacetRailOption, type FacetRailProps } from "./list/FacetRail";
102
+ export { RangeFilter, rangeCeiling, type RangeFilterProps } from "./list/RangeFilter";
103
+ export { ShufflePanel, type ShufflePanelProps } from "./list/ShufflePanel";
104
+ export { FacetBadge, type FacetBadgeProps } from "./list/FacetBadge";
105
+ export { ImageWell, type ImageWellProps } from "./list/ImageWell";
106
+ export { RecordCard, type RecordCardBadge, type RecordCardProps } from "./list/RecordCard";
107
+ export { recordTitle, type FrappeRecordLook, type FrappeRecordSlide } from "./list/recordLook";
108
+ export {
109
+ FrappeRecordView,
110
+ type FrappeRecordAction,
111
+ type FrappeRecordBarsSection,
112
+ type FrappeRecordRowsSection,
113
+ type FrappeRecordSection,
114
+ type FrappeRecordTab,
115
+ type FrappeRecordViewProps,
116
+ } from "./FrappeRecordView";
117
+ export { RecordBars } from "./record/RecordBars";
118
+ export {
119
+ FrappeInsights,
120
+ type FrappeInsightsMetric,
121
+ type FrappeInsightsProps,
122
+ } from "./FrappeInsights";
71
123
  export {
72
124
  useConnectionFilters,
73
125
  type ConnectionFiltersResult,