@caribeng/ui 22.2.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 (285) hide show
  1. package/README.md +311 -231
  2. package/fesm2022/caribeng-ui-accordion.mjs +2 -2
  3. package/fesm2022/caribeng-ui-account-picker.mjs +533 -0
  4. package/fesm2022/caribeng-ui-aging.mjs +488 -0
  5. package/fesm2022/{caribeng-ui-caribe-alert.mjs → caribeng-ui-alert.mjs} +45 -45
  6. package/fesm2022/caribeng-ui-amount.mjs +249 -0
  7. package/fesm2022/caribeng-ui-anchor.mjs +2 -2
  8. package/fesm2022/{caribeng-ui-caribe-animation-lottie.mjs → caribeng-ui-animation-lottie.mjs} +41 -41
  9. package/fesm2022/caribeng-ui-audit-log.mjs +323 -0
  10. package/fesm2022/caribeng-ui-avatar.mjs +4 -4
  11. package/fesm2022/caribeng-ui-badge.mjs +8 -2
  12. package/fesm2022/caribeng-ui-breadcrumb.mjs +26 -9
  13. package/fesm2022/{caribeng-ui-caribe-button-group.mjs → caribeng-ui-button-group.mjs} +15 -15
  14. package/fesm2022/caribeng-ui-button.mjs +2 -2
  15. package/fesm2022/{caribeng-ui-caribe-card-content.mjs → caribeng-ui-card-content.mjs} +39 -39
  16. package/fesm2022/{caribeng-ui-caribe-card-move.mjs → caribeng-ui-card-move.mjs} +65 -65
  17. package/fesm2022/{caribeng-ui-caribe-card-primary.mjs → caribeng-ui-card-primary.mjs} +31 -31
  18. package/fesm2022/{caribeng-ui-caribe-card-select.mjs → caribeng-ui-card-select.mjs} +67 -67
  19. package/fesm2022/caribeng-ui-carousel.mjs +2 -2
  20. package/fesm2022/caribeng-ui-cascadeselect.mjs +45 -9
  21. package/fesm2022/caribeng-ui-chart.mjs +8 -5
  22. package/fesm2022/caribeng-ui-chat.mjs +1303 -0
  23. package/fesm2022/{caribeng-ui-caribe-coachmark.mjs → caribeng-ui-coachmark.mjs} +85 -85
  24. package/fesm2022/caribeng-ui-code-block.mjs +332 -0
  25. package/fesm2022/caribeng-ui-colorpicker.mjs +99 -5
  26. package/fesm2022/caribeng-ui-command-palette.mjs +476 -0
  27. package/fesm2022/caribeng-ui-comments.mjs +864 -0
  28. package/fesm2022/caribeng-ui-confirmdialog.mjs +78 -13
  29. package/fesm2022/caribeng-ui-confirmpopup.mjs +91 -16
  30. package/fesm2022/caribeng-ui-contextmenu.mjs +8 -4
  31. package/fesm2022/caribeng-ui-copy-button.mjs +230 -0
  32. package/fesm2022/caribeng-ui-datagrid.mjs +1635 -0
  33. package/fesm2022/caribeng-ui-dataview.mjs +6 -3
  34. package/fesm2022/caribeng-ui-datepicker.mjs +2 -2
  35. package/fesm2022/caribeng-ui-dock.mjs +52 -12
  36. package/fesm2022/caribeng-ui-document.mjs +495 -0
  37. package/fesm2022/{caribeng-ui-caribe-dots-indicator.mjs → caribeng-ui-dots-indicator.mjs} +41 -41
  38. package/fesm2022/caribeng-ui-drawer.mjs +9 -4
  39. package/fesm2022/caribeng-ui-dynamic-form.mjs +1581 -0
  40. package/fesm2022/caribeng-ui-editor.mjs +2324 -1311
  41. package/fesm2022/{caribeng-ui-caribe-expansion-panel.mjs → caribeng-ui-expansion-panel.mjs} +39 -39
  42. package/fesm2022/{caribeng-ui-caribe-fab-menu.mjs → caribeng-ui-fab-menu.mjs} +75 -75
  43. package/fesm2022/caribeng-ui-fieldset.mjs +2 -2
  44. package/fesm2022/caribeng-ui-file-card.mjs +134 -17
  45. package/fesm2022/{caribeng-ui-caribe-file-download.mjs → caribeng-ui-file-download.mjs} +63 -63
  46. package/fesm2022/caribeng-ui-financial-report.mjs +380 -0
  47. package/fesm2022/{caribeng-ui-caribe-float-menu.mjs → caribeng-ui-float-menu.mjs} +31 -31
  48. package/fesm2022/caribeng-ui-floatlabel.mjs +2 -2
  49. package/fesm2022/caribeng-ui-flow.mjs +1508 -0
  50. package/fesm2022/caribeng-ui-folder-card.mjs +122 -12
  51. package/fesm2022/{caribeng-ui-caribe-footer.mjs → caribeng-ui-footer.mjs} +19 -19
  52. package/fesm2022/caribeng-ui-gantt.mjs +1094 -0
  53. package/fesm2022/{caribeng-ui-caribe-header.mjs → caribeng-ui-header.mjs} +49 -49
  54. package/fesm2022/{caribeng-ui-caribe-icon-button.mjs → caribeng-ui-icon-button.mjs} +23 -23
  55. package/fesm2022/caribeng-ui-image-cropper.mjs +671 -0
  56. package/fesm2022/caribeng-ui-import-wizard.mjs +746 -0
  57. package/fesm2022/caribeng-ui-infinite-scroll.mjs +226 -0
  58. package/fesm2022/caribeng-ui-inlinemessage.mjs +2 -2
  59. package/fesm2022/caribeng-ui-input-number.mjs +22 -6
  60. package/fesm2022/{caribeng-ui-caribe-input-search.mjs → caribeng-ui-input-search.mjs} +65 -65
  61. package/fesm2022/{caribeng-ui-caribe-input-token.mjs → caribeng-ui-input-token.mjs} +59 -59
  62. package/fesm2022/caribeng-ui-inputmask.mjs +8 -2
  63. package/fesm2022/caribeng-ui-inputotp.mjs +2 -2
  64. package/fesm2022/caribeng-ui-journal-entry.mjs +340 -0
  65. package/fesm2022/caribeng-ui-kanban.mjs +4612 -0
  66. package/fesm2022/caribeng-ui-kbd.mjs +122 -0
  67. package/fesm2022/caribeng-ui-kpi.mjs +189 -0
  68. package/fesm2022/{caribeng-ui-caribe-link.mjs → caribeng-ui-link.mjs} +37 -37
  69. package/fesm2022/caribeng-ui-masonry.mjs +93 -0
  70. package/fesm2022/caribeng-ui-media-player.mjs +821 -0
  71. package/fesm2022/caribeng-ui-megamenu.mjs +13 -9
  72. package/fesm2022/caribeng-ui-mentions.mjs +495 -0
  73. package/fesm2022/caribeng-ui-menu.mjs +8 -4
  74. package/fesm2022/caribeng-ui-menubar.mjs +9 -5
  75. package/fesm2022/caribeng-ui-message.mjs +6 -3
  76. package/fesm2022/caribeng-ui-notification-center.mjs +636 -0
  77. package/fesm2022/{caribeng-ui-caribe-off-canvas.mjs → caribeng-ui-off-canvas.mjs} +55 -55
  78. package/fesm2022/{caribeng-ui-caribe-onboarding.mjs → caribeng-ui-onboarding.mjs} +105 -105
  79. package/fesm2022/caribeng-ui-orderlist.mjs +2 -2
  80. package/fesm2022/caribeng-ui-organizationchart.mjs +6 -10
  81. package/fesm2022/caribeng-ui-panel.mjs +6 -6
  82. package/fesm2022/caribeng-ui-panelmenu.mjs +9 -6
  83. package/fesm2022/caribeng-ui-pdfviewer.mjs +1755 -25
  84. package/fesm2022/caribeng-ui-period-picker.mjs +637 -0
  85. package/fesm2022/caribeng-ui-phone-input.mjs +688 -0
  86. package/fesm2022/caribeng-ui-picklist.mjs +2 -2
  87. package/fesm2022/caribeng-ui-pivot.mjs +419 -0
  88. package/fesm2022/caribeng-ui-pricing.mjs +263 -69
  89. package/fesm2022/caribeng-ui-qrcode.mjs +564 -0
  90. package/fesm2022/caribeng-ui-rating.mjs +14 -17
  91. package/fesm2022/caribeng-ui-reconciliation.mjs +386 -0
  92. package/fesm2022/caribeng-ui-ripple.mjs +2 -0
  93. package/fesm2022/caribeng-ui-scheduler.mjs +1027 -0
  94. package/fesm2022/caribeng-ui-scrolltop.mjs +3 -1
  95. package/fesm2022/caribeng-ui-select.mjs +2 -2
  96. package/fesm2022/{caribeng-ui-caribe-shortcut.mjs → caribeng-ui-shortcut.mjs} +29 -29
  97. package/fesm2022/caribeng-ui-sidebar.mjs +573 -0
  98. package/fesm2022/caribeng-ui-signature-pad.mjs +654 -0
  99. package/fesm2022/{caribeng-ui-caribe-status.mjs → caribeng-ui-status.mjs} +11 -11
  100. package/fesm2022/{caribeng-ui-caribe-step-indicator.mjs → caribeng-ui-step-indicator.mjs} +53 -53
  101. package/fesm2022/caribeng-ui-stepper.mjs +12 -5
  102. package/fesm2022/caribeng-ui-steps.mjs +2 -2
  103. package/fesm2022/caribeng-ui-table.mjs +333 -19
  104. package/fesm2022/caribeng-ui-tabmenu.mjs +10 -6
  105. package/fesm2022/caribeng-ui-tabs.mjs +2 -2
  106. package/fesm2022/{caribeng-ui-caribe-tag-button.mjs → caribeng-ui-tag-button.mjs} +25 -25
  107. package/fesm2022/caribeng-ui-tag.mjs +2 -2
  108. package/fesm2022/caribeng-ui-tieredmenu.mjs +111 -21
  109. package/fesm2022/{caribeng-ui-caribe-tracker.mjs → caribeng-ui-tracker.mjs} +29 -29
  110. package/fesm2022/{caribeng-ui-caribe-transaction-status.mjs → caribeng-ui-transaction-status.mjs} +11 -11
  111. package/fesm2022/caribeng-ui-treeselect.mjs +44 -9
  112. package/fesm2022/caribeng-ui-treetable.mjs +236 -17
  113. package/fesm2022/{caribeng-ui-caribe-voucher.mjs → caribeng-ui-voucher.mjs} +45 -45
  114. package/fesm2022/caribeng-ui-xlsx.mjs +486 -0
  115. package/fesm2022/caribeng-ui.mjs +1568 -1
  116. package/package.json +258 -178
  117. package/schematics/collection.json +5 -0
  118. package/schematics/migrate-from-primeng/core-icons.json +1 -0
  119. package/schematics/migrate-from-primeng/icons.js +269 -0
  120. package/schematics/migrate-from-primeng/index.js +290 -0
  121. package/schematics/migrate-from-primeng/mappings/button.js +93 -0
  122. package/schematics/migrate-from-primeng/mappings/card.js +33 -0
  123. package/schematics/migrate-from-primeng/mappings/checkbox.js +44 -0
  124. package/schematics/migrate-from-primeng/mappings/confirm.js +221 -0
  125. package/schematics/migrate-from-primeng/mappings/datepicker.js +121 -0
  126. package/schematics/migrate-from-primeng/mappings/dialog.js +84 -0
  127. package/schematics/migrate-from-primeng/mappings/index.js +88 -0
  128. package/schematics/migrate-from-primeng/mappings/inputnumber.js +62 -0
  129. package/schematics/migrate-from-primeng/mappings/inputtext.js +60 -0
  130. package/schematics/migrate-from-primeng/mappings/menu.js +468 -0
  131. package/schematics/migrate-from-primeng/mappings/multiselect.js +49 -0
  132. package/schematics/migrate-from-primeng/mappings/radiobutton.js +22 -0
  133. package/schematics/migrate-from-primeng/mappings/rules.js +206 -0
  134. package/schematics/migrate-from-primeng/mappings/select.js +97 -0
  135. package/schematics/migrate-from-primeng/mappings/service-calls.js +100 -0
  136. package/schematics/migrate-from-primeng/mappings/table.js +613 -0
  137. package/schematics/migrate-from-primeng/mappings/tabs.js +225 -0
  138. package/schematics/migrate-from-primeng/mappings/tag.js +29 -0
  139. package/schematics/migrate-from-primeng/mappings/textarea.js +44 -0
  140. package/schematics/migrate-from-primeng/mappings/toast.js +173 -0
  141. package/schematics/migrate-from-primeng/mappings/toggleswitch.js +37 -0
  142. package/schematics/migrate-from-primeng/mappings/tooltip.js +44 -0
  143. package/schematics/migrate-from-primeng/mappings/types.js +10 -0
  144. package/schematics/migrate-from-primeng/report.js +79 -0
  145. package/schematics/migrate-from-primeng/schema.js +2 -0
  146. package/schematics/migrate-from-primeng/schema.json +34 -0
  147. package/schematics/migrate-from-primeng/template.js +387 -0
  148. package/schematics/migrate-from-primeng/todo.js +5 -0
  149. package/schematics/migrate-from-primeng/typescript.js +442 -0
  150. package/schematics/migrate-from-primeng/workspace.js +117 -0
  151. package/schematics/ng-add/index.js +16 -1
  152. package/types/caribeng-ui-account-picker.d.ts +142 -0
  153. package/types/caribeng-ui-aging.d.ts +123 -0
  154. package/types/{caribeng-ui-caribe-alert.d.ts → caribeng-ui-alert.d.ts} +2 -2
  155. package/types/caribeng-ui-amount.d.ts +82 -0
  156. package/types/{caribeng-ui-caribe-animation-lottie.d.ts → caribeng-ui-animation-lottie.d.ts} +2 -2
  157. package/types/caribeng-ui-audit-log.d.ts +86 -0
  158. package/types/caribeng-ui-badge.d.ts +3 -1
  159. package/types/caribeng-ui-breadcrumb.d.ts +9 -1
  160. package/types/{caribeng-ui-caribe-button-group.d.ts → caribeng-ui-button-group.d.ts} +2 -2
  161. package/types/{caribeng-ui-caribe-card-content.d.ts → caribeng-ui-card-content.d.ts} +2 -2
  162. package/types/{caribeng-ui-caribe-card-move.d.ts → caribeng-ui-card-move.d.ts} +1 -1
  163. package/types/{caribeng-ui-caribe-card-primary.d.ts → caribeng-ui-card-primary.d.ts} +2 -2
  164. package/types/{caribeng-ui-caribe-card-select.d.ts → caribeng-ui-card-select.d.ts} +2 -2
  165. package/types/caribeng-ui-cascadeselect.d.ts +6 -0
  166. package/types/caribeng-ui-chart.d.ts +3 -1
  167. package/types/caribeng-ui-chat.d.ts +299 -0
  168. package/types/{caribeng-ui-caribe-coachmark.d.ts → caribeng-ui-coachmark.d.ts} +2 -2
  169. package/types/caribeng-ui-code-block.d.ts +65 -0
  170. package/types/caribeng-ui-colorpicker.d.ts +5 -1
  171. package/types/caribeng-ui-command-palette.d.ts +133 -0
  172. package/types/caribeng-ui-comments.d.ts +214 -0
  173. package/types/caribeng-ui-confirmdialog.d.ts +34 -2
  174. package/types/caribeng-ui-confirmpopup.d.ts +39 -2
  175. package/types/caribeng-ui-contextmenu.d.ts +7 -0
  176. package/types/caribeng-ui-copy-button.d.ts +90 -0
  177. package/types/caribeng-ui-datagrid.d.ts +269 -0
  178. package/types/caribeng-ui-dataview.d.ts +2 -0
  179. package/types/caribeng-ui-dock.d.ts +13 -1
  180. package/types/caribeng-ui-document.d.ts +138 -0
  181. package/types/{caribeng-ui-caribe-dots-indicator.d.ts → caribeng-ui-dots-indicator.d.ts} +2 -2
  182. package/types/caribeng-ui-drawer.d.ts +3 -1
  183. package/types/caribeng-ui-dynamic-form.d.ts +409 -0
  184. package/types/caribeng-ui-editor.d.ts +110 -12
  185. package/types/{caribeng-ui-caribe-expansion-panel.d.ts → caribeng-ui-expansion-panel.d.ts} +1 -1
  186. package/types/{caribeng-ui-caribe-fab-menu.d.ts → caribeng-ui-fab-menu.d.ts} +2 -2
  187. package/types/caribeng-ui-file-card.d.ts +27 -2
  188. package/types/{caribeng-ui-caribe-file-download.d.ts → caribeng-ui-file-download.d.ts} +1 -1
  189. package/types/caribeng-ui-financial-report.d.ts +102 -0
  190. package/types/{caribeng-ui-caribe-float-menu.d.ts → caribeng-ui-float-menu.d.ts} +2 -2
  191. package/types/caribeng-ui-flow.d.ts +228 -0
  192. package/types/caribeng-ui-folder-card.d.ts +27 -5
  193. package/types/{caribeng-ui-caribe-footer.d.ts → caribeng-ui-footer.d.ts} +2 -2
  194. package/types/caribeng-ui-gantt.d.ts +244 -0
  195. package/types/{caribeng-ui-caribe-header.d.ts → caribeng-ui-header.d.ts} +2 -2
  196. package/types/{caribeng-ui-caribe-icon-button.d.ts → caribeng-ui-icon-button.d.ts} +2 -2
  197. package/types/{caribeng-ui-caribe-illustration.d.ts → caribeng-ui-illustration.d.ts} +1 -1
  198. package/types/caribeng-ui-image-cropper.d.ts +169 -0
  199. package/types/caribeng-ui-import-wizard.d.ts +149 -0
  200. package/types/caribeng-ui-infinite-scroll.d.ts +75 -0
  201. package/types/caribeng-ui-input-number.d.ts +1 -1
  202. package/types/{caribeng-ui-caribe-input-search.d.ts → caribeng-ui-input-search.d.ts} +2 -2
  203. package/types/{caribeng-ui-caribe-input-token.d.ts → caribeng-ui-input-token.d.ts} +2 -2
  204. package/types/caribeng-ui-inputmask.d.ts +3 -1
  205. package/types/caribeng-ui-journal-entry.d.ts +110 -0
  206. package/types/caribeng-ui-kanban.d.ts +783 -0
  207. package/types/caribeng-ui-kbd.d.ts +36 -0
  208. package/types/caribeng-ui-kpi.d.ts +64 -0
  209. package/types/{caribeng-ui-caribe-link.d.ts → caribeng-ui-link.d.ts} +2 -2
  210. package/types/{caribeng-ui-caribe-logo.d.ts → caribeng-ui-logo.d.ts} +1 -1
  211. package/types/caribeng-ui-masonry.d.ts +32 -0
  212. package/types/caribeng-ui-media-player.d.ts +140 -0
  213. package/types/caribeng-ui-megamenu.d.ts +11 -0
  214. package/types/caribeng-ui-mentions.d.ts +127 -0
  215. package/types/caribeng-ui-menu.d.ts +7 -0
  216. package/types/caribeng-ui-menubar.d.ts +7 -0
  217. package/types/caribeng-ui-message.d.ts +2 -0
  218. package/types/caribeng-ui-notification-center.d.ts +153 -0
  219. package/types/{caribeng-ui-caribe-off-canvas.d.ts → caribeng-ui-off-canvas.d.ts} +2 -2
  220. package/types/{caribeng-ui-caribe-onboarding.d.ts → caribeng-ui-onboarding.d.ts} +2 -2
  221. package/types/caribeng-ui-panelmenu.d.ts +7 -0
  222. package/types/caribeng-ui-pdfviewer.d.ts +245 -5
  223. package/types/caribeng-ui-period-picker.d.ts +148 -0
  224. package/types/caribeng-ui-phone-input.d.ts +168 -0
  225. package/types/caribeng-ui-pivot.d.ts +116 -0
  226. package/types/caribeng-ui-pricing.d.ts +41 -4
  227. package/types/caribeng-ui-qrcode.d.ts +88 -0
  228. package/types/caribeng-ui-reconciliation.d.ts +109 -0
  229. package/types/caribeng-ui-scheduler.d.ts +188 -0
  230. package/types/{caribeng-ui-caribe-shortcut.d.ts → caribeng-ui-shortcut.d.ts} +2 -2
  231. package/types/caribeng-ui-sidebar.d.ts +167 -0
  232. package/types/caribeng-ui-signature-pad.d.ts +151 -0
  233. package/types/{caribeng-ui-caribe-status.d.ts → caribeng-ui-status.d.ts} +2 -2
  234. package/types/{caribeng-ui-caribe-step-indicator.d.ts → caribeng-ui-step-indicator.d.ts} +2 -2
  235. package/types/caribeng-ui-stepper.d.ts +2 -0
  236. package/types/caribeng-ui-table.d.ts +67 -3
  237. package/types/caribeng-ui-tabmenu.d.ts +7 -0
  238. package/types/{caribeng-ui-caribe-tag-button.d.ts → caribeng-ui-tag-button.d.ts} +2 -2
  239. package/types/caribeng-ui-tieredmenu.d.ts +17 -1
  240. package/types/{caribeng-ui-caribe-tracker.d.ts → caribeng-ui-tracker.d.ts} +2 -2
  241. package/types/{caribeng-ui-caribe-transaction-status.d.ts → caribeng-ui-transaction-status.d.ts} +2 -2
  242. package/types/caribeng-ui-treeselect.d.ts +6 -0
  243. package/types/caribeng-ui-treetable.d.ts +67 -2
  244. package/types/{caribeng-ui-caribe-voucher.d.ts → caribeng-ui-voucher.d.ts} +2 -2
  245. package/types/caribeng-ui-xlsx.d.ts +79 -0
  246. package/types/caribeng-ui.d.ts +985 -2
  247. package/fesm2022/caribeng-ui-caribe-calendar.mjs +0 -92
  248. package/fesm2022/caribeng-ui-caribe-circle-loading.mjs +0 -130
  249. package/fesm2022/caribeng-ui-caribe-data-table.mjs +0 -94
  250. package/fesm2022/caribeng-ui-caribe-file-select.mjs +0 -88
  251. package/fesm2022/caribeng-ui-caribe-inline-alert.mjs +0 -100
  252. package/fesm2022/caribeng-ui-caribe-input-date.mjs +0 -138
  253. package/fesm2022/caribeng-ui-caribe-input-select.mjs +0 -154
  254. package/fesm2022/caribeng-ui-caribe-loader.mjs +0 -48
  255. package/fesm2022/caribeng-ui-caribe-modal.mjs +0 -119
  256. package/fesm2022/caribeng-ui-caribe-pictogram.mjs +0 -52
  257. package/fesm2022/caribeng-ui-caribe-pop-over.mjs +0 -104
  258. package/fesm2022/caribeng-ui-caribe-preloader.mjs +0 -57
  259. package/fesm2022/caribeng-ui-caribe-progress-bar.mjs +0 -84
  260. package/fesm2022/caribeng-ui-caribe-stroke.mjs +0 -69
  261. package/fesm2022/caribeng-ui-caribe-switch.mjs +0 -182
  262. package/styles/caribeng.css +0 -380
  263. package/styles/scss/_mixins.scss +0 -46
  264. package/styles/scss/_overlay.scss +0 -15
  265. package/styles/scss/_tokens.scss +0 -267
  266. package/styles/scss/_utilities.scss +0 -73
  267. package/styles/scss/_variables.scss +0 -33
  268. package/styles/scss/index.scss +0 -16
  269. package/types/caribeng-ui-caribe-calendar.d.ts +0 -27
  270. package/types/caribeng-ui-caribe-circle-loading.d.ts +0 -28
  271. package/types/caribeng-ui-caribe-data-table.d.ts +0 -26
  272. package/types/caribeng-ui-caribe-file-select.d.ts +0 -31
  273. package/types/caribeng-ui-caribe-inline-alert.d.ts +0 -28
  274. package/types/caribeng-ui-caribe-input-date.d.ts +0 -40
  275. package/types/caribeng-ui-caribe-input-select.d.ts +0 -47
  276. package/types/caribeng-ui-caribe-loader.d.ts +0 -22
  277. package/types/caribeng-ui-caribe-modal.d.ts +0 -21
  278. package/types/caribeng-ui-caribe-pictogram.d.ts +0 -15
  279. package/types/caribeng-ui-caribe-pop-over.d.ts +0 -17
  280. package/types/caribeng-ui-caribe-preloader.d.ts +0 -24
  281. package/types/caribeng-ui-caribe-progress-bar.d.ts +0 -28
  282. package/types/caribeng-ui-caribe-stroke.d.ts +0 -17
  283. package/types/caribeng-ui-caribe-switch.d.ts +0 -55
  284. /package/fesm2022/{caribeng-ui-caribe-illustration.mjs → caribeng-ui-illustration.mjs} +0 -0
  285. /package/fesm2022/{caribeng-ui-caribe-logo.mjs → caribeng-ui-logo.mjs} +0 -0
@@ -223,6 +223,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
223
223
  args: [{ providedIn: 'root' }]
224
224
  }], ctorParameters: () => [] });
225
225
 
226
+ let nextId = 0;
227
+ /**
228
+ * Pide confirmaciones desde código, sin declarar un diálogo por cada una. Las
229
+ * muestra el `<cb-confirm-dialog service />` o `<cb-confirm-popup service />` de la vista
230
+ * (el input `service` los conecta), igual que `ConfirmationService` de PrimeNG.
231
+ *
232
+ * @example
233
+ * ```ts
234
+ * private readonly confirmation = inject(CbConfirmationService);
235
+ *
236
+ * borrar(item: Item, event: Event): void {
237
+ * this.confirmation.confirm({
238
+ * message: `¿Eliminar ${item.nombre}?`,
239
+ * acceptSeverity: 'danger',
240
+ * target: event.currentTarget, // solo para cb-confirm-popup
241
+ * accept: () => this.api.eliminar(item.id),
242
+ * });
243
+ * }
244
+ * ```
245
+ */
246
+ class CbConfirmationService {
247
+ constructor() {
248
+ this._request = signal(null, /* @ts-ignore */
249
+ ...(ngDevMode ? [{ debugName: "_request" }] : /* istanbul ignore next */ []));
250
+ /** Confirmación en curso, o `null`. La leen `cb-confirm-dialog` y `cb-confirm-popup`. */
251
+ this.request = this._request.asReadonly();
252
+ }
253
+ /** Muestra una confirmación. Si había otra abierta, la sustituye (sin llamar a su `reject`). */
254
+ confirm(confirmation) {
255
+ this._request.set({ id: ++nextId, confirmation });
256
+ }
257
+ /** Cierra la confirmación en curso sin llamar a `accept` ni a `reject`. */
258
+ close() {
259
+ this._request.set(null);
260
+ }
261
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CbConfirmationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
262
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CbConfirmationService, providedIn: 'root' }); }
263
+ }
264
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CbConfirmationService, decorators: [{
265
+ type: Injectable,
266
+ args: [{ providedIn: 'root' }]
267
+ }] });
268
+
226
269
  /**
227
270
  * Registra CaribeNG en una aplicación Angular (standalone o basada en módulos).
228
271
  *
@@ -248,8 +291,55 @@ function provideCaribeNG(config = {}) {
248
291
  ]);
249
292
  }
250
293
 
294
+ /**
295
+ * Ejecuta el `command` del item (si tiene). Los menús lo llaman al elegir un
296
+ * item, además de emitir su evento de selección.
297
+ */
298
+ function cbRunCommand(item, originalEvent) {
299
+ item.command?.({ item: item, originalEvent });
300
+ }
301
+ /**
302
+ * Quita los items con `visible: false`, también dentro de `items` (submenús)
303
+ * y de `groups[].items` (MegaMenu). Devuelve los mismos objetos si no cambia
304
+ * nada, para que la selección emita el objeto original.
305
+ */
306
+ function cbVisibleItems(items) {
307
+ const result = [];
308
+ for (const item of items) {
309
+ if (item.visible === false)
310
+ continue;
311
+ let copy = null;
312
+ const nested = item.items;
313
+ if (Array.isArray(nested)) {
314
+ const filtered = cbVisibleItems(nested);
315
+ if (filtered.length !== nested.length || filtered.some((child, i) => child !== nested[i]))
316
+ copy = { ...item, items: filtered };
317
+ }
318
+ const groups = item.groups;
319
+ if (Array.isArray(groups)) {
320
+ let groupsChanged = false;
321
+ const filteredGroups = groups
322
+ .filter((group) => group.visible !== false || !(groupsChanged = true))
323
+ .map((group) => {
324
+ if (!Array.isArray(group.items))
325
+ return group;
326
+ const links = cbVisibleItems(group.items);
327
+ if (links.length === group.items.length && links.every((link, i) => link === group.items[i]))
328
+ return group;
329
+ groupsChanged = true;
330
+ return { ...group, items: links };
331
+ });
332
+ if (groupsChanged)
333
+ copy = { ...(copy ?? item), groups: filteredGroups };
334
+ }
335
+ result.push(copy ?? item);
336
+ }
337
+ return result;
338
+ }
339
+
251
340
  /** Español (idioma por defecto). */
252
341
  const CB_LOCALE_ES = {
342
+ intlLocale: 'es',
253
343
  close: 'Cerrar',
254
344
  clear: 'Limpiar',
255
345
  remove: 'Quitar',
@@ -264,6 +354,143 @@ const CB_LOCALE_ES = {
264
354
  selectAll: 'Todos',
265
355
  options: 'Opciones',
266
356
  moreActions: 'Más acciones',
357
+ copy: 'Copiar',
358
+ copied: 'Copiado',
359
+ copyFailed: 'No se pudo copiar',
360
+ qrCode: 'Código QR',
361
+ commandPalette: 'Paleta de comandos',
362
+ commandPlaceholder: 'Busca una página o acción…',
363
+ commandResults: '{0} resultados',
364
+ commandNavigate: 'navegar',
365
+ commandSelect: 'elegir',
366
+ expandSidebar: 'Expandir menú lateral',
367
+ collapseSidebar: 'Contraer menú lateral',
368
+ openMenu: 'Abrir menú',
369
+ chatConversation: 'Conversación',
370
+ chatYou: 'Tú',
371
+ chatAssistant: 'Asistente',
372
+ chatPlaceholder: 'Escribe un mensaje…',
373
+ chatMessage: 'Mensaje',
374
+ chatSend: 'Enviar',
375
+ chatStop: 'Detener',
376
+ chatAttach: 'Adjuntar archivos',
377
+ chatSending: 'Enviando…',
378
+ chatError: 'No se pudo enviar',
379
+ chatRetry: 'Reintentar',
380
+ chatTyping: 'Escribiendo…',
381
+ chatGenerating: 'Generando respuesta…',
382
+ chatResponseReady: 'Respuesta lista',
383
+ chatJumpToLatest: 'Ir al último mensaje',
384
+ phoneCountry: 'País',
385
+ searchCountry: 'Buscar país',
386
+ phoneInvalid: 'Número de teléfono incompleto o no válido',
387
+ chatThinking: 'Pensando…',
388
+ chatThoughtFor: 'Razonó durante {0} s',
389
+ chatReasoning: 'Razonamiento',
390
+ chatToolRunning: 'Usando {0}…',
391
+ chatToolDone: 'Usó {0}',
392
+ chatToolError: 'Falló {0}',
393
+ chatToolInput: 'Entrada',
394
+ chatToolOutput: 'Resultado',
395
+ chatHelpful: 'Respuesta útil',
396
+ chatNotHelpful: 'Respuesta no útil',
397
+ chatRegenerate: 'Regenerar respuesta',
398
+ chatAttachments: 'Adjuntos',
399
+ kanbanCard: 'tarjeta',
400
+ kanbanInstructions: 'Para mover la tarjeta, pulsa Espacio, usa las flechas y vuelve a pulsar Espacio para soltarla. Escape cancela.',
401
+ kanbanGrabbed: '{0} tomada. Columna {1}, posición {2} de {3}.',
402
+ kanbanMoved: '{0}: columna {1}, posición {2} de {3}.',
403
+ kanbanDropped: '{0} soltada en {1}, posición {2}.',
404
+ kanbanCancelled: 'Movimiento cancelado. {0} vuelve a {1}.',
405
+ kanbanFull: '{0} está llena.',
406
+ kanbanCount: '{0} de {1}',
407
+ kanbanAdd: 'Añadir tarjeta',
408
+ kanbanEdit: 'Editar',
409
+ kanbanDelete: 'Eliminar',
410
+ kanbanMoveTo: 'Mover a {0}',
411
+ kanbanCardActions: 'Acciones de {0}',
412
+ kanbanCardTitle: 'Título de la tarjeta',
413
+ kanbanConfirmDelete: '¿Eliminar «{0}»?',
414
+ kanbanDeleted: '{0} eliminada.',
415
+ kanbanAdded: '{0} añadida a {1}.',
416
+ kanbanRenamed: '«{0}» ahora es «{1}».',
417
+ kanbanAddColumn: 'Añadir columna',
418
+ kanbanColumnName: 'Nombre de la columna',
419
+ kanbanNewColumn: 'Nueva columna',
420
+ kanbanColumnActions: 'Acciones de la columna {0}',
421
+ kanbanRename: 'Renombrar',
422
+ kanbanCollapse: 'Contraer {0}',
423
+ kanbanExpand: 'Expandir {0}',
424
+ kanbanConfirmDeleteColumn: '¿Eliminar la columna «{0}» y sus {1} tarjetas?',
425
+ kanbanDetails: 'Detalles de la tarea',
426
+ kanbanOpenDetails: 'Abrir detalles',
427
+ kanbanStatus: 'Columna',
428
+ kanbanAssignees: 'Responsables',
429
+ kanbanNoAssignees: 'Sin responsable',
430
+ kanbanUnassign: 'Quitar a {0}',
431
+ kanbanAssignedTo: 'Responsables: {0}',
432
+ kanbanPriority: 'Prioridad',
433
+ kanbanNoPriority: 'Sin prioridad',
434
+ kanbanPriorityLow: 'Baja',
435
+ kanbanPriorityMedium: 'Media',
436
+ kanbanPriorityHigh: 'Alta',
437
+ kanbanStartDate: 'Fecha de inicio',
438
+ kanbanEndDate: 'Fecha de fin',
439
+ kanbanDates: 'Fechas',
440
+ kanbanOverdue: 'vencida',
441
+ kanbanDescription: 'Descripción',
442
+ kanbanDescriptionPlaceholder: '¿De qué trata esta tarea?',
443
+ kanbanAttachments: 'Adjuntos',
444
+ kanbanAttach: 'Adjuntar archivos',
445
+ kanbanDropFiles: 'o arrástralos aquí',
446
+ kanbanRemoveAttachment: 'Quitar {0}',
447
+ kanbanAttachmentCount: '{0} adjuntos',
448
+ kanbanUpdated: '{0} actualizada.',
449
+ kanbanTaskName: 'Nombre',
450
+ kanbanAddTask: 'Añadir tarea',
451
+ kanbanAddSection: 'Añadir sección',
452
+ kanbanCompleted: 'Finalizada',
453
+ kanbanMarkComplete: 'Marcar «{0}» como finalizada',
454
+ kanbanMarkIncomplete: 'Marcar «{0}» como pendiente',
455
+ kanbanSectionCount: '{0}, {1} tareas',
456
+ kanbanListInstructions: 'Con Alt + flecha arriba o abajo, la tarea se mueve en la lista.',
457
+ kanbanNoDate: 'Sin fecha ({0})',
458
+ kanbanAddTaskOn: 'Añadir tarea el {0}',
459
+ kanbanWeekOf: 'Semana del {0} al {1}',
460
+ kanbanCalendarInstructions: 'Arrastra la tarea a otro día, o usa Alt + flechas: izquierda y derecha cambian el día; arriba y abajo, la semana.',
461
+ kanbanRescheduled: '{0}: {1}.',
462
+ kanbanPreviousWeek: 'Semana anterior',
463
+ kanbanNextWeek: 'Semana siguiente',
464
+ kanbanDays: 'Días',
465
+ kanbanZoomIn: 'Acercar',
466
+ kanbanZoomOut: 'Alejar',
467
+ kanbanAddTaskIn: 'Añadir tarea en {0}',
468
+ kanbanTimelineInstructions: 'Arrastra la tarea para cambiar sus fechas, o sus bordes para cambiar la duración. Con el teclado: Alt + izquierda o derecha la mueve un día, Alt + Mayús + izquierda o derecha cambia la fecha de fin, y Alt + arriba o abajo la pasa a otra sección.',
469
+ kanbanDashboard: 'Panel del proyecto',
470
+ kanbanTotalCompleted: 'Tareas finalizadas',
471
+ kanbanTotalIncomplete: 'Tareas sin finalizar',
472
+ kanbanTotalOverdue: 'Tareas con retraso',
473
+ kanbanTotalTasks: 'Tareas en total',
474
+ kanbanOfTotal: '{0} del total',
475
+ kanbanIncompleteBySection: 'Tareas sin finalizar por sección',
476
+ kanbanByCompletion: 'Tareas por estado de finalización',
477
+ kanbanIncompleteByAssignee: 'Tareas sin finalizar por responsable',
478
+ kanbanByWeek: 'Entregas por semana',
479
+ kanbanCompletedPlural: 'Finalizadas',
480
+ kanbanPendingPlural: 'A tiempo',
481
+ kanbanOverduePlural: 'Con retraso',
482
+ kanbanIncompletePlural: 'Sin finalizar',
483
+ kanbanViews: 'Vistas',
484
+ kanbanViewBoard: 'Tablero',
485
+ kanbanViewList: 'Lista',
486
+ kanbanViewTimeline: 'Cronograma',
487
+ kanbanViewDashboard: 'Panel',
488
+ kanbanViewCalendar: 'Calendario',
489
+ kanbanHideView: 'Ocultar {0}',
490
+ kanbanSideBySide: 'Lado a lado',
491
+ kanbanViewsHint: 'Activa varias vistas para verlas a la vez.',
492
+ save: 'Guardar',
493
+ mentionsCount: '{0} sugerencias',
267
494
  add: 'Agregar',
268
495
  onThisPage: 'En esta página',
269
496
  trendUp: 'aumenta',
@@ -284,6 +511,7 @@ const CB_LOCALE_ES = {
284
511
  start: 'Comenzar',
285
512
  continue: 'Continuar',
286
513
  stepOf: 'Paso {0} de {1}',
514
+ stepCompleted: 'completado',
287
515
  expand: 'Expandir',
288
516
  collapse: 'Contraer',
289
517
  expandItem: 'Expandir {0}',
@@ -342,6 +570,9 @@ const CB_LOCALE_ES = {
342
570
  color: 'Color',
343
571
  colorPicker: 'Selector de color',
344
572
  hexColor: 'Color hexadecimal',
573
+ colorArea: 'Saturación y brillo',
574
+ colorAreaValue: 'Saturación {0} %, brillo {1} %',
575
+ hue: 'Tono',
345
576
  switch: 'Interruptor',
346
577
  ratingOf: '{0} de {1}',
347
578
  openCalendar: 'Abrir calendario',
@@ -461,6 +692,328 @@ const CB_LOCALE_ES = {
461
692
  incorrectPassword: 'Contraseña incorrecta. Inténtalo de nuevo.',
462
693
  password: 'Contraseña',
463
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',
464
1017
  scrollableArea: 'Área desplazable',
465
1018
  scrollTop: 'Volver arriba',
466
1019
  resizePanels: 'Redimensionar paneles',
@@ -478,6 +1031,13 @@ const CB_LOCALE_ES = {
478
1031
  chooseItem: 'Elegir {0}',
479
1032
  perMonth: '/mes',
480
1033
  perYear: '/año',
1034
+ billingCycle: 'Ciclo de facturación',
1035
+ notIncluded: 'no incluido',
1036
+ payAnnually: 'Paga anualmente',
1037
+ payMonthly: 'Paga mensualmente',
1038
+ billedAnnually: 'Facturado {0} anualmente',
1039
+ youSave: 'Ahorras {0}',
1040
+ recommended: 'Recomendado',
481
1041
  textFormatting: 'Formato de texto',
482
1042
  paragraphStyle: 'Estilo de párrafo',
483
1043
  normal: 'Normal',
@@ -611,9 +1171,181 @@ const CB_LOCALE_ES = {
611
1171
  quickFormat: 'Formato rápido',
612
1172
  insertBlock: 'Insertar bloque',
613
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.',
614
1345
  };
615
1346
  /** Inglés. */
616
1347
  const CB_LOCALE_EN = {
1348
+ intlLocale: 'en',
617
1349
  close: 'Close',
618
1350
  clear: 'Clear',
619
1351
  remove: 'Remove',
@@ -628,6 +1360,143 @@ const CB_LOCALE_EN = {
628
1360
  selectAll: 'All',
629
1361
  options: 'Options',
630
1362
  moreActions: 'More actions',
1363
+ copy: 'Copy',
1364
+ copied: 'Copied',
1365
+ copyFailed: 'Could not copy',
1366
+ qrCode: 'QR code',
1367
+ commandPalette: 'Command palette',
1368
+ commandPlaceholder: 'Search for a page or action…',
1369
+ commandResults: '{0} results',
1370
+ commandNavigate: 'navigate',
1371
+ commandSelect: 'select',
1372
+ expandSidebar: 'Expand sidebar',
1373
+ collapseSidebar: 'Collapse sidebar',
1374
+ openMenu: 'Open menu',
1375
+ chatConversation: 'Conversation',
1376
+ chatYou: 'You',
1377
+ chatAssistant: 'Assistant',
1378
+ chatPlaceholder: 'Write a message…',
1379
+ chatMessage: 'Message',
1380
+ chatSend: 'Send',
1381
+ chatStop: 'Stop',
1382
+ chatAttach: 'Attach files',
1383
+ chatSending: 'Sending…',
1384
+ chatError: 'Could not send',
1385
+ chatRetry: 'Retry',
1386
+ chatTyping: 'Typing…',
1387
+ chatGenerating: 'Generating response…',
1388
+ chatResponseReady: 'Response ready',
1389
+ chatJumpToLatest: 'Jump to latest message',
1390
+ phoneCountry: 'Country',
1391
+ searchCountry: 'Search country',
1392
+ phoneInvalid: 'Incomplete or invalid phone number',
1393
+ chatThinking: 'Thinking…',
1394
+ chatThoughtFor: 'Thought for {0} s',
1395
+ chatReasoning: 'Reasoning',
1396
+ chatToolRunning: 'Using {0}…',
1397
+ chatToolDone: 'Used {0}',
1398
+ chatToolError: '{0} failed',
1399
+ chatToolInput: 'Input',
1400
+ chatToolOutput: 'Result',
1401
+ chatHelpful: 'Helpful response',
1402
+ chatNotHelpful: 'Not helpful response',
1403
+ chatRegenerate: 'Regenerate response',
1404
+ chatAttachments: 'Attachments',
1405
+ kanbanCard: 'card',
1406
+ kanbanInstructions: 'To move the card, press Space, use the arrow keys and press Space again to drop it. Escape cancels.',
1407
+ kanbanGrabbed: '{0} picked up. Column {1}, position {2} of {3}.',
1408
+ kanbanMoved: '{0}: column {1}, position {2} of {3}.',
1409
+ kanbanDropped: '{0} dropped in {1}, position {2}.',
1410
+ kanbanCancelled: 'Move cancelled. {0} returns to {1}.',
1411
+ kanbanFull: '{0} is full.',
1412
+ kanbanCount: '{0} of {1}',
1413
+ kanbanAdd: 'Add card',
1414
+ kanbanEdit: 'Edit',
1415
+ kanbanDelete: 'Delete',
1416
+ kanbanMoveTo: 'Move to {0}',
1417
+ kanbanCardActions: 'Actions for {0}',
1418
+ kanbanCardTitle: 'Card title',
1419
+ kanbanConfirmDelete: 'Delete “{0}”?',
1420
+ kanbanDeleted: '{0} deleted.',
1421
+ kanbanAdded: '{0} added to {1}.',
1422
+ kanbanRenamed: '“{0}” is now “{1}”.',
1423
+ kanbanAddColumn: 'Add column',
1424
+ kanbanColumnName: 'Column name',
1425
+ kanbanNewColumn: 'New column',
1426
+ kanbanColumnActions: 'Actions for column {0}',
1427
+ kanbanRename: 'Rename',
1428
+ kanbanCollapse: 'Collapse {0}',
1429
+ kanbanExpand: 'Expand {0}',
1430
+ kanbanConfirmDeleteColumn: 'Delete column “{0}” and its {1} cards?',
1431
+ kanbanDetails: 'Task details',
1432
+ kanbanOpenDetails: 'Open details',
1433
+ kanbanStatus: 'Column',
1434
+ kanbanAssignees: 'Assignees',
1435
+ kanbanNoAssignees: 'Unassigned',
1436
+ kanbanUnassign: 'Remove {0}',
1437
+ kanbanAssignedTo: 'Assignees: {0}',
1438
+ kanbanPriority: 'Priority',
1439
+ kanbanNoPriority: 'No priority',
1440
+ kanbanPriorityLow: 'Low',
1441
+ kanbanPriorityMedium: 'Medium',
1442
+ kanbanPriorityHigh: 'High',
1443
+ kanbanStartDate: 'Start date',
1444
+ kanbanEndDate: 'Due date',
1445
+ kanbanDates: 'Dates',
1446
+ kanbanOverdue: 'overdue',
1447
+ kanbanDescription: 'Description',
1448
+ kanbanDescriptionPlaceholder: 'What is this task about?',
1449
+ kanbanAttachments: 'Attachments',
1450
+ kanbanAttach: 'Attach files',
1451
+ kanbanDropFiles: 'or drop them here',
1452
+ kanbanRemoveAttachment: 'Remove {0}',
1453
+ kanbanAttachmentCount: '{0} attachments',
1454
+ kanbanUpdated: '{0} updated.',
1455
+ kanbanTaskName: 'Name',
1456
+ kanbanAddTask: 'Add task',
1457
+ kanbanAddSection: 'Add section',
1458
+ kanbanCompleted: 'Completed',
1459
+ kanbanMarkComplete: 'Mark “{0}” complete',
1460
+ kanbanMarkIncomplete: 'Mark “{0}” incomplete',
1461
+ kanbanSectionCount: '{0}, {1} tasks',
1462
+ kanbanListInstructions: 'Press Alt + Up or Down arrow to move the task in the list.',
1463
+ kanbanNoDate: 'No date ({0})',
1464
+ kanbanAddTaskOn: 'Add task on {0}',
1465
+ kanbanWeekOf: 'Week of {0} to {1}',
1466
+ kanbanCalendarInstructions: 'Drag the task to another day, or use Alt + arrows: left and right change the day; up and down, the week.',
1467
+ kanbanRescheduled: '{0}: {1}.',
1468
+ kanbanPreviousWeek: 'Previous week',
1469
+ kanbanNextWeek: 'Next week',
1470
+ kanbanDays: 'Days',
1471
+ kanbanZoomIn: 'Zoom in',
1472
+ kanbanZoomOut: 'Zoom out',
1473
+ kanbanAddTaskIn: 'Add task to {0}',
1474
+ kanbanTimelineInstructions: 'Drag the task to change its dates, or its edges to change how long it lasts. With the keyboard: Alt + left or right moves it one day, Alt + Shift + left or right changes the end date, and Alt + up or down moves it to another section.',
1475
+ kanbanDashboard: 'Project dashboard',
1476
+ kanbanTotalCompleted: 'Completed tasks',
1477
+ kanbanTotalIncomplete: 'Incomplete tasks',
1478
+ kanbanTotalOverdue: 'Overdue tasks',
1479
+ kanbanTotalTasks: 'Total tasks',
1480
+ kanbanOfTotal: '{0} of total',
1481
+ kanbanIncompleteBySection: 'Incomplete tasks by section',
1482
+ kanbanByCompletion: 'Tasks by completion status',
1483
+ kanbanIncompleteByAssignee: 'Incomplete tasks by assignee',
1484
+ kanbanByWeek: 'Due dates by week',
1485
+ kanbanCompletedPlural: 'Completed',
1486
+ kanbanPendingPlural: 'On time',
1487
+ kanbanOverduePlural: 'Overdue',
1488
+ kanbanIncompletePlural: 'Incomplete',
1489
+ kanbanViews: 'Views',
1490
+ kanbanViewBoard: 'Board',
1491
+ kanbanViewList: 'List',
1492
+ kanbanViewTimeline: 'Timeline',
1493
+ kanbanViewDashboard: 'Dashboard',
1494
+ kanbanViewCalendar: 'Calendar',
1495
+ kanbanHideView: 'Hide {0}',
1496
+ kanbanSideBySide: 'Side by side',
1497
+ kanbanViewsHint: 'Turn on several views to see them at once.',
1498
+ save: 'Save',
1499
+ mentionsCount: '{0} suggestions',
631
1500
  add: 'Add',
632
1501
  onThisPage: 'On this page',
633
1502
  trendUp: 'up',
@@ -648,6 +1517,7 @@ const CB_LOCALE_EN = {
648
1517
  start: 'Get started',
649
1518
  continue: 'Continue',
650
1519
  stepOf: 'Step {0} of {1}',
1520
+ stepCompleted: 'completed',
651
1521
  expand: 'Expand',
652
1522
  collapse: 'Collapse',
653
1523
  expandItem: 'Expand {0}',
@@ -706,6 +1576,9 @@ const CB_LOCALE_EN = {
706
1576
  color: 'Color',
707
1577
  colorPicker: 'Color picker',
708
1578
  hexColor: 'Hex color',
1579
+ colorArea: 'Saturation and brightness',
1580
+ colorAreaValue: 'Saturation {0}%, brightness {1}%',
1581
+ hue: 'Hue',
709
1582
  switch: 'Switch',
710
1583
  ratingOf: '{0} of {1}',
711
1584
  openCalendar: 'Open calendar',
@@ -825,6 +1698,328 @@ const CB_LOCALE_EN = {
825
1698
  incorrectPassword: 'Incorrect password. Try again.',
826
1699
  password: 'Password',
827
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',
828
2023
  scrollableArea: 'Scrollable area',
829
2024
  scrollTop: 'Back to top',
830
2025
  resizePanels: 'Resize panels',
@@ -842,6 +2037,13 @@ const CB_LOCALE_EN = {
842
2037
  chooseItem: 'Choose {0}',
843
2038
  perMonth: '/mo',
844
2039
  perYear: '/yr',
2040
+ billingCycle: 'Billing cycle',
2041
+ notIncluded: 'not included',
2042
+ payAnnually: 'Pay annually',
2043
+ payMonthly: 'Pay monthly',
2044
+ billedAnnually: 'Billed {0} annually',
2045
+ youSave: 'You save {0}',
2046
+ recommended: 'Recommended',
845
2047
  textFormatting: 'Text formatting',
846
2048
  paragraphStyle: 'Paragraph style',
847
2049
  normal: 'Normal',
@@ -975,6 +2177,177 @@ const CB_LOCALE_EN = {
975
2177
  quickFormat: 'Quick formatting',
976
2178
  insertBlock: 'Insert block',
977
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.',
978
2351
  };
979
2352
  /** Idiomas incluidos. */
980
2353
  const CB_LOCALES = { es: CB_LOCALE_ES, en: CB_LOCALE_EN };
@@ -1137,6 +2510,200 @@ function cbOverlayFocus(options) {
1137
2510
  });
1138
2511
  }
1139
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
+
1140
2707
  /*
1141
2708
  * Public API Surface de @caribeng/ui (entry point primario: núcleo + tema)
1142
2709
  */
@@ -1145,4 +2712,4 @@ function cbOverlayFocus(options) {
1145
2712
  * Generated bundle index. Do not edit.
1146
2713
  */
1147
2714
 
1148
- export { CB_COLOR_PRESETS, CB_CONFIG, CB_DEFAULT_CONFIG, CB_LOCALES, CB_LOCALE_EN, CB_LOCALE_ES, CbLocaleService, CbThemeService, cbFieldState, cbFormat, cbOverlayFocus, 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 };