@stackcraftmx/calcita 0.52.0 → 0.54.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 (211) hide show
  1. package/README.md +109 -4
  2. package/dist/datePickers/DateInput.js +5 -3
  3. package/dist/datePickers/DateInput.js.map +1 -1
  4. package/dist/datePickers/DateTimeInput.js +6 -4
  5. package/dist/datePickers/DateTimeInput.js.map +1 -1
  6. package/dist/datePickers/FormDateField.js +1 -1
  7. package/dist/datePickers/FormDateField.js.map +1 -1
  8. package/dist/datePickers/FormDateTimeField.js +1 -1
  9. package/dist/datePickers/FormDateTimeField.js.map +1 -1
  10. package/dist/datePickers/FormMonthField.js +1 -1
  11. package/dist/datePickers/FormMonthField.js.map +1 -1
  12. package/dist/datePickers/FormTimeField.js +1 -1
  13. package/dist/datePickers/FormTimeField.js.map +1 -1
  14. package/dist/datePickers/MonthInput.js +5 -3
  15. package/dist/datePickers/MonthInput.js.map +1 -1
  16. package/dist/datePickers/PickerFrame.js +2 -2
  17. package/dist/datePickers/PickerFrame.js.map +1 -1
  18. package/dist/datePickers/TimeInput.js +6 -4
  19. package/dist/datePickers/TimeInput.js.map +1 -1
  20. package/dist/feedback/Toaster.js +11 -2
  21. package/dist/feedback/Toaster.js.map +1 -1
  22. package/dist/filepond/FileDropzone.js +60 -19
  23. package/dist/filepond/FileDropzone.js.map +1 -1
  24. package/dist/filepond/pondServer.js +86 -27
  25. package/dist/filepond/pondServer.js.map +1 -1
  26. package/dist/forms/CalcitaFormik.js +11 -0
  27. package/dist/forms/CalcitaFormik.js.map +1 -0
  28. package/dist/forms/FormAttachmentsField.js +1 -1
  29. package/dist/forms/FormAttachmentsField.js.map +1 -1
  30. package/dist/forms/FormCatalogField.js +1 -1
  31. package/dist/forms/FormCatalogField.js.map +1 -1
  32. package/dist/forms/FormCheckboxGroupField.js +1 -1
  33. package/dist/forms/FormCheckboxGroupField.js.map +1 -1
  34. package/dist/forms/FormColorField.js +1 -1
  35. package/dist/forms/FormColorField.js.map +1 -1
  36. package/dist/forms/FormFileField.js +1 -1
  37. package/dist/forms/FormFileField.js.map +1 -1
  38. package/dist/forms/FormFileUploadField.js +1 -1
  39. package/dist/forms/FormFileUploadField.js.map +1 -1
  40. package/dist/forms/FormImageField.js +1 -1
  41. package/dist/forms/FormImageField.js.map +1 -1
  42. package/dist/forms/FormMaskedField.js +1 -1
  43. package/dist/forms/FormMaskedField.js.map +1 -1
  44. package/dist/forms/FormNumberField.js +1 -1
  45. package/dist/forms/FormNumberField.js.map +1 -1
  46. package/dist/forms/FormSchemaProvider.js +17 -0
  47. package/dist/forms/FormSchemaProvider.js.map +1 -0
  48. package/dist/forms/FormSelectField.js +1 -1
  49. package/dist/forms/FormSelectField.js.map +1 -1
  50. package/dist/forms/FormTextField.js +1 -1
  51. package/dist/forms/FormTextField.js.map +1 -1
  52. package/dist/forms/FormTransferListField.js +1 -1
  53. package/dist/forms/FormTransferListField.js.map +1 -1
  54. package/dist/forms/FormWizard.js +2 -0
  55. package/dist/forms/FormWizard.js.map +1 -1
  56. package/dist/forms/schemaRequired.js +33 -0
  57. package/dist/forms/schemaRequired.js.map +1 -0
  58. package/dist/forms/useFormikField.js +18 -5
  59. package/dist/forms/useFormikField.js.map +1 -1
  60. package/dist/forms.js +52 -46
  61. package/dist/forms.js.map +1 -1
  62. package/dist/hookForm/FormAttachmentsField.js +1 -1
  63. package/dist/hookForm/FormAttachmentsField.js.map +1 -1
  64. package/dist/hookForm/FormCatalogField.js +1 -1
  65. package/dist/hookForm/FormCatalogField.js.map +1 -1
  66. package/dist/hookForm/FormCheckboxGroupField.js +1 -1
  67. package/dist/hookForm/FormCheckboxGroupField.js.map +1 -1
  68. package/dist/hookForm/FormColorField.js +1 -1
  69. package/dist/hookForm/FormColorField.js.map +1 -1
  70. package/dist/hookForm/FormFileField.js +1 -1
  71. package/dist/hookForm/FormFileField.js.map +1 -1
  72. package/dist/hookForm/FormFileUploadField.js +1 -1
  73. package/dist/hookForm/FormFileUploadField.js.map +1 -1
  74. package/dist/hookForm/FormImageField.js +1 -1
  75. package/dist/hookForm/FormImageField.js.map +1 -1
  76. package/dist/hookForm/FormMaskedField.js +1 -1
  77. package/dist/hookForm/FormMaskedField.js.map +1 -1
  78. package/dist/hookForm/FormNumberField.js +1 -1
  79. package/dist/hookForm/FormNumberField.js.map +1 -1
  80. package/dist/hookForm/FormSelectField.js +1 -1
  81. package/dist/hookForm/FormSelectField.js.map +1 -1
  82. package/dist/hookForm/FormTextField.js +1 -1
  83. package/dist/hookForm/FormTextField.js.map +1 -1
  84. package/dist/hookForm/FormTransferListField.js +1 -1
  85. package/dist/hookForm/FormTransferListField.js.map +1 -1
  86. package/dist/hookForm/FormWizard.js +2 -0
  87. package/dist/hookForm/FormWizard.js.map +1 -1
  88. package/dist/hookForm/useHookFormField.js +9 -3
  89. package/dist/hookForm/useHookFormField.js.map +1 -1
  90. package/dist/index.js +6 -2
  91. package/dist/index.js.map +1 -1
  92. package/dist/inputs/CatalogInput.js +3 -2
  93. package/dist/inputs/CatalogInput.js.map +1 -1
  94. package/dist/inputs/CheckboxGroupInput.js +2 -1
  95. package/dist/inputs/CheckboxGroupInput.js.map +1 -1
  96. package/dist/inputs/ColorInput.js +3 -1
  97. package/dist/inputs/ColorInput.js.map +1 -1
  98. package/dist/inputs/FieldFrame.js +18 -3
  99. package/dist/inputs/FieldFrame.js.map +1 -1
  100. package/dist/inputs/FormSection.js +42 -11
  101. package/dist/inputs/FormSection.js.map +1 -1
  102. package/dist/inputs/NumberInput.js +3 -1
  103. package/dist/inputs/NumberInput.js.map +1 -1
  104. package/dist/inputs/SelectInput.js +3 -1
  105. package/dist/inputs/SelectInput.js.map +1 -1
  106. package/dist/inputs/TextInput.js +1 -1
  107. package/dist/inputs/TextInput.js.map +1 -1
  108. package/dist/inputs/TransferListInput.js +2 -1
  109. package/dist/inputs/TransferListInput.js.map +1 -1
  110. package/dist/inputs/WizardLayout.js +12 -6
  111. package/dist/inputs/WizardLayout.js.map +1 -1
  112. package/dist/inputs/formLayoutContext.js +7 -2
  113. package/dist/inputs/formLayoutContext.js.map +1 -1
  114. package/dist/inputs/requiredMark.js +17 -0
  115. package/dist/inputs/requiredMark.js.map +1 -0
  116. package/dist/locales/en.js +2 -0
  117. package/dist/locales/en.js.map +1 -1
  118. package/dist/locales/es.js +2 -0
  119. package/dist/locales/es.js.map +1 -1
  120. package/dist/richText/FormRichTextField.js +1 -1
  121. package/dist/richText/FormRichTextField.js.map +1 -1
  122. package/dist/richText/RichTextEditor.js +4 -3
  123. package/dist/richText/RichTextEditor.js.map +1 -1
  124. package/dist/toolkit/ToolkitProvider.js +3 -0
  125. package/dist/toolkit/ToolkitProvider.js.map +1 -1
  126. package/dist/toolkit/toolkitContext.js.map +1 -1
  127. package/dist/types/datePickers/DateInput.d.ts +2 -0
  128. package/dist/types/datePickers/DateTimeInput.d.ts +2 -0
  129. package/dist/types/datePickers/FormDateField.d.ts +3 -3
  130. package/dist/types/datePickers/FormDateTimeField.d.ts +3 -3
  131. package/dist/types/datePickers/FormMonthField.d.ts +3 -3
  132. package/dist/types/datePickers/FormTimeField.d.ts +3 -3
  133. package/dist/types/datePickers/MonthInput.d.ts +2 -0
  134. package/dist/types/datePickers/PickerFrame.d.ts +3 -1
  135. package/dist/types/datePickers/TimeInput.d.ts +2 -0
  136. package/dist/types/feedback/Toaster.d.ts +15 -1
  137. package/dist/types/feedback/index.d.ts +1 -1
  138. package/dist/types/filepond/FileDropzone.d.ts +5 -0
  139. package/dist/types/filepond/chunkedUpload.d.ts +122 -0
  140. package/dist/types/filepond/pondServer.d.ts +25 -3
  141. package/dist/types/forms/CalcitaFormik.d.ts +6 -0
  142. package/dist/types/forms/FormAttachmentsField.d.ts +3 -3
  143. package/dist/types/forms/FormCatalogField.d.ts +2 -2
  144. package/dist/types/forms/FormCheckboxGroupField.d.ts +3 -3
  145. package/dist/types/forms/FormColorField.d.ts +2 -2
  146. package/dist/types/forms/FormFileField.d.ts +3 -3
  147. package/dist/types/forms/FormFileUploadField.d.ts +3 -3
  148. package/dist/types/forms/FormImageField.d.ts +3 -3
  149. package/dist/types/forms/FormMaskedField.d.ts +2 -2
  150. package/dist/types/forms/FormNumberField.d.ts +2 -2
  151. package/dist/types/forms/FormSchemaProvider.d.ts +13 -0
  152. package/dist/types/forms/FormSelectField.d.ts +2 -2
  153. package/dist/types/forms/FormTextField.d.ts +2 -2
  154. package/dist/types/forms/FormTransferListField.d.ts +3 -3
  155. package/dist/types/forms/FormWizard.d.ts +3 -1
  156. package/dist/types/forms/index.d.ts +1 -0
  157. package/dist/types/forms/schemaRequired.d.ts +14 -0
  158. package/dist/types/forms/useFormikField.d.ts +10 -4
  159. package/dist/types/forms.d.ts +4 -2
  160. package/dist/types/hookForm/FormAttachmentsField.d.ts +3 -3
  161. package/dist/types/hookForm/FormCatalogField.d.ts +3 -3
  162. package/dist/types/hookForm/FormCheckboxGroupField.d.ts +3 -3
  163. package/dist/types/hookForm/FormColorField.d.ts +3 -3
  164. package/dist/types/hookForm/FormFileField.d.ts +3 -3
  165. package/dist/types/hookForm/FormFileUploadField.d.ts +3 -3
  166. package/dist/types/hookForm/FormImageField.d.ts +3 -3
  167. package/dist/types/hookForm/FormMaskedField.d.ts +3 -3
  168. package/dist/types/hookForm/FormNumberField.d.ts +3 -3
  169. package/dist/types/hookForm/FormSelectField.d.ts +3 -3
  170. package/dist/types/hookForm/FormTextField.d.ts +3 -3
  171. package/dist/types/hookForm/FormTransferListField.d.ts +3 -3
  172. package/dist/types/hookForm/FormWizard.d.ts +3 -1
  173. package/dist/types/hookForm/useHookFormField.d.ts +8 -4
  174. package/dist/types/index.d.ts +3 -2
  175. package/dist/types/inputs/CatalogInput.d.ts +1 -0
  176. package/dist/types/inputs/CheckboxGroupInput.d.ts +1 -0
  177. package/dist/types/inputs/ColorInput.d.ts +1 -0
  178. package/dist/types/inputs/FieldFrame.d.ts +1 -0
  179. package/dist/types/inputs/FormSection.d.ts +13 -0
  180. package/dist/types/inputs/NumberInput.d.ts +1 -0
  181. package/dist/types/inputs/SelectInput.d.ts +1 -0
  182. package/dist/types/inputs/TextInput.d.ts +1 -1
  183. package/dist/types/inputs/TransferListInput.d.ts +1 -0
  184. package/dist/types/inputs/WizardLayout.d.ts +1 -0
  185. package/dist/types/inputs/formLayoutContext.d.ts +8 -1
  186. package/dist/types/inputs/requiredMark.d.ts +9 -0
  187. package/dist/types/locales/en.d.ts +2 -0
  188. package/dist/types/locales/es.d.ts +2 -0
  189. package/dist/types/richText/FormRichTextField.d.ts +3 -3
  190. package/dist/types/richText/RichTextEditor.d.ts +1 -0
  191. package/dist/types/toolkit/ToolkitProvider.d.ts +5 -1
  192. package/dist/types/toolkit/toolkitContext.d.ts +2 -1
  193. package/dist/types/upload/AttachmentsInput.d.ts +2 -0
  194. package/dist/types/upload/FileInput.d.ts +1 -0
  195. package/dist/types/upload/FileUploadInput.d.ts +1 -0
  196. package/dist/types/upload/ImageInput.d.ts +1 -0
  197. package/dist/types/upload/chunkedUpload.d.ts +189 -0
  198. package/dist/types/upload/uploadWithProgress.d.ts +4 -2
  199. package/dist/upload/AttachmentsInput.js +2 -1
  200. package/dist/upload/AttachmentsInput.js.map +1 -1
  201. package/dist/upload/FileInput.js +2 -1
  202. package/dist/upload/FileInput.js.map +1 -1
  203. package/dist/upload/FileUploadInput.js +2 -1
  204. package/dist/upload/FileUploadInput.js.map +1 -1
  205. package/dist/upload/ImageInput.js +2 -1
  206. package/dist/upload/ImageInput.js.map +1 -1
  207. package/dist/upload/chunkedUpload.js +261 -0
  208. package/dist/upload/chunkedUpload.js.map +1 -0
  209. package/dist/upload/uploadWithProgress.js +8 -3
  210. package/dist/upload/uploadWithProgress.js.map +1 -1
  211. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"es.js","sources":["../../src/locales/es.js"],"sourcesContent":["// Textos del paquete en español (el idioma por omisión). Cada proyecto puede cambiar cualquiera con `texts` o `translate`\n// de ToolkitProvider, con la misma forma: namespace, llaves anidadas, {{variable}} y plurales _one / _other.\nexport default Object.freeze({\n \"table\": {\n \"search\": {\n \"placeholder\": \"Buscar dentro de estos resultados…\"\n },\n \"count\": {\n \"records_one\": \"{{total}} registro\",\n \"records_other\": \"{{total}} registros\",\n \"capped\": \"más de {{total}} registros\",\n \"cappedTag\": \"total aproximado\",\n \"cappedTooltip\": \"Hay al menos estos registros y puede haber más: agregue un filtro para verlos todos.\"\n },\n \"empty\": {\n \"default\": \"Sin registros\",\n \"filtered\": \"Ningún registro cumple con los filtros aplicados.\",\n \"clearFilters\": \"Quitar los filtros\"\n },\n \"chips\": {\n \"applied_one\": \"{{count}} filtro aplicado\",\n \"applied_other\": \"{{count}} filtros aplicados\",\n \"clearAll\": \"Limpiar todo\"\n },\n \"columnFilter\": {\n \"tooltip\": \"Filtrar (se aplica a todos los registros, no solo a esta página)\",\n \"activeTooltip_one\": \"{{count}} filtro en esta columna\",\n \"activeTooltip_other\": \"{{count}} filtros en esta columna\",\n \"clear\": \"Limpiar esta columna\",\n \"contains\": \"Contiene\"\n },\n \"options\": {\n \"searchPlaceholder\": \"Buscar opción…\",\n \"empty\": \"Sin valores en este resultado\",\n \"noMatch\": \"Ninguna opción coincide con “{{text}}”\"\n },\n \"sort\": {\n \"tooltip\": \"Ordenar por esta columna\",\n \"ascending\": \"orden ascendente\",\n \"descending\": \"orden descendente\",\n \"clear\": \"Quitar el orden\"\n },\n \"selection\": {\n \"count_one\": \"{{total}} elegido\",\n \"count_other\": \"{{total}} elegidos\",\n \"allMatching\": \"Los {{total}} que coinciden están elegidos\",\n \"allMatchingCapped\": \"Todos los que coinciden están elegidos\",\n \"pageSelected_one\": \"Se eligió el único renglón de esta página.\",\n \"pageSelected_other\": \"Se eligieron los {{count}} de esta página.\",\n \"selectAllMatching\": \"Elegir los {{total}} que coinciden\",\n \"selectAllMatchingCapped\": \"Elegir todos los que coinciden\",\n \"onlyThisPage\": \"Elegir solo esta página\",\n \"clear\": \"Quitar selección\",\n \"summaryLabel\": \"Lo elegido\",\n \"actionsLabel\": \"Acciones de los elegidos\"\n },\n \"goToPage\": {\n \"page\": \"Página\",\n \"of_one\": \"de {{total}}\",\n \"of_other\": \"de {{total}}\",\n \"ariaLabel\": \"Ir a la página\"\n },\n \"quickFilters\": {\n \"all\": \"Todos\",\n \"countAriaLabel\": \"{{count}} registros\"\n },\n \"views\": {\n \"label\": \"Cómo ver la lista\",\n \"table\": \"Tabla\",\n \"cards\": \"Tarjetas\"\n },\n \"cards\": {\n \"label\": \"Los registros en tarjetas\",\n \"pagination\": {\n \"page\": \"Página {{page}}\",\n \"first\": \"Primera página\",\n \"last\": \"Última página\",\n \"next\": \"Página siguiente\",\n \"previous\": \"Página anterior\",\n \"start-ellipsis\": \"Páginas anteriores\",\n \"end-ellipsis\": \"Páginas siguientes\"\n }\n },\n \"cells\": {\n \"empty\": \"—\"\n },\n \"detail\": {\n \"tooltip\": \"Ver detalle\",\n \"ariaLabel\": \"Ver el detalle de este registro\"\n },\n \"error\": {\n \"generic\": \"No pudimos consultar la tabla.\"\n },\n \"dateRange\": {\n \"label\": \"Personalizado\",\n \"title\": \"Rango de fechas\",\n \"from\": \"Desde\",\n \"to\": \"Hasta\",\n \"fromHelp\": \"Desde el inicio de ese día\",\n \"toHelp\": \"Hasta el final de ese día\",\n \"invalid\": \"«Hasta» no puede ser antes de «Desde»\",\n \"summary\": \"{{from}} – {{to}}\",\n \"today\": \"hoy\",\n \"clear\": \"Quitar\",\n \"apply\": \"Aplicar\"\n },\n \"audit\": {\n \"columns\": {\n \"occurredAt\": \"Fecha y hora\",\n \"event\": \"Qué pasó\",\n \"result\": \"Resultado\",\n \"actor\": \"Quién\"\n },\n \"systemActor\": \"Proceso automático\",\n \"eventFilterCaption\": \"Filtrar por evento\",\n \"count_one\": \"{{count}} evento\",\n \"count_other\": \"{{count}} eventos\",\n \"empty\": \"Todavía no hay eventos registrados.\"\n }\n },\n \"common\": {\n \"actions\": {\n \"cancel\": \"Cancelar\",\n \"confirm\": \"Confirmar\",\n \"retry\": \"Intentar de nuevo\",\n \"download\": \"Descargar\",\n \"close\": \"Cerrar\",\n \"back\": \"Regresar\",\n \"reload\": \"Recargar la página\"\n },\n \"status\": {\n \"loading\": \"Cargando…\",\n \"noData\": \"Sin datos\"\n },\n \"form\": {\n \"showPassword\": \"Mostrar contraseña\",\n \"hidePassword\": \"Ocultar contraseña\",\n \"clear\": \"Borrar el texto\",\n \"selectPlaceholder\": \"Elija una opción\",\n \"copy\": \"Copiar\",\n \"copied\": \"Copiado\",\n \"copyFailed\": \"No se pudo copiar: el navegador no dio permiso.\",\n \"noOptions\": \"Ninguna opción coincide\",\n \"loadingOptions\": \"Cargando opciones…\",\n \"pickColor\": \"Elegir el color\",\n \"colorContrast\": \"Contraste sobre blanco: {{ratio}}:1\",\n \"colorLowContrast\": \"Con ese color el texto casi no se leería sobre blanco. {{suggestion}} es el mismo tono, más oscuro.\",\n \"colorUseSuggestion\": \"Usar {{color}}\",\n \"selectAll\": \"Elegir todos ({{count}})\",\n \"unselectAll\": \"Quitar todos\",\n \"selectMatching\": \"Elegir los {{count}} que coinciden\",\n \"unselectMatching\": \"Quitar los {{count}} que coinciden\",\n \"moreSelected\": \"+{{count}} más\"\n },\n \"selection\": {\n \"clear\": \"Quitar selección\",\n \"actionsLabel\": \"Acciones de los elegidos\",\n \"summaryLabel\": \"Lo elegido\"\n },\n \"repeating\": {\n \"row\": \"Renglón {{number}}\",\n \"add\": \"Agregar\",\n \"removeShort\": \"Quitar\",\n \"clearShort\": \"Limpiar\",\n \"remove\": \"Quitar «{{row}}»\",\n \"clear\": \"Limpiar «{{row}}»\",\n \"maxRows_one\": \"Hasta {{count}} renglón\",\n \"maxRows_other\": \"Hasta {{count}} renglones\",\n \"confirmTitle\": \"¿Quitar «{{row}}»?\",\n \"confirmText\": \"Ya estaba guardado: se quita de verdad al guardar el formulario.\",\n \"blockedTitle\": \"No se puede quitar\",\n \"understood\": \"Entendido\"\n },\n \"transfer\": {\n \"available\": \"Disponibles\",\n \"chosen\": \"Elegidos\",\n \"search\": \"Buscar\",\n \"markVisible\": \"Marcar todos los que se ven en «{{list}}»\",\n \"markedOf\": \"{{marked}} de {{count}} marcados\",\n \"moveMarked\": \"Pasar los marcados a elegidos\",\n \"moveAll\": \"Pasar todos a elegidos\",\n \"returnMarked\": \"Regresar los marcados a disponibles\",\n \"returnAll\": \"Regresar todos a disponibles\",\n \"emptyAvailable\": \"No queda nada por elegir.\",\n \"noMatches\": \"Nada coincide con «{{text}}».\",\n \"emptyChosen\": \"Todavía no hay elegidos: márquelos a la izquierda y páselos con ›.\"\n },\n \"help\": {\n \"button\": \"Ayuda de esta pantalla\",\n \"close\": \"Cerrar la ayuda\",\n \"next\": \"Siguiente\",\n \"back\": \"Anterior\",\n \"done\": \"Listo\",\n \"stepOf\": \"Paso {{current}} de {{total}}\",\n \"goToStep\": \"Ir al paso {{number}}\",\n \"dontShowAgain\": \"No volver a mostrar al entrar\"\n },\n \"filterDrawer\": {\n \"open\": \"Filtros\",\n \"openWithCount\": \"Filtros ({{count}})\",\n \"title\": \"Filtros\",\n \"close\": \"Cerrar los filtros\",\n \"apply\": \"Buscar\",\n \"clear\": \"Limpiar\",\n \"any\": \"Cualquiera\",\n \"from\": \"Desde\",\n \"to\": \"Hasta\",\n \"operator\": \"Comparación\",\n \"value\": \"Cantidad\",\n \"operators\": {\n \"eq\": \"Igual a\",\n \"gt\": \"Mayor que\",\n \"gte\": \"Mayor o igual\",\n \"lt\": \"Menor que\",\n \"lte\": \"Menor o igual\"\n },\n \"rangeBackwards\": \"Debe ser igual o mayor que «Desde».\",\n \"chipFrom\": \"{{label}} desde\",\n \"chipTo\": \"{{label}} hasta\"\n },\n \"recordCard\": {\n \"open\": \"Abrir\",\n \"actions\": \"Más acciones\",\n \"showDetails\": \"Ver detalle\",\n \"hideDetails\": \"Ocultar detalle\",\n \"loading\": \"Cargando\"\n },\n \"actionsMenu\": {\n \"back\": \"Regresar\"\n },\n \"wizard\": {\n \"next\": \"Siguiente\",\n \"back\": \"Anterior\",\n \"skip\": \"Omitir este paso\",\n \"optional\": \"Opcional\",\n \"skipped\": \"Omitido\",\n \"stepOf\": \"Paso {{current}} de {{total}}\"\n },\n \"language\": {\n \"switchTo\": {\n \"es\": \"Cambiar a español\",\n \"en\": \"Cambiar a inglés\"\n },\n \"switchToNamed\": \"Cambiar a {{name}}\",\n \"choose\": \"Idioma: {{name}}. Elegir otro\"\n },\n \"colorScheme\": {\n \"label\": \"Claro u oscuro\",\n \"switchTo\": {\n \"light\": \"Cambiar a modo claro\",\n \"dark\": \"Cambiar a modo oscuro\"\n }\n },\n \"toast\": {\n \"done\": \"Listo\",\n \"error\": \"Ocurrió un error\",\n \"warning\": \"Atención\",\n \"info\": \"Aviso\",\n \"working\": \"Procesando…\"\n },\n \"waiting\": {\n \"title\": \"Un momento\",\n \"text\": \"Estamos procesando su solicitud. No cierre esta ventana.\"\n },\n \"newBuild\": {\n \"message\": \"Hay una versión nueva del sistema. Recargue la página para usarla.\",\n \"short\": \"Versión nueva disponible\",\n \"reload\": \"Recargar\"\n },\n \"install\": {\n \"banner\": \"Instale esta aplicación en su equipo para abrirla más rápido\",\n \"action\": \"Instalar\",\n \"howTo\": \"Cómo instalar\",\n \"dismiss\": \"Ahora no\",\n \"gotIt\": \"Entendido\",\n \"menuLabel\": \"Instalar la app\",\n \"iosModern\": {\n \"title\": \"Instalar en su iPhone o iPad\",\n \"step1\": \"Toque ⋯ (los tres puntos) junto a la barra de direcciones.\",\n \"step2\": \"Toque «Compartir».\",\n \"step3\": \"Toque «Agregar a inicio».\",\n \"step4\": \"Deje activado «Abrir como app web» y toque «Agregar».\"\n },\n \"iosClassic\": {\n \"title\": \"Instalar en su iPhone\",\n \"step1\": \"Toque el botón Compartir (el cuadro con una flecha hacia arriba).\",\n \"step2\": \"Toque «Agregar a inicio».\",\n \"step3\": \"Toque «Agregar».\"\n },\n \"androidFirefox\": {\n \"title\": \"Instalar en Firefox\",\n \"step1\": \"Toque el menú ⋮.\",\n \"step2\": \"Toque «Instalar» o «Agregar a pantalla de inicio».\",\n \"step3\": \"Confirme.\"\n }\n },\n \"countdown\": {\n \"done\": \"Ya terminó\",\n \"daysShort\": \"d\"\n },\n \"pdfViewer\": {\n \"openInTab\": \"Abrir en otra pestaña\",\n \"download\": \"Descargar\"\n },\n \"legal\": {\n \"cookies\": {\n \"region\": \"Aviso de cookies\",\n \"text\": \"Usamos cookies para que la sesión y sus preferencias funcionen. Al seguir, acepta su uso.\",\n \"policy\": \"Política de cookies\",\n \"accept\": \"Aceptar\"\n },\n \"terms\": {\n \"title\": \"Términos y condiciones\",\n \"version\": \"Versión {{version}}\",\n \"checkbox\": \"He leído y acepto los términos\",\n \"readToEnd\": \"Lea hasta el final para poder aceptar.\",\n \"accept\": \"Acepto\",\n \"decline\": \"No acepto\",\n \"saveFailed\": \"No se pudo guardar su respuesta. Intente de nuevo.\"\n }\n },\n \"upload\": {\n \"hint\": \"Arrastre aquí su archivo\",\n \"hintMultiple\": \"Arrastre aquí sus archivos\",\n \"choose\": \"Elegir archivo\",\n \"attach\": \"Adjuntar\",\n \"empty\": \"Ningún archivo elegido\",\n \"chooseImage\": \"Elegir imagen\",\n \"changeImage\": \"Cambiar la imagen\",\n \"removeImage\": \"Quitar la imagen\",\n \"template\": \"Descargar la plantilla\",\n \"chooseMultiple\": \"Elegir archivos\",\n \"remove\": \"Quitar {{name}}\",\n \"invalidTitle\": \"Archivo no permitido\",\n \"invalidType\": \"«{{name}}» no es de un tipo permitido. Se aceptan: {{accept}}.\",\n \"tooLarge\": \"«{{name}}» pesa más de {{max}}.\",\n \"tooLargeShort\": \"Pesa más de lo permitido\",\n \"totalTooLarge\": \"Con «{{name}}», entre todos pesan más de {{max}}.\",\n \"totalTooLargeShort\": \"Entre todos pesan más de lo permitido\",\n \"tooManyFiles_one\": \"Se puede subir {{count}} archivo como máximo.\",\n \"tooManyFiles_other\": \"Se pueden subir {{count}} archivos como máximo.\",\n \"maxSizeHint\": \"Hasta {{max}} por archivo\",\n \"maxTotalSizeHint\": \"Hasta {{max}} entre todos\",\n \"maxFilesHint_one\": \"Hasta {{count}} archivo\",\n \"maxFilesHint_other\": \"Hasta {{count}} archivos\",\n \"summary_one\": \"{{count}} archivo · {{total}}\",\n \"summary_other\": \"{{count}} archivos · {{total}}\",\n \"summaryOf_one\": \"{{count}} archivo · {{total}} de {{max}}\",\n \"summaryOf_other\": \"{{count}} archivos · {{total}} de {{max}}\",\n \"upload\": \"Cargar\",\n \"replace\": \"Sustituir\",\n \"cancel\": \"Cancelar\",\n \"download\": \"Bajar el archivo\",\n \"failed\": \"No se pudo subir el archivo. Intente otra vez.\",\n \"starting\": \"Empezando la subida…\",\n \"processing\": \"Subido; el servidor lo está revisando…\",\n \"cancelled\": \"Se canceló la subida.\",\n \"amount\": \"{{loaded}} de {{total}}\",\n \"speed\": \"{{size}}/s\",\n \"remaining_one\": \"falta {{count}} segundo\",\n \"remaining_other\": \"faltan {{count}} segundos\",\n \"status\": {\n \"pending\": \"Por cargar\",\n \"uploading\": \"Subiendo {{percent}} %\",\n \"processing\": \"Procesando\",\n \"uploaded\": \"Cargado\",\n \"failed\": \"No se cargó\"\n },\n \"pond\": {\n \"loading\": \"Cargando\",\n \"loadError\": \"No se pudo cargar\",\n \"waitingForSize\": \"Calculando el peso\",\n \"sizeNotAvailable\": \"Peso no disponible\",\n \"invalidField\": \"Hay archivos que no son válidos\",\n \"processing\": \"Subiendo\",\n \"processingComplete\": \"Subido\",\n \"processingAborted\": \"Subida cancelada\",\n \"processingError\": \"No se pudo subir\",\n \"revertError\": \"No se pudo deshacer\",\n \"removeError\": \"No se pudo quitar\",\n \"tapToCancel\": \"toque para cancelar\",\n \"tapToRetry\": \"toque para reintentar\",\n \"tapToUndo\": \"toque para deshacer\",\n \"remove\": \"Quitar\",\n \"abortLoad\": \"Cancelar\",\n \"retryLoad\": \"Reintentar\",\n \"abortProcessing\": \"Cancelar\",\n \"undoProcessing\": \"Deshacer\",\n \"retryProcessing\": \"Reintentar\",\n \"processItem\": \"Subir\"\n }\n },\n \"download\": {\n \"formats\": {\n \"pdf\": {\n \"label\": \"PDF\",\n \"hint\": \"Para leer, imprimir o archivar\"\n },\n \"xlsx\": {\n \"label\": \"Excel\",\n \"hint\": \"Para filtrar y cruzar con otros datos\"\n },\n \"csv\": {\n \"label\": \"CSV\",\n \"hint\": \"Texto plano, para importar a otro sistema\"\n }\n }\n },\n \"downloads\": {\n \"title\": \"Descargas\",\n \"summaryDownloading_one\": \"Descargando {{count}} archivo…\",\n \"summaryDownloading_other\": \"Descargando {{count}} archivos…\",\n \"summaryCompleted_one\": \"{{count}} descarga lista\",\n \"summaryCompleted_other\": \"{{count}} descargas listas\",\n \"summaryFailed_one\": \"{{count}} descarga no se pudo completar\",\n \"summaryFailed_other\": \"{{count}} descargas no se pudieron completar\",\n \"collapse\": \"Minimizar\",\n \"expand\": \"Ver descargas\",\n \"close\": \"Cerrar\",\n \"cancel\": \"Cancelar descarga\",\n \"cancelOf\": \"Cancelar la descarga de {{name}}\",\n \"completedOf\": \"{{name}} descargado\",\n \"failedOf\": \"No se pudo descargar {{name}}\",\n \"canceledOf\": \"Se canceló la descarga de {{name}}\",\n \"preparing\": \"Preparando el archivo…\",\n \"progressOf\": \"{{loaded}} de {{total}}\",\n \"progressLoaded\": \"{{loaded}} descargados\",\n \"failed\": \"No se pudo descargar\",\n \"canceled\": \"Cancelada\"\n },\n \"charts\": {\n \"viewAsTable\": \"Ver como tabla\",\n \"legend\": \"Qué es cada serie\",\n \"viewAsChart\": \"Ver como gráfica\",\n \"less\": \"Menos\",\n \"more\": \"Más\",\n \"day\": \"Día\"\n }\n },\n \"layout\": {\n \"skipToContent\": \"Saltar al contenido\",\n \"barActions\": {\n \"more\": \"Más acciones\"\n },\n \"drawer\": {\n \"open\": \"Abrir el menú\",\n \"ariaLabel\": \"Menú principal\",\n \"expand\": \"Abrir el menú lateral\",\n \"collapse\": \"Encoger el menú lateral\",\n \"more\": \"Más\",\n \"showTabs\": \"Ver las pestañas\",\n \"editTabs\": \"Editar la barra\",\n \"editTabsHint\": \"Elija hasta {{count}} pantallas para la barra de abajo; las demás quedan en «Más».\",\n \"tabInBar\": \"{{label}} en la barra\",\n \"resetTabs\": \"Como venía\",\n \"doneEditing\": \"Listo\",\n \"scrollDown\": \"Ver más del menú\",\n \"scrollUp\": \"Ver lo de arriba del menú\"\n },\n \"account\": {\n \"open\": \"Abrir el menú de su cuenta\",\n \"myProfile\": \"Mi perfil\"\n },\n \"settings\": {\n \"open\": \"Ajustes\",\n \"language\": \"Idioma\",\n \"colorScheme\": \"Claro u oscuro\",\n \"light\": \"Claro\",\n \"dark\": \"Oscuro\",\n \"system\": \"Automático\"\n },\n \"fontSize\": {\n \"label\": \"Tamaño de letra\",\n \"normal\": \"Normal\",\n \"large\": \"Grande\",\n \"xLarge\": \"Muy grande\"\n },\n \"languageName\": {\n \"es\": \"Español\",\n \"en\": \"English\"\n },\n \"breadcrumbs\": \"Dónde está\",\n \"signOut\": \"Salir\",\n \"navigating\": \"Cargando la pantalla\"\n },\n \"auth\": {\n \"signIn\": {\n \"title\": \"Iniciar sesión\",\n \"subtitle\": \"Entre con su correo y su contraseña.\",\n \"email\": \"Correo electrónico\",\n \"password\": \"Contraseña\",\n \"remember\": \"Mantener la sesión abierta en este equipo\",\n \"submit\": \"Entrar\",\n \"forgot\": \"¿Olvidó su contraseña?\"\n },\n \"forgotPassword\": {\n \"title\": \"Recuperar su contraseña\",\n \"subtitle\": \"Escriba el correo con el que entra y le enviaremos un enlace para elegir una contraseña nueva.\",\n \"email\": \"Correo electrónico\",\n \"submit\": \"Enviar el enlace\",\n \"sentTitle\": \"Revise su correo\",\n \"sent\": \"Si {{email}} tiene una cuenta, le llegará un enlace en unos minutos. Si no lo ve, revise el correo no deseado.\",\n \"backToSignIn\": \"Regresar a iniciar sesión\"\n },\n \"changePassword\": {\n \"title\": \"Cambiar contraseña\",\n \"current\": \"Contraseña actual\",\n \"next\": \"Contraseña nueva\",\n \"confirm\": \"Repita la contraseña nueva\",\n \"submit\": \"Cambiar contraseña\",\n \"mismatch\": \"Las dos contraseñas nuevas no son iguales.\",\n \"sameAsCurrent\": \"La contraseña nueva debe ser distinta de la actual.\",\n \"notAccepted\": \"La contraseña nueva no cumple con lo que se pide abajo.\",\n \"done\": \"Su contraseña cambió. La próxima vez entre con la nueva.\"\n },\n \"passwordRules\": {\n \"title\": \"La contraseña nueva debe tener\",\n \"minLength\": \"Al menos {{count}} caracteres\",\n \"lowercase\": \"Una letra minúscula\",\n \"uppercase\": \"Una letra mayúscula\",\n \"number\": \"Un número\",\n \"symbol\": \"Un símbolo, por ejemplo ! ? # -\",\n \"met\": \"ya cumple\",\n \"missing\": \"falta\"\n }\n },\n \"access\": {\n \"permissions\": {\n \"countOf\": \"{{count}} de {{total}}\",\n \"allOf\": \"Todos los permisos de {{group}}\"\n }\n },\n \"metricCard\": {\n \"trend\": {\n \"up\": \"Subió\",\n \"down\": \"Bajó\",\n \"flat\": \"Sin cambio\"\n }\n },\n \"errorPage\": {\n \"goHome\": \"Ir al inicio\",\n \"retry\": \"Intentar de nuevo\",\n \"reload\": \"Recargar\",\n \"newVersion\": {\n \"title\": \"Hay una versión nueva\",\n \"text\": \"Se publicó una actualización mientras tenía la página abierta. Recargue para seguir donde estaba.\"\n },\n \"notFound\": {\n \"title\": \"Esta página no existe\",\n \"text\": \"La dirección no corresponde a ninguna pantalla. Puede que el enlace esté incompleto o que la página ya no exista.\"\n },\n \"forbidden\": {\n \"title\": \"No tiene permiso para ver esta pantalla\",\n \"text\": \"Su usuario no tiene acceso a esta información. Si considera que es un error, comuníquese con el administrador.\"\n },\n \"serverError\": {\n \"title\": \"Algo falló de nuestro lado\",\n \"text\": \"No pudimos mostrar esta pantalla. Inténtelo de nuevo en un momento; si el problema continúa, comuníquese con soporte.\"\n }\n },\n \"problems\": {\n \"offline\": {\n \"title\": \"Sin conexión\",\n \"detail\": \"No pudimos comunicarnos con el servidor. Revise su conexión e inténtelo de nuevo.\"\n },\n \"unauthenticated\": {\n \"title\": \"Necesita iniciar sesión\",\n \"detail\": \"Su sesión no es válida o ya terminó. Inicie sesión de nuevo para continuar.\"\n },\n \"forbidden\": {\n \"title\": \"No tiene permiso para realizar esta acción\",\n \"detail\": \"Su usuario no tiene acceso a esta información u operación. Si considera que es un error, comuníquese con el administrador.\"\n },\n \"notFound\": {\n \"title\": \"No encontramos lo que busca\",\n \"detail\": \"La dirección o el registro que solicitó no existe o ya no está disponible.\"\n },\n \"conflict\": {\n \"title\": \"No se puede realizar en este momento\",\n \"detail\": \"El registro cambió o no está en el estado que se necesita. Actualice la pantalla e inténtelo de nuevo.\"\n },\n \"payloadTooLarge\": {\n \"title\": \"Lo que envió es demasiado grande\",\n \"detail\": \"El archivo o los datos superan el tamaño máximo permitido.\"\n },\n \"csrfTokenMismatch\": {\n \"title\": \"La página necesita actualizarse\",\n \"detail\": \"Pasó demasiado tiempo o la página quedó desactualizada. Recárguela e inténtelo de nuevo.\"\n },\n \"validation\": {\n \"title\": \"Los datos enviados no son válidos\",\n \"detail\": \"Revise los campos marcados e inténtelo de nuevo.\"\n },\n \"tooManyRequests\": {\n \"title\": \"Demasiados intentos seguidos\",\n \"detail\": \"Hizo muchas solicitudes en poco tiempo. Espere un momento e inténtelo de nuevo.\"\n },\n \"serverError\": {\n \"title\": \"No pudimos completar su solicitud\",\n \"detail\": \"Ocurrió un problema en el servidor. Inténtelo en un momento; si el problema continúa, comuníquese con soporte.\"\n },\n \"serviceUnavailable\": {\n \"title\": \"El servicio no está disponible\",\n \"detail\": \"El servidor no está respondiendo en este momento. Inténtelo más tarde.\"\n },\n \"generic\": {\n \"title\": \"No pudimos completar su solicitud\",\n \"detail\": \"Ocurrió un problema con su solicitud. Si continúa, comuníquese con soporte.\"\n },\n \"gone\": {\n \"title\": \"Esto ya no está disponible\",\n \"detail\": \"El enlace o el registro venció o ya se usó.\"\n }\n },\n \"richText\": {\n \"toolbar\": {\n \"label\": \"Formato del texto\",\n \"textStyle\": \"Estilo del texto\",\n \"paragraph\": \"Texto\",\n \"heading2\": \"Título\",\n \"heading3\": \"Subtítulo\",\n \"bold\": \"Negrita\",\n \"italic\": \"Cursiva\",\n \"underline\": \"Subrayado\",\n \"strike\": \"Tachado\",\n \"bulletList\": \"Lista con viñetas\",\n \"orderedList\": \"Lista numerada\",\n \"blockquote\": \"Cita\",\n \"codeBlock\": \"Código\",\n \"link\": \"Liga\",\n \"align\": {\n \"left\": \"Alinear a la izquierda\",\n \"center\": \"Centrar\",\n \"right\": \"Alinear a la derecha\"\n },\n \"clear\": \"Quitar el formato\",\n \"undo\": \"Deshacer\",\n \"redo\": \"Rehacer\"\n },\n \"linkDialog\": {\n \"url\": \"Dirección de la liga\",\n \"save\": \"Poner la liga\",\n \"remove\": \"Quitar la liga\",\n \"invalid\": \"Escriba una dirección web (https://…), un correo (mailto:…) o un teléfono (tel:…).\"\n },\n \"counter\": \"{{count}} de {{max}} caracteres\"\n },\n \"mexico\": {\n \"efirma\": {\n \"certificate\": \"Certificado (.cer)\",\n \"certificateHelp\": \"El archivo .cer de la e.firma: se lee aquí, sin subirlo.\",\n \"privateKey\": \"Llave privada (.key)\",\n \"privateKeyHelp\": \"El archivo .key que va con ese certificado.\",\n \"password\": \"Contraseña de la llave\",\n \"passwordHelp\": \"La de la e.firma; no se guarda en este navegador.\",\n \"notCertificate\": \"El archivo no es un certificado: elija el .cer de la e.firma.\",\n \"otherRfc\": \"El certificado es del RFC {{rfc}}, no del {{expected}}.\",\n \"rfc\": \"RFC\",\n \"curp\": \"CURP\",\n \"representative\": \"Representante legal\",\n \"certificateNumber\": \"Número de certificado\",\n \"validity\": \"Vigencia\",\n \"validityRange\": \"Del {{from}} al {{to}}\",\n \"branch\": \"Sucursal\",\n \"verify\": \"Revisar la e.firma\",\n \"verified\": \"La llave abre con esa contraseña y es de este certificado.\",\n \"verifyFailed\": \"No se pudo revisar la e.firma. Intente de nuevo.\",\n \"problems\": {\n \"notKey\": \"El archivo .key no es una llave privada: elija el .key de la e.firma.\",\n \"wrongPassword\": \"La contraseña no abre la llave.\",\n \"otherCertificate\": \"La llave abre, pero no es la de este certificado.\"\n },\n \"status\": {\n \"valid\": \"Vigente\",\n \"expired\": \"Vencida\",\n \"notYetValid\": \"Todavía no vale\"\n }\n },\n \"cfdi\": {\n \"withoutFolio\": \"Sin serie ni folio\",\n \"version\": \"CFDI {{version}}\",\n \"issuer\": \"Emite\",\n \"receiver\": \"Recibe\",\n \"issuedAt\": \"Fecha\",\n \"uuid\": \"Folio fiscal\",\n \"copyUuid\": \"Copiar el folio fiscal\",\n \"subtotal\": \"Subtotal\",\n \"taxes\": \"Impuestos\",\n \"total\": \"Total\",\n \"concepts\": \"Conceptos\",\n \"description\": \"Descripción\",\n \"quantity\": \"Cantidad\",\n \"amount\": \"Importe\",\n \"otherReceiver\": \"La factura es para el RFC {{rfc}}, no para el {{expected}}.\",\n \"notStamped\": \"No trae el timbre del SAT: todavía no es una factura válida.\",\n \"voucherTypes\": {\n \"I\": \"Ingreso\",\n \"E\": \"Egreso\",\n \"T\": \"Traslado\",\n \"N\": \"Nómina\",\n \"P\": \"Pago\"\n }\n }\n },\n \"validation\": {\n \"rfc\": \"El RFC no está bien escrito: revise sus letras, la fecha y la homoclave.\",\n \"curp\": \"La CURP no está bien escrita: revise sus 18 caracteres.\",\n \"clabe\": \"La CLABE no es válida: revise sus 18 dígitos.\",\n \"sameAs\": \"Debe ser igual a {{other}}.\",\n \"sameAsUnnamed\": \"No coincide.\",\n \"percent\": \"Escriba un porcentaje entre {{min}} y {{max}}.\",\n \"postalCode\": \"El código postal lleva 5 dígitos.\",\n \"listDuplicate\": \"Ya está en el renglón {{row}}.\",\n \"listOrderBetween\": \"Debe ir entre {{previous}} (renglón {{previousRow}}) y {{next}} (renglón {{nextRow}}).\",\n \"listOrderAbovePrevious\": \"Debe ser mayor que {{previous}} (renglón {{previousRow}}).\",\n \"listOrderBelowPrevious\": \"Debe ser menor que {{previous}} (renglón {{previousRow}}).\",\n \"listOrderBelowNext\": \"Debe ser menor que {{next}} (renglón {{nextRow}}).\",\n \"listOrderAboveNext\": \"Debe ser mayor que {{next}} (renglón {{nextRow}}).\",\n \"listTotalMax\": \"Entre todos suman {{total}} y el máximo es {{max}}.\",\n \"minutesFromNow_one\": \"Elija una hora al menos {{count}} minuto después de ahora.\",\n \"minutesFromNow_other\": \"Elija una hora al menos {{count}} minutos después de ahora.\",\n \"minutesAfter_one\": \"Debe quedar al menos {{count}} minuto después del inicio.\",\n \"minutesAfter_other\": \"Debe quedar al menos {{count}} minutos después del inicio.\",\n \"default\": \"El valor no es válido.\",\n \"required\": \"Este campo es obligatorio.\",\n \"notType\": \"El valor no tiene el formato esperado.\",\n \"oneOf\": \"Elija una de las opciones.\",\n \"notOneOf\": \"Ese valor no está permitido.\",\n \"email\": \"Escriba un correo válido, por ejemplo nombre@empresa.com.\",\n \"url\": \"Escriba una dirección web válida.\",\n \"uuid\": \"El identificador no es válido.\",\n \"stringLength_one\": \"Escriba exactamente {{count}} carácter.\",\n \"stringLength_other\": \"Escriba exactamente {{count}} caracteres.\",\n \"stringMin_one\": \"Escriba al menos {{count}} carácter.\",\n \"stringMin_other\": \"Escriba al menos {{count}} caracteres.\",\n \"stringMax_one\": \"Escriba como máximo {{count}} carácter.\",\n \"stringMax_other\": \"Escriba como máximo {{count}} caracteres.\",\n \"matches\": \"El formato no es válido.\",\n \"trim\": \"Quite los espacios al inicio y al final.\",\n \"lowercase\": \"Escríbalo en minúsculas.\",\n \"uppercase\": \"Escríbalo en mayúsculas.\",\n \"numberMin\": \"No puede ser menor que {{min}}.\",\n \"numberMax\": \"No puede ser mayor que {{max}}.\",\n \"lessThan\": \"Debe ser menor que {{less}}.\",\n \"moreThan\": \"Debe ser mayor que {{more}}.\",\n \"positive\": \"Debe ser un número positivo.\",\n \"negative\": \"Debe ser un número negativo.\",\n \"integer\": \"Debe ser un número entero.\",\n \"dateMin\": \"La fecha no puede ser anterior a {{min}}.\",\n \"dateMax\": \"La fecha no puede ser posterior a {{max}}.\",\n \"arrayMin_one\": \"Elija al menos {{count}} opción.\",\n \"arrayMin_other\": \"Elija al menos {{count}} opciones.\",\n \"arrayMax_one\": \"Elija como máximo {{count}} opción.\",\n \"arrayMax_other\": \"Elija como máximo {{count}} opciones.\",\n \"arrayLength_one\": \"Elija exactamente {{count}} opción.\",\n \"arrayLength_other\": \"Elija exactamente {{count}} opciones.\"\n },\n \"dictionaries\": {\n \"unknown\": {\n \"label\": \"Sin estatus\",\n \"tooltip\": \"\"\n }\n },\n \"security\": {\n \"passkeys\": {\n \"cancelled\": \"No se usó ninguna llave de acceso. Puede intentarlo de nuevo.\",\n \"alreadyRegistered\": \"Esa llave de acceso ya está registrada en su cuenta.\",\n \"wrongDomain\": \"Las llaves de acceso solo funcionan en la dirección oficial del sistema.\",\n \"failed\": \"El navegador no pudo usar la llave de acceso.\",\n \"unsupported\": \"Este navegador no admite llaves de acceso.\"\n },\n \"twoStep\": {\n \"title\": \"Verificación en dos pasos\",\n \"description\": \"Además de su contraseña, un segundo paso al entrar. Si alguien obtiene su contraseña, no podrá entrar sin él.\",\n \"active\": \"Activa\",\n \"activeSince\": \"Desde {{date}}\",\n \"inactive\": \"Sin activar\",\n \"inactiveTooltip\": \"Su cuenta solo está protegida por la contraseña.\",\n \"passkeysTitle\": \"Llaves de acceso\",\n \"add\": \"Agregar\",\n \"passkeysEmpty\": \"La forma más segura: entra con la huella, el rostro o el PIN de su equipo.\",\n \"passkeyUsed\": \"Usada por última vez {{date}}\",\n \"passkeyCreated\": \"Creada {{date}}\",\n \"removePasskey\": \"Quitar {{name}}\",\n \"removePasskeyTooltip\": \"Quitar esta llave\",\n \"appTitle\": \"App autenticadora\",\n \"appActiveSince\": \"Activa desde {{date}}\",\n \"appDescription\": \"Un código de 6 dígitos que cambia cada 30 segundos.\",\n \"activate\": \"Activar\",\n \"deactivate\": \"Desactivar\",\n \"codesTitle\": \"Códigos de recuperación\",\n \"codesRemaining_one\": \"Le queda {{count}} código sin usar.\",\n \"codesRemaining_other\": \"Le quedan {{count}} códigos sin usar.\",\n \"codesNone\": \"Ya no le quedan códigos: genere otros.\",\n \"regenerate\": \"Generar nuevos\",\n \"passwordLabel\": \"Su contraseña actual\",\n \"passwordRequired\": \"Escriba su contraseña.\",\n \"disableTitle\": \"¿Desactivar la app autenticadora?\",\n \"disableText\": \"Si no tiene una llave de acceso, su cuenta quedará protegida solo por la contraseña y sus códigos de recuperación dejarán de servir.\",\n \"removeTitle\": \"¿Quitar «{{name}}»?\",\n \"removeText\": \"Ya no podrá entrar con esta llave. Bórrela también de su equipo o de su gestor de contraseñas.\",\n \"remove\": \"Quitar\",\n \"regenerateTitle\": \"¿Generar códigos nuevos?\",\n \"regenerateText\": \"Los códigos que tenga ahora dejarán de servir.\",\n \"generate\": \"Generar\",\n \"passkeyDialogTitle\": \"Agregar una llave de acceso\",\n \"passkeyDialogText\": \"Una llave de acceso usa la huella, el rostro o el PIN de este equipo o de su teléfono. No se puede robar con una página falsa y le permite entrar sin escribir su contraseña.\",\n \"passkeyName\": \"Nombre para reconocerla (opcional)\",\n \"passkeyNamePlaceholder\": \"Por ejemplo: MacBook del trabajo\",\n \"createPasskey\": \"Crear llave\",\n \"totpDialogTitle\": \"Activar la app autenticadora\",\n \"totpStep1\": \"1. Abra su app (Google Authenticator, Microsoft Authenticator, 1Password…) y escanee este código.\",\n \"totpQrAlt\": \"Código QR para la app autenticadora\",\n \"totpCantScan\": \"¿No puede escanear? Escriba esta clave en su app:\",\n \"totpStep2\": \"2. Escriba el código de 6 dígitos que muestra la app.\",\n \"codeLabel\": \"Código\",\n \"codeRequired\": \"Escriba el código de 6 dígitos.\",\n \"codeFormat\": \"Son 6 dígitos, como aparecen en su app.\",\n \"passkeyAdded\": \"Llave de acceso agregada\",\n \"passkeyRemoved\": \"Llave de acceso quitada\",\n \"appActivated\": \"App autenticadora activada\",\n \"appDeactivated\": \"App autenticadora desactivada\"\n },\n \"recoveryCodes\": {\n \"title\": \"Guarde sus códigos de recuperación\",\n \"warning\": \"Es la única vez que los verá. Con uno de ellos podrá entrar si pierde su teléfono o su llave de acceso; cada uno sirve una sola vez.\",\n \"copyAll\": \"Copiar todos\",\n \"download\": \"Descargar .txt\",\n \"saved\": \"Ya los guardé en un lugar seguro\",\n \"done\": \"Listo\",\n \"fileTitle\": \"{{appName}} · códigos de recuperación\",\n \"fileAccount\": \"Cuenta: {{account}}\",\n \"fileGenerated\": \"Generados: {{date}}\",\n \"fileHowTo\": \"Cada código sirve UNA sola vez para entrar si no tiene su teléfono o su llave de acceso.\",\n \"fileKeepSafe\": \"Guárdelos en un lugar seguro (un gestor de contraseñas o impresos bajo llave).\",\n \"fileName\": \"codigos-recuperacion-{{date}}.txt\"\n },\n \"secondStep\": {\n \"intro\": \"Su cuenta tiene verificación en dos pasos. Confirme que es usted para terminar de entrar.\",\n \"usePasskey\": \"Usar mi llave de acceso\",\n \"or\": \"o\",\n \"appCodeLabel\": \"Código de su app autenticadora\",\n \"appCodeHelp\": \"Ábrala (Google Authenticator, Microsoft Authenticator, 1Password…) y escriba los 6 dígitos.\",\n \"recoveryCodeLabel\": \"Código de recuperación\",\n \"recoveryCodeHelp\": \"Uno de los códigos que guardó al activar la verificación. Cada uno sirve una sola vez.\",\n \"recoveryCodeRequired\": \"Escriba uno de sus códigos de recuperación.\",\n \"recoveryCodeFormat\": \"Tienen la forma ABCDE-FGHJK.\",\n \"confirm\": \"Confirmar\",\n \"useRecovery\": \"No tengo mi teléfono: usar un código de recuperación\",\n \"useApp\": \"Usar el código de mi app autenticadora\",\n \"otherAccount\": \"Entrar con otra cuenta\",\n \"remainingAttempts_one\": \"Le queda {{count}} intento.\",\n \"remainingAttempts_other\": \"Le quedan {{count}} intentos.\"\n },\n \"sessions\": {\n \"title\": \"Mis sesiones\",\n \"description\": \"Dónde tiene la cuenta abierta. Si no reconoce un equipo, cierre la sesión en los demás y cambie su contraseña.\",\n \"current\": \"Este equipo\",\n \"device\": \"{{browser}} en {{platform}}\",\n \"otherBrowser\": \"Otro navegador\",\n \"otherPlatform\": \"otro sistema\",\n \"since\": \"Desde {{date}}\",\n \"network\": \"red {{network}}\",\n \"onlyThis\": \"Solo tiene la sesión abierta en este equipo.\",\n \"closeOthers\": \"Cerrar la sesión en los demás equipos\",\n \"confirmTitle\": \"¿Cerrar la sesión en los demás equipos?\",\n \"confirmText_one\": \"Se cerrará en {{count}} equipo. Este sigue dentro, y en el otro tendrá que volver a entrar con su contraseña.\",\n \"confirmText_other\": \"Se cerrará en {{count}} equipos. Este sigue dentro, y en los demás tendrá que volver a entrar con su contraseña.\",\n \"confirm\": \"Cerrar las demás\",\n \"closed_one\": \"Se cerró la sesión en {{count}} equipo\",\n \"closed_other\": \"Se cerró la sesión en {{count}} equipos\",\n \"noneClosed\": \"No había sesiones abiertas en otros equipos\"\n },\n \"activity\": {\n \"title\": \"Actividad de la cuenta\",\n \"description\": \"Lo último que pasó con su cuenta. Si ve algo que no fue usted, cambie su contraseña y cierre la sesión en los demás equipos.\",\n \"empty\": \"Todavía no hay actividad.\",\n \"from\": \"{{device}} · red {{network}}\",\n \"kinds\": {\n \"signedIn\": \"Entró\",\n \"signInFailed\": \"Intento de entrar con contraseña equivocada\",\n \"signedOut\": \"Salió\",\n \"passwordChanged\": \"Cambió su contraseña\",\n \"twoStepEnabled\": \"Activó la verificación en dos pasos\",\n \"twoStepDisabled\": \"Desactivó la verificación en dos pasos\",\n \"passkeyAdded\": \"Agregó una llave de acceso\",\n \"passkeyRemoved\": \"Quitó una llave de acceso\",\n \"recoveryCodesGenerated\": \"Generó códigos de recuperación nuevos\",\n \"recoveryCodeUsed\": \"Entró con un código de recuperación\",\n \"sessionsClosed\": \"Cerró la sesión en los demás equipos\"\n }\n }\n },\n \"calendar\": {\n \"details\": {\n \"when\": \"Cuándo\",\n \"timeRange\": \"{{date}}, de {{start}} a {{end}}\",\n \"allDay\": \"{{date}}, todo el día\",\n \"location\": \"Dónde\",\n \"meeting\": \"Reunión en línea\",\n \"join\": \"Unirse\",\n \"attendees\": \"Invitados\",\n \"attendeesCount_one\": \"{{count}} invitado\",\n \"attendeesCount_other\": \"{{count}} invitados\",\n \"response\": {\"accepted\": \"Va\", \"declined\": \"No va\", \"pending\": \"Sin responder\"},\n \"reminder\": \"Recordatorio\",\n \"reminderUnit\": {\n \"atStart\": \"Al empezar\",\n \"minutes_one\": \"{{count}} minuto antes\",\n \"minutes_other\": \"{{count}} minutos antes\",\n \"hours_one\": \"{{count}} hora antes\",\n \"hours_other\": \"{{count}} horas antes\",\n \"days_one\": \"{{count}} día antes\",\n \"days_other\": \"{{count}} días antes\"\n },\n \"notes\": \"Notas\"\n },\n \"previous\": \"Anterior\",\n \"next\": \"Siguiente\",\n \"today\": \"Hoy\",\n \"view\": \"Vista del calendario\",\n \"views\": {\n \"month\": \"Mes\",\n \"week\": \"Semana\",\n \"day\": \"Día\",\n \"list\": \"Lista\"\n }\n },\n \"kanban\": {\n \"dueCompleted\": \"Era para el {{date}}\",\n \"complete\": \"Terminar «{{title}}»\",\n \"reopen\": \"Reabrir «{{title}}»\",\n \"completed\": \"Terminada\",\n \"collapseColumn\": \"Encoger «{{column}}»\",\n \"expandColumn\": \"Abrir «{{column}}»\",\n \"addCard\": \"Agregar una tarjeta en {{column}}\",\n \"addCardPlaceholder\": \"Título de la tarjeta (Enter para agregar)\",\n \"cardActions\": \"Acciones de «{{title}}»\",\n \"columnActions\": \"Acciones de {{column}}\",\n \"dueOverdue\": \"Venció el {{date}}\",\n \"dueToday\": \"Vence hoy\",\n \"dueOn\": \"Vence el {{date}}\",\n \"checklist\": \"{{done}} de {{total}} pendientes hechos\",\n \"comments_one\": \"{{count}} comentario\",\n \"comments_other\": \"{{count}} comentarios\",\n \"attachments_one\": \"{{count}} adjunto\",\n \"attachments_other\": \"{{count}} adjuntos\",\n \"assignees\": \"Responsables: {{names}}\",\n \"instructions\": \"Para mover una tarjeta con el teclado: espacio para levantarla, flechas para moverla y espacio para soltarla. Escape la deja donde estaba.\",\n \"lifted\": \"Levantó «{{title}}», en {{column}}, posición {{position}}.\",\n \"moving\": \"Va a {{column}}, posición {{position}}.\",\n \"dropped\": \"Soltó «{{title}}» en {{column}}, posición {{position}}.\",\n \"cancelled\": \"«{{title}}» se quedó donde estaba.\",\n \"overLimit\": \"Pasó el tope de {{limit}} tarjetas.\",\n \"emptyFiltered\": \"Ninguna tarjeta de aquí coincide con la búsqueda.\",\n \"empty\": \"Sin tarjetas. Arrastre una aquí.\"\n },\n \"inbox\": {\n \"labels\": \"Etiquetas\",\n \"select\": \"Elegir «{{subject}}»\",\n \"messageActions\": \"Acciones de «{{subject}}»\",\n \"threadCount_one\": \"{{count}} mensaje en la conversación\",\n \"threadCount_other\": \"{{count}} mensajes en la conversación\",\n \"cc\": \"Con copia: {{cc}}\",\n \"openAttachment\": \"Abrir {{name}}\",\n \"expandMessage\": \"Abrir el mensaje de {{name}} ({{date}})\",\n \"listLabel\": \"Mensajes\",\n \"folders\": \"Carpetas\",\n \"empty\": \"No hay mensajes aquí.\",\n \"noMessageSelected\": \"Elija un mensaje para leerlo.\",\n \"star\": \"Destacar\",\n \"unstar\": \"Quitar de destacados\",\n \"unread\": \"Sin leer\",\n \"attachments\": \"Archivos adjuntos\",\n \"to\": \"Para: {{to}}\",\n \"back\": \"Regresar\",\n \"unreadCount_one\": \"{{count}} sin leer\",\n \"unreadCount_other\": \"{{count}} sin leer\"\n },\n \"account\": {\n \"reset\": {\n \"title\": \"Elegir una contraseña nueva\",\n \"subtitle\": \"Llegó aquí desde el enlace del correo. Elija la contraseña con la que va a entrar.\",\n \"done\": \"Ya puede entrar con su contraseña nueva.\",\n \"goToSignIn\": \"Ir a iniciar sesión\",\n \"missingToken\": \"Este enlace no sirve: le falta su clave. Pida uno nuevo desde «¿Olvidó su contraseña?».\",\n \"askAgain\": \"Pedir otro enlace\"\n },\n \"profile\": {\n \"tabs\": {\n \"label\": \"Partes de su perfil\",\n \"data\": \"Sus datos\",\n \"security\": \"Seguridad\",\n \"preferences\": \"Preferencias\"\n },\n \"data\": {\n \"title\": \"Sus datos\",\n \"text\": \"Así le ven las demás personas en la app.\",\n \"name\": \"Nombre\",\n \"email\": \"Correo\",\n \"emailHelp\": \"Es el correo con el que entra; para cambiarlo, pídalo a quien administra la app.\",\n \"phone\": \"Teléfono (opcional)\",\n \"phoneInvalid\": \"Escriba solo dígitos (de 7 a 15), con + al inicio si es de otro país.\",\n \"save\": \"Guardar\",\n \"saved\": \"Se guardaron sus datos.\"\n },\n \"password\": {\n \"title\": \"Contraseña\",\n \"text\": \"Use una contraseña que no use en otros sitios. Al cambiarla, la próxima vez entra con la nueva.\"\n },\n \"preferences\": {\n \"title\": \"Apariencia\",\n \"text\": \"Cómo se ve la app para usted: el tamaño de letra, el idioma y claro u oscuro se recuerdan en este navegador.\"\n }\n },\n \"demo\": {\n \"totpCode\": \"Usar el código de ejemplo\",\n \"totpCodeHelp\": \"Solo en la demostración: llena el código que enseñaría su app ahorita, por si no la tiene a la mano.\",\n \"passkeyNote\": \"En la demostración la llave se guarda de verdad en su llavero (iCloud, Google o su gestor de contraseñas), pero esta página la olvida al recargar. Cuando termine de probar, bórrela también de su llavero.\",\n \"securityNote\": \"Servidor de demostración: la verificación funciona con su teléfono de verdad (escanee el QR o cree una llave con su huella), pero vive en la memoria de la pestaña: al recargar se apaga. Salga y vuelva a entrar para ver el segundo paso.\",\n \"server\": {\n \"wrongCredentialsTitle\": \"No pudo entrar\",\n \"wrongCredentials\": \"En la demostración se entra con {{email}} y cualquier contraseña.\",\n \"noSessionTitle\": \"Su sesión terminó\",\n \"noSession\": \"Vuelva a entrar.\",\n \"validationTitle\": \"Revise los datos\",\n \"validationDetail\": \"Hay campos por corregir.\",\n \"passwordRequired\": \"Escriba su contraseña para confirmar.\",\n \"nameRequired\": \"Escriba su nombre.\",\n \"wrongCodeTitle\": \"El código no coincide\",\n \"wrongCode\": \"Revise que sea el código que enseña su app ahorita.\",\n \"expiredTitle\": \"Se acabó el tiempo\",\n \"expired\": \"Pasaron más de 5 minutos: vuelva a escribir su contraseña.\",\n \"lockedTitle\": \"Demasiados intentos\",\n \"locked\": \"Por seguridad hay que empezar de nuevo: vuelva a escribir su contraseña.\",\n \"defaultPasskeyName\": \"Llave {{number}}\",\n \"profileSaved\": \"Se guardaron sus datos.\"\n }\n }\n }\n});\n"],"names":[],"mappings":"AAEA,MAAA,KAAe,OAAO,OAAO;AAAA,EACzB,SAAS;AAAA,IACL,UAAU;AAAA,MACN,eAAe;AAAA,IAC3B;AAAA,IACQ,SAAS;AAAA,MACL,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,aAAa;AAAA,MACb,iBAAiB;AAAA,IAC7B;AAAA,IACQ,SAAS;AAAA,MACL,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,gBAAgB;AAAA,IAC5B;AAAA,IACQ,SAAS;AAAA,MACL,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,YAAY;AAAA,IACxB;AAAA,IACQ,gBAAgB;AAAA,MACZ,WAAW;AAAA,MACX,qBAAqB;AAAA,MACrB,uBAAuB;AAAA,MACvB,SAAS;AAAA,MACT,YAAY;AAAA,IACxB;AAAA,IACQ,WAAW;AAAA,MACP,qBAAqB;AAAA,MACrB,SAAS;AAAA,MACT,WAAW;AAAA,IACvB;AAAA,IACQ,QAAQ;AAAA,MACJ,WAAW;AAAA,MACX,aAAa;AAAA,MACb,cAAc;AAAA,MACd,SAAS;AAAA,IACrB;AAAA,IACQ,aAAa;AAAA,MACT,aAAa;AAAA,MACb,eAAe;AAAA,MACf,eAAe;AAAA,MACf,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,sBAAsB;AAAA,MACtB,qBAAqB;AAAA,MACrB,2BAA2B;AAAA,MAC3B,gBAAgB;AAAA,MAChB,SAAS;AAAA,MACT,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,IAC5B;AAAA,IACQ,YAAY;AAAA,MACR,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,aAAa;AAAA,IACzB;AAAA,IACQ,gBAAgB;AAAA,MACZ,OAAO;AAAA,MACP,kBAAkB;AAAA,IAC9B;AAAA,IACQ,SAAS;AAAA,MACL,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,IACrB;AAAA,IACQ,SAAS;AAAA,MACL,SAAS;AAAA,MACT,cAAc;AAAA,QACV,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,kBAAkB;AAAA,QAClB,gBAAgB;AAAA,MAChC;AAAA,IACA;AAAA,IACQ,SAAS;AAAA,MACL,SAAS;AAAA,IACrB;AAAA,IACQ,UAAU;AAAA,MACN,WAAW;AAAA,MACX,aAAa;AAAA,IACzB;AAAA,IACQ,SAAS;AAAA,MACL,WAAW;AAAA,IACvB;AAAA,IACQ,aAAa;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,WAAW;AAAA,MACX,WAAW;AAAA,MACX,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,IACrB;AAAA,IACQ,SAAS;AAAA,MACL,WAAW;AAAA,QACP,cAAc;AAAA,QACd,SAAS;AAAA,QACT,UAAU;AAAA,QACV,SAAS;AAAA,MACzB;AAAA,MACY,eAAe;AAAA,MACf,sBAAsB;AAAA,MACtB,aAAa;AAAA,MACb,eAAe;AAAA,MACf,SAAS;AAAA,IACrB;AAAA,EACA;AAAA,EACI,UAAU;AAAA,IACN,WAAW;AAAA,MACP,UAAU;AAAA,MACV,WAAW;AAAA,MACX,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,IACtB;AAAA,IACQ,UAAU;AAAA,MACN,WAAW;AAAA,MACX,UAAU;AAAA,IACtB;AAAA,IACQ,QAAQ;AAAA,MACJ,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,SAAS;AAAA,MACT,qBAAqB;AAAA,MACrB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,cAAc;AAAA,MACd,aAAa;AAAA,MACb,kBAAkB;AAAA,MAClB,aAAa;AAAA,MACb,iBAAiB;AAAA,MACjB,oBAAoB;AAAA,MACpB,sBAAsB;AAAA,MACtB,aAAa;AAAA,MACb,eAAe;AAAA,MACf,kBAAkB;AAAA,MAClB,oBAAoB;AAAA,MACpB,gBAAgB;AAAA,IAC5B;AAAA,IACQ,aAAa;AAAA,MACT,SAAS;AAAA,MACT,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,IAC5B;AAAA,IACQ,aAAa;AAAA,MACT,OAAO;AAAA,MACP,OAAO;AAAA,MACP,eAAe;AAAA,MACf,cAAc;AAAA,MACd,UAAU;AAAA,MACV,SAAS;AAAA,MACT,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,cAAc;AAAA,IAC1B;AAAA,IACQ,YAAY;AAAA,MACR,aAAa;AAAA,MACb,UAAU;AAAA,MACV,UAAU;AAAA,MACV,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,WAAW;AAAA,MACX,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,kBAAkB;AAAA,MAClB,aAAa;AAAA,MACb,eAAe;AAAA,IAC3B;AAAA,IACQ,QAAQ;AAAA,MACJ,UAAU;AAAA,MACV,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,iBAAiB;AAAA,IAC7B;AAAA,IACQ,gBAAgB;AAAA,MACZ,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,aAAa;AAAA,QACT,MAAM;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,MACvB;AAAA,MACY,kBAAkB;AAAA,MAClB,YAAY;AAAA,MACZ,UAAU;AAAA,IACtB;AAAA,IACQ,cAAc;AAAA,MACV,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,eAAe;AAAA,MACf,eAAe;AAAA,MACf,WAAW;AAAA,IACvB;AAAA,IACQ,eAAe;AAAA,MACX,QAAQ;AAAA,IACpB;AAAA,IACQ,UAAU;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,UAAU;AAAA,IACtB;AAAA,IACQ,YAAY;AAAA,MACR,YAAY;AAAA,QACR,MAAM;AAAA,QACN,MAAM;AAAA,MACtB;AAAA,MACY,iBAAiB;AAAA,MACjB,UAAU;AAAA,IACtB;AAAA,IACQ,eAAe;AAAA,MACX,SAAS;AAAA,MACT,YAAY;AAAA,QACR,SAAS;AAAA,QACT,QAAQ;AAAA,MACxB;AAAA,IACA;AAAA,IACQ,SAAS;AAAA,MACL,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,WAAW;AAAA,IACvB;AAAA,IACQ,WAAW;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,IACpB;AAAA,IACQ,YAAY;AAAA,MACR,WAAW;AAAA,MACX,SAAS;AAAA,MACT,UAAU;AAAA,IACtB;AAAA,IACQ,WAAW;AAAA,MACP,UAAU;AAAA,MACV,UAAU;AAAA,MACV,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,MACzB;AAAA,MACY,cAAc;AAAA,QACV,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,MACzB;AAAA,MACY,kBAAkB;AAAA,QACd,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,MACzB;AAAA,IACA;AAAA,IACQ,aAAa;AAAA,MACT,QAAQ;AAAA,MACR,aAAa;AAAA,IACzB;AAAA,IACQ,aAAa;AAAA,MACT,aAAa;AAAA,MACb,YAAY;AAAA,IACxB;AAAA,IACQ,SAAS;AAAA,MACL,WAAW;AAAA,QACP,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,UAAU;AAAA,MAC1B;AAAA,MACY,SAAS;AAAA,QACL,SAAS;AAAA,QACT,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,aAAa;AAAA,QACb,UAAU;AAAA,QACV,WAAW;AAAA,QACX,cAAc;AAAA,MAC9B;AAAA,IACA;AAAA,IACQ,UAAU;AAAA,MACN,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,UAAU;AAAA,MACV,SAAS;AAAA,MACT,eAAe;AAAA,MACf,eAAe;AAAA,MACf,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,kBAAkB;AAAA,MAClB,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,sBAAsB;AAAA,MACtB,oBAAoB;AAAA,MACpB,sBAAsB;AAAA,MACtB,eAAe;AAAA,MACf,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,MACpB,sBAAsB;AAAA,MACtB,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,mBAAmB;AAAA,MACnB,UAAU;AAAA,MACV,WAAW;AAAA,MACX,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,aAAa;AAAA,MACb,UAAU;AAAA,MACV,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,mBAAmB;AAAA,MACnB,UAAU;AAAA,QACN,WAAW;AAAA,QACX,aAAa;AAAA,QACb,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,UAAU;AAAA,MAC1B;AAAA,MACY,QAAQ;AAAA,QACJ,WAAW;AAAA,QACX,aAAa;AAAA,QACb,kBAAkB;AAAA,QAClB,oBAAoB;AAAA,QACpB,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd,sBAAsB;AAAA,QACtB,qBAAqB;AAAA,QACrB,mBAAmB;AAAA,QACnB,eAAe;AAAA,QACf,eAAe;AAAA,QACf,eAAe;AAAA,QACf,cAAc;AAAA,QACd,aAAa;AAAA,QACb,UAAU;AAAA,QACV,aAAa;AAAA,QACb,aAAa;AAAA,QACb,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,mBAAmB;AAAA,QACnB,eAAe;AAAA,MAC/B;AAAA,IACA;AAAA,IACQ,YAAY;AAAA,MACR,WAAW;AAAA,QACP,OAAO;AAAA,UACH,SAAS;AAAA,UACT,QAAQ;AAAA,QAC5B;AAAA,QACgB,QAAQ;AAAA,UACJ,SAAS;AAAA,UACT,QAAQ;AAAA,QAC5B;AAAA,QACgB,OAAO;AAAA,UACH,SAAS;AAAA,UACT,QAAQ;AAAA,QAC5B;AAAA,MACA;AAAA,IACA;AAAA,IACQ,aAAa;AAAA,MACT,SAAS;AAAA,MACT,0BAA0B;AAAA,MAC1B,4BAA4B;AAAA,MAC5B,wBAAwB;AAAA,MACxB,0BAA0B;AAAA,MAC1B,qBAAqB;AAAA,MACrB,uBAAuB;AAAA,MACvB,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,MACd,kBAAkB;AAAA,MAClB,UAAU;AAAA,MACV,YAAY;AAAA,IACxB;AAAA,IACQ,UAAU;AAAA,MACN,eAAe;AAAA,MACf,UAAU;AAAA,MACV,eAAe;AAAA,MACf,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACnB;AAAA,EACA;AAAA,EACI,UAAU;AAAA,IACN,iBAAiB;AAAA,IACjB,cAAc;AAAA,MACV,QAAQ;AAAA,IACpB;AAAA,IACQ,UAAU;AAAA,MACN,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,eAAe;AAAA,MACf,cAAc;AAAA,MACd,YAAY;AAAA,IACxB;AAAA,IACQ,WAAW;AAAA,MACP,QAAQ;AAAA,MACR,aAAa;AAAA,IACzB;AAAA,IACQ,YAAY;AAAA,MACR,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,IACtB;AAAA,IACQ,YAAY;AAAA,MACR,SAAS;AAAA,MACT,UAAU;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,IACtB;AAAA,IACQ,gBAAgB;AAAA,MACZ,MAAM;AAAA,MACN,MAAM;AAAA,IAClB;AAAA,IACQ,eAAe;AAAA,IACf,WAAW;AAAA,IACX,cAAc;AAAA,EACtB;AAAA,EACI,QAAQ;AAAA,IACJ,UAAU;AAAA,MACN,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,UAAU;AAAA,IACtB;AAAA,IACQ,kBAAkB;AAAA,MACd,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,UAAU;AAAA,MACV,aAAa;AAAA,MACb,QAAQ;AAAA,MACR,gBAAgB;AAAA,IAC5B;AAAA,IACQ,kBAAkB;AAAA,MACd,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,eAAe;AAAA,MACf,QAAQ;AAAA,IACpB;AAAA,IACQ,iBAAiB;AAAA,MACb,SAAS;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,MACb,UAAU;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAW;AAAA,IACvB;AAAA,EACA;AAAA,EACI,UAAU;AAAA,IACN,eAAe;AAAA,MACX,WAAW;AAAA,MACX,SAAS;AAAA,IACrB;AAAA,EACA;AAAA,EACI,cAAc;AAAA,IACV,SAAS;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,IACpB;AAAA,EACA;AAAA,EACI,aAAa;AAAA,IACT,UAAU;AAAA,IACV,SAAS;AAAA,IACT,UAAU;AAAA,IACV,cAAc;AAAA,MACV,SAAS;AAAA,MACT,QAAQ;AAAA,IACpB;AAAA,IACQ,YAAY;AAAA,MACR,SAAS;AAAA,MACT,QAAQ;AAAA,IACpB;AAAA,IACQ,aAAa;AAAA,MACT,SAAS;AAAA,MACT,QAAQ;AAAA,IACpB;AAAA,IACQ,eAAe;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,IACpB;AAAA,EACA;AAAA,EACI,YAAY;AAAA,IACR,WAAW;AAAA,MACP,SAAS;AAAA,MACT,UAAU;AAAA,IACtB;AAAA,IACQ,mBAAmB;AAAA,MACf,SAAS;AAAA,MACT,UAAU;AAAA,IACtB;AAAA,IACQ,aAAa;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,IACtB;AAAA,IACQ,YAAY;AAAA,MACR,SAAS;AAAA,MACT,UAAU;AAAA,IACtB;AAAA,IACQ,YAAY;AAAA,MACR,SAAS;AAAA,MACT,UAAU;AAAA,IACtB;AAAA,IACQ,mBAAmB;AAAA,MACf,SAAS;AAAA,MACT,UAAU;AAAA,IACtB;AAAA,IACQ,qBAAqB;AAAA,MACjB,SAAS;AAAA,MACT,UAAU;AAAA,IACtB;AAAA,IACQ,cAAc;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,IACtB;AAAA,IACQ,mBAAmB;AAAA,MACf,SAAS;AAAA,MACT,UAAU;AAAA,IACtB;AAAA,IACQ,eAAe;AAAA,MACX,SAAS;AAAA,MACT,UAAU;AAAA,IACtB;AAAA,IACQ,sBAAsB;AAAA,MAClB,SAAS;AAAA,MACT,UAAU;AAAA,IACtB;AAAA,IACQ,WAAW;AAAA,MACP,SAAS;AAAA,MACT,UAAU;AAAA,IACtB;AAAA,IACQ,QAAQ;AAAA,MACJ,SAAS;AAAA,MACT,UAAU;AAAA,IACtB;AAAA,EACA;AAAA,EACI,YAAY;AAAA,IACR,WAAW;AAAA,MACP,SAAS;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,aAAa;AAAA,MACb,UAAU;AAAA,MACV,cAAc;AAAA,MACd,eAAe;AAAA,MACf,cAAc;AAAA,MACd,aAAa;AAAA,MACb,QAAQ;AAAA,MACR,SAAS;AAAA,QACL,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,SAAS;AAAA,MACzB;AAAA,MACY,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ;AAAA,IACpB;AAAA,IACQ,cAAc;AAAA,MACV,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,WAAW;AAAA,IACvB;AAAA,IACQ,WAAW;AAAA,EACnB;AAAA,EACI,UAAU;AAAA,IACN,UAAU;AAAA,MACN,eAAe;AAAA,MACf,mBAAmB;AAAA,MACnB,cAAc;AAAA,MACd,kBAAkB;AAAA,MAClB,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,kBAAkB;AAAA,MAClB,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,kBAAkB;AAAA,MAClB,qBAAqB;AAAA,MACrB,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,YAAY;AAAA,QACR,UAAU;AAAA,QACV,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,MACpC;AAAA,MACY,UAAU;AAAA,QACN,SAAS;AAAA,QACT,WAAW;AAAA,QACX,eAAe;AAAA,MAC/B;AAAA,IACA;AAAA,IACQ,QAAQ;AAAA,MACJ,gBAAgB;AAAA,MAChB,WAAW;AAAA,MACX,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,gBAAgB;AAAA,QACZ,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACrB;AAAA,IACA;AAAA,EACA;AAAA,EACI,cAAc;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,IACpB,0BAA0B;AAAA,IAC1B,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,IACtB,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,wBAAwB;AAAA,IACxB,oBAAoB;AAAA,IACpB,sBAAsB;AAAA,IACtB,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,oBAAoB;AAAA,IACpB,sBAAsB;AAAA,IACtB,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,qBAAqB;AAAA,EAC7B;AAAA,EACI,gBAAgB;AAAA,IACZ,WAAW;AAAA,MACP,SAAS;AAAA,MACT,WAAW;AAAA,IACvB;AAAA,EACA;AAAA,EACI,YAAY;AAAA,IACR,YAAY;AAAA,MACR,aAAa;AAAA,MACb,qBAAqB;AAAA,MACrB,eAAe;AAAA,MACf,UAAU;AAAA,MACV,eAAe;AAAA,IAC3B;AAAA,IACQ,WAAW;AAAA,MACP,SAAS;AAAA,MACT,eAAe;AAAA,MACf,UAAU;AAAA,MACV,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,mBAAmB;AAAA,MACnB,iBAAiB;AAAA,MACjB,OAAO;AAAA,MACP,iBAAiB;AAAA,MACjB,eAAe;AAAA,MACf,kBAAkB;AAAA,MAClB,iBAAiB;AAAA,MACjB,wBAAwB;AAAA,MACxB,YAAY;AAAA,MACZ,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,cAAc;AAAA,MACd,sBAAsB;AAAA,MACtB,wBAAwB;AAAA,MACxB,aAAa;AAAA,MACb,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,oBAAoB;AAAA,MACpB,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,eAAe;AAAA,MACf,cAAc;AAAA,MACd,UAAU;AAAA,MACV,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,MAClB,YAAY;AAAA,MACZ,sBAAsB;AAAA,MACtB,qBAAqB;AAAA,MACrB,eAAe;AAAA,MACf,0BAA0B;AAAA,MAC1B,iBAAiB;AAAA,MACjB,mBAAmB;AAAA,MACnB,aAAa;AAAA,MACb,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,gBAAgB;AAAA,MAChB,kBAAkB;AAAA,MAClB,gBAAgB;AAAA,MAChB,kBAAkB;AAAA,IAC9B;AAAA,IACQ,iBAAiB;AAAA,MACb,SAAS;AAAA,MACT,WAAW;AAAA,MACX,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,YAAY;AAAA,IACxB;AAAA,IACQ,cAAc;AAAA,MACV,SAAS;AAAA,MACT,cAAc;AAAA,MACd,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,wBAAwB;AAAA,MACxB,sBAAsB;AAAA,MACtB,WAAW;AAAA,MACX,eAAe;AAAA,MACf,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,yBAAyB;AAAA,MACzB,2BAA2B;AAAA,IACvC;AAAA,IACQ,YAAY;AAAA,MACR,SAAS;AAAA,MACT,eAAe;AAAA,MACf,WAAW;AAAA,MACX,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,iBAAiB;AAAA,MACjB,SAAS;AAAA,MACT,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,qBAAqB;AAAA,MACrB,WAAW;AAAA,MACX,cAAc;AAAA,MACd,gBAAgB;AAAA,MAChB,cAAc;AAAA,IAC1B;AAAA,IACQ,YAAY;AAAA,MACR,SAAS;AAAA,MACT,eAAe;AAAA,MACf,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,SAAS;AAAA,QACL,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,mBAAmB;AAAA,QACnB,gBAAgB;AAAA,QAChB,kBAAkB;AAAA,QAClB,0BAA0B;AAAA,QAC1B,oBAAoB;AAAA,QACpB,kBAAkB;AAAA,MAClC;AAAA,IACA;AAAA,EACA;AAAA,EACI,YAAY;AAAA,IACR,WAAW;AAAA,MACP,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,sBAAsB;AAAA,MACtB,wBAAwB;AAAA,MACxB,YAAY,EAAC,YAAY,MAAM,YAAY,SAAS,WAAW,gBAAe;AAAA,MAC9E,YAAY;AAAA,MACZ,gBAAgB;AAAA,QACZ,WAAW;AAAA,QACX,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,aAAa;AAAA,QACb,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,cAAc;AAAA,MAC9B;AAAA,MACY,SAAS;AAAA,IACrB;AAAA,IACQ,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,MACL,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,IACpB;AAAA,EACA;AAAA,EACI,UAAU;AAAA,IACN,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,aAAa;AAAA,IACb,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,IAChB,WAAW;AAAA,IACX,sBAAsB;AAAA,IACtB,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,qBAAqB;AAAA,IACrB,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,UAAU;AAAA,IACV,WAAW;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,SAAS;AAAA,EACjB;AAAA,EACI,SAAS;AAAA,IACL,UAAU;AAAA,IACV,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,qBAAqB;AAAA,IACrB,MAAM;AAAA,IACN,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,WAAW;AAAA,IACX,SAAS;AAAA,IACT,qBAAqB;AAAA,IACrB,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,UAAU;AAAA,IACV,eAAe;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,mBAAmB;AAAA,IACnB,qBAAqB;AAAA,EAC7B;AAAA,EACI,WAAW;AAAA,IACP,SAAS;AAAA,MACL,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,gBAAgB;AAAA,MAChB,YAAY;AAAA,IACxB;AAAA,IACQ,WAAW;AAAA,MACP,QAAQ;AAAA,QACJ,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,eAAe;AAAA,MAC/B;AAAA,MACY,QAAQ;AAAA,QACJ,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,aAAa;AAAA,QACb,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,SAAS;AAAA,MACzB;AAAA,MACY,YAAY;AAAA,QACR,SAAS;AAAA,QACT,QAAQ;AAAA,MACxB;AAAA,MACY,eAAe;AAAA,QACX,SAAS;AAAA,QACT,QAAQ;AAAA,MACxB;AAAA,IACA;AAAA,IACQ,QAAQ;AAAA,MACJ,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,UAAU;AAAA,QACN,yBAAyB;AAAA,QACzB,oBAAoB;AAAA,QACpB,kBAAkB;AAAA,QAClB,aAAa;AAAA,QACb,mBAAmB;AAAA,QACnB,oBAAoB;AAAA,QACpB,oBAAoB;AAAA,QACpB,gBAAgB;AAAA,QAChB,kBAAkB;AAAA,QAClB,aAAa;AAAA,QACb,gBAAgB;AAAA,QAChB,WAAW;AAAA,QACX,eAAe;AAAA,QACf,UAAU;AAAA,QACV,sBAAsB;AAAA,QACtB,gBAAgB;AAAA,MAChC;AAAA,IACA;AAAA,EACA;AACA,CAAC;"}
1
+ {"version":3,"file":"es.js","sources":["../../src/locales/es.js"],"sourcesContent":["// Textos del paquete en español (el idioma por omisión). Cada proyecto puede cambiar cualquiera con `texts` o `translate`\n// de ToolkitProvider, con la misma forma: namespace, llaves anidadas, {{variable}} y plurales _one / _other.\nexport default Object.freeze({\n \"table\": {\n \"search\": {\n \"placeholder\": \"Buscar dentro de estos resultados…\"\n },\n \"count\": {\n \"records_one\": \"{{total}} registro\",\n \"records_other\": \"{{total}} registros\",\n \"capped\": \"más de {{total}} registros\",\n \"cappedTag\": \"total aproximado\",\n \"cappedTooltip\": \"Hay al menos estos registros y puede haber más: agregue un filtro para verlos todos.\"\n },\n \"empty\": {\n \"default\": \"Sin registros\",\n \"filtered\": \"Ningún registro cumple con los filtros aplicados.\",\n \"clearFilters\": \"Quitar los filtros\"\n },\n \"chips\": {\n \"applied_one\": \"{{count}} filtro aplicado\",\n \"applied_other\": \"{{count}} filtros aplicados\",\n \"clearAll\": \"Limpiar todo\"\n },\n \"columnFilter\": {\n \"tooltip\": \"Filtrar (se aplica a todos los registros, no solo a esta página)\",\n \"activeTooltip_one\": \"{{count}} filtro en esta columna\",\n \"activeTooltip_other\": \"{{count}} filtros en esta columna\",\n \"clear\": \"Limpiar esta columna\",\n \"contains\": \"Contiene\"\n },\n \"options\": {\n \"searchPlaceholder\": \"Buscar opción…\",\n \"empty\": \"Sin valores en este resultado\",\n \"noMatch\": \"Ninguna opción coincide con “{{text}}”\"\n },\n \"sort\": {\n \"tooltip\": \"Ordenar por esta columna\",\n \"ascending\": \"orden ascendente\",\n \"descending\": \"orden descendente\",\n \"clear\": \"Quitar el orden\"\n },\n \"selection\": {\n \"count_one\": \"{{total}} elegido\",\n \"count_other\": \"{{total}} elegidos\",\n \"allMatching\": \"Los {{total}} que coinciden están elegidos\",\n \"allMatchingCapped\": \"Todos los que coinciden están elegidos\",\n \"pageSelected_one\": \"Se eligió el único renglón de esta página.\",\n \"pageSelected_other\": \"Se eligieron los {{count}} de esta página.\",\n \"selectAllMatching\": \"Elegir los {{total}} que coinciden\",\n \"selectAllMatchingCapped\": \"Elegir todos los que coinciden\",\n \"onlyThisPage\": \"Elegir solo esta página\",\n \"clear\": \"Quitar selección\",\n \"summaryLabel\": \"Lo elegido\",\n \"actionsLabel\": \"Acciones de los elegidos\"\n },\n \"goToPage\": {\n \"page\": \"Página\",\n \"of_one\": \"de {{total}}\",\n \"of_other\": \"de {{total}}\",\n \"ariaLabel\": \"Ir a la página\"\n },\n \"quickFilters\": {\n \"all\": \"Todos\",\n \"countAriaLabel\": \"{{count}} registros\"\n },\n \"views\": {\n \"label\": \"Cómo ver la lista\",\n \"table\": \"Tabla\",\n \"cards\": \"Tarjetas\"\n },\n \"cards\": {\n \"label\": \"Los registros en tarjetas\",\n \"pagination\": {\n \"page\": \"Página {{page}}\",\n \"first\": \"Primera página\",\n \"last\": \"Última página\",\n \"next\": \"Página siguiente\",\n \"previous\": \"Página anterior\",\n \"start-ellipsis\": \"Páginas anteriores\",\n \"end-ellipsis\": \"Páginas siguientes\"\n }\n },\n \"cells\": {\n \"empty\": \"—\"\n },\n \"detail\": {\n \"tooltip\": \"Ver detalle\",\n \"ariaLabel\": \"Ver el detalle de este registro\"\n },\n \"error\": {\n \"generic\": \"No pudimos consultar la tabla.\"\n },\n \"dateRange\": {\n \"label\": \"Personalizado\",\n \"title\": \"Rango de fechas\",\n \"from\": \"Desde\",\n \"to\": \"Hasta\",\n \"fromHelp\": \"Desde el inicio de ese día\",\n \"toHelp\": \"Hasta el final de ese día\",\n \"invalid\": \"«Hasta» no puede ser antes de «Desde»\",\n \"summary\": \"{{from}} – {{to}}\",\n \"today\": \"hoy\",\n \"clear\": \"Quitar\",\n \"apply\": \"Aplicar\"\n },\n \"audit\": {\n \"columns\": {\n \"occurredAt\": \"Fecha y hora\",\n \"event\": \"Qué pasó\",\n \"result\": \"Resultado\",\n \"actor\": \"Quién\"\n },\n \"systemActor\": \"Proceso automático\",\n \"eventFilterCaption\": \"Filtrar por evento\",\n \"count_one\": \"{{count}} evento\",\n \"count_other\": \"{{count}} eventos\",\n \"empty\": \"Todavía no hay eventos registrados.\"\n }\n },\n \"common\": {\n \"actions\": {\n \"cancel\": \"Cancelar\",\n \"confirm\": \"Confirmar\",\n \"retry\": \"Intentar de nuevo\",\n \"download\": \"Descargar\",\n \"close\": \"Cerrar\",\n \"back\": \"Regresar\",\n \"reload\": \"Recargar la página\"\n },\n \"status\": {\n \"loading\": \"Cargando…\",\n \"noData\": \"Sin datos\"\n },\n \"form\": {\n \"showPassword\": \"Mostrar contraseña\",\n \"hidePassword\": \"Ocultar contraseña\",\n \"clear\": \"Borrar el texto\",\n \"requiredMark\": \"*\",\n \"selectPlaceholder\": \"Elija una opción\",\n \"copy\": \"Copiar\",\n \"copied\": \"Copiado\",\n \"copyFailed\": \"No se pudo copiar: el navegador no dio permiso.\",\n \"noOptions\": \"Ninguna opción coincide\",\n \"loadingOptions\": \"Cargando opciones…\",\n \"pickColor\": \"Elegir el color\",\n \"colorContrast\": \"Contraste sobre blanco: {{ratio}}:1\",\n \"colorLowContrast\": \"Con ese color el texto casi no se leería sobre blanco. {{suggestion}} es el mismo tono, más oscuro.\",\n \"colorUseSuggestion\": \"Usar {{color}}\",\n \"selectAll\": \"Elegir todos ({{count}})\",\n \"unselectAll\": \"Quitar todos\",\n \"selectMatching\": \"Elegir los {{count}} que coinciden\",\n \"unselectMatching\": \"Quitar los {{count}} que coinciden\",\n \"moreSelected\": \"+{{count}} más\"\n },\n \"selection\": {\n \"clear\": \"Quitar selección\",\n \"actionsLabel\": \"Acciones de los elegidos\",\n \"summaryLabel\": \"Lo elegido\"\n },\n \"repeating\": {\n \"row\": \"Renglón {{number}}\",\n \"add\": \"Agregar\",\n \"removeShort\": \"Quitar\",\n \"clearShort\": \"Limpiar\",\n \"remove\": \"Quitar «{{row}}»\",\n \"clear\": \"Limpiar «{{row}}»\",\n \"maxRows_one\": \"Hasta {{count}} renglón\",\n \"maxRows_other\": \"Hasta {{count}} renglones\",\n \"confirmTitle\": \"¿Quitar «{{row}}»?\",\n \"confirmText\": \"Ya estaba guardado: se quita de verdad al guardar el formulario.\",\n \"blockedTitle\": \"No se puede quitar\",\n \"understood\": \"Entendido\"\n },\n \"transfer\": {\n \"available\": \"Disponibles\",\n \"chosen\": \"Elegidos\",\n \"search\": \"Buscar\",\n \"markVisible\": \"Marcar todos los que se ven en «{{list}}»\",\n \"markedOf\": \"{{marked}} de {{count}} marcados\",\n \"moveMarked\": \"Pasar los marcados a elegidos\",\n \"moveAll\": \"Pasar todos a elegidos\",\n \"returnMarked\": \"Regresar los marcados a disponibles\",\n \"returnAll\": \"Regresar todos a disponibles\",\n \"emptyAvailable\": \"No queda nada por elegir.\",\n \"noMatches\": \"Nada coincide con «{{text}}».\",\n \"emptyChosen\": \"Todavía no hay elegidos: márquelos a la izquierda y páselos con ›.\"\n },\n \"help\": {\n \"button\": \"Ayuda de esta pantalla\",\n \"close\": \"Cerrar la ayuda\",\n \"next\": \"Siguiente\",\n \"back\": \"Anterior\",\n \"done\": \"Listo\",\n \"stepOf\": \"Paso {{current}} de {{total}}\",\n \"goToStep\": \"Ir al paso {{number}}\",\n \"dontShowAgain\": \"No volver a mostrar al entrar\"\n },\n \"filterDrawer\": {\n \"open\": \"Filtros\",\n \"openWithCount\": \"Filtros ({{count}})\",\n \"title\": \"Filtros\",\n \"close\": \"Cerrar los filtros\",\n \"apply\": \"Buscar\",\n \"clear\": \"Limpiar\",\n \"any\": \"Cualquiera\",\n \"from\": \"Desde\",\n \"to\": \"Hasta\",\n \"operator\": \"Comparación\",\n \"value\": \"Cantidad\",\n \"operators\": {\n \"eq\": \"Igual a\",\n \"gt\": \"Mayor que\",\n \"gte\": \"Mayor o igual\",\n \"lt\": \"Menor que\",\n \"lte\": \"Menor o igual\"\n },\n \"rangeBackwards\": \"Debe ser igual o mayor que «Desde».\",\n \"chipFrom\": \"{{label}} desde\",\n \"chipTo\": \"{{label}} hasta\"\n },\n \"recordCard\": {\n \"open\": \"Abrir\",\n \"actions\": \"Más acciones\",\n \"showDetails\": \"Ver detalle\",\n \"hideDetails\": \"Ocultar detalle\",\n \"loading\": \"Cargando\"\n },\n \"actionsMenu\": {\n \"back\": \"Regresar\"\n },\n \"wizard\": {\n \"next\": \"Siguiente\",\n \"back\": \"Anterior\",\n \"skip\": \"Omitir este paso\",\n \"optional\": \"Opcional\",\n \"skipped\": \"Omitido\",\n \"stepOf\": \"Paso {{current}} de {{total}}\"\n },\n \"language\": {\n \"switchTo\": {\n \"es\": \"Cambiar a español\",\n \"en\": \"Cambiar a inglés\"\n },\n \"switchToNamed\": \"Cambiar a {{name}}\",\n \"choose\": \"Idioma: {{name}}. Elegir otro\"\n },\n \"colorScheme\": {\n \"label\": \"Claro u oscuro\",\n \"switchTo\": {\n \"light\": \"Cambiar a modo claro\",\n \"dark\": \"Cambiar a modo oscuro\"\n }\n },\n \"toast\": {\n \"done\": \"Listo\",\n \"error\": \"Ocurrió un error\",\n \"warning\": \"Atención\",\n \"info\": \"Aviso\",\n \"working\": \"Procesando…\"\n },\n \"waiting\": {\n \"title\": \"Un momento\",\n \"text\": \"Estamos procesando su solicitud. No cierre esta ventana.\"\n },\n \"newBuild\": {\n \"message\": \"Hay una versión nueva del sistema. Recargue la página para usarla.\",\n \"short\": \"Versión nueva disponible\",\n \"reload\": \"Recargar\"\n },\n \"install\": {\n \"banner\": \"Instale esta aplicación en su equipo para abrirla más rápido\",\n \"action\": \"Instalar\",\n \"howTo\": \"Cómo instalar\",\n \"dismiss\": \"Ahora no\",\n \"gotIt\": \"Entendido\",\n \"menuLabel\": \"Instalar la app\",\n \"iosModern\": {\n \"title\": \"Instalar en su iPhone o iPad\",\n \"step1\": \"Toque ⋯ (los tres puntos) junto a la barra de direcciones.\",\n \"step2\": \"Toque «Compartir».\",\n \"step3\": \"Toque «Agregar a inicio».\",\n \"step4\": \"Deje activado «Abrir como app web» y toque «Agregar».\"\n },\n \"iosClassic\": {\n \"title\": \"Instalar en su iPhone\",\n \"step1\": \"Toque el botón Compartir (el cuadro con una flecha hacia arriba).\",\n \"step2\": \"Toque «Agregar a inicio».\",\n \"step3\": \"Toque «Agregar».\"\n },\n \"androidFirefox\": {\n \"title\": \"Instalar en Firefox\",\n \"step1\": \"Toque el menú ⋮.\",\n \"step2\": \"Toque «Instalar» o «Agregar a pantalla de inicio».\",\n \"step3\": \"Confirme.\"\n }\n },\n \"countdown\": {\n \"done\": \"Ya terminó\",\n \"daysShort\": \"d\"\n },\n \"pdfViewer\": {\n \"openInTab\": \"Abrir en otra pestaña\",\n \"download\": \"Descargar\"\n },\n \"legal\": {\n \"cookies\": {\n \"region\": \"Aviso de cookies\",\n \"text\": \"Usamos cookies para que la sesión y sus preferencias funcionen. Al seguir, acepta su uso.\",\n \"policy\": \"Política de cookies\",\n \"accept\": \"Aceptar\"\n },\n \"terms\": {\n \"title\": \"Términos y condiciones\",\n \"version\": \"Versión {{version}}\",\n \"checkbox\": \"He leído y acepto los términos\",\n \"readToEnd\": \"Lea hasta el final para poder aceptar.\",\n \"accept\": \"Acepto\",\n \"decline\": \"No acepto\",\n \"saveFailed\": \"No se pudo guardar su respuesta. Intente de nuevo.\"\n }\n },\n \"upload\": {\n \"hint\": \"Arrastre aquí su archivo\",\n \"hintMultiple\": \"Arrastre aquí sus archivos\",\n \"choose\": \"Elegir archivo\",\n \"attach\": \"Adjuntar\",\n \"empty\": \"Ningún archivo elegido\",\n \"chooseImage\": \"Elegir imagen\",\n \"changeImage\": \"Cambiar la imagen\",\n \"removeImage\": \"Quitar la imagen\",\n \"template\": \"Descargar la plantilla\",\n \"chooseMultiple\": \"Elegir archivos\",\n \"remove\": \"Quitar {{name}}\",\n \"invalidTitle\": \"Archivo no permitido\",\n \"invalidType\": \"«{{name}}» no es de un tipo permitido. Se aceptan: {{accept}}.\",\n \"tooLarge\": \"«{{name}}» pesa más de {{max}}.\",\n \"tooLargeShort\": \"Pesa más de lo permitido\",\n \"totalTooLarge\": \"Con «{{name}}», entre todos pesan más de {{max}}.\",\n \"totalTooLargeShort\": \"Entre todos pesan más de lo permitido\",\n \"tooManyFiles_one\": \"Se puede subir {{count}} archivo como máximo.\",\n \"tooManyFiles_other\": \"Se pueden subir {{count}} archivos como máximo.\",\n \"maxSizeHint\": \"Hasta {{max}} por archivo\",\n \"maxTotalSizeHint\": \"Hasta {{max}} entre todos\",\n \"maxFilesHint_one\": \"Hasta {{count}} archivo\",\n \"maxFilesHint_other\": \"Hasta {{count}} archivos\",\n \"summary_one\": \"{{count}} archivo · {{total}}\",\n \"summary_other\": \"{{count}} archivos · {{total}}\",\n \"summaryOf_one\": \"{{count}} archivo · {{total}} de {{max}}\",\n \"summaryOf_other\": \"{{count}} archivos · {{total}} de {{max}}\",\n \"upload\": \"Cargar\",\n \"replace\": \"Sustituir\",\n \"cancel\": \"Cancelar\",\n \"download\": \"Bajar el archivo\",\n \"failed\": \"No se pudo subir el archivo. Intente otra vez.\",\n \"starting\": \"Empezando la subida…\",\n \"processing\": \"Subido; el servidor lo está revisando…\",\n \"cancelled\": \"Se canceló la subida.\",\n \"amount\": \"{{loaded}} de {{total}}\",\n \"speed\": \"{{size}}/s\",\n \"remaining_one\": \"falta {{count}} segundo\",\n \"remaining_other\": \"faltan {{count}} segundos\",\n \"status\": {\n \"pending\": \"Por cargar\",\n \"uploading\": \"Subiendo {{percent}} %\",\n \"processing\": \"Procesando\",\n \"uploaded\": \"Cargado\",\n \"failed\": \"No se cargó\"\n },\n \"pond\": {\n \"loading\": \"Cargando\",\n \"loadError\": \"No se pudo cargar\",\n \"waitingForSize\": \"Calculando el peso\",\n \"sizeNotAvailable\": \"Peso no disponible\",\n \"invalidField\": \"Hay archivos que no son válidos\",\n \"processing\": \"Subiendo\",\n \"processingComplete\": \"Subido\",\n \"processingAborted\": \"Subida cancelada\",\n \"processingError\": \"No se pudo subir\",\n \"noTransferId\": \"El servidor no dio el folio de la subida\",\n \"revertError\": \"No se pudo deshacer\",\n \"removeError\": \"No se pudo quitar\",\n \"tapToCancel\": \"toque para cancelar\",\n \"tapToRetry\": \"toque para reintentar\",\n \"tapToUndo\": \"toque para deshacer\",\n \"remove\": \"Quitar\",\n \"abortLoad\": \"Cancelar\",\n \"retryLoad\": \"Reintentar\",\n \"abortProcessing\": \"Cancelar\",\n \"undoProcessing\": \"Deshacer\",\n \"retryProcessing\": \"Reintentar\",\n \"processItem\": \"Subir\"\n }\n },\n \"download\": {\n \"formats\": {\n \"pdf\": {\n \"label\": \"PDF\",\n \"hint\": \"Para leer, imprimir o archivar\"\n },\n \"xlsx\": {\n \"label\": \"Excel\",\n \"hint\": \"Para filtrar y cruzar con otros datos\"\n },\n \"csv\": {\n \"label\": \"CSV\",\n \"hint\": \"Texto plano, para importar a otro sistema\"\n }\n }\n },\n \"downloads\": {\n \"title\": \"Descargas\",\n \"summaryDownloading_one\": \"Descargando {{count}} archivo…\",\n \"summaryDownloading_other\": \"Descargando {{count}} archivos…\",\n \"summaryCompleted_one\": \"{{count}} descarga lista\",\n \"summaryCompleted_other\": \"{{count}} descargas listas\",\n \"summaryFailed_one\": \"{{count}} descarga no se pudo completar\",\n \"summaryFailed_other\": \"{{count}} descargas no se pudieron completar\",\n \"collapse\": \"Minimizar\",\n \"expand\": \"Ver descargas\",\n \"close\": \"Cerrar\",\n \"cancel\": \"Cancelar descarga\",\n \"cancelOf\": \"Cancelar la descarga de {{name}}\",\n \"completedOf\": \"{{name}} descargado\",\n \"failedOf\": \"No se pudo descargar {{name}}\",\n \"canceledOf\": \"Se canceló la descarga de {{name}}\",\n \"preparing\": \"Preparando el archivo…\",\n \"progressOf\": \"{{loaded}} de {{total}}\",\n \"progressLoaded\": \"{{loaded}} descargados\",\n \"failed\": \"No se pudo descargar\",\n \"canceled\": \"Cancelada\"\n },\n \"charts\": {\n \"viewAsTable\": \"Ver como tabla\",\n \"legend\": \"Qué es cada serie\",\n \"viewAsChart\": \"Ver como gráfica\",\n \"less\": \"Menos\",\n \"more\": \"Más\",\n \"day\": \"Día\"\n }\n },\n \"layout\": {\n \"skipToContent\": \"Saltar al contenido\",\n \"barActions\": {\n \"more\": \"Más acciones\"\n },\n \"drawer\": {\n \"open\": \"Abrir el menú\",\n \"ariaLabel\": \"Menú principal\",\n \"expand\": \"Abrir el menú lateral\",\n \"collapse\": \"Encoger el menú lateral\",\n \"more\": \"Más\",\n \"showTabs\": \"Ver las pestañas\",\n \"editTabs\": \"Editar la barra\",\n \"editTabsHint\": \"Elija hasta {{count}} pantallas para la barra de abajo; las demás quedan en «Más».\",\n \"tabInBar\": \"{{label}} en la barra\",\n \"resetTabs\": \"Como venía\",\n \"doneEditing\": \"Listo\",\n \"scrollDown\": \"Ver más del menú\",\n \"scrollUp\": \"Ver lo de arriba del menú\"\n },\n \"account\": {\n \"open\": \"Abrir el menú de su cuenta\",\n \"myProfile\": \"Mi perfil\"\n },\n \"settings\": {\n \"open\": \"Ajustes\",\n \"language\": \"Idioma\",\n \"colorScheme\": \"Claro u oscuro\",\n \"light\": \"Claro\",\n \"dark\": \"Oscuro\",\n \"system\": \"Automático\"\n },\n \"fontSize\": {\n \"label\": \"Tamaño de letra\",\n \"normal\": \"Normal\",\n \"large\": \"Grande\",\n \"xLarge\": \"Muy grande\"\n },\n \"languageName\": {\n \"es\": \"Español\",\n \"en\": \"English\"\n },\n \"breadcrumbs\": \"Dónde está\",\n \"signOut\": \"Salir\",\n \"navigating\": \"Cargando la pantalla\"\n },\n \"auth\": {\n \"signIn\": {\n \"title\": \"Iniciar sesión\",\n \"subtitle\": \"Entre con su correo y su contraseña.\",\n \"email\": \"Correo electrónico\",\n \"password\": \"Contraseña\",\n \"remember\": \"Mantener la sesión abierta en este equipo\",\n \"submit\": \"Entrar\",\n \"forgot\": \"¿Olvidó su contraseña?\"\n },\n \"forgotPassword\": {\n \"title\": \"Recuperar su contraseña\",\n \"subtitle\": \"Escriba el correo con el que entra y le enviaremos un enlace para elegir una contraseña nueva.\",\n \"email\": \"Correo electrónico\",\n \"submit\": \"Enviar el enlace\",\n \"sentTitle\": \"Revise su correo\",\n \"sent\": \"Si {{email}} tiene una cuenta, le llegará un enlace en unos minutos. Si no lo ve, revise el correo no deseado.\",\n \"backToSignIn\": \"Regresar a iniciar sesión\"\n },\n \"changePassword\": {\n \"title\": \"Cambiar contraseña\",\n \"current\": \"Contraseña actual\",\n \"next\": \"Contraseña nueva\",\n \"confirm\": \"Repita la contraseña nueva\",\n \"submit\": \"Cambiar contraseña\",\n \"mismatch\": \"Las dos contraseñas nuevas no son iguales.\",\n \"sameAsCurrent\": \"La contraseña nueva debe ser distinta de la actual.\",\n \"notAccepted\": \"La contraseña nueva no cumple con lo que se pide abajo.\",\n \"done\": \"Su contraseña cambió. La próxima vez entre con la nueva.\"\n },\n \"passwordRules\": {\n \"title\": \"La contraseña nueva debe tener\",\n \"minLength\": \"Al menos {{count}} caracteres\",\n \"lowercase\": \"Una letra minúscula\",\n \"uppercase\": \"Una letra mayúscula\",\n \"number\": \"Un número\",\n \"symbol\": \"Un símbolo, por ejemplo ! ? # -\",\n \"met\": \"ya cumple\",\n \"missing\": \"falta\"\n }\n },\n \"access\": {\n \"permissions\": {\n \"countOf\": \"{{count}} de {{total}}\",\n \"allOf\": \"Todos los permisos de {{group}}\"\n }\n },\n \"metricCard\": {\n \"trend\": {\n \"up\": \"Subió\",\n \"down\": \"Bajó\",\n \"flat\": \"Sin cambio\"\n }\n },\n \"errorPage\": {\n \"goHome\": \"Ir al inicio\",\n \"retry\": \"Intentar de nuevo\",\n \"reload\": \"Recargar\",\n \"newVersion\": {\n \"title\": \"Hay una versión nueva\",\n \"text\": \"Se publicó una actualización mientras tenía la página abierta. Recargue para seguir donde estaba.\"\n },\n \"notFound\": {\n \"title\": \"Esta página no existe\",\n \"text\": \"La dirección no corresponde a ninguna pantalla. Puede que el enlace esté incompleto o que la página ya no exista.\"\n },\n \"forbidden\": {\n \"title\": \"No tiene permiso para ver esta pantalla\",\n \"text\": \"Su usuario no tiene acceso a esta información. Si considera que es un error, comuníquese con el administrador.\"\n },\n \"serverError\": {\n \"title\": \"Algo falló de nuestro lado\",\n \"text\": \"No pudimos mostrar esta pantalla. Inténtelo de nuevo en un momento; si el problema continúa, comuníquese con soporte.\"\n }\n },\n \"problems\": {\n \"offline\": {\n \"title\": \"Sin conexión\",\n \"detail\": \"No pudimos comunicarnos con el servidor. Revise su conexión e inténtelo de nuevo.\"\n },\n \"unauthenticated\": {\n \"title\": \"Necesita iniciar sesión\",\n \"detail\": \"Su sesión no es válida o ya terminó. Inicie sesión de nuevo para continuar.\"\n },\n \"forbidden\": {\n \"title\": \"No tiene permiso para realizar esta acción\",\n \"detail\": \"Su usuario no tiene acceso a esta información u operación. Si considera que es un error, comuníquese con el administrador.\"\n },\n \"notFound\": {\n \"title\": \"No encontramos lo que busca\",\n \"detail\": \"La dirección o el registro que solicitó no existe o ya no está disponible.\"\n },\n \"conflict\": {\n \"title\": \"No se puede realizar en este momento\",\n \"detail\": \"El registro cambió o no está en el estado que se necesita. Actualice la pantalla e inténtelo de nuevo.\"\n },\n \"payloadTooLarge\": {\n \"title\": \"Lo que envió es demasiado grande\",\n \"detail\": \"El archivo o los datos superan el tamaño máximo permitido.\"\n },\n \"csrfTokenMismatch\": {\n \"title\": \"La página necesita actualizarse\",\n \"detail\": \"Pasó demasiado tiempo o la página quedó desactualizada. Recárguela e inténtelo de nuevo.\"\n },\n \"validation\": {\n \"title\": \"Los datos enviados no son válidos\",\n \"detail\": \"Revise los campos marcados e inténtelo de nuevo.\"\n },\n \"tooManyRequests\": {\n \"title\": \"Demasiados intentos seguidos\",\n \"detail\": \"Hizo muchas solicitudes en poco tiempo. Espere un momento e inténtelo de nuevo.\"\n },\n \"serverError\": {\n \"title\": \"No pudimos completar su solicitud\",\n \"detail\": \"Ocurrió un problema en el servidor. Inténtelo en un momento; si el problema continúa, comuníquese con soporte.\"\n },\n \"serviceUnavailable\": {\n \"title\": \"El servicio no está disponible\",\n \"detail\": \"El servidor no está respondiendo en este momento. Inténtelo más tarde.\"\n },\n \"generic\": {\n \"title\": \"No pudimos completar su solicitud\",\n \"detail\": \"Ocurrió un problema con su solicitud. Si continúa, comuníquese con soporte.\"\n },\n \"gone\": {\n \"title\": \"Esto ya no está disponible\",\n \"detail\": \"El enlace o el registro venció o ya se usó.\"\n }\n },\n \"richText\": {\n \"toolbar\": {\n \"label\": \"Formato del texto\",\n \"textStyle\": \"Estilo del texto\",\n \"paragraph\": \"Texto\",\n \"heading2\": \"Título\",\n \"heading3\": \"Subtítulo\",\n \"bold\": \"Negrita\",\n \"italic\": \"Cursiva\",\n \"underline\": \"Subrayado\",\n \"strike\": \"Tachado\",\n \"bulletList\": \"Lista con viñetas\",\n \"orderedList\": \"Lista numerada\",\n \"blockquote\": \"Cita\",\n \"codeBlock\": \"Código\",\n \"link\": \"Liga\",\n \"align\": {\n \"left\": \"Alinear a la izquierda\",\n \"center\": \"Centrar\",\n \"right\": \"Alinear a la derecha\"\n },\n \"clear\": \"Quitar el formato\",\n \"undo\": \"Deshacer\",\n \"redo\": \"Rehacer\"\n },\n \"linkDialog\": {\n \"url\": \"Dirección de la liga\",\n \"save\": \"Poner la liga\",\n \"remove\": \"Quitar la liga\",\n \"invalid\": \"Escriba una dirección web (https://…), un correo (mailto:…) o un teléfono (tel:…).\"\n },\n \"counter\": \"{{count}} de {{max}} caracteres\"\n },\n \"mexico\": {\n \"efirma\": {\n \"certificate\": \"Certificado (.cer)\",\n \"certificateHelp\": \"El archivo .cer de la e.firma: se lee aquí, sin subirlo.\",\n \"privateKey\": \"Llave privada (.key)\",\n \"privateKeyHelp\": \"El archivo .key que va con ese certificado.\",\n \"password\": \"Contraseña de la llave\",\n \"passwordHelp\": \"La de la e.firma; no se guarda en este navegador.\",\n \"notCertificate\": \"El archivo no es un certificado: elija el .cer de la e.firma.\",\n \"otherRfc\": \"El certificado es del RFC {{rfc}}, no del {{expected}}.\",\n \"rfc\": \"RFC\",\n \"curp\": \"CURP\",\n \"representative\": \"Representante legal\",\n \"certificateNumber\": \"Número de certificado\",\n \"validity\": \"Vigencia\",\n \"validityRange\": \"Del {{from}} al {{to}}\",\n \"branch\": \"Sucursal\",\n \"verify\": \"Revisar la e.firma\",\n \"verified\": \"La llave abre con esa contraseña y es de este certificado.\",\n \"verifyFailed\": \"No se pudo revisar la e.firma. Intente de nuevo.\",\n \"problems\": {\n \"notKey\": \"El archivo .key no es una llave privada: elija el .key de la e.firma.\",\n \"wrongPassword\": \"La contraseña no abre la llave.\",\n \"otherCertificate\": \"La llave abre, pero no es la de este certificado.\"\n },\n \"status\": {\n \"valid\": \"Vigente\",\n \"expired\": \"Vencida\",\n \"notYetValid\": \"Todavía no vale\"\n }\n },\n \"cfdi\": {\n \"withoutFolio\": \"Sin serie ni folio\",\n \"version\": \"CFDI {{version}}\",\n \"issuer\": \"Emite\",\n \"receiver\": \"Recibe\",\n \"issuedAt\": \"Fecha\",\n \"uuid\": \"Folio fiscal\",\n \"copyUuid\": \"Copiar el folio fiscal\",\n \"subtotal\": \"Subtotal\",\n \"taxes\": \"Impuestos\",\n \"total\": \"Total\",\n \"concepts\": \"Conceptos\",\n \"description\": \"Descripción\",\n \"quantity\": \"Cantidad\",\n \"amount\": \"Importe\",\n \"otherReceiver\": \"La factura es para el RFC {{rfc}}, no para el {{expected}}.\",\n \"notStamped\": \"No trae el timbre del SAT: todavía no es una factura válida.\",\n \"voucherTypes\": {\n \"I\": \"Ingreso\",\n \"E\": \"Egreso\",\n \"T\": \"Traslado\",\n \"N\": \"Nómina\",\n \"P\": \"Pago\"\n }\n }\n },\n \"validation\": {\n \"rfc\": \"El RFC no está bien escrito: revise sus letras, la fecha y la homoclave.\",\n \"curp\": \"La CURP no está bien escrita: revise sus 18 caracteres.\",\n \"clabe\": \"La CLABE no es válida: revise sus 18 dígitos.\",\n \"sameAs\": \"Debe ser igual a {{other}}.\",\n \"sameAsUnnamed\": \"No coincide.\",\n \"percent\": \"Escriba un porcentaje entre {{min}} y {{max}}.\",\n \"postalCode\": \"El código postal lleva 5 dígitos.\",\n \"listDuplicate\": \"Ya está en el renglón {{row}}.\",\n \"listOrderBetween\": \"Debe ir entre {{previous}} (renglón {{previousRow}}) y {{next}} (renglón {{nextRow}}).\",\n \"listOrderAbovePrevious\": \"Debe ser mayor que {{previous}} (renglón {{previousRow}}).\",\n \"listOrderBelowPrevious\": \"Debe ser menor que {{previous}} (renglón {{previousRow}}).\",\n \"listOrderBelowNext\": \"Debe ser menor que {{next}} (renglón {{nextRow}}).\",\n \"listOrderAboveNext\": \"Debe ser mayor que {{next}} (renglón {{nextRow}}).\",\n \"listTotalMax\": \"Entre todos suman {{total}} y el máximo es {{max}}.\",\n \"minutesFromNow_one\": \"Elija una hora al menos {{count}} minuto después de ahora.\",\n \"minutesFromNow_other\": \"Elija una hora al menos {{count}} minutos después de ahora.\",\n \"minutesAfter_one\": \"Debe quedar al menos {{count}} minuto después del inicio.\",\n \"minutesAfter_other\": \"Debe quedar al menos {{count}} minutos después del inicio.\",\n \"default\": \"El valor no es válido.\",\n \"required\": \"Este campo es obligatorio.\",\n \"notType\": \"El valor no tiene el formato esperado.\",\n \"oneOf\": \"Elija una de las opciones.\",\n \"notOneOf\": \"Ese valor no está permitido.\",\n \"email\": \"Escriba un correo válido, por ejemplo nombre@empresa.com.\",\n \"url\": \"Escriba una dirección web válida.\",\n \"uuid\": \"El identificador no es válido.\",\n \"stringLength_one\": \"Escriba exactamente {{count}} carácter.\",\n \"stringLength_other\": \"Escriba exactamente {{count}} caracteres.\",\n \"stringMin_one\": \"Escriba al menos {{count}} carácter.\",\n \"stringMin_other\": \"Escriba al menos {{count}} caracteres.\",\n \"stringMax_one\": \"Escriba como máximo {{count}} carácter.\",\n \"stringMax_other\": \"Escriba como máximo {{count}} caracteres.\",\n \"matches\": \"El formato no es válido.\",\n \"trim\": \"Quite los espacios al inicio y al final.\",\n \"lowercase\": \"Escríbalo en minúsculas.\",\n \"uppercase\": \"Escríbalo en mayúsculas.\",\n \"numberMin\": \"No puede ser menor que {{min}}.\",\n \"numberMax\": \"No puede ser mayor que {{max}}.\",\n \"lessThan\": \"Debe ser menor que {{less}}.\",\n \"moreThan\": \"Debe ser mayor que {{more}}.\",\n \"positive\": \"Debe ser un número positivo.\",\n \"negative\": \"Debe ser un número negativo.\",\n \"integer\": \"Debe ser un número entero.\",\n \"dateMin\": \"La fecha no puede ser anterior a {{min}}.\",\n \"dateMax\": \"La fecha no puede ser posterior a {{max}}.\",\n \"arrayMin_one\": \"Elija al menos {{count}} opción.\",\n \"arrayMin_other\": \"Elija al menos {{count}} opciones.\",\n \"arrayMax_one\": \"Elija como máximo {{count}} opción.\",\n \"arrayMax_other\": \"Elija como máximo {{count}} opciones.\",\n \"arrayLength_one\": \"Elija exactamente {{count}} opción.\",\n \"arrayLength_other\": \"Elija exactamente {{count}} opciones.\"\n },\n \"dictionaries\": {\n \"unknown\": {\n \"label\": \"Sin estatus\",\n \"tooltip\": \"\"\n }\n },\n \"security\": {\n \"passkeys\": {\n \"cancelled\": \"No se usó ninguna llave de acceso. Puede intentarlo de nuevo.\",\n \"alreadyRegistered\": \"Esa llave de acceso ya está registrada en su cuenta.\",\n \"wrongDomain\": \"Las llaves de acceso solo funcionan en la dirección oficial del sistema.\",\n \"failed\": \"El navegador no pudo usar la llave de acceso.\",\n \"unsupported\": \"Este navegador no admite llaves de acceso.\"\n },\n \"twoStep\": {\n \"title\": \"Verificación en dos pasos\",\n \"description\": \"Además de su contraseña, un segundo paso al entrar. Si alguien obtiene su contraseña, no podrá entrar sin él.\",\n \"active\": \"Activa\",\n \"activeSince\": \"Desde {{date}}\",\n \"inactive\": \"Sin activar\",\n \"inactiveTooltip\": \"Su cuenta solo está protegida por la contraseña.\",\n \"passkeysTitle\": \"Llaves de acceso\",\n \"add\": \"Agregar\",\n \"passkeysEmpty\": \"La forma más segura: entra con la huella, el rostro o el PIN de su equipo.\",\n \"passkeyUsed\": \"Usada por última vez {{date}}\",\n \"passkeyCreated\": \"Creada {{date}}\",\n \"removePasskey\": \"Quitar {{name}}\",\n \"removePasskeyTooltip\": \"Quitar esta llave\",\n \"appTitle\": \"App autenticadora\",\n \"appActiveSince\": \"Activa desde {{date}}\",\n \"appDescription\": \"Un código de 6 dígitos que cambia cada 30 segundos.\",\n \"activate\": \"Activar\",\n \"deactivate\": \"Desactivar\",\n \"codesTitle\": \"Códigos de recuperación\",\n \"codesRemaining_one\": \"Le queda {{count}} código sin usar.\",\n \"codesRemaining_other\": \"Le quedan {{count}} códigos sin usar.\",\n \"codesNone\": \"Ya no le quedan códigos: genere otros.\",\n \"regenerate\": \"Generar nuevos\",\n \"passwordLabel\": \"Su contraseña actual\",\n \"passwordRequired\": \"Escriba su contraseña.\",\n \"disableTitle\": \"¿Desactivar la app autenticadora?\",\n \"disableText\": \"Si no tiene una llave de acceso, su cuenta quedará protegida solo por la contraseña y sus códigos de recuperación dejarán de servir.\",\n \"removeTitle\": \"¿Quitar «{{name}}»?\",\n \"removeText\": \"Ya no podrá entrar con esta llave. Bórrela también de su equipo o de su gestor de contraseñas.\",\n \"remove\": \"Quitar\",\n \"regenerateTitle\": \"¿Generar códigos nuevos?\",\n \"regenerateText\": \"Los códigos que tenga ahora dejarán de servir.\",\n \"generate\": \"Generar\",\n \"passkeyDialogTitle\": \"Agregar una llave de acceso\",\n \"passkeyDialogText\": \"Una llave de acceso usa la huella, el rostro o el PIN de este equipo o de su teléfono. No se puede robar con una página falsa y le permite entrar sin escribir su contraseña.\",\n \"passkeyName\": \"Nombre para reconocerla (opcional)\",\n \"passkeyNamePlaceholder\": \"Por ejemplo: MacBook del trabajo\",\n \"createPasskey\": \"Crear llave\",\n \"totpDialogTitle\": \"Activar la app autenticadora\",\n \"totpStep1\": \"1. Abra su app (Google Authenticator, Microsoft Authenticator, 1Password…) y escanee este código.\",\n \"totpQrAlt\": \"Código QR para la app autenticadora\",\n \"totpCantScan\": \"¿No puede escanear? Escriba esta clave en su app:\",\n \"totpStep2\": \"2. Escriba el código de 6 dígitos que muestra la app.\",\n \"codeLabel\": \"Código\",\n \"codeRequired\": \"Escriba el código de 6 dígitos.\",\n \"codeFormat\": \"Son 6 dígitos, como aparecen en su app.\",\n \"passkeyAdded\": \"Llave de acceso agregada\",\n \"passkeyRemoved\": \"Llave de acceso quitada\",\n \"appActivated\": \"App autenticadora activada\",\n \"appDeactivated\": \"App autenticadora desactivada\"\n },\n \"recoveryCodes\": {\n \"title\": \"Guarde sus códigos de recuperación\",\n \"warning\": \"Es la única vez que los verá. Con uno de ellos podrá entrar si pierde su teléfono o su llave de acceso; cada uno sirve una sola vez.\",\n \"copyAll\": \"Copiar todos\",\n \"download\": \"Descargar .txt\",\n \"saved\": \"Ya los guardé en un lugar seguro\",\n \"done\": \"Listo\",\n \"fileTitle\": \"{{appName}} · códigos de recuperación\",\n \"fileAccount\": \"Cuenta: {{account}}\",\n \"fileGenerated\": \"Generados: {{date}}\",\n \"fileHowTo\": \"Cada código sirve UNA sola vez para entrar si no tiene su teléfono o su llave de acceso.\",\n \"fileKeepSafe\": \"Guárdelos en un lugar seguro (un gestor de contraseñas o impresos bajo llave).\",\n \"fileName\": \"codigos-recuperacion-{{date}}.txt\"\n },\n \"secondStep\": {\n \"intro\": \"Su cuenta tiene verificación en dos pasos. Confirme que es usted para terminar de entrar.\",\n \"usePasskey\": \"Usar mi llave de acceso\",\n \"or\": \"o\",\n \"appCodeLabel\": \"Código de su app autenticadora\",\n \"appCodeHelp\": \"Ábrala (Google Authenticator, Microsoft Authenticator, 1Password…) y escriba los 6 dígitos.\",\n \"recoveryCodeLabel\": \"Código de recuperación\",\n \"recoveryCodeHelp\": \"Uno de los códigos que guardó al activar la verificación. Cada uno sirve una sola vez.\",\n \"recoveryCodeRequired\": \"Escriba uno de sus códigos de recuperación.\",\n \"recoveryCodeFormat\": \"Tienen la forma ABCDE-FGHJK.\",\n \"confirm\": \"Confirmar\",\n \"useRecovery\": \"No tengo mi teléfono: usar un código de recuperación\",\n \"useApp\": \"Usar el código de mi app autenticadora\",\n \"otherAccount\": \"Entrar con otra cuenta\",\n \"remainingAttempts_one\": \"Le queda {{count}} intento.\",\n \"remainingAttempts_other\": \"Le quedan {{count}} intentos.\"\n },\n \"sessions\": {\n \"title\": \"Mis sesiones\",\n \"description\": \"Dónde tiene la cuenta abierta. Si no reconoce un equipo, cierre la sesión en los demás y cambie su contraseña.\",\n \"current\": \"Este equipo\",\n \"device\": \"{{browser}} en {{platform}}\",\n \"otherBrowser\": \"Otro navegador\",\n \"otherPlatform\": \"otro sistema\",\n \"since\": \"Desde {{date}}\",\n \"network\": \"red {{network}}\",\n \"onlyThis\": \"Solo tiene la sesión abierta en este equipo.\",\n \"closeOthers\": \"Cerrar la sesión en los demás equipos\",\n \"confirmTitle\": \"¿Cerrar la sesión en los demás equipos?\",\n \"confirmText_one\": \"Se cerrará en {{count}} equipo. Este sigue dentro, y en el otro tendrá que volver a entrar con su contraseña.\",\n \"confirmText_other\": \"Se cerrará en {{count}} equipos. Este sigue dentro, y en los demás tendrá que volver a entrar con su contraseña.\",\n \"confirm\": \"Cerrar las demás\",\n \"closed_one\": \"Se cerró la sesión en {{count}} equipo\",\n \"closed_other\": \"Se cerró la sesión en {{count}} equipos\",\n \"noneClosed\": \"No había sesiones abiertas en otros equipos\"\n },\n \"activity\": {\n \"title\": \"Actividad de la cuenta\",\n \"description\": \"Lo último que pasó con su cuenta. Si ve algo que no fue usted, cambie su contraseña y cierre la sesión en los demás equipos.\",\n \"empty\": \"Todavía no hay actividad.\",\n \"from\": \"{{device}} · red {{network}}\",\n \"kinds\": {\n \"signedIn\": \"Entró\",\n \"signInFailed\": \"Intento de entrar con contraseña equivocada\",\n \"signedOut\": \"Salió\",\n \"passwordChanged\": \"Cambió su contraseña\",\n \"twoStepEnabled\": \"Activó la verificación en dos pasos\",\n \"twoStepDisabled\": \"Desactivó la verificación en dos pasos\",\n \"passkeyAdded\": \"Agregó una llave de acceso\",\n \"passkeyRemoved\": \"Quitó una llave de acceso\",\n \"recoveryCodesGenerated\": \"Generó códigos de recuperación nuevos\",\n \"recoveryCodeUsed\": \"Entró con un código de recuperación\",\n \"sessionsClosed\": \"Cerró la sesión en los demás equipos\"\n }\n }\n },\n \"calendar\": {\n \"details\": {\n \"when\": \"Cuándo\",\n \"timeRange\": \"{{date}}, de {{start}} a {{end}}\",\n \"allDay\": \"{{date}}, todo el día\",\n \"location\": \"Dónde\",\n \"meeting\": \"Reunión en línea\",\n \"join\": \"Unirse\",\n \"attendees\": \"Invitados\",\n \"attendeesCount_one\": \"{{count}} invitado\",\n \"attendeesCount_other\": \"{{count}} invitados\",\n \"response\": {\"accepted\": \"Va\", \"declined\": \"No va\", \"pending\": \"Sin responder\"},\n \"reminder\": \"Recordatorio\",\n \"reminderUnit\": {\n \"atStart\": \"Al empezar\",\n \"minutes_one\": \"{{count}} minuto antes\",\n \"minutes_other\": \"{{count}} minutos antes\",\n \"hours_one\": \"{{count}} hora antes\",\n \"hours_other\": \"{{count}} horas antes\",\n \"days_one\": \"{{count}} día antes\",\n \"days_other\": \"{{count}} días antes\"\n },\n \"notes\": \"Notas\"\n },\n \"previous\": \"Anterior\",\n \"next\": \"Siguiente\",\n \"today\": \"Hoy\",\n \"view\": \"Vista del calendario\",\n \"views\": {\n \"month\": \"Mes\",\n \"week\": \"Semana\",\n \"day\": \"Día\",\n \"list\": \"Lista\"\n }\n },\n \"kanban\": {\n \"dueCompleted\": \"Era para el {{date}}\",\n \"complete\": \"Terminar «{{title}}»\",\n \"reopen\": \"Reabrir «{{title}}»\",\n \"completed\": \"Terminada\",\n \"collapseColumn\": \"Encoger «{{column}}»\",\n \"expandColumn\": \"Abrir «{{column}}»\",\n \"addCard\": \"Agregar una tarjeta en {{column}}\",\n \"addCardPlaceholder\": \"Título de la tarjeta (Enter para agregar)\",\n \"cardActions\": \"Acciones de «{{title}}»\",\n \"columnActions\": \"Acciones de {{column}}\",\n \"dueOverdue\": \"Venció el {{date}}\",\n \"dueToday\": \"Vence hoy\",\n \"dueOn\": \"Vence el {{date}}\",\n \"checklist\": \"{{done}} de {{total}} pendientes hechos\",\n \"comments_one\": \"{{count}} comentario\",\n \"comments_other\": \"{{count}} comentarios\",\n \"attachments_one\": \"{{count}} adjunto\",\n \"attachments_other\": \"{{count}} adjuntos\",\n \"assignees\": \"Responsables: {{names}}\",\n \"instructions\": \"Para mover una tarjeta con el teclado: espacio para levantarla, flechas para moverla y espacio para soltarla. Escape la deja donde estaba.\",\n \"lifted\": \"Levantó «{{title}}», en {{column}}, posición {{position}}.\",\n \"moving\": \"Va a {{column}}, posición {{position}}.\",\n \"dropped\": \"Soltó «{{title}}» en {{column}}, posición {{position}}.\",\n \"cancelled\": \"«{{title}}» se quedó donde estaba.\",\n \"overLimit\": \"Pasó el tope de {{limit}} tarjetas.\",\n \"emptyFiltered\": \"Ninguna tarjeta de aquí coincide con la búsqueda.\",\n \"empty\": \"Sin tarjetas. Arrastre una aquí.\"\n },\n \"inbox\": {\n \"labels\": \"Etiquetas\",\n \"select\": \"Elegir «{{subject}}»\",\n \"messageActions\": \"Acciones de «{{subject}}»\",\n \"threadCount_one\": \"{{count}} mensaje en la conversación\",\n \"threadCount_other\": \"{{count}} mensajes en la conversación\",\n \"cc\": \"Con copia: {{cc}}\",\n \"openAttachment\": \"Abrir {{name}}\",\n \"expandMessage\": \"Abrir el mensaje de {{name}} ({{date}})\",\n \"listLabel\": \"Mensajes\",\n \"folders\": \"Carpetas\",\n \"empty\": \"No hay mensajes aquí.\",\n \"noMessageSelected\": \"Elija un mensaje para leerlo.\",\n \"star\": \"Destacar\",\n \"unstar\": \"Quitar de destacados\",\n \"unread\": \"Sin leer\",\n \"attachments\": \"Archivos adjuntos\",\n \"to\": \"Para: {{to}}\",\n \"back\": \"Regresar\",\n \"unreadCount_one\": \"{{count}} sin leer\",\n \"unreadCount_other\": \"{{count}} sin leer\"\n },\n \"account\": {\n \"reset\": {\n \"title\": \"Elegir una contraseña nueva\",\n \"subtitle\": \"Llegó aquí desde el enlace del correo. Elija la contraseña con la que va a entrar.\",\n \"done\": \"Ya puede entrar con su contraseña nueva.\",\n \"goToSignIn\": \"Ir a iniciar sesión\",\n \"missingToken\": \"Este enlace no sirve: le falta su clave. Pida uno nuevo desde «¿Olvidó su contraseña?».\",\n \"askAgain\": \"Pedir otro enlace\"\n },\n \"profile\": {\n \"tabs\": {\n \"label\": \"Partes de su perfil\",\n \"data\": \"Sus datos\",\n \"security\": \"Seguridad\",\n \"preferences\": \"Preferencias\"\n },\n \"data\": {\n \"title\": \"Sus datos\",\n \"text\": \"Así le ven las demás personas en la app.\",\n \"name\": \"Nombre\",\n \"email\": \"Correo\",\n \"emailHelp\": \"Es el correo con el que entra; para cambiarlo, pídalo a quien administra la app.\",\n \"phone\": \"Teléfono (opcional)\",\n \"phoneInvalid\": \"Escriba solo dígitos (de 7 a 15), con + al inicio si es de otro país.\",\n \"save\": \"Guardar\",\n \"saved\": \"Se guardaron sus datos.\"\n },\n \"password\": {\n \"title\": \"Contraseña\",\n \"text\": \"Use una contraseña que no use en otros sitios. Al cambiarla, la próxima vez entra con la nueva.\"\n },\n \"preferences\": {\n \"title\": \"Apariencia\",\n \"text\": \"Cómo se ve la app para usted: el tamaño de letra, el idioma y claro u oscuro se recuerdan en este navegador.\"\n }\n },\n \"demo\": {\n \"totpCode\": \"Usar el código de ejemplo\",\n \"totpCodeHelp\": \"Solo en la demostración: llena el código que enseñaría su app ahorita, por si no la tiene a la mano.\",\n \"passkeyNote\": \"En la demostración la llave se guarda de verdad en su llavero (iCloud, Google o su gestor de contraseñas), pero esta página la olvida al recargar. Cuando termine de probar, bórrela también de su llavero.\",\n \"securityNote\": \"Servidor de demostración: la verificación funciona con su teléfono de verdad (escanee el QR o cree una llave con su huella), pero vive en la memoria de la pestaña: al recargar se apaga. Salga y vuelva a entrar para ver el segundo paso.\",\n \"server\": {\n \"wrongCredentialsTitle\": \"No pudo entrar\",\n \"wrongCredentials\": \"En la demostración se entra con {{email}} y cualquier contraseña.\",\n \"noSessionTitle\": \"Su sesión terminó\",\n \"noSession\": \"Vuelva a entrar.\",\n \"validationTitle\": \"Revise los datos\",\n \"validationDetail\": \"Hay campos por corregir.\",\n \"passwordRequired\": \"Escriba su contraseña para confirmar.\",\n \"nameRequired\": \"Escriba su nombre.\",\n \"wrongCodeTitle\": \"El código no coincide\",\n \"wrongCode\": \"Revise que sea el código que enseña su app ahorita.\",\n \"expiredTitle\": \"Se acabó el tiempo\",\n \"expired\": \"Pasaron más de 5 minutos: vuelva a escribir su contraseña.\",\n \"lockedTitle\": \"Demasiados intentos\",\n \"locked\": \"Por seguridad hay que empezar de nuevo: vuelva a escribir su contraseña.\",\n \"defaultPasskeyName\": \"Llave {{number}}\",\n \"profileSaved\": \"Se guardaron sus datos.\"\n }\n }\n }\n});\n"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { jsx } from "react/jsx-runtime";
3
3
  import { useFormikField } from "../forms/useFormikField.js";
4
4
  import RichTextEditor from "./RichTextEditor.js";
5
5
  function FormRichTextField({ name, ...editorProps }) {
6
- const fieldProps = useFormikField(name);
6
+ const fieldProps = useFormikField(name, editorProps);
7
7
  return /* @__PURE__ */ jsx(RichTextEditor, { ...editorProps, ...fieldProps });
8
8
  }
9
9
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"FormRichTextField.js","sources":["../../src/richText/FormRichTextField.jsx"],"sourcesContent":["// Campo de texto con formato de formik: RichTextEditor conectado a su campo. Al formulario llega el HTML ('' si no hay nada\n// escrito).\n//\n// Con react-hook-form no hay uno listo (esta puerta no pide react-hook-form): RichTextEditor va dentro de un Controller.\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useFormikField} from '@/forms/useFormikField.js';\nimport RichTextEditor from '@/richText/RichTextEditor.jsx';\n\n/**\n * @param {{name: string} & Omit<Parameters<typeof import('@/richText/RichTextEditor.jsx').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las de\n * RichTextEditor (features, maxLength, placeholder…), sin value / onChange / onBlur / error\n */\nexport default function FormRichTextField({name, ...editorProps}) {\n const fieldProps = useFormikField(name);\n return <RichTextEditor {...editorProps} {...fieldProps} />;\n}\n"],"names":[],"mappings":";;;;AAaA,SAAwB,kBAAkB,EAAC,MAAM,GAAG,eAAc;AAC9D,QAAM,aAAa,eAAe,IAAI;AACtC,SAAO,oBAAC,gBAAA,EAAgB,GAAG,aAAc,GAAG,WAAA,CAAY;AAC5D;"}
1
+ {"version":3,"file":"FormRichTextField.js","sources":["../../src/richText/FormRichTextField.jsx"],"sourcesContent":["// Campo de texto con formato de formik: RichTextEditor conectado a su campo. Al formulario llega el HTML ('' si no hay nada\n// escrito).\n//\n// Con react-hook-form no hay uno listo (esta puerta no pide react-hook-form): RichTextEditor va dentro de un Controller.\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useFormikField} from '@/forms/useFormikField.js';\nimport RichTextEditor from '@/richText/RichTextEditor.jsx';\n\n/**\n * @param {{name: string} & Omit<Parameters<typeof import('@/richText/RichTextEditor.jsx').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'> & Partial<Pick<Parameters<typeof import('@/richText/RichTextEditor.jsx').default>[0], 'onChange'|'onBlur'>>} props las de\n * RichTextEditor (features, maxLength, placeholder…), sin value ni error (su onChange y su onBlur corren después de los del formulario)\n */\nexport default function FormRichTextField({name, ...editorProps}) {\n const fieldProps = useFormikField(name, editorProps);\n return <RichTextEditor {...editorProps} {...fieldProps} />;\n}\n"],"names":[],"mappings":";;;;AAaA,SAAwB,kBAAkB,EAAC,MAAM,GAAG,eAAc;AAC9D,QAAM,aAAa,eAAe,MAAM,WAAW;AACnD,SAAO,oBAAC,gBAAA,EAAgB,GAAG,aAAc,GAAG,WAAA,CAAY;AAC5D;"}
@@ -38,6 +38,7 @@ function RichTextEditorContent(props) {
38
38
  onEditorReady,
39
39
  minHeight = DEFAULT_MIN_HEIGHT,
40
40
  disabled = false,
41
+ required = false,
41
42
  sx,
42
43
  messages,
43
44
  texts,
@@ -59,12 +60,12 @@ function RichTextEditorContent(props) {
59
60
  // OJO: sin esto, al pintar en el servidor (Next) el editor avisa que no hay documento todavía
60
61
  immediatelyRender: false,
61
62
  editorProps: {
62
- attributes: { id: contentId, role: "textbox", "aria-multiline": "true", "aria-labelledby": labelId, ...errorText && { "aria-invalid": "true" } }
63
+ attributes: { id: contentId, role: "textbox", "aria-multiline": "true", "aria-labelledby": labelId, ...required && { "aria-required": "true" }, ...errorText && { "aria-invalid": "true" } }
63
64
  },
64
65
  onUpdate: ({ editor: current }) => latest.current.onChange(normalizedHtmlOf(current.getHTML())),
65
66
  onBlur: () => latest.current.onBlur?.(),
66
67
  onCreate: ({ editor: current }) => latest.current.onEditorReady?.(current)
67
- }, [features.join(","), placeholder, maxLength, Boolean(errorText)]);
68
+ }, [features.join(","), placeholder, maxLength, Boolean(errorText), required]);
68
69
  useEffect(() => {
69
70
  if (editor && normalizedHtmlOf(editor.getHTML()) !== (value ?? "")) {
70
71
  editor.commands.setContent(value ?? "", { emitUpdate: false });
@@ -74,7 +75,7 @@ function RichTextEditorContent(props) {
74
75
  editor?.setEditable(!disabled);
75
76
  }, [editor, disabled]);
76
77
  const characters = useEditorState({ editor, selector: ({ editor: current }) => current?.storage.characterCount?.characters() ?? 0 });
77
- return /* @__PURE__ */ jsx(FieldFrame, { inputId: contentId, labelId, label, children: /* @__PURE__ */ jsxs("div", { children: [
78
+ return /* @__PURE__ */ jsx(FieldFrame, { inputId: contentId, labelId, label, required, children: /* @__PURE__ */ jsxs("div", { children: [
78
79
  /* @__PURE__ */ jsxs(EditorRoot, { variant: "outlined", ownSx: (theme) => ({
79
80
  borderRadius: 2,
80
81
  overflow: "hidden",
@@ -1 +1 @@
1
- {"version":3,"file":"RichTextEditor.js","sources":["../../src/richText/RichTextEditor.jsx"],"sourcesContent":["// El editor de texto con formato (Tiptap), con la etiqueta arriba como los demás campos del paquete: negrita, cursiva,\n// títulos, listas, cita, código, ligas seguras, alineación, deshacer y rehacer, y el contador de caracteres si hay tope.\n//\n// Viaja HTML ('<p>Hola <strong>mundo</strong></p>'); '' si no hay nada escrito (así required() funciona). Para ENSEÑAR lo\n// guardado va RichTextView, que solo deja pasar lo que el editor entiende: un <script> o un onclick pegado no llegan a la\n// página.\n//\n// Extensible sin tocar el paquete: features (qué botones trae; lo que no se pide tampoco entra al documento), extensions\n// (extensiones de Tiptap del proyecto: menciones, tablas…), toolbarActions (botones propios al final de la barra) y\n// onEditorReady (el editor de Tiptap, para lo que la barra no trae). Con formik: FormRichTextField; con react-hook-form, dentro\n// de un Controller.\n//\n// Se cambia desde el tema del proyecto, como las piezas de MUI: components.CalcitaRichTextEditor con defaultProps y\n// styleOverrides de sus partes: root, toolbar, content, footer.\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useEffect, useId, useRef} from 'react';\nimport {EditorContent, useEditor, useEditorState} from '@tiptap/react';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport Paper from '@mui/material/Paper';\nimport Stack from '@mui/material/Stack';\nimport Box from '@mui/material/Box';\n\nimport {useValidationText} from '@/forms/useValidationText.js';\nimport FieldFrame from '@/inputs/FieldFrame.jsx';\nimport {richTextContentSxOf} from '@/richText/richTextContentSx.js';\nimport {richTextExtensionsOf} from '@/richText/richTextExtensions.js';\nimport {DEFAULT_RICH_TEXT_FEATURES, normalizedHtmlOf} from '@/richText/richTextRules.js';\nimport RichTextToolbar from '@/richText/RichTextToolbar.jsx';\nimport {piecePart, usePieceProps, withPieceSlots} 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.CalcitaRichTextEditor)\nconst THEME_NAME = 'CalcitaRichTextEditor';\nconst EditorRoot = piecePart(THEME_NAME, 'Root', Paper);\nconst EditorToolbar = piecePart(THEME_NAME, 'Toolbar', Stack);\nconst EditorContentArea = piecePart(THEME_NAME, 'Content', Box);\nconst EditorFooter = piecePart(THEME_NAME, 'Footer', Stack);\n\nconst DEFAULT_MIN_HEIGHT = 160;\n\n/**\n * @param {object} props\n * @param {string} [props.name]\n * @param {import('react').ReactNode} props.label ya traducida\n * @param {string|null|undefined} props.value el HTML guardado ('' sin texto)\n * @param {(html: string) => void} props.onChange recibe el HTML ('' si se borra todo)\n * @param {() => void} [props.onBlur]\n * @param {string} [props.placeholder] ya traducido: lo que se ve con el editor vacío\n * @param {string|{key: string, values?: object}} [props.error]\n * @param {string} [props.helperText] ya traducida\n * @param {number} [props.maxLength] el tope de caracteres (con su contador abajo)\n * @param {string[]} [props.features] los botones de la barra (RICH_TEXT_FEATURE); por omisión todos\n * @param {Array<object>} [props.extensions] extensiones de Tiptap del proyecto\n * @param {import('react').ReactNode} [props.toolbarActions] botones propios al final de la barra\n * @param {(editor: import('@tiptap/react').Editor) => void} [props.onEditorReady] el editor de Tiptap, al estar listo\n * @param {number} [props.minHeight] el alto mínimo del texto en px; por omisión 160\n * @param {boolean} [props.disabled]\n * @param {object} [props.sx]\n * @param {Record<string, string|object>} [props.messages] el texto del error de este campo, por regla de validación\n * ({required: 'Escriba el RFC', matches: 'El RFC lleva 12 o 13 caracteres'}): gana al de Calcita y al de los textos\n * @param {object} [props.texts] los textos que cambian, con la forma de `richText` en los textos del paquete\n */\nfunction RichTextEditorContent(props) {\n const {\n name, label, value, onChange, onBlur, placeholder, error, helperText = ' ', maxLength, features = DEFAULT_RICH_TEXT_FEATURES, extensions,\n toolbarActions, onEditorReady, minHeight = DEFAULT_MIN_HEIGHT, disabled = false, sx, messages, texts,\n ...unknownProps\n } = usePieceProps(props, THEME_NAME);\n warnUnknownProps(THEME_NAME, unknownProps);\n const {t} = useToolkitTranslation('richText', texts);\n // el texto del error: el de la pantalla (messages), el del proyecto para este campo o el de Calcita\n const validationTextOf = useValidationText({name, label, messages});\n const generatedId = useId();\n const contentId = `${name ?? 'rich-text'}-${generatedId}`;\n const labelId = `${contentId}-label`;\n const errorText = validationTextOf(error);\n // lo último de afuera, sin rearmar el editor cada vez que la pantalla pinta otra función\n const latest = useRef({onChange, onBlur, onEditorReady});\n latest.current = {onChange, onBlur, onEditorReady};\n\n const editor = useEditor({\n extensions: richTextExtensionsOf({features, placeholder, maxLength, extensions}),\n content: value ?? '',\n editable: !disabled,\n // OJO: sin esto, al pintar en el servidor (Next) el editor avisa que no hay documento todavía\n immediatelyRender: false,\n editorProps: {\n attributes: {id: contentId, role: 'textbox', 'aria-multiline': 'true', 'aria-labelledby': labelId, ...(errorText && {'aria-invalid': 'true'})},\n },\n onUpdate: ({editor: current}) => latest.current.onChange(normalizedHtmlOf(current.getHTML())),\n onBlur: () => latest.current.onBlur?.(),\n onCreate: ({editor: current}) => latest.current.onEditorReady?.(current),\n }, [features.join(','), placeholder, maxLength, Boolean(errorText)]);\n\n // lo que llega de afuera (el formulario se reinició, llegó del servidor) entra sin avisar otro cambio\n useEffect(() => {\n if (editor && normalizedHtmlOf(editor.getHTML()) !== (value ?? '')) {\n editor.commands.setContent(value ?? '', {emitUpdate: false});\n }\n }, [editor, value]);\n useEffect(() => {\n editor?.setEditable(!disabled);\n }, [editor, disabled]);\n\n const characters = useEditorState({editor, selector: ({editor: current}) => current?.storage.characterCount?.characters() ?? 0});\n\n return (\n <FieldFrame inputId={contentId} labelId={labelId} label={label}>\n <div>\n <EditorRoot variant=\"outlined\" ownSx={(theme) => ({\n borderRadius: 2, overflow: 'hidden', opacity: disabled ? 0.6 : 1,\n borderColor: errorText ? 'error.main' : 'divider',\n '&:focus-within': {borderColor: errorText ? 'error.main' : 'primary.main', boxShadow: `0 0 0 1px ${(theme.vars ?? theme).palette[errorText ? 'error' : 'primary'].main}`},\n })} sx={sx}>\n <EditorToolbar role=\"toolbar\" aria-label={t('toolbar.label')} aria-controls={contentId} direction=\"row\"\n ownSx={{alignItems: 'center', flexWrap: 'wrap', gap: 0.25, px: 0.5, py: 0.5, borderBottom: 1, borderColor: 'divider'}}>\n <RichTextToolbar editor={editor} features={features} disabled={disabled} t={t} actions={toolbarActions} />\n </EditorToolbar>\n <EditorContentArea ownSx={(theme) => {\n const content = richTextContentSxOf(theme);\n return {...content, px: 2, py: 1.5, cursor: 'text', '& .tiptap': {...content['& .tiptap'], minHeight}};\n }} onClick={() => editor?.commands.focus()}>\n <EditorContent editor={editor} />\n </EditorContentArea>\n </EditorRoot>\n <EditorFooter direction=\"row\" ownSx={{justifyContent: 'space-between', gap: 2}}>\n <FormHelperText error={Boolean(errorText)}>{errorText ?? helperText}</FormHelperText>\n {maxLength && (\n <FormHelperText sx={{fontVariantNumeric: 'tabular-nums', whiteSpace: 'nowrap'}}>\n {t('counter', {count: characters, max: maxLength})}\n </FormHelperText>\n )}\n </EditorFooter>\n </div>\n </FieldFrame>\n );\n}\n\n// lo que se exporta: la pieza con slots y slotProps para cambiar sus partes (themePieces.js)\nconst RichTextEditor = withPieceSlots(RichTextEditorContent, THEME_NAME);\nexport default RichTextEditor;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RichTextEditor.js","sources":["../../src/richText/RichTextEditor.jsx"],"sourcesContent":["// El editor de texto con formato (Tiptap), con la etiqueta arriba como los demás campos del paquete: negrita, cursiva,\n// títulos, listas, cita, código, ligas seguras, alineación, deshacer y rehacer, y el contador de caracteres si hay tope.\n//\n// Viaja HTML ('<p>Hola <strong>mundo</strong></p>'); '' si no hay nada escrito (así required() funciona). Para ENSEÑAR lo\n// guardado va RichTextView, que solo deja pasar lo que el editor entiende: un <script> o un onclick pegado no llegan a la\n// página.\n//\n// Extensible sin tocar el paquete: features (qué botones trae; lo que no se pide tampoco entra al documento), extensions\n// (extensiones de Tiptap del proyecto: menciones, tablas…), toolbarActions (botones propios al final de la barra) y\n// onEditorReady (el editor de Tiptap, para lo que la barra no trae). Con formik: FormRichTextField; con react-hook-form, dentro\n// de un Controller.\n//\n// Se cambia desde el tema del proyecto, como las piezas de MUI: components.CalcitaRichTextEditor con defaultProps y\n// styleOverrides de sus partes: root, toolbar, content, footer.\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useEffect, useId, useRef} from 'react';\nimport {EditorContent, useEditor, useEditorState} from '@tiptap/react';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport Paper from '@mui/material/Paper';\nimport Stack from '@mui/material/Stack';\nimport Box from '@mui/material/Box';\n\nimport {useValidationText} from '@/forms/useValidationText.js';\nimport FieldFrame from '@/inputs/FieldFrame.jsx';\nimport {richTextContentSxOf} from '@/richText/richTextContentSx.js';\nimport {richTextExtensionsOf} from '@/richText/richTextExtensions.js';\nimport {DEFAULT_RICH_TEXT_FEATURES, normalizedHtmlOf} from '@/richText/richTextRules.js';\nimport RichTextToolbar from '@/richText/RichTextToolbar.jsx';\nimport {piecePart, usePieceProps, withPieceSlots} 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.CalcitaRichTextEditor)\nconst THEME_NAME = 'CalcitaRichTextEditor';\nconst EditorRoot = piecePart(THEME_NAME, 'Root', Paper);\nconst EditorToolbar = piecePart(THEME_NAME, 'Toolbar', Stack);\nconst EditorContentArea = piecePart(THEME_NAME, 'Content', Box);\nconst EditorFooter = piecePart(THEME_NAME, 'Footer', Stack);\n\nconst DEFAULT_MIN_HEIGHT = 160;\n\n/**\n * @param {object} props\n * @param {string} [props.name]\n * @param {import('react').ReactNode} props.label ya traducida\n * @param {string|null|undefined} props.value el HTML guardado ('' sin texto)\n * @param {(html: string) => void} props.onChange recibe el HTML ('' si se borra todo)\n * @param {() => void} [props.onBlur]\n * @param {string} [props.placeholder] ya traducido: lo que se ve con el editor vacío\n * @param {string|{key: string, values?: object}} [props.error]\n * @param {string} [props.helperText] ya traducida\n * @param {number} [props.maxLength] el tope de caracteres (con su contador abajo)\n * @param {string[]} [props.features] los botones de la barra (RICH_TEXT_FEATURE); por omisión todos\n * @param {Array<object>} [props.extensions] extensiones de Tiptap del proyecto\n * @param {import('react').ReactNode} [props.toolbarActions] botones propios al final de la barra\n * @param {(editor: import('@tiptap/react').Editor) => void} [props.onEditorReady] el editor de Tiptap, al estar listo\n * @param {number} [props.minHeight] el alto mínimo del texto en px; por omisión 160\n * @param {boolean} [props.disabled]\n * @param {boolean} [props.required] obligatorio: el asterisco en la etiqueta y aria-required en el editor (no es un <input>: el navegador no sabe revisarlo)\n * @param {object} [props.sx]\n * @param {Record<string, string|object>} [props.messages] el texto del error de este campo, por regla de validación\n * ({required: 'Escriba el RFC', matches: 'El RFC lleva 12 o 13 caracteres'}): gana al de Calcita y al de los textos\n * @param {object} [props.texts] los textos que cambian, con la forma de `richText` en los textos del paquete\n */\nfunction RichTextEditorContent(props) {\n const {\n name, label, value, onChange, onBlur, placeholder, error, helperText = ' ', maxLength, features = DEFAULT_RICH_TEXT_FEATURES, extensions,\n toolbarActions, onEditorReady, minHeight = DEFAULT_MIN_HEIGHT, disabled = false, required = false, sx, messages, texts,\n ...unknownProps\n } = usePieceProps(props, THEME_NAME);\n warnUnknownProps(THEME_NAME, unknownProps);\n const {t} = useToolkitTranslation('richText', texts);\n // el texto del error: el de la pantalla (messages), el del proyecto para este campo o el de Calcita\n const validationTextOf = useValidationText({name, label, messages});\n const generatedId = useId();\n const contentId = `${name ?? 'rich-text'}-${generatedId}`;\n const labelId = `${contentId}-label`;\n const errorText = validationTextOf(error);\n // lo último de afuera, sin rearmar el editor cada vez que la pantalla pinta otra función\n const latest = useRef({onChange, onBlur, onEditorReady});\n latest.current = {onChange, onBlur, onEditorReady};\n\n const editor = useEditor({\n extensions: richTextExtensionsOf({features, placeholder, maxLength, extensions}),\n content: value ?? '',\n editable: !disabled,\n // OJO: sin esto, al pintar en el servidor (Next) el editor avisa que no hay documento todavía\n immediatelyRender: false,\n editorProps: {\n attributes: {id: contentId, role: 'textbox', 'aria-multiline': 'true', 'aria-labelledby': labelId, ...(required && {'aria-required': 'true'}), ...(errorText && {'aria-invalid': 'true'})},\n },\n onUpdate: ({editor: current}) => latest.current.onChange(normalizedHtmlOf(current.getHTML())),\n onBlur: () => latest.current.onBlur?.(),\n onCreate: ({editor: current}) => latest.current.onEditorReady?.(current),\n }, [features.join(','), placeholder, maxLength, Boolean(errorText), required]);\n\n // lo que llega de afuera (el formulario se reinició, llegó del servidor) entra sin avisar otro cambio\n useEffect(() => {\n if (editor && normalizedHtmlOf(editor.getHTML()) !== (value ?? '')) {\n editor.commands.setContent(value ?? '', {emitUpdate: false});\n }\n }, [editor, value]);\n useEffect(() => {\n editor?.setEditable(!disabled);\n }, [editor, disabled]);\n\n const characters = useEditorState({editor, selector: ({editor: current}) => current?.storage.characterCount?.characters() ?? 0});\n\n return (\n <FieldFrame inputId={contentId} labelId={labelId} label={label} required={required}>\n <div>\n <EditorRoot variant=\"outlined\" ownSx={(theme) => ({\n borderRadius: 2, overflow: 'hidden', opacity: disabled ? 0.6 : 1,\n borderColor: errorText ? 'error.main' : 'divider',\n '&:focus-within': {borderColor: errorText ? 'error.main' : 'primary.main', boxShadow: `0 0 0 1px ${(theme.vars ?? theme).palette[errorText ? 'error' : 'primary'].main}`},\n })} sx={sx}>\n <EditorToolbar role=\"toolbar\" aria-label={t('toolbar.label')} aria-controls={contentId} direction=\"row\"\n ownSx={{alignItems: 'center', flexWrap: 'wrap', gap: 0.25, px: 0.5, py: 0.5, borderBottom: 1, borderColor: 'divider'}}>\n <RichTextToolbar editor={editor} features={features} disabled={disabled} t={t} actions={toolbarActions} />\n </EditorToolbar>\n <EditorContentArea ownSx={(theme) => {\n const content = richTextContentSxOf(theme);\n return {...content, px: 2, py: 1.5, cursor: 'text', '& .tiptap': {...content['& .tiptap'], minHeight}};\n }} onClick={() => editor?.commands.focus()}>\n <EditorContent editor={editor} />\n </EditorContentArea>\n </EditorRoot>\n <EditorFooter direction=\"row\" ownSx={{justifyContent: 'space-between', gap: 2}}>\n <FormHelperText error={Boolean(errorText)}>{errorText ?? helperText}</FormHelperText>\n {maxLength && (\n <FormHelperText sx={{fontVariantNumeric: 'tabular-nums', whiteSpace: 'nowrap'}}>\n {t('counter', {count: characters, max: maxLength})}\n </FormHelperText>\n )}\n </EditorFooter>\n </div>\n </FieldFrame>\n );\n}\n\n// lo que se exporta: la pieza con slots y slotProps para cambiar sus partes (themePieces.js)\nconst RichTextEditor = withPieceSlots(RichTextEditorContent, THEME_NAME);\nexport default RichTextEditor;\n"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ const ToolkitProvider = ({
13
13
  onLanguageChange,
14
14
  onMissingText,
15
15
  readValidationMessage,
16
+ requiredFromSchema,
16
17
  texts,
17
18
  translate,
18
19
  timeZone,
@@ -34,6 +35,7 @@ const ToolkitProvider = ({
34
35
  onLanguageChange: onLanguageChange ?? parent?.onLanguageChange ?? null,
35
36
  onMissingText: onMissingText ?? parent?.onMissingText ?? null,
36
37
  readValidationMessage: readValidationMessage ?? parent?.readValidationMessage ?? null,
38
+ requiredFromSchema: requiredFromSchema ?? parent?.requiredFromSchema ?? false,
37
39
  texts: texts ?? parent?.texts ?? {},
38
40
  translate: translate ?? parent?.translate ?? null,
39
41
  timeZone: timeZone ?? parent?.timeZone ?? browserTimeZone(),
@@ -51,6 +53,7 @@ const ToolkitProvider = ({
51
53
  onLanguageChange,
52
54
  onMissingText,
53
55
  readValidationMessage,
56
+ requiredFromSchema,
54
57
  texts,
55
58
  translate,
56
59
  timeZone,
@@ -1 +1 @@
1
- {"version":3,"file":"ToolkitProvider.js","sources":["../../src/toolkit/ToolkitProvider.jsx"],"sourcesContent":["// El proveedor del paquete: el único lugar donde cada aplicación conecta su idioma, sus textos, su zona horaria y su\n// router. Va por encima de la aplicación, dentro del ThemeProvider de MUI (el tema lo arma cada proyecto; sin tema,\n// los componentes usan los colores por omisión de MUI).\n//\n// <ToolkitProvider language=\"es\" navigation={reactRouterNavigation} texts={{es: {common: {actions: {back: 'Volver'}}}}}>\n//\n// Sin proveedor todo funciona en español, con la zona del navegador y la navegación del navegador.\n//\n// Un proveedor dentro de otro (una parte de la app en otro idioma, una vista previa) toma del de afuera lo que no le digan, y\n// sus componentes leen el suyo: el más cercano. Solo el de la raíz pone la configuración que leen las funciones sueltas\n// (avisos, errores, formatos sueltos): antes el de adentro se la cambiaba a toda la app. Dos islas de React en una página\n// vieja son dos raíces: cada isla pinta con la suya, y las funciones sueltas usan la última que se pintó (en ese caso los\n// componentes de la casa ya formatean con su proveedor; para un aviso, mándelo con el texto ya traducido).\n//\n// Lo renderiza la app: arrow (regla de la casa).\nimport {useContext, useMemo} from 'react';\nimport {allowOnlyUnrestricted} from '@/access/accessRules.js';\nimport {browserNavigation} from '@/toolkit/browserNavigation.js';\nimport {ToolkitContext} from '@/toolkit/toolkitContext.js';\nimport {useFontSize} from '@/ui/navigation/useFontSize.js';\nimport {DEFAULT_CURRENCY, DEFAULT_HOUR_CYCLE, DEFAULT_LANGUAGE, DEFAULT_LANGUAGES, browserTimeZone, configureToolkit} from '@/toolkit/toolkitSettings.js';\nimport {warnUnknownProps} from '@/toolkit/unknownProps.js';\n\n/**\n * @param {object} props\n * @param {string} [props.language] idioma activo, uno de `languages` (por omisión es)\n * @param {Array<{code: string, label: string, locale?: string}>} [props.languages] los idiomas que ofrece la app: su código,\n * su nombre en su propio idioma («Português») y su locale de Intl ('pt-BR'). Por omisión español e inglés\n * (DEFAULT_LANGUAGES). Sus traducciones van en `texts`\n * @param {Record<string, {Icon: import('react').ElementType, color?: string, label?: string, hint?: string}>} [props.fileTypes]\n * tipos de archivo del proyecto para las descargas, además de Excel, CSV y PDF (downloads/fileTypes.js)\n * @param {(language: string) => void} [props.onLanguageChange] lo llama LanguageToggle; el proyecto cambia su idioma\n * @param {object} [props.texts] textos propios por idioma, con la forma de locales/ ({es: {table: {...}}})\n * @param {(error: unknown) => unknown} [props.readValidationMessage] cómo leer los mensajes de validación de un sistema que ya\n * existe (su propio setLocale de yup, su forma de error): regresa un texto, {key, values} o undefined para la lectura de\n * siempre. Ej. ({msg, values}) de muchos sistemas con i18next ya se entiende solo; esto es para lo demás\n * @param {(missing: {namespace: string, key: string, language: string}) => void} [props.onMissingText] avisa cada texto que\n * no existe (la pantalla enseña la llave): para mandarlo a Sentry o tronar una prueba. Sin él, Calcita avisa en la\n * consola una vez por idioma y llave\n * @param {(namespace: string, key: string, values?: object) => string|undefined} [props.translate] traductor del\n * proyecto (por ejemplo i18next); undefined deja el texto del paquete\n * @param {string} [props.timeZone] zona de las fechas (por omisión la del navegador)\n * @param {string} [props.currency] moneda de los montos, código ISO 4217 (por omisión MXN)\n * @param {'h23'|'h12'} [props.hourCycle] la hora de 24 horas («15:10», por omisión) o de 12 con a.m. y p.m. («3:10 p.m.»):\n * HOUR_CYCLE.twentyFourHours o HOUR_CYCLE.twelveHours\n * @param {string} [props.appName] nombre de la aplicación para el título de la pestaña\n * @param {object} [props.navigation] {useNavigate, useLocation, Link}; por omisión la del navegador\n * @param {string} [props.buildId] la compilación del front que corre en esta pestaña; con ella NewBuildNotice sabe si el\n * servidor ya publicó otra (reportPublishedBuild). Vacía (en desarrollo) nunca avisa\n * @param {(access: object|undefined|null) => boolean} [props.canAccess] quién ve qué (menú, rutas, botones): la regla del\n * proyecto, normalmente createAccessChecker({abilities, roles, policies, context}). Sin ella solo se ve lo que no\n * tiene regla\n * @param {import('react').ReactNode} props.children\n */\nexport const ToolkitProvider = ({\n language, languages, onLanguageChange, onMissingText, readValidationMessage, texts, translate, timeZone, currency, hourCycle, appName, navigation, buildId, canAccess, fileTypes,\n children,\n ...unknownProps\n}) => {\n warnUnknownProps('ToolkitProvider', unknownProps);\n // el proveedor de afuera, si este va dentro de otro: de él sale lo que este no diga\n const parent = useContext(ToolkitContext);\n const settings = useMemo(() => ({\n language: language ?? parent?.language ?? DEFAULT_LANGUAGE,\n languages: languages ?? parent?.languages ?? DEFAULT_LANGUAGES,\n onLanguageChange: onLanguageChange ?? parent?.onLanguageChange ?? null,\n onMissingText: onMissingText ?? parent?.onMissingText ?? null,\n readValidationMessage: readValidationMessage ?? parent?.readValidationMessage ?? null,\n texts: texts ?? parent?.texts ?? {},\n translate: translate ?? parent?.translate ?? null,\n timeZone: timeZone ?? parent?.timeZone ?? browserTimeZone(),\n currency: currency ?? parent?.currency ?? DEFAULT_CURRENCY,\n hourCycle: hourCycle ?? parent?.hourCycle ?? DEFAULT_HOUR_CYCLE,\n appName: appName ?? parent?.appName ?? '',\n navigation: navigation ?? parent?.navigation ?? browserNavigation,\n buildId: buildId ?? parent?.buildId ?? '',\n canAccess: canAccess ?? parent?.canAccess ?? allowOnlyUnrestricted,\n fileTypes: fileTypes ?? parent?.fileTypes ?? null,\n }), [parent, language, languages, onLanguageChange, onMissingText, readValidationMessage, texts, translate, timeZone, currency, hourCycle, appName, navigation, buildId, canAccess,\n fileTypes]);\n\n // solo el de la raíz: un proveedor de adentro le cambiaba el idioma y la zona a las funciones sueltas de toda la app.\n // OJO: se configura durante el render (no en un efecto) para que los formatos y avisos que se llaman en este mismo\n // render ya vean el idioma y la zona nuevos\n if (!parent) {\n configureToolkit({\n language: settings.language, texts: settings.texts, translate: settings.translate, timeZone: settings.timeZone, currency: settings.currency,\n hourCycle: settings.hourCycle, appName: settings.appName, buildId: settings.buildId, languages: settings.languages,\n onMissingText: settings.onMissingText,\n });\n }\n\n // el tamaño de letra que la persona guardó: se aplica aquí, que siempre está montado. Antes lo aplicaba su botón en la\n // barra; al pasar los ajustes al menú de la cuenta, al recargar se perdía hasta abrir el menú (error pagado)\n useFontSize();\n\n return <ToolkitContext.Provider value={settings}>{children}</ToolkitContext.Provider>;\n};\n"],"names":[],"mappings":";;;;;;;;;AAsDO,MAAM,kBAAkB,CAAC;AAAA,EAC5B;AAAA,EAAU;AAAA,EAAW;AAAA,EAAkB;AAAA,EAAe;AAAA,EAAuB;AAAA,EAAO;AAAA,EAAW;AAAA,EAAU;AAAA,EAAU;AAAA,EAAW;AAAA,EAAS;AAAA,EAAY;AAAA,EAAS;AAAA,EAAW;AAAA,EACvK;AAAA,EACA,GAAG;AACP,MAAM;AACF,mBAAiB,mBAAmB,YAAY;AAEhD,QAAM,SAAS,WAAW,cAAc;AACxC,QAAM,WAAW,QAAQ,OAAO;AAAA,IAC5B,UAAU,YAAY,QAAQ,YAAY;AAAA,IAC1C,WAAW,aAAa,QAAQ,aAAa;AAAA,IAC7C,kBAAkB,oBAAoB,QAAQ,oBAAoB;AAAA,IAClE,eAAe,iBAAiB,QAAQ,iBAAiB;AAAA,IACzD,uBAAuB,yBAAyB,QAAQ,yBAAyB;AAAA,IACjF,OAAO,SAAS,QAAQ,SAAS,CAAA;AAAA,IACjC,WAAW,aAAa,QAAQ,aAAa;AAAA,IAC7C,UAAU,YAAY,QAAQ,YAAY,gBAAA;AAAA,IAC1C,UAAU,YAAY,QAAQ,YAAY;AAAA,IAC1C,WAAW,aAAa,QAAQ,aAAa;AAAA,IAC7C,SAAS,WAAW,QAAQ,WAAW;AAAA,IACvC,YAAY,cAAc,QAAQ,cAAc;AAAA,IAChD,SAAS,WAAW,QAAQ,WAAW;AAAA,IACvC,WAAW,aAAa,QAAQ,aAAa;AAAA,IAC7C,WAAW,aAAa,QAAQ,aAAa;AAAA,EAAA,IAC7C;AAAA,IAAC;AAAA,IAAQ;AAAA,IAAU;AAAA,IAAW;AAAA,IAAkB;AAAA,IAAe;AAAA,IAAuB;AAAA,IAAO;AAAA,IAAW;AAAA,IAAU;AAAA,IAAU;AAAA,IAAW;AAAA,IAAS;AAAA,IAAY;AAAA,IAAS;AAAA,IACrK;AAAA,EAAA,CAAU;AAKd,MAAI,CAAC,QAAQ;AACT,qBAAiB;AAAA,MACb,UAAU,SAAS;AAAA,MAAU,OAAO,SAAS;AAAA,MAAO,WAAW,SAAS;AAAA,MAAW,UAAU,SAAS;AAAA,MAAU,UAAU,SAAS;AAAA,MACnI,WAAW,SAAS;AAAA,MAAW,SAAS,SAAS;AAAA,MAAS,SAAS,SAAS;AAAA,MAAS,WAAW,SAAS;AAAA,MACzG,eAAe,SAAS;AAAA,IAAA,CAC3B;AAAA,EACL;AAIA,cAAA;AAEA,6BAAQ,eAAe,UAAf,EAAwB,OAAO,UAAW,UAAS;AAC/D;"}
1
+ {"version":3,"file":"ToolkitProvider.js","sources":["../../src/toolkit/ToolkitProvider.jsx"],"sourcesContent":["// El proveedor del paquete: el único lugar donde cada aplicación conecta su idioma, sus textos, su zona horaria y su\n// router. Va por encima de la aplicación, dentro del ThemeProvider de MUI (el tema lo arma cada proyecto; sin tema,\n// los componentes usan los colores por omisión de MUI).\n//\n// <ToolkitProvider language=\"es\" navigation={reactRouterNavigation} texts={{es: {common: {actions: {back: 'Volver'}}}}}>\n//\n// Sin proveedor todo funciona en español, con la zona del navegador y la navegación del navegador.\n//\n// Un proveedor dentro de otro (una parte de la app en otro idioma, una vista previa) toma del de afuera lo que no le digan, y\n// sus componentes leen el suyo: el más cercano. Solo el de la raíz pone la configuración que leen las funciones sueltas\n// (avisos, errores, formatos sueltos): antes el de adentro se la cambiaba a toda la app. Dos islas de React en una página\n// vieja son dos raíces: cada isla pinta con la suya, y las funciones sueltas usan la última que se pintó (en ese caso los\n// componentes de la casa ya formatean con su proveedor; para un aviso, mándelo con el texto ya traducido).\n//\n// Lo renderiza la app: arrow (regla de la casa).\nimport {useContext, useMemo} from 'react';\nimport {allowOnlyUnrestricted} from '@/access/accessRules.js';\nimport {browserNavigation} from '@/toolkit/browserNavigation.js';\nimport {ToolkitContext} from '@/toolkit/toolkitContext.js';\nimport {useFontSize} from '@/ui/navigation/useFontSize.js';\nimport {DEFAULT_CURRENCY, DEFAULT_HOUR_CYCLE, DEFAULT_LANGUAGE, DEFAULT_LANGUAGES, browserTimeZone, configureToolkit} from '@/toolkit/toolkitSettings.js';\nimport {warnUnknownProps} from '@/toolkit/unknownProps.js';\n\n/**\n * @param {object} props\n * @param {string} [props.language] idioma activo, uno de `languages` (por omisión es)\n * @param {Array<{code: string, label: string, locale?: string}>} [props.languages] los idiomas que ofrece la app: su código,\n * su nombre en su propio idioma («Português») y su locale de Intl ('pt-BR'). Por omisión español e inglés\n * (DEFAULT_LANGUAGES). Sus traducciones van en `texts`\n * @param {Record<string, {Icon: import('react').ElementType, color?: string, label?: string, hint?: string}>} [props.fileTypes]\n * tipos de archivo del proyecto para las descargas, además de Excel, CSV y PDF (downloads/fileTypes.js)\n * @param {(language: string) => void} [props.onLanguageChange] lo llama LanguageToggle; el proyecto cambia su idioma\n * @param {object} [props.texts] textos propios por idioma, con la forma de locales/ ({es: {table: {...}}})\n * @param {(error: unknown) => unknown} [props.readValidationMessage] cómo leer los mensajes de validación de un sistema que ya\n * existe (su propio setLocale de yup, su forma de error): regresa un texto, {key, values} o undefined para la lectura de\n * siempre. Ej. ({msg, values}) de muchos sistemas con i18next ya se entiende solo; esto es para lo demás\n * @param {(missing: {namespace: string, key: string, language: string}) => void} [props.onMissingText] avisa cada texto que\n * no existe (la pantalla enseña la llave): para mandarlo a Sentry o tronar una prueba. Sin él, Calcita avisa en la\n * consola una vez por idioma y llave\n * @param {(namespace: string, key: string, values?: object) => string|undefined} [props.translate] traductor del\n * proyecto (por ejemplo i18next); undefined deja el texto del paquete\n * @param {boolean} [props.requiredFromSchema] los campos de formik leen del esquema de yup del formulario (validationSchema)\n * qué es obligatorio y le ponen su asterisco: el esquema manda y la pantalla no los marca a mano. Lo que la pantalla diga\n * con required gana. Por omisión no (cada campo con su required, como antes)\n * @param {string} [props.timeZone] zona de las fechas (por omisión la del navegador)\n * @param {string} [props.currency] moneda de los montos, código ISO 4217 (por omisión MXN)\n * @param {'h23'|'h12'} [props.hourCycle] la hora de 24 horas («15:10», por omisión) o de 12 con a.m. y p.m. («3:10 p.m.»):\n * HOUR_CYCLE.twentyFourHours o HOUR_CYCLE.twelveHours\n * @param {string} [props.appName] nombre de la aplicación para el título de la pestaña\n * @param {object} [props.navigation] {useNavigate, useLocation, Link}; por omisión la del navegador\n * @param {string} [props.buildId] la compilación del front que corre en esta pestaña; con ella NewBuildNotice sabe si el\n * servidor ya publicó otra (reportPublishedBuild). Vacía (en desarrollo) nunca avisa\n * @param {(access: object|undefined|null) => boolean} [props.canAccess] quién ve qué (menú, rutas, botones): la regla del\n * proyecto, normalmente createAccessChecker({abilities, roles, policies, context}). Sin ella solo se ve lo que no\n * tiene regla\n * @param {import('react').ReactNode} props.children\n */\nexport const ToolkitProvider = ({\n language, languages, onLanguageChange, onMissingText, readValidationMessage, requiredFromSchema, texts, translate, timeZone, currency, hourCycle, appName, navigation, buildId, canAccess, fileTypes,\n children,\n ...unknownProps\n}) => {\n warnUnknownProps('ToolkitProvider', unknownProps);\n // el proveedor de afuera, si este va dentro de otro: de él sale lo que este no diga\n const parent = useContext(ToolkitContext);\n const settings = useMemo(() => ({\n language: language ?? parent?.language ?? DEFAULT_LANGUAGE,\n languages: languages ?? parent?.languages ?? DEFAULT_LANGUAGES,\n onLanguageChange: onLanguageChange ?? parent?.onLanguageChange ?? null,\n onMissingText: onMissingText ?? parent?.onMissingText ?? null,\n readValidationMessage: readValidationMessage ?? parent?.readValidationMessage ?? null,\n requiredFromSchema: requiredFromSchema ?? parent?.requiredFromSchema ?? false,\n texts: texts ?? parent?.texts ?? {},\n translate: translate ?? parent?.translate ?? null,\n timeZone: timeZone ?? parent?.timeZone ?? browserTimeZone(),\n currency: currency ?? parent?.currency ?? DEFAULT_CURRENCY,\n hourCycle: hourCycle ?? parent?.hourCycle ?? DEFAULT_HOUR_CYCLE,\n appName: appName ?? parent?.appName ?? '',\n navigation: navigation ?? parent?.navigation ?? browserNavigation,\n buildId: buildId ?? parent?.buildId ?? '',\n canAccess: canAccess ?? parent?.canAccess ?? allowOnlyUnrestricted,\n fileTypes: fileTypes ?? parent?.fileTypes ?? null,\n }), [parent, language, languages, onLanguageChange, onMissingText, readValidationMessage, requiredFromSchema, texts, translate, timeZone, currency, hourCycle, appName, navigation, buildId, canAccess,\n fileTypes]);\n\n // solo el de la raíz: un proveedor de adentro le cambiaba el idioma y la zona a las funciones sueltas de toda la app.\n // OJO: se configura durante el render (no en un efecto) para que los formatos y avisos que se llaman en este mismo\n // render ya vean el idioma y la zona nuevos\n if (!parent) {\n configureToolkit({\n language: settings.language, texts: settings.texts, translate: settings.translate, timeZone: settings.timeZone, currency: settings.currency,\n hourCycle: settings.hourCycle, appName: settings.appName, buildId: settings.buildId, languages: settings.languages,\n onMissingText: settings.onMissingText,\n });\n }\n\n // el tamaño de letra que la persona guardó: se aplica aquí, que siempre está montado. Antes lo aplicaba su botón en la\n // barra; al pasar los ajustes al menú de la cuenta, al recargar se perdía hasta abrir el menú (error pagado)\n useFontSize();\n\n return <ToolkitContext.Provider value={settings}>{children}</ToolkitContext.Provider>;\n};\n"],"names":[],"mappings":";;;;;;;;;AAyDO,MAAM,kBAAkB,CAAC;AAAA,EAC5B;AAAA,EAAU;AAAA,EAAW;AAAA,EAAkB;AAAA,EAAe;AAAA,EAAuB;AAAA,EAAoB;AAAA,EAAO;AAAA,EAAW;AAAA,EAAU;AAAA,EAAU;AAAA,EAAW;AAAA,EAAS;AAAA,EAAY;AAAA,EAAS;AAAA,EAAW;AAAA,EAC3L;AAAA,EACA,GAAG;AACP,MAAM;AACF,mBAAiB,mBAAmB,YAAY;AAEhD,QAAM,SAAS,WAAW,cAAc;AACxC,QAAM,WAAW,QAAQ,OAAO;AAAA,IAC5B,UAAU,YAAY,QAAQ,YAAY;AAAA,IAC1C,WAAW,aAAa,QAAQ,aAAa;AAAA,IAC7C,kBAAkB,oBAAoB,QAAQ,oBAAoB;AAAA,IAClE,eAAe,iBAAiB,QAAQ,iBAAiB;AAAA,IACzD,uBAAuB,yBAAyB,QAAQ,yBAAyB;AAAA,IACjF,oBAAoB,sBAAsB,QAAQ,sBAAsB;AAAA,IACxE,OAAO,SAAS,QAAQ,SAAS,CAAA;AAAA,IACjC,WAAW,aAAa,QAAQ,aAAa;AAAA,IAC7C,UAAU,YAAY,QAAQ,YAAY,gBAAA;AAAA,IAC1C,UAAU,YAAY,QAAQ,YAAY;AAAA,IAC1C,WAAW,aAAa,QAAQ,aAAa;AAAA,IAC7C,SAAS,WAAW,QAAQ,WAAW;AAAA,IACvC,YAAY,cAAc,QAAQ,cAAc;AAAA,IAChD,SAAS,WAAW,QAAQ,WAAW;AAAA,IACvC,WAAW,aAAa,QAAQ,aAAa;AAAA,IAC7C,WAAW,aAAa,QAAQ,aAAa;AAAA,EAAA,IAC7C;AAAA,IAAC;AAAA,IAAQ;AAAA,IAAU;AAAA,IAAW;AAAA,IAAkB;AAAA,IAAe;AAAA,IAAuB;AAAA,IAAoB;AAAA,IAAO;AAAA,IAAW;AAAA,IAAU;AAAA,IAAU;AAAA,IAAW;AAAA,IAAS;AAAA,IAAY;AAAA,IAAS;AAAA,IACzL;AAAA,EAAA,CAAU;AAKd,MAAI,CAAC,QAAQ;AACT,qBAAiB;AAAA,MACb,UAAU,SAAS;AAAA,MAAU,OAAO,SAAS;AAAA,MAAO,WAAW,SAAS;AAAA,MAAW,UAAU,SAAS;AAAA,MAAU,UAAU,SAAS;AAAA,MACnI,WAAW,SAAS;AAAA,MAAW,SAAS,SAAS;AAAA,MAAS,SAAS,SAAS;AAAA,MAAS,WAAW,SAAS;AAAA,MACzG,eAAe,SAAS;AAAA,IAAA,CAC3B;AAAA,EACL;AAIA,cAAA;AAEA,6BAAQ,eAAe,UAAf,EAAwB,OAAO,UAAW,UAAS;AAC/D;"}