@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
@@ -1,5 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, booleanAttribute, model, signal, computed, viewChild, forwardRef, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { input, booleanAttribute, model, signal, computed, viewChild, inject, ElementRef, forwardRef, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import * as i1 from '@angular/cdk/overlay';
4
+ import { OverlayModule } from '@angular/cdk/overlay';
3
5
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
6
  import { CbIcon } from '@caribeng/ui/icon';
5
7
  import { injectCbTranslation, cbFormat, cbFieldState } from '@caribeng/ui';
@@ -59,6 +61,13 @@ class CbTreeSelect {
59
61
  this.onChange = () => { };
60
62
  this.onTouched = () => { };
61
63
  this.trigger = viewChild.required('trigger');
64
+ this.host = inject(ElementRef);
65
+ this.triggerWidth = signal(0, /* @ts-ignore */
66
+ ...(ngDevMode ? [{ debugName: "triggerWidth" }] : /* istanbul ignore next */ []));
67
+ this.positions = [
68
+ { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },
69
+ { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },
70
+ ];
62
71
  }
63
72
  writeValue(val) {
64
73
  this.value.set(val ?? null);
@@ -72,9 +81,14 @@ class CbTreeSelect {
72
81
  setDisabledState(isDisabled) {
73
82
  this.cvaDisabled.set(isDisabled);
74
83
  }
84
+ /** Un clic fuera del panel lo cierra (el del disparador ya lo alterna). */
85
+ onOutsideClick(event) {
86
+ if (!this.host.nativeElement.contains(event.target))
87
+ this.open.set(false);
88
+ }
75
89
  /** Escape cierra el panel y devuelve el foco al disparador. */
76
90
  closeOnEscape(event) {
77
- if (!this.open())
91
+ if (!this.open() || event.key !== 'Escape')
78
92
  return;
79
93
  event.preventDefault();
80
94
  this.open.set(false);
@@ -83,6 +97,7 @@ class CbTreeSelect {
83
97
  toggleOpen() {
84
98
  if (this.isDisabled())
85
99
  return;
100
+ this.triggerWidth.set(this.trigger().nativeElement.offsetWidth);
86
101
  this.open.set(!this.open());
87
102
  }
88
103
  isExpanded(key) {
@@ -144,7 +159,17 @@ class CbTreeSelect {
144
159
  <cb-icon name="chevron-down" [size]="16" aria-hidden="true" />
145
160
  </button>
146
161
 
147
- @if (open()) {
162
+ <!-- El panel va en un overlay: no lo recorta un contenedor con overflow (tarjetas, diálogos, tablas). -->
163
+ <ng-template
164
+ cdkConnectedOverlay
165
+ [cdkConnectedOverlayOrigin]="trigger"
166
+ [cdkConnectedOverlayOpen]="open()"
167
+ [cdkConnectedOverlayWidth]="triggerWidth()"
168
+ [cdkConnectedOverlayPositions]="positions"
169
+ (overlayOutsideClick)="onOutsideClick($event)"
170
+ (overlayKeydown)="closeOnEscape($event)"
171
+ (detach)="open.set(false)"
172
+ >
148
173
  <div class="cb-tree-select__panel" role="tree">
149
174
  @for (item of visibleNodes(); track item.node.key) {
150
175
  <div
@@ -184,12 +209,12 @@ class CbTreeSelect {
184
209
  </div>
185
210
  }
186
211
  </div>
187
- }
188
- `, isInline: true, styles: [":host{position:relative;display:inline-block;width:100%;font-family:var(--cb-font-sans)}.cb-tree-select__trigger{width:100%;display:flex;align-items:center;justify-content:space-between;gap:var(--cb-space-2);padding:var(--cb-space-2) var(--cb-space-3);border:var(--cb-border-width) solid var(--cb-color-border);border-radius:var(--cb-radius-md);background:var(--cb-color-surface);color:var(--cb-color-text);font-family:inherit;font-size:var(--cb-text-sm);cursor:pointer}.cb-tree-select__label.cb-is-placeholder{color:var(--cb-color-text-muted)}.cb-tree-select__panel{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:30;max-height:240px;overflow:auto;padding:var(--cb-space-1);border:var(--cb-border-width) solid var(--cb-color-border);border-radius:var(--cb-radius-md);background:var(--cb-color-surface);box-shadow:var(--cb-shadow-md, 0 8px 20px rgba(0, 0, 0, .12))}.cb-tree-select__item{display:flex;align-items:center;gap:.25rem;border-radius:var(--cb-radius-sm)}.cb-tree-select__item.cb-is-selected{background:color-mix(in srgb,var(--cb-color-primary-500) 14%,transparent)}.cb-tree-select__expander{display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;padding:0;border:none;background:transparent;color:var(--cb-color-text-muted);cursor:pointer}.cb-tree-select__spacer{display:inline-block;width:1.25rem}.cb-tree-select__node-btn{flex:1;display:inline-flex;align-items:center;gap:.375rem;padding:.375rem .5rem;border:none;background:transparent;color:var(--cb-color-text);font-family:inherit;font-size:var(--cb-text-sm);text-align:left;cursor:pointer}.cb-tree-select__trigger.cb-is-invalid{border-color:var(--cb-color-danger)}\n"], dependencies: [{ kind: "component", type: CbIcon, selector: "cb-icon", inputs: ["name", "size", "spin", "ariaLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
212
+ </ng-template>
213
+ `, isInline: true, styles: [":host{position:relative;display:inline-block;width:100%;font-family:var(--cb-font-sans)}.cb-tree-select__trigger{width:100%;display:flex;align-items:center;justify-content:space-between;gap:var(--cb-space-2);padding:var(--cb-space-2) var(--cb-space-3);border:var(--cb-border-width) solid var(--cb-color-border);border-radius:var(--cb-radius-md);background:var(--cb-color-surface);color:var(--cb-color-text);font-family:inherit;font-size:var(--cb-text-sm);cursor:pointer}.cb-tree-select__label.cb-is-placeholder{color:var(--cb-color-text-muted)}.cb-tree-select__panel{box-sizing:border-box;width:100%;max-height:240px;overflow:auto;padding:var(--cb-space-1);border:var(--cb-border-width) solid var(--cb-color-border);border-radius:var(--cb-radius-md);background:var(--cb-color-surface);box-shadow:var(--cb-shadow-md, 0 8px 20px rgba(0, 0, 0, .12))}.cb-tree-select__item{display:flex;align-items:center;gap:.25rem;border-radius:var(--cb-radius-sm)}.cb-tree-select__item.cb-is-selected{background:color-mix(in srgb,var(--cb-color-primary-500) 14%,transparent)}.cb-tree-select__expander{display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;padding:0;border:none;background:transparent;color:var(--cb-color-text-muted);cursor:pointer}.cb-tree-select__spacer{display:inline-block;width:1.25rem}.cb-tree-select__node-btn{flex:1;display:inline-flex;align-items:center;gap:.375rem;padding:.375rem .5rem;border:none;background:transparent;color:var(--cb-color-text);font-family:inherit;font-size:var(--cb-text-sm);text-align:left;cursor:pointer}.cb-tree-select__trigger.cb-is-invalid{border-color:var(--cb-color-danger)}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "component", type: CbIcon, selector: "cb-icon", inputs: ["name", "size", "spin", "ariaLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
189
214
  }
190
215
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CbTreeSelect, decorators: [{
191
216
  type: Component,
192
- args: [{ selector: 'cb-tree-select', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, imports: [CbIcon], providers: [
217
+ args: [{ selector: 'cb-tree-select', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, imports: [OverlayModule, CbIcon], providers: [
193
218
  {
194
219
  provide: NG_VALUE_ACCESSOR,
195
220
  useExisting: forwardRef(() => CbTreeSelect),
@@ -220,7 +245,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
220
245
  <cb-icon name="chevron-down" [size]="16" aria-hidden="true" />
221
246
  </button>
222
247
 
223
- @if (open()) {
248
+ <!-- El panel va en un overlay: no lo recorta un contenedor con overflow (tarjetas, diálogos, tablas). -->
249
+ <ng-template
250
+ cdkConnectedOverlay
251
+ [cdkConnectedOverlayOrigin]="trigger"
252
+ [cdkConnectedOverlayOpen]="open()"
253
+ [cdkConnectedOverlayWidth]="triggerWidth()"
254
+ [cdkConnectedOverlayPositions]="positions"
255
+ (overlayOutsideClick)="onOutsideClick($event)"
256
+ (overlayKeydown)="closeOnEscape($event)"
257
+ (detach)="open.set(false)"
258
+ >
224
259
  <div class="cb-tree-select__panel" role="tree">
225
260
  @for (item of visibleNodes(); track item.node.key) {
226
261
  <div
@@ -260,8 +295,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
260
295
  </div>
261
296
  }
262
297
  </div>
263
- }
264
- `, styles: [":host{position:relative;display:inline-block;width:100%;font-family:var(--cb-font-sans)}.cb-tree-select__trigger{width:100%;display:flex;align-items:center;justify-content:space-between;gap:var(--cb-space-2);padding:var(--cb-space-2) var(--cb-space-3);border:var(--cb-border-width) solid var(--cb-color-border);border-radius:var(--cb-radius-md);background:var(--cb-color-surface);color:var(--cb-color-text);font-family:inherit;font-size:var(--cb-text-sm);cursor:pointer}.cb-tree-select__label.cb-is-placeholder{color:var(--cb-color-text-muted)}.cb-tree-select__panel{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:30;max-height:240px;overflow:auto;padding:var(--cb-space-1);border:var(--cb-border-width) solid var(--cb-color-border);border-radius:var(--cb-radius-md);background:var(--cb-color-surface);box-shadow:var(--cb-shadow-md, 0 8px 20px rgba(0, 0, 0, .12))}.cb-tree-select__item{display:flex;align-items:center;gap:.25rem;border-radius:var(--cb-radius-sm)}.cb-tree-select__item.cb-is-selected{background:color-mix(in srgb,var(--cb-color-primary-500) 14%,transparent)}.cb-tree-select__expander{display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;padding:0;border:none;background:transparent;color:var(--cb-color-text-muted);cursor:pointer}.cb-tree-select__spacer{display:inline-block;width:1.25rem}.cb-tree-select__node-btn{flex:1;display:inline-flex;align-items:center;gap:.375rem;padding:.375rem .5rem;border:none;background:transparent;color:var(--cb-color-text);font-family:inherit;font-size:var(--cb-text-sm);text-align:left;cursor:pointer}.cb-tree-select__trigger.cb-is-invalid{border-color:var(--cb-color-danger)}\n"] }]
298
+ </ng-template>
299
+ `, styles: [":host{position:relative;display:inline-block;width:100%;font-family:var(--cb-font-sans)}.cb-tree-select__trigger{width:100%;display:flex;align-items:center;justify-content:space-between;gap:var(--cb-space-2);padding:var(--cb-space-2) var(--cb-space-3);border:var(--cb-border-width) solid var(--cb-color-border);border-radius:var(--cb-radius-md);background:var(--cb-color-surface);color:var(--cb-color-text);font-family:inherit;font-size:var(--cb-text-sm);cursor:pointer}.cb-tree-select__label.cb-is-placeholder{color:var(--cb-color-text-muted)}.cb-tree-select__panel{box-sizing:border-box;width:100%;max-height:240px;overflow:auto;padding:var(--cb-space-1);border:var(--cb-border-width) solid var(--cb-color-border);border-radius:var(--cb-radius-md);background:var(--cb-color-surface);box-shadow:var(--cb-shadow-md, 0 8px 20px rgba(0, 0, 0, .12))}.cb-tree-select__item{display:flex;align-items:center;gap:.25rem;border-radius:var(--cb-radius-sm)}.cb-tree-select__item.cb-is-selected{background:color-mix(in srgb,var(--cb-color-primary-500) 14%,transparent)}.cb-tree-select__expander{display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;padding:0;border:none;background:transparent;color:var(--cb-color-text-muted);cursor:pointer}.cb-tree-select__spacer{display:inline-block;width:1.25rem}.cb-tree-select__node-btn{flex:1;display:inline-flex;align-items:center;gap:.375rem;padding:.375rem .5rem;border:none;background:transparent;color:var(--cb-color-text);font-family:inherit;font-size:var(--cb-text-sm);text-align:left;cursor:pointer}.cb-tree-select__trigger.cb-is-invalid{border-color:var(--cb-color-danger)}\n"] }]
265
300
  }], propDecorators: { nodes: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodes", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], trigger: [{ type: i0.ViewChild, args: ['trigger', { isSignal: true }] }] } });
266
301
 
267
302
  /**
@@ -1,8 +1,9 @@
1
1
  import { NgTemplateOutlet } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
3
  import { input, inject, TemplateRef, Directive, ElementRef, output, contentChildren, signal, computed, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
4
- import { injectCbTranslation, cbFormat } from '@caribeng/ui';
4
+ import { injectCbTranslation, cbFormat, CB_CONFIG, cbToNumber, cbFormatAmount, cbSummarize } from '@caribeng/ui';
5
5
  import { CbIcon } from '@caribeng/ui/icon';
6
+ import { currencySymbol, cbDownloadXlsx } from '@caribeng/ui/xlsx';
6
7
 
7
8
  /** Plantilla para las celdas de una columna (`cbTreeTableCell="campo"`). */
8
9
  class CbTreeTableCellTemplate {
@@ -45,10 +46,30 @@ class CbTreeTable {
45
46
  /** Nombre accesible de la tabla. */
46
47
  this.ariaLabel = input('', /* @ts-ignore */
47
48
  ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
49
+ /**
50
+ * Las filas padre muestran, en las columnas con `summary`, el total de sus
51
+ * descendientes (p. ej. el saldo de una cuenta mayor a partir de sus auxiliares).
52
+ */
53
+ this.rollup = input(false, { ...(ngDevMode ? { debugName: "rollup" } : /* istanbul ignore next */ {}), transform: (v) => v !== false && v != null && `${v}` !== 'false' });
54
+ /** Moneda de las columnas `currency` (si no, la de `provideCaribeNG({ currency })`). */
55
+ this.currency = input(undefined, /* @ts-ignore */
56
+ ...(ngDevMode ? [{ debugName: "currency" }] : /* istanbul ignore next */ []));
57
+ /** Muestra el pie con los totales de las columnas con `summary`. */
58
+ this.showFooter = input(true, { ...(ngDevMode ? { debugName: "showFooter" } : /* istanbul ignore next */ {}), transform: (v) => v !== false && v != null && `${v}` !== 'false' });
59
+ /** Clases CSS extra por fila (p. ej. para filas de total). */
60
+ this.rowClass = input(null, /* @ts-ignore */
61
+ ...(ngDevMode ? [{ debugName: "rowClass" }] : /* istanbul ignore next */ []));
62
+ /** Las filas sin hijos se activan con clic o Enter (`nodeActivate`), p. ej. para ver sus movimientos. */
63
+ this.activateLeaves = input(false, { ...(ngDevMode ? { debugName: "activateLeaves" } : /* istanbul ignore next */ {}), transform: (v) => v !== false && v != null && `${v}` !== 'false' });
64
+ /** Negativos con signo o entre paréntesis (si no, el de `provideCaribeNG({ negativeStyle })`). */
65
+ this.negativeStyle = input(undefined, /* @ts-ignore */
66
+ ...(ngDevMode ? [{ debugName: "negativeStyle" }] : /* istanbul ignore next */ []));
48
67
  /** Se emite al expandir una fila. */
49
68
  this.nodeExpand = output();
50
69
  /** Se emite al contraer una fila. */
51
70
  this.nodeCollapse = output();
71
+ /** Con `activateLeaves`: clic o Enter sobre una fila sin hijos. */
72
+ this.nodeActivate = output();
52
73
  this.cellTemplates = contentChildren(CbTreeTableCellTemplate, /* @ts-ignore */
53
74
  ...(ngDevMode ? [{ debugName: "cellTemplates" }] : /* istanbul ignore next */ []));
54
75
  this.expanded = signal(new Set(), /* @ts-ignore */
@@ -69,6 +90,72 @@ class CbTreeTable {
69
90
  return out;
70
91
  }, /* @ts-ignore */
71
92
  ...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
93
+ this.config = inject(CB_CONFIG);
94
+ this.hasFooterText = computed(() => this.columns().some((c) => c.footer), /* @ts-ignore */
95
+ ...(ngDevMode ? [{ debugName: "hasFooterText" }] : /* istanbul ignore next */ []));
96
+ this.hasFooter = computed(() => this.hasFooterText() || this.columns().some((c) => c.summary), /* @ts-ignore */
97
+ ...(ngDevMode ? [{ debugName: "hasFooter" }] : /* istanbul ignore next */ []));
98
+ /** Columna de la etiqueta "Total": la primera sin total. */
99
+ this.labelColumn = computed(() => Math.max(0, this.columns().findIndex((c) => !c.summary)), /* @ts-ignore */
100
+ ...(ngDevMode ? [{ debugName: "labelColumn" }] : /* istanbul ignore next */ []));
101
+ /** Totales de cada nodo con hijos (sobre sus hojas), por columna con `summary`. */
102
+ this.aggregates = computed(() => {
103
+ const cols = this.columns().filter((c) => c.summary);
104
+ const out = new Map();
105
+ if (!cols.length)
106
+ return out;
107
+ const leavesOf = (node) => {
108
+ if (!node.children?.length)
109
+ return [node.data];
110
+ const leaves = node.children.flatMap(leavesOf);
111
+ out.set(node.key, this.summarize(cols, leaves));
112
+ return leaves;
113
+ };
114
+ const all = this.value().flatMap(leavesOf);
115
+ out.set('', this.summarize(cols, all));
116
+ return out;
117
+ }, /* @ts-ignore */
118
+ ...(ngDevMode ? [{ debugName: "aggregates" }] : /* istanbul ignore next */ []));
119
+ /** Totales del pie (sobre todas las hojas). */
120
+ this.totals = computed(() => this.aggregates().get('') ?? {}, /* @ts-ignore */
121
+ ...(ngDevMode ? [{ debugName: "totals" }] : /* istanbul ignore next */ []));
122
+ }
123
+ /**
124
+ * Hoja de Excel con todas las filas (también las contraídas) agrupadas por
125
+ * nivel con el esquema de Excel, sangría en la primera columna, filas padre en
126
+ * negrita (con sus totales si hay `rollup`) y el total al final.
127
+ */
128
+ toExcelSheet(options = {}) {
129
+ const cols = this.columns();
130
+ const locale = this.config.numberLocale ?? this.t().intlLocale;
131
+ const rows = [];
132
+ const walk = (nodes, level) => nodes.forEach((node) => {
133
+ const parent = !!node.children?.length;
134
+ rows.push({ level, indent: level, bold: parent, cells: cols.map((c) => (c.format && !this.isNumeric(c) ? c.format(this.valueOf(node, c), node) : this.valueOf(node, c))) });
135
+ if (parent)
136
+ walk(node.children, level + 1);
137
+ });
138
+ walk(this.value(), 0);
139
+ return {
140
+ name: options.sheetName ?? (this.ariaLabel() || 'Datos'),
141
+ title: options.title,
142
+ columns: cols.map((c) => {
143
+ const currency = c.currency ?? this.currency() ?? this.config.currency;
144
+ return {
145
+ header: c.header,
146
+ type: c.type === 'currency' ? (currency ? 'currency' : 'number') : c.type === 'number' ? 'number' : c.type === 'percent' ? 'percent' : 'text',
147
+ decimals: c.decimals,
148
+ negative: c.negative ?? this.negativeStyle() ?? this.config.negativeStyle,
149
+ symbol: c.type === 'currency' && currency ? currencySymbol(currency, locale) : undefined,
150
+ };
151
+ }),
152
+ rows,
153
+ totals: this.hasFooter() ? cols.map((c, i) => (c.footer ?? (i === this.labelColumn() && !this.hasFooterText() ? this.t().tableTotal : (this.totals()[c.field] ?? null)))) : undefined,
154
+ };
155
+ }
156
+ /** Descarga el árbol en Excel (`nombre.xlsx`), con los niveles plegables. */
157
+ exportExcel(filename = 'datos', options = {}) {
158
+ cbDownloadXlsx(filename, this.toExcelSheet(options));
72
159
  }
73
160
  /** Expande todas las filas. */
74
161
  expandAll() {
@@ -82,6 +169,18 @@ class CbTreeTable {
82
169
  walk(this.value());
83
170
  this.expanded.set(keys);
84
171
  }
172
+ /** Expande las filas hasta el nivel `level` (1 = solo las raíces visibles) y contrae el resto. */
173
+ expandToLevel(level) {
174
+ const keys = new Set();
175
+ const walk = (nodes, depth) => nodes.forEach((n) => {
176
+ if (n.children?.length && depth < level) {
177
+ keys.add(n.key);
178
+ walk(n.children, depth + 1);
179
+ }
180
+ });
181
+ walk(this.value(), 1);
182
+ this.expanded.set(keys);
183
+ }
85
184
  /** Contrae todas las filas. */
86
185
  collapseAll() {
87
186
  this.expanded.set(new Set());
@@ -100,9 +199,61 @@ class CbTreeTable {
100
199
  const field = this.columns()[0]?.field;
101
200
  return field ? String(node.data[field] ?? '') : node.key;
102
201
  }
202
+ /** Valor de una celda: el total de sus descendientes en las filas padre con `rollup`. */
203
+ valueOf(node, col) {
204
+ if (this.rollup() && col.summary && node.children?.length)
205
+ return this.aggregates().get(node.key)?.[col.field];
206
+ return node.data[col.field];
207
+ }
208
+ isNumeric(col) {
209
+ return col.type === 'number' || col.type === 'currency' || col.type === 'percent';
210
+ }
211
+ alignOf(col) {
212
+ return col.align || (this.isNumeric(col) ? 'right' : null);
213
+ }
214
+ isNegative(value, col) {
215
+ const n = this.isNumeric(col) ? cbToNumber(value) : null;
216
+ return n !== null && n < 0;
217
+ }
218
+ display(value, col, node) {
219
+ if (col.format)
220
+ return col.format(value, node);
221
+ return this.isNumeric(col) ? this.formatNumber(value, col) : value;
222
+ }
223
+ summaryText(value, col) {
224
+ if (value === undefined || value === null)
225
+ return '';
226
+ if (col.summary === 'count')
227
+ return cbFormatAmount(value, this.config.numberLocale ?? this.t().intlLocale, { decimals: 0 });
228
+ return String(this.display(value, col, null) ?? '');
229
+ }
230
+ summarize(cols, leaves) {
231
+ const out = {};
232
+ for (const col of cols) {
233
+ out[col.field] = typeof col.summary === 'function' ? col.summary(leaves) : cbSummarize(leaves.map((d) => d[col.field]), col.summary);
234
+ }
235
+ return out;
236
+ }
237
+ formatNumber(value, col) {
238
+ const locale = this.config.numberLocale ?? this.t().intlLocale;
239
+ const negative = col.negative ?? this.negativeStyle() ?? this.config.negativeStyle ?? 'minus';
240
+ if (col.type === 'percent') {
241
+ const n = cbToNumber(value);
242
+ if (n === null)
243
+ return value == null ? '' : String(value);
244
+ const text = new Intl.NumberFormat(locale, { style: 'percent', minimumFractionDigits: col.decimals ?? 0, maximumFractionDigits: col.decimals ?? 2 }).format(Math.abs(n));
245
+ return n < 0 ? (negative === 'parens' ? `(${text})` : `-${text}`) : text;
246
+ }
247
+ const currency = col.type === 'currency' ? (col.currency ?? this.currency() ?? this.config.currency ?? null) : null;
248
+ return cbFormatAmount(value, locale, { currency, decimals: col.decimals, negative });
249
+ }
103
250
  cellTemplate(field) {
104
251
  return this.cellTemplates().find((c) => c.field() === field)?.template ?? null;
105
252
  }
253
+ onRowClick(node) {
254
+ if (this.activateLeaves() && !this.hasChildren(node))
255
+ this.nodeActivate.emit(node);
256
+ }
106
257
  toggle(node) {
107
258
  this.setExpanded(node, !this.isExpanded(node));
108
259
  }
@@ -142,6 +293,8 @@ class CbTreeTable {
142
293
  case ' ':
143
294
  if (this.hasChildren(current.node))
144
295
  this.toggle(current.node);
296
+ else if (event.key === 'Enter' && this.activateLeaves())
297
+ this.nodeActivate.emit(current.node);
145
298
  break;
146
299
  default:
147
300
  return;
@@ -167,12 +320,12 @@ class CbTreeTable {
167
320
  (open ? this.nodeExpand : this.nodeCollapse).emit(node);
168
321
  }
169
322
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CbTreeTable, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
170
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: CbTreeTable, isStandalone: true, selector: "cb-treetable", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { nodeExpand: "nodeExpand", nodeCollapse: "nodeCollapse" }, host: { classAttribute: "cb-treetable-host" }, queries: [{ propertyName: "cellTemplates", predicate: CbTreeTableCellTemplate, isSignal: true }], ngImport: i0, template: `
323
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: CbTreeTable, isStandalone: true, selector: "cb-treetable", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, rollup: { classPropertyName: "rollup", publicName: "rollup", isSignal: true, isRequired: false, transformFunction: null }, currency: { classPropertyName: "currency", publicName: "currency", isSignal: true, isRequired: false, transformFunction: null }, showFooter: { classPropertyName: "showFooter", publicName: "showFooter", isSignal: true, isRequired: false, transformFunction: null }, rowClass: { classPropertyName: "rowClass", publicName: "rowClass", isSignal: true, isRequired: false, transformFunction: null }, activateLeaves: { classPropertyName: "activateLeaves", publicName: "activateLeaves", isSignal: true, isRequired: false, transformFunction: null }, negativeStyle: { classPropertyName: "negativeStyle", publicName: "negativeStyle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { nodeExpand: "nodeExpand", nodeCollapse: "nodeCollapse", nodeActivate: "nodeActivate" }, host: { classAttribute: "cb-treetable-host" }, queries: [{ propertyName: "cellTemplates", predicate: CbTreeTableCellTemplate, isSignal: true }], ngImport: i0, template: `
171
324
  <table class="cb-treetable" role="treegrid" [attr.aria-label]="ariaLabel() || null" (keydown)="onKeydown($event)">
172
325
  <thead>
173
326
  <tr>
174
327
  @for (col of columns(); track col.field) {
175
- <th scope="col">{{ col.header }}</th>
328
+ <th scope="col" [style.text-align]="alignOf(col)" [style.width]="col.width || null">{{ col.header }}</th>
176
329
  }
177
330
  </tr>
178
331
  </thead>
@@ -180,6 +333,10 @@ class CbTreeTable {
180
333
  @for (row of rows(); track row.node.key) {
181
334
  <tr
182
335
  class="cb-treetable__row"
336
+ [class]="rowClass()?.(row.node) ?? ''"
337
+ [class.cb-treetable__row--parent]="rollup() && hasChildren(row.node)"
338
+ [class.cb-treetable__row--activatable]="activateLeaves() && !hasChildren(row.node)"
339
+ (click)="onRowClick(row.node)"
183
340
  [id]="rowId(row.node)"
184
341
  [attr.aria-level]="row.level"
185
342
  [attr.aria-setsize]="row.setSize"
@@ -189,8 +346,14 @@ class CbTreeTable {
189
346
  (focus)="activeKey.set(row.node.key)"
190
347
  >
191
348
  @for (col of columns(); track col.field; let first = $first) {
192
- <td [class.cb-treetable__first]="first">
349
+ <td
350
+ [class.cb-treetable__first]="first"
351
+ [class.cb-treetable__num]="isNumeric(col)"
352
+ [class.cb-is-negative]="isNegative(valueOf(row.node, col), col)"
353
+ [style.text-align]="alignOf(col)"
354
+ >
193
355
  @if (first) {
356
+ <span class="cb-treetable__cell">
194
357
  <span
195
358
  class="cb-treetable__indent"
196
359
  [style.inline-size]="'calc(' + (row.level - 1) + ' * var(--cb-treetable-indent, 1.25rem))'"
@@ -209,19 +372,42 @@ class CbTreeTable {
209
372
  } @else {
210
373
  <span class="cb-treetable__spacer" aria-hidden="true"></span>
211
374
  }
212
- }
213
- @if (cellTemplate(col.field); as tpl) {
214
- <ng-container *ngTemplateOutlet="tpl; context: { $implicit: row.node.data[col.field], node: row.node, level: row.level }" />
375
+ <span class="cb-treetable__label">
376
+ <ng-container *ngTemplateOutlet="content; context: { row, col }" />
377
+ </span>
378
+ </span>
215
379
  } @else {
216
- {{ row.node.data[col.field] }}
380
+ <ng-container *ngTemplateOutlet="content; context: { row, col }" />
217
381
  }
218
382
  </td>
219
383
  }
220
384
  </tr>
221
385
  }
222
386
  </tbody>
387
+ <ng-template #content let-row="row" let-col="col">
388
+ @if (cellTemplate(col.field); as tpl) {
389
+ <ng-container *ngTemplateOutlet="tpl; context: { $implicit: valueOf(row.node, col), node: row.node, level: row.level }" />
390
+ } @else {
391
+ {{ display(valueOf(row.node, col), col, row.node) }}
392
+ }
393
+ </ng-template>
394
+ @if (showFooter() && hasFooter() && rows().length) {
395
+ <tfoot>
396
+ <tr class="cb-treetable__foot">
397
+ @for (col of columns(); track col.field; let c = $index) {
398
+ @if (col.footer || (c === labelColumn() && !hasFooterText())) {
399
+ <th scope="row" [style.text-align]="alignOf(col)">{{ col.footer || t().tableTotal }}</th>
400
+ } @else {
401
+ <td [class.cb-treetable__num]="isNumeric(col)" [class.cb-is-negative]="isNegative(totals()[col.field], col)" [style.text-align]="alignOf(col)">
402
+ {{ summaryText(totals()[col.field], col) }}
403
+ </td>
404
+ }
405
+ }
406
+ </tr>
407
+ </tfoot>
408
+ }
223
409
  </table>
224
- `, isInline: true, styles: [":host{display:block;overflow-x:auto;color:var(--cb-color-text);font-size:var(--cb-text-sm, .875rem)}.cb-treetable{width:100%;border-collapse:collapse}.cb-treetable th{padding:.65rem .85rem;text-align:left;font-size:var(--cb-text-xs, .75rem);font-weight:var(--cb-font-weight-semibold, 600);text-transform:uppercase;letter-spacing:.04em;color:var(--cb-color-text-muted);border-bottom:1px solid var(--cb-color-border)}.cb-treetable td{padding:.55rem .85rem;border-bottom:1px solid var(--cb-color-border);vertical-align:middle}.cb-treetable__row{outline:none;transition:background var(--cb-duration-fast, .12s) var(--cb-ease, ease)}.cb-treetable__row:hover{background:color-mix(in srgb,var(--cb-color-text) 4%,transparent)}.cb-treetable__row:focus-visible{box-shadow:inset 0 0 0 2px var(--cb-color-focus-ring, var(--cb-color-primary-500))}.cb-treetable__first{white-space:nowrap}.cb-treetable__indent,.cb-treetable__spacer{display:inline-block;vertical-align:middle}.cb-treetable__spacer{width:1.5rem}.cb-treetable__toggler{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;margin-inline-end:.25rem;padding:0;vertical-align:middle;border:0;border-radius:var(--cb-radius-sm, 4px);background:transparent;color:var(--cb-color-text-muted);cursor:pointer}.cb-treetable__toggler:hover{color:var(--cb-color-text);background:color-mix(in srgb,var(--cb-color-text) 8%,transparent)}.cb-treetable__toggler cb-icon{transition:transform var(--cb-duration-fast, .12s) var(--cb-ease, ease)}.cb-treetable__toggler cb-icon.cb-is-open{transform:rotate(90deg)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CbIcon, selector: "cb-icon", inputs: ["name", "size", "spin", "ariaLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
410
+ `, isInline: true, styles: [":host{display:block;overflow-x:auto;container-type:inline-size;color:var(--cb-color-text);font-size:var(--cb-text-sm, .875rem)}.cb-treetable{width:100%;border-collapse:collapse}.cb-treetable th{padding:.65rem .85rem;text-align:left;font-size:var(--cb-text-xs, .75rem);font-weight:var(--cb-font-weight-semibold, 600);text-transform:uppercase;letter-spacing:.04em;color:var(--cb-color-text-muted);border-bottom:1px solid var(--cb-color-border)}.cb-treetable td{padding:.55rem .85rem;border-bottom:1px solid var(--cb-color-border);vertical-align:middle}.cb-treetable__row{outline:none;transition:background var(--cb-duration-fast, .12s) var(--cb-ease, ease)}.cb-treetable__row:hover{background:color-mix(in srgb,var(--cb-color-text) 4%,transparent)}.cb-treetable__row:focus-visible{box-shadow:inset 0 0 0 2px var(--cb-color-focus-ring, var(--cb-color-primary-500))}.cb-treetable__first{white-space:nowrap}.cb-treetable__cell{display:contents}.cb-treetable__indent,.cb-treetable__spacer{display:inline-block;vertical-align:middle}.cb-treetable__spacer{width:1.5rem}.cb-treetable__toggler{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;margin-inline-end:.25rem;padding:0;vertical-align:middle;border:0;border-radius:var(--cb-radius-sm, 4px);background:transparent;color:var(--cb-color-text-muted);cursor:pointer}.cb-treetable__toggler:hover{color:var(--cb-color-text);background:color-mix(in srgb,var(--cb-color-text) 8%,transparent)}.cb-treetable__toggler cb-icon{transition:transform var(--cb-duration-fast, .12s) var(--cb-ease, ease)}.cb-treetable__toggler cb-icon.cb-is-open{transform:rotate(90deg)}.cb-treetable__num{font-variant-numeric:tabular-nums;white-space:nowrap}.cb-treetable .cb-is-negative{color:var(--cb-color-danger-text, #dc2626)}.cb-treetable__row--parent{font-weight:var(--cb-font-weight-semibold, 600)}.cb-treetable__foot>th,.cb-treetable__foot>td{padding:.65rem .85rem;border-top:2px solid var(--cb-color-border-strong);background:var(--cb-color-surface-subtle);color:var(--cb-color-text-strong, var(--cb-color-text));font-size:var(--cb-text-sm, .875rem);font-weight:var(--cb-font-weight-semibold, 600);text-transform:none;letter-spacing:0}.cb-treetable__row--activatable{cursor:pointer}@container (max-width: 40rem){.cb-treetable__first,.cb-treetable thead th:first-child,.cb-treetable__foot>:first-child{position:sticky;left:0;z-index:1;min-width:8rem;max-width:11rem;white-space:normal}.cb-treetable__first,.cb-treetable thead th:first-child{background-color:var(--cb-color-bg)}.cb-treetable__first{box-shadow:inset -1px 0 0 var(--cb-color-border)}.cb-treetable__cell{display:flex;align-items:center}.cb-treetable__indent,.cb-treetable__spacer,.cb-treetable__toggler{flex:none}.cb-treetable__label{flex:1;min-width:0}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CbIcon, selector: "cb-icon", inputs: ["name", "size", "spin", "ariaLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
225
411
  }
226
412
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CbTreeTable, decorators: [{
227
413
  type: Component,
@@ -230,7 +416,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
230
416
  <thead>
231
417
  <tr>
232
418
  @for (col of columns(); track col.field) {
233
- <th scope="col">{{ col.header }}</th>
419
+ <th scope="col" [style.text-align]="alignOf(col)" [style.width]="col.width || null">{{ col.header }}</th>
234
420
  }
235
421
  </tr>
236
422
  </thead>
@@ -238,6 +424,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
238
424
  @for (row of rows(); track row.node.key) {
239
425
  <tr
240
426
  class="cb-treetable__row"
427
+ [class]="rowClass()?.(row.node) ?? ''"
428
+ [class.cb-treetable__row--parent]="rollup() && hasChildren(row.node)"
429
+ [class.cb-treetable__row--activatable]="activateLeaves() && !hasChildren(row.node)"
430
+ (click)="onRowClick(row.node)"
241
431
  [id]="rowId(row.node)"
242
432
  [attr.aria-level]="row.level"
243
433
  [attr.aria-setsize]="row.setSize"
@@ -247,8 +437,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
247
437
  (focus)="activeKey.set(row.node.key)"
248
438
  >
249
439
  @for (col of columns(); track col.field; let first = $first) {
250
- <td [class.cb-treetable__first]="first">
440
+ <td
441
+ [class.cb-treetable__first]="first"
442
+ [class.cb-treetable__num]="isNumeric(col)"
443
+ [class.cb-is-negative]="isNegative(valueOf(row.node, col), col)"
444
+ [style.text-align]="alignOf(col)"
445
+ >
251
446
  @if (first) {
447
+ <span class="cb-treetable__cell">
252
448
  <span
253
449
  class="cb-treetable__indent"
254
450
  [style.inline-size]="'calc(' + (row.level - 1) + ' * var(--cb-treetable-indent, 1.25rem))'"
@@ -267,20 +463,43 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
267
463
  } @else {
268
464
  <span class="cb-treetable__spacer" aria-hidden="true"></span>
269
465
  }
270
- }
271
- @if (cellTemplate(col.field); as tpl) {
272
- <ng-container *ngTemplateOutlet="tpl; context: { $implicit: row.node.data[col.field], node: row.node, level: row.level }" />
466
+ <span class="cb-treetable__label">
467
+ <ng-container *ngTemplateOutlet="content; context: { row, col }" />
468
+ </span>
469
+ </span>
273
470
  } @else {
274
- {{ row.node.data[col.field] }}
471
+ <ng-container *ngTemplateOutlet="content; context: { row, col }" />
275
472
  }
276
473
  </td>
277
474
  }
278
475
  </tr>
279
476
  }
280
477
  </tbody>
478
+ <ng-template #content let-row="row" let-col="col">
479
+ @if (cellTemplate(col.field); as tpl) {
480
+ <ng-container *ngTemplateOutlet="tpl; context: { $implicit: valueOf(row.node, col), node: row.node, level: row.level }" />
481
+ } @else {
482
+ {{ display(valueOf(row.node, col), col, row.node) }}
483
+ }
484
+ </ng-template>
485
+ @if (showFooter() && hasFooter() && rows().length) {
486
+ <tfoot>
487
+ <tr class="cb-treetable__foot">
488
+ @for (col of columns(); track col.field; let c = $index) {
489
+ @if (col.footer || (c === labelColumn() && !hasFooterText())) {
490
+ <th scope="row" [style.text-align]="alignOf(col)">{{ col.footer || t().tableTotal }}</th>
491
+ } @else {
492
+ <td [class.cb-treetable__num]="isNumeric(col)" [class.cb-is-negative]="isNegative(totals()[col.field], col)" [style.text-align]="alignOf(col)">
493
+ {{ summaryText(totals()[col.field], col) }}
494
+ </td>
495
+ }
496
+ }
497
+ </tr>
498
+ </tfoot>
499
+ }
281
500
  </table>
282
- `, styles: [":host{display:block;overflow-x:auto;color:var(--cb-color-text);font-size:var(--cb-text-sm, .875rem)}.cb-treetable{width:100%;border-collapse:collapse}.cb-treetable th{padding:.65rem .85rem;text-align:left;font-size:var(--cb-text-xs, .75rem);font-weight:var(--cb-font-weight-semibold, 600);text-transform:uppercase;letter-spacing:.04em;color:var(--cb-color-text-muted);border-bottom:1px solid var(--cb-color-border)}.cb-treetable td{padding:.55rem .85rem;border-bottom:1px solid var(--cb-color-border);vertical-align:middle}.cb-treetable__row{outline:none;transition:background var(--cb-duration-fast, .12s) var(--cb-ease, ease)}.cb-treetable__row:hover{background:color-mix(in srgb,var(--cb-color-text) 4%,transparent)}.cb-treetable__row:focus-visible{box-shadow:inset 0 0 0 2px var(--cb-color-focus-ring, var(--cb-color-primary-500))}.cb-treetable__first{white-space:nowrap}.cb-treetable__indent,.cb-treetable__spacer{display:inline-block;vertical-align:middle}.cb-treetable__spacer{width:1.5rem}.cb-treetable__toggler{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;margin-inline-end:.25rem;padding:0;vertical-align:middle;border:0;border-radius:var(--cb-radius-sm, 4px);background:transparent;color:var(--cb-color-text-muted);cursor:pointer}.cb-treetable__toggler:hover{color:var(--cb-color-text);background:color-mix(in srgb,var(--cb-color-text) 8%,transparent)}.cb-treetable__toggler cb-icon{transition:transform var(--cb-duration-fast, .12s) var(--cb-ease, ease)}.cb-treetable__toggler cb-icon.cb-is-open{transform:rotate(90deg)}\n"] }]
283
- }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], nodeExpand: [{ type: i0.Output, args: ["nodeExpand"] }], nodeCollapse: [{ type: i0.Output, args: ["nodeCollapse"] }], cellTemplates: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => CbTreeTableCellTemplate), { isSignal: true }] }] } });
501
+ `, styles: [":host{display:block;overflow-x:auto;container-type:inline-size;color:var(--cb-color-text);font-size:var(--cb-text-sm, .875rem)}.cb-treetable{width:100%;border-collapse:collapse}.cb-treetable th{padding:.65rem .85rem;text-align:left;font-size:var(--cb-text-xs, .75rem);font-weight:var(--cb-font-weight-semibold, 600);text-transform:uppercase;letter-spacing:.04em;color:var(--cb-color-text-muted);border-bottom:1px solid var(--cb-color-border)}.cb-treetable td{padding:.55rem .85rem;border-bottom:1px solid var(--cb-color-border);vertical-align:middle}.cb-treetable__row{outline:none;transition:background var(--cb-duration-fast, .12s) var(--cb-ease, ease)}.cb-treetable__row:hover{background:color-mix(in srgb,var(--cb-color-text) 4%,transparent)}.cb-treetable__row:focus-visible{box-shadow:inset 0 0 0 2px var(--cb-color-focus-ring, var(--cb-color-primary-500))}.cb-treetable__first{white-space:nowrap}.cb-treetable__cell{display:contents}.cb-treetable__indent,.cb-treetable__spacer{display:inline-block;vertical-align:middle}.cb-treetable__spacer{width:1.5rem}.cb-treetable__toggler{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;margin-inline-end:.25rem;padding:0;vertical-align:middle;border:0;border-radius:var(--cb-radius-sm, 4px);background:transparent;color:var(--cb-color-text-muted);cursor:pointer}.cb-treetable__toggler:hover{color:var(--cb-color-text);background:color-mix(in srgb,var(--cb-color-text) 8%,transparent)}.cb-treetable__toggler cb-icon{transition:transform var(--cb-duration-fast, .12s) var(--cb-ease, ease)}.cb-treetable__toggler cb-icon.cb-is-open{transform:rotate(90deg)}.cb-treetable__num{font-variant-numeric:tabular-nums;white-space:nowrap}.cb-treetable .cb-is-negative{color:var(--cb-color-danger-text, #dc2626)}.cb-treetable__row--parent{font-weight:var(--cb-font-weight-semibold, 600)}.cb-treetable__foot>th,.cb-treetable__foot>td{padding:.65rem .85rem;border-top:2px solid var(--cb-color-border-strong);background:var(--cb-color-surface-subtle);color:var(--cb-color-text-strong, var(--cb-color-text));font-size:var(--cb-text-sm, .875rem);font-weight:var(--cb-font-weight-semibold, 600);text-transform:none;letter-spacing:0}.cb-treetable__row--activatable{cursor:pointer}@container (max-width: 40rem){.cb-treetable__first,.cb-treetable thead th:first-child,.cb-treetable__foot>:first-child{position:sticky;left:0;z-index:1;min-width:8rem;max-width:11rem;white-space:normal}.cb-treetable__first,.cb-treetable thead th:first-child{background-color:var(--cb-color-bg)}.cb-treetable__first{box-shadow:inset -1px 0 0 var(--cb-color-border)}.cb-treetable__cell{display:flex;align-items:center}.cb-treetable__indent,.cb-treetable__spacer,.cb-treetable__toggler{flex:none}.cb-treetable__label{flex:1;min-width:0}}\n"] }]
502
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], rollup: [{ type: i0.Input, args: [{ isSignal: true, alias: "rollup", required: false }] }], currency: [{ type: i0.Input, args: [{ isSignal: true, alias: "currency", required: false }] }], showFooter: [{ type: i0.Input, args: [{ isSignal: true, alias: "showFooter", required: false }] }], rowClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowClass", required: false }] }], activateLeaves: [{ type: i0.Input, args: [{ isSignal: true, alias: "activateLeaves", required: false }] }], negativeStyle: [{ type: i0.Input, args: [{ isSignal: true, alias: "negativeStyle", required: false }] }], nodeExpand: [{ type: i0.Output, args: ["nodeExpand"] }], nodeCollapse: [{ type: i0.Output, args: ["nodeCollapse"] }], nodeActivate: [{ type: i0.Output, args: ["nodeActivate"] }], cellTemplates: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => CbTreeTableCellTemplate), { isSignal: true }] }] } });
284
503
 
285
504
  /**
286
505
  * Generated bundle index. Do not edit.