@caribeng/ui 22.4.0 → 22.5.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 (186) hide show
  1. package/README.md +311 -313
  2. package/fesm2022/caribeng-ui-account-picker.mjs +533 -0
  3. package/fesm2022/caribeng-ui-aging.mjs +488 -0
  4. package/fesm2022/{caribeng-ui-caribe-alert.mjs → caribeng-ui-alert.mjs} +45 -45
  5. package/fesm2022/caribeng-ui-amount.mjs +249 -0
  6. package/fesm2022/caribeng-ui-anchor.mjs +2 -2
  7. package/fesm2022/{caribeng-ui-caribe-animation-lottie.mjs → caribeng-ui-animation-lottie.mjs} +41 -41
  8. package/fesm2022/caribeng-ui-audit-log.mjs +323 -0
  9. package/fesm2022/caribeng-ui-avatar.mjs +2 -2
  10. package/fesm2022/caribeng-ui-breadcrumb.mjs +13 -3
  11. package/fesm2022/{caribeng-ui-caribe-button-group.mjs → caribeng-ui-button-group.mjs} +15 -15
  12. package/fesm2022/caribeng-ui-button.mjs +2 -2
  13. package/fesm2022/{caribeng-ui-caribe-card-content.mjs → caribeng-ui-card-content.mjs} +39 -39
  14. package/fesm2022/{caribeng-ui-caribe-card-move.mjs → caribeng-ui-card-move.mjs} +65 -65
  15. package/fesm2022/{caribeng-ui-caribe-card-primary.mjs → caribeng-ui-card-primary.mjs} +31 -31
  16. package/fesm2022/{caribeng-ui-caribe-card-select.mjs → caribeng-ui-card-select.mjs} +67 -67
  17. package/fesm2022/caribeng-ui-carousel.mjs +2 -2
  18. package/fesm2022/caribeng-ui-cascadeselect.mjs +45 -9
  19. package/fesm2022/caribeng-ui-chat.mjs +2 -2
  20. package/fesm2022/{caribeng-ui-caribe-coachmark.mjs → caribeng-ui-coachmark.mjs} +85 -85
  21. package/fesm2022/caribeng-ui-command-palette.mjs +2 -2
  22. package/fesm2022/caribeng-ui-comments.mjs +864 -0
  23. package/fesm2022/caribeng-ui-datagrid.mjs +1635 -0
  24. package/fesm2022/caribeng-ui-dataview.mjs +2 -2
  25. package/fesm2022/caribeng-ui-datepicker.mjs +2 -2
  26. package/fesm2022/caribeng-ui-document.mjs +495 -0
  27. package/fesm2022/{caribeng-ui-caribe-dots-indicator.mjs → caribeng-ui-dots-indicator.mjs} +41 -41
  28. package/fesm2022/caribeng-ui-dynamic-form.mjs +1581 -0
  29. package/fesm2022/caribeng-ui-editor.mjs +2303 -1311
  30. package/fesm2022/{caribeng-ui-caribe-expansion-panel.mjs → caribeng-ui-expansion-panel.mjs} +39 -39
  31. package/fesm2022/{caribeng-ui-caribe-fab-menu.mjs → caribeng-ui-fab-menu.mjs} +75 -75
  32. package/fesm2022/caribeng-ui-file-card.mjs +2 -2
  33. package/fesm2022/{caribeng-ui-caribe-file-download.mjs → caribeng-ui-file-download.mjs} +63 -63
  34. package/fesm2022/caribeng-ui-financial-report.mjs +380 -0
  35. package/fesm2022/{caribeng-ui-caribe-float-menu.mjs → caribeng-ui-float-menu.mjs} +31 -31
  36. package/fesm2022/caribeng-ui-floatlabel.mjs +2 -2
  37. package/fesm2022/caribeng-ui-flow.mjs +1508 -0
  38. package/fesm2022/{caribeng-ui-caribe-footer.mjs → caribeng-ui-footer.mjs} +19 -19
  39. package/fesm2022/caribeng-ui-gantt.mjs +1094 -0
  40. package/fesm2022/{caribeng-ui-caribe-header.mjs → caribeng-ui-header.mjs} +49 -49
  41. package/fesm2022/{caribeng-ui-caribe-icon-button.mjs → caribeng-ui-icon-button.mjs} +23 -23
  42. package/fesm2022/caribeng-ui-image-cropper.mjs +671 -0
  43. package/fesm2022/caribeng-ui-import-wizard.mjs +746 -0
  44. package/fesm2022/caribeng-ui-infinite-scroll.mjs +226 -0
  45. package/fesm2022/caribeng-ui-input-number.mjs +22 -6
  46. package/fesm2022/{caribeng-ui-caribe-input-search.mjs → caribeng-ui-input-search.mjs} +65 -65
  47. package/fesm2022/{caribeng-ui-caribe-input-token.mjs → caribeng-ui-input-token.mjs} +59 -59
  48. package/fesm2022/caribeng-ui-inputotp.mjs +2 -2
  49. package/fesm2022/caribeng-ui-journal-entry.mjs +340 -0
  50. package/fesm2022/caribeng-ui-kanban.mjs +6 -6
  51. package/fesm2022/caribeng-ui-kpi.mjs +189 -0
  52. package/fesm2022/{caribeng-ui-caribe-link.mjs → caribeng-ui-link.mjs} +37 -37
  53. package/fesm2022/caribeng-ui-masonry.mjs +93 -0
  54. package/fesm2022/caribeng-ui-media-player.mjs +821 -0
  55. package/fesm2022/caribeng-ui-mentions.mjs +2 -2
  56. package/fesm2022/caribeng-ui-notification-center.mjs +636 -0
  57. package/fesm2022/{caribeng-ui-caribe-off-canvas.mjs → caribeng-ui-off-canvas.mjs} +55 -55
  58. package/fesm2022/{caribeng-ui-caribe-onboarding.mjs → caribeng-ui-onboarding.mjs} +105 -105
  59. package/fesm2022/caribeng-ui-orderlist.mjs +2 -2
  60. package/fesm2022/caribeng-ui-pdfviewer.mjs +1755 -25
  61. package/fesm2022/caribeng-ui-period-picker.mjs +637 -0
  62. package/fesm2022/caribeng-ui-phone-input.mjs +2 -2
  63. package/fesm2022/caribeng-ui-picklist.mjs +2 -2
  64. package/fesm2022/caribeng-ui-pivot.mjs +419 -0
  65. package/fesm2022/caribeng-ui-pricing.mjs +2 -2
  66. package/fesm2022/caribeng-ui-rating.mjs +14 -17
  67. package/fesm2022/caribeng-ui-reconciliation.mjs +386 -0
  68. package/fesm2022/caribeng-ui-scheduler.mjs +1027 -0
  69. package/fesm2022/caribeng-ui-select.mjs +2 -2
  70. package/fesm2022/{caribeng-ui-caribe-shortcut.mjs → caribeng-ui-shortcut.mjs} +29 -29
  71. package/fesm2022/caribeng-ui-sidebar.mjs +2 -2
  72. package/fesm2022/caribeng-ui-signature-pad.mjs +654 -0
  73. package/fesm2022/{caribeng-ui-caribe-status.mjs → caribeng-ui-status.mjs} +11 -11
  74. package/fesm2022/{caribeng-ui-caribe-step-indicator.mjs → caribeng-ui-step-indicator.mjs} +53 -53
  75. package/fesm2022/caribeng-ui-stepper.mjs +2 -2
  76. package/fesm2022/caribeng-ui-steps.mjs +2 -2
  77. package/fesm2022/caribeng-ui-table.mjs +323 -15
  78. package/fesm2022/caribeng-ui-tabmenu.mjs +2 -2
  79. package/fesm2022/caribeng-ui-tabs.mjs +2 -2
  80. package/fesm2022/{caribeng-ui-caribe-tag-button.mjs → caribeng-ui-tag-button.mjs} +25 -25
  81. package/fesm2022/caribeng-ui-tag.mjs +2 -2
  82. package/fesm2022/caribeng-ui-tieredmenu.mjs +6 -6
  83. package/fesm2022/{caribeng-ui-caribe-tracker.mjs → caribeng-ui-tracker.mjs} +29 -29
  84. package/fesm2022/{caribeng-ui-caribe-transaction-status.mjs → caribeng-ui-transaction-status.mjs} +11 -11
  85. package/fesm2022/caribeng-ui-treeselect.mjs +44 -9
  86. package/fesm2022/caribeng-ui-treetable.mjs +236 -17
  87. package/fesm2022/{caribeng-ui-caribe-voucher.mjs → caribeng-ui-voucher.mjs} +45 -45
  88. package/fesm2022/caribeng-ui-xlsx.mjs +486 -0
  89. package/fesm2022/caribeng-ui.mjs +1181 -1
  90. package/package.json +217 -177
  91. package/types/caribeng-ui-account-picker.d.ts +142 -0
  92. package/types/caribeng-ui-aging.d.ts +123 -0
  93. package/types/{caribeng-ui-caribe-alert.d.ts → caribeng-ui-alert.d.ts} +2 -2
  94. package/types/caribeng-ui-amount.d.ts +82 -0
  95. package/types/{caribeng-ui-caribe-animation-lottie.d.ts → caribeng-ui-animation-lottie.d.ts} +2 -2
  96. package/types/caribeng-ui-audit-log.d.ts +86 -0
  97. package/types/caribeng-ui-breadcrumb.d.ts +2 -2
  98. package/types/{caribeng-ui-caribe-button-group.d.ts → caribeng-ui-button-group.d.ts} +2 -2
  99. package/types/{caribeng-ui-caribe-card-content.d.ts → caribeng-ui-card-content.d.ts} +2 -2
  100. package/types/{caribeng-ui-caribe-card-move.d.ts → caribeng-ui-card-move.d.ts} +1 -1
  101. package/types/{caribeng-ui-caribe-card-primary.d.ts → caribeng-ui-card-primary.d.ts} +2 -2
  102. package/types/{caribeng-ui-caribe-card-select.d.ts → caribeng-ui-card-select.d.ts} +2 -2
  103. package/types/caribeng-ui-cascadeselect.d.ts +6 -0
  104. package/types/{caribeng-ui-caribe-coachmark.d.ts → caribeng-ui-coachmark.d.ts} +2 -2
  105. package/types/caribeng-ui-comments.d.ts +214 -0
  106. package/types/caribeng-ui-datagrid.d.ts +269 -0
  107. package/types/caribeng-ui-document.d.ts +138 -0
  108. package/types/{caribeng-ui-caribe-dots-indicator.d.ts → caribeng-ui-dots-indicator.d.ts} +2 -2
  109. package/types/caribeng-ui-dynamic-form.d.ts +409 -0
  110. package/types/caribeng-ui-editor.d.ts +110 -12
  111. package/types/{caribeng-ui-caribe-expansion-panel.d.ts → caribeng-ui-expansion-panel.d.ts} +1 -1
  112. package/types/{caribeng-ui-caribe-fab-menu.d.ts → caribeng-ui-fab-menu.d.ts} +2 -2
  113. package/types/{caribeng-ui-caribe-file-download.d.ts → caribeng-ui-file-download.d.ts} +1 -1
  114. package/types/caribeng-ui-financial-report.d.ts +102 -0
  115. package/types/{caribeng-ui-caribe-float-menu.d.ts → caribeng-ui-float-menu.d.ts} +2 -2
  116. package/types/caribeng-ui-flow.d.ts +228 -0
  117. package/types/{caribeng-ui-caribe-footer.d.ts → caribeng-ui-footer.d.ts} +2 -2
  118. package/types/caribeng-ui-gantt.d.ts +244 -0
  119. package/types/{caribeng-ui-caribe-header.d.ts → caribeng-ui-header.d.ts} +2 -2
  120. package/types/{caribeng-ui-caribe-icon-button.d.ts → caribeng-ui-icon-button.d.ts} +2 -2
  121. package/types/{caribeng-ui-caribe-illustration.d.ts → caribeng-ui-illustration.d.ts} +1 -1
  122. package/types/caribeng-ui-image-cropper.d.ts +169 -0
  123. package/types/caribeng-ui-import-wizard.d.ts +149 -0
  124. package/types/caribeng-ui-infinite-scroll.d.ts +75 -0
  125. package/types/caribeng-ui-input-number.d.ts +1 -1
  126. package/types/{caribeng-ui-caribe-input-search.d.ts → caribeng-ui-input-search.d.ts} +2 -2
  127. package/types/{caribeng-ui-caribe-input-token.d.ts → caribeng-ui-input-token.d.ts} +2 -2
  128. package/types/caribeng-ui-journal-entry.d.ts +110 -0
  129. package/types/caribeng-ui-kpi.d.ts +64 -0
  130. package/types/{caribeng-ui-caribe-link.d.ts → caribeng-ui-link.d.ts} +2 -2
  131. package/types/{caribeng-ui-caribe-logo.d.ts → caribeng-ui-logo.d.ts} +1 -1
  132. package/types/caribeng-ui-masonry.d.ts +32 -0
  133. package/types/caribeng-ui-media-player.d.ts +140 -0
  134. package/types/caribeng-ui-notification-center.d.ts +153 -0
  135. package/types/{caribeng-ui-caribe-off-canvas.d.ts → caribeng-ui-off-canvas.d.ts} +2 -2
  136. package/types/{caribeng-ui-caribe-onboarding.d.ts → caribeng-ui-onboarding.d.ts} +2 -2
  137. package/types/caribeng-ui-pdfviewer.d.ts +245 -5
  138. package/types/caribeng-ui-period-picker.d.ts +148 -0
  139. package/types/caribeng-ui-pivot.d.ts +116 -0
  140. package/types/caribeng-ui-reconciliation.d.ts +109 -0
  141. package/types/caribeng-ui-scheduler.d.ts +188 -0
  142. package/types/{caribeng-ui-caribe-shortcut.d.ts → caribeng-ui-shortcut.d.ts} +2 -2
  143. package/types/caribeng-ui-signature-pad.d.ts +151 -0
  144. package/types/{caribeng-ui-caribe-status.d.ts → caribeng-ui-status.d.ts} +2 -2
  145. package/types/{caribeng-ui-caribe-step-indicator.d.ts → caribeng-ui-step-indicator.d.ts} +2 -2
  146. package/types/caribeng-ui-table.d.ts +66 -2
  147. package/types/{caribeng-ui-caribe-tag-button.d.ts → caribeng-ui-tag-button.d.ts} +2 -2
  148. package/types/{caribeng-ui-caribe-tracker.d.ts → caribeng-ui-tracker.d.ts} +2 -2
  149. package/types/{caribeng-ui-caribe-transaction-status.d.ts → caribeng-ui-transaction-status.d.ts} +2 -2
  150. package/types/caribeng-ui-treeselect.d.ts +6 -0
  151. package/types/caribeng-ui-treetable.d.ts +67 -2
  152. package/types/{caribeng-ui-caribe-voucher.d.ts → caribeng-ui-voucher.d.ts} +2 -2
  153. package/types/caribeng-ui-xlsx.d.ts +79 -0
  154. package/types/caribeng-ui.d.ts +711 -2
  155. package/fesm2022/caribeng-ui-caribe-calendar.mjs +0 -92
  156. package/fesm2022/caribeng-ui-caribe-circle-loading.mjs +0 -130
  157. package/fesm2022/caribeng-ui-caribe-data-table.mjs +0 -94
  158. package/fesm2022/caribeng-ui-caribe-file-select.mjs +0 -88
  159. package/fesm2022/caribeng-ui-caribe-inline-alert.mjs +0 -100
  160. package/fesm2022/caribeng-ui-caribe-input-date.mjs +0 -138
  161. package/fesm2022/caribeng-ui-caribe-input-select.mjs +0 -154
  162. package/fesm2022/caribeng-ui-caribe-loader.mjs +0 -48
  163. package/fesm2022/caribeng-ui-caribe-modal.mjs +0 -119
  164. package/fesm2022/caribeng-ui-caribe-pictogram.mjs +0 -52
  165. package/fesm2022/caribeng-ui-caribe-pop-over.mjs +0 -104
  166. package/fesm2022/caribeng-ui-caribe-preloader.mjs +0 -57
  167. package/fesm2022/caribeng-ui-caribe-progress-bar.mjs +0 -84
  168. package/fesm2022/caribeng-ui-caribe-stroke.mjs +0 -69
  169. package/fesm2022/caribeng-ui-caribe-switch.mjs +0 -182
  170. package/types/caribeng-ui-caribe-calendar.d.ts +0 -27
  171. package/types/caribeng-ui-caribe-circle-loading.d.ts +0 -28
  172. package/types/caribeng-ui-caribe-data-table.d.ts +0 -26
  173. package/types/caribeng-ui-caribe-file-select.d.ts +0 -31
  174. package/types/caribeng-ui-caribe-inline-alert.d.ts +0 -28
  175. package/types/caribeng-ui-caribe-input-date.d.ts +0 -40
  176. package/types/caribeng-ui-caribe-input-select.d.ts +0 -47
  177. package/types/caribeng-ui-caribe-loader.d.ts +0 -22
  178. package/types/caribeng-ui-caribe-modal.d.ts +0 -21
  179. package/types/caribeng-ui-caribe-pictogram.d.ts +0 -15
  180. package/types/caribeng-ui-caribe-pop-over.d.ts +0 -17
  181. package/types/caribeng-ui-caribe-preloader.d.ts +0 -24
  182. package/types/caribeng-ui-caribe-progress-bar.d.ts +0 -28
  183. package/types/caribeng-ui-caribe-stroke.d.ts +0 -17
  184. package/types/caribeng-ui-caribe-switch.d.ts +0 -55
  185. /package/fesm2022/{caribeng-ui-caribe-illustration.mjs → caribeng-ui-illustration.mjs} +0 -0
  186. /package/fesm2022/{caribeng-ui-caribe-logo.mjs → caribeng-ui-logo.mjs} +0 -0
@@ -692,6 +692,328 @@ const CB_LOCALE_ES = {
692
692
  incorrectPassword: 'Contraseña incorrecta. Inténtalo de nuevo.',
693
693
  password: 'Contraseña',
694
694
  open: 'Abrir',
695
+ pdfOutline: 'Índice',
696
+ pdfSidebarView: 'Vista del panel',
697
+ pdfExpandItem: 'Expandir {0}',
698
+ pdfCollapseItem: 'Contraer {0}',
699
+ pdfDownloadFilled: 'Descargar con los datos del formulario',
700
+ pdfAnnotate: 'Anotar',
701
+ pdfHighlight: 'Resaltar',
702
+ pdfNote: 'Nota',
703
+ pdfDraw: 'Dibujar',
704
+ pdfSign: 'Firmar',
705
+ pdfColor: 'Color',
706
+ pdfColorYellow: 'Amarillo',
707
+ pdfColorGreen: 'Verde',
708
+ pdfColorBlue: 'Azul',
709
+ pdfColorRed: 'Rojo',
710
+ pdfAnnotations: 'Anotaciones',
711
+ pdfNoAnnotations: 'Aún no hay anotaciones.',
712
+ pdfHighlightOf: 'Resaltado: {0}',
713
+ pdfNoteOf: 'Nota: {0}',
714
+ pdfHighlightNoun: 'Resaltado',
715
+ pdfInkOf: 'Dibujo',
716
+ pdfSignatureOf: 'Firma',
717
+ pdfEmptyNote: 'Nota vacía',
718
+ pdfComment: 'Comentario',
719
+ pdfNoteText: 'Texto de la nota',
720
+ pdfDone: 'Listo',
721
+ pdfDeleteAnnotation: 'Eliminar anotación',
722
+ pdfAnnotationAdded: 'Añadido en la página {1}: {0}',
723
+ pdfAnnotationRemoved: 'Anotación eliminada',
724
+ pdfAnnotationMoved: 'Movido a {0} %, {1} %',
725
+ pdfSignatureResized: 'Ancho: {0} % de la página',
726
+ pdfNoteResized: 'Letra de {0} pt',
727
+ pdfAnnotationHint: 'Flechas para mover (Mayús, más rápido), + y − para cambiar el tamaño, Intro para editar y Supr para eliminar.',
728
+ pdfHighlightHint: 'Selecciona texto del documento para resaltarlo.',
729
+ pdfNoteHint: 'Haz clic en la página para poner la nota.',
730
+ pdfDrawHint: 'Dibuja sobre la página con el ratón, el dedo o el lápiz.',
731
+ pdfSignTitle: 'Añade tu firma',
732
+ pdfInsertSignature: 'Insertar firma',
733
+ pdfCancel: 'Cancelar',
734
+ pdfDownloadAnnotated: 'Descargar con las anotaciones',
735
+ editorCodeTools: 'Herramientas del bloque de código',
736
+ editorCodeLanguage: 'Lenguaje del código',
737
+ editorPlainText: 'Texto sin colores',
738
+ editorCopyCode: 'Copiar código',
739
+ editorCodeCopied: 'Copiado',
740
+ editorImageCaption: 'Pie de imagen',
741
+ editorTableCells: 'Celdas',
742
+ editorMergeRight: 'Combinar con la celda de la derecha',
743
+ editorMergeDown: 'Combinar con la celda de abajo',
744
+ editorSplitCell: 'Separar',
745
+ editorCollapsible: 'Desplegable',
746
+ editorCollapsibleTitle: 'Título del desplegable',
747
+ editorToc: 'Índice',
748
+ editorTocTitle: 'Contenido',
749
+ editorMentions: 'Personas que puedes mencionar',
750
+ editorDraftFound: 'Hay un borrador sin guardar del {0}.',
751
+ editorRestoreDraft: 'Restaurar',
752
+ editorDiscardDraft: 'Descartar',
753
+ editorDraftSaved: 'Borrador guardado a las {0}',
754
+ ganttChart: 'Diagrama de Gantt',
755
+ ganttScale: 'Escala de tiempo',
756
+ ganttDay: 'Día',
757
+ ganttWeek: 'Semana',
758
+ ganttMonth: 'Mes',
759
+ ganttWeekShort: 'S{0}',
760
+ ganttTask: 'Tarea',
761
+ ganttStart: 'Inicio',
762
+ ganttEnd: 'Fin',
763
+ ganttDuration: 'Duración',
764
+ ganttProgress: 'Avance',
765
+ ganttAssignee: 'Responsable',
766
+ ganttDays: '{0} d',
767
+ ganttExpand: 'Expandir {0}',
768
+ ganttCollapse: 'Contraer {0}',
769
+ ganttBarLabel: '{0}: {1}, {2} % completado',
770
+ ganttGroupLabel: 'Grupo {0}: {1}, {2} % completado',
771
+ ganttMilestoneLabel: 'Hito {0}: {1}',
772
+ ganttDependsOn: 'Depende de {0}',
773
+ ganttRemoveLink: 'Quitar la dependencia {0} → {1}',
774
+ ganttLinkAdded: 'Dependencia creada: {0} → {1}.',
775
+ ganttLinkRemoved: 'Dependencia quitada.',
776
+ ganttMoved: '{0}: {1}.',
777
+ ganttProgressChanged: '{0}: {1} % completado.',
778
+ ganttInstructions: 'Flechas: mover un día. Mayús + flechas: cambiar el fin. Alt + flechas: cambiar el inicio. + y −: avance. Supr: quitar sus dependencias. Enter: abrir la tarea.',
779
+ schedulerPrevious: 'Anterior',
780
+ schedulerNext: 'Siguiente',
781
+ schedulerViews: 'Vista del calendario',
782
+ schedulerMonth: 'Mes',
783
+ schedulerWeek: 'Semana',
784
+ schedulerDay: 'Día',
785
+ schedulerAgenda: 'Agenda',
786
+ schedulerAllDay: 'Todo el día',
787
+ schedulerMore: '+{0} más',
788
+ schedulerMoreLabel: 'Ver {0} eventos más del {1}',
789
+ schedulerOpenDay: 'Ver el {0}',
790
+ schedulerNewEvent: 'Nuevo evento el {0}',
791
+ schedulerNoEvents: 'No hay eventos en estos días.',
792
+ schedulerMoved: 'Evento movido: {0}.',
793
+ schedulerInstructions: 'Flechas izquierda y derecha: mover un día. Flechas arriba y abajo: mover una franja (en el mes, una semana). Mayús + flechas arriba y abajo: cambiar la duración. Enter: abrir el evento.',
794
+ dataGridToolbar: 'Acciones de la tabla',
795
+ dataGridAddRow: 'Añadir fila',
796
+ dataGridDeleteRow: 'Eliminar fila',
797
+ dataGridDeleteRows: 'Eliminar {0} filas',
798
+ dataGridOneError: '1 error',
799
+ dataGridErrors: '{0} errores',
800
+ dataGridChanged: '{0} celdas cambiadas',
801
+ dataGridRequired: 'Obligatorio.',
802
+ dataGridMin: 'El mínimo es {0}.',
803
+ dataGridMax: 'El máximo es {0}.',
804
+ dataGridInvalidNumber: 'No es un número.',
805
+ dataGridInvalidDate: 'No es una fecha válida.',
806
+ dataGridInvalidOption: 'No es una de las opciones.',
807
+ dataGridCopied: '{0} celdas copiadas.',
808
+ dataGridPasted: '{0} celdas pegadas.',
809
+ dataGridCleared: '{0} celdas borradas.',
810
+ dataGridUndone: 'Cambio deshecho.',
811
+ dataGridRedone: 'Cambio rehecho.',
812
+ dataGridRowAdded: 'Fila añadida.',
813
+ dataGridRowsDeleted: 'Filas eliminadas: {0}.',
814
+ dataGridInstructions: 'Flechas: moverse. Mayús + flechas: seleccionar. Enter o F2: editar; escribe para reemplazar; Escape cancela. Supr: borrar. Ctrl + C, X y V: copiar, cortar y pegar. Ctrl + Z e Y: deshacer y rehacer. Ctrl + D: rellenar hacia abajo.',
815
+ dataGridReadonlyInstructions: 'Flechas: moverse. Mayús + flechas: seleccionar. Ctrl + C: copiar.',
816
+ dynamicFormSubmit: 'Enviar',
817
+ dynamicFormRequired: 'Este campo es obligatorio.',
818
+ dynamicFormMin: 'El valor mínimo es {0}.',
819
+ dynamicFormMax: 'El valor máximo es {0}.',
820
+ dynamicFormMinLength: 'Escribe al menos {0} caracteres.',
821
+ dynamicFormMaxLength: 'Escribe como máximo {0} caracteres.',
822
+ dynamicFormEmail: 'Escribe un correo válido.',
823
+ dynamicFormPattern: 'El formato no es válido.',
824
+ dynamicFormInvalid: 'El valor no es válido.',
825
+ dynamicFormSummaryOne: 'Revisa 1 campo:',
826
+ dynamicFormSummary: 'Revisa {0} campos:',
827
+ dynamicFormNext: 'Siguiente',
828
+ dynamicFormBack: 'Atrás',
829
+ dynamicFormStep: 'Paso {0} de {1}:',
830
+ dynamicFormAdd: 'Añadir {0}',
831
+ dynamicFormRemove: 'Quitar {0}',
832
+ dynamicFormItem: 'Elemento {0}',
833
+ dynamicFormAdded: '{0} añadido.',
834
+ dynamicFormRemoved: '{0} quitado.',
835
+ tableTotal: 'Total',
836
+ tableSubtotal: 'Subtotal {0}',
837
+ tableScrollRegion: 'Tabla con desplazamiento',
838
+ accountPickerPlaceholder: 'Buscar cuenta por código o nombre',
839
+ accountPickerResults: '{0} cuentas',
840
+ journalHeader: 'Datos del comprobante',
841
+ journalDate: 'Fecha',
842
+ journalType: 'Tipo',
843
+ journalNumber: 'Número',
844
+ journalDescription: 'Descripción',
845
+ journalLines: 'Líneas del comprobante',
846
+ journalAccount: 'Cuenta',
847
+ journalThirdParty: 'Tercero',
848
+ journalCostCenter: 'Centro de costo',
849
+ journalLineDescription: 'Detalle',
850
+ journalDebit: 'Débito',
851
+ journalCredit: 'Crédito',
852
+ journalDifference: 'Diferencia',
853
+ journalBalanced: 'Cuadrado',
854
+ journalUnbalanced: 'Descuadrado',
855
+ journalBalance: 'Cuadrar',
856
+ journalSave: 'Guardar comprobante',
857
+ journalAccountRequired: 'Elige la cuenta.',
858
+ journalAmountRequired: 'Escribe un débito o un crédito.',
859
+ journalThirdPartyRequired: 'Esta cuenta exige tercero.',
860
+ journalCannotSave: 'No se puede guardar:',
861
+ journalErrDate: 'Falta la fecha.',
862
+ journalErrLines: 'Necesita al menos dos líneas con valor.',
863
+ journalErrUnbalanced: 'Los débitos y los créditos no cuadran (diferencia {0}).',
864
+ journalErrCells: 'Hay {0} celdas con errores en las líneas.',
865
+ periodPickerPlaceholder: 'Elegir periodo',
866
+ periodPresets: 'Atajos',
867
+ periodKind: 'Tipo de periodo',
868
+ periodMonth: 'Mes',
869
+ periodQuarterTab: 'Trimestre',
870
+ periodYear: 'Año',
871
+ periodPrevYear: 'Año anterior',
872
+ periodNextYear: 'Año siguiente',
873
+ periodPrevYears: 'Años anteriores',
874
+ periodNextYears: 'Años siguientes',
875
+ periodQuarter: 'T{0} {1}',
876
+ periodQuarterShort: 'T{0}',
877
+ periodFiscalQuarter: 'T{0} AF {1}',
878
+ periodFiscalYear: 'Año fiscal {0}',
879
+ periodClosed: 'cerrado',
880
+ periodThisMonth: 'Este mes',
881
+ periodLastMonth: 'Mes anterior',
882
+ periodThisQuarter: 'Este trimestre',
883
+ periodLastQuarter: 'Trimestre anterior',
884
+ periodYearToDate: 'Año a la fecha',
885
+ periodThisYear: 'Este año',
886
+ periodLastYear: 'Año anterior',
887
+ reportTitle: 'Informe financiero',
888
+ reportToolbar: 'Opciones del informe',
889
+ reportLevel: 'Nivel de detalle',
890
+ reportLevelN: 'Abrir hasta el nivel {0}',
891
+ reportHideZero: 'Ocultar cuentas en cero',
892
+ reportExcel: 'Excel',
893
+ reportPrint: 'Imprimir',
894
+ reportVariation: 'Variación',
895
+ agingTitle: 'Antigüedad de cartera',
896
+ agingAsOf: 'Con corte al {0}',
897
+ agingParty: 'Tercero',
898
+ agingCurrent: 'Por vencer',
899
+ agingRange: '{0}–{1} días',
900
+ agingOver: 'Más de {0} días',
901
+ agingMaxDays: 'Más antiguo',
902
+ agingDays: '{0} días',
903
+ agingDueIn: 'Vence en {0} días',
904
+ agingDocs: '({0} doc.)',
905
+ agingDocsOf: 'Documentos de {0}',
906
+ agingNumber: 'Documento',
907
+ agingDate: 'Fecha',
908
+ agingDue: 'Vence',
909
+ agingOverdue: 'Días vencidos',
910
+ agingBalance: 'Saldo',
911
+ agingSummary: 'Resumen',
912
+ agingDetail: 'Detalle',
913
+ importStepFile: 'Archivo',
914
+ importStepMap: 'Columnas',
915
+ importStepReview: 'Revisión',
916
+ importDrop: 'Arrastra aquí un archivo de Excel (.xlsx) o CSV',
917
+ importChoose: 'Elegir archivo',
918
+ importPaste: 'O pega los datos desde una hoja de cálculo',
919
+ importPasteHint: 'Copia las celdas en Excel o Google Sheets y pégalas aquí',
920
+ importSheet: 'Hoja',
921
+ importHeader: 'La primera fila tiene los encabezados',
922
+ importRowsRead: '{0} filas y {1} columnas leídas.',
923
+ importSample: 'Primeras filas del archivo',
924
+ importMapHint: 'Elige qué columna del archivo corresponde a cada campo. Las que tienen el mismo nombre ya están asignadas.',
925
+ importField: 'Campo',
926
+ importColumn: 'Columna del archivo',
927
+ importExample: 'Ejemplo',
928
+ importUnmapped: '— Sin asignar —',
929
+ importColumnN: 'Columna {0}',
930
+ importMissing: 'Falta asignar: {0}.',
931
+ importValid: '{0} filas válidas',
932
+ importInvalid: '{0} filas con errores',
933
+ importOnlyValid: 'Importar solo las filas válidas',
934
+ importPreview: 'Vista previa de la importación',
935
+ importBack: 'Atrás',
936
+ importNext: 'Siguiente',
937
+ importDo: 'Importar {0} filas',
938
+ importErrFile: 'No se pudo leer el archivo. Usa un .xlsx, .csv o .txt.',
939
+ importErrRequired: 'Obligatorio.',
940
+ importErrNumber: 'No es un número.',
941
+ importErrDate: 'No es una fecha válida.',
942
+ importErrBoolean: 'Debe ser Sí o No.',
943
+ reconStatement: 'Extracto bancario',
944
+ reconLedger: 'Libros',
945
+ reconStatementPending: 'Pendiente en el extracto',
946
+ reconLedgerPending: 'Pendiente en libros',
947
+ reconProgress: 'Conciliado',
948
+ reconItems: '{0} movimientos',
949
+ reconToolbar: 'Acciones de conciliación',
950
+ reconAuto: 'Conciliar automáticamente',
951
+ reconMatch: 'Emparejar',
952
+ reconUnmatch: 'Deshacer emparejamiento',
953
+ reconSelection: 'Extracto {0} · Libros {1}',
954
+ reconDiff: 'diferencia {0}',
955
+ reconOnlyPending: 'Solo pendientes',
956
+ reconMatched: 'conciliado',
957
+ reconCreate: 'Crear asiento',
958
+ reconCreateFor: 'Crear asiento para {0}',
959
+ reconNothingPending: 'No hay movimientos pendientes.',
960
+ reconAutoDone: '{0} emparejamientos automáticos.',
961
+ reconMatchedDone: 'Movimientos emparejados.',
962
+ reconUnmatchedDone: '{0} emparejamientos deshechos.',
963
+ pivotTitle: 'Tabla dinámica',
964
+ pivotConfig: 'Configuración de la tabla dinámica',
965
+ pivotRows: 'Filas',
966
+ pivotColumns: 'Columnas',
967
+ pivotAggregate: 'Cálculo',
968
+ pivotNone: '— Ninguna —',
969
+ pivotEmpty: '(vacío)',
970
+ pivotSum: 'Suma',
971
+ pivotCount: 'Cuenta',
972
+ pivotAvg: 'Promedio',
973
+ pivotMin: 'Mínimo',
974
+ pivotMax: 'Máximo',
975
+ kpiPrevious: 'Periodo anterior',
976
+ kpiUp: 'sube {0}',
977
+ kpiDown: 'baja {0}',
978
+ kpiSame: 'sin cambio',
979
+ kpiTrend: 'Tendencia de {2} periodos: de {0} a {1}',
980
+ kpiGoal: 'Avance hacia la meta',
981
+ kpiOfGoal: '{0} % de la meta ({1})',
982
+ auditTitle: 'Auditoría',
983
+ auditSearch: 'Buscar en el historial',
984
+ auditUser: 'Usuario',
985
+ auditAction: 'Acción',
986
+ auditEntity: 'Registro',
987
+ auditAllUsers: 'Todos los usuarios',
988
+ auditAllActions: 'Todas las acciones',
989
+ auditCount: '{0} registros',
990
+ auditCreated: 'creó',
991
+ auditUpdated: 'modificó',
992
+ auditDeleted: 'eliminó',
993
+ auditChanges: '{0} cambios',
994
+ auditChangesOne: '1 cambio',
995
+ auditChangesOf: 'Cambios en {0}',
996
+ auditField: 'Campo',
997
+ auditBefore: 'Antes',
998
+ auditAfter: 'Después',
999
+ auditEmpty: '(vacío)',
1000
+ auditNone: 'No hay registros con estos filtros.',
1001
+ auditTime: 'Hora',
1002
+ auditNote: 'Nota',
1003
+ documentTaxId: 'NIT',
1004
+ documentDate: 'Fecha',
1005
+ documentParty: 'Cliente',
1006
+ documentCode: 'Código',
1007
+ documentDescription: 'Descripción',
1008
+ documentQuantity: 'Cant.',
1009
+ documentUnitPrice: 'Valor unitario',
1010
+ documentDiscount: 'Descuento',
1011
+ documentTax: 'Impuesto',
1012
+ documentAmount: 'Valor',
1013
+ documentSubtotal: 'Subtotal',
1014
+ documentTotal: 'Total a pagar',
1015
+ documentInWords: 'Son',
1016
+ documentNotes: 'Observaciones',
695
1017
  scrollableArea: 'Área desplazable',
696
1018
  scrollTop: 'Volver arriba',
697
1019
  resizePanels: 'Redimensionar paneles',
@@ -849,6 +1171,177 @@ const CB_LOCALE_ES = {
849
1171
  quickFormat: 'Formato rápido',
850
1172
  insertBlock: 'Insertar bloque',
851
1173
  paragraph: 'Párrafo',
1174
+ // --- Comments ---
1175
+ commentsFeed: 'Comentarios y actividad',
1176
+ commentsShow: 'Mostrar',
1177
+ commentsAll: 'Todo',
1178
+ commentsOnly: 'Comentarios',
1179
+ commentsActivity: 'Actividad',
1180
+ commentsEmpty: 'Todavía no hay comentarios.',
1181
+ commentsWrite: 'Escribe un comentario… (@ para mencionar)',
1182
+ commentsWriteReply: 'Escribe una respuesta…',
1183
+ commentsNew: 'Nuevo comentario',
1184
+ commentsEditing: 'Editar comentario',
1185
+ commentsReplyTo: 'Responder a {0}',
1186
+ commentsRepliesTo: 'Respuestas a {0}',
1187
+ commentsSend: 'Comentar',
1188
+ commentsReply: 'Responder',
1189
+ commentsEdit: 'Editar',
1190
+ commentsDelete: 'Eliminar',
1191
+ commentsDeleteConfirm: '¿Eliminar este comentario?',
1192
+ commentsEdited: 'editado',
1193
+ commentsDeleted: 'Comentario eliminado',
1194
+ commentsAddReaction: 'Añadir reacción',
1195
+ commentsReactions: 'Reacciones',
1196
+ commentsReactionLabel: '{0}, {1}: {2}',
1197
+ commentsYou: 'tú',
1198
+ commentsJustNow: 'ahora mismo',
1199
+ commentsPosted: 'Comentario publicado',
1200
+ commentsSaved: 'Comentario guardado',
1201
+ commentsShortcut: 'Ctrl + Enter para enviar',
1202
+ // --- Notification center ---
1203
+ notificationsTitle: 'Notificaciones',
1204
+ notificationsBellUnread: 'Notificaciones, {0} sin leer',
1205
+ notificationsMarkAllRead: 'Marcar todas como leídas',
1206
+ notificationsShow: 'Mostrar',
1207
+ notificationsAll: 'Todas',
1208
+ notificationsUnread: 'No leídas',
1209
+ notificationsUnreadItem: 'No leída',
1210
+ notificationsMarkRead: 'Marcar como leída: {0}',
1211
+ notificationsMarkUnread: 'Marcar como no leída: {0}',
1212
+ notificationsMarkReadShort: 'Marcar como leída',
1213
+ notificationsMarkUnreadShort: 'Marcar como no leída',
1214
+ notificationsEmpty: 'No tienes notificaciones.',
1215
+ notificationsAllRead: 'Estás al día: no hay avisos sin leer.',
1216
+ notificationsViewAll: 'Ver todas',
1217
+ notificationsToday: 'Hoy',
1218
+ notificationsYesterday: 'Ayer',
1219
+ notificationsEarlier: 'Anteriores',
1220
+ notificationsJustNow: 'ahora mismo',
1221
+ notificationsNew: 'Nueva notificación: {0}',
1222
+ notificationsNewMany: '{0} notificaciones nuevas',
1223
+ notificationsMarkedRead: 'Marcada como leída',
1224
+ notificationsMarkedUnread: 'Marcada como no leída',
1225
+ notificationsMarkedAllRead: 'Todas marcadas como leídas',
1226
+ notificationsRemoved: 'Notificación eliminada',
1227
+ // --- Signature pad ---
1228
+ signaturePad: 'Área de firma',
1229
+ signatureEmptyState: 'vacía',
1230
+ signatureSignedState: 'firmada',
1231
+ signaturePlaceholder: 'Firma aquí',
1232
+ signatureModes: 'Forma de firmar',
1233
+ signatureDraw: 'Dibujar',
1234
+ signatureType: 'Escribir',
1235
+ signatureTypeLabel: 'Escribe tu nombre',
1236
+ signatureHint: 'Dibuja tu firma con el ratón, el dedo o un lápiz, o elige «Escribir» para teclear tu nombre.',
1237
+ signatureHintDraw: 'Dibuja tu firma con el ratón, el dedo o un lápiz.',
1238
+ signatureUndo: 'Deshacer trazo',
1239
+ signatureClear: 'Borrar firma',
1240
+ signatureCleared: 'Firma borrada',
1241
+ signatureUndone: 'Trazo deshecho',
1242
+ // --- Image cropper ---
1243
+ cropperValue: '{0} × {1} de la imagen ({2} × {3} píxeles)',
1244
+ cropperRatio: 'Proporción',
1245
+ cropperRotateLeft: 'Girar a la izquierda',
1246
+ cropperRotateRight: 'Girar a la derecha',
1247
+ cropperRotatedLeft: 'Imagen girada a la izquierda',
1248
+ cropperRotatedRight: 'Imagen girada a la derecha',
1249
+ cropperChoose: 'Elegir imagen',
1250
+ cropperChange: 'Cambiar imagen',
1251
+ cropperEmpty: 'Arrastra una imagen aquí o elígela desde tu equipo.',
1252
+ cropperPreview: 'Vista previa del recorte',
1253
+ cropperDone: 'Imagen recortada',
1254
+ cropperInvalidFile: 'El archivo no es una imagen.',
1255
+ cropperLoadError: 'No se pudo cargar la imagen.',
1256
+ // --- Infinite scroll ---
1257
+ infiniteLoading: 'Cargando más resultados…',
1258
+ infiniteLoadMore: 'Cargar más',
1259
+ infiniteLoaded: '{0} resultados más, {1} en total',
1260
+ infiniteEnd: 'No hay más resultados',
1261
+ infiniteError: 'No se pudieron cargar más resultados.',
1262
+ infiniteRetry: 'Reintentar',
1263
+ // --- Media player ---
1264
+ mediaVideo: 'Reproductor de vídeo',
1265
+ mediaAudio: 'Reproductor de audio',
1266
+ mediaControls: 'Controles',
1267
+ mediaPlay: 'Reproducir',
1268
+ mediaPause: 'Pausar',
1269
+ mediaBack: 'Retroceder {0} segundos',
1270
+ mediaForward: 'Avanzar {0} segundos',
1271
+ mediaSeek: 'Progreso',
1272
+ mediaTimeOf: '{0} de {1}',
1273
+ mediaHours: 'h',
1274
+ mediaMinutes: 'min',
1275
+ mediaSeconds: 's',
1276
+ mediaMute: 'Silenciar',
1277
+ mediaVolume: 'Volumen',
1278
+ mediaVolumeSet: 'Volumen {0} %',
1279
+ mediaSpeed: 'Velocidad',
1280
+ mediaSpeedSet: 'Velocidad {0}',
1281
+ mediaCaptions: 'Subtítulos',
1282
+ mediaCaptionsLanguage: 'Idioma de los subtítulos',
1283
+ mediaCaptionsNone: 'Sin subtítulos',
1284
+ mediaCaptionsOn: 'Subtítulos: {0}',
1285
+ mediaCaptionsOff: 'Subtítulos desactivados',
1286
+ mediaPip: 'Imagen en imagen',
1287
+ mediaFullscreen: 'Pantalla completa',
1288
+ mediaExitFullscreen: 'Salir de pantalla completa',
1289
+ mediaTranscript: 'Transcripción',
1290
+ mediaError: 'No se pudo cargar el contenido.',
1291
+ mediaShortcuts: 'Atajos: Espacio o K reproduce y pausa; flechas izquierda y derecha, 5 segundos; J y L, 10 segundos; flechas arriba y abajo, volumen; M silencia; F pantalla completa; C subtítulos; 0 a 9 saltan a ese punto.',
1292
+ // --- Flow editor ---
1293
+ flowEditor: 'Editor de flujo',
1294
+ flowDiagram: 'Diagrama',
1295
+ flowList: 'Lista',
1296
+ flowView: 'Vista',
1297
+ flowAdd: 'Añadir',
1298
+ flowStart: 'Inicio',
1299
+ flowTask: 'Tarea',
1300
+ flowDecision: 'Decisión',
1301
+ flowEnd: 'Fin',
1302
+ flowNodeOf: '{0}: {1}',
1303
+ flowExits: 'Salidas: {0}',
1304
+ flowNoExits: 'Sin salidas',
1305
+ flowExitsOf: 'Salidas de {0}',
1306
+ flowEdgeOf: 'Conexión de {0} a {1}',
1307
+ flowConnect: 'Conectar',
1308
+ flowConnectFrom: 'Conectar desde {0}: ve al nodo de destino y pulsa Intro. Escape cancela.',
1309
+ flowConnected: 'Conectado: {0} → {1}',
1310
+ flowCannotConnect: 'No se puede conectar {0} con {1}.',
1311
+ flowConnectCancelled: 'Conexión cancelada',
1312
+ flowDelete: 'Eliminar',
1313
+ flowDeleteNode: 'Eliminar {0}',
1314
+ flowAdded: 'Añadido: {0}',
1315
+ flowRemoved: 'Eliminado: {0}',
1316
+ flowNameOf: 'Nombre ({0})',
1317
+ flowEdgeLabel: 'Etiqueta',
1318
+ flowEdgeLabelOf: 'Etiqueta de {0} a {1}',
1319
+ flowConnectTo: 'Conectar {0} con',
1320
+ flowChooseTarget: 'Elige el destino',
1321
+ flowAddConnection: 'Añadir conexión',
1322
+ flowRemoveConnection: 'Quitar la conexión a {0}',
1323
+ flowLayout: 'Ordenar',
1324
+ flowLaidOut: 'Diagrama ordenado',
1325
+ flowZoomIn: 'Acercar',
1326
+ flowZoomOut: 'Alejar',
1327
+ flowFit: 'Ajustar a la vista',
1328
+ flowZoom: 'Zoom',
1329
+ flowEmpty: 'El flujo está vacío. Añade un inicio para empezar.',
1330
+ flowIssues: 'Problemas ({0})',
1331
+ flowNoIssues: 'El flujo es válido.',
1332
+ flowIssueOf: 'Problema: {0}',
1333
+ flowIssueNoStart: 'Falta un nodo de inicio.',
1334
+ flowIssueManyStarts: 'Hay más de un inicio: {0}.',
1335
+ flowIssueNoEnd: 'Falta un nodo de fin.',
1336
+ flowIssueStartIncoming: '{0} es un inicio y le llegan conexiones.',
1337
+ flowIssueEndOutgoing: '{0} es un fin y tiene salidas.',
1338
+ flowIssueDeadEnd: '{0} no tiene salida.',
1339
+ flowIssueBranches: 'La decisión {0} necesita al menos dos salidas.',
1340
+ flowIssueBranchLabel: 'Alguna salida de la decisión {0} no tiene etiqueta.',
1341
+ flowIssueUnreachable: '{0} no se alcanza desde el inicio.',
1342
+ flowNodeHint: 'Flechas para mover (Mayús, más), Intro para renombrar, C para conectar con otro nodo y Supr para eliminar.',
1343
+ flowReadonlyHint: 'Intro para abrir.',
1344
+ flowEdgeHint: 'Intro para editar la etiqueta y Supr para eliminar.',
852
1345
  };
853
1346
  /** Inglés. */
854
1347
  const CB_LOCALE_EN = {
@@ -1205,6 +1698,328 @@ const CB_LOCALE_EN = {
1205
1698
  incorrectPassword: 'Incorrect password. Try again.',
1206
1699
  password: 'Password',
1207
1700
  open: 'Open',
1701
+ pdfOutline: 'Outline',
1702
+ pdfSidebarView: 'Panel view',
1703
+ pdfExpandItem: 'Expand {0}',
1704
+ pdfCollapseItem: 'Collapse {0}',
1705
+ pdfDownloadFilled: 'Download with the form data',
1706
+ pdfAnnotate: 'Annotate',
1707
+ pdfHighlight: 'Highlight',
1708
+ pdfNote: 'Note',
1709
+ pdfDraw: 'Draw',
1710
+ pdfSign: 'Sign',
1711
+ pdfColor: 'Color',
1712
+ pdfColorYellow: 'Yellow',
1713
+ pdfColorGreen: 'Green',
1714
+ pdfColorBlue: 'Blue',
1715
+ pdfColorRed: 'Red',
1716
+ pdfAnnotations: 'Annotations',
1717
+ pdfNoAnnotations: 'No annotations yet.',
1718
+ pdfHighlightOf: 'Highlight: {0}',
1719
+ pdfNoteOf: 'Note: {0}',
1720
+ pdfHighlightNoun: 'Highlight',
1721
+ pdfInkOf: 'Drawing',
1722
+ pdfSignatureOf: 'Signature',
1723
+ pdfEmptyNote: 'Empty note',
1724
+ pdfComment: 'Comment',
1725
+ pdfNoteText: 'Note text',
1726
+ pdfDone: 'Done',
1727
+ pdfDeleteAnnotation: 'Delete annotation',
1728
+ pdfAnnotationAdded: 'Added on page {1}: {0}',
1729
+ pdfAnnotationRemoved: 'Annotation removed',
1730
+ pdfAnnotationMoved: 'Moved to {0}%, {1}%',
1731
+ pdfSignatureResized: 'Width: {0}% of the page',
1732
+ pdfNoteResized: '{0} pt text',
1733
+ pdfAnnotationHint: 'Arrows to move (Shift, faster), + and − to resize, Enter to edit and Delete to remove.',
1734
+ pdfHighlightHint: 'Select text in the document to highlight it.',
1735
+ pdfNoteHint: 'Click on the page to place the note.',
1736
+ pdfDrawHint: 'Draw on the page with the mouse, finger or pen.',
1737
+ pdfSignTitle: 'Add your signature',
1738
+ pdfInsertSignature: 'Insert signature',
1739
+ pdfCancel: 'Cancel',
1740
+ pdfDownloadAnnotated: 'Download with the annotations',
1741
+ editorCodeTools: 'Code block tools',
1742
+ editorCodeLanguage: 'Code language',
1743
+ editorPlainText: 'Plain text',
1744
+ editorCopyCode: 'Copy code',
1745
+ editorCodeCopied: 'Copied',
1746
+ editorImageCaption: 'Caption',
1747
+ editorTableCells: 'Cells',
1748
+ editorMergeRight: 'Merge with the cell on the right',
1749
+ editorMergeDown: 'Merge with the cell below',
1750
+ editorSplitCell: 'Split',
1751
+ editorCollapsible: 'Collapsible section',
1752
+ editorCollapsibleTitle: 'Collapsible title',
1753
+ editorToc: 'Table of contents',
1754
+ editorTocTitle: 'Contents',
1755
+ editorMentions: 'People you can mention',
1756
+ editorDraftFound: 'There is an unsaved draft from {0}.',
1757
+ editorRestoreDraft: 'Restore',
1758
+ editorDiscardDraft: 'Discard',
1759
+ editorDraftSaved: 'Draft saved at {0}',
1760
+ ganttChart: 'Gantt chart',
1761
+ ganttScale: 'Time scale',
1762
+ ganttDay: 'Day',
1763
+ ganttWeek: 'Week',
1764
+ ganttMonth: 'Month',
1765
+ ganttWeekShort: 'W{0}',
1766
+ ganttTask: 'Task',
1767
+ ganttStart: 'Start',
1768
+ ganttEnd: 'End',
1769
+ ganttDuration: 'Duration',
1770
+ ganttProgress: 'Progress',
1771
+ ganttAssignee: 'Assignee',
1772
+ ganttDays: '{0} d',
1773
+ ganttExpand: 'Expand {0}',
1774
+ ganttCollapse: 'Collapse {0}',
1775
+ ganttBarLabel: '{0}: {1}, {2}% complete',
1776
+ ganttGroupLabel: 'Group {0}: {1}, {2}% complete',
1777
+ ganttMilestoneLabel: 'Milestone {0}: {1}',
1778
+ ganttDependsOn: 'Depends on {0}',
1779
+ ganttRemoveLink: 'Remove the dependency {0} → {1}',
1780
+ ganttLinkAdded: 'Dependency created: {0} → {1}.',
1781
+ ganttLinkRemoved: 'Dependency removed.',
1782
+ ganttMoved: '{0}: {1}.',
1783
+ ganttProgressChanged: '{0}: {1}% complete.',
1784
+ ganttInstructions: 'Arrows: move one day. Shift + arrows: change the end. Alt + arrows: change the start. + and −: progress. Delete: remove its dependencies. Enter: open the task.',
1785
+ schedulerPrevious: 'Previous',
1786
+ schedulerNext: 'Next',
1787
+ schedulerViews: 'Calendar view',
1788
+ schedulerMonth: 'Month',
1789
+ schedulerWeek: 'Week',
1790
+ schedulerDay: 'Day',
1791
+ schedulerAgenda: 'Agenda',
1792
+ schedulerAllDay: 'All day',
1793
+ schedulerMore: '+{0} more',
1794
+ schedulerMoreLabel: 'See {0} more events on {1}',
1795
+ schedulerOpenDay: 'Show {0}',
1796
+ schedulerNewEvent: 'New event on {0}',
1797
+ schedulerNoEvents: 'No events in these days.',
1798
+ schedulerMoved: 'Event moved: {0}.',
1799
+ schedulerInstructions: 'Left and right arrows: move one day. Up and down arrows: move one slot (one week in the month). Shift + up and down arrows: change the duration. Enter: open the event.',
1800
+ dataGridToolbar: 'Table actions',
1801
+ dataGridAddRow: 'Add row',
1802
+ dataGridDeleteRow: 'Delete row',
1803
+ dataGridDeleteRows: 'Delete {0} rows',
1804
+ dataGridOneError: '1 error',
1805
+ dataGridErrors: '{0} errors',
1806
+ dataGridChanged: '{0} changed cells',
1807
+ dataGridRequired: 'Required.',
1808
+ dataGridMin: 'The minimum is {0}.',
1809
+ dataGridMax: 'The maximum is {0}.',
1810
+ dataGridInvalidNumber: 'Not a number.',
1811
+ dataGridInvalidDate: 'Not a valid date.',
1812
+ dataGridInvalidOption: 'Not one of the options.',
1813
+ dataGridCopied: '{0} cells copied.',
1814
+ dataGridPasted: '{0} cells pasted.',
1815
+ dataGridCleared: '{0} cells cleared.',
1816
+ dataGridUndone: 'Change undone.',
1817
+ dataGridRedone: 'Change redone.',
1818
+ dataGridRowAdded: 'Row added.',
1819
+ dataGridRowsDeleted: 'Rows deleted: {0}.',
1820
+ dataGridInstructions: 'Arrows: move. Shift + arrows: select. Enter or F2: edit; type to replace; Escape cancels. Delete: clear. Ctrl + C, X and V: copy, cut and paste. Ctrl + Z and Y: undo and redo. Ctrl + D: fill down.',
1821
+ dataGridReadonlyInstructions: 'Arrows: move. Shift + arrows: select. Ctrl + C: copy.',
1822
+ dynamicFormSubmit: 'Submit',
1823
+ dynamicFormRequired: 'This field is required.',
1824
+ dynamicFormMin: 'The minimum value is {0}.',
1825
+ dynamicFormMax: 'The maximum value is {0}.',
1826
+ dynamicFormMinLength: 'Enter at least {0} characters.',
1827
+ dynamicFormMaxLength: 'Enter at most {0} characters.',
1828
+ dynamicFormEmail: 'Enter a valid email.',
1829
+ dynamicFormPattern: 'The format is not valid.',
1830
+ dynamicFormInvalid: 'The value is not valid.',
1831
+ dynamicFormSummaryOne: 'Check 1 field:',
1832
+ dynamicFormSummary: 'Check {0} fields:',
1833
+ dynamicFormNext: 'Next',
1834
+ dynamicFormBack: 'Back',
1835
+ dynamicFormStep: 'Step {0} of {1}:',
1836
+ dynamicFormAdd: 'Add {0}',
1837
+ dynamicFormRemove: 'Remove {0}',
1838
+ dynamicFormItem: 'Item {0}',
1839
+ dynamicFormAdded: '{0} added.',
1840
+ dynamicFormRemoved: '{0} removed.',
1841
+ tableTotal: 'Total',
1842
+ tableSubtotal: 'Subtotal {0}',
1843
+ tableScrollRegion: 'Scrollable table',
1844
+ accountPickerPlaceholder: 'Search account by code or name',
1845
+ accountPickerResults: '{0} accounts',
1846
+ journalHeader: 'Voucher details',
1847
+ journalDate: 'Date',
1848
+ journalType: 'Type',
1849
+ journalNumber: 'Number',
1850
+ journalDescription: 'Description',
1851
+ journalLines: 'Voucher lines',
1852
+ journalAccount: 'Account',
1853
+ journalThirdParty: 'Third party',
1854
+ journalCostCenter: 'Cost center',
1855
+ journalLineDescription: 'Detail',
1856
+ journalDebit: 'Debit',
1857
+ journalCredit: 'Credit',
1858
+ journalDifference: 'Difference',
1859
+ journalBalanced: 'Balanced',
1860
+ journalUnbalanced: 'Unbalanced',
1861
+ journalBalance: 'Balance',
1862
+ journalSave: 'Save voucher',
1863
+ journalAccountRequired: 'Choose the account.',
1864
+ journalAmountRequired: 'Enter a debit or a credit.',
1865
+ journalThirdPartyRequired: 'This account requires a third party.',
1866
+ journalCannotSave: 'Cannot save:',
1867
+ journalErrDate: 'The date is missing.',
1868
+ journalErrLines: 'At least two lines with an amount are needed.',
1869
+ journalErrUnbalanced: 'Debits and credits do not balance (difference {0}).',
1870
+ journalErrCells: 'There are {0} cells with errors in the lines.',
1871
+ periodPickerPlaceholder: 'Choose period',
1872
+ periodPresets: 'Shortcuts',
1873
+ periodKind: 'Period type',
1874
+ periodMonth: 'Month',
1875
+ periodQuarterTab: 'Quarter',
1876
+ periodYear: 'Year',
1877
+ periodPrevYear: 'Previous year',
1878
+ periodNextYear: 'Next year',
1879
+ periodPrevYears: 'Previous years',
1880
+ periodNextYears: 'Next years',
1881
+ periodQuarter: 'Q{0} {1}',
1882
+ periodQuarterShort: 'Q{0}',
1883
+ periodFiscalQuarter: 'Q{0} FY {1}',
1884
+ periodFiscalYear: 'Fiscal year {0}',
1885
+ periodClosed: 'closed',
1886
+ periodThisMonth: 'This month',
1887
+ periodLastMonth: 'Last month',
1888
+ periodThisQuarter: 'This quarter',
1889
+ periodLastQuarter: 'Last quarter',
1890
+ periodYearToDate: 'Year to date',
1891
+ periodThisYear: 'This year',
1892
+ periodLastYear: 'Last year',
1893
+ reportTitle: 'Financial report',
1894
+ reportToolbar: 'Report options',
1895
+ reportLevel: 'Detail level',
1896
+ reportLevelN: 'Open down to level {0}',
1897
+ reportHideZero: 'Hide zero accounts',
1898
+ reportExcel: 'Excel',
1899
+ reportPrint: 'Print',
1900
+ reportVariation: 'Variation',
1901
+ agingTitle: 'Aging report',
1902
+ agingAsOf: 'As of {0}',
1903
+ agingParty: 'Party',
1904
+ agingCurrent: 'Current',
1905
+ agingRange: '{0}–{1} days',
1906
+ agingOver: 'Over {0} days',
1907
+ agingMaxDays: 'Oldest',
1908
+ agingDays: '{0} days',
1909
+ agingDueIn: 'Due in {0} days',
1910
+ agingDocs: '({0} docs)',
1911
+ agingDocsOf: 'Documents of {0}',
1912
+ agingNumber: 'Document',
1913
+ agingDate: 'Date',
1914
+ agingDue: 'Due',
1915
+ agingOverdue: 'Days overdue',
1916
+ agingBalance: 'Balance',
1917
+ agingSummary: 'Summary',
1918
+ agingDetail: 'Detail',
1919
+ importStepFile: 'File',
1920
+ importStepMap: 'Columns',
1921
+ importStepReview: 'Review',
1922
+ importDrop: 'Drag an Excel (.xlsx) or CSV file here',
1923
+ importChoose: 'Choose file',
1924
+ importPaste: 'Or paste the data from a spreadsheet',
1925
+ importPasteHint: 'Copy the cells in Excel or Google Sheets and paste them here',
1926
+ importSheet: 'Sheet',
1927
+ importHeader: 'The first row has the headers',
1928
+ importRowsRead: '{0} rows and {1} columns read.',
1929
+ importSample: 'First rows of the file',
1930
+ importMapHint: 'Choose which file column matches each field. Those with the same name are already assigned.',
1931
+ importField: 'Field',
1932
+ importColumn: 'File column',
1933
+ importExample: 'Example',
1934
+ importUnmapped: '— Not assigned —',
1935
+ importColumnN: 'Column {0}',
1936
+ importMissing: 'Still to assign: {0}.',
1937
+ importValid: '{0} valid rows',
1938
+ importInvalid: '{0} rows with errors',
1939
+ importOnlyValid: 'Import only the valid rows',
1940
+ importPreview: 'Import preview',
1941
+ importBack: 'Back',
1942
+ importNext: 'Next',
1943
+ importDo: 'Import {0} rows',
1944
+ importErrFile: 'The file could not be read. Use an .xlsx, .csv or .txt file.',
1945
+ importErrRequired: 'Required.',
1946
+ importErrNumber: 'Not a number.',
1947
+ importErrDate: 'Not a valid date.',
1948
+ importErrBoolean: 'Must be Yes or No.',
1949
+ reconStatement: 'Bank statement',
1950
+ reconLedger: 'Books',
1951
+ reconStatementPending: 'Pending in the statement',
1952
+ reconLedgerPending: 'Pending in the books',
1953
+ reconProgress: 'Reconciled',
1954
+ reconItems: '{0} items',
1955
+ reconToolbar: 'Reconciliation actions',
1956
+ reconAuto: 'Auto-reconcile',
1957
+ reconMatch: 'Match',
1958
+ reconUnmatch: 'Unmatch',
1959
+ reconSelection: 'Statement {0} · Books {1}',
1960
+ reconDiff: 'difference {0}',
1961
+ reconOnlyPending: 'Pending only',
1962
+ reconMatched: 'reconciled',
1963
+ reconCreate: 'Create entry',
1964
+ reconCreateFor: 'Create an entry for {0}',
1965
+ reconNothingPending: 'No pending items.',
1966
+ reconAutoDone: '{0} automatic matches.',
1967
+ reconMatchedDone: 'Items matched.',
1968
+ reconUnmatchedDone: '{0} matches undone.',
1969
+ pivotTitle: 'Pivot table',
1970
+ pivotConfig: 'Pivot table settings',
1971
+ pivotRows: 'Rows',
1972
+ pivotColumns: 'Columns',
1973
+ pivotAggregate: 'Calculation',
1974
+ pivotNone: '— None —',
1975
+ pivotEmpty: '(empty)',
1976
+ pivotSum: 'Sum',
1977
+ pivotCount: 'Count',
1978
+ pivotAvg: 'Average',
1979
+ pivotMin: 'Minimum',
1980
+ pivotMax: 'Maximum',
1981
+ kpiPrevious: 'Previous period',
1982
+ kpiUp: 'up {0}',
1983
+ kpiDown: 'down {0}',
1984
+ kpiSame: 'no change',
1985
+ kpiTrend: 'Trend over {2} periods: from {0} to {1}',
1986
+ kpiGoal: 'Progress to goal',
1987
+ kpiOfGoal: '{0}% of the goal ({1})',
1988
+ auditTitle: 'Audit log',
1989
+ auditSearch: 'Search the history',
1990
+ auditUser: 'User',
1991
+ auditAction: 'Action',
1992
+ auditEntity: 'Record',
1993
+ auditAllUsers: 'All users',
1994
+ auditAllActions: 'All actions',
1995
+ auditCount: '{0} entries',
1996
+ auditCreated: 'created',
1997
+ auditUpdated: 'updated',
1998
+ auditDeleted: 'deleted',
1999
+ auditChanges: '{0} changes',
2000
+ auditChangesOne: '1 change',
2001
+ auditChangesOf: 'Changes in {0}',
2002
+ auditField: 'Field',
2003
+ auditBefore: 'Before',
2004
+ auditAfter: 'After',
2005
+ auditEmpty: '(empty)',
2006
+ auditNone: 'No entries match these filters.',
2007
+ auditTime: 'Time',
2008
+ auditNote: 'Note',
2009
+ documentTaxId: 'Tax ID',
2010
+ documentDate: 'Date',
2011
+ documentParty: 'Customer',
2012
+ documentCode: 'Code',
2013
+ documentDescription: 'Description',
2014
+ documentQuantity: 'Qty',
2015
+ documentUnitPrice: 'Unit price',
2016
+ documentDiscount: 'Discount',
2017
+ documentTax: 'Tax',
2018
+ documentAmount: 'Amount',
2019
+ documentSubtotal: 'Subtotal',
2020
+ documentTotal: 'Total due',
2021
+ documentInWords: 'Amount in words',
2022
+ documentNotes: 'Notes',
1208
2023
  scrollableArea: 'Scrollable area',
1209
2024
  scrollTop: 'Back to top',
1210
2025
  resizePanels: 'Resize panels',
@@ -1362,6 +2177,177 @@ const CB_LOCALE_EN = {
1362
2177
  quickFormat: 'Quick formatting',
1363
2178
  insertBlock: 'Insert block',
1364
2179
  paragraph: 'Paragraph',
2180
+ // --- Comments ---
2181
+ commentsFeed: 'Comments and activity',
2182
+ commentsShow: 'Show',
2183
+ commentsAll: 'All',
2184
+ commentsOnly: 'Comments',
2185
+ commentsActivity: 'Activity',
2186
+ commentsEmpty: 'No comments yet.',
2187
+ commentsWrite: 'Write a comment… (@ to mention)',
2188
+ commentsWriteReply: 'Write a reply…',
2189
+ commentsNew: 'New comment',
2190
+ commentsEditing: 'Edit comment',
2191
+ commentsReplyTo: 'Reply to {0}',
2192
+ commentsRepliesTo: 'Replies to {0}',
2193
+ commentsSend: 'Comment',
2194
+ commentsReply: 'Reply',
2195
+ commentsEdit: 'Edit',
2196
+ commentsDelete: 'Delete',
2197
+ commentsDeleteConfirm: 'Delete this comment?',
2198
+ commentsEdited: 'edited',
2199
+ commentsDeleted: 'Comment deleted',
2200
+ commentsAddReaction: 'Add reaction',
2201
+ commentsReactions: 'Reactions',
2202
+ commentsReactionLabel: '{0}, {1}: {2}',
2203
+ commentsYou: 'you',
2204
+ commentsJustNow: 'just now',
2205
+ commentsPosted: 'Comment posted',
2206
+ commentsSaved: 'Comment saved',
2207
+ commentsShortcut: 'Ctrl + Enter to send',
2208
+ // --- Notification center ---
2209
+ notificationsTitle: 'Notifications',
2210
+ notificationsBellUnread: 'Notifications, {0} unread',
2211
+ notificationsMarkAllRead: 'Mark all as read',
2212
+ notificationsShow: 'Show',
2213
+ notificationsAll: 'All',
2214
+ notificationsUnread: 'Unread',
2215
+ notificationsUnreadItem: 'Unread',
2216
+ notificationsMarkRead: 'Mark as read: {0}',
2217
+ notificationsMarkUnread: 'Mark as unread: {0}',
2218
+ notificationsMarkReadShort: 'Mark as read',
2219
+ notificationsMarkUnreadShort: 'Mark as unread',
2220
+ notificationsEmpty: 'You have no notifications.',
2221
+ notificationsAllRead: 'You are all caught up: no unread notifications.',
2222
+ notificationsViewAll: 'View all',
2223
+ notificationsToday: 'Today',
2224
+ notificationsYesterday: 'Yesterday',
2225
+ notificationsEarlier: 'Earlier',
2226
+ notificationsJustNow: 'just now',
2227
+ notificationsNew: 'New notification: {0}',
2228
+ notificationsNewMany: '{0} new notifications',
2229
+ notificationsMarkedRead: 'Marked as read',
2230
+ notificationsMarkedUnread: 'Marked as unread',
2231
+ notificationsMarkedAllRead: 'All marked as read',
2232
+ notificationsRemoved: 'Notification removed',
2233
+ // --- Signature pad ---
2234
+ signaturePad: 'Signature area',
2235
+ signatureEmptyState: 'empty',
2236
+ signatureSignedState: 'signed',
2237
+ signaturePlaceholder: 'Sign here',
2238
+ signatureModes: 'How to sign',
2239
+ signatureDraw: 'Draw',
2240
+ signatureType: 'Type',
2241
+ signatureTypeLabel: 'Type your name',
2242
+ signatureHint: 'Draw your signature with the mouse, a finger or a pen, or choose "Type" to type your name.',
2243
+ signatureHintDraw: 'Draw your signature with the mouse, a finger or a pen.',
2244
+ signatureUndo: 'Undo stroke',
2245
+ signatureClear: 'Clear signature',
2246
+ signatureCleared: 'Signature cleared',
2247
+ signatureUndone: 'Stroke undone',
2248
+ // --- Image cropper ---
2249
+ cropperValue: '{0} × {1} of the image ({2} × {3} pixels)',
2250
+ cropperRatio: 'Aspect ratio',
2251
+ cropperRotateLeft: 'Rotate left',
2252
+ cropperRotateRight: 'Rotate right',
2253
+ cropperRotatedLeft: 'Image rotated left',
2254
+ cropperRotatedRight: 'Image rotated right',
2255
+ cropperChoose: 'Choose image',
2256
+ cropperChange: 'Change image',
2257
+ cropperEmpty: 'Drag an image here or choose it from your device.',
2258
+ cropperPreview: 'Crop preview',
2259
+ cropperDone: 'Image cropped',
2260
+ cropperInvalidFile: 'The file is not an image.',
2261
+ cropperLoadError: 'The image could not be loaded.',
2262
+ // --- Infinite scroll ---
2263
+ infiniteLoading: 'Loading more results…',
2264
+ infiniteLoadMore: 'Load more',
2265
+ infiniteLoaded: '{0} more results, {1} in total',
2266
+ infiniteEnd: 'No more results',
2267
+ infiniteError: 'More results could not be loaded.',
2268
+ infiniteRetry: 'Retry',
2269
+ // --- Media player ---
2270
+ mediaVideo: 'Video player',
2271
+ mediaAudio: 'Audio player',
2272
+ mediaControls: 'Controls',
2273
+ mediaPlay: 'Play',
2274
+ mediaPause: 'Pause',
2275
+ mediaBack: 'Back {0} seconds',
2276
+ mediaForward: 'Forward {0} seconds',
2277
+ mediaSeek: 'Progress',
2278
+ mediaTimeOf: '{0} of {1}',
2279
+ mediaHours: 'h',
2280
+ mediaMinutes: 'min',
2281
+ mediaSeconds: 's',
2282
+ mediaMute: 'Mute',
2283
+ mediaVolume: 'Volume',
2284
+ mediaVolumeSet: 'Volume {0}%',
2285
+ mediaSpeed: 'Speed',
2286
+ mediaSpeedSet: 'Speed {0}',
2287
+ mediaCaptions: 'Captions',
2288
+ mediaCaptionsLanguage: 'Captions language',
2289
+ mediaCaptionsNone: 'No captions',
2290
+ mediaCaptionsOn: 'Captions: {0}',
2291
+ mediaCaptionsOff: 'Captions off',
2292
+ mediaPip: 'Picture in picture',
2293
+ mediaFullscreen: 'Full screen',
2294
+ mediaExitFullscreen: 'Exit full screen',
2295
+ mediaTranscript: 'Transcript',
2296
+ mediaError: 'The media could not be loaded.',
2297
+ mediaShortcuts: 'Shortcuts: Space or K plays and pauses; left and right arrows, 5 seconds; J and L, 10 seconds; up and down arrows, volume; M mutes; F full screen; C captions; 0 to 9 jump to that point.',
2298
+ // --- Flow editor ---
2299
+ flowEditor: 'Flow editor',
2300
+ flowDiagram: 'Diagram',
2301
+ flowList: 'List',
2302
+ flowView: 'View',
2303
+ flowAdd: 'Add',
2304
+ flowStart: 'Start',
2305
+ flowTask: 'Task',
2306
+ flowDecision: 'Decision',
2307
+ flowEnd: 'End',
2308
+ flowNodeOf: '{0}: {1}',
2309
+ flowExits: 'Exits: {0}',
2310
+ flowNoExits: 'No exits',
2311
+ flowExitsOf: 'Exits of {0}',
2312
+ flowEdgeOf: 'Connection from {0} to {1}',
2313
+ flowConnect: 'Connect',
2314
+ flowConnectFrom: 'Connecting from {0}: go to the target node and press Enter. Escape cancels.',
2315
+ flowConnected: 'Connected: {0} → {1}',
2316
+ flowCannotConnect: '{0} cannot be connected to {1}.',
2317
+ flowConnectCancelled: 'Connection cancelled',
2318
+ flowDelete: 'Delete',
2319
+ flowDeleteNode: 'Delete {0}',
2320
+ flowAdded: 'Added: {0}',
2321
+ flowRemoved: 'Removed: {0}',
2322
+ flowNameOf: 'Name ({0})',
2323
+ flowEdgeLabel: 'Label',
2324
+ flowEdgeLabelOf: 'Label from {0} to {1}',
2325
+ flowConnectTo: 'Connect {0} to',
2326
+ flowChooseTarget: 'Choose the target',
2327
+ flowAddConnection: 'Add connection',
2328
+ flowRemoveConnection: 'Remove the connection to {0}',
2329
+ flowLayout: 'Arrange',
2330
+ flowLaidOut: 'Diagram arranged',
2331
+ flowZoomIn: 'Zoom in',
2332
+ flowZoomOut: 'Zoom out',
2333
+ flowFit: 'Fit to view',
2334
+ flowZoom: 'Zoom',
2335
+ flowEmpty: 'The flow is empty. Add a start to begin.',
2336
+ flowIssues: 'Issues ({0})',
2337
+ flowNoIssues: 'The flow is valid.',
2338
+ flowIssueOf: 'Issue: {0}',
2339
+ flowIssueNoStart: 'A start node is missing.',
2340
+ flowIssueManyStarts: 'There is more than one start: {0}.',
2341
+ flowIssueNoEnd: 'An end node is missing.',
2342
+ flowIssueStartIncoming: '{0} is a start and has incoming connections.',
2343
+ flowIssueEndOutgoing: '{0} is an end and has exits.',
2344
+ flowIssueDeadEnd: '{0} has no exit.',
2345
+ flowIssueBranches: 'The decision {0} needs at least two exits.',
2346
+ flowIssueBranchLabel: 'Some exit of the decision {0} has no label.',
2347
+ flowIssueUnreachable: '{0} cannot be reached from the start.',
2348
+ flowNodeHint: 'Arrows to move (Shift, further), Enter to rename, C to connect to another node and Delete to remove.',
2349
+ flowReadonlyHint: 'Enter to open.',
2350
+ flowEdgeHint: 'Enter to edit the label and Delete to remove.',
1365
2351
  };
1366
2352
  /** Idiomas incluidos. */
1367
2353
  const CB_LOCALES = { es: CB_LOCALE_ES, en: CB_LOCALE_EN };
@@ -1524,6 +2510,200 @@ function cbOverlayFocus(options) {
1524
2510
  });
1525
2511
  }
1526
2512
 
2513
+ /**
2514
+ * Fecha relativa a `now` ("hace 5 minutos", "ayer", "en 2 horas") en el idioma `locale`;
2515
+ * a partir de una semana, la fecha corta ("23 oct 2026"). Por debajo de un minuto devuelve
2516
+ * `justNow` ("ahora mismo").
2517
+ *
2518
+ * @example
2519
+ * ```ts
2520
+ * cbRelativeTime(comment.date, Date.now(), t().intlLocale, t().commentsJustNow);
2521
+ * ```
2522
+ */
2523
+ function cbRelativeTime(date, now, locale, justNow) {
2524
+ const time = date instanceof Date ? date.getTime() : typeof date === 'number' ? date : new Date(date).getTime();
2525
+ if (Number.isNaN(time))
2526
+ return '';
2527
+ const diff = Math.round((time - now) / 1000);
2528
+ const abs = Math.abs(diff);
2529
+ if (abs < 60)
2530
+ return justNow;
2531
+ const rtf = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' });
2532
+ if (abs < 3600)
2533
+ return rtf.format(Math.round(diff / 60), 'minute');
2534
+ if (abs < 86400)
2535
+ return rtf.format(Math.round(diff / 3600), 'hour');
2536
+ if (abs < 7 * 86400)
2537
+ return rtf.format(Math.round(diff / 86400), 'day');
2538
+ return new Intl.DateTimeFormat(locale, { dateStyle: 'medium' }).format(time);
2539
+ }
2540
+
2541
+ const formatters = new Map();
2542
+ /** Monedas sin decimales (ISO 4217); el resto se escribe con 2, igual en todos los navegadores. */
2543
+ const ZERO_DECIMALS = new Set(['BIF', 'CLP', 'DJF', 'GNF', 'ISK', 'JPY', 'KMF', 'KRW', 'PYG', 'RWF', 'UGX', 'UYI', 'VND', 'VUV', 'XAF', 'XOF', 'XPF']);
2544
+ function formatter(locale, options) {
2545
+ const key = `${locale}|${options.currency ?? ''}|${options.decimals ?? ''}|${options.currencyDisplay ?? ''}`;
2546
+ let f = formatters.get(key);
2547
+ if (!f) {
2548
+ const digits = options.decimals ?? (options.currency && ZERO_DECIMALS.has(options.currency.toUpperCase()) ? 0 : 2);
2549
+ f = new Intl.NumberFormat(locale, {
2550
+ style: options.currency ? 'currency' : 'decimal',
2551
+ currency: options.currency ?? undefined,
2552
+ currencyDisplay: options.currencyDisplay ?? 'narrowSymbol',
2553
+ minimumFractionDigits: digits,
2554
+ maximumFractionDigits: digits,
2555
+ });
2556
+ formatters.set(key, f);
2557
+ }
2558
+ return f;
2559
+ }
2560
+ /** Número a partir de un valor (número o texto numérico); `null` si no lo es. */
2561
+ function cbToNumber(value) {
2562
+ if (typeof value === 'number')
2563
+ return Number.isFinite(value) ? value : null;
2564
+ if (typeof value === 'string' && value.trim() !== '') {
2565
+ const n = Number(value);
2566
+ return Number.isFinite(n) ? n : null;
2567
+ }
2568
+ return null;
2569
+ }
2570
+ /**
2571
+ * Importe con el formato del idioma: separadores, decimales, moneda y negativos
2572
+ * entre paréntesis si se pide (`(1.234,50)`). Un valor que no es número se
2573
+ * devuelve como texto (vacío si es `null`).
2574
+ *
2575
+ * ```ts
2576
+ * cbFormatAmount(-1234.5, 'es-CO', { currency: 'COP', negative: 'parens' }); // "($ 1.234,50)"
2577
+ * ```
2578
+ */
2579
+ function cbFormatAmount(value, locale, options = {}) {
2580
+ const n = cbToNumber(value);
2581
+ if (n === null)
2582
+ return value == null ? '' : String(value);
2583
+ const f = formatter(locale, options);
2584
+ if (options.negative === 'parens' && n < 0)
2585
+ return `(${f.format(-n)})`;
2586
+ // Evita "-0,00" al redondear un negativo muy pequeño.
2587
+ const text = f.format(n);
2588
+ return /^-0([.,]0+)?$/.test(text.replace(/[^\d.,-]/g, '')) ? f.format(0) : text;
2589
+ }
2590
+ /**
2591
+ * Total de una lista de valores (los que no son número se ignoran, salvo en
2592
+ * `count`). Las sumas se redondean para evitar errores de coma flotante
2593
+ * (`0.1 + 0.2` da `0.3`).
2594
+ */
2595
+ function cbSummarize(values, kind) {
2596
+ if (kind === 'count')
2597
+ return values.filter((v) => v !== null && v !== undefined && v !== '').length;
2598
+ const nums = values.map(cbToNumber).filter((n) => n !== null);
2599
+ if (!nums.length)
2600
+ return kind === 'sum' ? 0 : null;
2601
+ const round = (n) => Math.round(n * 1e8) / 1e8;
2602
+ switch (kind) {
2603
+ case 'sum':
2604
+ return round(nums.reduce((a, b) => a + b, 0));
2605
+ case 'avg':
2606
+ return round(nums.reduce((a, b) => a + b, 0) / nums.length);
2607
+ case 'min':
2608
+ return Math.min(...nums);
2609
+ case 'max':
2610
+ return Math.max(...nums);
2611
+ }
2612
+ }
2613
+ /**
2614
+ * Formateador de importes con la moneda y el estilo de negativos de
2615
+ * `provideCaribeNG({ currency, negativeStyle, numberLocale })` (o el idioma activo).
2616
+ * Debe llamarse en un contexto de inyección.
2617
+ */
2618
+ function injectCbAmount() {
2619
+ const config = inject(CB_CONFIG);
2620
+ const t = injectCbTranslation();
2621
+ return (value, options = {}) => cbFormatAmount(value, config.numberLocale ?? t().intlLocale, {
2622
+ ...options,
2623
+ currency: options.currency === undefined ? (config.currency ?? null) : options.currency,
2624
+ negative: options.negative ?? config.negativeStyle ?? 'minus',
2625
+ });
2626
+ }
2627
+
2628
+ /** Ancho mínimo de cada breakpoint en px (coinciden con `--cb-breakpoint-*` y las utilidades `md:cb-*`). */
2629
+ const CB_BREAKPOINTS = {
2630
+ xs: 0,
2631
+ sm: 576,
2632
+ md: 768,
2633
+ lg: 992,
2634
+ xl: 1200,
2635
+ '2xl': 1400,
2636
+ };
2637
+ const ORDER = ['xs', 'sm', 'md', 'lg', 'xl', '2xl'];
2638
+ /**
2639
+ * El breakpoint actual como signals, para lo que las utilidades CSS no pueden hacer: no renderizar
2640
+ * una parte, cambiar un input o elegir otra vista según el ancho de la ventana (mobile-first).
2641
+ *
2642
+ * En el servidor (o sin `matchMedia`) todas las consultas son `false` y `current()` es `xs`.
2643
+ *
2644
+ * @example
2645
+ * ```ts
2646
+ * protected readonly bp = inject(CbBreakpoints);
2647
+ * protected readonly desktop = this.bp.up('lg');
2648
+ * ```
2649
+ * ```html
2650
+ * @if (desktop()) { <aside>…</aside> }
2651
+ * <cb-table [size]="bp.down('md')() ? 'sm' : 'md'" />
2652
+ * ```
2653
+ */
2654
+ class CbBreakpoints {
2655
+ constructor() {
2656
+ this.isBrowser = isPlatformBrowser(inject(PLATFORM_ID)) && typeof matchMedia === 'function';
2657
+ /** Un signal por media query: el servicio vive lo que la app, así que los listeners no se quitan. */
2658
+ this.queries = new Map();
2659
+ /** El breakpoint mayor cuyo ancho mínimo se cumple. */
2660
+ this.current = computed(() => {
2661
+ for (let i = ORDER.length - 1; i > 0; i--) {
2662
+ if (this.up(ORDER[i])())
2663
+ return ORDER[i];
2664
+ }
2665
+ return 'xs';
2666
+ }, /* @ts-ignore */
2667
+ ...(ngDevMode ? [{ debugName: "current" }] : /* istanbul ignore next */ []));
2668
+ }
2669
+ /** `true` desde el ancho de `bp` en adelante (`md:` en las utilidades). */
2670
+ up(bp) {
2671
+ return bp === 'xs' ? ALWAYS : this.matches(`(min-width: ${CB_BREAKPOINTS[bp]}px)`);
2672
+ }
2673
+ /** `true` por debajo del ancho de `bp` (`down('md')` es el móvil y la tableta en vertical). */
2674
+ down(bp) {
2675
+ return bp === 'xs' ? NEVER : this.matches(`(max-width: ${CB_BREAKPOINTS[bp] - 0.02}px)`);
2676
+ }
2677
+ /** `true` desde `from` hasta antes de `to`. */
2678
+ between(from, to) {
2679
+ const up = this.up(from);
2680
+ const down = this.down(to);
2681
+ return computed(() => up() && down());
2682
+ }
2683
+ /** Cualquier media query (`(orientation: portrait)`, `(prefers-reduced-motion: reduce)`…) como signal. */
2684
+ matches(query) {
2685
+ let state = this.queries.get(query);
2686
+ if (!state) {
2687
+ // El valor inicial va en signal(): matches() se puede llamar dentro de un computed, donde no se escribe.
2688
+ const mql = this.isBrowser ? matchMedia(query) : null;
2689
+ const value = signal(mql?.matches ?? false, /* @ts-ignore */
2690
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
2691
+ mql?.addEventListener('change', (e) => value.set(e.matches));
2692
+ state = value.asReadonly();
2693
+ this.queries.set(query, state);
2694
+ }
2695
+ return state;
2696
+ }
2697
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CbBreakpoints, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2698
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CbBreakpoints, providedIn: 'root' }); }
2699
+ }
2700
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CbBreakpoints, decorators: [{
2701
+ type: Injectable,
2702
+ args: [{ providedIn: 'root' }]
2703
+ }] });
2704
+ const ALWAYS = signal(true).asReadonly();
2705
+ const NEVER = signal(false).asReadonly();
2706
+
1527
2707
  /*
1528
2708
  * Public API Surface de @caribeng/ui (entry point primario: núcleo + tema)
1529
2709
  */
@@ -1532,4 +2712,4 @@ function cbOverlayFocus(options) {
1532
2712
  * Generated bundle index. Do not edit.
1533
2713
  */
1534
2714
 
1535
- export { CB_COLOR_PRESETS, CB_CONFIG, CB_DEFAULT_CONFIG, CB_LOCALES, CB_LOCALE_EN, CB_LOCALE_ES, CbConfirmationService, CbLocaleService, CbThemeService, cbFieldState, cbFormat, cbOverlayFocus, cbRunCommand, cbVisibleItems, injectCbTranslation, provideCaribeNG };
2715
+ export { CB_BREAKPOINTS, CB_COLOR_PRESETS, CB_CONFIG, CB_DEFAULT_CONFIG, CB_LOCALES, CB_LOCALE_EN, CB_LOCALE_ES, CbBreakpoints, CbConfirmationService, CbLocaleService, CbThemeService, cbFieldState, cbFormat, cbFormatAmount, cbOverlayFocus, cbRelativeTime, cbRunCommand, cbSummarize, cbToNumber, cbVisibleItems, injectCbAmount, injectCbTranslation, provideCaribeNG };