@stackcraftmx/calcita 0.0.0-stage → 0.23.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 (841) hide show
  1. package/LICENSE +110 -0
  2. package/README.md +611 -2
  3. package/cli/askQuestions.js +63 -0
  4. package/cli/calcita.js +150 -0
  5. package/cli/makeComponent.js +50 -0
  6. package/cli/makeForm.js +68 -0
  7. package/cli/makeModule.js +78 -0
  8. package/cli/makePage.js +62 -0
  9. package/cli/names.js +64 -0
  10. package/cli/newProject.js +103 -0
  11. package/cli/packageVersions.js +38 -0
  12. package/cli/projectAnswers.js +145 -0
  13. package/cli/projectConfig.js +38 -0
  14. package/cli/projectFiles.js +126 -0
  15. package/cli/screenLabels.js +41 -0
  16. package/cli/templateFiles.js +186 -0
  17. package/cli/templates/component/core/__ComponentName__.jsx.tpl +23 -0
  18. package/cli/templates/component/module/__ComponentName__.jsx.tpl +21 -0
  19. package/cli/templates/form/formik/__FormName__.jsx.tpl +50 -0
  20. package/cli/templates/form/hookForm/__FormName__.jsx.tpl +53 -0
  21. package/cli/templates/form/shared/__formName__Schema.js.tpl +20 -0
  22. package/cli/templates/form/shared/__formName__Texts.js.tpl +6 -0
  23. package/cli/templates/module/__Name__Page.jsx.tpl +75 -0
  24. package/cli/templates/module/__name__Api.js.tpl +39 -0
  25. package/cli/templates/module/__name__Texts.js.tpl +27 -0
  26. package/cli/templates/module/menu.js.tpl +21 -0
  27. package/cli/templates/module/routes.js.tpl +7 -0
  28. package/cli/templates/moduleServer/__name__Server.js.tpl +68 -0
  29. package/cli/templates/page/__PageName__Page.jsx.tpl +22 -0
  30. package/cli/templates/page/__pageName__PageTexts.js.tpl +23 -0
  31. package/cli/templates/project/README.md.tpl +55 -0
  32. package/cli/templates/project/dot-gitignore.tpl +11 -0
  33. package/cli/templates/project/index.html.tpl +20 -0
  34. package/cli/templates/project/jsconfig.json.tpl +16 -0
  35. package/cli/templates/project/pnpm-workspace.yaml.tpl +5 -0
  36. package/cli/templates/project/public/favicon.svg +1 -0
  37. package/cli/templates/project/public/icons/apple-touch-icon.png +0 -0
  38. package/cli/templates/project/public/icons/icon-192.png +0 -0
  39. package/cli/templates/project/public/icons/icon-512-maskable.png +0 -0
  40. package/cli/templates/project/public/icons/icon-512.png +0 -0
  41. package/cli/templates/project/public/manifest.webmanifest.tpl +17 -0
  42. package/cli/templates/project/src/app/AppProviders.jsx.tpl +102 -0
  43. package/cli/templates/project/src/app/AppShell.jsx.tpl +87 -0
  44. package/cli/templates/project/src/app/appRouter.jsx.tpl +49 -0
  45. package/cli/templates/project/src/app/appSettings.js.tpl +13 -0
  46. package/cli/templates/project/src/app/appTexts.js.tpl +15 -0
  47. package/cli/templates/project/src/app/combineTexts.js.tpl +31 -0
  48. package/cli/templates/project/src/app/i18n.js.tpl +19 -0
  49. package/cli/templates/project/src/app/shellTexts.js.tpl +16 -0
  50. package/cli/templates/project/src/core/AppLogo.jsx.tpl +12 -0
  51. package/cli/templates/project/src/core/accountConnector.js.tpl +36 -0
  52. package/cli/templates/project/src/core/apiClient.js.tpl +15 -0
  53. package/cli/templates/project/src/core/appPaths.js.tpl +11 -0
  54. package/cli/templates/project/src/core/index.js.tpl +8 -0
  55. package/cli/templates/project/src/fakeServer/networkDelay.js.tpl +40 -0
  56. package/cli/templates/project/src/fakeServer/serverText.js.tpl +20 -0
  57. package/cli/templates/project/src/main.jsx.tpl +24 -0
  58. package/cli/templates/project/src/modules/auth/ForgotPasswordPage.jsx.tpl +14 -0
  59. package/cli/templates/project/src/modules/auth/ResetPasswordPage.jsx.tpl +15 -0
  60. package/cli/templates/project/src/modules/auth/SignInPage.jsx.tpl +29 -0
  61. package/cli/templates/project/src/modules/auth/authTexts.js.tpl +6 -0
  62. package/cli/templates/project/src/modules/auth/routes.js.tpl +11 -0
  63. package/cli/templates/project/src/modules/home/HomePage.jsx.tpl +38 -0
  64. package/cli/templates/project/src/modules/home/homeTexts.js.tpl +29 -0
  65. package/cli/templates/project/src/modules/home/menu.js.tpl +17 -0
  66. package/cli/templates/project/src/modules/home/routes.js.tpl +4 -0
  67. package/cli/templates/project/src/modules/profile/ProfilePage.jsx.tpl +13 -0
  68. package/cli/templates/project/src/modules/profile/routes.js.tpl +6 -0
  69. package/cli/templates/project/vite.config.js.tpl +27 -0
  70. package/dist/DataTable/AuditTrailDialog.js +40 -0
  71. package/dist/DataTable/AuditTrailDialog.js.map +1 -0
  72. package/dist/DataTable/AuditTrailTable.js +87 -0
  73. package/dist/DataTable/AuditTrailTable.js.map +1 -0
  74. package/dist/DataTable/ColumnFilters/HeaderFilterPopover.js +71 -0
  75. package/dist/DataTable/ColumnFilters/HeaderFilterPopover.js.map +1 -0
  76. package/dist/DataTable/ColumnFilters/MultiSelectColumnFilter.js +50 -0
  77. package/dist/DataTable/ColumnFilters/MultiSelectColumnFilter.js.map +1 -0
  78. package/dist/DataTable/ColumnFilters/SortableFilterHeader.js +54 -0
  79. package/dist/DataTable/ColumnFilters/SortableFilterHeader.js.map +1 -0
  80. package/dist/DataTable/ColumnFilters/TextColumnFilter.js +24 -0
  81. package/dist/DataTable/ColumnFilters/TextColumnFilter.js.map +1 -0
  82. package/dist/DataTable/EmptyState.js +22 -0
  83. package/dist/DataTable/EmptyState.js.map +1 -0
  84. package/dist/DataTable/FilterChips.js +39 -0
  85. package/dist/DataTable/FilterChips.js.map +1 -0
  86. package/dist/DataTable/GoToPage.js +62 -0
  87. package/dist/DataTable/GoToPage.js.map +1 -0
  88. package/dist/DataTable/ServerTable.js +407 -0
  89. package/dist/DataTable/ServerTable.js.map +1 -0
  90. package/dist/DataTable/buildChipConfig.js +27 -0
  91. package/dist/DataTable/buildChipConfig.js.map +1 -0
  92. package/dist/DataTable/columns.js +122 -0
  93. package/dist/DataTable/columns.js.map +1 -0
  94. package/dist/DataTable/filterContext.js +15 -0
  95. package/dist/DataTable/filterContext.js.map +1 -0
  96. package/dist/DataTable/serverTableParams.js +19 -0
  97. package/dist/DataTable/serverTableParams.js.map +1 -0
  98. package/dist/DataTable/tableMachine.js +87 -0
  99. package/dist/DataTable/tableMachine.js.map +1 -0
  100. package/dist/DataTable/useDebouncedFilter.js +29 -0
  101. package/dist/DataTable/useDebouncedFilter.js.map +1 -0
  102. package/dist/DataTable/useTableState.js +132 -0
  103. package/dist/DataTable/useTableState.js.map +1 -0
  104. package/dist/access/Can.js +9 -0
  105. package/dist/access/Can.js.map +1 -0
  106. package/dist/access/PermissionMatrix.js +83 -0
  107. package/dist/access/PermissionMatrix.js.map +1 -0
  108. package/dist/access/RequireAccess.js +14 -0
  109. package/dist/access/RequireAccess.js.map +1 -0
  110. package/dist/access/accessRules.js +49 -0
  111. package/dist/access/accessRules.js.map +1 -0
  112. package/dist/access/permissionGroups.js +43 -0
  113. package/dist/access/permissionGroups.js.map +1 -0
  114. package/dist/access/useCan.js +12 -0
  115. package/dist/access/useCan.js.map +1 -0
  116. package/dist/account/AccountProvider.js +58 -0
  117. package/dist/account/AccountProvider.js.map +1 -0
  118. package/dist/account/AccountSecuritySection.js +81 -0
  119. package/dist/account/AccountSecuritySection.js.map +1 -0
  120. package/dist/account/DemoTotpCodeButton.js +26 -0
  121. package/dist/account/DemoTotpCodeButton.js.map +1 -0
  122. package/dist/account/ForgotPasswordScreen.js +26 -0
  123. package/dist/account/ForgotPasswordScreen.js.map +1 -0
  124. package/dist/account/ProfileScreen.js +108 -0
  125. package/dist/account/ProfileScreen.js.map +1 -0
  126. package/dist/account/ResetPasswordScreen.js +57 -0
  127. package/dist/account/ResetPasswordScreen.js.map +1 -0
  128. package/dist/account/SignInScreen.js +101 -0
  129. package/dist/account/SignInScreen.js.map +1 -0
  130. package/dist/account/accountConnector.js +31 -0
  131. package/dist/account/accountConnector.js.map +1 -0
  132. package/dist/account/demo/createDemoAccountConnector.js +368 -0
  133. package/dist/account/demo/createDemoAccountConnector.js.map +1 -0
  134. package/dist/account/demo/totp.js +61 -0
  135. package/dist/account/demo/totp.js.map +1 -0
  136. package/dist/account/restAccountConnector.js +117 -0
  137. package/dist/account/restAccountConnector.js.map +1 -0
  138. package/dist/account-demo.js +12 -0
  139. package/dist/account-demo.js.map +1 -0
  140. package/dist/account.js +25 -0
  141. package/dist/account.js.map +1 -0
  142. package/dist/adapters/i18next.js +7 -0
  143. package/dist/adapters/i18next.js.map +1 -0
  144. package/dist/adapters/nextNavigation.js +36 -0
  145. package/dist/adapters/nextNavigation.js.map +1 -0
  146. package/dist/adapters/reactRouter.js +7 -0
  147. package/dist/adapters/reactRouter.js.map +1 -0
  148. package/dist/adapters/reactRouterRoutes.js +48 -0
  149. package/dist/adapters/reactRouterRoutes.js.map +1 -0
  150. package/dist/api/ApiError.js +58 -0
  151. package/dist/api/ApiError.js.map +1 -0
  152. package/dist/api/createApiClient.js +226 -0
  153. package/dist/api/createApiClient.js.map +1 -0
  154. package/dist/api/staleChunks.js +47 -0
  155. package/dist/api/staleChunks.js.map +1 -0
  156. package/dist/appShell/AccountMenu.js +86 -0
  157. package/dist/appShell/AccountMenu.js.map +1 -0
  158. package/dist/appShell/AppLayout.js +493 -0
  159. package/dist/appShell/AppLayout.js.map +1 -0
  160. package/dist/appShell/AppearanceSettings.js +93 -0
  161. package/dist/appShell/AppearanceSettings.js.map +1 -0
  162. package/dist/appShell/AuthLayout.js +44 -0
  163. package/dist/appShell/AuthLayout.js.map +1 -0
  164. package/dist/appShell/BarActionButton.js +31 -0
  165. package/dist/appShell/BarActionButton.js.map +1 -0
  166. package/dist/appShell/BarActions.js +94 -0
  167. package/dist/appShell/BarActions.js.map +1 -0
  168. package/dist/appShell/BarCapsule.js +35 -0
  169. package/dist/appShell/BarCapsule.js.map +1 -0
  170. package/dist/appShell/HeaderTools.js +53 -0
  171. package/dist/appShell/HeaderTools.js.map +1 -0
  172. package/dist/appShell/MobileTabBar.js +346 -0
  173. package/dist/appShell/MobileTabBar.js.map +1 -0
  174. package/dist/appShell/SettingsMenu.js +41 -0
  175. package/dist/appShell/SettingsMenu.js.map +1 -0
  176. package/dist/appShell/SideMenu.js +217 -0
  177. package/dist/appShell/SideMenu.js.map +1 -0
  178. package/dist/appShell/SideMenuEntry.js +140 -0
  179. package/dist/appShell/SideMenuEntry.js.map +1 -0
  180. package/dist/appShell/SubmenuActionsMenu.js +71 -0
  181. package/dist/appShell/SubmenuActionsMenu.js.map +1 -0
  182. package/dist/appShell/TabBarEditor.js +55 -0
  183. package/dist/appShell/TabBarEditor.js.map +1 -0
  184. package/dist/appShell/TopMenu.js +80 -0
  185. package/dist/appShell/TopMenu.js.map +1 -0
  186. package/dist/appShell/appMenuContext.js +11 -0
  187. package/dist/appShell/appMenuContext.js.map +1 -0
  188. package/dist/appShell/barActionsSlot.js +26 -0
  189. package/dist/appShell/barActionsSlot.js.map +1 -0
  190. package/dist/appShell/barMenuPlacement.js +33 -0
  191. package/dist/appShell/barMenuPlacement.js.map +1 -0
  192. package/dist/appShell/menuItemText.js +33 -0
  193. package/dist/appShell/menuItemText.js.map +1 -0
  194. package/dist/appShell/pageTitle.js +45 -0
  195. package/dist/appShell/pageTitle.js.map +1 -0
  196. package/dist/appShell/shellSizes.js +38 -0
  197. package/dist/appShell/shellSizes.js.map +1 -0
  198. package/dist/appShell/tabBarRule.js +12 -0
  199. package/dist/appShell/tabBarRule.js.map +1 -0
  200. package/dist/appShell/tabBarScroll.js +23 -0
  201. package/dist/appShell/tabBarScroll.js.map +1 -0
  202. package/dist/appShell/useDrawerCollapsed.js +29 -0
  203. package/dist/appShell/useDrawerCollapsed.js.map +1 -0
  204. package/dist/appShell/useFittingActionCount.js +45 -0
  205. package/dist/appShell/useFittingActionCount.js.map +1 -0
  206. package/dist/appShell/usePinnedMobileTabs.js +32 -0
  207. package/dist/appShell/usePinnedMobileTabs.js.map +1 -0
  208. package/dist/appShell/useTabBarMinimized.js +33 -0
  209. package/dist/appShell/useTabBarMinimized.js.map +1 -0
  210. package/dist/auth/PasswordChecklist.js +44 -0
  211. package/dist/auth/PasswordChecklist.js.map +1 -0
  212. package/dist/auth/passwordRules.js +43 -0
  213. package/dist/auth/passwordRules.js.map +1 -0
  214. package/dist/calendar/EventCalendar.js +138 -0
  215. package/dist/calendar/EventCalendar.js.map +1 -0
  216. package/dist/calendar.js +6 -0
  217. package/dist/calendar.js.map +1 -0
  218. package/dist/charts.js +7 -0
  219. package/dist/charts.js.map +1 -0
  220. package/dist/date-pickers.js +8 -0
  221. package/dist/date-pickers.js.map +1 -0
  222. package/dist/datePickers/DateInput.js +75 -0
  223. package/dist/datePickers/DateInput.js.map +1 -0
  224. package/dist/datePickers/FormDateField.js +12 -0
  225. package/dist/datePickers/FormDateField.js.map +1 -0
  226. package/dist/dates.js +25 -0
  227. package/dist/dates.js.map +1 -0
  228. package/dist/dictionaries/dictionaries.js +48 -0
  229. package/dist/dictionaries/dictionaries.js.map +1 -0
  230. package/dist/downloads/DownloadManager.js +201 -0
  231. package/dist/downloads/DownloadManager.js.map +1 -0
  232. package/dist/downloads/downloadQueue.js +54 -0
  233. package/dist/downloads/downloadQueue.js.map +1 -0
  234. package/dist/downloads/downloadsMachine.js +77 -0
  235. package/dist/downloads/downloadsMachine.js.map +1 -0
  236. package/dist/excel/reportWorkbook.js +299 -0
  237. package/dist/excel/reportWorkbook.js.map +1 -0
  238. package/dist/excel.js +13 -0
  239. package/dist/excel.js.map +1 -0
  240. package/dist/feedback/ConfirmDialog.js +72 -0
  241. package/dist/feedback/ConfirmDialog.js.map +1 -0
  242. package/dist/feedback/ModalWaiting.js +23 -0
  243. package/dist/feedback/ModalWaiting.js.map +1 -0
  244. package/dist/feedback/NewBuildNotice.js +79 -0
  245. package/dist/feedback/NewBuildNotice.js.map +1 -0
  246. package/dist/feedback/StaleBuildBoundary.js +36 -0
  247. package/dist/feedback/StaleBuildBoundary.js.map +1 -0
  248. package/dist/feedback/Toaster.js +20 -0
  249. package/dist/feedback/Toaster.js.map +1 -0
  250. package/dist/feedback/confirmActionMachine.js +67 -0
  251. package/dist/feedback/confirmActionMachine.js.map +1 -0
  252. package/dist/feedback/toast.js +88 -0
  253. package/dist/feedback/toast.js.map +1 -0
  254. package/dist/feedback/useConfirmAction.js +40 -0
  255. package/dist/feedback/useConfirmAction.js.map +1 -0
  256. package/dist/filepond/FileDropzone.js +254 -0
  257. package/dist/filepond/FileDropzone.js.map +1 -0
  258. package/dist/filepond/pondServer.js +48 -0
  259. package/dist/filepond/pondServer.js.map +1 -0
  260. package/dist/filepond.js +10 -0
  261. package/dist/filepond.js.map +1 -0
  262. package/dist/files.js +43 -0
  263. package/dist/files.js.map +1 -0
  264. package/dist/formatting.js +177 -0
  265. package/dist/formatting.js.map +1 -0
  266. package/dist/forms/FormCatalogField.js +12 -0
  267. package/dist/forms/FormCatalogField.js.map +1 -0
  268. package/dist/forms/FormColorField.js +12 -0
  269. package/dist/forms/FormColorField.js.map +1 -0
  270. package/dist/forms/FormNumberField.js +12 -0
  271. package/dist/forms/FormNumberField.js.map +1 -0
  272. package/dist/forms/FormProblemAlert.js +15 -0
  273. package/dist/forms/FormProblemAlert.js.map +1 -0
  274. package/dist/forms/FormSelectField.js +12 -0
  275. package/dist/forms/FormSelectField.js.map +1 -0
  276. package/dist/forms/FormServerProblem.js +23 -0
  277. package/dist/forms/FormServerProblem.js.map +1 -0
  278. package/dist/forms/FormTextField.js +12 -0
  279. package/dist/forms/FormTextField.js.map +1 -0
  280. package/dist/forms/FormWizard.js +90 -0
  281. package/dist/forms/FormWizard.js.map +1 -0
  282. package/dist/forms/SubmitButton.js +14 -0
  283. package/dist/forms/SubmitButton.js.map +1 -0
  284. package/dist/forms/applyServerProblem.js +15 -0
  285. package/dist/forms/applyServerProblem.js.map +1 -0
  286. package/dist/forms/auth/ChangePasswordForm.js +46 -0
  287. package/dist/forms/auth/ChangePasswordForm.js.map +1 -0
  288. package/dist/forms/auth/ForgotPasswordForm.js +50 -0
  289. package/dist/forms/auth/ForgotPasswordForm.js.map +1 -0
  290. package/dist/forms/auth/SignInForm.js +48 -0
  291. package/dist/forms/auth/SignInForm.js.map +1 -0
  292. package/dist/forms/security/SecondStepForm.js +122 -0
  293. package/dist/forms/security/SecondStepForm.js.map +1 -0
  294. package/dist/forms/security/TwoStepVerificationCard.js +336 -0
  295. package/dist/forms/security/TwoStepVerificationCard.js.map +1 -0
  296. package/dist/forms/security/securityRules.js +28 -0
  297. package/dist/forms/security/securityRules.js.map +1 -0
  298. package/dist/forms/serverProblemFields.js +25 -0
  299. package/dist/forms/serverProblemFields.js.map +1 -0
  300. package/dist/forms/useFormikField.js +16 -0
  301. package/dist/forms/useFormikField.js.map +1 -0
  302. package/dist/forms/validation.js +55 -0
  303. package/dist/forms/validation.js.map +1 -0
  304. package/dist/forms/validationMessages.js +16 -0
  305. package/dist/forms/validationMessages.js.map +1 -0
  306. package/dist/forms.js +57 -0
  307. package/dist/forms.js.map +1 -0
  308. package/dist/hookForm/FormCatalogField.js +12 -0
  309. package/dist/hookForm/FormCatalogField.js.map +1 -0
  310. package/dist/hookForm/FormColorField.js +12 -0
  311. package/dist/hookForm/FormColorField.js.map +1 -0
  312. package/dist/hookForm/FormNumberField.js +12 -0
  313. package/dist/hookForm/FormNumberField.js.map +1 -0
  314. package/dist/hookForm/FormProblemAlert.js +17 -0
  315. package/dist/hookForm/FormProblemAlert.js.map +1 -0
  316. package/dist/hookForm/FormSelectField.js +12 -0
  317. package/dist/hookForm/FormSelectField.js.map +1 -0
  318. package/dist/hookForm/FormTextField.js +12 -0
  319. package/dist/hookForm/FormTextField.js.map +1 -0
  320. package/dist/hookForm/SubmitButton.js +15 -0
  321. package/dist/hookForm/SubmitButton.js.map +1 -0
  322. package/dist/hookForm/applyServerProblem.js +21 -0
  323. package/dist/hookForm/applyServerProblem.js.map +1 -0
  324. package/dist/hookForm/useHookFormField.js +19 -0
  325. package/dist/hookForm/useHookFormField.js.map +1 -0
  326. package/dist/i18next.js +5 -0
  327. package/dist/i18next.js.map +1 -0
  328. package/dist/identifiers.js +8 -0
  329. package/dist/identifiers.js.map +1 -0
  330. package/dist/inbox/InboxLayout.js +68 -0
  331. package/dist/inbox/InboxLayout.js.map +1 -0
  332. package/dist/inbox/MessageList.js +64 -0
  333. package/dist/inbox/MessageList.js.map +1 -0
  334. package/dist/inbox/MessageView.js +53 -0
  335. package/dist/inbox/MessageView.js.map +1 -0
  336. package/dist/inbox/inboxDates.js +8 -0
  337. package/dist/inbox/inboxDates.js.map +1 -0
  338. package/dist/index.js +383 -0
  339. package/dist/index.js.map +1 -0
  340. package/dist/inputs/CatalogInput.js +62 -0
  341. package/dist/inputs/CatalogInput.js.map +1 -0
  342. package/dist/inputs/ColorInput.js +108 -0
  343. package/dist/inputs/ColorInput.js.map +1 -0
  344. package/dist/inputs/FieldFrame.js +20 -0
  345. package/dist/inputs/FieldFrame.js.map +1 -0
  346. package/dist/inputs/FormSection.js +105 -0
  347. package/dist/inputs/FormSection.js.map +1 -0
  348. package/dist/inputs/NumberInput.js +69 -0
  349. package/dist/inputs/NumberInput.js.map +1 -0
  350. package/dist/inputs/SelectInput.js +66 -0
  351. package/dist/inputs/SelectInput.js.map +1 -0
  352. package/dist/inputs/TextInput.js +97 -0
  353. package/dist/inputs/TextInput.js.map +1 -0
  354. package/dist/inputs/colorContrast.js +46 -0
  355. package/dist/inputs/colorContrast.js.map +1 -0
  356. package/dist/inputs/formLayoutContext.js +9 -0
  357. package/dist/inputs/formLayoutContext.js.map +1 -0
  358. package/dist/inputs/numberText.js +48 -0
  359. package/dist/inputs/numberText.js.map +1 -0
  360. package/dist/kanban/KanbanBoard.js +113 -0
  361. package/dist/kanban/KanbanBoard.js.map +1 -0
  362. package/dist/kanban/kanbanMoves.js +29 -0
  363. package/dist/kanban/kanbanMoves.js.map +1 -0
  364. package/dist/kanban.js +9 -0
  365. package/dist/kanban.js.map +1 -0
  366. package/dist/laravel/csrfRetry.js +18 -0
  367. package/dist/laravel/csrfRetry.js.map +1 -0
  368. package/dist/laravel.js +6 -0
  369. package/dist/laravel.js.map +1 -0
  370. package/dist/lastListUrl.js +35 -0
  371. package/dist/lastListUrl.js.map +1 -0
  372. package/dist/locales/en.js +714 -0
  373. package/dist/locales/en.js.map +1 -0
  374. package/dist/locales/es.js +714 -0
  375. package/dist/locales/es.js.map +1 -0
  376. package/dist/maps/MapView.js +96 -0
  377. package/dist/maps/MapView.js.map +1 -0
  378. package/dist/maps/mapMarkers.js +19 -0
  379. package/dist/maps/mapMarkers.js.map +1 -0
  380. package/dist/maps.js +10 -0
  381. package/dist/maps.js.map +1 -0
  382. package/dist/money/money.js +380 -0
  383. package/dist/money/money.js.map +1 -0
  384. package/dist/money.js +6 -0
  385. package/dist/money.js.map +1 -0
  386. package/dist/navigation/appMenu.js +93 -0
  387. package/dist/navigation/appMenu.js.map +1 -0
  388. package/dist/navigation/useMenuBadges.js +45 -0
  389. package/dist/navigation/useMenuBadges.js.map +1 -0
  390. package/dist/navigation.js +30 -0
  391. package/dist/navigation.js.map +1 -0
  392. package/dist/navigationTrail.js +82 -0
  393. package/dist/navigationTrail.js.map +1 -0
  394. package/dist/next.js +5 -0
  395. package/dist/next.js.map +1 -0
  396. package/dist/observability/buildWatch.js +19 -0
  397. package/dist/observability/buildWatch.js.map +1 -0
  398. package/dist/observability/logger.js +43 -0
  399. package/dist/observability/logger.js.map +1 -0
  400. package/dist/observability/publishedBuild.js +39 -0
  401. package/dist/observability/publishedBuild.js.map +1 -0
  402. package/dist/observability/usePublishedBuildWatch.js +76 -0
  403. package/dist/observability/usePublishedBuildWatch.js.map +1 -0
  404. package/dist/passkeys.js +7 -0
  405. package/dist/passkeys.js.map +1 -0
  406. package/dist/periodRanges.js +33 -0
  407. package/dist/periodRanges.js.map +1 -0
  408. package/dist/problems.js +51 -0
  409. package/dist/problems.js.map +1 -0
  410. package/dist/pwa/InstallAppSetting.js +33 -0
  411. package/dist/pwa/InstallAppSetting.js.map +1 -0
  412. package/dist/pwa/InstallInstructionsDialog.js +35 -0
  413. package/dist/pwa/InstallInstructionsDialog.js.map +1 -0
  414. package/dist/pwa/InstallPromptBanner.js +64 -0
  415. package/dist/pwa/InstallPromptBanner.js.map +1 -0
  416. package/dist/pwa/installInstructions.js +60 -0
  417. package/dist/pwa/installInstructions.js.map +1 -0
  418. package/dist/pwa/useInstallPrompt.js +70 -0
  419. package/dist/pwa/useInstallPrompt.js.map +1 -0
  420. package/dist/react-hook-form.js +30 -0
  421. package/dist/react-hook-form.js.map +1 -0
  422. package/dist/react-router.js +10 -0
  423. package/dist/react-router.js.map +1 -0
  424. package/dist/security/ActivityLog.js +79 -0
  425. package/dist/security/ActivityLog.js.map +1 -0
  426. package/dist/security/RecoveryCodesDialog.js +84 -0
  427. package/dist/security/RecoveryCodesDialog.js.map +1 -0
  428. package/dist/security/SessionsCard.js +81 -0
  429. package/dist/security/SessionsCard.js.map +1 -0
  430. package/dist/security/passkeys.js +39 -0
  431. package/dist/security/passkeys.js.map +1 -0
  432. package/dist/table.js +35 -0
  433. package/dist/table.js.map +1 -0
  434. package/dist/theme/androidDevice.js +16 -0
  435. package/dist/theme/androidDevice.js.map +1 -0
  436. package/dist/theme/appleTracking.js +34 -0
  437. package/dist/theme/appleTracking.js.map +1 -0
  438. package/dist/theme/components/MuiAppBar.js +27 -0
  439. package/dist/theme/components/MuiAppBar.js.map +1 -0
  440. package/dist/theme/components/MuiBackdrop.js +13 -0
  441. package/dist/theme/components/MuiBackdrop.js.map +1 -0
  442. package/dist/theme/components/MuiButton.js +25 -0
  443. package/dist/theme/components/MuiButton.js.map +1 -0
  444. package/dist/theme/components/MuiButtonBase.js +16 -0
  445. package/dist/theme/components/MuiButtonBase.js.map +1 -0
  446. package/dist/theme/components/MuiChip.js +30 -0
  447. package/dist/theme/components/MuiChip.js.map +1 -0
  448. package/dist/theme/components/MuiDataGrid.js +30 -0
  449. package/dist/theme/components/MuiDataGrid.js.map +1 -0
  450. package/dist/theme/components/MuiDrawer.js +18 -0
  451. package/dist/theme/components/MuiDrawer.js.map +1 -0
  452. package/dist/theme/components/MuiMenuItem.js +17 -0
  453. package/dist/theme/components/MuiMenuItem.js.map +1 -0
  454. package/dist/theme/components/MuiTypography.js +22 -0
  455. package/dist/theme/components/MuiTypography.js.map +1 -0
  456. package/dist/theme/components/glassComponents.js +885 -0
  457. package/dist/theme/components/glassComponents.js.map +1 -0
  458. package/dist/theme/components/minimalComponents.js +146 -0
  459. package/dist/theme/components/minimalComponents.js.map +1 -0
  460. package/dist/theme/components/paletteOf.js +7 -0
  461. package/dist/theme/components/paletteOf.js.map +1 -0
  462. package/dist/theme/createToolkitTheme.js +100 -0
  463. package/dist/theme/createToolkitTheme.js.map +1 -0
  464. package/dist/theme/glassSurface.js +328 -0
  465. package/dist/theme/glassSurface.js.map +1 -0
  466. package/dist/theme/glassToasterStyles.js +50 -0
  467. package/dist/theme/glassToasterStyles.js.map +1 -0
  468. package/dist/theme/mergeComponents.js +42 -0
  469. package/dist/theme/mergeComponents.js.map +1 -0
  470. package/dist/theme/stackcraftPalette.js +59 -0
  471. package/dist/theme/stackcraftPalette.js.map +1 -0
  472. package/dist/theme/toolkitComponents.js +26 -0
  473. package/dist/theme/toolkitComponents.js.map +1 -0
  474. package/dist/timeline.js +8 -0
  475. package/dist/timeline.js.map +1 -0
  476. package/dist/toolkit/ToolkitProvider.js +49 -0
  477. package/dist/toolkit/ToolkitProvider.js.map +1 -0
  478. package/dist/toolkit/browserNavigation.js +34 -0
  479. package/dist/toolkit/browserNavigation.js.map +1 -0
  480. package/dist/toolkit/toolkitContext.js +19 -0
  481. package/dist/toolkit/toolkitContext.js.map +1 -0
  482. package/dist/toolkit/toolkitSettings.js +87 -0
  483. package/dist/toolkit/toolkitSettings.js.map +1 -0
  484. package/dist/toolkit/useToolkitTranslation.js +18 -0
  485. package/dist/toolkit/useToolkitTranslation.js.map +1 -0
  486. package/dist/types/DataTable/AuditTrailDialog.d.ts +32 -0
  487. package/dist/types/DataTable/AuditTrailTable.d.ts +28 -0
  488. package/dist/types/DataTable/ColumnFilters/HeaderFilterPopover.d.ts +8 -0
  489. package/dist/types/DataTable/ColumnFilters/MultiSelectColumnFilter.d.ts +16 -0
  490. package/dist/types/DataTable/ColumnFilters/SortableFilterHeader.d.ts +26 -0
  491. package/dist/types/DataTable/ColumnFilters/TextColumnFilter.d.ts +8 -0
  492. package/dist/types/DataTable/ColumnFilters/index.d.ts +4 -0
  493. package/dist/types/DataTable/EmptyState.d.ts +8 -0
  494. package/dist/types/DataTable/FilterChips.d.ts +15 -0
  495. package/dist/types/DataTable/GoToPage.d.ts +8 -0
  496. package/dist/types/DataTable/ServerTable.d.ts +110 -0
  497. package/dist/types/DataTable/buildChipConfig.d.ts +22 -0
  498. package/dist/types/DataTable/columns.d.ts +93 -0
  499. package/dist/types/DataTable/filterContext.d.ts +13 -0
  500. package/dist/types/DataTable/index.d.ts +13 -0
  501. package/dist/types/DataTable/serverTableParams.d.ts +16 -0
  502. package/dist/types/DataTable/tableMachine.d.ts +41 -0
  503. package/dist/types/DataTable/useDebouncedFilter.d.ts +8 -0
  504. package/dist/types/DataTable/useTableState.d.ts +93 -0
  505. package/dist/types/access/Can.d.ts +11 -0
  506. package/dist/types/access/PermissionMatrix.d.ts +21 -0
  507. package/dist/types/access/RequireAccess.d.ts +11 -0
  508. package/dist/types/access/accessRules.d.ts +24 -0
  509. package/dist/types/access/permissionGroups.d.ts +56 -0
  510. package/dist/types/access/useCan.d.ts +11 -0
  511. package/dist/types/account/AccountProvider.d.ts +27 -0
  512. package/dist/types/account/AccountSecuritySection.d.ts +7 -0
  513. package/dist/types/account/DemoTotpCodeButton.d.ts +6 -0
  514. package/dist/types/account/ForgotPasswordScreen.d.ts +15 -0
  515. package/dist/types/account/ProfileScreen.d.ts +13 -0
  516. package/dist/types/account/ResetPasswordScreen.d.ts +19 -0
  517. package/dist/types/account/SignInScreen.d.ts +25 -0
  518. package/dist/types/account/accountConnector.d.ts +263 -0
  519. package/dist/types/account/demo/createDemoAccountConnector.d.ts +30 -0
  520. package/dist/types/account/demo/totp.d.ts +45 -0
  521. package/dist/types/account/restAccountConnector.d.ts +49 -0
  522. package/dist/types/account-demo.d.ts +2 -0
  523. package/dist/types/account.d.ts +16 -0
  524. package/dist/types/adapters/i18next.d.ts +11 -0
  525. package/dist/types/adapters/nextNavigation.d.ts +33 -0
  526. package/dist/types/adapters/reactRouter.d.ts +6 -0
  527. package/dist/types/adapters/reactRouterRoutes.d.ts +30 -0
  528. package/dist/types/api/ApiError.d.ts +42 -0
  529. package/dist/types/api/createApiClient.d.ts +146 -0
  530. package/dist/types/api/staleChunks.d.ts +15 -0
  531. package/dist/types/appShell/AccountMenu.d.ts +28 -0
  532. package/dist/types/appShell/AppLayout.d.ts +66 -0
  533. package/dist/types/appShell/AppearanceSettings.d.ts +34 -0
  534. package/dist/types/appShell/AuthLayout.d.ts +21 -0
  535. package/dist/types/appShell/BarActionButton.d.ts +15 -0
  536. package/dist/types/appShell/BarActions.d.ts +18 -0
  537. package/dist/types/appShell/BarCapsule.d.ts +12 -0
  538. package/dist/types/appShell/HeaderTools.d.ts +27 -0
  539. package/dist/types/appShell/MobileTabBar.d.ts +17 -0
  540. package/dist/types/appShell/SettingsMenu.d.ts +13 -0
  541. package/dist/types/appShell/SideMenu.d.ts +31 -0
  542. package/dist/types/appShell/SideMenuEntry.d.ts +17 -0
  543. package/dist/types/appShell/SubmenuActionsMenu.d.ts +24 -0
  544. package/dist/types/appShell/TabBarEditor.d.ts +13 -0
  545. package/dist/types/appShell/TopMenu.d.ts +7 -0
  546. package/dist/types/appShell/appMenuContext.d.ts +9 -0
  547. package/dist/types/appShell/barActionsSlot.d.ts +35 -0
  548. package/dist/types/appShell/barMenuPlacement.d.ts +9 -0
  549. package/dist/types/appShell/menuItemText.d.ts +55 -0
  550. package/dist/types/appShell/pageTitle.d.ts +26 -0
  551. package/dist/types/appShell/shellSizes.d.ts +45 -0
  552. package/dist/types/appShell/tabBarRule.d.ts +5 -0
  553. package/dist/types/appShell/tabBarScroll.d.ts +26 -0
  554. package/dist/types/appShell/useDrawerCollapsed.d.ts +8 -0
  555. package/dist/types/appShell/useFittingActionCount.d.ts +7 -0
  556. package/dist/types/appShell/usePinnedMobileTabs.d.ts +7 -0
  557. package/dist/types/appShell/useTabBarMinimized.d.ts +8 -0
  558. package/dist/types/auth/PasswordChecklist.d.ts +11 -0
  559. package/dist/types/auth/passwordRules.d.ts +34 -0
  560. package/dist/types/calendar/EventCalendar.d.ts +46 -0
  561. package/dist/types/calendar.d.ts +1 -0
  562. package/dist/types/charts.d.ts +2 -0
  563. package/dist/types/date-pickers.d.ts +2 -0
  564. package/dist/types/datePickers/DateInput.d.ts +39 -0
  565. package/dist/types/datePickers/FormDateField.d.ts +7 -0
  566. package/dist/types/dates.d.ts +18 -0
  567. package/dist/types/dictionaries/dictionaries.d.ts +54 -0
  568. package/dist/types/downloads/DownloadManager.d.ts +1 -0
  569. package/dist/types/downloads/downloadQueue.d.ts +45 -0
  570. package/dist/types/downloads/downloadsMachine.d.ts +10 -0
  571. package/dist/types/downloads/index.d.ts +3 -0
  572. package/dist/types/excel/reportWorkbook.d.ts +157 -0
  573. package/dist/types/excel.d.ts +1 -0
  574. package/dist/types/feedback/ConfirmDialog.d.ts +29 -0
  575. package/dist/types/feedback/ModalWaiting.d.ts +8 -0
  576. package/dist/types/feedback/NewBuildNotice.d.ts +18 -0
  577. package/dist/types/feedback/StaleBuildBoundary.d.ts +21 -0
  578. package/dist/types/feedback/Toaster.d.ts +1 -0
  579. package/dist/types/feedback/confirmActionMachine.d.ts +19 -0
  580. package/dist/types/feedback/index.d.ts +8 -0
  581. package/dist/types/feedback/toast.d.ts +100 -0
  582. package/dist/types/feedback/useConfirmAction.d.ts +33 -0
  583. package/dist/types/filepond/FileDropzone.d.ts +59 -0
  584. package/dist/types/filepond/pondServer.d.ts +17 -0
  585. package/dist/types/filepond.d.ts +3 -0
  586. package/dist/types/files.d.ts +29 -0
  587. package/dist/types/formatting.d.ts +106 -0
  588. package/dist/types/forms/FormCatalogField.d.ts +6 -0
  589. package/dist/types/forms/FormColorField.d.ts +6 -0
  590. package/dist/types/forms/FormNumberField.d.ts +6 -0
  591. package/dist/types/forms/FormProblemAlert.d.ts +6 -0
  592. package/dist/types/forms/FormSelectField.d.ts +6 -0
  593. package/dist/types/forms/FormServerProblem.d.ts +8 -0
  594. package/dist/types/forms/FormTextField.d.ts +6 -0
  595. package/dist/types/forms/FormWizard.d.ts +20 -0
  596. package/dist/types/forms/SubmitButton.d.ts +9 -0
  597. package/dist/types/forms/applyServerProblem.d.ts +9 -0
  598. package/dist/types/forms/auth/ChangePasswordForm.d.ts +15 -0
  599. package/dist/types/forms/auth/ForgotPasswordForm.d.ts +12 -0
  600. package/dist/types/forms/auth/SignInForm.d.ts +18 -0
  601. package/dist/types/forms/index.d.ts +19 -0
  602. package/dist/types/forms/security/SecondStepForm.d.ts +28 -0
  603. package/dist/types/forms/security/TwoStepVerificationCard.d.ts +81 -0
  604. package/dist/types/forms/security/securityRules.d.ts +24 -0
  605. package/dist/types/forms/serverProblemFields.d.ts +19 -0
  606. package/dist/types/forms/useFormikField.d.ts +11 -0
  607. package/dist/types/forms/validation.d.ts +251 -0
  608. package/dist/types/forms/validationMessages.d.ts +12 -0
  609. package/dist/types/forms.d.ts +2 -0
  610. package/dist/types/hookForm/FormCatalogField.d.ts +8 -0
  611. package/dist/types/hookForm/FormColorField.d.ts +8 -0
  612. package/dist/types/hookForm/FormNumberField.d.ts +8 -0
  613. package/dist/types/hookForm/FormProblemAlert.d.ts +7 -0
  614. package/dist/types/hookForm/FormSelectField.d.ts +8 -0
  615. package/dist/types/hookForm/FormTextField.d.ts +8 -0
  616. package/dist/types/hookForm/SubmitButton.d.ts +21 -0
  617. package/dist/types/hookForm/applyServerProblem.d.ts +10 -0
  618. package/dist/types/hookForm/useHookFormField.d.ts +13 -0
  619. package/dist/types/i18next.d.ts +1 -0
  620. package/dist/types/identifiers.d.ts +2 -0
  621. package/dist/types/inbox/InboxLayout.d.ts +26 -0
  622. package/dist/types/inbox/MessageList.d.ts +27 -0
  623. package/dist/types/inbox/MessageView.d.ts +23 -0
  624. package/dist/types/inbox/inboxDates.d.ts +6 -0
  625. package/dist/types/index.d.ts +84 -0
  626. package/dist/types/inputs/CatalogInput.d.ts +41 -0
  627. package/dist/types/inputs/ColorInput.d.ts +28 -0
  628. package/dist/types/inputs/FieldFrame.d.ts +14 -0
  629. package/dist/types/inputs/FormSection.d.ts +29 -0
  630. package/dist/types/inputs/NumberInput.d.ts +36 -0
  631. package/dist/types/inputs/SelectInput.d.ts +34 -0
  632. package/dist/types/inputs/TextInput.d.ts +60 -0
  633. package/dist/types/inputs/colorContrast.d.ts +18 -0
  634. package/dist/types/inputs/formLayoutContext.d.ts +3 -0
  635. package/dist/types/inputs/numberText.d.ts +25 -0
  636. package/dist/types/kanban/KanbanBoard.d.ts +33 -0
  637. package/dist/types/kanban/kanbanMoves.d.ts +38 -0
  638. package/dist/types/kanban.d.ts +2 -0
  639. package/dist/types/laravel/csrfRetry.d.ts +21 -0
  640. package/dist/types/laravel.d.ts +1 -0
  641. package/dist/types/lastListUrl.d.ts +20 -0
  642. package/dist/types/locales/en.d.ts +711 -0
  643. package/dist/types/locales/es.d.ts +711 -0
  644. package/dist/types/maps/MapView.d.ts +32 -0
  645. package/dist/types/maps/mapMarkers.d.ts +23 -0
  646. package/dist/types/maps.d.ts +2 -0
  647. package/dist/types/money/money.d.ts +203 -0
  648. package/dist/types/money.d.ts +1 -0
  649. package/dist/types/navigation/appMenu.d.ts +92 -0
  650. package/dist/types/navigation/useMenuBadges.d.ts +16 -0
  651. package/dist/types/navigation.d.ts +22 -0
  652. package/dist/types/navigationTrail.d.ts +49 -0
  653. package/dist/types/next.d.ts +1 -0
  654. package/dist/types/observability/buildWatch.d.ts +28 -0
  655. package/dist/types/observability/logger.d.ts +19 -0
  656. package/dist/types/observability/publishedBuild.d.ts +35 -0
  657. package/dist/types/observability/usePublishedBuildWatch.d.ts +16 -0
  658. package/dist/types/passkeys.d.ts +1 -0
  659. package/dist/types/periodRanges.d.ts +32 -0
  660. package/dist/types/problems.d.ts +31 -0
  661. package/dist/types/pwa/InstallAppSetting.d.ts +1 -0
  662. package/dist/types/pwa/InstallInstructionsDialog.d.ts +18 -0
  663. package/dist/types/pwa/InstallPromptBanner.d.ts +7 -0
  664. package/dist/types/pwa/installInstructions.d.ts +52 -0
  665. package/dist/types/pwa/useInstallPrompt.d.ts +12 -0
  666. package/dist/types/react-hook-form.d.ts +11 -0
  667. package/dist/types/react-router.d.ts +2 -0
  668. package/dist/types/security/ActivityLog.d.ts +31 -0
  669. package/dist/types/security/RecoveryCodesDialog.d.ts +11 -0
  670. package/dist/types/security/SessionsCard.d.ts +22 -0
  671. package/dist/types/security/passkeys.d.ts +18 -0
  672. package/dist/types/table.d.ts +1 -0
  673. package/dist/types/theme/androidDevice.d.ts +11 -0
  674. package/dist/types/theme/appleTracking.d.ts +17 -0
  675. package/dist/types/theme/components/MuiAppBar.d.ts +13 -0
  676. package/dist/types/theme/components/MuiBackdrop.d.ts +11 -0
  677. package/dist/types/theme/components/MuiButton.d.ts +27 -0
  678. package/dist/types/theme/components/MuiButtonBase.d.ts +14 -0
  679. package/dist/types/theme/components/MuiChip.d.ts +29 -0
  680. package/dist/types/theme/components/MuiDataGrid.d.ts +45 -0
  681. package/dist/types/theme/components/MuiDrawer.d.ts +13 -0
  682. package/dist/types/theme/components/MuiMenuItem.d.ts +17 -0
  683. package/dist/types/theme/components/MuiTypography.d.ts +20 -0
  684. package/dist/types/theme/components/glassComponents.d.ts +8 -0
  685. package/dist/types/theme/components/minimalComponents.d.ts +22 -0
  686. package/dist/types/theme/components/paletteOf.d.ts +5 -0
  687. package/dist/types/theme/createToolkitTheme.d.ts +48 -0
  688. package/dist/types/theme/glassSurface.d.ts +247 -0
  689. package/dist/types/theme/glassToasterStyles.d.ts +7 -0
  690. package/dist/types/theme/mergeComponents.d.ts +15 -0
  691. package/dist/types/theme/stackcraftPalette.d.ts +142 -0
  692. package/dist/types/theme/toolkitComponents.d.ts +4 -0
  693. package/dist/types/timeline.d.ts +2 -0
  694. package/dist/types/toolkit/ToolkitProvider.d.ts +31 -0
  695. package/dist/types/toolkit/browserNavigation.d.ts +32 -0
  696. package/dist/types/toolkit/toolkitContext.d.ts +28 -0
  697. package/dist/types/toolkit/toolkitSettings.d.ts +68 -0
  698. package/dist/types/toolkit/useToolkitTranslation.d.ts +10 -0
  699. package/dist/types/ui/actions/CopyButton.d.ts +13 -0
  700. package/dist/types/ui/actions/DownloadMenu.d.ts +50 -0
  701. package/dist/types/ui/actions/SecretField.d.ts +13 -0
  702. package/dist/types/ui/filters/DateRangeFilter.d.ts +16 -0
  703. package/dist/types/ui/filters/PeriodRangeSelector.d.ts +28 -0
  704. package/dist/types/ui/filters/QuickFilters.d.ts +21 -0
  705. package/dist/types/ui/filters/SegmentedControl.d.ts +44 -0
  706. package/dist/types/ui/index.d.ts +33 -0
  707. package/dist/types/ui/labels/DictionaryText.d.ts +7 -0
  708. package/dist/types/ui/labels/StatusChip.d.ts +21 -0
  709. package/dist/types/ui/labels/Tag.d.ts +19 -0
  710. package/dist/types/ui/layout/CollapsibleSection.d.ts +15 -0
  711. package/dist/types/ui/layout/ContentDialog.d.ts +13 -0
  712. package/dist/types/ui/layout/DefinitionList.d.ts +15 -0
  713. package/dist/types/ui/layout/DetailHeader.d.ts +15 -0
  714. package/dist/types/ui/layout/ErrorPage.d.ts +22 -0
  715. package/dist/types/ui/layout/FullPageLoader.d.ts +1 -0
  716. package/dist/types/ui/layout/GlassLensFilter.d.ts +1 -0
  717. package/dist/types/ui/layout/GlassPanel.d.ts +11 -0
  718. package/dist/types/ui/layout/PageHeader.d.ts +15 -0
  719. package/dist/types/ui/layout/PageHeading.d.ts +18 -0
  720. package/dist/types/ui/layout/ProfileHeader.d.ts +17 -0
  721. package/dist/types/ui/layout/ScrollableRow.d.ts +33 -0
  722. package/dist/types/ui/layout/SectionCard.d.ts +11 -0
  723. package/dist/types/ui/layout/appBarHeight.d.ts +13 -0
  724. package/dist/types/ui/metrics/BarList.d.ts +19 -0
  725. package/dist/types/ui/metrics/CalendarHeatmap.d.ts +28 -0
  726. package/dist/types/ui/metrics/ChartTooltip.d.ts +5 -0
  727. package/dist/types/ui/metrics/ColumnChart.d.ts +35 -0
  728. package/dist/types/ui/metrics/MetricCard.d.ts +31 -0
  729. package/dist/types/ui/metrics/TableToggle.d.ts +7 -0
  730. package/dist/types/ui/metrics/barListLabels.d.ts +17 -0
  731. package/dist/types/ui/metrics/heatmapScale.d.ts +45 -0
  732. package/dist/types/ui/navigation/BackButton.d.ts +11 -0
  733. package/dist/types/ui/navigation/ColorSchemeToggle.d.ts +7 -0
  734. package/dist/types/ui/navigation/DocumentTitle.d.ts +6 -0
  735. package/dist/types/ui/navigation/FontSizeToggle.d.ts +6 -0
  736. package/dist/types/ui/navigation/LanguageToggle.d.ts +8 -0
  737. package/dist/types/ui/navigation/PageBreadcrumbs.d.ts +9 -0
  738. package/dist/types/ui/navigation/colorMode.d.ts +18 -0
  739. package/dist/types/ui/navigation/fontSizeLevels.d.ts +25 -0
  740. package/dist/types/ui/navigation/useFontSize.d.ts +10 -0
  741. package/dist/types/ui/timeline/GroupedTimeline.d.ts +38 -0
  742. package/dist/types/ui/timeline/timelineDot.d.ts +19 -0
  743. package/dist/types/upload/FileDropzone.d.ts +34 -0
  744. package/dist/types/upload/fileRules.d.ts +51 -0
  745. package/dist/types/upload/uploadMachine.d.ts +23 -0
  746. package/dist/types/upload/uploadWithProgress.d.ts +16 -0
  747. package/dist/ui/actions/CopyButton.js +28 -0
  748. package/dist/ui/actions/CopyButton.js.map +1 -0
  749. package/dist/ui/actions/DownloadMenu.js +163 -0
  750. package/dist/ui/actions/DownloadMenu.js.map +1 -0
  751. package/dist/ui/actions/SecretField.js +57 -0
  752. package/dist/ui/actions/SecretField.js.map +1 -0
  753. package/dist/ui/filters/DateRangeFilter.js +86 -0
  754. package/dist/ui/filters/DateRangeFilter.js.map +1 -0
  755. package/dist/ui/filters/PeriodRangeSelector.js +56 -0
  756. package/dist/ui/filters/PeriodRangeSelector.js.map +1 -0
  757. package/dist/ui/filters/QuickFilters.js +91 -0
  758. package/dist/ui/filters/QuickFilters.js.map +1 -0
  759. package/dist/ui/filters/SegmentedControl.js +80 -0
  760. package/dist/ui/filters/SegmentedControl.js.map +1 -0
  761. package/dist/ui/labels/DictionaryText.js +11 -0
  762. package/dist/ui/labels/DictionaryText.js.map +1 -0
  763. package/dist/ui/labels/StatusChip.js +52 -0
  764. package/dist/ui/labels/StatusChip.js.map +1 -0
  765. package/dist/ui/labels/Tag.js +26 -0
  766. package/dist/ui/labels/Tag.js.map +1 -0
  767. package/dist/ui/layout/CollapsibleSection.js +48 -0
  768. package/dist/ui/layout/CollapsibleSection.js.map +1 -0
  769. package/dist/ui/layout/ContentDialog.js +97 -0
  770. package/dist/ui/layout/ContentDialog.js.map +1 -0
  771. package/dist/ui/layout/DefinitionList.js +30 -0
  772. package/dist/ui/layout/DefinitionList.js.map +1 -0
  773. package/dist/ui/layout/DetailHeader.js +27 -0
  774. package/dist/ui/layout/DetailHeader.js.map +1 -0
  775. package/dist/ui/layout/ErrorPage.js +40 -0
  776. package/dist/ui/layout/ErrorPage.js.map +1 -0
  777. package/dist/ui/layout/FullPageLoader.js +13 -0
  778. package/dist/ui/layout/FullPageLoader.js.map +1 -0
  779. package/dist/ui/layout/GlassLensFilter.js +53 -0
  780. package/dist/ui/layout/GlassLensFilter.js.map +1 -0
  781. package/dist/ui/layout/GlassPanel.js +18 -0
  782. package/dist/ui/layout/GlassPanel.js.map +1 -0
  783. package/dist/ui/layout/PageHeader.js +23 -0
  784. package/dist/ui/layout/PageHeader.js.map +1 -0
  785. package/dist/ui/layout/PageHeading.js +51 -0
  786. package/dist/ui/layout/PageHeading.js.map +1 -0
  787. package/dist/ui/layout/ProfileHeader.js +64 -0
  788. package/dist/ui/layout/ProfileHeader.js.map +1 -0
  789. package/dist/ui/layout/ScrollableRow.js +156 -0
  790. package/dist/ui/layout/ScrollableRow.js.map +1 -0
  791. package/dist/ui/layout/SectionCard.js +18 -0
  792. package/dist/ui/layout/SectionCard.js.map +1 -0
  793. package/dist/ui/layout/appBarHeight.js +42 -0
  794. package/dist/ui/layout/appBarHeight.js.map +1 -0
  795. package/dist/ui/metrics/BarList.js +89 -0
  796. package/dist/ui/metrics/BarList.js.map +1 -0
  797. package/dist/ui/metrics/CalendarHeatmap.js +131 -0
  798. package/dist/ui/metrics/CalendarHeatmap.js.map +1 -0
  799. package/dist/ui/metrics/ChartTooltip.js +16 -0
  800. package/dist/ui/metrics/ChartTooltip.js.map +1 -0
  801. package/dist/ui/metrics/ColumnChart.js +110 -0
  802. package/dist/ui/metrics/ColumnChart.js.map +1 -0
  803. package/dist/ui/metrics/MetricCard.js +64 -0
  804. package/dist/ui/metrics/MetricCard.js.map +1 -0
  805. package/dist/ui/metrics/TableToggle.js +13 -0
  806. package/dist/ui/metrics/TableToggle.js.map +1 -0
  807. package/dist/ui/metrics/barListLabels.js +9 -0
  808. package/dist/ui/metrics/barListLabels.js.map +1 -0
  809. package/dist/ui/metrics/heatmapScale.js +67 -0
  810. package/dist/ui/metrics/heatmapScale.js.map +1 -0
  811. package/dist/ui/navigation/BackButton.js +28 -0
  812. package/dist/ui/navigation/BackButton.js.map +1 -0
  813. package/dist/ui/navigation/ColorSchemeToggle.js +37 -0
  814. package/dist/ui/navigation/ColorSchemeToggle.js.map +1 -0
  815. package/dist/ui/navigation/DocumentTitle.js +11 -0
  816. package/dist/ui/navigation/DocumentTitle.js.map +1 -0
  817. package/dist/ui/navigation/FontSizeToggle.js +40 -0
  818. package/dist/ui/navigation/FontSizeToggle.js.map +1 -0
  819. package/dist/ui/navigation/LanguageToggle.js +27 -0
  820. package/dist/ui/navigation/LanguageToggle.js.map +1 -0
  821. package/dist/ui/navigation/PageBreadcrumbs.js +51 -0
  822. package/dist/ui/navigation/PageBreadcrumbs.js.map +1 -0
  823. package/dist/ui/navigation/colorMode.js +13 -0
  824. package/dist/ui/navigation/colorMode.js.map +1 -0
  825. package/dist/ui/navigation/fontSizeLevels.js +24 -0
  826. package/dist/ui/navigation/fontSizeLevels.js.map +1 -0
  827. package/dist/ui/navigation/useFontSize.js +44 -0
  828. package/dist/ui/navigation/useFontSize.js.map +1 -0
  829. package/dist/ui/timeline/GroupedTimeline.js +104 -0
  830. package/dist/ui/timeline/GroupedTimeline.js.map +1 -0
  831. package/dist/ui/timeline/timelineDot.js +20 -0
  832. package/dist/ui/timeline/timelineDot.js.map +1 -0
  833. package/dist/upload/FileDropzone.js +143 -0
  834. package/dist/upload/FileDropzone.js.map +1 -0
  835. package/dist/upload/fileRules.js +62 -0
  836. package/dist/upload/fileRules.js.map +1 -0
  837. package/dist/upload/uploadMachine.js +73 -0
  838. package/dist/upload/uploadMachine.js.map +1 -0
  839. package/dist/upload/uploadWithProgress.js +45 -0
  840. package/dist/upload/uploadWithProgress.js.map +1 -0
  841. package/package.json +303 -5
@@ -0,0 +1,407 @@
1
+ "use client";
2
+ import { jsxs, jsx } from "react/jsx-runtime";
3
+ import { useState, useRef, useMemo, useEffect } from "react";
4
+ import { useMachine } from "@xstate/react";
5
+ import { useToolkitTranslation } from "../toolkit/useToolkitTranslation.js";
6
+ import Alert from "@mui/material/Alert";
7
+ import Box from "@mui/material/Box";
8
+ import Button from "@mui/material/Button";
9
+ import InputAdornment from "@mui/material/InputAdornment";
10
+ import Paper from "@mui/material/Paper";
11
+ import Stack from "@mui/material/Stack";
12
+ import TextField from "@mui/material/TextField";
13
+ import Typography from "@mui/material/Typography";
14
+ import SearchIcon from "@mui/icons-material/Search";
15
+ import { DataGrid, GridPagination } from "@mui/x-data-grid";
16
+ import { enUS, esES } from "@mui/x-data-grid/locales";
17
+ import EmptyState from "./EmptyState.js";
18
+ import FilterChips from "./FilterChips.js";
19
+ import GoToPage from "./GoToPage.js";
20
+ import { TableFilterContext } from "./filterContext.js";
21
+ import { tableMachine, buildTableActors } from "./tableMachine.js";
22
+ import { useDebouncedFilter } from "./useDebouncedFilter.js";
23
+ import { useTableState, isFilterActive, FILTER_KINDS } from "./useTableState.js";
24
+ import BarActions from "../appShell/BarActions.js";
25
+ import { BAR_CAPSULE_HEIGHT_PIXELS } from "../appShell/BarCapsule.js";
26
+ import { PHONE_MEDIA_QUERY } from "../appShell/shellSizes.js";
27
+ import { formatNumber } from "../formatting.js";
28
+ import { materialBackgroundOf } from "../theme/glassSurface.js";
29
+ import QuickFilters from "../ui/filters/QuickFilters.js";
30
+ import Tag from "../ui/labels/Tag.js";
31
+ const DATA_GRID_TEXT_BY_LANGUAGE = {
32
+ es: esES.components.MuiDataGrid.defaultProps.localeText,
33
+ en: enUS.components.MuiDataGrid.defaultProps.localeText
34
+ };
35
+ function readCspNonce() {
36
+ if (typeof document === "undefined") {
37
+ return void 0;
38
+ }
39
+ return document.querySelector('meta[property="csp-nonce"]')?.nonce || void 0;
40
+ }
41
+ const ROW_HEIGHT_PIXELS = 36;
42
+ const COLUMN_HEADER_HEIGHT_PIXELS = 39;
43
+ const FOOTER_HEIGHT_PIXELS = 52;
44
+ const GRID_BORDER_PIXELS = 2;
45
+ const HEIGHT_SLACK_PIXELS = 2;
46
+ const DATA_GRID_DENSITY = "compact";
47
+ const SEARCH_BOX_MIN_WIDTH_PIXELS = 400;
48
+ const SEARCH_IN_BAR_WIDTH_PIXELS = 380;
49
+ const STRIPED_ROW_CLASS = "server-table-row--striped";
50
+ const FIXED_CELL_Z_INDEX = 30;
51
+ const FIXED_HEADER_Z_INDEX = 40;
52
+ function fixedColumnSxOf(theme, field) {
53
+ const { palette } = theme.vars ?? theme;
54
+ const paper = palette.background.paper;
55
+ const divider = `1px solid ${palette.divider}`;
56
+ const ownBandHeader = `.MuiDataGrid-columnHeader[data-fields="|-${field}-|"]`;
57
+ const isMaterialContent = Boolean(theme.toolkit?.glass?.surfaces);
58
+ const stickyBackground = { backgroundColor: "inherit", ...isMaterialContent ? materialBackgroundOf(theme, { thick: true }) : { backgroundImage: `linear-gradient(${paper}, ${paper})` } };
59
+ return {
60
+ "& :where(.MuiDataGrid-row)": { backgroundColor: isMaterialContent ? "transparent" : paper },
61
+ [`& .MuiDataGrid-cell[data-field="${field}"]`]: {
62
+ position: "sticky",
63
+ left: 0,
64
+ zIndex: FIXED_CELL_Z_INDEX,
65
+ borderRight: divider,
66
+ ...stickyBackground,
67
+ "&::before": { content: '""', position: "absolute", inset: 0, zIndex: -1, backgroundColor: "inherit" }
68
+ },
69
+ [`& :where(.MuiDataGrid-columnHeader[data-field="${field}"], ${ownBandHeader})`]: isMaterialContent ? materialBackgroundOf(theme, { thick: true }) : { backgroundColor: paper },
70
+ [`& .MuiDataGrid-columnHeader[data-field="${field}"], & ${ownBandHeader}`]: {
71
+ position: "sticky",
72
+ left: 0,
73
+ zIndex: FIXED_HEADER_Z_INDEX,
74
+ borderRight: divider
75
+ }
76
+ };
77
+ }
78
+ const COMPACT_DENSITY_FACTOR = 0.7;
79
+ function QuickFilterRow({ quickFilter, facets, total, filters, isMultiple, setFilter, setFilters }) {
80
+ const { t } = useToolkitTranslation("table");
81
+ const facetOptions = facets[quickFilter.facetKey ?? quickFilter.field] ?? [];
82
+ const orderedOptions = quickFilter.order ? quickFilter.order.map((optionValue) => facetOptions.find((option) => option.value === optionValue) ?? { value: optionValue, total: 0 }) : facetOptions;
83
+ const currentValue = filters[quickFilter.field];
84
+ const isOverridden = quickFilter.isOverridden?.(filters) ?? false;
85
+ let selectedValue = currentValue ?? "";
86
+ if (isOverridden) {
87
+ selectedValue = "__overridden__";
88
+ } else if (isMultiple) {
89
+ selectedValue = Array.isArray(currentValue) && currentValue.length === 1 ? currentValue[0] : "";
90
+ }
91
+ let allCount = facetOptions.reduce((sum, option) => sum + (option.total ?? 0), 0) || total;
92
+ if (quickFilter.allCountKey && typeof facets[quickFilter.allCountKey] === "number") {
93
+ allCount = facets[quickFilter.allCountKey];
94
+ } else if (quickFilter.hideAllCount) {
95
+ allCount = void 0;
96
+ }
97
+ const handleChange = (nextValue) => {
98
+ const pickedValue = isMultiple ? nextValue ? [nextValue] : [] : nextValue;
99
+ if (quickFilter.clears) {
100
+ setFilters({ [quickFilter.field]: pickedValue, ...quickFilter.clears });
101
+ } else {
102
+ setFilter(quickFilter.field, pickedValue);
103
+ }
104
+ };
105
+ return /* @__PURE__ */ jsx(
106
+ QuickFilters,
107
+ {
108
+ caption: quickFilter.caption,
109
+ ariaLabel: quickFilter.caption,
110
+ value: selectedValue,
111
+ onChange: handleChange,
112
+ extra: quickFilter.renderExtra?.({ filters, setFilters }),
113
+ options: [
114
+ { value: "", label: quickFilter.allLabel ?? t("quickFilters.all"), count: allCount },
115
+ ...orderedOptions.map((option) => ({
116
+ value: option.value,
117
+ label: quickFilter.renderLabel ? quickFilter.renderLabel(option.value) : option.value,
118
+ count: option.total
119
+ }))
120
+ ]
121
+ }
122
+ );
123
+ }
124
+ function ServerTable({
125
+ fetchPage,
126
+ queryKey,
127
+ enabled = true,
128
+ columns,
129
+ filterKinds = {},
130
+ filterDefaults = {},
131
+ chipConfig = [],
132
+ quickFilters = [],
133
+ searchField = "contains",
134
+ searchPlaceholder,
135
+ searchInBar = false,
136
+ collapseSearchInBar = true,
137
+ emptyLabel,
138
+ countLabel,
139
+ pageSizeOptions = [10, 25, 50, 100],
140
+ defaultPageSize = 25,
141
+ getRowId,
142
+ prefix,
143
+ refreshToken,
144
+ footer,
145
+ toolbarExtra,
146
+ header,
147
+ beforeQuickFilters,
148
+ columnGroupingModel,
149
+ getRowClassName,
150
+ isRowVisible,
151
+ hideFooterWhenAllRowsFit = false,
152
+ showGoToPage = false,
153
+ striped = false,
154
+ getRowHeight,
155
+ gridSx,
156
+ maxGridHeight = null,
157
+ ariaLabel,
158
+ fixedColumn
159
+ }) {
160
+ const { t, language, changeLanguage } = useToolkitTranslation("table");
161
+ const tableState = useTableState({ prefix, filterDefaults, filterKinds, defaultPageSize });
162
+ const { filters, sortOrders, page, pageSize } = tableState;
163
+ const [isSearchFocused, setIsSearchFocused] = useState(false);
164
+ const [searchDraft, setSearchDraft] = useDebouncedFilter(
165
+ searchField ? filters[searchField] : "",
166
+ (value) => searchField && tableState.setFilter(searchField, value)
167
+ );
168
+ const latestFetchPage = useRef(fetchPage);
169
+ latestFetchPage.current = fetchPage;
170
+ const [tableSnapshot, sendToTable] = useMachine(
171
+ tableMachine.provide({ actors: buildTableActors((params, signal) => latestFetchPage.current(params, signal)) })
172
+ );
173
+ const { rows, total, facets, capped, error } = tableSnapshot.context;
174
+ const visibleRows = useMemo(() => isRowVisible ? rows.filter(isRowVisible) : rows, [rows, isRowVisible]);
175
+ const isLoading = tableSnapshot.matches("loading") || tableSnapshot.matches("idle");
176
+ const requestParams = { filters, sortOrders, page, pageSize };
177
+ const requestFingerprint = JSON.stringify({ queryKey, enabled, refreshToken, ...requestParams });
178
+ useEffect(() => {
179
+ if (!queryKey || !enabled) {
180
+ return;
181
+ }
182
+ sendToTable({ type: "FETCH", params: requestParams });
183
+ }, [requestFingerprint]);
184
+ const toggleSort = (column) => {
185
+ const currentSort = sortOrders.find((sortOrder) => sortOrder.column === column);
186
+ if (!currentSort) {
187
+ tableState.setSort([{ column, direction: "desc" }]);
188
+ } else if (currentSort.direction === "desc") {
189
+ tableState.setSort([{ column, direction: "asc" }]);
190
+ } else {
191
+ tableState.setSort([]);
192
+ }
193
+ };
194
+ const hasActiveFilters = Object.entries(filters).some(([field, value]) => field !== searchField && isFilterActive(filterKinds[field], value));
195
+ const quickActiveCount = quickFilters.filter((quickFilter) => !chipConfig.some((chipDeclaration) => chipDeclaration.key === quickFilter.field) && JSON.stringify(filters[quickFilter.field] ?? "") !== JSON.stringify(filterDefaults[quickFilter.field] ?? "")).length;
196
+ const tableFilterValue = useMemo(() => ({
197
+ filters,
198
+ setFilter: tableState.setFilter,
199
+ clearFilter: tableState.clearFilter,
200
+ sortOrders,
201
+ toggleSort,
202
+ clearSort: () => tableState.setSort([]),
203
+ facets
204
+ // eslint-disable-next-line react-hooks/exhaustive-deps
205
+ }), [filters, sortOrders, facets]);
206
+ let placeholderRowCount = 0;
207
+ if (visibleRows.length === 0) {
208
+ placeholderRowCount = isLoading ? Math.min(pageSize, 8) : 3;
209
+ }
210
+ let rowsHeight = placeholderRowCount * ROW_HEIGHT_PIXELS;
211
+ for (const row of visibleRows) {
212
+ const requestedRowHeight = getRowHeight?.({ id: getRowId ? getRowId(row) : row.id, model: row, densityFactor: COMPACT_DENSITY_FACTOR });
213
+ rowsHeight += typeof requestedRowHeight === "number" ? requestedRowHeight : ROW_HEIGHT_PIXELS;
214
+ }
215
+ const headerHeight = columnGroupingModel ? 2 * COLUMN_HEADER_HEIGHT_PIXELS : COLUMN_HEADER_HEIGHT_PIXELS;
216
+ const isFooterHidden = hideFooterWhenAllRowsFit && page === 0 && total <= pageSize;
217
+ const footerHeight = isFooterHidden ? 0 : FOOTER_HEIGHT_PIXELS + GRID_BORDER_PIXELS;
218
+ const contentHeight = headerHeight + rowsHeight + footerHeight + HEIGHT_SLACK_PIXELS;
219
+ const gridHeight = maxGridHeight ? Math.min(contentHeight, maxGridHeight) : contentHeight;
220
+ const gridText = DATA_GRID_TEXT_BY_LANGUAGE[language] ?? DATA_GRID_TEXT_BY_LANGUAGE.es;
221
+ const formattedTotal = formatNumber(total);
222
+ const countText = countLabel ? countLabel(total) : t("count.records", { count: total, total: formattedTotal });
223
+ const searchText = searchPlaceholder ?? t("search.placeholder");
224
+ const isSearchCompact = searchInBar && collapseSearchInBar && !isSearchFocused && !searchDraft;
225
+ const searchBox = searchField && /* @__PURE__ */ jsx(
226
+ TextField,
227
+ {
228
+ type: "search",
229
+ size: "small",
230
+ value: searchDraft,
231
+ onChange: (event) => setSearchDraft(event.target.value),
232
+ onFocus: () => setIsSearchFocused(true),
233
+ onBlur: () => setIsSearchFocused(false),
234
+ onKeyDown: (event) => {
235
+ if (event.key === "Escape") {
236
+ setSearchDraft("");
237
+ event.currentTarget.querySelector("input")?.blur();
238
+ }
239
+ },
240
+ placeholder: searchText,
241
+ sx: { minWidth: { xs: 0, md: SEARCH_BOX_MIN_WIDTH_PIXELS } },
242
+ slotProps: {
243
+ input: { startAdornment: /* @__PURE__ */ jsx(InputAdornment, { position: "start", children: /* @__PURE__ */ jsx(SearchIcon, { fontSize: "small" }) }) },
244
+ htmlInput: { "aria-label": searchText }
245
+ }
246
+ }
247
+ );
248
+ return /* @__PURE__ */ jsxs(TableFilterContext, { value: tableFilterValue, children: [
249
+ /* @__PURE__ */ jsxs(Stack, { direction: { xs: "column", md: "row" }, spacing: 2, sx: { mb: 1.5, alignItems: { md: "center" } }, children: [
250
+ searchBox && !searchInBar && searchBox,
251
+ searchBox && searchInBar && /* @__PURE__ */ jsx(
252
+ BarActions,
253
+ {
254
+ label: searchText,
255
+ bare: true,
256
+ order: 0,
257
+ sx: (theme) => ({
258
+ // en el teléfono flota arriba junto a las demás cápsulas. Su lugar SIEMPRE ocupa lo libre del
259
+ // renglón y la caja va pegada a la derecha: así se abre de derecha a izquierda y regresa igual
260
+ // (el ancho pasa de 48 px a 100 % con transición). OJO: antes el lugar brincaba de golpe
261
+ // (flex-grow no se anima) y la caja crecía de izquierda a derecha; se veía muy mal. El hueco de
262
+ // la izquierda deja pasar el dedo a lo de abajo; solo la caja lo recibe
263
+ [PHONE_MEDIA_QUERY]: {
264
+ flexGrow: 1,
265
+ minWidth: 0,
266
+ justifyContent: "flex-end",
267
+ pointerEvents: "none",
268
+ "& .MuiTextField-root": { pointerEvents: "auto" }
269
+ },
270
+ "& .MuiTextField-root": {
271
+ width: isSearchCompact ? BAR_CAPSULE_HEIGHT_PIXELS : SEARCH_IN_BAR_WIDTH_PIXELS,
272
+ minWidth: 0,
273
+ transition: theme.transitions.create("width", { duration: theme.transitions.duration.short }),
274
+ "@media (prefers-reduced-motion: reduce)": { transition: "none" },
275
+ [PHONE_MEDIA_QUERY]: { width: isSearchCompact ? BAR_CAPSULE_HEIGHT_PIXELS : "100%" }
276
+ },
277
+ "& .MuiFormControl-root .MuiInputBase-root.MuiOutlinedInput-root": {
278
+ height: BAR_CAPSULE_HEIGHT_PIXELS,
279
+ borderRadius: "999px",
280
+ cursor: isSearchCompact ? "pointer" : "text"
281
+ },
282
+ "& .MuiInputAdornment-root": { pointerEvents: "none" },
283
+ "& input::placeholder": { opacity: isSearchCompact ? 0 : void 0 }
284
+ }),
285
+ children: searchBox
286
+ }
287
+ ),
288
+ header ? /* @__PURE__ */ jsx(Box, { sx: { flexGrow: 1, minWidth: 0 }, children: header({ countText: capped ? t("count.capped", { total: formattedTotal }) : countText, total, capped }) }) : (
289
+ // NOTA: el extra va pegado al conteo y no empujado a la orilla (ml: 'auto'): en escritorio quedaba a todo
290
+ // el ancho de distancia y no se leía como parte de la misma tabla (caso del selector de año)
291
+ /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 2, useFlexGap: true, sx: { flexGrow: 1, alignItems: "center", flexWrap: "wrap" }, children: [
292
+ /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 1, sx: { alignItems: "center" }, children: [
293
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "text.secondary", role: "status", "aria-live": "polite", children: capped ? t("count.capped", { total: formattedTotal }) : countText }),
294
+ capped && /* @__PURE__ */ jsx(Tag, { label: t("count.cappedTag"), color: "warning", tooltip: t("count.cappedTooltip") })
295
+ ] }),
296
+ toolbarExtra
297
+ ] })
298
+ )
299
+ ] }),
300
+ beforeQuickFilters,
301
+ quickFilters.map((quickFilter) => /* @__PURE__ */ jsx(
302
+ QuickFilterRow,
303
+ {
304
+ quickFilter,
305
+ facets,
306
+ total,
307
+ filters,
308
+ isMultiple: filterKinds[quickFilter.field] === FILTER_KINDS.multiSelect,
309
+ setFilter: tableState.setFilter,
310
+ setFilters: tableState.setFilters
311
+ },
312
+ quickFilter.field
313
+ )),
314
+ /* @__PURE__ */ jsx(
315
+ FilterChips,
316
+ {
317
+ chipConfig,
318
+ filters,
319
+ quickActiveCount,
320
+ onSetFilter: tableState.setFilter,
321
+ onClearAll: tableState.clearAll
322
+ }
323
+ ),
324
+ error && /* @__PURE__ */ jsx(
325
+ Alert,
326
+ {
327
+ severity: "error",
328
+ role: "alert",
329
+ sx: { mb: 1 },
330
+ action: /* @__PURE__ */ jsx(Button, { color: "inherit", size: "small", onClick: () => sendToTable({ type: "FETCH", params: requestParams }), children: t("common:actions.retry") }),
331
+ children: error.message ?? t("error.generic")
332
+ }
333
+ ),
334
+ /* @__PURE__ */ jsx(Paper, { variant: "outlined", sx: { width: "100%", minWidth: 0, overflow: "hidden" }, children: /* @__PURE__ */ jsx(
335
+ DataGrid,
336
+ {
337
+ rows: visibleRows,
338
+ columns,
339
+ columnGroupingModel,
340
+ getRowId,
341
+ getRowClassName: (params) => [
342
+ getRowClassName?.(params),
343
+ striped && params.indexRelativeToCurrentPage % 2 === 1 ? STRIPED_ROW_CLASS : ""
344
+ ].filter(Boolean).join(" "),
345
+ getRowHeight,
346
+ "aria-label": ariaLabel,
347
+ nonce: readCspNonce(),
348
+ loading: isLoading,
349
+ paginationMode: "server",
350
+ sortingMode: "server",
351
+ filterMode: "server",
352
+ rowCount: total,
353
+ paginationModel: { page, pageSize },
354
+ onPaginationModelChange: (paginationModel) => {
355
+ if (paginationModel.pageSize !== pageSize) {
356
+ tableState.setPageSize(paginationModel.pageSize);
357
+ } else {
358
+ tableState.setPage(paginationModel.page);
359
+ }
360
+ },
361
+ pageSizeOptions,
362
+ hideFooter: isFooterHidden,
363
+ disableColumnMenu: true,
364
+ disableRowSelectionOnClick: true,
365
+ disableVirtualization: Boolean(fixedColumn),
366
+ density: DATA_GRID_DENSITY,
367
+ localeText: { ...gridText, noRowsLabel: emptyLabel ?? t("empty.default") },
368
+ slotProps: {
369
+ // con filas ya pintadas, barra delgada arriba sin tapar lo que se lee; con la tabla vacía, esqueleto
370
+ loadingOverlay: { variant: "linear-progress", noRowsVariant: "skeleton" }
371
+ },
372
+ slots: {
373
+ // "ir a la página N" (solo si se pide) pegado a la paginación: ahí lo busca quien ya está leyendo
374
+ // "51-75 de 1,234". Sin él, la paginación de siempre del DataGrid
375
+ ...showGoToPage && {
376
+ pagination: () => /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 1, sx: { alignItems: "center" }, children: [
377
+ /* @__PURE__ */ jsx(GoToPage, { page, pageCount: Math.ceil(total / pageSize) || 1, onChange: tableState.setPage }),
378
+ /* @__PURE__ */ jsx(GridPagination, {})
379
+ ] })
380
+ },
381
+ noResultsOverlay: () => /* @__PURE__ */ jsx(EmptyState, { filtered: true, label: emptyLabel, onClearFilters: tableState.clearAll }),
382
+ noRowsOverlay: () => /* @__PURE__ */ jsx(EmptyState, { filtered: hasActiveFilters, label: emptyLabel, onClearFilters: tableState.clearAll })
383
+ },
384
+ sx: [{
385
+ // IMPORTANTE: el alto va en la raíz del DataGrid y no en la caja de afuera: las variables
386
+ // --DataGrid-hasScrollX y --DataGrid-scrollbarSize solo existen en la raíz. Cuando las columnas no
387
+ // caben (historial a 390 px) la barra horizontal ocupa su alto dentro de la tabla y, sin sumarlo, los
388
+ // renglones se desplazaban 13 px por dentro. Con barras superpuestas (teléfono, trackpad) mide 0
389
+ height: `calc(${gridHeight}px + var(--DataGrid-hasScrollX, 0) * var(--DataGrid-scrollbarSize, 0px))`,
390
+ border: 0,
391
+ // todo centrado verticalmente: el texto suelto se pegaba arriba y los chips quedaban a media altura
392
+ "& .MuiDataGrid-cell": { display: "flex", alignItems: "center" },
393
+ "& .MuiDataGrid-columnHeader": { alignItems: "center" },
394
+ // cebra: el color del hover del tema
395
+ [`& .${STRIPED_ROW_CLASS}`]: { bgcolor: "action.hover" },
396
+ [`& .${STRIPED_ROW_CLASS}:hover`]: { bgcolor: "action.selected" },
397
+ ...gridSx
398
+ }, (theme) => fixedColumn ? fixedColumnSxOf(theme, fixedColumn) : {}]
399
+ }
400
+ ) }),
401
+ footer?.({ total, capped })
402
+ ] });
403
+ }
404
+ export {
405
+ ServerTable as default
406
+ };
407
+ //# sourceMappingURL=ServerTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerTable.js","sources":["../../src/DataTable/ServerTable.jsx"],"sourcesContent":["// La tabla: pagina, filtra y ordena EN EL SERVIDOR (contrato {filters, sortOrders, page, pageSize} → {rows, total, facets}).\n//\n// Cada cambio de filtro, orden o página es una consulta nueva contra el conjunto COMPLETO y el total que se muestra\n// es el real. Traer todo y filtrar en el navegador mentiría en cuanto el conjunto no quepa en una página.\n//\n// Contrato de fetchPage:\n// fetchPage({filters, sortOrders, page, pageSize}, signal) → Promise<{rows, total, facets?, capped?}>\n// - rows: cada fila con su id del SERVIDOR (getRowId). Fabricarlo en el front colisiona y el DataGrid conserva\n// filas de la consulta anterior;\n// - facets: {campo: [{value, total}]} contadas SIN el filtro de ese campo (lo hace el servidor), para que la\n// selección múltiple siga siendo posible;\n// - capped: el total es \"al menos esto\".\n//\n// Piezas: useTableState (URL con nuqs y prefijo) · tableMachine (XState: carga, error y respuestas rezagadas) ·\n// columns.jsx (encabezados con orden y filtro) · FilterChips · QuickFilters · GoToPage · EmptyState.\n//\n// Con @mui/x-data-grid 8 (compatible con MUI 7).\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useEffect, useMemo, useRef, useState} from 'react';\nimport {useMachine} from '@xstate/react';\nimport {useToolkitTranslation} from '@/toolkit/useToolkitTranslation.js';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport Paper from '@mui/material/Paper';\nimport Stack from '@mui/material/Stack';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport SearchIcon from '@mui/icons-material/Search';\nimport {DataGrid, GridPagination} from '@mui/x-data-grid';\nimport {enUS as dataGridEnglish, esES as dataGridSpanish} from '@mui/x-data-grid/locales';\n\nimport EmptyState from '@/DataTable/EmptyState.jsx';\nimport FilterChips from '@/DataTable/FilterChips.jsx';\nimport GoToPage from '@/DataTable/GoToPage.jsx';\nimport {TableFilterContext} from '@/DataTable/filterContext.js';\nimport {buildTableActors, tableMachine} from '@/DataTable/tableMachine.js';\nimport {useDebouncedFilter} from '@/DataTable/useDebouncedFilter.js';\nimport {FILTER_KINDS, isFilterActive, useTableState} from '@/DataTable/useTableState.js';\nimport BarActions from '@/appShell/BarActions.jsx';\nimport {BAR_CAPSULE_HEIGHT_PIXELS} from '@/appShell/BarCapsule.jsx';\nimport {PHONE_MEDIA_QUERY} from '@/appShell/shellSizes.js';\nimport {formatNumber} from '@/formatting.js';\nimport {materialBackgroundOf} from '@/theme/glassSurface.js';\nimport QuickFilters from '@/ui/filters/QuickFilters.jsx';\nimport Tag from '@/ui/labels/Tag.jsx';\n\n// OJO: los textos del DataGrid van como PROP (localeText) y no solo en el tema: el grid resuelve sus defaults en\n// inglés y le ganan a los defaultProps del tema\nconst DATA_GRID_TEXT_BY_LANGUAGE = {\n es: dataGridSpanish.components.MuiDataGrid.defaultProps.localeText,\n en: dataGridEnglish.components.MuiDataGrid.defaultProps.localeText,\n};\n\n/**\n * Nonce de la CSP de la página, si la aplicación usa CSP y lo pone en <meta property=\"csp-nonce\">.\n *\n * IMPORTANTE: el DataGrid 8 inserta un <style> con sus variables CSS (bordes, fondos, espaciado). Sin el nonce la CSP lo\n * bloquea (\"style-src-elem\") y la tabla se pinta sin sus variables. OJO: el navegador esconde el valor del atributo\n * (getAttribute regresa \"\"); se lee con la propiedad .nonce, igual que el caché de emotion con nonce.\n *\n * @returns {string|undefined}\n */\nfunction readCspNonce() {\n // pintando en el servidor (Next.js) no hay documento: ahí el nonce lo pone quien arma el HTML\n if (typeof document === 'undefined') {\n return undefined;\n }\n\n return document.querySelector('meta[property=\"csp-nonce\"]')?.nonce || undefined;\n}\n\n// Densidad compacta en todas las tablas: el espaciado por omisión desperdicia renglones. Son los altos que pinta el DataGrid 8 con density=\"compact\": la base de 52 px del renglón y de 56 px del\n// encabezado por el factor 0.7, redondeados hacia abajo. El pie (paginación) no cambia con la densidad.\n// OJO: si se cambia la densidad, estos números se vuelven a medir en Chrome; con ellos se calcula el alto del contenedor\n// y un número viejo deja hueco blanco abajo o una barra de desplazamiento sin necesidad\nconst ROW_HEIGHT_PIXELS = 36;\nconst COLUMN_HEADER_HEIGHT_PIXELS = 39;\nconst FOOTER_HEIGHT_PIXELS = 52;\n// líneas del borde del encabezado y del pie\nconst GRID_BORDER_PIXELS = 2;\n// holgura de alto de la tabla: debajo del último renglón queda este hueco, así que va lo más chico que aguanta.\n// OJO: con el alto exacto, el redondeo de subpíxeles hace que el DataGrid crea que hay scroll vertical, reserve el ancho de\n// la barra y aparezca un scroll lateral de 5 px. Lo vigila e2e/tests/upload-control.spec.js (la tabla no se desliza de lado)\nconst HEIGHT_SLACK_PIXELS = 2;\nconst DATA_GRID_DENSITY = 'compact';\n// ancho de la caja de búsqueda en escritorio: cabe un texto de ayuda como «Buscar por pedido, cliente o producto…».\n// OJO: con 280 se cortaba («…cliente o pro»); en el teléfono la caja toma todo el ancho\nconst SEARCH_BOX_MIN_WIDTH_PIXELS = 400;\n// en la barra de la app (searchInBar) un poco más angosta: comparte el renglón con el título y las cápsulas\nconst SEARCH_IN_BAR_WIDTH_PIXELS = 380;\nconst STRIPED_ROW_CLASS = 'server-table-row--striped';\n\n\n// a qué altura van la celda y el encabezado fijos: los mismos que usa el DataGrid de paga para sus columnas fijas. El\n// encabezado va arriba de la raya que separa columnas (30); con menos, la raya de las otras columnas lo cruzaba al deslizar\nconst FIXED_CELL_Z_INDEX = 30;\nconst FIXED_HEADER_Z_INDEX = 40;\n\n/**\n * Estilos que dejan pegada a la izquierda una columna al deslizar la tabla de lado (en el teléfono y en una ventana angosta),\n * igual que fixedSelectColumn de mui-datatables. Fijar columnas en MUI X es de DataGridPro (de paga); por dentro Pro usa\n * position sticky en la celda, y eso mismo se hace aquí, también con su banda del encabezado cuando la banda es solo suya\n * (p. ej. una banda PERIODO de una sola columna).\n *\n * OJO, trampas pagadas:\n * - el DataGrid gratuito solo dibuja las columnas que se ven (virtualización) y al deslizar mucho a la derecha quitaba del\n * DOM a la columna fija, que desaparecía. Un margen de columnas extra (columnBufferPx) no alcanzó: con columna fija la\n * tabla va con disableVirtualization y dibuja todo, que en nuestras tablas son menos de quince columnas y una página;\n * - la celda fija necesita fondo SÓLIDO o se ve lo que pasa por debajo. Toma el color de su renglón (inherit), pero hay\n * renglones con color transparente (una banda de color, la cebra, el resaltado del mouse): ahí se asomaban las\n * cifras de las otras columnas. Por eso el fondo va en dos capas: abajo el papel, sólido (backgroundImage, que se pinta\n * encima del color propio de la celda), y encima el color del renglón en un ::before detrás del texto (zIndex -1 dentro\n * de la celda). Se ve igual que el renglón y no transparenta.\n * El renglón lleva el fondo del papel con :where(), que no suma especificidad: así los renglones que la página pinta de otro\n * color le siguen ganando. Los colores salen de la paleta del tema (de sus variables CSS si el tema las usa) para que\n * cambien con el modo oscuro.\n *\n * Con el contenido de material del tema de vidrio (createToolkitTheme({glass: {surfaces: true}})) la tabla no lleva fondo\n * propio: los renglones van transparentes y la celda pegada lleva el mismo material esmerilado, que tapa lo que pasa por\n * debajo sin verse como una columna blanca (así se veía con el papel sólido).\n *\n * @param {object} theme tema de MUI\n * @param {string} field campo de la columna que se queda fija\n * @returns {object} estilos para el sx del DataGrid\n */\nfunction fixedColumnSxOf(theme, field) {\n // un tema con variables CSS (cssVariables) las trae en theme.vars; el tema por omisión de MUI, solo en theme.palette\n const {palette} = theme.vars ?? theme;\n const paper = palette.background.paper;\n const divider = `1px solid ${palette.divider}`;\n // la banda del encabezado que lleva solo a esta columna: el DataGrid la marca con sus campos entre |- y -|\n const ownBandHeader = `.MuiDataGrid-columnHeader[data-fields=\"|-${field}-|\"]`;\n const isMaterialContent = Boolean(theme.toolkit?.glass?.surfaces);\n // abajo la capa (el papel o el material) y encima el color del renglón (el ::before)\n const stickyBackground = {backgroundColor: 'inherit', ...(isMaterialContent ? materialBackgroundOf(theme, {thick: true}) : {backgroundImage: `linear-gradient(${paper}, ${paper})`})};\n\n return {\n '& :where(.MuiDataGrid-row)': {backgroundColor: isMaterialContent ? 'transparent' : paper},\n [`& .MuiDataGrid-cell[data-field=\"${field}\"]`]: {\n position: 'sticky', left: 0, zIndex: FIXED_CELL_Z_INDEX, borderRight: divider,\n ...stickyBackground,\n '&::before': {content: '\"\"', position: 'absolute', inset: 0, zIndex: -1, backgroundColor: 'inherit'},\n },\n [`& :where(.MuiDataGrid-columnHeader[data-field=\"${field}\"], ${ownBandHeader})`]: isMaterialContent ? materialBackgroundOf(theme, {thick: true}) : {backgroundColor: paper},\n [`& .MuiDataGrid-columnHeader[data-field=\"${field}\"], & ${ownBandHeader}`]: {\n position: 'sticky', left: 0, zIndex: FIXED_HEADER_Z_INDEX, borderRight: divider,\n },\n };\n}\nconst COMPACT_DENSITY_FACTOR = 0.7;\n\n/** Una tira de accesos rápidos sobre un campo de la tabla, alimentada por su faceta. */\nfunction QuickFilterRow({quickFilter, facets, total, filters, isMultiple, setFilter, setFilters}) {\n const {t} = useToolkitTranslation('table');\n const facetOptions = facets[quickFilter.facetKey ?? quickFilter.field] ?? [];\n const orderedOptions = quickFilter.order\n ? quickFilter.order.map((optionValue) => facetOptions.find((option) => option.value === optionValue) ?? {value: optionValue, total: 0})\n : facetOptions;\n\n // en un filtro múltiple el chip activo es la opción cuando es la ÚNICA elegida: con varias puestas desde la columna\n // ningún chip miente estando encendido\n const currentValue = filters[quickFilter.field];\n // si otro control del mismo \"qué\" está puesto (un rango de fechas), ningún chip se enciende\n const isOverridden = quickFilter.isOverridden?.(filters) ?? false;\n let selectedValue = currentValue ?? '';\n if (isOverridden) {\n selectedValue = '__overridden__';\n } else if (isMultiple) {\n selectedValue = Array.isArray(currentValue) && currentValue.length === 1 ? currentValue[0] : '';\n }\n\n // el conteo de \"Todas\" es la suma de la faceta (el resultado SIN este filtro), no el de la página actual; cuando las\n // opciones se traslapan la suma mentiría: el total lo da el servidor en allCountKey o, si no lo da, no se pinta\n // conteo (hideAllCount) antes que pintar uno falso\n let allCount = facetOptions.reduce((sum, option) => sum + (option.total ?? 0), 0) || total;\n if (quickFilter.allCountKey && typeof facets[quickFilter.allCountKey] === 'number') {\n allCount = facets[quickFilter.allCountKey];\n } else if (quickFilter.hideAllCount) {\n allCount = undefined;\n }\n\n const handleChange = (nextValue) => {\n const pickedValue = isMultiple ? (nextValue ? [nextValue] : []) : nextValue;\n // elegir un chip limpia los controles que compiten con él\n if (quickFilter.clears) {\n setFilters({[quickFilter.field]: pickedValue, ...quickFilter.clears});\n } else {\n setFilter(quickFilter.field, pickedValue);\n }\n };\n\n return (\n <QuickFilters\n caption={quickFilter.caption}\n ariaLabel={quickFilter.caption}\n value={selectedValue}\n onChange={handleChange}\n extra={quickFilter.renderExtra?.({filters, setFilters})}\n options={[\n {value: '', label: quickFilter.allLabel ?? t('quickFilters.all'), count: allCount},\n ...orderedOptions.map((option) => ({\n value: option.value,\n label: quickFilter.renderLabel ? quickFilter.renderLabel(option.value) : option.value,\n count: option.total,\n })),\n ]}\n />\n );\n}\n\n/**\n * @param {object} props\n * @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\n * page cuenta desde 0; toServerTableParams lo convierte a la query del API\n * @param {string} props.queryKey cambia cuando cambia el CONJUNTO (no los filtros): dispara recarga\n * @param {boolean} [props.enabled] false mientras la sección está oculta: una tabla que nadie ve no consulta\n * @param {Array<object>} props.columns textColumn / facetColumn / detailColumn o columnas del DataGrid\n * @param {Record<string, string>} [props.filterKinds]\n * @param {Record<string, unknown>} [props.filterDefaults]\n * @param {Array<object>} [props.chipConfig] buildChipConfig\n * @param {Array<object>} [props.quickFilters] {field, facetKey, caption, allLabel, renderLabel, order, clears,\n * isOverridden, renderExtra, allCountKey, hideAllCount}\n * @param {string|null} [props.searchField] filtro de texto que se saca a la barra; null quita la caja\n * @param {string} [props.searchPlaceholder]\n * @param {boolean} [props.searchInBar] la caja de búsqueda va arriba, en la barra de la app (BarActions): en escritorio,\n * como el buscador de una ventana de macOS; en el teléfono con cápsulas flota arriba con las demás; sin cápsulas se\n * queda aquí. Por omisión no\n * @param {boolean} [props.collapseSearchInBar] en la barra, sin usar se encoge a la lupa y se estira al picarla; por\n * omisión sí (false: siempre abierta)\n * @param {string} [props.emptyLabel]\n * @param {(total: number) => string} [props.countLabel] \"12 pedidos\"; por defecto \"12 registros\"\n * @param {number[]} [props.pageSizeOptions]\n * @param {number} [props.defaultPageSize]\n * @param {(row: any) => string|number} [props.getRowId]\n * @param {string} [props.prefix] estado en la URL con este prefijo (nuqs); sin él, en memoria\n * @param {unknown} [props.refreshToken] cambia para volver a consultar la misma página (después de una acción)\n * @param {(summary: {total: number, capped: boolean}) => import('react').ReactNode} [props.footer]\n * @param {import('react').ReactNode} [props.toolbarExtra] a la derecha del conteo (p. ej. el selector de año)\n * @param {(summary: {countText: string, total: number, capped: boolean}) => import('react').ReactNode} [props.header] reemplaza\n * el renglón del conteo: la página pinta título, conteo y controles en uno solo. countText ya viene traducido y con\n * el tope\n * @param {import('react').ReactNode} [props.beforeQuickFilters] arriba de los accesos rápidos (p. ej. las pestañas de producto)\n * @param {Array<object>} [props.columnGroupingModel] bandas que agrupan columnas bajo un nombre, arriba de sus\n * encabezados (columnGroupingModel del DataGrid). Con ellas el encabezado mide un renglón más\n * @param {(params: any) => string} [props.getRowClassName]\n * @param {(row: any) => boolean} [props.isRowVisible] cuáles renglones de la página se pintan; los demás se esconden\n * SIN volver a consultar (p. ej. plegar un grupo de renglones). Sin ella se pintan todos. OJO: va con useCallback;\n * una función nueva en cada pintada haría filtrar la página cada vez\n * @param {boolean} [props.striped] renglones alternos (cebra) con el color de hover del tema; al pasar el cursor se usa\n * el de «seleccionado» para que el renglón bajo el cursor se siga distinguiendo\n * @param {(params: any) => number|'auto'|null} [props.getRowHeight]\n * @param {boolean} [props.hideFooterWhenAllRowsFit] esconde el pie (el paginador) mientras todo lo que hay cabe en la\n * página; si un día no cabe, el pie vuelve solo. Para tablas que casi nunca pasan de una página\n * @param {boolean} [props.showGoToPage] «Ir a página N» junto al paginador; por omisión escondido (con las flechas basta en\n * casi todas las tablas). Para listas de muchas páginas que se recorren por número\n * @param {object} [props.gridSx] estilos extra del DataGrid (clases de renglón)\n * @param {number} [props.maxGridHeight] alto máximo del contenedor; sin él la tabla crece con sus renglones (default)\n * @param {string} [props.ariaLabel] nombre de la tabla para lectores de pantalla\n * @param {string} [props.fixedColumn] campo de la columna que se queda pegada a la izquierda al deslizar de lado (como\n * fixedSelectColumn de mui-datatables)\n */\nexport default function ServerTable({\n fetchPage,\n queryKey,\n enabled = true,\n columns,\n filterKinds = {},\n filterDefaults = {},\n chipConfig = [],\n quickFilters = [],\n searchField = 'contains',\n searchPlaceholder,\n searchInBar = false,\n collapseSearchInBar = true,\n emptyLabel,\n countLabel,\n pageSizeOptions = [10, 25, 50, 100],\n defaultPageSize = 25,\n getRowId,\n prefix,\n refreshToken,\n footer,\n toolbarExtra,\n header,\n beforeQuickFilters,\n columnGroupingModel,\n getRowClassName,\n isRowVisible,\n hideFooterWhenAllRowsFit = false,\n showGoToPage = false,\n striped = false,\n getRowHeight,\n gridSx,\n maxGridHeight = null,\n ariaLabel,\n fixedColumn,\n}) {\n const {t, language, changeLanguage} = useToolkitTranslation('table');\n const tableState = useTableState({prefix, filterDefaults, filterKinds, defaultPageSize});\n const {filters, sortOrders, page, pageSize} = tableState;\n\n // la caja de búsqueda rebota: se escribe sin latencia y al servidor va una consulta cuando se deja de teclear\n // si la caja de búsqueda tiene el foco (en la barra, con el foco se estira)\n const [isSearchFocused, setIsSearchFocused] = useState(false);\n const [searchDraft, setSearchDraft] = useDebouncedFilter(\n searchField ? filters[searchField] : '',\n (value) => searchField && tableState.setFilter(searchField, value),\n );\n\n // NOTA: fetchPage suele ser una función nueva en cada render; la máquina siempre llama a la más reciente\n const latestFetchPage = useRef(fetchPage);\n latestFetchPage.current = fetchPage;\n const [tableSnapshot, sendToTable] = useMachine(\n tableMachine.provide({actors: buildTableActors((params, signal) => latestFetchPage.current(params, signal))}),\n );\n const {rows, total, facets, capped, error} = tableSnapshot.context;\n // lo que se pinta: la página completa o, si la pantalla esconde renglones (un grupo plegado), solo los que deja ver.\n // Con memoria: un arreglo nuevo en cada pintada haría que el DataGrid volviera a procesar todos sus renglones\n const visibleRows = useMemo(() => (isRowVisible ? rows.filter(isRowVisible) : rows), [rows, isRowVisible]);\n const isLoading = tableSnapshot.matches('loading') || tableSnapshot.matches('idle');\n\n const requestParams = {filters, sortOrders, page, pageSize};\n const requestFingerprint = JSON.stringify({queryKey, enabled, refreshToken, ...requestParams});\n\n // IMPORTANTE: UN solo efecto dispara la consulta. Varios useEffect pidiendo lo mismo es como nacen las consultas\n // duplicadas\n useEffect(() => {\n if (!queryKey || !enabled) {\n return;\n }\n sendToTable({type: 'FETCH', params: requestParams});\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [requestFingerprint]);\n\n const toggleSort = (column) => {\n const currentSort = sortOrders.find((sortOrder) => sortOrder.column === column);\n if (!currentSort) {\n tableState.setSort([{column, direction: 'desc'}]);\n } else if (currentSort.direction === 'desc') {\n tableState.setSort([{column, direction: 'asc'}]);\n } else {\n // tercer clic: regresa al orden por defecto del servidor\n tableState.setSort([]);\n }\n };\n\n // el texto de la caja de búsqueda no cuenta como filtro oculto: se está viendo en su propia caja\n const hasActiveFilters = Object.entries(filters)\n .some(([field, value]) => field !== searchField && isFilterActive(filterKinds[field], value));\n\n // un acceso rápido está \"puesto\" cuando se aleja de su default; los que además tienen chip ya se cuentan ahí\n const quickActiveCount = quickFilters.filter((quickFilter) => !chipConfig.some((chipDeclaration) => chipDeclaration.key === quickFilter.field)\n && JSON.stringify(filters[quickFilter.field] ?? '') !== JSON.stringify(filterDefaults[quickFilter.field] ?? '')).length;\n\n const tableFilterValue = useMemo(() => ({\n filters,\n setFilter: tableState.setFilter,\n clearFilter: tableState.clearFilter,\n sortOrders,\n toggleSort,\n clearSort: () => tableState.setSort([]),\n facets,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }), [filters, sortOrders, facets]);\n\n // alto según lo que hay: una tabla de 3 organizaciones no deja 500 px en blanco. Sin renglones reservamos lugar para el\n // esqueleto de carga (hasta 8) o para el aviso de tabla vacía (3); con renglones, ni un pixel de hueco abajo\n let placeholderRowCount = 0;\n if (visibleRows.length === 0) {\n placeholderRowCount = isLoading ? Math.min(pageSize, 8) : 3;\n }\n // OJO: el alto se suma renglón por renglón con el alto que pide la pantalla (getRowHeight; p. ej. un renglón de\n // resumen más alto que los demás). Con un solo alto para todos, la tabla quedaba con hueco blanco o\n // con barra de desplazamiento sin necesidad\n let rowsHeight = placeholderRowCount * ROW_HEIGHT_PIXELS;\n for (const row of visibleRows) {\n const requestedRowHeight = getRowHeight?.({id: getRowId ? getRowId(row) : row.id, model: row, densityFactor: COMPACT_DENSITY_FACTOR});\n rowsHeight += typeof requestedRowHeight === 'number' ? requestedRowHeight : ROW_HEIGHT_PIXELS;\n }\n // la tabla crece con los renglones de la página y NO tiene scroll vertical propio (un solo scroll, el\n // de la página). La paginación del servidor ya acota cuántos renglones hay; maxGridHeight queda solo para quien\n // de verdad necesite un tope (un diálogo con altura fija)\n // con bandas el encabezado son dos renglones del mismo alto: el de las bandas y el de las columnas\n const headerHeight = columnGroupingModel ? 2 * COLUMN_HEADER_HEIGHT_PIXELS : COLUMN_HEADER_HEIGHT_PIXELS;\n // sin paginador que usar no hay pie: todo lo que hay ya está a la vista en la primera página\n const isFooterHidden = hideFooterWhenAllRowsFit && page === 0 && total <= pageSize;\n // el pie mide su alto más las líneas de borde; sin pie no hay ni lo uno ni lo otro\n const footerHeight = isFooterHidden ? 0 : FOOTER_HEIGHT_PIXELS + GRID_BORDER_PIXELS;\n const contentHeight = headerHeight + rowsHeight + footerHeight + HEIGHT_SLACK_PIXELS;\n const gridHeight = maxGridHeight ? Math.min(contentHeight, maxGridHeight) : contentHeight;\n\n const gridText = DATA_GRID_TEXT_BY_LANGUAGE[language] ?? DATA_GRID_TEXT_BY_LANGUAGE.es;\n const formattedTotal = formatNumber(total);\n const countText = countLabel ? countLabel(total) : t('count.records', {count: total, total: formattedTotal});\n\n const searchText = searchPlaceholder ?? t('search.placeholder');\n // en la barra, chica cuando no se usa: ni tiene el foco ni tiene texto\n const isSearchCompact = searchInBar && collapseSearchInBar && !isSearchFocused && !searchDraft;\n const searchBox = searchField && (\n <TextField\n type=\"search\"\n size=\"small\"\n value={searchDraft}\n onChange={(event) => setSearchDraft(event.target.value)}\n onFocus={() => setIsSearchFocused(true)}\n onBlur={() => setIsSearchFocused(false)}\n // Escape borra lo escrito y suelta la caja (en la barra, regresa a la lupa)\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n setSearchDraft('');\n event.currentTarget.querySelector('input')?.blur();\n }\n }}\n placeholder={searchText}\n sx={{minWidth: {xs: 0, md: SEARCH_BOX_MIN_WIDTH_PIXELS}}}\n slotProps={{\n input: {startAdornment: <InputAdornment position=\"start\"><SearchIcon fontSize=\"small\" /></InputAdornment>},\n htmlInput: {'aria-label': searchText},\n }}\n />\n );\n\n return (\n <TableFilterContext value={tableFilterValue}>\n <Stack direction={{xs: 'column', md: 'row'}} spacing={2} sx={{mb: 1.5, alignItems: {md: 'center'}}}>\n {searchBox && !searchInBar && searchBox}\n {/* en la barra: el buscador ya es su propia cápsula (bare), del alto y la forma de las demás y más angosto.\n OJO: la barra es un Paper y el tema le pone al campo el radio de «campo dentro de tarjeta», con el lente\n (body[data-glass-lens] .MuiPaper-root …) aún más específica: por eso las tres clases (con menos salía con\n esquinas de 12 px y no en cápsula; medido en Chrome) */}\n {/* sin usar se encoge a la lupa (collapseSearchInBar), como el buscador de las ventanas de macOS; al picarla o\n llegar con Tab se estira, y con texto se queda abierta. La lupa no atrapa el clic: lo deja pasar a la caja,\n que es la que se enfoca (si no, picar la lupa no hacía nada) */}\n {searchBox && searchInBar && (\n <BarActions label={searchText} bare order={0}\n sx={(theme) => ({\n // en el teléfono flota arriba junto a las demás cápsulas. Su lugar SIEMPRE ocupa lo libre del\n // renglón y la caja va pegada a la derecha: así se abre de derecha a izquierda y regresa igual\n // (el ancho pasa de 48 px a 100 % con transición). OJO: antes el lugar brincaba de golpe\n // (flex-grow no se anima) y la caja crecía de izquierda a derecha; se veía muy mal. El hueco de\n // la izquierda deja pasar el dedo a lo de abajo; solo la caja lo recibe\n [PHONE_MEDIA_QUERY]: {\n flexGrow: 1, minWidth: 0, justifyContent: 'flex-end', pointerEvents: 'none',\n '& .MuiTextField-root': {pointerEvents: 'auto'},\n },\n '& .MuiTextField-root': {\n width: isSearchCompact ? BAR_CAPSULE_HEIGHT_PIXELS : SEARCH_IN_BAR_WIDTH_PIXELS,\n minWidth: 0,\n transition: theme.transitions.create('width', {duration: theme.transitions.duration.short}),\n '@media (prefers-reduced-motion: reduce)': {transition: 'none'},\n [PHONE_MEDIA_QUERY]: {width: isSearchCompact ? BAR_CAPSULE_HEIGHT_PIXELS : '100%'},\n },\n '& .MuiFormControl-root .MuiInputBase-root.MuiOutlinedInput-root': {\n height: BAR_CAPSULE_HEIGHT_PIXELS, borderRadius: '999px', cursor: isSearchCompact ? 'pointer' : 'text',\n },\n '& .MuiInputAdornment-root': {pointerEvents: 'none'},\n '& input::placeholder': {opacity: isSearchCompact ? 0 : undefined},\n })}>\n {searchBox}\n </BarActions>\n )}\n {header ? (\n <Box sx={{flexGrow: 1, minWidth: 0}}>\n {header({countText: capped ? t('count.capped', {total: formattedTotal}) : countText, total, capped})}\n </Box>\n ) : (\n // NOTA: el extra va pegado al conteo y no empujado a la orilla (ml: 'auto'): en escritorio quedaba a todo\n // el ancho de distancia y no se leía como parte de la misma tabla (caso del selector de año)\n <Stack direction=\"row\" spacing={2} useFlexGap sx={{flexGrow: 1, alignItems: 'center', flexWrap: 'wrap'}}>\n <Stack direction=\"row\" spacing={1} sx={{alignItems: 'center'}}>\n <Typography variant=\"body2\" color=\"text.secondary\" role=\"status\" aria-live=\"polite\">\n {capped ? t('count.capped', {total: formattedTotal}) : countText}\n </Typography>\n {capped && <Tag label={t('count.cappedTag')} color=\"warning\" tooltip={t('count.cappedTooltip')} />}\n </Stack>\n {toolbarExtra}\n </Stack>\n )}\n </Stack>\n\n {beforeQuickFilters}\n\n {quickFilters.map((quickFilter) => (\n <QuickFilterRow key={quickFilter.field} quickFilter={quickFilter} facets={facets} total={total} filters={filters}\n isMultiple={filterKinds[quickFilter.field] === FILTER_KINDS.multiSelect}\n setFilter={tableState.setFilter} setFilters={tableState.setFilters} />\n ))}\n\n <FilterChips chipConfig={chipConfig} filters={filters} quickActiveCount={quickActiveCount}\n onSetFilter={tableState.setFilter} onClearAll={tableState.clearAll} />\n\n {error && (\n <Alert severity=\"error\" role=\"alert\" sx={{mb: 1}}\n action={(\n <Button color=\"inherit\" size=\"small\" onClick={() => sendToTable({type: 'FETCH', params: requestParams})}>\n {t('common:actions.retry')}\n </Button>\n )}>\n {error.message ?? t('error.generic')}\n </Alert>\n )}\n\n {/* minWidth 0: dentro de un flex o grid el DataGrid no empuja la página; en el teléfono la tabla se desliza\n de lado DENTRO de su tarjeta y la página no */}\n <Paper variant=\"outlined\" sx={{width: '100%', minWidth: 0, overflow: 'hidden'}}>\n <DataGrid\n rows={visibleRows}\n columns={columns}\n columnGroupingModel={columnGroupingModel}\n getRowId={getRowId}\n getRowClassName={(params) => [\n getRowClassName?.(params),\n striped && params.indexRelativeToCurrentPage % 2 === 1 ? STRIPED_ROW_CLASS : '',\n ].filter(Boolean).join(' ')}\n getRowHeight={getRowHeight}\n aria-label={ariaLabel}\n nonce={readCspNonce()}\n loading={isLoading}\n // IMPORTANTE: paginación y orden del servidor; el DataGrid no reordena ni recorta nada solo\n paginationMode=\"server\"\n sortingMode=\"server\"\n filterMode=\"server\"\n rowCount={total}\n paginationModel={{page, pageSize}}\n onPaginationModelChange={(paginationModel) => {\n if (paginationModel.pageSize !== pageSize) {\n tableState.setPageSize(paginationModel.pageSize);\n } else {\n tableState.setPage(paginationModel.page);\n }\n }}\n pageSizeOptions={pageSizeOptions}\n hideFooter={isFooterHidden}\n disableColumnMenu\n disableRowSelectionOnClick\n // con columna fija se dibuja todo: si no, la fija desaparecería al deslizar a la derecha (fixedColumnSxOf)\n disableVirtualization={Boolean(fixedColumn)}\n density={DATA_GRID_DENSITY}\n localeText={{...gridText, noRowsLabel: emptyLabel ?? t('empty.default')}}\n slotProps={{\n // con filas ya pintadas, barra delgada arriba sin tapar lo que se lee; con la tabla vacía, esqueleto\n loadingOverlay: {variant: 'linear-progress', noRowsVariant: 'skeleton'},\n }}\n slots={{\n // \"ir a la página N\" (solo si se pide) pegado a la paginación: ahí lo busca quien ya está leyendo\n // \"51-75 de 1,234\". Sin él, la paginación de siempre del DataGrid\n ...(showGoToPage && {\n pagination: () => (\n <Stack direction=\"row\" spacing={1} sx={{alignItems: 'center'}}>\n <GoToPage page={page} pageCount={Math.ceil(total / pageSize) || 1} onChange={tableState.setPage} />\n <GridPagination />\n </Stack>\n ),\n }),\n noResultsOverlay: () => <EmptyState filtered label={emptyLabel} onClearFilters={tableState.clearAll} />,\n noRowsOverlay: () => <EmptyState filtered={hasActiveFilters} label={emptyLabel} onClearFilters={tableState.clearAll} />,\n }}\n sx={[{\n // IMPORTANTE: el alto va en la raíz del DataGrid y no en la caja de afuera: las variables\n // --DataGrid-hasScrollX y --DataGrid-scrollbarSize solo existen en la raíz. Cuando las columnas no\n // caben (historial a 390 px) la barra horizontal ocupa su alto dentro de la tabla y, sin sumarlo, los\n // renglones se desplazaban 13 px por dentro. Con barras superpuestas (teléfono, trackpad) mide 0\n height: `calc(${gridHeight}px + var(--DataGrid-hasScrollX, 0) * var(--DataGrid-scrollbarSize, 0px))`,\n border: 0,\n // todo centrado verticalmente: el texto suelto se pegaba arriba y los chips quedaban a media altura\n '& .MuiDataGrid-cell': {display: 'flex', alignItems: 'center'},\n '& .MuiDataGrid-columnHeader': {alignItems: 'center'},\n // cebra: el color del hover del tema\n [`& .${STRIPED_ROW_CLASS}`]: {bgcolor: 'action.hover'},\n [`& .${STRIPED_ROW_CLASS}:hover`]: {bgcolor: 'action.selected'},\n ...gridSx,\n }, (theme) => (fixedColumn ? fixedColumnSxOf(theme, fixedColumn) : {})]}\n />\n </Paper>\n\n {footer?.({total, capped})}\n </TableFilterContext>\n );\n}\n"],"names":["dataGridSpanish","dataGridEnglish"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ function buildChipConfig({ text = [], multiSelect = [] } = {}) {
2
+ return [
3
+ // format: cómo se lee el valor en el chip (una fecha viaja como 2026-08-01 y el chip dice "1 ago 2026")
4
+ ...text.map(({ key, label, format = (value) => value }) => ({
5
+ key,
6
+ isActive: (value) => Boolean(value),
7
+ chipsFor: (value, setFilter) => [{
8
+ id: key,
9
+ label: `${label}: ${format(value)}`,
10
+ onDelete: () => setFilter(key, "")
11
+ }]
12
+ })),
13
+ ...multiSelect.map(({ key, label, itemLabel = (value) => value }) => ({
14
+ key,
15
+ isActive: (value) => value?.length > 0,
16
+ chipsFor: (value, setFilter) => value.map((selectedValue) => ({
17
+ id: `${key}:${selectedValue}`,
18
+ label: `${label}: ${itemLabel(selectedValue)}`,
19
+ onDelete: () => setFilter(key, value.filter((currentValue) => currentValue !== selectedValue))
20
+ }))
21
+ }))
22
+ ];
23
+ }
24
+ export {
25
+ buildChipConfig
26
+ };
27
+ //# sourceMappingURL=buildChipConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildChipConfig.js","sources":["../../src/DataTable/buildChipConfig.js"],"sourcesContent":["// Declaración compacta de los chips de filtros activos (FilterChips).\n//\n// Cada valor trae su chip y su ×: un filtro de varios valores no se resume en UN chip (\"estado: 3\") porque para quitar\n// uno solo habría que abrir el filtro de la columna. Así se desarma un filtro en la práctica: de a uno.\n//\n// text → un chip; la × lo vacía.\n// multiSelect → un chip POR VALOR; la × quita ese valor y deja los demás.\n//\n// Las etiquetas llegan YA traducidas (quien declara usa t()); por eso se declara dentro del componente o con una\n// función que recibe t.\n//\n// Función pura, no renderiza: function (regla de la casa).\n\n/**\n * @param {object} declaration\n * @param {Array<{key: string, label: string, format?: (value: string) => string}>} [declaration.text]\n * @param {Array<{key: string, label: string, itemLabel?: (value: string) => string}>} [declaration.multiSelect]\n * @returns {Array<{key: string, isActive: (value: unknown) => boolean, chipsFor: Function}>}\n */\nexport function buildChipConfig({text = [], multiSelect = []} = {}) {\n return [\n // format: cómo se lee el valor en el chip (una fecha viaja como 2026-08-01 y el chip dice \"1 ago 2026\")\n ...text.map(({key, label, format = (value) => value}) => ({\n key,\n isActive: (value) => Boolean(value),\n chipsFor: (value, setFilter) => [{\n id: key,\n label: `${label}: ${format(value)}`,\n onDelete: () => setFilter(key, ''),\n }],\n })),\n ...multiSelect.map(({key, label, itemLabel = (value) => value}) => ({\n key,\n isActive: (value) => value?.length > 0,\n chipsFor: (value, setFilter) => value.map((selectedValue) => ({\n id: `${key}:${selectedValue}`,\n label: `${label}: ${itemLabel(selectedValue)}`,\n onDelete: () => setFilter(key, value.filter((currentValue) => currentValue !== selectedValue)),\n })),\n })),\n ];\n}\n"],"names":[],"mappings":"AAmBO,SAAS,gBAAgB,EAAC,OAAO,CAAA,GAAI,cAAc,CAAA,EAAE,IAAI,IAAI;AAChE,SAAO;AAAA;AAAA,IAEH,GAAG,KAAK,IAAI,CAAC,EAAC,KAAK,OAAO,SAAS,CAAC,UAAU,MAAK,OAAO;AAAA,MACtD;AAAA,MACA,UAAU,CAAC,UAAU,QAAQ,KAAK;AAAA,MAClC,UAAU,CAAC,OAAO,cAAc,CAAC;AAAA,QAC7B,IAAI;AAAA,QACJ,OAAO,GAAG,KAAK,KAAK,OAAO,KAAK,CAAC;AAAA,QACjC,UAAU,MAAM,UAAU,KAAK,EAAE;AAAA,MACjD,CAAa;AAAA,IACb,EAAU;AAAA,IACF,GAAG,YAAY,IAAI,CAAC,EAAC,KAAK,OAAO,YAAY,CAAC,UAAU,MAAK,OAAO;AAAA,MAChE;AAAA,MACA,UAAU,CAAC,UAAU,OAAO,SAAS;AAAA,MACrC,UAAU,CAAC,OAAO,cAAc,MAAM,IAAI,CAAC,mBAAmB;AAAA,QAC1D,IAAI,GAAG,GAAG,IAAI,aAAa;AAAA,QAC3B,OAAO,GAAG,KAAK,KAAK,UAAU,aAAa,CAAC;AAAA,QAC5C,UAAU,MAAM,UAAU,KAAK,MAAM,OAAO,CAAC,iBAAiB,iBAAiB,aAAa,CAAC;AAAA,MAC7G,EAAc;AAAA,IACd,EAAU;AAAA,EACV;AACA;"}