@stackcraftmx/calcita 0.32.2 → 0.47.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 (336) hide show
  1. package/README.md +263 -2
  2. package/cli/packageVersions.js +12 -3
  3. package/cli/projectFiles.js +5 -2
  4. package/cli/templates/module/__Name__Page.test.jsx.tpl +24 -0
  5. package/cli/templates/project/README.md.tpl +14 -1
  6. package/cli/templates/project/src/app/appRouter.jsx.tpl +5 -2
  7. package/cli/templates/project/src/core/accountConnector.js.tpl +4 -2
  8. package/cli/templates/project/src/modules/auth/SignInPage.test.jsx.tpl +20 -0
  9. package/cli/templates/project/src/modules/home/HomePage.test.jsx.tpl +16 -0
  10. package/cli/templates/project/src/testing/browserGaps.js.tpl +70 -0
  11. package/cli/templates/project/src/testing/openScreen.jsx.tpl +58 -0
  12. package/cli/templates/project/src/testing/setup.js.tpl +25 -0
  13. package/cli/templates/project/vite.config.js.tpl +12 -0
  14. package/dist/DataTable/GoToPage.js +69 -13
  15. package/dist/DataTable/GoToPage.js.map +1 -1
  16. package/dist/DataTable/ServerTable.js +2 -0
  17. package/dist/DataTable/ServerTable.js.map +1 -1
  18. package/dist/DataTable/ServerTableFilterDrawer.js +52 -0
  19. package/dist/DataTable/ServerTableFilterDrawer.js.map +1 -0
  20. package/dist/DataTable/filterContext.js.map +1 -1
  21. package/dist/DataTable/goToPageOptions.js +17 -0
  22. package/dist/DataTable/goToPageOptions.js.map +1 -0
  23. package/dist/date-pickers.js +28 -2
  24. package/dist/date-pickers.js.map +1 -1
  25. package/dist/datePickers/DateInput.js +15 -34
  26. package/dist/datePickers/DateInput.js.map +1 -1
  27. package/dist/datePickers/DateTimeInput.js +75 -0
  28. package/dist/datePickers/DateTimeInput.js.map +1 -0
  29. package/dist/datePickers/FormDateTimeField.js +12 -0
  30. package/dist/datePickers/FormDateTimeField.js.map +1 -0
  31. package/dist/datePickers/FormMonthField.js +12 -0
  32. package/dist/datePickers/FormMonthField.js.map +1 -0
  33. package/dist/datePickers/FormTimeField.js +12 -0
  34. package/dist/datePickers/FormTimeField.js.map +1 -0
  35. package/dist/datePickers/MonthInput.js +58 -0
  36. package/dist/datePickers/MonthInput.js.map +1 -0
  37. package/dist/datePickers/PickerFrame.js +27 -0
  38. package/dist/datePickers/PickerFrame.js.map +1 -0
  39. package/dist/datePickers/TimeInput.js +55 -0
  40. package/dist/datePickers/TimeInput.js.map +1 -0
  41. package/dist/datePickers/dateTimeRules.js +24 -0
  42. package/dist/datePickers/dateTimeRules.js.map +1 -0
  43. package/dist/datePickers/pickerValues.js +106 -0
  44. package/dist/datePickers/pickerValues.js.map +1 -0
  45. package/dist/datePickers/useCurrentMinute.js +28 -0
  46. package/dist/datePickers/useCurrentMinute.js.map +1 -0
  47. package/dist/datePickers/usePickerField.js +22 -0
  48. package/dist/datePickers/usePickerField.js.map +1 -0
  49. package/dist/dictionaries/dictionaries.js +3 -1
  50. package/dist/dictionaries/dictionaries.js.map +1 -1
  51. package/dist/forms/FormAttachmentsField.js +12 -0
  52. package/dist/forms/FormAttachmentsField.js.map +1 -0
  53. package/dist/forms/FormCheckboxGroupField.js +12 -0
  54. package/dist/forms/FormCheckboxGroupField.js.map +1 -0
  55. package/dist/forms/FormFileField.js +12 -0
  56. package/dist/forms/FormFileField.js.map +1 -0
  57. package/dist/forms/FormFileUploadField.js +12 -0
  58. package/dist/forms/FormFileUploadField.js.map +1 -0
  59. package/dist/forms/FormImageField.js +12 -0
  60. package/dist/forms/FormImageField.js.map +1 -0
  61. package/dist/forms/FormMaskedField.js +12 -0
  62. package/dist/forms/FormMaskedField.js.map +1 -0
  63. package/dist/forms/FormRepeatingFields.js +54 -0
  64. package/dist/forms/FormRepeatingFields.js.map +1 -0
  65. package/dist/forms/FormTransferListField.js +12 -0
  66. package/dist/forms/FormTransferListField.js.map +1 -0
  67. package/dist/forms/applyServerProblem.js +10 -3
  68. package/dist/forms/applyServerProblem.js.map +1 -1
  69. package/dist/forms/listRules.js +111 -0
  70. package/dist/forms/listRules.js.map +1 -0
  71. package/dist/forms/serverProblemFields.js +17 -0
  72. package/dist/forms/serverProblemFields.js.map +1 -1
  73. package/dist/forms.js +51 -29
  74. package/dist/forms.js.map +1 -1
  75. package/dist/hookForm/FormAttachmentsField.js +12 -0
  76. package/dist/hookForm/FormAttachmentsField.js.map +1 -0
  77. package/dist/hookForm/FormCheckboxGroupField.js +12 -0
  78. package/dist/hookForm/FormCheckboxGroupField.js.map +1 -0
  79. package/dist/hookForm/FormFileField.js +12 -0
  80. package/dist/hookForm/FormFileField.js.map +1 -0
  81. package/dist/hookForm/FormFileUploadField.js +12 -0
  82. package/dist/hookForm/FormFileUploadField.js.map +1 -0
  83. package/dist/hookForm/FormImageField.js +12 -0
  84. package/dist/hookForm/FormImageField.js.map +1 -0
  85. package/dist/hookForm/FormMaskedField.js +12 -0
  86. package/dist/hookForm/FormMaskedField.js.map +1 -0
  87. package/dist/hookForm/FormRepeatingFields.js +44 -0
  88. package/dist/hookForm/FormRepeatingFields.js.map +1 -0
  89. package/dist/hookForm/FormTransferListField.js +12 -0
  90. package/dist/hookForm/FormTransferListField.js.map +1 -0
  91. package/dist/hookForm/applyServerProblem.js +8 -3
  92. package/dist/hookForm/applyServerProblem.js.map +1 -1
  93. package/dist/index.js +188 -100
  94. package/dist/index.js.map +1 -1
  95. package/dist/inputs/CatalogInput.js +74 -7
  96. package/dist/inputs/CatalogInput.js.map +1 -1
  97. package/dist/inputs/CheckboxGroupInput.js +100 -0
  98. package/dist/inputs/CheckboxGroupInput.js.map +1 -0
  99. package/dist/inputs/MaskedInput.js +86 -0
  100. package/dist/inputs/MaskedInput.js.map +1 -0
  101. package/dist/inputs/NumberInput.js +12 -1
  102. package/dist/inputs/NumberInput.js.map +1 -1
  103. package/dist/inputs/RepeatingFields.js +177 -0
  104. package/dist/inputs/RepeatingFields.js.map +1 -0
  105. package/dist/inputs/SelectInput.js +43 -5
  106. package/dist/inputs/SelectInput.js.map +1 -1
  107. package/dist/inputs/TransferListInput.js +215 -0
  108. package/dist/inputs/TransferListInput.js.map +1 -0
  109. package/dist/inputs/inputMasks.js +84 -0
  110. package/dist/inputs/inputMasks.js.map +1 -0
  111. package/dist/inputs/selectAllState.js +20 -0
  112. package/dist/inputs/selectAllState.js.map +1 -0
  113. package/dist/inputs/useRowKeys.js +26 -0
  114. package/dist/inputs/useRowKeys.js.map +1 -0
  115. package/dist/legal/CookieNotice.js +79 -0
  116. package/dist/legal/CookieNotice.js.map +1 -0
  117. package/dist/legal/TermsAcceptanceDialog.js +129 -0
  118. package/dist/legal/TermsAcceptanceDialog.js.map +1 -0
  119. package/dist/legal/consentStorage.js +18 -0
  120. package/dist/legal/consentStorage.js.map +1 -0
  121. package/dist/legal/useCookieConsent.js +17 -0
  122. package/dist/legal/useCookieConsent.js.map +1 -0
  123. package/dist/locales/en.js +233 -1
  124. package/dist/locales/en.js.map +1 -1
  125. package/dist/locales/es.js +233 -1
  126. package/dist/locales/es.js.map +1 -1
  127. package/dist/mexico/CfdiSummary.js +81 -0
  128. package/dist/mexico/CfdiSummary.js.map +1 -0
  129. package/dist/mexico/EfirmaFields.js +167 -0
  130. package/dist/mexico/EfirmaFields.js.map +1 -0
  131. package/dist/mexico/certificateReader.js +79 -0
  132. package/dist/mexico/certificateReader.js.map +1 -0
  133. package/dist/mexico/cfdiReader.js +81 -0
  134. package/dist/mexico/cfdiReader.js.map +1 -0
  135. package/dist/mexico/derReader.js +81 -0
  136. package/dist/mexico/derReader.js.map +1 -0
  137. package/dist/mexico/efirmaKey.js +51 -0
  138. package/dist/mexico/efirmaKey.js.map +1 -0
  139. package/dist/mexico/mexicoIdentifiers.js +86 -0
  140. package/dist/mexico/mexicoIdentifiers.js.map +1 -0
  141. package/dist/mexico/mexicoRules.js +16 -0
  142. package/dist/mexico/mexicoRules.js.map +1 -0
  143. package/dist/mexico.js +32 -0
  144. package/dist/mexico.js.map +1 -0
  145. package/dist/react-hook-form.js +40 -17
  146. package/dist/react-hook-form.js.map +1 -1
  147. package/dist/rich-text.js +19 -0
  148. package/dist/rich-text.js.map +1 -0
  149. package/dist/richText/FormRichTextField.js +12 -0
  150. package/dist/richText/FormRichTextField.js.map +1 -0
  151. package/dist/richText/RichTextEditor.js +108 -0
  152. package/dist/richText/RichTextEditor.js.map +1 -0
  153. package/dist/richText/RichTextLinkPopover.js +57 -0
  154. package/dist/richText/RichTextLinkPopover.js.map +1 -0
  155. package/dist/richText/RichTextToolbar.js +189 -0
  156. package/dist/richText/RichTextToolbar.js.map +1 -0
  157. package/dist/richText/RichTextView.js +26 -0
  158. package/dist/richText/RichTextView.js.map +1 -0
  159. package/dist/richText/richTextContentSx.js +42 -0
  160. package/dist/richText/richTextContentSx.js.map +1 -0
  161. package/dist/richText/richTextExtensions.js +44 -0
  162. package/dist/richText/richTextExtensions.js.map +1 -0
  163. package/dist/richText/richTextRules.js +46 -0
  164. package/dist/richText/richTextRules.js.map +1 -0
  165. package/dist/table.js +2 -0
  166. package/dist/table.js.map +1 -1
  167. package/dist/theme/components/glassComponents.js +27 -0
  168. package/dist/theme/components/glassComponents.js.map +1 -1
  169. package/dist/theme/components/minimalComponents.js +12 -0
  170. package/dist/theme/components/minimalComponents.js.map +1 -1
  171. package/dist/types/DataTable/ServerTableFilterDrawer.d.ts +21 -0
  172. package/dist/types/DataTable/filterContext.d.ts +2 -1
  173. package/dist/types/DataTable/goToPageOptions.d.ts +15 -0
  174. package/dist/types/DataTable/index.d.ts +1 -0
  175. package/dist/types/date-pickers.d.ts +10 -1
  176. package/dist/types/datePickers/DateInput.d.ts +6 -4
  177. package/dist/types/datePickers/DateTimeInput.d.ts +50 -0
  178. package/dist/types/datePickers/FormDateTimeField.d.ts +7 -0
  179. package/dist/types/datePickers/FormMonthField.d.ts +7 -0
  180. package/dist/types/datePickers/FormTimeField.d.ts +7 -0
  181. package/dist/types/datePickers/MonthInput.d.ts +39 -0
  182. package/dist/types/datePickers/PickerFrame.d.ts +22 -0
  183. package/dist/types/datePickers/TimeInput.d.ts +38 -0
  184. package/dist/types/datePickers/dateTimeRules.d.ts +31 -0
  185. package/dist/types/datePickers/pickerValues.d.ts +114 -0
  186. package/dist/types/datePickers/useCurrentMinute.d.ts +5 -0
  187. package/dist/types/datePickers/usePickerField.d.ts +24 -0
  188. package/dist/types/dictionaries/dictionaries.d.ts +6 -3
  189. package/dist/types/forms/FormAttachmentsField.d.ts +7 -0
  190. package/dist/types/forms/FormCheckboxGroupField.d.ts +7 -0
  191. package/dist/types/forms/FormFileField.d.ts +7 -0
  192. package/dist/types/forms/FormFileUploadField.d.ts +7 -0
  193. package/dist/types/forms/FormImageField.d.ts +7 -0
  194. package/dist/types/forms/FormMaskedField.d.ts +7 -0
  195. package/dist/types/forms/FormRepeatingFields.d.ts +25 -0
  196. package/dist/types/forms/FormTransferListField.d.ts +7 -0
  197. package/dist/types/forms/index.d.ts +10 -1
  198. package/dist/types/forms/listRules.d.ts +48 -0
  199. package/dist/types/forms/serverProblemFields.d.ts +13 -0
  200. package/dist/types/forms.d.ts +1 -1
  201. package/dist/types/hookForm/FormAttachmentsField.d.ts +8 -0
  202. package/dist/types/hookForm/FormCheckboxGroupField.d.ts +8 -0
  203. package/dist/types/hookForm/FormFileField.d.ts +8 -0
  204. package/dist/types/hookForm/FormFileUploadField.d.ts +8 -0
  205. package/dist/types/hookForm/FormImageField.d.ts +8 -0
  206. package/dist/types/hookForm/FormMaskedField.d.ts +9 -0
  207. package/dist/types/hookForm/FormRepeatingFields.d.ts +27 -0
  208. package/dist/types/hookForm/FormTransferListField.d.ts +8 -0
  209. package/dist/types/index.d.ts +25 -3
  210. package/dist/types/inputs/CatalogInput.d.ts +7 -1
  211. package/dist/types/inputs/CheckboxGroupInput.d.ts +39 -0
  212. package/dist/types/inputs/MaskedInput.d.ts +35 -0
  213. package/dist/types/inputs/RepeatingFields.d.ts +52 -0
  214. package/dist/types/inputs/SelectInput.d.ts +6 -1
  215. package/dist/types/inputs/TransferListInput.d.ts +43 -0
  216. package/dist/types/inputs/inputMasks.d.ts +52 -0
  217. package/dist/types/inputs/selectAllState.d.ts +11 -0
  218. package/dist/types/inputs/useRowKeys.d.ts +11 -0
  219. package/dist/types/legal/CookieNotice.d.ts +30 -0
  220. package/dist/types/legal/TermsAcceptanceDialog.d.ts +32 -0
  221. package/dist/types/legal/consentStorage.d.ts +16 -0
  222. package/dist/types/legal/useCookieConsent.d.ts +13 -0
  223. package/dist/types/locales/en.d.ts +232 -0
  224. package/dist/types/locales/es.d.ts +232 -0
  225. package/dist/types/mexico/CfdiSummary.d.ts +17 -0
  226. package/dist/types/mexico/EfirmaFields.d.ts +38 -0
  227. package/dist/types/mexico/certificateReader.d.ts +37 -0
  228. package/dist/types/mexico/cfdiReader.d.ts +95 -0
  229. package/dist/types/mexico/derReader.d.ts +54 -0
  230. package/dist/types/mexico/efirmaKey.d.ts +26 -0
  231. package/dist/types/mexico/mexicoIdentifiers.d.ts +61 -0
  232. package/dist/types/mexico/mexicoRules.d.ts +29 -0
  233. package/dist/types/mexico.d.ts +11 -0
  234. package/dist/types/react-hook-form.d.ts +10 -1
  235. package/dist/types/rich-text.d.ts +5 -0
  236. package/dist/types/richText/FormRichTextField.d.ts +7 -0
  237. package/dist/types/richText/RichTextEditor.d.ts +42 -0
  238. package/dist/types/richText/RichTextLinkPopover.d.ts +17 -0
  239. package/dist/types/richText/RichTextToolbar.d.ts +15 -0
  240. package/dist/types/richText/RichTextView.d.ts +13 -0
  241. package/dist/types/richText/richTextContentSx.d.ts +7 -0
  242. package/dist/types/richText/richTextExtensions.d.ts +15 -0
  243. package/dist/types/richText/richTextRules.d.ts +41 -0
  244. package/dist/types/table.d.ts +1 -1
  245. package/dist/types/ui/actions/ActionsMenu.d.ts +18 -3
  246. package/dist/types/ui/actions/CopyButton.d.ts +7 -4
  247. package/dist/types/ui/actions/tableRowText.d.ts +6 -0
  248. package/dist/types/ui/cards/RecordCard.d.ts +65 -0
  249. package/dist/types/ui/cards/RecordCardSkeleton.d.ts +17 -0
  250. package/dist/types/ui/countdown/Countdown.d.ts +31 -0
  251. package/dist/types/ui/countdown/countdownParts.d.ts +39 -0
  252. package/dist/types/ui/countdown/useCountdown.d.ts +14 -0
  253. package/dist/types/ui/documents/PdfViewerDialog.d.ts +21 -0
  254. package/dist/types/ui/filters/FilterDrawer.d.ts +34 -0
  255. package/dist/types/ui/filters/filterDrawerFields.d.ts +139 -0
  256. package/dist/types/ui/help/HelpButton.d.ts +15 -0
  257. package/dist/types/ui/help/HelpCarouselDialog.d.ts +35 -0
  258. package/dist/types/ui/help/useHelpCarousel.d.ts +21 -0
  259. package/dist/types/ui/index.d.ts +10 -0
  260. package/dist/types/ui/labels/IconBadge.d.ts +34 -0
  261. package/dist/types/ui/navigation/RouteTabs.d.ts +44 -0
  262. package/dist/types/ui/navigation/routeTabMatching.d.ts +27 -0
  263. package/dist/types/upload/AttachmentsInput.d.ts +62 -0
  264. package/dist/types/upload/FileChip.d.ts +18 -0
  265. package/dist/types/upload/FileDropzone.d.ts +3 -0
  266. package/dist/types/upload/FileInput.d.ts +48 -0
  267. package/dist/types/upload/FileUploadInput.d.ts +80 -0
  268. package/dist/types/upload/ImageInput.d.ts +53 -0
  269. package/dist/types/upload/TemplateDownloadButton.d.ts +39 -0
  270. package/dist/types/upload/fileAppearance.d.ts +8 -0
  271. package/dist/types/upload/fileRules.d.ts +38 -0
  272. package/dist/types/upload/transferProgress.d.ts +18 -0
  273. package/dist/types/upload/uploadMachine.d.ts +6 -2
  274. package/dist/types/upload/uploadWithProgress.d.ts +6 -2
  275. package/dist/types/upload/useFilePicker.d.ts +39 -0
  276. package/dist/ui/actions/ActionsMenu.js +98 -15
  277. package/dist/ui/actions/ActionsMenu.js.map +1 -1
  278. package/dist/ui/actions/CopyButton.js +31 -11
  279. package/dist/ui/actions/CopyButton.js.map +1 -1
  280. package/dist/ui/actions/tableRowText.js +7 -0
  281. package/dist/ui/actions/tableRowText.js.map +1 -0
  282. package/dist/ui/cards/RecordCard.js +145 -0
  283. package/dist/ui/cards/RecordCard.js.map +1 -0
  284. package/dist/ui/cards/RecordCardSkeleton.js +33 -0
  285. package/dist/ui/cards/RecordCardSkeleton.js.map +1 -0
  286. package/dist/ui/countdown/Countdown.js +38 -0
  287. package/dist/ui/countdown/Countdown.js.map +1 -0
  288. package/dist/ui/countdown/countdownParts.js +34 -0
  289. package/dist/ui/countdown/countdownParts.js.map +1 -0
  290. package/dist/ui/countdown/useCountdown.js +35 -0
  291. package/dist/ui/countdown/useCountdown.js.map +1 -0
  292. package/dist/ui/documents/PdfViewerDialog.js +81 -0
  293. package/dist/ui/documents/PdfViewerDialog.js.map +1 -0
  294. package/dist/ui/filters/FilterDrawer.js +211 -0
  295. package/dist/ui/filters/FilterDrawer.js.map +1 -0
  296. package/dist/ui/filters/filterDrawerFields.js +119 -0
  297. package/dist/ui/filters/filterDrawerFields.js.map +1 -0
  298. package/dist/ui/help/HelpButton.js +17 -0
  299. package/dist/ui/help/HelpButton.js.map +1 -0
  300. package/dist/ui/help/HelpCarouselDialog.js +154 -0
  301. package/dist/ui/help/HelpCarouselDialog.js.map +1 -0
  302. package/dist/ui/help/useHelpCarousel.js +25 -0
  303. package/dist/ui/help/useHelpCarousel.js.map +1 -0
  304. package/dist/ui/labels/IconBadge.js +82 -0
  305. package/dist/ui/labels/IconBadge.js.map +1 -0
  306. package/dist/ui/navigation/RouteTabs.js +75 -0
  307. package/dist/ui/navigation/RouteTabs.js.map +1 -0
  308. package/dist/ui/navigation/routeTabMatching.js +23 -0
  309. package/dist/ui/navigation/routeTabMatching.js.map +1 -0
  310. package/dist/upload/AttachmentsInput.js +127 -0
  311. package/dist/upload/AttachmentsInput.js.map +1 -0
  312. package/dist/upload/FileChip.js +27 -0
  313. package/dist/upload/FileChip.js.map +1 -0
  314. package/dist/upload/FileDropzone.js +19 -84
  315. package/dist/upload/FileDropzone.js.map +1 -1
  316. package/dist/upload/FileInput.js +112 -0
  317. package/dist/upload/FileInput.js.map +1 -0
  318. package/dist/upload/FileUploadInput.js +285 -0
  319. package/dist/upload/FileUploadInput.js.map +1 -0
  320. package/dist/upload/ImageInput.js +125 -0
  321. package/dist/upload/ImageInput.js.map +1 -0
  322. package/dist/upload/TemplateDownloadButton.js +67 -0
  323. package/dist/upload/TemplateDownloadButton.js.map +1 -0
  324. package/dist/upload/fileAppearance.js +21 -0
  325. package/dist/upload/fileAppearance.js.map +1 -0
  326. package/dist/upload/fileRules.js +27 -1
  327. package/dist/upload/fileRules.js.map +1 -1
  328. package/dist/upload/transferProgress.js +23 -0
  329. package/dist/upload/transferProgress.js.map +1 -0
  330. package/dist/upload/uploadMachine.js +8 -8
  331. package/dist/upload/uploadMachine.js.map +1 -1
  332. package/dist/upload/uploadWithProgress.js +1 -1
  333. package/dist/upload/uploadWithProgress.js.map +1 -1
  334. package/dist/upload/useFilePicker.js +101 -0
  335. package/dist/upload/useFilePicker.js.map +1 -0
  336. package/package.json +44 -1
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @param {object} props
3
+ * @param {string|number|Date} props.until el momento: un instante en texto, un Date o milisegundos
4
+ * @param {string} [props.label] ya traducido: qué se cuenta («Tiempo para que cierren las inscripciones»), para un lector de pantalla
5
+ * @param {() => void} [props.onComplete] al llegar a cero (una vez)
6
+ * @param {import('react').ReactNode} [props.completedText] lo que dice al terminar; por omisión «Ya terminó»
7
+ * @param {boolean} [props.showSeconds] por omisión, sí
8
+ * @param {(parts: {days: number, hours: number, minutes: number, seconds: number, totalSeconds: number, isOver: boolean}) => import('react').ReactNode} [props.children]
9
+ * para pintarla a su manera
10
+ * @param {import('@mui/material/Typography').TypographyProps['variant']} [props.variant] por omisión body1
11
+ * @param {object} [props.sx]
12
+ * @param {object} [props.texts] los textos que cambian, con la forma de `common` en los textos del paquete
13
+ */
14
+ export default function Countdown(props: {
15
+ until: string | number | Date;
16
+ label?: string;
17
+ onComplete?: () => void;
18
+ completedText?: import('react').ReactNode;
19
+ showSeconds?: boolean;
20
+ children?: (parts: {
21
+ days: number;
22
+ hours: number;
23
+ minutes: number;
24
+ seconds: number;
25
+ totalSeconds: number;
26
+ isOver: boolean;
27
+ }) => import('react').ReactNode;
28
+ variant?: import('@mui/material/Typography').TypographyProps['variant'];
29
+ sx?: object;
30
+ texts?: object;
31
+ }): string | number | bigint | boolean | import("react").JSX.Element | Iterable<import("react").ReactNode> | Promise<string | number | bigint | boolean | Iterable<import("react").ReactNode> | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | import("react").ReactPortal | null | undefined> | null | undefined;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * El momento en milisegundos: un instante en texto ('2026-11-01T18:30:00Z'), un Date o milisegundos.
3
+ *
4
+ * @param {string|number|Date} until
5
+ * @returns {number} NaN si no se entiende
6
+ */
7
+ export declare function instantMillisecondsOf(until: string | number | Date): number;
8
+ /**
9
+ * Lo que falta, partido. Ya pasado (o un momento que no se entiende) es todo en cero con isOver.
10
+ *
11
+ * @param {string|number|Date} until
12
+ * @param {number} now milisegundos de ahora (Date.now())
13
+ * @returns {{days: number, hours: number, minutes: number, seconds: number, totalSeconds: number, isOver: boolean}}
14
+ */
15
+ export declare function countdownPartsOf(until: string | number | Date, now: number): {
16
+ days: number;
17
+ hours: number;
18
+ minutes: number;
19
+ seconds: number;
20
+ totalSeconds: number;
21
+ isOver: boolean;
22
+ };
23
+ /**
24
+ * Lo que falta como reloj: «02:14:30»; con días, «3 d 02:14:30» (la letra del día la da el idioma); sin segundos,
25
+ * «02:14».
26
+ *
27
+ * @param {{days: number, hours: number, minutes: number, seconds: number}} parts
28
+ * @param {{daysLabel?: string, showSeconds?: boolean}} [options] daysLabel: la abreviatura de días ya traducida ('d')
29
+ * @returns {string}
30
+ */
31
+ export declare function countdownClockOf({ days, hours, minutes, seconds }: {
32
+ days: number;
33
+ hours: number;
34
+ minutes: number;
35
+ seconds: number;
36
+ }, { daysLabel, showSeconds }?: {
37
+ daysLabel?: string;
38
+ showSeconds?: boolean;
39
+ }): string;
@@ -0,0 +1,14 @@
1
+ import { countdownPartsOf } from './countdownParts.js';
2
+ /**
3
+ * @param {string|number|Date} until el momento: un instante en texto, un Date o milisegundos
4
+ * @param {{onComplete?: () => void, now?: () => number}} [options] onComplete: al llegar a cero (una vez); now: el reloj
5
+ * (para probar con una hora fija)
6
+ * @returns {{parts: ReturnType<typeof countdownPartsOf>, isOver: boolean}}
7
+ */
8
+ export declare function useCountdown(until: string | number | Date, { onComplete, now }?: {
9
+ onComplete?: () => void;
10
+ now?: () => number;
11
+ }): {
12
+ parts: ReturnType<typeof countdownPartsOf>;
13
+ isOver: boolean;
14
+ };
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @param {object} props
3
+ * @param {boolean} props.open
4
+ * @param {() => void} props.onClose
5
+ * @param {string} props.title ya traducido: qué documento es
6
+ * @param {string|Blob|null} props.src la dirección del PDF o el archivo (Blob o File)
7
+ * @param {string} [props.fileName] con qué nombre se descarga (por omisión, el título con .pdf)
8
+ * @param {import('react').ReactNode} [props.actions] botones suyos junto a «Abrir en otra pestaña» y «Descargar»
9
+ * @param {() => void} [props.onDownload] al descargar (para registrarlo, por ejemplo)
10
+ * @param {object} [props.texts] los textos que cambian, con la forma de `common` en los textos del paquete
11
+ */
12
+ export default function PdfViewerDialog(props: {
13
+ open: boolean;
14
+ onClose: () => void;
15
+ title: string;
16
+ src: string | Blob | null;
17
+ fileName?: string;
18
+ actions?: import('react').ReactNode;
19
+ onDownload?: () => void;
20
+ texts?: object;
21
+ }): import("react").JSX.Element;
@@ -0,0 +1,34 @@
1
+ /** De qué lado sale el cajón. */
2
+ export declare const FILTER_DRAWER_ANCHOR: Readonly<{
3
+ left: "left";
4
+ right: "right";
5
+ }>;
6
+ /**
7
+ * @param {object} props
8
+ * @param {boolean} props.open
9
+ * @param {() => void} props.onClose
10
+ * @param {object[]} props.fields los campos (filterDrawerFields.js): {name, label, kind, options?, keys?, prefix?, suffix?, decimals?, operators?, render?…}
11
+ * @param {Record<string, unknown>} props.values los filtros puestos hoy (de ahí sale el borrador al abrir)
12
+ * @param {(values: Record<string, unknown>) => void} props.onApply todos los campos del cajón juntos, al picar «Buscar»
13
+ * @param {'left'|'right'} [props.anchor] de qué lado sale (FILTER_DRAWER_ANCHOR); por omisión la derecha
14
+ * @param {number} [props.width] su ancho en escritorio, en px
15
+ * @param {string} [props.title] ya traducido; por omisión «Filtros»
16
+ * @param {string} [props.applyLabel] ya traducido; por omisión «Buscar»
17
+ * @param {boolean} [props.closeOnApply] por omisión sí
18
+ * @param {import('react').ReactNode} [props.children] algo más abajo de los campos (una nota, un enlace)
19
+ * @param {object} [props.texts] los textos que cambian, con la forma de `common` en los textos del paquete
20
+ */
21
+ export default function FilterDrawer(props: {
22
+ open: boolean;
23
+ onClose: () => void;
24
+ fields: object[];
25
+ values: Record<string, unknown>;
26
+ onApply: (values: Record<string, unknown>) => void;
27
+ anchor?: 'left' | 'right';
28
+ width?: number;
29
+ title?: string;
30
+ applyLabel?: string;
31
+ closeOnApply?: boolean;
32
+ children?: import('react').ReactNode;
33
+ texts?: object;
34
+ }): import("react").JSX.Element;
@@ -0,0 +1,139 @@
1
+ /** Los tipos de campo del cajón. */
2
+ export declare const FILTER_FIELD_KIND: Readonly<{
3
+ text: "text";
4
+ select: "select";
5
+ multiSelect: "multiSelect";
6
+ catalog: "catalog";
7
+ checkboxes: "checkboxes";
8
+ numberRange: "numberRange";
9
+ dateRange: "dateRange";
10
+ comparison: "comparison";
11
+ custom: "custom";
12
+ }>;
13
+ /** Los operadores de un campo de comparación, como viajan ('gte:500'). */
14
+ export declare const COMPARISON_OPERATOR: Readonly<{
15
+ equals: "eq";
16
+ greaterThan: "gt";
17
+ greaterOrEqual: "gte";
18
+ lessThan: "lt";
19
+ lessOrEqual: "lte";
20
+ }>;
21
+ /**
22
+ * ¿El campo guarda una lista?
23
+ *
24
+ * @param {{kind: string, multiple?: boolean}} field
25
+ * @returns {boolean}
26
+ */
27
+ export declare function isListField(field: {
28
+ kind: string;
29
+ multiple?: boolean;
30
+ }): boolean;
31
+ /**
32
+ * Los nombres con que viaja un campo en los filtros: uno, o dos para un rango.
33
+ *
34
+ * @param {{name: string, kind: string, keys?: {from?: string, to?: string}}} field
35
+ * @returns {string[]}
36
+ */
37
+ export declare function filterKeysOf(field: {
38
+ name: string;
39
+ kind: string;
40
+ keys?: {
41
+ from?: string;
42
+ to?: string;
43
+ };
44
+ }): string[];
45
+ /**
46
+ * Un valor de comparación ('gte:500') en sus partes; null si viene vacío o no se entiende.
47
+ *
48
+ * @param {unknown} text
49
+ * @returns {{operator: string, value: string}|null}
50
+ */
51
+ export declare function comparisonOf(text: unknown): {
52
+ operator: string;
53
+ value: string;
54
+ } | null;
55
+ /**
56
+ * Las partes de una comparación como viajan; '' si falta el número.
57
+ *
58
+ * @param {string} operator COMPARISON_OPERATOR
59
+ * @param {string} value
60
+ * @returns {string}
61
+ */
62
+ export declare function comparisonTextOf(operator: string, value: string): string;
63
+ /**
64
+ * ¿Ese valor de filtro está puesto? Un texto vacío o una lista vacía no cuentan.
65
+ *
66
+ * @param {unknown} value
67
+ * @returns {boolean}
68
+ */
69
+ export declare function isFilterValueSet(value: unknown): boolean;
70
+ /**
71
+ * Los tipos de filtro para ServerTable (filterKinds): los de lista se leen como lista en la dirección.
72
+ *
73
+ * @param {object[]} fields
74
+ * @returns {Record<string, string>}
75
+ */
76
+ export declare function filterDrawerKindsOf(fields: object[]): Record<string, string>;
77
+ /**
78
+ * Lo que hay en los filtros para los campos del cajón (lo demás no se toca).
79
+ *
80
+ * @param {object[]} fields
81
+ * @param {Record<string, unknown>} filters
82
+ * @returns {Record<string, unknown>}
83
+ */
84
+ export declare function drawerValuesOf(fields: object[], filters: Record<string, unknown>): Record<string, unknown>;
85
+ /**
86
+ * Los campos del cajón vacíos: lo que deja «Limpiar».
87
+ *
88
+ * @param {object[]} fields
89
+ * @returns {Record<string, unknown>}
90
+ */
91
+ export declare function emptyDrawerValuesOf(fields: object[]): Record<string, unknown>;
92
+ /**
93
+ * Los campos del cajón vacíos, para sumarlos a filterDefaults de ServerTable: la tabla solo guarda en la dirección los
94
+ * filtros que declara ahí.
95
+ *
96
+ * @param {object[]} fields
97
+ * @returns {Record<string, unknown>}
98
+ */
99
+ export declare function filterDrawerDefaultsOf(fields: object[]): Record<string, unknown>;
100
+ /**
101
+ * Cuántos campos del cajón tienen algo puesto (un rango con «desde» y «hasta» cuenta uno): el número del botón «Filtros».
102
+ *
103
+ * @param {object[]} fields
104
+ * @param {Record<string, unknown>} filters
105
+ * @returns {number}
106
+ */
107
+ export declare function activeDrawerFilterCountOf(fields: object[], filters: Record<string, unknown>): number;
108
+ /**
109
+ * Los rangos que no tienen sentido («hasta» menor que «desde»): {llave de «hasta»: true}.
110
+ *
111
+ * @param {object[]} fields
112
+ * @param {Record<string, unknown>} values
113
+ * @returns {Record<string, boolean>}
114
+ */
115
+ export declare function invalidRangesOf(fields: object[], values: Record<string, unknown>): Record<string, boolean>;
116
+ /**
117
+ * Los chips de los campos del cajón, con la forma de buildChipConfig: cada valor con su etiqueta, ya dicho en palabras.
118
+ *
119
+ * @param {object[]} fields
120
+ * @param {object} helpers
121
+ * @param {(key: string, values?: object) => string} helpers.t el de common (filterDrawer.chipFrom, chipTo)
122
+ * @param {(date: string) => string} [helpers.formatDate] cómo se ve una fecha
123
+ * @returns {{text: Array<{key: string, label: string, format?: (value: string) => string}>, multiSelect: Array<{key: string, label: string, itemLabel?: (value: string) => string}>}}
124
+ */
125
+ export declare function filterDrawerChipsOf(fields: object[], { t, formatDate }: {
126
+ t: (key: string, values?: object) => string;
127
+ formatDate?: (date: string) => string;
128
+ }): {
129
+ text: Array<{
130
+ key: string;
131
+ label: string;
132
+ format?: (value: string) => string;
133
+ }>;
134
+ multiSelect: Array<{
135
+ key: string;
136
+ label: string;
137
+ itemLabel?: (value: string) => string;
138
+ }>;
139
+ };
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @param {object} props
3
+ * @param {() => void} props.onClick
4
+ * @param {string} [props.label] ya traducido; por omisión «Ayuda de esta pantalla»
5
+ * @param {'small'|'medium'|'large'} [props.size]
6
+ * @param {object} [props.sx]
7
+ * @param {object} [props.texts] los textos que cambian, con la forma de `common` en los textos del paquete
8
+ */
9
+ export default function HelpButton({ onClick, label, size, sx, texts, ...unknownProps }: {
10
+ onClick: () => void;
11
+ label?: string;
12
+ size?: 'small' | 'medium' | 'large';
13
+ sx?: object;
14
+ texts?: object;
15
+ }): import("react").JSX.Element;
@@ -0,0 +1,35 @@
1
+ /** Por qué se cerró la ayuda. */
2
+ export declare const HELP_CLOSE_REASON: Readonly<{
3
+ finished: "finished";
4
+ closed: "closed";
5
+ }>;
6
+ /**
7
+ * @param {object} props
8
+ * @param {boolean} props.open
9
+ * @param {(reason: string, details: {dontShowAgain: boolean}) => void} props.onClose HELP_CLOSE_REASON y si marcó «No volver a mostrar»
10
+ * @param {Array<{title: string, content: import('react').ReactNode, image?: string, imageAlt?: string, media?: import('react').ReactNode}>} props.steps
11
+ * title y content ya traducidos; image (una dirección) o media (una ilustración propia) arriba
12
+ * @param {string} [props.title] ya traducido: de qué es la ayuda («Cómo usar el tablero»), arriba de los pasos
13
+ * @param {boolean} [props.showDontShowAgain] la casilla «No volver a mostrar al entrar» (por omisión sí)
14
+ * @param {(index: number) => void} [props.onStepChange]
15
+ * @param {number} [props.initialStep]
16
+ * @param {object} [props.texts] los textos que cambian, con la forma de `common` en los textos del paquete
17
+ */
18
+ export default function HelpCarouselDialog(props: {
19
+ open: boolean;
20
+ onClose: (reason: string, details: {
21
+ dontShowAgain: boolean;
22
+ }) => void;
23
+ steps: Array<{
24
+ title: string;
25
+ content: import('react').ReactNode;
26
+ image?: string;
27
+ imageAlt?: string;
28
+ media?: import('react').ReactNode;
29
+ }>;
30
+ title?: string;
31
+ showDontShowAgain?: boolean;
32
+ onStepChange?: (index: number) => void;
33
+ initialStep?: number;
34
+ texts?: object;
35
+ }): import("react").JSX.Element | null;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @param {object} options
3
+ * @param {string} options.helpKey de qué pantalla es la ayuda ('tasks'): una llave por ayuda
4
+ * @param {string} [options.version] súbala cuando la ayuda cambie y deba volver a salir
5
+ * @param {boolean} [options.autoOpen] que salga sola la primera vez (por omisión sí)
6
+ * @param {boolean} [options.seen] lo que sabe el servidor del proyecto: true = ya la vio (no sale sola)
7
+ * @returns {{open: boolean, openHelp: () => void, closeHelp: (reason?: string, details?: {dontShowAgain: boolean}) => void, wasSeen: boolean}}
8
+ */
9
+ export declare function useHelpCarousel({ helpKey, version, autoOpen, seen }: {
10
+ helpKey: string;
11
+ version?: string;
12
+ autoOpen?: boolean;
13
+ seen?: boolean;
14
+ }): {
15
+ open: boolean;
16
+ openHelp: () => void;
17
+ closeHelp: (reason?: string, details?: {
18
+ dontShowAgain: boolean;
19
+ }) => void;
20
+ wasSeen: boolean;
21
+ };
@@ -18,14 +18,24 @@ export { LANGUAGES, default as LanguageToggle } from './navigation/LanguageToggl
18
18
  export { default as FontSizeToggle } from './navigation/FontSizeToggle.js';
19
19
  export { FONT_SIZE_LEVELS } from './navigation/fontSizeLevels.js';
20
20
  export { default as PageBreadcrumbs } from './navigation/PageBreadcrumbs.js';
21
+ export { ROUTE_TABS_MODE, default as RouteTabs, useActiveRouteTab } from './navigation/RouteTabs.js';
22
+ export { default as HelpButton } from './help/HelpButton.js';
23
+ export { HELP_CLOSE_REASON, default as HelpCarouselDialog } from './help/HelpCarouselDialog.js';
24
+ export { default as RecordCard } from './cards/RecordCard.js';
25
+ export { default as RecordCardSkeleton } from './cards/RecordCardSkeleton.js';
26
+ export { useHelpCarousel } from './help/useHelpCarousel.js';
21
27
  export { default as DateRangeFilter } from './filters/DateRangeFilter.js';
28
+ export { FILTER_DRAWER_ANCHOR, default as FilterDrawer } from './filters/FilterDrawer.js';
29
+ export { COMPARISON_OPERATOR, FILTER_FIELD_KIND, activeDrawerFilterCountOf, comparisonOf, comparisonTextOf, filterDrawerChipsOf, filterDrawerDefaultsOf, filterDrawerKindsOf, filterKeysOf, } from './filters/filterDrawerFields.js';
22
30
  export { default as PeriodRangeSelector } from './filters/PeriodRangeSelector.js';
23
31
  export { default as QuickFilters } from './filters/QuickFilters.js';
24
32
  export { default as SegmentedControl, SEGMENTED_CONTROL_SX } from './filters/SegmentedControl.js';
25
33
  export { default as DictionaryText } from './labels/DictionaryText.js';
26
34
  export { default as StatusChip } from './labels/StatusChip.js';
35
+ export { ICON_BADGE_CLASSES, ICON_BADGE_VARIANT, default as IconBadge } from './labels/IconBadge.js';
27
36
  export { default as Tag } from './labels/Tag.js';
28
37
  export { default as CopyButton } from './actions/CopyButton.js';
38
+ export { tableRowTextOf } from './actions/tableRowText.js';
29
39
  export { default as DownloadMenu } from './actions/DownloadMenu.js';
30
40
  export { default as SecretField } from './actions/SecretField.js';
31
41
  export { default as CalendarHeatmap } from './metrics/CalendarHeatmap.js';
@@ -0,0 +1,34 @@
1
+ /** Los estilos de la insignia. */
2
+ export declare const ICON_BADGE_VARIANT: Readonly<{
3
+ outlined: "outlined";
4
+ soft: "soft";
5
+ plain: "plain";
6
+ }>;
7
+ export declare const ICON_BADGE_CLASSES: Readonly<{
8
+ root: "CalcitaIconBadge-root";
9
+ icon: "CalcitaIconBadge-icon";
10
+ label: "CalcitaIconBadge-label";
11
+ }>;
12
+ /**
13
+ * @param {object} props
14
+ * @param {Record<string, object>} [props.dictionary] de donde sale la etiqueta, el tooltip, el color y el ícono
15
+ * @param {string|null} [props.value] con dictionary: el código del API
16
+ * @param {import('react').ElementType} [props.icon] suelta: el ícono (un componente, p. ej. VerifiedUserOutlinedIcon)
17
+ * @param {import('react').ReactNode} [props.label] suelta: el texto, ya traducido
18
+ * @param {'primary'|'secondary'|'success'|'warning'|'error'|'info'|'default'} [props.tone] suelta: el color
19
+ * @param {'outlined'|'soft'|'plain'} [props.variant] ICON_BADGE_VARIANT
20
+ * @param {'small'|'medium'} [props.size]
21
+ * @param {import('react').ReactNode} [props.tooltip] lo que explica al pasar el cursor (con dictionary, el del diccionario)
22
+ * @param {object} [props.sx]
23
+ */
24
+ export default function IconBadge(props: {
25
+ dictionary?: Record<string, object>;
26
+ value?: string | null;
27
+ icon?: import('react').ElementType;
28
+ label?: import('react').ReactNode;
29
+ tone?: 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info' | 'default';
30
+ variant?: 'outlined' | 'soft' | 'plain';
31
+ size?: 'small' | 'medium';
32
+ tooltip?: import('react').ReactNode;
33
+ sx?: object;
34
+ }): import("react").JSX.Element;
@@ -0,0 +1,44 @@
1
+ /** Dónde vive la pestaña: en la ruta o en la consulta. */
2
+ export declare const ROUTE_TABS_MODE: Readonly<{
3
+ path: "path";
4
+ query: "query";
5
+ }>;
6
+ /**
7
+ * La pestaña activa, para que la pantalla pinte lo suyo (sobre todo con mode query: la pantalla es una sola).
8
+ *
9
+ * @param {object[]} tabs las mismas de RouteTabs
10
+ * @param {{mode?: string, paramName?: string}} [options]
11
+ * @returns {string|null} el `to` (por ruta) o el `value` (por consulta) de la activa
12
+ */
13
+ export declare function useActiveRouteTab(tabs: object[], { mode, paramName }?: {
14
+ mode?: string;
15
+ paramName?: string;
16
+ }): string | null;
17
+ /**
18
+ * @param {object} props
19
+ * @param {Array<{to?: string, value?: string, label: import('react').ReactNode, icon?: import('react').ReactElement, badge?: import('react').ReactNode, access?: object, exact?: boolean, disabled?: boolean, hidden?: boolean}>} props.tabs
20
+ * to (por ruta) o value (por consulta); label ya traducido; badge: un conteo o un texto corto junto a la etiqueta
21
+ * @param {string} props.ariaLabel ya traducido: de qué son estas pestañas (para el lector de pantalla)
22
+ * @param {'path'|'query'} [props.mode] ROUTE_TABS_MODE
23
+ * @param {string} [props.paramName] con mode query: el nombre en la consulta (por omisión 'tab')
24
+ * @param {(tab: object) => void} [props.onChange] avisa la pestaña que se eligió (la navegación ya la hace la liga)
25
+ * @param {object} [props.sx]
26
+ */
27
+ export default function RouteTabs(props: {
28
+ tabs: Array<{
29
+ to?: string;
30
+ value?: string;
31
+ label: import('react').ReactNode;
32
+ icon?: import('react').ReactElement;
33
+ badge?: import('react').ReactNode;
34
+ access?: object;
35
+ exact?: boolean;
36
+ disabled?: boolean;
37
+ hidden?: boolean;
38
+ }>;
39
+ ariaLabel: string;
40
+ mode?: 'path' | 'query';
41
+ paramName?: string;
42
+ onChange?: (tab: object) => void;
43
+ sx?: object;
44
+ }): import("react").JSX.Element;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @param {Array<{to: string, exact?: boolean}>} tabs
3
+ * @param {string} pathname
4
+ * @returns {string|null} el `to` de la pestaña activa
5
+ */
6
+ export declare function activeRouteTabOf(tabs: Array<{
7
+ to: string;
8
+ exact?: boolean;
9
+ }>, pathname: string): string | null;
10
+ /**
11
+ * @param {Array<{value: string}>} tabs
12
+ * @param {string} search la consulta de la dirección ('?tab=pagos&page=2')
13
+ * @param {string} paramName 'tab'
14
+ * @returns {string|null} la pestaña de la consulta si existe; si no, la primera
15
+ */
16
+ export declare function queryTabOf(tabs: Array<{
17
+ value: string;
18
+ }>, search: string, paramName: string): string | null;
19
+ /**
20
+ * La consulta con otra pestaña, sin perder lo demás que traía (?page=2 se queda).
21
+ *
22
+ * @param {string} search
23
+ * @param {string} paramName
24
+ * @param {string} value
25
+ * @returns {string} '?tab=pagos&page=2'
26
+ */
27
+ export declare function searchWithTab(search: string, paramName: string, value: string): string;
@@ -0,0 +1,62 @@
1
+ /**
2
+ * La lista conserva el tipo que usa la pantalla para lo ya guardado (T): onChange regresa esos mismos y los File nuevos.
3
+ *
4
+ * @template {File|{id?: string, name: string, size?: number}} T
5
+ * @param {object} props
6
+ * @param {string} [props.name]
7
+ * @param {import('react').ReactNode} [props.label] ya traducida; sin ella, va sin etiqueta (dentro de un correo, por ejemplo)
8
+ * @param {T[]} [props.value] los nuevos y los que ya están guardados
9
+ * @param {(files: Array<T|File>) => void} props.onChange la lista completa
10
+ * @param {() => void} [props.onBlur] se llama al agregar o quitar (para que el formulario lo marque como tocado)
11
+ * @param {(file: T) => void} [props.onRemove] al quitar uno (antes de onChange)
12
+ * @param {string|string[]} [props.accept] 'excel' | ['pdf', 'image'] | '.xlsx,.xls' | 'image/*'
13
+ * @param {number|string} [props.maxSize] el peso máximo de cada archivo: bytes o '10 MB'
14
+ * @param {number} [props.maxFiles] cuántos como máximo
15
+ * @param {number|string} [props.maxTotalSize] cuánto pueden pesar todos juntos
16
+ * @param {string|{key: string, values?: object}} [props.error]
17
+ * @param {string} [props.helperText] ya traducida
18
+ * @param {string} [props.buttonLabel] ya traducido; por omisión «Adjuntar»
19
+ * @param {boolean} [props.showButton] false esconde «Adjuntar» (la ventana se abre con pickerRef desde un botón suyo)
20
+ * @param {import('react').Ref<{open: () => void}>} [props.pickerRef] recibe {open} para abrir la ventana de archivos
21
+ * @param {boolean} [props.disabled]
22
+ * @param {boolean} [props.busy] candado mientras se sube: no se puede agregar ni quitar
23
+ * @param {(file: File, reason: string) => void} [props.onReject] reason es uno de FILE_REJECTION; sin él, un aviso
24
+ * @param {Parameters<typeof import('./TemplateDownloadButton.js').default>[0]} [props.template] «Descargar la
25
+ * plantilla» junto a «Adjuntar»
26
+ * @param {import('react').ReactNode} [props.actions] botones suyos junto a «Adjuntar»
27
+ * @param {object} [props.sx]
28
+ * @param {object} [props.texts] los textos que cambian, con la forma de `common` en los textos del paquete
29
+ */
30
+ export default function AttachmentsInput<T extends File | {
31
+ id?: string;
32
+ name: string;
33
+ size?: number;
34
+ }>(props: {
35
+ name?: string;
36
+ label?: import('react').ReactNode;
37
+ value?: T[];
38
+ onChange: (files: Array<T | File>) => void;
39
+ onBlur?: () => void;
40
+ onRemove?: (file: T) => void;
41
+ accept?: string | string[];
42
+ maxSize?: number | string;
43
+ maxFiles?: number;
44
+ maxTotalSize?: number | string;
45
+ error?: string | {
46
+ key: string;
47
+ values?: object;
48
+ };
49
+ helperText?: string;
50
+ buttonLabel?: string;
51
+ showButton?: boolean;
52
+ pickerRef?: import('react').Ref<{
53
+ open: () => void;
54
+ }>;
55
+ disabled?: boolean;
56
+ busy?: boolean;
57
+ onReject?: (file: File, reason: string) => void;
58
+ template?: Parameters<typeof import('./TemplateDownloadButton.js').default>[0];
59
+ actions?: import('react').ReactNode;
60
+ sx?: object;
61
+ texts?: object;
62
+ }): import("react").JSX.Element;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @param {object} props
3
+ * @param {{name: string, size?: number}} props.file
4
+ * @param {(() => void)|undefined} [props.onRemove] sin él no hay × (con el candado puesto, por ejemplo)
5
+ * @param {string} props.removeLabel ya traducido: «Quitar contrato.pdf»
6
+ * @param {import('react').ElementType} [props.ChipComponent] la parte del tema del cargador (por omisión, el Chip de MUI)
7
+ * @param {object} [props.ownSx] el estilo de la casa, debajo del tema del proyecto
8
+ */
9
+ export default function FileChip({ file, onRemove, removeLabel, ChipComponent, ownSx }: {
10
+ file: {
11
+ name: string;
12
+ size?: number;
13
+ };
14
+ onRemove?: (() => void) | undefined;
15
+ removeLabel: string;
16
+ ChipComponent?: import('react').ElementType;
17
+ ownSx?: object;
18
+ }): import("react").JSX.Element;
@@ -10,6 +10,8 @@
10
10
  * @param {boolean} [props.busy] candado mientras se sube: no se puede soltar, elegir ni quitar
11
11
  * @param {boolean|{title?: string, text?: string}} [props.busyModal] además bloquea la pantalla mientras busy
12
12
  * @param {(file: File, reason: string) => void} [props.onReject] reason es uno de FILE_REJECTION; sin él, un aviso
13
+ * @param {Parameters<typeof import('./TemplateDownloadButton.js').default>[0]} [props.template] «Descargar la
14
+ * plantilla» junto a «Elegir archivo»: {href} de un archivo fijo o {request} al API
13
15
  * @param {import('react').ReactNode} [props.actions]
14
16
  * @param {import('react').ReactNode} [props.children]
15
17
  * @param {object} [props.sx] ajustes del recuadro
@@ -29,6 +31,7 @@ export default function FileDropzone(props: {
29
31
  text?: string;
30
32
  };
31
33
  onReject?: (file: File, reason: string) => void;
34
+ template?: Parameters<typeof import('./TemplateDownloadButton.js').default>[0];
32
35
  actions?: import('react').ReactNode;
33
36
  children?: import('react').ReactNode;
34
37
  sx?: object;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @param {object} props
3
+ * @param {string} [props.name]
4
+ * @param {import('react').ReactNode} [props.label] ya traducida
5
+ * @param {File|{name: string, size?: number}|null} [props.value] el archivo nuevo o el que ya está guardado
6
+ * @param {(file: File|null) => void} props.onChange null al quitarlo
7
+ * @param {() => void} [props.onBlur] se llama al elegir o quitar (para que el formulario lo marque como tocado)
8
+ * @param {string|string[]} [props.accept] 'excel' | ['pdf', 'image'] | '.xlsx,.xls' | 'image/*'
9
+ * @param {number|string} [props.maxSize] bytes o '10 MB'
10
+ * @param {string|{key: string, values?: object}} [props.error]
11
+ * @param {string} [props.helperText] ya traducida
12
+ * @param {string} [props.buttonLabel] ya traducido; por omisión «Elegir archivo»
13
+ * @param {string} [props.emptyText] ya traducido; por omisión «Ningún archivo elegido»
14
+ * @param {boolean} [props.disabled]
15
+ * @param {boolean} [props.busy] candado mientras se sube: no se puede elegir, soltar ni quitar
16
+ * @param {(file: File, reason: string) => void} [props.onReject] reason es uno de FILE_REJECTION; sin él, un aviso
17
+ * @param {Parameters<typeof import('./TemplateDownloadButton.js').default>[0]} [props.template] «Descargar la
18
+ * plantilla» junto al botón
19
+ * @param {import('react').ReactNode} [props.actions] botones suyos en el mismo renglón
20
+ * @param {object} [props.sx] ajustes del renglón
21
+ * @param {object} [props.texts] los textos que cambian, con la forma de `common` en los textos del paquete
22
+ */
23
+ export default function FileInput(props: {
24
+ name?: string;
25
+ label?: import('react').ReactNode;
26
+ value?: File | {
27
+ name: string;
28
+ size?: number;
29
+ } | null;
30
+ onChange: (file: File | null) => void;
31
+ onBlur?: () => void;
32
+ accept?: string | string[];
33
+ maxSize?: number | string;
34
+ error?: string | {
35
+ key: string;
36
+ values?: object;
37
+ };
38
+ helperText?: string;
39
+ buttonLabel?: string;
40
+ emptyText?: string;
41
+ disabled?: boolean;
42
+ busy?: boolean;
43
+ onReject?: (file: File, reason: string) => void;
44
+ template?: Parameters<typeof import('./TemplateDownloadButton.js').default>[0];
45
+ actions?: import('react').ReactNode;
46
+ sx?: object;
47
+ texts?: object;
48
+ }): import("react").JSX.Element;