@stackcraftmx/calcita 0.23.0 → 0.25.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 (359) hide show
  1. package/README.md +111 -22
  2. package/cli/projectFiles.js +5 -3
  3. package/cli/templates/project/README.md.tpl +28 -0
  4. package/cli/templates/project/public/manifest.webmanifest.tpl +6 -6
  5. package/cli/templates/project/src/app/AppProviders.jsx.tpl +9 -4
  6. package/cli/templates/project/src/app/appRouter.jsx.tpl +4 -2
  7. package/cli/templates/project/src/app/appSettings.js.tpl +14 -0
  8. package/cli/templates/project/src/core/AppLogo.jsx.tpl +3 -1
  9. package/cli/templates/project/src/core/index.js.tpl +1 -0
  10. package/cli/templates/project/src/core/publicPaths.js.tpl +24 -0
  11. package/cli/templates/project/vite.config.js.tpl +27 -1
  12. package/dist/DataTable/AuditTrailTable.js +5 -3
  13. package/dist/DataTable/AuditTrailTable.js.map +1 -1
  14. package/dist/DataTable/ColumnFilters/MultiSelectColumnFilter.js +2 -1
  15. package/dist/DataTable/ColumnFilters/MultiSelectColumnFilter.js.map +1 -1
  16. package/dist/DataTable/EmptyState.js +2 -2
  17. package/dist/DataTable/EmptyState.js.map +1 -1
  18. package/dist/DataTable/FilterChips.js +2 -2
  19. package/dist/DataTable/FilterChips.js.map +1 -1
  20. package/dist/DataTable/GoToPage.js +4 -3
  21. package/dist/DataTable/GoToPage.js.map +1 -1
  22. package/dist/DataTable/ServerTable.js +153 -83
  23. package/dist/DataTable/ServerTable.js.map +1 -1
  24. package/dist/DataTable/rowSelection.js +61 -0
  25. package/dist/DataTable/rowSelection.js.map +1 -0
  26. package/dist/access/PermissionMatrix.js +3 -2
  27. package/dist/access/PermissionMatrix.js.map +1 -1
  28. package/dist/account/AccountSecuritySection.js +2 -2
  29. package/dist/account/AccountSecuritySection.js.map +1 -1
  30. package/dist/account/ForgotPasswordScreen.js +5 -4
  31. package/dist/account/ForgotPasswordScreen.js.map +1 -1
  32. package/dist/account/ProfileScreen.js +39 -13
  33. package/dist/account/ProfileScreen.js.map +1 -1
  34. package/dist/account/ResetPasswordScreen.js +3 -2
  35. package/dist/account/ResetPasswordScreen.js.map +1 -1
  36. package/dist/account/SignInScreen.js +7 -6
  37. package/dist/account/SignInScreen.js.map +1 -1
  38. package/dist/account/accountConnector.js.map +1 -1
  39. package/dist/account/restAccountConnector.js +2 -1
  40. package/dist/account/restAccountConnector.js.map +1 -1
  41. package/dist/adapters/reactRouterRoutes.js +7 -6
  42. package/dist/adapters/reactRouterRoutes.js.map +1 -1
  43. package/dist/api/createApiClient.js +35 -5
  44. package/dist/api/createApiClient.js.map +1 -1
  45. package/dist/appShell/AppLayout.js +27 -7
  46. package/dist/appShell/AppLayout.js.map +1 -1
  47. package/dist/appShell/AppearanceSettings.js +29 -6
  48. package/dist/appShell/AppearanceSettings.js.map +1 -1
  49. package/dist/appShell/AuthLayout.js +2 -0
  50. package/dist/appShell/AuthLayout.js.map +1 -1
  51. package/dist/appShell/BarActionButton.js +3 -3
  52. package/dist/appShell/BarActionButton.js.map +1 -1
  53. package/dist/appShell/BarActions.js +19 -8
  54. package/dist/appShell/BarActions.js.map +1 -1
  55. package/dist/appShell/BarCapsule.js +19 -4
  56. package/dist/appShell/BarCapsule.js.map +1 -1
  57. package/dist/appShell/BarSearch.js +92 -0
  58. package/dist/appShell/BarSearch.js.map +1 -0
  59. package/dist/appShell/MobileTabBar.js +3 -1
  60. package/dist/appShell/MobileTabBar.js.map +1 -1
  61. package/dist/appShell/shellSizes.js +2 -0
  62. package/dist/appShell/shellSizes.js.map +1 -1
  63. package/dist/auth/PasswordChecklist.js +2 -2
  64. package/dist/auth/PasswordChecklist.js.map +1 -1
  65. package/dist/calendar/EventCalendar.js +16 -5
  66. package/dist/calendar/EventCalendar.js.map +1 -1
  67. package/dist/calendar/EventDetails.js +74 -0
  68. package/dist/calendar/EventDetails.js.map +1 -0
  69. package/dist/calendar/calendarEvents.js +31 -0
  70. package/dist/calendar/calendarEvents.js.map +1 -0
  71. package/dist/calendar.js +8 -1
  72. package/dist/calendar.js.map +1 -1
  73. package/dist/charts.js +10 -1
  74. package/dist/charts.js.map +1 -1
  75. package/dist/datePickers/DateInput.js +3 -2
  76. package/dist/datePickers/DateInput.js.map +1 -1
  77. package/dist/downloads/DownloadManager.js +14 -20
  78. package/dist/downloads/DownloadManager.js.map +1 -1
  79. package/dist/downloads/downloadQueue.js +4 -2
  80. package/dist/downloads/downloadQueue.js.map +1 -1
  81. package/dist/downloads/downloadsMachine.js +4 -1
  82. package/dist/downloads/downloadsMachine.js.map +1 -1
  83. package/dist/downloads/fileTypes.js +22 -0
  84. package/dist/downloads/fileTypes.js.map +1 -0
  85. package/dist/feedback/ConfirmDialog.js +3 -2
  86. package/dist/feedback/ConfirmDialog.js.map +1 -1
  87. package/dist/feedback/ModalWaiting.js +2 -2
  88. package/dist/feedback/ModalWaiting.js.map +1 -1
  89. package/dist/feedback/NewBuildNotice.js +2 -2
  90. package/dist/feedback/NewBuildNotice.js.map +1 -1
  91. package/dist/filepond/FileDropzone.js +5 -3
  92. package/dist/filepond/FileDropzone.js.map +1 -1
  93. package/dist/formatting.js +171 -143
  94. package/dist/formatting.js.map +1 -1
  95. package/dist/forms/FormWizard.js +18 -45
  96. package/dist/forms/FormWizard.js.map +1 -1
  97. package/dist/forms/auth/ChangePasswordForm.js +5 -4
  98. package/dist/forms/auth/ChangePasswordForm.js.map +1 -1
  99. package/dist/forms/auth/ForgotPasswordForm.js +2 -2
  100. package/dist/forms/auth/ForgotPasswordForm.js.map +1 -1
  101. package/dist/forms/auth/SignInForm.js +2 -2
  102. package/dist/forms/auth/SignInForm.js.map +1 -1
  103. package/dist/forms/security/SecondStepForm.js +2 -2
  104. package/dist/forms/security/SecondStepForm.js.map +1 -1
  105. package/dist/forms/security/TwoStepVerificationCard.js +8 -6
  106. package/dist/forms/security/TwoStepVerificationCard.js.map +1 -1
  107. package/dist/hookForm/FormWizard.js +59 -0
  108. package/dist/hookForm/FormWizard.js.map +1 -0
  109. package/dist/inbox/InboxLayout.js +44 -8
  110. package/dist/inbox/InboxLayout.js.map +1 -1
  111. package/dist/inbox/MessageList.js +71 -21
  112. package/dist/inbox/MessageList.js.map +1 -1
  113. package/dist/inbox/MessageView.js +80 -29
  114. package/dist/inbox/MessageView.js.map +1 -1
  115. package/dist/inbox/inboxDates.js +4 -3
  116. package/dist/inbox/inboxDates.js.map +1 -1
  117. package/dist/index.js +157 -133
  118. package/dist/index.js.map +1 -1
  119. package/dist/inputs/CatalogInput.js +8 -4
  120. package/dist/inputs/CatalogInput.js.map +1 -1
  121. package/dist/inputs/ColorInput.js +3 -2
  122. package/dist/inputs/ColorInput.js.map +1 -1
  123. package/dist/inputs/FormSection.js +3 -3
  124. package/dist/inputs/FormSection.js.map +1 -1
  125. package/dist/inputs/NumberInput.js +3 -2
  126. package/dist/inputs/NumberInput.js.map +1 -1
  127. package/dist/inputs/SelectInput.js +29 -11
  128. package/dist/inputs/SelectInput.js.map +1 -1
  129. package/dist/inputs/TextInput.js +6 -2
  130. package/dist/inputs/TextInput.js.map +1 -1
  131. package/dist/inputs/WizardLayout.js +54 -0
  132. package/dist/inputs/WizardLayout.js.map +1 -0
  133. package/dist/kanban/KanbanBoard.js +239 -14
  134. package/dist/kanban/KanbanBoard.js.map +1 -1
  135. package/dist/kanban/kanbanCards.js +19 -0
  136. package/dist/kanban/kanbanCards.js.map +1 -0
  137. package/dist/kanban.js +7 -1
  138. package/dist/kanban.js.map +1 -1
  139. package/dist/locales/en.js +74 -1
  140. package/dist/locales/en.js.map +1 -1
  141. package/dist/locales/es.js +74 -1
  142. package/dist/locales/es.js.map +1 -1
  143. package/dist/maps/MapView.js +28 -8
  144. package/dist/maps/MapView.js.map +1 -1
  145. package/dist/observability/usePublishedBuildWatch.js +4 -3
  146. package/dist/observability/usePublishedBuildWatch.js.map +1 -1
  147. package/dist/pwa/InstallAppSetting.js +6 -5
  148. package/dist/pwa/InstallAppSetting.js.map +1 -1
  149. package/dist/pwa/InstallInstructionsDialog.js +2 -2
  150. package/dist/pwa/InstallInstructionsDialog.js.map +1 -1
  151. package/dist/pwa/InstallPromptBanner.js +15 -9
  152. package/dist/pwa/InstallPromptBanner.js.map +1 -1
  153. package/dist/pwa/useInstallPrompt.js +2 -1
  154. package/dist/pwa/useInstallPrompt.js.map +1 -1
  155. package/dist/react-hook-form.js +6 -4
  156. package/dist/react-hook-form.js.map +1 -1
  157. package/dist/security/ActivityLog.js +4 -3
  158. package/dist/security/ActivityLog.js.map +1 -1
  159. package/dist/security/RecoveryCodesDialog.js +4 -3
  160. package/dist/security/RecoveryCodesDialog.js.map +1 -1
  161. package/dist/security/SessionsCard.js +8 -6
  162. package/dist/security/SessionsCard.js.map +1 -1
  163. package/dist/table.js +2 -0
  164. package/dist/table.js.map +1 -1
  165. package/dist/theme/components/MuiDialog.js +13 -0
  166. package/dist/theme/components/MuiDialog.js.map +1 -0
  167. package/dist/theme/createToolkitTheme.js.map +1 -1
  168. package/dist/theme/toolkitComponents.js +2 -0
  169. package/dist/theme/toolkitComponents.js.map +1 -1
  170. package/dist/toolkit/ComponentTexts.js +13 -0
  171. package/dist/toolkit/ComponentTexts.js.map +1 -0
  172. package/dist/toolkit/ToolkitProvider.js +36 -28
  173. package/dist/toolkit/ToolkitProvider.js.map +1 -1
  174. package/dist/toolkit/browserNavigation.js +19 -20
  175. package/dist/toolkit/browserNavigation.js.map +1 -1
  176. package/dist/toolkit/componentTextsContext.js +15 -0
  177. package/dist/toolkit/componentTextsContext.js.map +1 -0
  178. package/dist/toolkit/hashNavigation.js +40 -0
  179. package/dist/toolkit/hashNavigation.js.map +1 -0
  180. package/dist/toolkit/navigationPaths.js +49 -0
  181. package/dist/toolkit/navigationPaths.js.map +1 -0
  182. package/dist/toolkit/toolkitSettings.js +24 -4
  183. package/dist/toolkit/toolkitSettings.js.map +1 -1
  184. package/dist/toolkit/useFormatters.js +12 -0
  185. package/dist/toolkit/useFormatters.js.map +1 -0
  186. package/dist/toolkit/useToolkitTranslation.js +11 -7
  187. package/dist/toolkit/useToolkitTranslation.js.map +1 -1
  188. package/dist/types/DataTable/AuditTrailTable.d.ts +3 -1
  189. package/dist/types/DataTable/EmptyState.d.ts +7 -2
  190. package/dist/types/DataTable/FilterChips.d.ts +3 -1
  191. package/dist/types/DataTable/GoToPage.d.ts +7 -2
  192. package/dist/types/DataTable/SelectionBar.d.ts +32 -0
  193. package/dist/types/DataTable/ServerTable.d.ts +64 -3
  194. package/dist/types/DataTable/index.d.ts +1 -1
  195. package/dist/types/DataTable/rowSelection.d.ts +113 -0
  196. package/dist/types/access/PermissionMatrix.d.ts +3 -1
  197. package/dist/types/account/AccountSecuritySection.d.ts +3 -1
  198. package/dist/types/account/ForgotPasswordScreen.d.ts +3 -1
  199. package/dist/types/account/ProfileScreen.d.ts +31 -1
  200. package/dist/types/account/ResetPasswordScreen.d.ts +3 -1
  201. package/dist/types/account/SignInScreen.d.ts +3 -1
  202. package/dist/types/account/accountConnector.d.ts +7 -2
  203. package/dist/types/adapters/reactRouterRoutes.d.ts +14 -2
  204. package/dist/types/api/createApiClient.d.ts +29 -1
  205. package/dist/types/appShell/AppLayout.d.ts +11 -1
  206. package/dist/types/appShell/AppearanceSettings.d.ts +8 -1
  207. package/dist/types/appShell/BarActionButton.d.ts +2 -2
  208. package/dist/types/appShell/BarActions.d.ts +6 -1
  209. package/dist/types/appShell/BarCapsule.d.ts +8 -0
  210. package/dist/types/appShell/BarSearch.d.ts +24 -0
  211. package/dist/types/appShell/MobileTabBar.d.ts +4 -1
  212. package/dist/types/appShell/shellSizes.d.ts +1 -0
  213. package/dist/types/auth/PasswordChecklist.d.ts +3 -1
  214. package/dist/types/calendar/EventCalendar.d.ts +18 -1
  215. package/dist/types/calendar/EventDetails.d.ts +36 -0
  216. package/dist/types/calendar/calendarEvents.d.ts +27 -0
  217. package/dist/types/calendar.d.ts +2 -0
  218. package/dist/types/charts.d.ts +4 -0
  219. package/dist/types/datePickers/DateInput.d.ts +3 -1
  220. package/dist/types/downloads/DownloadManager.d.ts +7 -1
  221. package/dist/types/downloads/downloadQueue.d.ts +8 -3
  222. package/dist/types/downloads/fileTypes.d.ts +39 -0
  223. package/dist/types/downloads/index.d.ts +1 -0
  224. package/dist/types/feedback/ConfirmDialog.d.ts +3 -1
  225. package/dist/types/feedback/ModalWaiting.d.ts +7 -2
  226. package/dist/types/feedback/NewBuildNotice.d.ts +3 -1
  227. package/dist/types/filepond/FileDropzone.d.ts +3 -1
  228. package/dist/types/formatting.d.ts +45 -90
  229. package/dist/types/forms/FormWizard.d.ts +3 -1
  230. package/dist/types/forms/auth/ChangePasswordForm.d.ts +3 -1
  231. package/dist/types/forms/auth/ForgotPasswordForm.d.ts +3 -1
  232. package/dist/types/forms/auth/SignInForm.d.ts +3 -1
  233. package/dist/types/forms/security/SecondStepForm.d.ts +3 -1
  234. package/dist/types/forms/security/TwoStepVerificationCard.d.ts +3 -1
  235. package/dist/types/hookForm/FormWizard.d.ts +22 -0
  236. package/dist/types/inbox/InboxLayout.d.ts +14 -2
  237. package/dist/types/inbox/MessageList.d.ts +30 -5
  238. package/dist/types/inbox/MessageView.d.ts +35 -3
  239. package/dist/types/inbox/inboxDates.d.ts +6 -1
  240. package/dist/types/index.d.ts +12 -5
  241. package/dist/types/inputs/CatalogInput.d.ts +9 -5
  242. package/dist/types/inputs/ColorInput.d.ts +3 -1
  243. package/dist/types/inputs/FormSection.d.ts +2 -2
  244. package/dist/types/inputs/NumberInput.d.ts +3 -1
  245. package/dist/types/inputs/SelectInput.d.ts +9 -5
  246. package/dist/types/inputs/TextInput.d.ts +3 -1
  247. package/dist/types/inputs/WizardLayout.d.ts +34 -0
  248. package/dist/types/kanban/KanbanBoard.d.ts +61 -6
  249. package/dist/types/kanban/kanbanCards.d.ts +22 -0
  250. package/dist/types/kanban.d.ts +1 -0
  251. package/dist/types/locales/en.d.ts +77 -0
  252. package/dist/types/locales/es.d.ts +77 -0
  253. package/dist/types/maps/MapView.d.ts +12 -3
  254. package/dist/types/observability/usePublishedBuildWatch.d.ts +3 -1
  255. package/dist/types/pwa/InstallAppSetting.d.ts +7 -1
  256. package/dist/types/pwa/InstallInstructionsDialog.d.ts +3 -1
  257. package/dist/types/pwa/InstallPromptBanner.d.ts +10 -1
  258. package/dist/types/pwa/useInstallPrompt.d.ts +3 -2
  259. package/dist/types/react-hook-form.d.ts +1 -0
  260. package/dist/types/security/ActivityLog.d.ts +3 -1
  261. package/dist/types/security/RecoveryCodesDialog.d.ts +6 -1
  262. package/dist/types/security/SessionsCard.d.ts +3 -1
  263. package/dist/types/table.d.ts +3 -1
  264. package/dist/types/theme/components/MuiDialog.d.ts +9 -0
  265. package/dist/types/toolkit/ComponentTexts.d.ts +11 -0
  266. package/dist/types/toolkit/ToolkitProvider.d.ts +18 -2
  267. package/dist/types/toolkit/browserNavigation.d.ts +23 -28
  268. package/dist/types/toolkit/componentTextsContext.d.ts +20 -0
  269. package/dist/types/toolkit/hashNavigation.d.ts +12 -0
  270. package/dist/types/toolkit/navigationPaths.d.ts +43 -0
  271. package/dist/types/toolkit/toolkitSettings.d.ts +49 -4
  272. package/dist/types/toolkit/useFormatters.d.ts +6 -0
  273. package/dist/types/toolkit/useToolkitTranslation.d.ts +2 -1
  274. package/dist/types/ui/actions/ActionsMenu.d.ts +20 -0
  275. package/dist/types/ui/actions/CopyButton.d.ts +3 -1
  276. package/dist/types/ui/actions/DownloadMenu.d.ts +8 -3
  277. package/dist/types/ui/actions/SecretField.d.ts +5 -1
  278. package/dist/types/ui/actions/SelectionActions.d.ts +39 -0
  279. package/dist/types/ui/filters/DateRangeFilter.d.ts +3 -1
  280. package/dist/types/ui/filters/QuickFilters.d.ts +3 -1
  281. package/dist/types/ui/index.d.ts +1 -1
  282. package/dist/types/ui/labels/tagOf.d.ts +13 -0
  283. package/dist/types/ui/layout/CollapsibleSection.d.ts +4 -1
  284. package/dist/types/ui/layout/ContentDialog.d.ts +3 -1
  285. package/dist/types/ui/layout/ErrorPage.d.ts +14 -1
  286. package/dist/types/ui/layout/FullPageLoader.d.ts +7 -1
  287. package/dist/types/ui/layout/PageHeading.d.ts +3 -1
  288. package/dist/types/ui/metrics/BarList.d.ts +7 -1
  289. package/dist/types/ui/metrics/CalendarHeatmap.d.ts +7 -1
  290. package/dist/types/ui/metrics/ChartTooltip.d.ts +9 -3
  291. package/dist/types/ui/metrics/ColumnChart.d.ts +23 -11
  292. package/dist/types/ui/metrics/LineChart.d.ts +41 -0
  293. package/dist/types/ui/metrics/MetricCard.d.ts +9 -1
  294. package/dist/types/ui/metrics/TableToggle.d.ts +9 -2
  295. package/dist/types/ui/metrics/chartParts.d.ts +112 -0
  296. package/dist/types/ui/navigation/BackButton.d.ts +3 -1
  297. package/dist/types/ui/navigation/ColorSchemeToggle.d.ts +8 -2
  298. package/dist/types/ui/navigation/FontSizeToggle.d.ts +7 -2
  299. package/dist/types/ui/navigation/LanguageToggle.d.ts +8 -3
  300. package/dist/types/ui/navigation/PageBreadcrumbs.d.ts +5 -2
  301. package/dist/types/ui/timeline/GroupedTimeline.d.ts +4 -1
  302. package/dist/types/upload/FileDropzone.d.ts +3 -1
  303. package/dist/ui/actions/ActionsMenu.js +51 -0
  304. package/dist/ui/actions/ActionsMenu.js.map +1 -0
  305. package/dist/ui/actions/CopyButton.js +2 -2
  306. package/dist/ui/actions/CopyButton.js.map +1 -1
  307. package/dist/ui/actions/DownloadMenu.js +11 -12
  308. package/dist/ui/actions/DownloadMenu.js.map +1 -1
  309. package/dist/ui/actions/SecretField.js +8 -4
  310. package/dist/ui/actions/SecretField.js.map +1 -1
  311. package/dist/ui/actions/SelectionActions.js +142 -0
  312. package/dist/ui/actions/SelectionActions.js.map +1 -0
  313. package/dist/ui/filters/DateRangeFilter.js +4 -3
  314. package/dist/ui/filters/DateRangeFilter.js.map +1 -1
  315. package/dist/ui/filters/QuickFilters.js +2 -2
  316. package/dist/ui/filters/QuickFilters.js.map +1 -1
  317. package/dist/ui/labels/tagOf.js +7 -0
  318. package/dist/ui/labels/tagOf.js.map +1 -0
  319. package/dist/ui/layout/CollapsibleSection.js +6 -2
  320. package/dist/ui/layout/CollapsibleSection.js.map +1 -1
  321. package/dist/ui/layout/ContentDialog.js +2 -2
  322. package/dist/ui/layout/ContentDialog.js.map +1 -1
  323. package/dist/ui/layout/ErrorPage.js +21 -7
  324. package/dist/ui/layout/ErrorPage.js.map +1 -1
  325. package/dist/ui/layout/FullPageLoader.js +2 -2
  326. package/dist/ui/layout/FullPageLoader.js.map +1 -1
  327. package/dist/ui/layout/PageHeading.js +2 -2
  328. package/dist/ui/layout/PageHeading.js.map +1 -1
  329. package/dist/ui/metrics/BarList.js +18 -13
  330. package/dist/ui/metrics/BarList.js.map +1 -1
  331. package/dist/ui/metrics/CalendarHeatmap.js +11 -6
  332. package/dist/ui/metrics/CalendarHeatmap.js.map +1 -1
  333. package/dist/ui/metrics/ChartTooltip.js +1 -1
  334. package/dist/ui/metrics/ChartTooltip.js.map +1 -1
  335. package/dist/ui/metrics/ColumnChart.js +59 -63
  336. package/dist/ui/metrics/ColumnChart.js.map +1 -1
  337. package/dist/ui/metrics/LineChart.js +117 -0
  338. package/dist/ui/metrics/LineChart.js.map +1 -0
  339. package/dist/ui/metrics/MetricCard.js +41 -8
  340. package/dist/ui/metrics/MetricCard.js.map +1 -1
  341. package/dist/ui/metrics/TableToggle.js +4 -2
  342. package/dist/ui/metrics/TableToggle.js.map +1 -1
  343. package/dist/ui/metrics/chartParts.js +93 -0
  344. package/dist/ui/metrics/chartParts.js.map +1 -0
  345. package/dist/ui/navigation/BackButton.js +2 -2
  346. package/dist/ui/navigation/BackButton.js.map +1 -1
  347. package/dist/ui/navigation/ColorSchemeToggle.js +6 -3
  348. package/dist/ui/navigation/ColorSchemeToggle.js.map +1 -1
  349. package/dist/ui/navigation/FontSizeToggle.js +3 -2
  350. package/dist/ui/navigation/FontSizeToggle.js.map +1 -1
  351. package/dist/ui/navigation/LanguageToggle.js +40 -19
  352. package/dist/ui/navigation/LanguageToggle.js.map +1 -1
  353. package/dist/ui/navigation/PageBreadcrumbs.js +2 -2
  354. package/dist/ui/navigation/PageBreadcrumbs.js.map +1 -1
  355. package/dist/ui/timeline/GroupedTimeline.js +10 -8
  356. package/dist/ui/timeline/GroupedTimeline.js.map +1 -1
  357. package/dist/upload/FileDropzone.js +5 -3
  358. package/dist/upload/FileDropzone.js.map +1 -1
  359. package/package.json +14 -6
@@ -1,6 +1,10 @@
1
+ import { SELECTION_PHONE_LAYOUT } from '../ui/actions/SelectionActions.js';
2
+ export { SELECTION_PHONE_LAYOUT };
3
+ export type RowSelection = import('./rowSelection.js').RowSelection;
4
+ /** @typedef {import('./rowSelection.js').RowSelection} RowSelection */
1
5
  /**
2
6
  * @param {object} props
3
- * @param {(params: {filters: Record<string, any>, sortOrders: Array<{column: string, direction: 'asc'|'desc'}>, page: number, pageSize: number}, signal: AbortSignal) => Promise<{rows: any[], total: number, facets?: Record<string, Array<{value: any, total: number}>>, capped?: boolean}>} props.fetchPage
7
+ * @param {(params: {filters: Record<string, any>, sortOrders: Array<{column: string, direction: 'asc'|'desc'}>, page: number, pageSize: number}, signal: AbortSignal) => Promise<{rows: any[], total: number, facets?: Record<string, Array<{value: any, total: number}> | number>, capped?: boolean}>} props.fetchPage
4
8
  * page cuenta desde 0; toServerTableParams lo convierte a la query del API
5
9
  * @param {string} props.queryKey cambia cuando cambia el CONJUNTO (no los filtros): dispara recarga
6
10
  * @param {boolean} [props.enabled] false mientras la sección está oculta: una tabla que nadie ve no consulta
@@ -48,8 +52,32 @@
48
52
  * @param {string} [props.ariaLabel] nombre de la tabla para lectores de pantalla
49
53
  * @param {string} [props.fixedColumn] campo de la columna que se queda pegada a la izquierda al deslizar de lado (como
50
54
  * fixedSelectColumn de mui-datatables)
55
+ * @param {Array<{key: string, label: string, icon?: import('react').ReactNode, color?: 'inherit'|'primary'|'secondary'|'error'|'info'|'success'|'warning', isDisabled?: (selection: RowSelection) => boolean, onClick: (selection: RowSelection, helpers: {clearSelection: () => void, refresh: () => void}) => unknown}>} [props.selectionActions]
56
+ * con ellas cada renglón lleva su casilla y, al elegir, sale la barra de los elegidos con estas acciones. label ya
57
+ * traducido; onClick recibe la selección (con isAllMatching mande `filters`, no `ids`) y cómo quitar la selección y volver
58
+ * a consultar después de actuar
59
+ * @param {(row: any) => boolean} [props.isRowSelectable] cuáles renglones se pueden elegir (un pedido entregado no se cancela)
60
+ * @param {boolean} [props.allowSelectAllMatching] la casilla de arriba elige todos los que coinciden (la acción recibe los
61
+ * filtros) y el aviso deja quedarse solo con la página; por omisión sí. false: la casilla elige la página y nunca se
62
+ * ofrece «todos»
63
+ * @param {(selection: RowSelection) => void} [props.onSelectionChange] cada que cambia la selección; también enciende las
64
+ * casillas sin barra de acciones (la pantalla pinta las suyas)
65
+ * @param {'top'|'split'} [props.selectionPhoneLayout] SELECTION_PHONE_LAYOUT: en el teléfono con vidrio o minimalista, todo
66
+ * arriba (por omisión) o el conteo arriba y las acciones abajo. Sin vidrio, en el renglón como en escritorio
67
+ * @param {(request: {filters: Record<string, any>, sortOrders: Array<{column: string, direction: 'asc'|'desc'}>, page: number, pageSize: number}) => void} [props.onQueryChange]
68
+ * cada que cambia lo que pide la tabla (un filtro, el orden, la página), antes de consultar: para la lógica de negocio que
69
+ * depende de lo filtrado («si eligió Cancelados, enseñe el motivo»)
70
+ * @param {(result: {rows: any[], total: number, facets: object, capped: boolean}) => void} [props.onLoaded] cada que llega una
71
+ * página del servidor
72
+ * @param {(error: unknown) => void} [props.onLoadError] cuando la consulta falla (la tabla ya enseña su aviso con «Reintentar»)
73
+ * @param {object} [props.gridProps] lo demás del DataGrid de MUI, sobre todo sus eventos (onRowClick, onRowDoubleClick,
74
+ * onCellKeyDown…). OJO: lo que la tabla controla (paginar, ordenar y filtrar en el servidor, el alto, la selección) no se
75
+ * reemplaza desde aquí: para eso están sus props
76
+ * @param {object} [props.texts] los textos de la tabla que cambian, con la forma de `table` en los textos del paquete
77
+ * (src/locales/es.js), ya en el idioma de la pantalla: {selection: {clear: 'Deseleccionar'}, empty: {filtered: '…'}}.
78
+ * También les llegan a sus filtros de columna, sus chips y su barra de elegidos
51
79
  */
52
- export default function ServerTable({ fetchPage, queryKey, enabled, columns, filterKinds, filterDefaults, chipConfig, quickFilters, searchField, searchPlaceholder, searchInBar, collapseSearchInBar, emptyLabel, countLabel, pageSizeOptions, defaultPageSize, getRowId, prefix, refreshToken, footer, toolbarExtra, header, beforeQuickFilters, columnGroupingModel, getRowClassName, isRowVisible, hideFooterWhenAllRowsFit, showGoToPage, striped, getRowHeight, gridSx, maxGridHeight, ariaLabel, fixedColumn, }: {
80
+ export default function ServerTable({ fetchPage, queryKey, enabled, columns, filterKinds, filterDefaults, chipConfig, quickFilters, searchField, searchPlaceholder, searchInBar, collapseSearchInBar, emptyLabel, countLabel, pageSizeOptions, defaultPageSize, getRowId, prefix, refreshToken, footer, toolbarExtra, header, beforeQuickFilters, columnGroupingModel, getRowClassName, isRowVisible, hideFooterWhenAllRowsFit, showGoToPage, striped, getRowHeight, gridSx, maxGridHeight, ariaLabel, fixedColumn, selectionActions, isRowSelectable, allowSelectAllMatching, onSelectionChange, selectionPhoneLayout, onQueryChange, onLoaded, onLoadError, gridProps, texts, }: {
53
81
  fetchPage: (params: {
54
82
  filters: Record<string, any>;
55
83
  sortOrders: Array<{
@@ -64,7 +92,7 @@ export default function ServerTable({ fetchPage, queryKey, enabled, columns, fil
64
92
  facets?: Record<string, Array<{
65
93
  value: any;
66
94
  total: number;
67
- }>>;
95
+ }> | number>;
68
96
  capped?: boolean;
69
97
  }>;
70
98
  queryKey: string;
@@ -107,4 +135,37 @@ export default function ServerTable({ fetchPage, queryKey, enabled, columns, fil
107
135
  maxGridHeight?: number;
108
136
  ariaLabel?: string;
109
137
  fixedColumn?: string;
138
+ selectionActions?: Array<{
139
+ key: string;
140
+ label: string;
141
+ icon?: import('react').ReactNode;
142
+ color?: 'inherit' | 'primary' | 'secondary' | 'error' | 'info' | 'success' | 'warning';
143
+ isDisabled?: (selection: RowSelection) => boolean;
144
+ onClick: (selection: RowSelection, helpers: {
145
+ clearSelection: () => void;
146
+ refresh: () => void;
147
+ }) => unknown;
148
+ }>;
149
+ isRowSelectable?: (row: any) => boolean;
150
+ allowSelectAllMatching?: boolean;
151
+ onSelectionChange?: (selection: RowSelection) => void;
152
+ selectionPhoneLayout?: 'top' | 'split';
153
+ onQueryChange?: (request: {
154
+ filters: Record<string, any>;
155
+ sortOrders: Array<{
156
+ column: string;
157
+ direction: 'asc' | 'desc';
158
+ }>;
159
+ page: number;
160
+ pageSize: number;
161
+ }) => void;
162
+ onLoaded?: (result: {
163
+ rows: any[];
164
+ total: number;
165
+ facets: object;
166
+ capped: boolean;
167
+ }) => void;
168
+ onLoadError?: (error: unknown) => void;
169
+ gridProps?: object;
170
+ texts?: object;
110
171
  }): import("react").JSX.Element;
@@ -3,7 +3,7 @@ export { default as AuditTrailTable } from './AuditTrailTable.js';
3
3
  export { default as EmptyState } from './EmptyState.js';
4
4
  export { default as FilterChips } from './FilterChips.js';
5
5
  export { default as GoToPage } from './GoToPage.js';
6
- export { default as ServerTable } from './ServerTable.js';
6
+ export { SELECTION_PHONE_LAYOUT, default as ServerTable } from './ServerTable.js';
7
7
  export { buildChipConfig } from './buildChipConfig.js';
8
8
  export { detailColumn, facetColumn, textColumn } from './columns.js';
9
9
  export { TableFilterContext, useTableFilter } from './filterContext.js';
@@ -0,0 +1,113 @@
1
+ export type RowSelection = {
2
+ /**
3
+ * los ids elegidos; vacío con isAllMatching
4
+ */
5
+ ids: Array<string | number>;
6
+ /**
7
+ * los renglones elegidos tal como se vieron; vacío con isAllMatching
8
+ */
9
+ rows: any[];
10
+ /**
11
+ * cuántos van: los elegidos o, con isAllMatching, el total de la tabla
12
+ */
13
+ count: number;
14
+ /**
15
+ * true = todos los que coinciden con `filters` (mande los filtros, no los ids)
16
+ */
17
+ isAllMatching: boolean;
18
+ /**
19
+ * con isAllMatching, el total es «al menos esto» (el servidor cuenta hasta un tope)
20
+ */
21
+ isCapped: boolean;
22
+ /**
23
+ * los filtros puestos en la tabla
24
+ */
25
+ filters: Record<string, any>;
26
+ };
27
+ /**
28
+ * Lo que recibe cada acción de los elegidos (y onSelectionChange).
29
+ *
30
+ * @typedef {object} RowSelection
31
+ * @property {Array<string|number>} ids los ids elegidos; vacío con isAllMatching
32
+ * @property {any[]} rows los renglones elegidos tal como se vieron; vacío con isAllMatching
33
+ * @property {number} count cuántos van: los elegidos o, con isAllMatching, el total de la tabla
34
+ * @property {boolean} isAllMatching true = todos los que coinciden con `filters` (mande los filtros, no los ids)
35
+ * @property {boolean} isCapped con isAllMatching, el total es «al menos esto» (el servidor cuenta hasta un tope)
36
+ * @property {Record<string, any>} filters los filtros puestos en la tabla
37
+ */
38
+ /** Nada elegido. */
39
+ export declare const EMPTY_ROW_SELECTION: Readonly<{
40
+ rowsById: Map<any, any>;
41
+ isAllMatching: false;
42
+ }>;
43
+ /**
44
+ * Lo que reciben las acciones, a partir del estado de la tabla.
45
+ *
46
+ * @param {{rowsById: Map<string|number, any>, isAllMatching: boolean}} selection
47
+ * @param {{total: number, capped?: boolean, filters: Record<string, any>}} table
48
+ * @returns {RowSelection}
49
+ */
50
+ export declare function rowSelectionOf(selection: {
51
+ rowsById: Map<string | number, any>;
52
+ isAllMatching: boolean;
53
+ }, { total, capped, filters }: {
54
+ total: number;
55
+ capped?: boolean;
56
+ filters: Record<string, any>;
57
+ }): RowSelection;
58
+ /**
59
+ * Los ids que el DataGrid debe pintar marcados en la página que se ve. Con «todos los que coinciden», todos los de la
60
+ * página que se pueden elegir.
61
+ *
62
+ * @param {{rowsById: Map<string|number, any>, isAllMatching: boolean}} selection
63
+ * @param {Array<string|number>} selectablePageIds los ids de la página que se pueden elegir
64
+ * @returns {Set<string|number>}
65
+ */
66
+ export declare function checkedIdsOf(selection: {
67
+ rowsById: Map<string | number, any>;
68
+ isAllMatching: boolean;
69
+ }, selectablePageIds: Array<string | number>): Set<string | number>;
70
+ /**
71
+ * El DataGrid avisó qué ids quedaron marcados (por una casilla de renglón o la de la página).
72
+ *
73
+ * Con «todos los que coinciden», desmarcar uno sale de ese modo y se quedan elegidos los de esta página que siguen
74
+ * marcados (lo mismo que hace Gmail).
75
+ *
76
+ * Con allMatchingOnWholePage, la página completa elegida DE UN GOLPE (la casilla de arriba, o un rango con Shift que la
77
+ * cubre) elige todos los que coinciden. OJO: se decide por lo que cambió y no por el motivo que manda el DataGrid, que usa
78
+ * el mismo para la casilla de arriba y para un rango. Llenar la página picando uno por uno no: ahí el aviso lo ofrece. Si
79
+ * no hay más renglones que los de la página, se quedan los picados (la acción recibe ids, que es lo más claro).
80
+ *
81
+ * @param {{rowsById: Map<string|number, any>, isAllMatching: boolean}} selection
82
+ * @param {Set<string|number>} checkedIds lo que el DataGrid trae marcado (incluye los de otras páginas)
83
+ * @param {Map<string|number, any>} pageRowsById los renglones de la página que se ve, por id
84
+ * @param {Array<string|number>} selectablePageIds los ids de la página que se pueden elegir
85
+ * @param {{allMatchingOnWholePage?: boolean, total?: number, capped?: boolean}} [options]
86
+ * @returns {{rowsById: Map<string|number, any>, isAllMatching: boolean}}
87
+ */
88
+ export declare function selectionAfterCheck(selection: {
89
+ rowsById: Map<string | number, any>;
90
+ isAllMatching: boolean;
91
+ }, checkedIds: Set<string | number>, pageRowsById: Map<string | number, any>, selectablePageIds: Array<string | number>, { allMatchingOnWholePage, total, capped }?: {
92
+ allMatchingOnWholePage?: boolean;
93
+ total?: number;
94
+ capped?: boolean;
95
+ }): {
96
+ rowsById: Map<string | number, any>;
97
+ isAllMatching: boolean;
98
+ };
99
+ /**
100
+ * ¿Se le ofrece «Elegir los N que coinciden»? Cuando ya eligió toda la página y hay más renglones que esos.
101
+ *
102
+ * @param {{rowsById: Map<string|number, any>, isAllMatching: boolean}} selection
103
+ * @param {Array<string|number>} selectablePageIds
104
+ * @param {{total: number, capped?: boolean}} table
105
+ * @returns {boolean}
106
+ */
107
+ export declare function canSelectAllMatching(selection: {
108
+ rowsById: Map<string | number, any>;
109
+ isAllMatching: boolean;
110
+ }, selectablePageIds: Array<string | number>, { total, capped }: {
111
+ total: number;
112
+ capped?: boolean;
113
+ }): boolean;
@@ -4,8 +4,9 @@
4
4
  * @param {string[]} props.value los permisos del perfil
5
5
  * @param {(value: string[]) => void} [props.onChange] sin ella, o con readOnly, solo se ven
6
6
  * @param {boolean} [props.readOnly] un perfil que no se puede cambiar (el de administración)
7
+ * @param {object} [props.texts] los textos que cambian, con la forma de `access` en los textos del paquete
7
8
  */
8
- export default function PermissionMatrix({ groups, value, onChange, readOnly }: {
9
+ export default function PermissionMatrix({ groups, value, onChange, readOnly, texts }: {
9
10
  groups: Array<{
10
11
  key: string;
11
12
  label: string;
@@ -18,4 +19,5 @@ export default function PermissionMatrix({ groups, value, onChange, readOnly }:
18
19
  value: string[];
19
20
  onChange?: (value: string[]) => void;
20
21
  readOnly?: boolean;
22
+ texts?: object;
21
23
  }): import("react").JSX.Element;
@@ -1,7 +1,9 @@
1
1
  /**
2
2
  * @param {object} props
3
3
  * @param {boolean} [props.showPasswordChange] por omisión sí
4
+ * @param {object} [props.texts] los textos que cambian, con la forma de `account` en los textos del paquete
4
5
  */
5
- export default function AccountSecuritySection({ showPasswordChange }: {
6
+ export default function AccountSecuritySection({ showPasswordChange, texts }: {
6
7
  showPasswordChange?: boolean;
8
+ texts?: object;
7
9
  }): import("react").JSX.Element;
@@ -5,11 +5,13 @@
5
5
  * @param {string} [props.brandName]
6
6
  * @param {boolean} [props.showLanguageToggle]
7
7
  * @param {boolean} [props.showColorSchemeToggle]
8
+ * @param {object} [props.texts] los textos que cambian, con la forma de `auth` en los textos del paquete
8
9
  */
9
- export default function ForgotPasswordScreen({ signInPath, logo, brandName, showLanguageToggle, showColorSchemeToggle }: {
10
+ export default function ForgotPasswordScreen({ signInPath, logo, brandName, showLanguageToggle, showColorSchemeToggle, texts }: {
10
11
  signInPath?: string;
11
12
  logo?: import('react').ReactNode;
12
13
  brandName?: string;
13
14
  showLanguageToggle?: boolean;
14
15
  showColorSchemeToggle?: boolean;
16
+ texts?: object;
15
17
  }): import("react").JSX.Element;
@@ -4,10 +4,40 @@ export declare const PROFILE_TAB: Readonly<{
4
4
  security: "security";
5
5
  preferences: "preferences";
6
6
  }>;
7
+ export type AccountUser = import('./accountConnector.js').AccountUser;
8
+ /** @typedef {import('./accountConnector.js').AccountUser} AccountUser */
7
9
  /**
8
10
  * @param {object} props
9
11
  * @param {boolean} [props.showColorScheme] el ajuste de claro u oscuro en Preferencias; sin modo oscuro, false
12
+ * @param {{initialValues?: (user: AccountUser & Record<string, any>) => Record<string, any>, rules?: Record<string, any>, fields: import('react').ReactNode}} [props.extraFields]
13
+ * campos propios en «Sus datos», debajo del teléfono: sus valores de inicio salen del usuario de la sesión (lo que su
14
+ * conector ponga en session.user), sus reglas de yup y sus campos (FormTextField, FormSelectField… de /forms). Al guardar
15
+ * viajan a connector.updateProfile junto con name y phone
16
+ * @param {Array<{key: string, label: string, content: import('react').ReactNode}>} [props.extraTabs] pestañas propias,
17
+ * después de las de la casa; label ya traducido
18
+ * @param {Array<'data'|'security'|'preferences'>} [props.hiddenTabs] pestañas de la casa que no se ven (PROFILE_TAB)
19
+ * @param {(tab: string) => void} [props.onTabChange] cada que se cambia de pestaña
20
+ * @param {(saved: {values: Record<string, any>, response: unknown}) => void} [props.onProfileSaved] después de guardar «Sus datos»
21
+ * @param {object} [props.texts] los textos que cambian, con la forma de `account` en los textos del paquete:
22
+ * {profile: {tabs: {data: 'Mis datos'}}}
10
23
  */
11
- export default function ProfileScreen({ showColorScheme }: {
24
+ export default function ProfileScreen({ showColorScheme, extraFields, extraTabs, hiddenTabs, onTabChange, onProfileSaved, texts, }: {
12
25
  showColorScheme?: boolean;
26
+ extraFields?: {
27
+ initialValues?: (user: AccountUser & Record<string, any>) => Record<string, any>;
28
+ rules?: Record<string, any>;
29
+ fields: import('react').ReactNode;
30
+ };
31
+ extraTabs?: Array<{
32
+ key: string;
33
+ label: string;
34
+ content: import('react').ReactNode;
35
+ }>;
36
+ hiddenTabs?: Array<'data' | 'security' | 'preferences'>;
37
+ onTabChange?: (tab: string) => void;
38
+ onProfileSaved?: (saved: {
39
+ values: Record<string, any>;
40
+ response: unknown;
41
+ }) => void;
42
+ texts?: object;
13
43
  }): import("react").JSX.Element | null;
@@ -7,8 +7,9 @@
7
7
  * @param {string} [props.brandName]
8
8
  * @param {boolean} [props.showLanguageToggle]
9
9
  * @param {boolean} [props.showColorSchemeToggle]
10
+ * @param {object} [props.texts] los textos que cambian, con la forma de `account` en los textos del paquete
10
11
  */
11
- export default function ResetPasswordScreen({ signInPath, forgotPasswordPath, tokenParam, logo, brandName, showLanguageToggle, showColorSchemeToggle, }: {
12
+ export default function ResetPasswordScreen({ signInPath, forgotPasswordPath, tokenParam, logo, brandName, showLanguageToggle, showColorSchemeToggle, texts, }: {
12
13
  signInPath: string;
13
14
  forgotPasswordPath?: string;
14
15
  tokenParam?: string;
@@ -16,4 +17,5 @@ export default function ResetPasswordScreen({ signInPath, forgotPasswordPath, to
16
17
  brandName?: string;
17
18
  showLanguageToggle?: boolean;
18
19
  showColorSchemeToggle?: boolean;
20
+ texts?: object;
19
21
  }): import("react").JSX.Element;
@@ -7,8 +7,9 @@
7
7
  * @param {import('react').ReactNode | ((helpers: {signIn: (credentials: {email: string, password: string, remember?: boolean}) => Promise<void>}) => import('react').ReactNode)} [props.footer]
8
8
  * @param {boolean} [props.showLanguageToggle] por omisión sí
9
9
  * @param {boolean} [props.showColorSchemeToggle] por omisión sí
10
+ * @param {object} [props.texts] los textos que cambian, con la forma de `auth` en los textos del paquete
10
11
  */
11
- export default function SignInScreen({ homePath, forgotPasswordPath, logo, brandName, footer, showLanguageToggle, showColorSchemeToggle }: {
12
+ export default function SignInScreen({ homePath, forgotPasswordPath, logo, brandName, footer, showLanguageToggle, showColorSchemeToggle, texts }: {
12
13
  homePath?: string;
13
14
  forgotPasswordPath?: string;
14
15
  logo?: import('react').ReactNode;
@@ -22,4 +23,5 @@ export default function SignInScreen({ homePath, forgotPasswordPath, logo, brand
22
23
  }) => import('react').ReactNode);
23
24
  showLanguageToggle?: boolean;
24
25
  showColorSchemeToggle?: boolean;
26
+ texts?: object;
25
27
  }): import("react").JSX.Element | null;
@@ -113,10 +113,14 @@ export type AccountConnector = {
113
113
  token: string;
114
114
  newPassword: string;
115
115
  }) => Promise<void>;
116
+ /**
117
+ * name, phone y
118
+ * los campos propios de ProfileScreen (extraFields)
119
+ */
116
120
  updateProfile: (input: {
117
121
  name: string;
118
122
  phone: string;
119
- }) => Promise<{
123
+ } & Record<string, any>) => Promise<{
120
124
  message?: string;
121
125
  } | void>;
122
126
  changePassword: (input: {
@@ -236,7 +240,8 @@ export type AccountConnector = {
236
240
  * @property {() => Promise<void>} signOut
237
241
  * @property {(input: {email: string}) => Promise<void>} requestPasswordReset contesta igual exista o no el correo
238
242
  * @property {(input: {token: string, newPassword: string}) => Promise<void>} resetPassword desde el enlace del correo
239
- * @property {(input: {name: string, phone: string}) => Promise<{message?: string}|void>} updateProfile
243
+ * @property {(input: {name: string, phone: string} & Record<string, any>) => Promise<{message?: string}|void>} updateProfile name, phone y
244
+ * los campos propios de ProfileScreen (extraFields)
240
245
  * @property {(input: {currentPassword?: string, newPassword: string}) => Promise<void>} changePassword
241
246
  * @property {() => Promise<AccountSecurity>} loadSecurity
242
247
  * @property {() => Promise<{secret: string, qrImageUrl?: string|null}>} startTotp una clave nueva (todavía sin activar)
@@ -3,9 +3,13 @@
3
3
  *
4
4
  * @param {object|undefined} access la regla (accessRules.js); sin ella, el grupo es de todos
5
5
  * @param {object[]} routes las rutas del módulo
6
+ * @param {{fallback?: import('react').ReactNode}} [options] fallback: lo que ve quien no tiene permiso; por omisión la página
7
+ * de «sin permiso» de la casa (con ErrorPage y sus props se arma una propia: un botón para pedir acceso)
6
8
  * @returns {object} la ruta de react-router
7
9
  */
8
- export declare function withAccess(access: object | undefined, routes: object[]): object;
10
+ export declare function withAccess(access: object | undefined, routes: object[], { fallback }?: {
11
+ fallback?: import('react').ReactNode;
12
+ }): object;
9
13
  /**
10
14
  * ¿Se está descargando la pantalla siguiente?
11
15
  *
@@ -26,5 +30,13 @@ export declare function withChunkRecovery(routes: object[]): object[];
26
30
  * nuestro lado». Las dos últimas con su botón para recargar.
27
31
  *
28
32
  * createBrowserRouter([{path: '/', element: <App />, ErrorBoundary: RouteErrorScreen, children: [...]}])
33
+ *
34
+ * Con props (como errorElement) se extiende igual que ErrorPage, y onError recibe lo que tronó (para Sentry o su aviso):
35
+ * {errorElement: <RouteErrorScreen onError={(error) => reportError(error)} extraActions={<SupportButton />} />}
36
+ *
37
+ * @param {object} [props] las de ErrorPage (extraActions, actions, children, icon, homePath, onGoHome, texts) y:
38
+ * @param {(error: unknown, kind: string) => void} [props.onError] cada error que llega aquí, con su tipo (ERROR_PAGE_KIND)
29
39
  */
30
- export declare function RouteErrorScreen(): import("react").JSX.Element;
40
+ export declare function RouteErrorScreen({ onError, ...errorPageProps }?: {
41
+ onError?: (error: unknown, kind: string) => void;
42
+ }): import("react").JSX.Element;
@@ -126,10 +126,19 @@ export type ApiClient = {
126
126
  * {refreshPath: '/auth/csrf-token'}; por omisión la cookie XSRF-TOKEN y el header X-XSRF-TOKEN
127
127
  * @param {number} [options.timeoutMilliseconds] el tiempo máximo de una consulta (0 = sin límite); por omisión 60 s
128
128
  * @param {(error: ApiError) => void} [options.onUnauthenticated] qué hacer con un 401 (normalmente ir a iniciar sesión)
129
+ * @param {(request: {method: string, url: string}) => void} [options.onRequest] cada petición, al salir
130
+ * @param {(response: {method: string, url: string, status: number, durationMilliseconds: number}) => void} [options.onResponse]
131
+ * cada respuesta, buena o mala, al llegar
132
+ * @param {(error: ApiError, request: {method: string, url: string}) => void} [options.onError] cada error (sin red, 4xx, 5xx,
133
+ * una respuesta que no es JSON), en un solo lugar: Sentry, un aviso propio. Cancelar no es error
134
+ * @param {(body: any, response: Response) => object|null} [options.toProblem] el error de un backend que no contesta en
135
+ * RFC 9457, a esa forma: (body) => ({title: body.message, errors: body.errors}). Por omisión el cuerpo tal cual
136
+ * @param {(body: any, request: {method: string, url: string}) => any} [options.mapResponse] la respuesta buena de un backend
137
+ * que la envuelve: (body) => body.data. Por omisión tal cual
129
138
  * @param {typeof fetch} [options.fetch] para un servidor de mentira o para las pruebas; por omisión el del navegador
130
139
  * @returns {ApiClient}
131
140
  */
132
- export declare function createApiClient({ baseUrl, credentials, getToken, headers: commonHeaders, publishedBuildHeader, csrf, timeoutMilliseconds: defaultTimeoutMilliseconds, onUnauthenticated, fetch: fetchImplementation, }?: {
141
+ export declare function createApiClient({ baseUrl, credentials, getToken, headers: commonHeaders, publishedBuildHeader, csrf, timeoutMilliseconds: defaultTimeoutMilliseconds, onUnauthenticated, onRequest, onResponse, onError, toProblem, mapResponse, fetch: fetchImplementation, }?: {
133
142
  baseUrl?: string;
134
143
  credentials?: RequestCredentials;
135
144
  getToken?: () => string | null | undefined;
@@ -142,5 +151,24 @@ export declare function createApiClient({ baseUrl, credentials, getToken, header
142
151
  } | null;
143
152
  timeoutMilliseconds?: number;
144
153
  onUnauthenticated?: (error: ApiError) => void;
154
+ onRequest?: (request: {
155
+ method: string;
156
+ url: string;
157
+ }) => void;
158
+ onResponse?: (response: {
159
+ method: string;
160
+ url: string;
161
+ status: number;
162
+ durationMilliseconds: number;
163
+ }) => void;
164
+ onError?: (error: ApiError, request: {
165
+ method: string;
166
+ url: string;
167
+ }) => void;
168
+ toProblem?: (body: any, response: Response) => object | null;
169
+ mapResponse?: (body: any, request: {
170
+ method: string;
171
+ url: string;
172
+ }) => any;
145
173
  fetch?: typeof fetch;
146
174
  }): ApiClient;
@@ -31,9 +31,15 @@ export declare const MENU_POSITION: Readonly<{
31
31
  * @param {boolean} [props.minimizeTabBarOnScroll] en el teléfono con vidrio, la barra de pestañas se encoge al leer hacia
32
32
  * abajo y regresa al subir (como iOS 26); por omisión sí
33
33
  * @param {number|string} [props.contentMaxWidth] por omisión 1400
34
+ * @param {(collapsed: boolean) => void} [props.onMenuCollapse] la persona encogió (true) o abrió (false) el menú lateral
35
+ * @param {(isOpen: boolean) => void} [props.onMobileMenuChange] se abrió o se cerró el menú del teléfono (el cajón)
36
+ * @param {(keys: string[]|null) => void} [props.onMobileTabsChange] la persona eligió sus pestañas del teléfono (las llaves
37
+ * de menuItemKeyOf; null: regresó a las de omisión). Se recuerdan en el navegador; con esto el proyecto las puede guardar
38
+ * en su servidor
39
+ * @param {object} [props.texts] los textos que cambian, con la forma de `layout` en los textos del paquete (para todo el marco)
34
40
  * @param {import('react').ReactNode} props.children el contenido
35
41
  */
36
- export declare const AppLayout: ({ logo, brandName, brandCaption, homePath, menuItems, menuPosition, user, profilePath, accountMenuItems, onSignOut, isSigningOut, headerActions, accountSettings, menuBadges, sidebarFooter, showFontSizeToggle, showLanguageToggle, showColorSchemeToggle, ribbons, isNavigating, defaultCollapsed, minimizeTabBarOnScroll, contentMaxWidth, children, }: {
42
+ export declare const AppLayout: ({ logo, brandName, brandCaption, homePath, menuItems, menuPosition, user, profilePath, accountMenuItems, onSignOut, isSigningOut, headerActions, accountSettings, menuBadges, sidebarFooter, showFontSizeToggle, showLanguageToggle, showColorSchemeToggle, ribbons, isNavigating, defaultCollapsed, minimizeTabBarOnScroll, contentMaxWidth, onMenuCollapse, onMobileMenuChange, onMobileTabsChange, texts, children, }: {
37
43
  logo?: import('react').ReactNode;
38
44
  brandName?: string;
39
45
  brandCaption?: string;
@@ -62,5 +68,9 @@ export declare const AppLayout: ({ logo, brandName, brandCaption, homePath, menu
62
68
  defaultCollapsed?: boolean;
63
69
  minimizeTabBarOnScroll?: boolean;
64
70
  contentMaxWidth?: number | string;
71
+ onMenuCollapse?: (collapsed: boolean) => void;
72
+ onMobileMenuChange?: (isOpen: boolean) => void;
73
+ onMobileTabsChange?: (keys: string[] | null) => void;
74
+ texts?: object;
65
75
  children: import('react').ReactNode;
66
76
  }) => import("react").JSX.Element;
@@ -26,9 +26,16 @@ export declare function SettingSection({ label, value, options, onChange }: {
26
26
  * @param {boolean} [props.showFontSize] por omisión sí
27
27
  * @param {boolean} [props.showLanguage] por omisión sí
28
28
  * @param {boolean} [props.showColorScheme] por omisión sí
29
+ * @param {(level: string) => void} [props.onFontSizeChange] la persona eligió otro tamaño de letra (para guardarlo en su
30
+ * servidor; el idioma ya sale por onLanguageChange de ToolkitProvider)
31
+ * @param {(mode: 'light'|'dark'|'system') => void} [props.onColorSchemeChange] la persona eligió otro modo
32
+ * @param {object} [props.texts] los textos que cambian, con la forma de `layout` en los textos del paquete
29
33
  */
30
- export default function AppearanceSettings({ showFontSize, showLanguage, showColorScheme }: {
34
+ export default function AppearanceSettings({ showFontSize, showLanguage, showColorScheme, onFontSizeChange, onColorSchemeChange, texts, }: {
31
35
  showFontSize?: boolean;
32
36
  showLanguage?: boolean;
33
37
  showColorScheme?: boolean;
38
+ onFontSizeChange?: (level: string) => void;
39
+ onColorSchemeChange?: (mode: 'light' | 'dark' | 'system') => void;
40
+ texts?: object;
34
41
  }): import("react").JSX.Element[];
@@ -1,14 +1,14 @@
1
1
  /**
2
2
  * @param {object} props
3
3
  * @param {string} props.label el nombre de la acción, ya traducido: «Agregar sucursal»
4
- * @param {import('react').ReactNode} props.icon el ícono (<AddRoundedIcon />)
4
+ * @param {import('react').ReactNode} [props.icon] el ícono (<AddRoundedIcon />); sin él, se ve su texto
5
5
  * @param {(event: object) => void} [props.onClick]
6
6
  * @param {boolean} [props.disabled]
7
7
  * @param {'inherit'|'primary'|'secondary'|'success'|'error'|'info'|'warning'} [props.color] por omisión primary
8
8
  */
9
9
  export default function BarActionButton({ label, icon, onClick, disabled, color, ...buttonProps }: {
10
10
  label: string;
11
- icon: import('react').ReactNode;
11
+ icon?: import('react').ReactNode;
12
12
  onClick?: (event: object) => void;
13
13
  disabled?: boolean;
14
14
  color?: 'inherit' | 'primary' | 'secondary' | 'success' | 'error' | 'info' | 'warning';
@@ -7,12 +7,17 @@
7
7
  * grupo, en la franja)
8
8
  * @param {object|Function|Array} [props.inlineSx] estilos de la cápsula cuando se queda en la pantalla
9
9
  * @param {boolean} [props.bare] sin cápsula alrededor: lo de adentro ya es una (un buscador)
10
+ * @param {boolean} [props.exclusive] en el teléfono, mientras se ve, es lo único del renglón flotante (con los demás grupos
11
+ * exclusivos): los otros se esconden, como el modo de edición del iPhone deja solo lo de lo elegido. Lo usa SelectionActions
12
+ * @param {object} [props.texts] los textos que cambian, con la forma de `layout` en los textos del paquete
10
13
  */
11
- export default function BarActions({ children, label, order, sx, inlineSx, bare }: {
14
+ export default function BarActions({ children, label, order, sx, inlineSx, bare, exclusive, texts }: {
12
15
  children: import('react').ReactNode;
13
16
  label?: string;
14
17
  order?: number;
15
18
  sx?: object | Function | any[];
16
19
  inlineSx?: object | Function | any[];
17
20
  bare?: boolean;
21
+ exclusive?: boolean;
22
+ texts?: object;
18
23
  }): import("react").JSX.Element;
@@ -1,4 +1,12 @@
1
1
  export declare const BAR_CAPSULE_HEIGHT_PIXELS = 48;
2
+ /**
3
+ * Los botones de adentro de un solo color y sin relleno, borde ni sombra (la regla de la barra con vidrio). La usan también
4
+ * la franja (BarActions) y lo que se ponga junto a la barra.
5
+ *
6
+ * @param {string} color el del texto de la barra ('inherit' en la franja)
7
+ * @returns {object} estilos para el sx del contenedor
8
+ */
9
+ export declare function monochromeButtonsSxOf(color: string): object;
2
10
  /**
3
11
  * Lo demás va al div de la cápsula: aria-label (el nombre del grupo para quien usa lector de pantalla), id, onClick…
4
12
  * role va por omisión en 'group' (lo que se agrupa se anuncia junto).
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @param {object} props
3
+ * @param {string} props.value lo escrito
4
+ * @param {(value: string) => void} props.onChange recibe el texto, no el evento
5
+ * @param {string} props.placeholder ya traducido: qué se busca («Buscar por título o etiqueta»); también es su nombre para el
6
+ * lector de pantalla
7
+ * @param {boolean} [props.inBar] en la barra de la app (por omisión) o dentro de la pantalla
8
+ * @param {boolean} [props.collapsible] en la barra, sin usar se encoge a la lupa; por omisión sí (false: siempre abierta)
9
+ * @param {number} [props.order] en qué lugar va entre las cápsulas de la barra (por omisión la primera)
10
+ * @param {() => void} [props.onFocus]
11
+ * @param {() => void} [props.onBlur]
12
+ * @param {import('react').Ref<HTMLInputElement>} [props.inputRef] la caja, para enfocarla desde afuera (un atajo «/»)
13
+ */
14
+ export default function BarSearch({ value, onChange, placeholder, inBar, collapsible, order, onFocus, onBlur, inputRef }: {
15
+ value: string;
16
+ onChange: (value: string) => void;
17
+ placeholder: string;
18
+ inBar?: boolean;
19
+ collapsible?: boolean;
20
+ order?: number;
21
+ onFocus?: () => void;
22
+ onBlur?: () => void;
23
+ inputRef?: import('react').Ref<HTMLInputElement>;
24
+ }): import("react").JSX.Element;
@@ -6,12 +6,15 @@
6
6
  * @param {import('react').ReactNode} [props.account] la cuenta (o el engrane), en su círculo junto a la barra
7
7
  * @param {import('react').ReactNode} [props.moreFooter] lo que va al final de la hoja de «Más» (la tarjeta del menú lateral)
8
8
  * @param {boolean} [props.minimizeOnScroll] se encoge al leer hacia abajo; por omisión sí
9
+ * @param {(keys: string[]|null) => void} [props.onPinnedTabsChange] la persona eligió sus pestañas (null: regresó a las de
10
+ * omisión)
9
11
  */
10
- export default function MobileTabBar({ menuItems, activeItem, menuBadges, account, moreFooter, minimizeOnScroll }: {
12
+ export default function MobileTabBar({ menuItems, activeItem, menuBadges, account, moreFooter, minimizeOnScroll, onPinnedTabsChange }: {
11
13
  menuItems: object[];
12
14
  activeItem: object | null;
13
15
  menuBadges?: Record<string, number>;
14
16
  account?: import('react').ReactNode;
15
17
  moreFooter?: import('react').ReactNode;
16
18
  minimizeOnScroll?: boolean;
19
+ onPinnedTabsChange?: (keys: string[] | null) => void;
17
20
  }): import("react").JSX.Element;
@@ -25,6 +25,7 @@ export declare const MOBILE_TAB_BAR_HEIGHT_PIXELS: Readonly<{
25
25
  portrait: 60;
26
26
  landscape: 46;
27
27
  }>;
28
+ export declare const FLOATING_BOTTOM_SPACE_CSS_VARIABLE = "--calcita-floating-bottom-space";
28
29
  /**
29
30
  * Lo que flota abajo al centro en el teléfono con vidrio (el aviso de versión nueva, la invitación a instalar): encima de
30
31
  * la barra de pestañas, con la separación de la barra a la orilla, su alto, la separación pedida y la zona del gesto de
@@ -3,9 +3,11 @@
3
3
  * @param {string} props.password lo que lleva escrito la persona
4
4
  * @param {object} [props.policy] las reglas; por omisión DEFAULT_PASSWORD_POLICY
5
5
  * @param {string} [props.id]
6
+ * @param {object} [props.texts] los textos que cambian, con la forma de `auth` en los textos del paquete
6
7
  */
7
- export default function PasswordChecklist({ password, policy, id }: {
8
+ export default function PasswordChecklist({ password, policy, id, texts }: {
8
9
  password: string;
9
10
  policy?: object;
10
11
  id?: string;
12
+ texts?: object;
11
13
  }): import("react").JSX.Element;