@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,129 @@
1
+ "use client";
2
+ import { jsxs, jsx } from "react/jsx-runtime";
3
+ import { useId, useState, useEffect } from "react";
4
+ import Alert from "@mui/material/Alert";
5
+ import Button from "@mui/material/Button";
6
+ import Checkbox from "@mui/material/Checkbox";
7
+ import Dialog from "@mui/material/Dialog";
8
+ import DialogActions from "@mui/material/DialogActions";
9
+ import DialogContent from "@mui/material/DialogContent";
10
+ import DialogTitle from "@mui/material/DialogTitle";
11
+ import FormControlLabel from "@mui/material/FormControlLabel";
12
+ import Stack from "@mui/material/Stack";
13
+ import Typography from "@mui/material/Typography";
14
+ import { piecePart, usePieceProps } from "../theme/themePieces.js";
15
+ import { useToolkitTranslation } from "../toolkit/useToolkitTranslation.js";
16
+ import { warnUnknownProps } from "../toolkit/unknownProps.js";
17
+ const THEME_NAME = "CalcitaTermsAcceptanceDialog";
18
+ const TermsContent = piecePart(THEME_NAME, "Content", DialogContent);
19
+ const TermsFrame = piecePart(THEME_NAME, "Frame", "iframe");
20
+ const TermsFooter = piecePart(THEME_NAME, "Footer", Stack);
21
+ const READ_TO_END_SLACK_PIXELS = 16;
22
+ const IGNORED_CLOSE_REASONS = /* @__PURE__ */ new Set(["backdropClick", "escapeKeyDown"]);
23
+ function TermsAcceptanceDialog(props) {
24
+ const {
25
+ open,
26
+ version,
27
+ onAccept,
28
+ onDecline,
29
+ title,
30
+ children,
31
+ pdfSrc,
32
+ requireReading = true,
33
+ checkboxLabel,
34
+ acceptLabel,
35
+ declineLabel,
36
+ texts,
37
+ ...unknownProps
38
+ } = usePieceProps(props, THEME_NAME);
39
+ warnUnknownProps(THEME_NAME, unknownProps);
40
+ const { t } = useToolkitTranslation("common", texts);
41
+ const titleId = useId();
42
+ const [contentNode, setContentNode] = useState(null);
43
+ const mustRead = requireReading && !pdfSrc;
44
+ const [hasReadToEnd, setHasReadToEnd] = useState(!mustRead);
45
+ const [isChecked, setIsChecked] = useState(false);
46
+ const [isSaving, setIsSaving] = useState(false);
47
+ const [saveError, setSaveError] = useState(null);
48
+ const checkReadToEnd = () => {
49
+ if (contentNode && contentNode.scrollTop + contentNode.clientHeight >= contentNode.scrollHeight - READ_TO_END_SLACK_PIXELS) {
50
+ setHasReadToEnd(true);
51
+ }
52
+ };
53
+ useEffect(() => {
54
+ if (!contentNode || !mustRead) {
55
+ return void 0;
56
+ }
57
+ checkReadToEnd();
58
+ if (typeof ResizeObserver === "undefined") {
59
+ return void 0;
60
+ }
61
+ const observer = new ResizeObserver(checkReadToEnd);
62
+ observer.observe(contentNode);
63
+ return () => observer.disconnect();
64
+ }, [contentNode, mustRead]);
65
+ const accept = async () => {
66
+ setIsSaving(true);
67
+ setSaveError(null);
68
+ try {
69
+ await onAccept({ version });
70
+ } catch (error) {
71
+ setSaveError(error?.message ?? t("legal.terms.saveFailed"));
72
+ } finally {
73
+ setIsSaving(false);
74
+ }
75
+ };
76
+ return /* @__PURE__ */ jsxs(
77
+ Dialog,
78
+ {
79
+ open,
80
+ maxWidth: "md",
81
+ fullWidth: true,
82
+ "aria-labelledby": titleId,
83
+ onClose: (event, reason) => !IGNORED_CLOSE_REASONS.has(reason) && onDecline(),
84
+ children: [
85
+ /* @__PURE__ */ jsxs(DialogTitle, { id: titleId, children: [
86
+ title ?? t("legal.terms.title"),
87
+ /* @__PURE__ */ jsx(Typography, { component: "span", variant: "body2", color: "text.secondary", sx: { display: "block" }, children: t("legal.terms.version", { version }) })
88
+ ] }),
89
+ /* @__PURE__ */ jsx(
90
+ TermsContent,
91
+ {
92
+ dividers: true,
93
+ ref: setContentNode,
94
+ onScroll: mustRead ? checkReadToEnd : void 0,
95
+ tabIndex: 0,
96
+ ownSx: { maxHeight: { xs: "55vh", md: "60vh" } },
97
+ children: pdfSrc ? /* @__PURE__ */ jsx(
98
+ TermsFrame,
99
+ {
100
+ src: pdfSrc,
101
+ title: title ?? t("legal.terms.title"),
102
+ ownSx: { display: "block", width: "100%", height: { xs: "50vh", md: "56vh" }, border: 0 }
103
+ }
104
+ ) : children
105
+ }
106
+ ),
107
+ /* @__PURE__ */ jsxs(TermsFooter, { ownSx: { px: 3, pt: 2 }, children: [
108
+ saveError && /* @__PURE__ */ jsx(Alert, { severity: "error", role: "alert", sx: { mb: 1.5 }, children: saveError }),
109
+ /* @__PURE__ */ jsx(
110
+ FormControlLabel,
111
+ {
112
+ control: /* @__PURE__ */ jsx(Checkbox, { checked: isChecked, onChange: (event) => setIsChecked(event.target.checked), disabled: !hasReadToEnd || isSaving }),
113
+ label: checkboxLabel ?? t("legal.terms.checkbox")
114
+ }
115
+ ),
116
+ !hasReadToEnd && /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "text.secondary", children: t("legal.terms.readToEnd") })
117
+ ] }),
118
+ /* @__PURE__ */ jsxs(DialogActions, { sx: { px: 3, pb: 2 }, children: [
119
+ /* @__PURE__ */ jsx(Button, { onClick: onDecline, disabled: isSaving, children: declineLabel ?? t("legal.terms.decline") }),
120
+ /* @__PURE__ */ jsx(Button, { variant: "contained", onClick: accept, disabled: !isChecked || isSaving, loading: isSaving, children: acceptLabel ?? t("legal.terms.accept") })
121
+ ] })
122
+ ]
123
+ }
124
+ );
125
+ }
126
+ export {
127
+ TermsAcceptanceDialog as default
128
+ };
129
+ //# sourceMappingURL=TermsAcceptanceDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TermsAcceptanceDialog.js","sources":["../../src/legal/TermsAcceptanceDialog.jsx"],"sourcesContent":["// Aceptar los términos (o el aviso de privacidad) antes de seguir: la ventana enseña el texto de ESA versión, pide leerlo\n// hasta el final, marcar «He leído y acepto» y picar «Acepto»; «No acepto» es la otra salida. No se cierra con Escape ni con\n// un clic afuera: es una decisión, no un aviso.\n//\n// Quién lo registra es la pantalla: onAccept recibe la versión y manda al API quién aceptó qué y cuándo (lo que vale ante\n// un reclamo). Si onAccept regresa una promesa, la ventana espera con el botón ocupado; si truena, enseña el motivo y deja\n// intentar otra vez.\n//\n// El texto va como children (se sabe si ya se leyó hasta el final) o como un PDF (pdfSrc, con el visor del navegador; ahí no\n// se puede saber hasta dónde se leyó y basta la casilla).\n//\n// Se cambia desde el tema del proyecto, como las piezas de MUI: components.CalcitaTermsAcceptanceDialog con defaultProps y\n// styleOverrides de sus partes: content, frame, footer.\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useEffect, useId, useState} from 'react';\nimport Alert from '@mui/material/Alert';\nimport Button from '@mui/material/Button';\nimport Checkbox from '@mui/material/Checkbox';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport {piecePart, usePieceProps} from '@/theme/themePieces.js';\nimport {useToolkitTranslation} from '@/toolkit/useToolkitTranslation.js';\nimport {warnUnknownProps} from '@/toolkit/unknownProps.js';\n\n// el nombre de la pieza en el tema y sus partes (theme.components.CalcitaTermsAcceptanceDialog)\nconst THEME_NAME = 'CalcitaTermsAcceptanceDialog';\nconst TermsContent = piecePart(THEME_NAME, 'Content', DialogContent);\nconst TermsFrame = piecePart(THEME_NAME, 'Frame', 'iframe');\nconst TermsFooter = piecePart(THEME_NAME, 'Footer', Stack);\n\n// cuánto antes del final ya cuenta como leído (el último renglón medio a la vista)\nconst READ_TO_END_SLACK_PIXELS = 16;\n// los cierres que se ignoran: aceptar o no es una decisión con sus botones\nconst IGNORED_CLOSE_REASONS = new Set(['backdropClick', 'escapeKeyDown']);\n\n/**\n * @param {object} props\n * @param {boolean} props.open\n * @param {string} props.version la de los términos que se enseñan (la que recibe onAccept)\n * @param {(acceptance: {version: string}) => void|Promise<void>} props.onAccept la pantalla lo registra en su API\n * @param {() => void} props.onDecline «No acepto» (salir, por ejemplo)\n * @param {string} [props.title] ya traducido; por omisión «Términos y condiciones»\n * @param {import('react').ReactNode} [props.children] el texto de los términos\n * @param {string} [props.pdfSrc] en lugar del texto: la dirección del PDF\n * @param {boolean} [props.requireReading] pedir que se lea hasta el final antes de poder aceptar (por omisión, sí; con PDF no\n * aplica)\n * @param {string} [props.checkboxLabel] ya traducido; por omisión «He leído y acepto los términos»\n * @param {string} [props.acceptLabel] ya traducido; por omisión «Acepto»\n * @param {string} [props.declineLabel] ya traducido; por omisión «No acepto»\n * @param {object} [props.texts] los textos que cambian, con la forma de `common` en los textos del paquete\n */\nexport default function TermsAcceptanceDialog(props) {\n const {\n open, version, onAccept, onDecline, title, children, pdfSrc, requireReading = true, checkboxLabel, acceptLabel, declineLabel, texts,\n ...unknownProps\n } = usePieceProps(props, THEME_NAME);\n warnUnknownProps(THEME_NAME, unknownProps);\n const {t} = useToolkitTranslation('common', texts);\n const titleId = useId();\n // el contenido que se lee: se guarda al aparecer (la ventana lo pinta en un portal, DESPUÉS de este componente)\n const [contentNode, setContentNode] = useState(null);\n const mustRead = requireReading && !pdfSrc;\n const [hasReadToEnd, setHasReadToEnd] = useState(!mustRead);\n const [isChecked, setIsChecked] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const [saveError, setSaveError] = useState(null);\n\n const checkReadToEnd = () => {\n if (contentNode && contentNode.scrollTop + contentNode.clientHeight >= contentNode.scrollHeight - READ_TO_END_SLACK_PIXELS) {\n setHasReadToEnd(true);\n }\n };\n // un texto que cabe completo ya está leído. OJO: se revisa cuando el contenido aparece y cada vez que cambia de tamaño;\n // revisarlo al abrir no sirve: el portal todavía no lo pinta y, si no hay que deslizar, la casilla se quedaba apagada\n // para siempre\n useEffect(() => {\n if (!contentNode || !mustRead) {\n return undefined;\n }\n checkReadToEnd();\n if (typeof ResizeObserver === 'undefined') {\n return undefined;\n }\n const observer = new ResizeObserver(checkReadToEnd);\n observer.observe(contentNode);\n return () => observer.disconnect();\n }, [contentNode, mustRead]);\n\n const accept = async () => {\n setIsSaving(true);\n setSaveError(null);\n try {\n await onAccept({version});\n } catch (error) {\n setSaveError(error?.message ?? t('legal.terms.saveFailed'));\n } finally {\n setIsSaving(false);\n }\n };\n\n return (\n <Dialog open={open} maxWidth=\"md\" fullWidth aria-labelledby={titleId}\n onClose={(event, reason) => !IGNORED_CLOSE_REASONS.has(reason) && onDecline()}>\n <DialogTitle id={titleId}>\n {title ?? t('legal.terms.title')}\n <Typography component=\"span\" variant=\"body2\" color=\"text.secondary\" sx={{display: 'block'}}>\n {t('legal.terms.version', {version})}\n </Typography>\n </DialogTitle>\n <TermsContent dividers ref={setContentNode} onScroll={mustRead ? checkReadToEnd : undefined} tabIndex={0}\n ownSx={{maxHeight: {xs: '55vh', md: '60vh'}}}>\n {pdfSrc ? (\n <TermsFrame src={pdfSrc} title={title ?? t('legal.terms.title')}\n ownSx={{display: 'block', width: '100%', height: {xs: '50vh', md: '56vh'}, border: 0}} />\n ) : children}\n </TermsContent>\n <TermsFooter ownSx={{px: 3, pt: 2}}>\n {saveError && <Alert severity=\"error\" role=\"alert\" sx={{mb: 1.5}}>{saveError}</Alert>}\n <FormControlLabel\n control={<Checkbox checked={isChecked} onChange={(event) => setIsChecked(event.target.checked)} disabled={!hasReadToEnd || isSaving} />}\n label={checkboxLabel ?? t('legal.terms.checkbox')}\n />\n {!hasReadToEnd && <Typography variant=\"caption\" color=\"text.secondary\">{t('legal.terms.readToEnd')}</Typography>}\n </TermsFooter>\n <DialogActions sx={{px: 3, pb: 2}}>\n <Button onClick={onDecline} disabled={isSaving}>{declineLabel ?? t('legal.terms.decline')}</Button>\n <Button variant=\"contained\" onClick={accept} disabled={!isChecked || isSaving} loading={isSaving}>\n {acceptLabel ?? t('legal.terms.accept')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ function acceptedVersionOf(storageKey, storage = globalThis.localStorage) {
2
+ try {
3
+ return storage?.getItem(storageKey) ?? null;
4
+ } catch {
5
+ return null;
6
+ }
7
+ }
8
+ function rememberAcceptedVersion(storageKey, version, storage = globalThis.localStorage) {
9
+ try {
10
+ storage?.setItem(storageKey, version);
11
+ } catch {
12
+ }
13
+ }
14
+ export {
15
+ acceptedVersionOf,
16
+ rememberAcceptedVersion
17
+ };
18
+ //# sourceMappingURL=consentStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consentStorage.js","sources":["../../src/legal/consentStorage.js"],"sourcesContent":["// Qué versión de un aviso aceptó la persona EN ESTE NAVEGADOR (el de cookies, por ejemplo). Se guarda la versión y no un\n// «sí»: al cambiar el aviso (versión nueva) se vuelve a preguntar.\n//\n// OJO: el navegador puede negar el almacenamiento (ventana privada, sitio bloqueado): entonces se pregunta otra vez en cada\n// visita, sin tronar. Lo que debe quedar registrado de verdad (aceptar los términos) va al servidor, no aquí.\n//\n// Funciones del navegador, sin React: function (regla de la casa). Pruebas en consentStorage.test.js.\n\n/**\n * La versión aceptada; null si no hay o no se puede leer.\n *\n * @param {string} storageKey\n * @param {Storage} [storage] por omisión, el localStorage del navegador\n * @returns {string|null}\n */\nexport function acceptedVersionOf(storageKey, storage = globalThis.localStorage) {\n try {\n return storage?.getItem(storageKey) ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Anota la versión aceptada; si el navegador no deja, no pasa nada (se volverá a preguntar).\n *\n * @param {string} storageKey\n * @param {string} version\n * @param {Storage} [storage]\n */\nexport function rememberAcceptedVersion(storageKey, version, storage = globalThis.localStorage) {\n try {\n storage?.setItem(storageKey, version);\n } catch {\n // sin almacenamiento: se pregunta en la siguiente visita\n }\n}\n"],"names":[],"mappings":"AAeO,SAAS,kBAAkB,YAAY,UAAU,WAAW,cAAc;AAC7E,MAAI;AACA,WAAO,SAAS,QAAQ,UAAU,KAAK;AAAA,EAC3C,QAAQ;AACJ,WAAO;AAAA,EACX;AACJ;AASO,SAAS,wBAAwB,YAAY,SAAS,UAAU,WAAW,cAAc;AAC5F,MAAI;AACA,aAAS,QAAQ,YAAY,OAAO;AAAA,EACxC,QAAQ;AAAA,EAER;AACJ;"}
@@ -0,0 +1,17 @@
1
+ "use client";
2
+ import { useState } from "react";
3
+ import { acceptedVersionOf, rememberAcceptedVersion } from "./consentStorage.js";
4
+ const DEFAULT_COOKIE_CONSENT_KEY = "calcita:cookieConsent";
5
+ function useCookieConsent({ version = "1", storageKey = DEFAULT_COOKIE_CONSENT_KEY } = {}) {
6
+ const [acceptedVersion, setAcceptedVersion] = useState(() => acceptedVersionOf(storageKey));
7
+ const accept = () => {
8
+ rememberAcceptedVersion(storageKey, version);
9
+ setAcceptedVersion(version);
10
+ };
11
+ return { hasAccepted: acceptedVersion === version, accept };
12
+ }
13
+ export {
14
+ DEFAULT_COOKIE_CONSENT_KEY,
15
+ useCookieConsent
16
+ };
17
+ //# sourceMappingURL=useCookieConsent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCookieConsent.js","sources":["../../src/legal/useCookieConsent.js"],"sourcesContent":["// ¿Ya aceptó esta persona el aviso de cookies, en esta versión, en este navegador? Para armar un aviso propio; CookieNotice\n// es el que ya viene pintado.\n//\n// const {hasAccepted, accept} = useCookieConsent({version: '2026-11'});\n//\n// Hook genérico: function (regla de la casa).\nimport {useState} from 'react';\n\nimport {acceptedVersionOf, rememberAcceptedVersion} from '@/legal/consentStorage.js';\n\n/** Dónde se recuerda, si el proyecto no da su llave (con el nombre de su app, para no chocar con otra en el mismo dominio). */\nexport const DEFAULT_COOKIE_CONSENT_KEY = 'calcita:cookieConsent';\n\n/**\n * @param {{version?: string, storageKey?: string}} [options] version: la del aviso (al cambiarla se vuelve a preguntar)\n * @returns {{hasAccepted: boolean, accept: () => void}}\n */\nexport function useCookieConsent({version = '1', storageKey = DEFAULT_COOKIE_CONSENT_KEY} = {}) {\n // se lee al pintar la primera vez (sin servidor de por medio: el aviso es de este navegador)\n const [acceptedVersion, setAcceptedVersion] = useState(() => acceptedVersionOf(storageKey));\n\n const accept = () => {\n rememberAcceptedVersion(storageKey, version);\n setAcceptedVersion(version);\n };\n\n return {hasAccepted: acceptedVersion === version, accept};\n}\n"],"names":[],"mappings":";;;AAWY,MAAC,6BAA6B;AAMnC,SAAS,iBAAiB,EAAC,UAAU,KAAK,aAAa,2BAA0B,IAAI,IAAI;AAE5F,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAS,MAAM,kBAAkB,UAAU,CAAC;AAE1F,QAAM,SAAS,MAAM;AACjB,4BAAwB,YAAY,OAAO;AAC3C,uBAAmB,OAAO;AAAA,EAC9B;AAEA,SAAO,EAAC,aAAa,oBAAoB,SAAS,OAAM;AAC5D;"}
@@ -117,18 +117,95 @@ const en = Object.freeze({
117
117
  "selectPlaceholder": "Choose an option",
118
118
  "copy": "Copy",
119
119
  "copied": "Copied",
120
+ "copyFailed": "Could not copy: the browser did not allow it.",
120
121
  "noOptions": "No option matches",
121
122
  "loadingOptions": "Loading options…",
122
123
  "pickColor": "Pick the color",
123
124
  "colorContrast": "Contrast on white: {{ratio}}:1",
124
125
  "colorLowContrast": "With that color the text would be hard to read on white. {{suggestion}} is the same hue, darker.",
125
- "colorUseSuggestion": "Use {{color}}"
126
+ "colorUseSuggestion": "Use {{color}}",
127
+ "selectAll": "Select all ({{count}})",
128
+ "unselectAll": "Clear all",
129
+ "selectMatching": "Select the {{count}} matching",
130
+ "unselectMatching": "Clear the {{count}} matching",
131
+ "moreSelected": "+{{count}} more"
126
132
  },
127
133
  "selection": {
128
134
  "clear": "Clear selection",
129
135
  "actionsLabel": "Actions for the selected",
130
136
  "summaryLabel": "The selection"
131
137
  },
138
+ "repeating": {
139
+ "row": "Row {{number}}",
140
+ "add": "Add",
141
+ "removeShort": "Remove",
142
+ "clearShort": "Clear",
143
+ "remove": "Remove «{{row}}»",
144
+ "clear": "Clear «{{row}}»",
145
+ "maxRows_one": "Up to {{count}} row",
146
+ "maxRows_other": "Up to {{count}} rows",
147
+ "confirmTitle": "Remove «{{row}}»?",
148
+ "confirmText": "It was already saved: it is really removed when the form is saved.",
149
+ "blockedTitle": "It cannot be removed",
150
+ "understood": "Got it"
151
+ },
152
+ "transfer": {
153
+ "available": "Available",
154
+ "chosen": "Chosen",
155
+ "search": "Search",
156
+ "markVisible": "Mark all visible in «{{list}}»",
157
+ "markedOf": "{{marked}} of {{count}} marked",
158
+ "moveMarked": "Move the marked ones to chosen",
159
+ "moveAll": "Move all to chosen",
160
+ "returnMarked": "Return the marked ones to available",
161
+ "returnAll": "Return all to available",
162
+ "emptyAvailable": "Nothing left to choose.",
163
+ "noMatches": "Nothing matches «{{text}}».",
164
+ "emptyChosen": "Nothing chosen yet: mark them on the left and move them with ›."
165
+ },
166
+ "help": {
167
+ "button": "Help for this screen",
168
+ "close": "Close the help",
169
+ "next": "Next",
170
+ "back": "Back",
171
+ "done": "Done",
172
+ "stepOf": "Step {{current}} of {{total}}",
173
+ "goToStep": "Go to step {{number}}",
174
+ "dontShowAgain": "Do not show again on entering"
175
+ },
176
+ "filterDrawer": {
177
+ "open": "Filters",
178
+ "openWithCount": "Filters ({{count}})",
179
+ "title": "Filters",
180
+ "close": "Close the filters",
181
+ "apply": "Search",
182
+ "clear": "Clear",
183
+ "any": "Any",
184
+ "from": "From",
185
+ "to": "To",
186
+ "operator": "Comparison",
187
+ "value": "Amount",
188
+ "operators": {
189
+ "eq": "Equal to",
190
+ "gt": "Greater than",
191
+ "gte": "At least",
192
+ "lt": "Less than",
193
+ "lte": "At most"
194
+ },
195
+ "rangeBackwards": "It must be equal to or greater than «From».",
196
+ "chipFrom": "{{label}} from",
197
+ "chipTo": "{{label}} to"
198
+ },
199
+ "recordCard": {
200
+ "open": "Open",
201
+ "actions": "More actions",
202
+ "showDetails": "See details",
203
+ "hideDetails": "Hide details",
204
+ "loading": "Loading"
205
+ },
206
+ "actionsMenu": {
207
+ "back": "Back"
208
+ },
132
209
  "wizard": {
133
210
  "next": "Next",
134
211
  "back": "Back",
@@ -195,16 +272,48 @@ const en = Object.freeze({
195
272
  "step3": "Confirm."
196
273
  }
197
274
  },
275
+ "countdown": {
276
+ "done": "It is over",
277
+ "daysShort": "d"
278
+ },
279
+ "pdfViewer": {
280
+ "openInTab": "Open in another tab",
281
+ "download": "Download"
282
+ },
283
+ "legal": {
284
+ "cookies": {
285
+ "region": "Cookie notice",
286
+ "text": "We use cookies so your session and your preferences work. By continuing, you accept their use.",
287
+ "policy": "Cookie policy",
288
+ "accept": "Accept"
289
+ },
290
+ "terms": {
291
+ "title": "Terms and conditions",
292
+ "version": "Version {{version}}",
293
+ "checkbox": "I have read and accept the terms",
294
+ "readToEnd": "Read to the end to be able to accept.",
295
+ "accept": "I accept",
296
+ "decline": "I do not accept",
297
+ "saveFailed": "Your answer could not be saved. Try again."
298
+ }
299
+ },
198
300
  "upload": {
199
301
  "hint": "Drop your file here",
200
302
  "hintMultiple": "Drop your files here",
201
303
  "choose": "Choose file",
304
+ "attach": "Attach",
305
+ "empty": "No file chosen",
306
+ "chooseImage": "Choose image",
307
+ "changeImage": "Change image",
308
+ "removeImage": "Remove image",
309
+ "template": "Download the template",
202
310
  "chooseMultiple": "Choose files",
203
311
  "remove": "Remove {{name}}",
204
312
  "invalidTitle": "File not allowed",
205
313
  "invalidType": "“{{name}}” is not an allowed type. Accepted: {{accept}}.",
206
314
  "tooLarge": "“{{name}}” is larger than {{max}}.",
207
315
  "tooLargeShort": "Larger than allowed",
316
+ "totalTooLarge": "With “{{name}}”, together they are larger than {{max}}.",
208
317
  "totalTooLargeShort": "Together they are larger than allowed",
209
318
  "tooManyFiles_one": "You can upload up to {{count}} file.",
210
319
  "tooManyFiles_other": "You can upload up to {{count}} files.",
@@ -216,6 +325,25 @@ const en = Object.freeze({
216
325
  "summary_other": "{{count}} files · {{total}}",
217
326
  "summaryOf_one": "{{count}} file · {{total}} of {{max}}",
218
327
  "summaryOf_other": "{{count}} files · {{total}} of {{max}}",
328
+ "upload": "Upload",
329
+ "replace": "Replace",
330
+ "cancel": "Cancel",
331
+ "download": "Download the file",
332
+ "failed": "The file could not be uploaded. Try again.",
333
+ "starting": "Starting the upload…",
334
+ "processing": "Uploaded; the server is checking it…",
335
+ "cancelled": "The upload was canceled.",
336
+ "amount": "{{loaded}} of {{total}}",
337
+ "speed": "{{size}}/s",
338
+ "remaining_one": "{{count}} second left",
339
+ "remaining_other": "{{count}} seconds left",
340
+ "status": {
341
+ "pending": "Pending",
342
+ "uploading": "Uploading {{percent}} %",
343
+ "processing": "Processing",
344
+ "uploaded": "Uploaded",
345
+ "failed": "Not uploaded"
346
+ },
219
347
  "pond": {
220
348
  "loading": "Loading",
221
349
  "loadError": "Could not load",
@@ -462,7 +590,111 @@ const en = Object.freeze({
462
590
  "detail": "The link or record expired or was already used."
463
591
  }
464
592
  },
593
+ "richText": {
594
+ "toolbar": {
595
+ "label": "Text formatting",
596
+ "textStyle": "Text style",
597
+ "paragraph": "Text",
598
+ "heading2": "Heading",
599
+ "heading3": "Subheading",
600
+ "bold": "Bold",
601
+ "italic": "Italic",
602
+ "underline": "Underline",
603
+ "strike": "Strikethrough",
604
+ "bulletList": "Bulleted list",
605
+ "orderedList": "Numbered list",
606
+ "blockquote": "Quote",
607
+ "codeBlock": "Code",
608
+ "link": "Link",
609
+ "align": {
610
+ "left": "Align left",
611
+ "center": "Center",
612
+ "right": "Align right"
613
+ },
614
+ "clear": "Clear formatting",
615
+ "undo": "Undo",
616
+ "redo": "Redo"
617
+ },
618
+ "linkDialog": {
619
+ "url": "Link address",
620
+ "save": "Set the link",
621
+ "remove": "Remove the link",
622
+ "invalid": "Type a web address (https://…), an email (mailto:…) or a phone (tel:…)."
623
+ },
624
+ "counter": "{{count}} of {{max}} characters"
625
+ },
626
+ "mexico": {
627
+ "efirma": {
628
+ "certificate": "Certificate (.cer)",
629
+ "certificateHelp": "The e.firma .cer file: it is read here, without uploading it.",
630
+ "privateKey": "Private key (.key)",
631
+ "privateKeyHelp": "The .key file that goes with that certificate.",
632
+ "password": "Key password",
633
+ "passwordHelp": "The e.firma one; it is not kept in this browser.",
634
+ "notCertificate": "The file is not a certificate: choose the e.firma .cer.",
635
+ "otherRfc": "The certificate belongs to RFC {{rfc}}, not {{expected}}.",
636
+ "rfc": "RFC",
637
+ "curp": "CURP",
638
+ "representative": "Legal representative",
639
+ "certificateNumber": "Certificate number",
640
+ "validity": "Valid",
641
+ "validityRange": "From {{from}} to {{to}}",
642
+ "branch": "Branch",
643
+ "verify": "Check the e.firma",
644
+ "verified": "The key opens with that password and belongs to this certificate.",
645
+ "verifyFailed": "The e.firma could not be checked. Try again.",
646
+ "problems": {
647
+ "notKey": "The .key file is not a private key: choose the e.firma .key.",
648
+ "wrongPassword": "The password does not open the key.",
649
+ "otherCertificate": "The key opens, but it does not belong to this certificate."
650
+ },
651
+ "status": {
652
+ "valid": "Valid",
653
+ "expired": "Expired",
654
+ "notYetValid": "Not valid yet"
655
+ }
656
+ },
657
+ "cfdi": {
658
+ "withoutFolio": "No series or folio",
659
+ "version": "CFDI {{version}}",
660
+ "issuer": "Issued by",
661
+ "receiver": "Issued to",
662
+ "issuedAt": "Date",
663
+ "uuid": "Tax folio",
664
+ "copyUuid": "Copy the tax folio",
665
+ "subtotal": "Subtotal",
666
+ "taxes": "Taxes",
667
+ "total": "Total",
668
+ "concepts": "Items",
669
+ "description": "Description",
670
+ "quantity": "Quantity",
671
+ "amount": "Amount",
672
+ "otherReceiver": "The invoice is for RFC {{rfc}}, not {{expected}}.",
673
+ "notStamped": "It does not have the SAT stamp: it is not a valid invoice yet.",
674
+ "voucherTypes": {
675
+ "I": "Income",
676
+ "E": "Expense",
677
+ "T": "Transfer",
678
+ "N": "Payroll",
679
+ "P": "Payment"
680
+ }
681
+ }
682
+ },
465
683
  "validation": {
684
+ "rfc": "The RFC is not written correctly: check its letters, the date and the homoclave.",
685
+ "curp": "The CURP is not written correctly: check its 18 characters.",
686
+ "clabe": "The CLABE is not valid: check its 18 digits.",
687
+ "listDuplicate": "It is already in row {{row}}.",
688
+ "listOrderBetween": "It must be between {{previous}} (row {{previousRow}}) and {{next}} (row {{nextRow}}).",
689
+ "listOrderAbovePrevious": "It must be greater than {{previous}} (row {{previousRow}}).",
690
+ "listOrderBelowPrevious": "It must be less than {{previous}} (row {{previousRow}}).",
691
+ "listOrderBelowNext": "It must be less than {{next}} (row {{nextRow}}).",
692
+ "listOrderAboveNext": "It must be greater than {{next}} (row {{nextRow}}).",
693
+ "listTotalMax": "Together they add up to {{total}} and the maximum is {{max}}.",
694
+ "minutesFromNow_one": "Choose a time at least {{count}} minute from now.",
695
+ "minutesFromNow_other": "Choose a time at least {{count}} minutes from now.",
696
+ "minutesAfter_one": "It must be at least {{count}} minute after the start.",
697
+ "minutesAfter_other": "It must be at least {{count}} minutes after the start.",
466
698
  "default": "The value is not valid.",
467
699
  "required": "This field is required.",
468
700
  "notType": "The value doesn't have the expected format.",