@sdcorejs/angular 19.1.6 → 19.2.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 (354) hide show
  1. package/README.md +10 -0
  2. package/assets/scss/core/menu.scss +18 -0
  3. package/assets/scss/core/utilities/_misc.scss +15 -0
  4. package/assets/scss/sd-core.scss +1 -0
  5. package/components/anchor/src/components/anchor/anchor.component.d.ts +3 -1
  6. package/components/badge/src/badge.component.d.ts +1 -0
  7. package/components/ckeditor-styles/src/ckeditor-styles.component.d.ts +1 -1
  8. package/components/form-generic/src/components/form-builder/components/expression-builder/expression-builder.component.d.ts +2 -1
  9. package/components/form-generic/src/components/form-builder/form-builder.component.d.ts +3 -1
  10. package/components/form-generic/src/components/form-render/components/item/components/checkbox/checkbox.component.d.ts +34 -0
  11. package/components/form-generic/src/components/form-render/components/item/components/index.d.ts +1 -0
  12. package/components/form-generic/src/components/form-render/components/item/components/table/table.component.d.ts +6 -1
  13. package/components/form-generic/src/components/sd-feel-expression/sd-feel-expression.component.d.ts +1 -1
  14. package/components/form-generic/src/configurations/form.configuration.d.ts +1 -1
  15. package/components/form-generic/src/models/form-generic-component.model.d.ts +8 -8
  16. package/components/form-generic/src/models/form-generic-definition-selection.model.d.ts +5 -5
  17. package/components/form-generic/src/models/form-generic-expression.model.d.ts +12 -12
  18. package/components/form-generic/src/models/index.d.ts +1 -0
  19. package/components/form-generic/src/services/form-generic.service.d.ts +2 -2
  20. package/components/import-excel/src/import-excel.component.d.ts +1 -0
  21. package/components/index.d.ts +6 -1
  22. package/components/mini-editor/src/mini-editor.model.d.ts +1 -1
  23. package/components/modal/src/modal.component.d.ts +3 -2
  24. package/components/modal-resizable/src/modal-resizable.component.d.ts +92 -0
  25. package/components/modal-resizable/src/modal-resizable.registry.d.ts +22 -0
  26. package/components/org-chart/src/org-chart.component.d.ts +6 -0
  27. package/components/preview/src/preview-image/preview-image.component.d.ts +1 -0
  28. package/components/query-bar/src/components/actions-bar/actions-bar.component.d.ts +6 -2
  29. package/components/query-bar/src/components/build-chip/build-chip.component.d.ts +4 -1
  30. package/components/query-bar/src/components/chip-popover/chip-popover.component.d.ts +8 -0
  31. package/components/query-bar/src/components/field-picker/field-picker.component.d.ts +2 -0
  32. package/components/query-bar/src/components/inline-chip/inline-chip.component.d.ts +2 -0
  33. package/components/query-bar/src/components/inline-value-chip/inline-value-chip.component.d.ts +3 -3
  34. package/components/query-bar/src/components/saved-filters-menu/saved-filters-menu.component.d.ts +9 -4
  35. package/components/query-bar/src/query-bar.component.d.ts +32 -5
  36. package/components/query-bar/src/query-bar.model.d.ts +15 -12
  37. package/components/query-builder/src/query-builder.component.d.ts +76 -39
  38. package/components/query-builder/src/query-builder.model.d.ts +59 -52
  39. package/components/query-builder/src/query-builder.serializer.d.ts +15 -6
  40. package/components/section/src/section.component.d.ts +3 -0
  41. package/components/side-drawer/src/body-scroll-lock.service.d.ts +10 -0
  42. package/components/splitter/src/splitter-handle/splitter-handle.component.d.ts +1 -0
  43. package/components/tab-router/index.d.ts +2 -1
  44. package/components/tab-router/src/actions/tab-router.action.d.ts +2 -2
  45. package/components/tab-router/src/components/tab-router-item/tab-router-item.component.d.ts +2 -2
  46. package/components/tab-router/src/components/tab-router-nav/tab-router-nav.component.d.ts +3 -3
  47. package/components/tab-router/src/components/tab-router-outlet/tab-router-outlet.component.d.ts +3 -3
  48. package/components/tab-router/src/decorators/tab.decorator.d.ts +13 -1
  49. package/components/tab-router/src/events/tab-router.event.d.ts +3 -3
  50. package/components/tab-router/src/models/tab-router.model.d.ts +2 -2
  51. package/components/tab-router/src/pipes/tab-info.pipe.d.ts +2 -2
  52. package/components/tab-router/src/services/tab-router.service.d.ts +9 -9
  53. package/components/table/index.d.ts +1 -0
  54. package/components/table/src/components/config/config.component.d.ts +6 -1
  55. package/components/table/src/components/desktop-cell/view/view.component.d.ts +1 -0
  56. package/components/table/src/components/filter/external-filter/external-filter.component.d.ts +1 -1
  57. package/components/table/src/components/filter/mobile-filter/mobile-filter.component.d.ts +1 -1
  58. package/components/table/src/components/selector-action/action-filter.pipe.d.ts +8 -1
  59. package/components/table/src/components/selector-action/selector-action.component.d.ts +2 -0
  60. package/components/table/src/directives/index.d.ts +1 -0
  61. package/components/table/src/directives/sd-table-command-header-def.directive.d.ts +24 -0
  62. package/components/table/src/models/table-column.model.d.ts +30 -13
  63. package/components/table/src/models/table-item.model.d.ts +30 -1
  64. package/components/table/src/models/table-option-selector.model.d.ts +5 -4
  65. package/components/table/src/models/table-option.model.d.ts +12 -0
  66. package/components/table/src/pipes/sd-group.pipe.d.ts +6 -2
  67. package/components/table/src/services/table-filter/table-filter.model.d.ts +15 -15
  68. package/components/table/src/services/table-filter/table-filter.service.d.ts +2 -2
  69. package/components/table/src/services/table-format/table-format.service.d.ts +1 -1
  70. package/components/table/src/services/table-selection/selection-action.util.d.ts +24 -0
  71. package/components/table/src/services/table-selection/table-selection.util.d.ts +31 -0
  72. package/components/table/src/services/tree/tree.util.d.ts +3 -2
  73. package/components/table/src/table.component.d.ts +51 -5
  74. package/components/tree/src/tree-item-def.directive.d.ts +1 -1
  75. package/components/tree/src/tree.component.d.ts +16 -4
  76. package/components/tree/src/tree.model.d.ts +31 -25
  77. package/components/upload-file/src/configurations/upload-file.configuration.d.ts +2 -2
  78. package/components/upload-file/src/upload-file.component.d.ts +4 -1
  79. package/configurations/src/sd-core.configuration.d.ts +1 -2
  80. package/fesm2022/sdcorejs-angular-components-anchor.mjs +36 -12
  81. package/fesm2022/sdcorejs-angular-components-anchor.mjs.map +1 -1
  82. package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs +2 -2
  83. package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs.map +1 -1
  84. package/fesm2022/sdcorejs-angular-components-badge.mjs +15 -2
  85. package/fesm2022/sdcorejs-angular-components-badge.mjs.map +1 -1
  86. package/fesm2022/sdcorejs-angular-components-button.mjs +2 -2
  87. package/fesm2022/sdcorejs-angular-components-button.mjs.map +1 -1
  88. package/fesm2022/sdcorejs-angular-components-ckeditor-styles.mjs +1 -1
  89. package/fesm2022/sdcorejs-angular-components-ckeditor-styles.mjs.map +1 -1
  90. package/fesm2022/sdcorejs-angular-components-code-editor.mjs +3 -3
  91. package/fesm2022/sdcorejs-angular-components-code-editor.mjs.map +1 -1
  92. package/fesm2022/sdcorejs-angular-components-data-state.mjs +3 -3
  93. package/fesm2022/sdcorejs-angular-components-data-state.mjs.map +1 -1
  94. package/fesm2022/sdcorejs-angular-components-editor.mjs +2 -2
  95. package/fesm2022/sdcorejs-angular-components-editor.mjs.map +1 -1
  96. package/fesm2022/sdcorejs-angular-components-form-generic.mjs +324 -192
  97. package/fesm2022/sdcorejs-angular-components-form-generic.mjs.map +1 -1
  98. package/fesm2022/sdcorejs-angular-components-history.mjs +4 -4
  99. package/fesm2022/sdcorejs-angular-components-history.mjs.map +1 -1
  100. package/fesm2022/sdcorejs-angular-components-import-excel.mjs +13 -5
  101. package/fesm2022/sdcorejs-angular-components-import-excel.mjs.map +1 -1
  102. package/fesm2022/sdcorejs-angular-components-inform.mjs +3 -3
  103. package/fesm2022/sdcorejs-angular-components-inform.mjs.map +1 -1
  104. package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs +164 -8
  105. package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs.map +1 -1
  106. package/fesm2022/sdcorejs-angular-components-modal.mjs +30 -18
  107. package/fesm2022/sdcorejs-angular-components-modal.mjs.map +1 -1
  108. package/fesm2022/sdcorejs-angular-components-org-chart.mjs +60 -13
  109. package/fesm2022/sdcorejs-angular-components-org-chart.mjs.map +1 -1
  110. package/fesm2022/sdcorejs-angular-components-preview.mjs +27 -17
  111. package/fesm2022/sdcorejs-angular-components-preview.mjs.map +1 -1
  112. package/fesm2022/sdcorejs-angular-components-query-bar.mjs +192 -30
  113. package/fesm2022/sdcorejs-angular-components-query-bar.mjs.map +1 -1
  114. package/fesm2022/sdcorejs-angular-components-query-builder.mjs +187 -127
  115. package/fesm2022/sdcorejs-angular-components-query-builder.mjs.map +1 -1
  116. package/fesm2022/sdcorejs-angular-components-section.mjs +16 -2
  117. package/fesm2022/sdcorejs-angular-components-section.mjs.map +1 -1
  118. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs +83 -24
  119. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs.map +1 -1
  120. package/fesm2022/sdcorejs-angular-components-splitter.mjs +57 -21
  121. package/fesm2022/sdcorejs-angular-components-splitter.mjs.map +1 -1
  122. package/fesm2022/sdcorejs-angular-components-stepper.mjs +2 -2
  123. package/fesm2022/sdcorejs-angular-components-stepper.mjs.map +1 -1
  124. package/fesm2022/sdcorejs-angular-components-tab-router.mjs +68 -20
  125. package/fesm2022/sdcorejs-angular-components-tab-router.mjs.map +1 -1
  126. package/fesm2022/sdcorejs-angular-components-tab.mjs +3 -2
  127. package/fesm2022/sdcorejs-angular-components-tab.mjs.map +1 -1
  128. package/fesm2022/sdcorejs-angular-components-table.mjs +541 -254
  129. package/fesm2022/sdcorejs-angular-components-table.mjs.map +1 -1
  130. package/fesm2022/sdcorejs-angular-components-tree.mjs +80 -17
  131. package/fesm2022/sdcorejs-angular-components-tree.mjs.map +1 -1
  132. package/fesm2022/sdcorejs-angular-components-upload-file.mjs +48 -13
  133. package/fesm2022/sdcorejs-angular-components-upload-file.mjs.map +1 -1
  134. package/fesm2022/sdcorejs-angular-components.mjs +6 -1
  135. package/fesm2022/sdcorejs-angular-components.mjs.map +1 -1
  136. package/fesm2022/sdcorejs-angular-configurations.mjs.map +1 -1
  137. package/fesm2022/sdcorejs-angular-directives.mjs +45 -8
  138. package/fesm2022/sdcorejs-angular-directives.mjs.map +1 -1
  139. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs +40 -29
  140. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs.map +1 -1
  141. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs +5 -5
  142. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs.map +1 -1
  143. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs +67 -50
  144. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs.map +1 -1
  145. package/fesm2022/sdcorejs-angular-forms-chip.mjs +57 -43
  146. package/fesm2022/sdcorejs-angular-forms-chip.mjs.map +1 -1
  147. package/fesm2022/sdcorejs-angular-forms-date-range.mjs +231 -60
  148. package/fesm2022/sdcorejs-angular-forms-date-range.mjs.map +1 -1
  149. package/fesm2022/sdcorejs-angular-forms-date.mjs +95 -23
  150. package/fesm2022/sdcorejs-angular-forms-date.mjs.map +1 -1
  151. package/fesm2022/sdcorejs-angular-forms-datetime.mjs +130 -26
  152. package/fesm2022/sdcorejs-angular-forms-datetime.mjs.map +1 -1
  153. package/fesm2022/sdcorejs-angular-forms-entity-picker.mjs +39 -15
  154. package/fesm2022/sdcorejs-angular-forms-entity-picker.mjs.map +1 -1
  155. package/fesm2022/sdcorejs-angular-forms-input-color.mjs +16 -5
  156. package/fesm2022/sdcorejs-angular-forms-input-color.mjs.map +1 -1
  157. package/fesm2022/sdcorejs-angular-forms-input-number.mjs +24 -9
  158. package/fesm2022/sdcorejs-angular-forms-input-number.mjs.map +1 -1
  159. package/fesm2022/sdcorejs-angular-forms-input.mjs +58 -10
  160. package/fesm2022/sdcorejs-angular-forms-input.mjs.map +1 -1
  161. package/fesm2022/sdcorejs-angular-forms-models.mjs +227 -6
  162. package/fesm2022/sdcorejs-angular-forms-models.mjs.map +1 -1
  163. package/fesm2022/sdcorejs-angular-forms-radio.mjs +4 -4
  164. package/fesm2022/sdcorejs-angular-forms-radio.mjs.map +1 -1
  165. package/fesm2022/sdcorejs-angular-forms-select.mjs +135 -37
  166. package/fesm2022/sdcorejs-angular-forms-select.mjs.map +1 -1
  167. package/fesm2022/sdcorejs-angular-forms-switch.mjs +18 -3
  168. package/fesm2022/sdcorejs-angular-forms-switch.mjs.map +1 -1
  169. package/fesm2022/sdcorejs-angular-forms-textarea.mjs +51 -62
  170. package/fesm2022/sdcorejs-angular-forms-textarea.mjs.map +1 -1
  171. package/fesm2022/sdcorejs-angular-forms-time-range.mjs +57 -12
  172. package/fesm2022/sdcorejs-angular-forms-time-range.mjs.map +1 -1
  173. package/fesm2022/sdcorejs-angular-forms-time.mjs +16 -5
  174. package/fesm2022/sdcorejs-angular-forms-time.mjs.map +1 -1
  175. package/fesm2022/sdcorejs-angular-forms-tree-select.mjs +100 -9
  176. package/fesm2022/sdcorejs-angular-forms-tree-select.mjs.map +1 -1
  177. package/fesm2022/sdcorejs-angular-forms.mjs +91 -46
  178. package/fesm2022/sdcorejs-angular-forms.mjs.map +1 -1
  179. package/fesm2022/sdcorejs-angular-handlers.mjs +18 -3
  180. package/fesm2022/sdcorejs-angular-handlers.mjs.map +1 -1
  181. package/fesm2022/sdcorejs-angular-i18n.mjs +490 -68
  182. package/fesm2022/sdcorejs-angular-i18n.mjs.map +1 -1
  183. package/fesm2022/sdcorejs-angular-interceptors.mjs +87 -29
  184. package/fesm2022/sdcorejs-angular-interceptors.mjs.map +1 -1
  185. package/fesm2022/sdcorejs-angular-modules-auth.mjs +25 -15
  186. package/fesm2022/sdcorejs-angular-modules-auth.mjs.map +1 -1
  187. package/fesm2022/sdcorejs-angular-modules-icon.mjs +2 -2
  188. package/fesm2022/sdcorejs-angular-modules-icon.mjs.map +1 -1
  189. package/fesm2022/sdcorejs-angular-modules-keycloak.mjs +32 -3
  190. package/fesm2022/sdcorejs-angular-modules-keycloak.mjs.map +1 -1
  191. package/fesm2022/sdcorejs-angular-modules-layout.mjs +332 -111
  192. package/fesm2022/sdcorejs-angular-modules-layout.mjs.map +1 -1
  193. package/fesm2022/sdcorejs-angular-modules-permission.mjs +177 -40
  194. package/fesm2022/sdcorejs-angular-modules-permission.mjs.map +1 -1
  195. package/fesm2022/sdcorejs-angular-pipes.mjs +62 -28
  196. package/fesm2022/sdcorejs-angular-pipes.mjs.map +1 -1
  197. package/fesm2022/sdcorejs-angular-services-api.mjs +123 -13
  198. package/fesm2022/sdcorejs-angular-services-api.mjs.map +1 -1
  199. package/fesm2022/sdcorejs-angular-services-cache.mjs +53 -3
  200. package/fesm2022/sdcorejs-angular-services-cache.mjs.map +1 -1
  201. package/fesm2022/sdcorejs-angular-services-confirm.mjs +25 -73
  202. package/fesm2022/sdcorejs-angular-services-confirm.mjs.map +1 -1
  203. package/fesm2022/sdcorejs-angular-services-excel.mjs +12 -10
  204. package/fesm2022/sdcorejs-angular-services-excel.mjs.map +1 -1
  205. package/fesm2022/sdcorejs-angular-services-loading.mjs +75 -84
  206. package/fesm2022/sdcorejs-angular-services-loading.mjs.map +1 -1
  207. package/fesm2022/sdcorejs-angular-services-notify.mjs +46 -5
  208. package/fesm2022/sdcorejs-angular-services-notify.mjs.map +1 -1
  209. package/fesm2022/sdcorejs-angular-services-storage.mjs +4 -0
  210. package/fesm2022/sdcorejs-angular-services-storage.mjs.map +1 -1
  211. package/fesm2022/sdcorejs-angular-services.mjs +0 -1
  212. package/fesm2022/sdcorejs-angular-services.mjs.map +1 -1
  213. package/fesm2022/sdcorejs-angular-utilities-extensions.mjs +225 -80
  214. package/fesm2022/sdcorejs-angular-utilities-extensions.mjs.map +1 -1
  215. package/fesm2022/sdcorejs-angular-utilities-models.mjs +1 -63
  216. package/fesm2022/sdcorejs-angular-utilities-models.mjs.map +1 -1
  217. package/fesm2022/sdcorejs-angular.mjs +17 -10
  218. package/fesm2022/sdcorejs-angular.mjs.map +1 -1
  219. package/forms/autocomplete/src/autocomplete.component.d.ts +5 -2
  220. package/forms/chip-calendar/src/chip-calendar.component.d.ts +10 -0
  221. package/forms/date/src/date.component.d.ts +13 -2
  222. package/forms/date-range/src/date-range.component.d.ts +13 -2
  223. package/forms/datetime/src/datetime.component.d.ts +13 -2
  224. package/forms/entity-picker/src/entity-picker.component.d.ts +9 -3
  225. package/forms/input/src/input.component.d.ts +3 -0
  226. package/forms/input-color/src/input-color.component.d.ts +4 -0
  227. package/forms/input-number/src/input-number.component.d.ts +3 -0
  228. package/forms/models/index.d.ts +3 -0
  229. package/forms/models/src/sd-form-control-connector.d.ts +12 -0
  230. package/forms/models/src/sd-model-facing-control.d.ts +43 -0
  231. package/forms/models/src/sd-search.model.d.ts +1 -1
  232. package/forms/models/src/sd-selection-data.model.d.ts +1 -1
  233. package/forms/models/src/sd-temporal-transform.d.ts +31 -0
  234. package/forms/models/src/sd-timer-scope.d.ts +29 -0
  235. package/forms/select/src/select.component.d.ts +27 -4
  236. package/forms/src/forms.module.d.ts +22 -13
  237. package/forms/switch/src/switch.component.d.ts +5 -0
  238. package/forms/textarea/src/textarea.component.d.ts +5 -3
  239. package/forms/time-range/src/time-range.component.d.ts +22 -1
  240. package/forms/tree-select/src/tree-select.component.d.ts +36 -5
  241. package/i18n/src/en.d.ts +90 -10
  242. package/i18n/src/i18n.messages.d.ts +1 -1
  243. package/i18n/src/i18n.pipe.d.ts +3 -3
  244. package/i18n/src/i18n.service.d.ts +2 -1
  245. package/i18n/src/i18n.types.d.ts +0 -3
  246. package/interceptors/no-internet/no-internet.interceptor.d.ts +11 -1
  247. package/modules/auth/services/auth.model.d.ts +1 -1
  248. package/modules/keycloak/keycloak.service.d.ts +1 -0
  249. package/modules/layout/components/shared/menu-tree/menu-tree.component.d.ts +2 -0
  250. package/modules/layout/components/sidebar-mobile-v1/components/sidebar/sidebar.component.d.ts +3 -3
  251. package/modules/layout/components/sidebar-mobile-v1/main.component.d.ts +3 -3
  252. package/modules/layout/components/sidebar-mobile-v2/main.component.d.ts +3 -3
  253. package/modules/layout/components/sidebar-mobile-v3/main.component.d.ts +3 -3
  254. package/modules/layout/components/sidebar-v1/components/sidebar/sidebar.component.d.ts +8 -3
  255. package/modules/layout/components/sidebar-v1/main.component.d.ts +3 -3
  256. package/modules/layout/components/sidebar-v2/main.component.d.ts +3 -3
  257. package/modules/layout/components/sidebar-v3/main.component.d.ts +3 -3
  258. package/modules/layout/modules/forbidden/pages/root/root.component.d.ts +5 -0
  259. package/modules/layout/modules/not-found/pages/root/root.component.d.ts +5 -0
  260. package/modules/layout/services/layout.service.d.ts +21 -0
  261. package/modules/layout/services/storage/storage.service.d.ts +52 -7
  262. package/modules/permission/src/configurations/permission.configuration.d.ts +11 -0
  263. package/modules/permission/src/directives/permission.directive.d.ts +2 -1
  264. package/modules/permission/src/services/permission.service.d.ts +52 -1
  265. package/package.json +40 -33
  266. package/pipes/src/safe-html.pipe.d.ts +26 -4
  267. package/pipes/src/time-different.pipe.d.ts +1 -0
  268. package/public-api.d.ts +11 -10
  269. package/services/api/src/api-host.d.ts +15 -0
  270. package/services/api/src/api.model.d.ts +14 -0
  271. package/services/api/src/api.module.d.ts +6 -0
  272. package/services/cache/src/cache.model.d.ts +10 -0
  273. package/services/index.d.ts +0 -1
  274. package/services/notify/index.d.ts +1 -1
  275. package/utilities/extensions/index.d.ts +1 -5
  276. package/utilities/extensions/src/url-safety.d.ts +72 -0
  277. package/utilities/extensions/src/utility.extension.d.ts +9 -5
  278. package/utilities/models/index.d.ts +0 -10
  279. package/components/base/index.d.ts +0 -1
  280. package/components/base/src/base-secure.component.d.ts +0 -8
  281. package/components/document-builder/index.d.ts +0 -4
  282. package/components/document-builder/src/components/header-footer-builder/header-footer-builder.component.d.ts +0 -15
  283. package/components/document-builder/src/components/header-footer-builder/plugins/page-number.plugin.d.ts +0 -4
  284. package/components/document-builder/src/components/index.d.ts +0 -1
  285. package/components/document-builder/src/document-builder.component.d.ts +0 -53
  286. package/components/document-builder/src/document-builder.config.d.ts +0 -21
  287. package/components/document-builder/src/document-builder.model.d.ts +0 -41
  288. package/components/document-builder/src/document-builder.utils.d.ts +0 -10
  289. package/components/document-builder/src/plugins/block-space/block-space.plugin.d.ts +0 -9
  290. package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.d.ts +0 -44
  291. package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.model.d.ts +0 -57
  292. package/components/document-builder/src/plugins/heading/heading.plugin.d.ts +0 -5
  293. package/components/document-builder/src/plugins/highlight-range/highlight-range.plugin.d.ts +0 -4
  294. package/components/document-builder/src/plugins/image-custom/image-custom.plugin.d.ts +0 -31
  295. package/components/document-builder/src/plugins/image-upload/image-upload.plugin.d.ts +0 -5
  296. package/components/document-builder/src/plugins/index.d.ts +0 -11
  297. package/components/document-builder/src/plugins/page-orientation/page-orientation.plugin.d.ts +0 -24
  298. package/components/document-builder/src/plugins/paste-handler/filters/bookmark.d.ts +0 -14
  299. package/components/document-builder/src/plugins/paste-handler/filters/br.d.ts +0 -15
  300. package/components/document-builder/src/plugins/paste-handler/filters/image.d.ts +0 -25
  301. package/components/document-builder/src/plugins/paste-handler/filters/list.d.ts +0 -29
  302. package/components/document-builder/src/plugins/paste-handler/filters/parse.d.ts +0 -35
  303. package/components/document-builder/src/plugins/paste-handler/filters/removeboldwrapper.d.ts +0 -15
  304. package/components/document-builder/src/plugins/paste-handler/filters/removegooglesheetstag.d.ts +0 -15
  305. package/components/document-builder/src/plugins/paste-handler/filters/removeinvalidtablewidth.d.ts +0 -15
  306. package/components/document-builder/src/plugins/paste-handler/filters/removemsattributes.d.ts +0 -15
  307. package/components/document-builder/src/plugins/paste-handler/filters/removestyleblock.d.ts +0 -15
  308. package/components/document-builder/src/plugins/paste-handler/filters/removexmlns.d.ts +0 -15
  309. package/components/document-builder/src/plugins/paste-handler/filters/replacemsfootnotes.d.ts +0 -54
  310. package/components/document-builder/src/plugins/paste-handler/filters/space.d.ts +0 -27
  311. package/components/document-builder/src/plugins/paste-handler/filters/table.d.ts +0 -16
  312. package/components/document-builder/src/plugins/paste-handler/filters/utils.d.ts +0 -25
  313. package/components/document-builder/src/plugins/paste-handler/index.d.ts +0 -35
  314. package/components/document-builder/src/plugins/paste-handler/normalizers/googledocsnormalizer.d.ts +0 -31
  315. package/components/document-builder/src/plugins/paste-handler/normalizers/googlesheetsnormalizer.d.ts +0 -31
  316. package/components/document-builder/src/plugins/paste-handler/normalizers/mswordnormalizer.d.ts +0 -29
  317. package/components/document-builder/src/plugins/paste-handler/types.d.ts +0 -30
  318. package/components/document-builder/src/plugins/table-custom/index.d.ts +0 -34
  319. package/components/document-builder/src/plugins/variable/variable.plugin.d.ts +0 -51
  320. package/components/table/src/pipes/selection-visible-select-all.pipe.d.ts +0 -9
  321. package/fesm2022/sdcorejs-angular-components-base.mjs +0 -23
  322. package/fesm2022/sdcorejs-angular-components-base.mjs.map +0 -1
  323. package/fesm2022/sdcorejs-angular-components-document-builder.mjs +0 -5038
  324. package/fesm2022/sdcorejs-angular-components-document-builder.mjs.map +0 -1
  325. package/fesm2022/sdcorejs-angular-models.mjs +0 -6
  326. package/fesm2022/sdcorejs-angular-models.mjs.map +0 -1
  327. package/fesm2022/sdcorejs-angular-services-docx.mjs +0 -291
  328. package/fesm2022/sdcorejs-angular-services-docx.mjs.map +0 -1
  329. package/fesm2022/sdcorejs-angular-services-license.mjs +0 -97
  330. package/fesm2022/sdcorejs-angular-services-license.mjs.map +0 -1
  331. package/models/index.d.ts +0 -1
  332. package/models/src/language.model.d.ts +0 -2
  333. package/services/docx/index.d.ts +0 -1
  334. package/services/docx/src/lib/docx.model.d.ts +0 -9
  335. package/services/docx/src/lib/docx.service.d.ts +0 -14
  336. package/services/docx/src/lib/pandoc-core.d.ts +0 -11
  337. package/services/docx/src/public-api.d.ts +0 -2
  338. package/services/license/index.d.ts +0 -1
  339. package/services/license/src/license.service.d.ts +0 -9
  340. package/utilities/extensions/src/array.extension.d.ts +0 -1
  341. package/utilities/extensions/src/color.extension.d.ts +0 -5
  342. package/utilities/extensions/src/date.extension.d.ts +0 -1
  343. package/utilities/extensions/src/number.extension.d.ts +0 -1
  344. package/utilities/extensions/src/string.extension.d.ts +0 -50
  345. package/utilities/models/src/color.model.d.ts +0 -4
  346. package/utilities/models/src/empty.model.d.ts +0 -4
  347. package/utilities/models/src/filter.model.d.ts +0 -12
  348. package/utilities/models/src/maybe-async.model.d.ts +0 -10
  349. package/utilities/models/src/nested-key-of.model.d.ts +0 -4
  350. package/utilities/models/src/operator.model.d.ts +0 -13
  351. package/utilities/models/src/order.model.d.ts +0 -4
  352. package/utilities/models/src/paging.model.d.ts +0 -8
  353. package/utilities/models/src/pattern.model.d.ts +0 -21
  354. package/utilities/models/src/size.model.d.ts +0 -4
@@ -3,8 +3,25 @@ import { SdBadge } from '@sdcorejs/angular/components/badge';
3
3
  import type { SdSearch } from '@sdcorejs/angular/forms/models';
4
4
  import { NestedKeyOf, Operator } from '@sdcorejs/utils/models';
5
5
  import { SdUnwrapSignal } from '@sdcorejs/angular/utilities/models';
6
- export type SdTableColumn<T = any> = SdTableColumnText<T> | SdTableColumnNumber<T> | SdTableColumnBool<T> | SdTableColumnDate<T> | SdTableColumnValues<T> | SdTableColumnLazyValues<T> | SdTableColumnChildren<T>;
7
- export type SdTableColumnTransformFunc<T = any> = (value: any, rowData: T, args?: {
6
+ export type SdTableColumn<T = unknown> = SdTableColumnText<T> | SdTableColumnNumber<T> | SdTableColumnBool<T> | SdTableColumnDate<T> | SdTableColumnValues<T> | SdTableColumnLazyValues<T> | SdTableColumnChildren<T>;
7
+ /**
8
+ * Cột bảng dùng ở các API **không quan tâm kiểu hàng** — chúng chỉ đọc `field` / `type` / `hidden` /
9
+ * `filter` và không bao giờ chạm vào dữ liệu hàng (service filter, `SdConvertToPagingReq`, …).
10
+ *
11
+ * why: `SdTableColumn<T>` **bất biến (invariant)** theo `T`, vì `T` xuất hiện ở CẢ HAI chiều:
12
+ * - covariant — `field: NestedKeyOf<T>`;
13
+ * - contravariant — `transform` / `tooltip` / `click` / `useBadge` / `htmlTemplate` đều nhận `rowData: T`.
14
+ *
15
+ * Vì bất biến nên KHÔNG tồn tại siêu kiểu chung: `SdTableColumn<unknown>` hỏng ở chiều contravariant,
16
+ * `SdTableColumn<never>` hỏng ở chiều covariant (`field` co về `never`). Trước đây default generic là
17
+ * `any` nên mọi thứ gán được cho nhau — không phải vì kiểu đúng, mà vì `any` tắt kiểm tra hai chiều.
18
+ *
19
+ * Public default đã siết sang `unknown` (consumer viết `SdTableColumn<User>` sẽ được suy luận thật và
20
+ * báo lỗi khi dùng sai). Riêng vài vị trí tham số NỘI BỘ row-agnostic dưới đây vẫn cần một escape
21
+ * hatch: alias này khoanh vùng `any` vào đúng một chỗ có tài liệu, thay vì rải `any` khắp API công khai.
22
+ */
23
+ export type SdTableColumnAnyRow = SdTableColumn<any>;
24
+ export type SdTableColumnTransformFunc<T = unknown> = (value: any, rowData: T, args?: {
8
25
  isExport?: boolean;
9
26
  }) => string | Promise<string>;
10
27
  interface Badge {
@@ -13,8 +30,8 @@ interface Badge {
13
30
  icon?: SdUnwrapSignal<SdBadge['icon']>;
14
31
  title?: SdUnwrapSignal<SdBadge['title']>;
15
32
  }
16
- type UseBadgeFunc<T = any> = (value: any, rowData: T) => Badge;
17
- type UseBadgeValuesFunc<T = any, K = any> = (value: any, rowData: T, items: K[]) => Badge;
33
+ type UseBadgeFunc<T = unknown> = (value: any, rowData: T) => Badge;
34
+ type UseBadgeValuesFunc<T = unknown, K = unknown> = (value: any, rowData: T, items: K[]) => Badge;
18
35
  interface ColumnTitleOption {
19
36
  title: string;
20
37
  templateRef?: TemplateRef<any>;
@@ -27,7 +44,7 @@ interface ColumnCellOption {
27
44
  type?: 'more' | 'tooltip';
28
45
  };
29
46
  }
30
- interface SdTableColumnBase<T = any> {
47
+ interface SdTableColumnBase<T = unknown> {
31
48
  title: string | ColumnTitleOption;
32
49
  cell?: ColumnCellOption;
33
50
  width?: string;
@@ -58,12 +75,12 @@ interface SdTableColumnBase<T = any> {
58
75
  description?: string;
59
76
  };
60
77
  }
61
- interface SdTableColumnText<T = any> extends SdTableColumnBase<T> {
78
+ interface SdTableColumnText<T = unknown> extends SdTableColumnBase<T> {
62
79
  field: NestedKeyOf<T>;
63
80
  type: 'string';
64
81
  useBadge?: UseBadgeFunc<T>;
65
82
  }
66
- interface SdTableColumnNumber<T = any> extends SdTableColumnBase<T> {
83
+ interface SdTableColumnNumber<T = unknown> extends SdTableColumnBase<T> {
67
84
  field: NestedKeyOf<T>;
68
85
  type: 'number';
69
86
  useBadge?: UseBadgeFunc<T>;
@@ -71,7 +88,7 @@ interface SdTableColumnNumber<T = any> extends SdTableColumnBase<T> {
71
88
  type?: 'split-number';
72
89
  };
73
90
  }
74
- interface SdTableColumnBool<T = any> extends SdTableColumnBase<T> {
91
+ interface SdTableColumnBool<T = unknown> extends SdTableColumnBase<T> {
75
92
  field: NestedKeyOf<T>;
76
93
  type: 'boolean';
77
94
  useBadge?: UseBadgeFunc<T>;
@@ -80,7 +97,7 @@ interface SdTableColumnBool<T = any> extends SdTableColumnBase<T> {
80
97
  displayOnFalse?: string;
81
98
  };
82
99
  }
83
- interface SdTableColumnDate<T = any> extends SdTableColumnBase<T> {
100
+ interface SdTableColumnDate<T = unknown> extends SdTableColumnBase<T> {
84
101
  field: NestedKeyOf<T>;
85
102
  type: 'date' | 'datetime' | 'time';
86
103
  useBadge?: UseBadgeFunc<T>;
@@ -88,7 +105,7 @@ interface SdTableColumnDate<T = any> extends SdTableColumnBase<T> {
88
105
  type?: 'daterange' | 'date' | 'split-date';
89
106
  };
90
107
  }
91
- export interface SdTableColumnValues<T = any, K = Record<string, any>> extends SdTableColumnBase<T> {
108
+ export interface SdTableColumnValues<T = unknown, K = Record<string, any>> extends SdTableColumnBase<T> {
92
109
  field: NestedKeyOf<T>;
93
110
  type: 'values';
94
111
  useBadge?: UseBadgeValuesFunc<T, K>;
@@ -99,7 +116,7 @@ export interface SdTableColumnValues<T = any, K = Record<string, any>> extends S
99
116
  selection?: 'MULTIPLE';
100
117
  };
101
118
  }
102
- export interface SdTableColumnLazyValues<T = any, K = Record<string, any>> extends SdTableColumnBase<T> {
119
+ export interface SdTableColumnLazyValues<T = unknown, K = Record<string, any>> extends SdTableColumnBase<T> {
103
120
  field: NestedKeyOf<T>;
104
121
  type: 'lazy-values';
105
122
  useBadge?: UseBadgeFunc<T>;
@@ -111,8 +128,8 @@ export interface SdTableColumnLazyValues<T = any, K = Record<string, any>> exten
111
128
  selection?: 'MULTIPLE';
112
129
  };
113
130
  }
114
- export type SdTableColumnNormal<T = any> = Exclude<SdTableColumn<T>, SdTableColumnChildren<T>>;
115
- export interface SdTableColumnChildren<T = any> extends SdTableColumnBase<T> {
131
+ export type SdTableColumnNormal<T = unknown> = Exclude<SdTableColumn<T>, SdTableColumnChildren<T>>;
132
+ export interface SdTableColumnChildren<T = unknown> extends SdTableColumnBase<T> {
116
133
  field: string;
117
134
  type: 'children';
118
135
  children: SdTableColumnNormal<T>[];
@@ -1,5 +1,6 @@
1
1
  import { SdBadge } from '@sdcorejs/angular/components/badge';
2
2
  import { SdUnwrapSignal } from '@sdcorejs/angular/utilities/models';
3
+ import type { SdTableGroupDefContext } from '../directives/sd-table-group-def.directive';
3
4
  export interface SdTableMetaSelector {
4
5
  selectable?: boolean;
5
6
  isSelected?: boolean;
@@ -41,6 +42,12 @@ export interface SdTableDisplay {
41
42
  export interface SdTableMetaGroup<T = any> {
42
43
  /** Children items thuộc group này (chỉ set trên group header row). */
43
44
  items?: SdTableItem<T>[];
45
+ /**
46
+ * Raw data của children (`items.map(i => i.data)`).
47
+ * why: precompute 1 lần lúc SdGroupPipe dựng header — trước đây `groupContext()`
48
+ * map lại mảng này ở MỖI change-detection pass cho MỖI group row.
49
+ */
50
+ data?: T[];
44
51
  /** true = row này là synthetic group header (sinh bởi SdGroupPipe). */
45
52
  isGroupHeader?: boolean;
46
53
  /** Hash key của group (= Utilities.hash(values)). */
@@ -49,6 +56,20 @@ export interface SdTableMetaGroup<T = any> {
49
56
  values?: Record<string, any>;
50
57
  /** Trạng thái expand. Chỉ ý nghĩa khi `option.group.collapsible = true`. */
51
58
  isExpanded?: boolean;
59
+ /**
60
+ * true nếu MỌI selectable child trong group đã được chọn.
61
+ * why: cache thay cho `isGroupAllSelected(item)` gọi trong template — hàm đó duyệt
62
+ * toàn bộ children mỗi CD pass. Cập nhật ở selection sync path (`#updateSelectedItems`).
63
+ */
64
+ isSelected?: boolean;
65
+ /** true nếu chỉ MỘT PHẦN children được chọn (partial). Cache — xem `isSelected`. */
66
+ indeterminate?: boolean;
67
+ /**
68
+ * Context ổn định truyền cho template `sdTableGroupDef`.
69
+ * why: giữ NGUYÊN reference qua các CD pass để `ngTemplateOutlet` không phải
70
+ * dựng lại embedded view; giá trị bên trong được mutate tại chỗ khi selection đổi.
71
+ */
72
+ context?: SdTableGroupDefContext<T>;
52
73
  }
53
74
  export interface SdTableMeta<T> {
54
75
  id: string;
@@ -57,9 +78,17 @@ export interface SdTableMeta<T> {
57
78
  expand?: SdTableMetaExpand;
58
79
  group?: SdTableMetaGroup<T>;
59
80
  tree?: SdTableMetaTree<T>;
81
+ /**
82
+ * Style inline của cả row, resolve từ `option.style.rowCss` MỘT LẦN mỗi lần render.
83
+ * why: template bind `[ngStyle]` trực tiếp vào đây; gọi `rowCss(...)` trong binding
84
+ * trả object MỚI mỗi CD pass → KeyValueDiffer phải diff lại toàn bộ row mỗi pass.
85
+ */
86
+ rowStyle?: Record<string, string> | null;
60
87
  }
61
88
  export interface SdTableItem<T = any> {
62
89
  meta: SdTableMeta<T>;
63
90
  data: T;
64
91
  }
65
- export declare const MapToSdTableItem: <T = any>(item: T) => SdTableItem<T>;
92
+ /** Resolve id cho một row data. Xem chú thích ở `rowIdByData` để biết thứ tự ưu tiên. */
93
+ export declare const resolveTableItemId: <T = any>(item: T, rowKey?: string) => string;
94
+ export declare const MapToSdTableItem: <T = any>(item: T, rowKey?: string) => SdTableItem<T>;
@@ -27,14 +27,15 @@ export interface SdTableOptionSelector<T = any> {
27
27
  *
28
28
  * - Default (false): selection bị mất khi data items được re-fetch (server-side) hoặc
29
29
  * item references thay đổi. Action bar chỉ hiển thị số item selected ở page hiện tại.
30
- * - Enabled (true): table giữ map nội bộ selectedItems theo `meta.id` (hash của data).
30
+ * - Enabled (true): table giữ map nội bộ selectedItems theo `meta.id`.
31
31
  * Sau mỗi #render, restore `isSelected` cho item nào id đã có trong map.
32
32
  * `selectedTableItems()` trả về TOÀN BỘ item đã chọn xuyên trang (kể cả off-page),
33
33
  * nên action bar + callback `click(items)` nhận đầy đủ data đang được chọn.
34
34
  *
35
- * Lưu ý: matching dựa trên `Utilities.hash(data)` hai item cùng data shape sẽ
36
- * trùng id (mong muốn). Nếu data timestamp/random field thay đổi giữa các lần fetch,
37
- * id sẽ khác selection không restore được.
35
+ * ⚠️ Matching dựa trên `meta.id`. Không khai báo `option.rowKey` thì id được sinh theo
36
+ * IDENTITY của object data sống qua filter/sort/paging phía client, nhưng KHÔNG sống
37
+ * qua một lần fetch mới của server (object mới → id mới). Với `type: 'server'`, HÃY
38
+ * khai báo `option.rowKey` trỏ vào field định danh của dòng.
38
39
  */
39
40
  preserveSelection?: boolean;
40
41
  }
@@ -20,6 +20,18 @@ interface SdTableBaseOption<T = any> {
20
20
  * ví dụ các option có hỗ trợ cache/config theo key.
21
21
  */
22
22
  key?: string;
23
+ /**
24
+ * Field định danh của MỘT DÒNG (hỗ trợ dot-notation, vd `'id'` hoặc `'user.id'`).
25
+ *
26
+ * Table dùng giá trị này làm `SdTableItem.meta.id` — khoá cho `trackBy` của mat-table,
27
+ * cho `preserveSelection`, cho trạng thái bung của tree và cho các `data-autoid` theo dòng.
28
+ *
29
+ * Không truyền thì table tự sinh id theo IDENTITY của object data (ổn định trong suốt
30
+ * vòng đời object, nhưng KHÔNG sống sót qua một lần fetch mới của server). Vì vậy hãy
31
+ * khai báo `rowKey` khi dùng `preserveSelection`, `tree` với `type: 'server'`, hoặc khi
32
+ * cần autoId theo dòng ổn định cho E2E.
33
+ */
34
+ rowKey?: string;
23
35
  /**
24
36
  * Cấu hình hiển thị/phục hồi config của table.
25
37
  * Xem thêm kiểu chi tiết tại `TableOptionConfig`.
@@ -1,6 +1,7 @@
1
1
  import { PipeTransform } from '@angular/core';
2
2
  import { SdTableOption } from '../models/table-option.model';
3
3
  import { SdTableItem } from '../models/table-item.model';
4
+ import { SdGroupHeaderHost } from '../services/table-selection/table-selection.util';
4
5
  import * as i0 from "@angular/core";
5
6
  export declare class SdGroupPipe implements PipeTransform {
6
7
  /**
@@ -14,10 +15,13 @@ export declare class SdGroupPipe implements PipeTransform {
14
15
  * expand/collapse qua các lần transform. Pipe đọc state từ Map; nếu key chưa tồn tại,
15
16
  * dùng `!option.group.defaultCollapsed`. Pipe ghi state về Map cho lần read sau.
16
17
  *
18
+ * `host` (optional, owned by component) — nhận danh sách header vừa sinh (để component
19
+ * sync selection state) và cung cấp callback toggle cho template context.
20
+ *
17
21
  * @example
18
- * `_items | sdGroup: _tableOption : groupExpandState`
22
+ * `_items | sdGroup: _tableOption : groupExpandState : groupHost`
19
23
  */
20
- transform(items: SdTableItem[], gridOption: SdTableOption, expandState?: Map<string, boolean>): SdTableItem[];
24
+ transform(items: SdTableItem[], gridOption: SdTableOption, expandState?: Map<string, boolean>, host?: SdGroupHeaderHost): SdTableItem[];
21
25
  static ɵfac: i0.ɵɵFactoryDeclaration<SdGroupPipe, never>;
22
26
  static ɵpipe: i0.ɵɵPipeDeclaration<SdGroupPipe, "sdGroup", true>;
23
27
  }
@@ -2,7 +2,7 @@ import { TemplateRef } from '@angular/core';
2
2
  import type { SdSearch } from '@sdcorejs/angular/forms/models';
3
3
  import { NestedKeyOf, Operator, Order, PagingReq } from '@sdcorejs/utils/models';
4
4
  import { Observable } from 'rxjs';
5
- import { SdTableColumn } from '../../models/table-column.model';
5
+ import { SdTableColumn, SdTableColumnAnyRow } from '../../models/table-column.model';
6
6
  export interface SdTableQuickFilter {
7
7
  code: string;
8
8
  columnFilter: Record<string, any>;
@@ -18,7 +18,7 @@ export interface TableFilterValue {
18
18
  notReload?: boolean;
19
19
  filtered?: boolean;
20
20
  }
21
- export interface SdTableFilterRequest<T = any> {
21
+ export interface SdTableFilterRequest<T = unknown> {
22
22
  columnOperator: Record<NestedKeyOf<T>, Operator>;
23
23
  rawColumnFilter: Record<NestedKeyOf<T>, any>;
24
24
  rawExternalFilter: Record<string, any>;
@@ -29,7 +29,7 @@ export interface SdTableFilterRequest<T = any> {
29
29
  isExported?: boolean;
30
30
  visibledColumns?: SdTableColumn[];
31
31
  }
32
- export interface SdTableOptionFilter<T = any> {
32
+ export interface SdTableOptionFilter<T = unknown> {
33
33
  /** Key định danh nếu muốn lưu cache */
34
34
  key?: string;
35
35
  /** Có bật cache giá trị filter hay không */
@@ -54,13 +54,13 @@ export interface SdTableOptionFilter<T = any> {
54
54
  onClearFilter?: () => void;
55
55
  }
56
56
  export declare const SdConvertToPagingReq: (filterRequest: SdTableFilterRequest, args: {
57
- columns?: SdTableColumn[];
57
+ columns?: SdTableColumnAnyRow[];
58
58
  externalFilters?: SdTableExternalFilter[];
59
59
  fieldMapping?: Record<string, string>;
60
60
  orders?: Order[];
61
61
  }) => PagingReq;
62
- export declare type SdTableExternalFilter<TData = any> = TextFilter<TData> | DateFilter<TData> | DateTimeFilter<TData> | DateRangeFilter<TData> | NumberFilter<TData> | ValuesFilter<TData> | LazyValuesFilter<TData> | BooleanFilter<TData> | CustomFilter<TData>;
63
- interface BaseFilter<TData = any> {
62
+ export declare type SdTableExternalFilter<TData = unknown> = TextFilter<TData> | DateFilter<TData> | DateTimeFilter<TData> | DateRangeFilter<TData> | NumberFilter<TData> | ValuesFilter<TData> | LazyValuesFilter<TData> | BooleanFilter<TData> | CustomFilter<TData>;
63
+ interface BaseFilter<TData = unknown> {
64
64
  field: string;
65
65
  title: string;
66
66
  defaultShowing?: boolean;
@@ -70,23 +70,23 @@ interface BaseFilter<TData = any> {
70
70
  data?: TData;
71
71
  onChange?: (value: any) => void;
72
72
  }
73
- interface TextFilter<TData = any> extends BaseFilter<TData> {
73
+ interface TextFilter<TData = unknown> extends BaseFilter<TData> {
74
74
  type: 'string';
75
75
  default?: string;
76
76
  }
77
- interface DateFilter<TData = any> extends BaseFilter<TData> {
77
+ interface DateFilter<TData = unknown> extends BaseFilter<TData> {
78
78
  type: 'date';
79
79
  default?: Date | string;
80
80
  minDate?: string | number | Date;
81
81
  maxDate?: string | number | Date;
82
82
  }
83
- interface DateTimeFilter<TData = any> extends BaseFilter<TData> {
83
+ interface DateTimeFilter<TData = unknown> extends BaseFilter<TData> {
84
84
  type: 'datetime';
85
85
  default?: Date | string;
86
86
  minDate?: string | number | Date;
87
87
  maxDate?: string | number | Date;
88
88
  }
89
- interface DateRangeFilter<TData = any> extends BaseFilter<TData> {
89
+ interface DateRangeFilter<TData = unknown> extends BaseFilter<TData> {
90
90
  type: 'daterange';
91
91
  enableTime?: boolean;
92
92
  minDate?: string | number | Date;
@@ -96,11 +96,11 @@ interface DateRangeFilter<TData = any> extends BaseFilter<TData> {
96
96
  to?: Date | string;
97
97
  };
98
98
  }
99
- interface NumberFilter<TData = any> extends BaseFilter<TData> {
99
+ interface NumberFilter<TData = unknown> extends BaseFilter<TData> {
100
100
  type: 'number';
101
101
  default?: number;
102
102
  }
103
- interface ValuesFilter<TData = any> extends BaseFilter<TData> {
103
+ interface ValuesFilter<TData = unknown> extends BaseFilter<TData> {
104
104
  type: 'values';
105
105
  option: {
106
106
  valueField: string;
@@ -110,7 +110,7 @@ interface ValuesFilter<TData = any> extends BaseFilter<TData> {
110
110
  };
111
111
  default?: string | string[];
112
112
  }
113
- interface LazyValuesFilter<TData = any> extends BaseFilter<TData> {
113
+ interface LazyValuesFilter<TData = unknown> extends BaseFilter<TData> {
114
114
  type: 'lazy-values';
115
115
  option: {
116
116
  valueField: string;
@@ -120,7 +120,7 @@ interface LazyValuesFilter<TData = any> extends BaseFilter<TData> {
120
120
  };
121
121
  default?: string | string[];
122
122
  }
123
- interface BooleanFilter<TData = any> extends BaseFilter<TData> {
123
+ interface BooleanFilter<TData = unknown> extends BaseFilter<TData> {
124
124
  type: 'boolean';
125
125
  option?: {
126
126
  displayOnTrue?: string;
@@ -128,7 +128,7 @@ interface BooleanFilter<TData = any> extends BaseFilter<TData> {
128
128
  };
129
129
  default?: boolean;
130
130
  }
131
- interface CustomFilter<TData = any> extends BaseFilter<TData> {
131
+ interface CustomFilter<TData = unknown> extends BaseFilter<TData> {
132
132
  type: 'custom';
133
133
  filterDef?: TemplateRef<any>;
134
134
  default?: any;
@@ -1,6 +1,6 @@
1
1
  import { Operator } from '@sdcorejs/utils/models';
2
2
  import { SdTableFilterDefDirective } from '../../directives/sd-table-filter-def.directive';
3
- import { SdTableColumn } from '../../models/table-column.model';
3
+ import { SdTableColumnAnyRow } from '../../models/table-column.model';
4
4
  import { SdTableExternalFilter, SdTableOptionFilter, TableFilterRegister } from './table-filter.model';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class SdTableFilterService {
@@ -10,7 +10,7 @@ export declare class SdTableFilterService {
10
10
  constructor(...args: unknown[]);
11
11
  register: (filter: SdTableOptionFilter | undefined, args: {
12
12
  id: string;
13
- columns: SdTableColumn[] | undefined;
13
+ columns: SdTableColumnAnyRow[] | undefined;
14
14
  externalFilters: SdTableExternalFilter[] | undefined;
15
15
  filterDefs: SdTableFilterDefDirective[] | undefined;
16
16
  columnOperator?: Record<string, Operator>;
@@ -10,7 +10,7 @@ export declare class TableFormatService {
10
10
  /**
11
11
  * Chuyển đổi dữ liệu thô thành SdTableItem kèm các thiết lập hiển thị (Display Meta)
12
12
  */
13
- format<T = any>(rawItems: T[], columns: SdTableColumn[], cacheValues: Record<string, any[]>, cacheObjValues: Record<string, Record<string, string>>): Promise<SdTableItem<T>[]>;
13
+ format<T = unknown>(rawItems: T[], columns: SdTableColumn<T>[], cacheValues: Record<string, any[]>, cacheObjValues: Record<string, Record<string, string>>, rowKey?: string): Promise<SdTableItem<T>[]>;
14
14
  static ɵfac: i0.ɵɵFactoryDeclaration<TableFormatService, never>;
15
15
  static ɵprov: i0.ɵɵInjectableDeclaration<TableFormatService>;
16
16
  }
@@ -0,0 +1,24 @@
1
+ import { SdTableItem } from '../../models/table-item.model';
2
+ import { SdTableOptionSelector } from '../../models/table-option-selector.model';
3
+ /**
4
+ * Thu thập danh sách action key khả dụng cho MỘT row.
5
+ *
6
+ * why: ghi thẳng vào 2 mảng do caller cấp (in-place) thay vì `return` mảng mới —
7
+ * hàm này chạy trong đường render (mỗi CD pass, mỗi row) nên không được cấp phát
8
+ * mảng mới mỗi lần gọi. Caller reset độ dài mảng trước khi gọi.
9
+ *
10
+ * Key = `Utilities.hash(action)`, khớp với `ActionFilterPipe` để action bar lọc
11
+ * đúng action chung của mọi item đang chọn.
12
+ */
13
+ export declare const collectRowActionKeys: <T>(rowData: SdTableItem<T>, selection: SdTableOptionSelector | undefined, actions: string[], groupedActions: string[]) => void;
14
+ /**
15
+ * Checkbox "chọn tất cả" ở header có hiển thị hay không.
16
+ *
17
+ * why: trước đây là pure pipe `async` với `await setTimeout(500)` bên trong. Sleep đó
18
+ * che một vấn đề THỨ TỰ change-detection: pipe đọc `meta.selector.actions` — mảng do
19
+ * `SdSelectionVisiblePipe` ghi ở cell BODY, mà CDK render header TRƯỚC body, nên ở pass
20
+ * đầu mảng luôn rỗng. Hệ quả: checkbox hiện trễ 500ms và mỗi lần re-eval lại đẻ thêm
21
+ * một timer không ai dọn. Ở đây tự tính key action từ `selection` nên không phụ thuộc
22
+ * pipe nào chạy trước → quyết định được ngay trong pass hiện tại, không cần timer.
23
+ */
24
+ export declare const resolveSelectAllVisible: <T>(items: SdTableItem<T>[], selection: SdTableOptionSelector | undefined) => boolean;
@@ -1,8 +1,39 @@
1
1
  import { SdTableItem } from '../../models/table-item.model';
2
2
  import { SdTableOptionTree } from '../../models/table-option-tree.model';
3
+ import type { SdTableGroupDefContext } from '../../directives/sd-table-group-def.directive';
3
4
  export declare const getSelectionRows: <T>(roots: SdTableItem<T>[], treeOpt?: SdTableOptionTree<T>) => SdTableItem<T>[];
4
5
  export declare const getSelectedRowData: <T>(rows: SdTableItem<T>[]) => T[];
5
6
  export declare const applyDefaultSelected: <T>(roots: SdTableItem<T>[], treeOpt: SdTableOptionTree<T> | undefined, defaultSelected?: (row: T) => boolean) => void;
6
7
  export declare const resolveSelectAllState: <T>(visibleRows: SdTableItem<T>[]) => boolean;
7
8
  export declare const restorePreservedSelection: <T>(visibleRows: SdTableItem<T>[], preservedSelectedMap: Map<string, SdTableItem<T>>) => void;
8
9
  export declare const syncPreservedSelection: <T>(visibleRows: SdTableItem<T>[], preservedSelectedMap: Map<string, SdTableItem<T>>) => SdTableItem<T>[];
10
+ /**
11
+ * Cầu nối giữa `SdGroupPipe` (nơi group header được sinh ra) và `SdTable`.
12
+ *
13
+ * why: pipe dựng header nhưng KHÔNG biết method của component, còn component thì không
14
+ * giữ mảng output của pipe. Host là một object DUY NHẤT, ổn định do component sở hữu:
15
+ * pipe đổ header vào `headers` để component sync lại selection state sau này, và mượn
16
+ * `toggleExpand`/`toggleSelect` để gắn vào template context.
17
+ */
18
+ export interface SdGroupHeaderHost<T = any> {
19
+ /** Sink các group header của lần transform gần nhất. Pipe clear + fill lại mỗi lần. */
20
+ headers: SdTableItem<T>[];
21
+ toggleExpand: (header: SdTableItem<T>) => void;
22
+ toggleSelect: (header: SdTableItem<T>) => void;
23
+ }
24
+ /**
25
+ * Tính lại `isSelected` / `indeterminate` của một group header và ĐỒNG BỘ sang context.
26
+ *
27
+ * why: template trước đây bind `[checked]="isGroupAllSelected(item)"` +
28
+ * `[indeterminate]="isGroupIndeterminate(item)"` — mỗi binding duyệt toàn bộ children,
29
+ * mỗi CD pass, cho mỗi group row (và `groupContext()` duyệt thêm lần nữa). Giờ tính MỘT
30
+ * lần ở selection sync path rồi cache lên meta; template chỉ đọc property.
31
+ * Một vòng duyệt duy nhất thay cho cặp `every` + `some`.
32
+ */
33
+ export declare const syncGroupSelectionMeta: <T>(header: SdTableItem<T>) => void;
34
+ /**
35
+ * Dựng context truyền cho template `sdTableGroupDef`.
36
+ * Chỉ gọi MỘT lần cho mỗi header (lúc pipe sinh header); sau đó reference được giữ
37
+ * nguyên và giá trị bên trong cập nhật qua `syncGroupSelectionMeta`.
38
+ */
39
+ export declare const buildGroupHeaderContext: <T>(header: SdTableItem<T>, host?: SdGroupHeaderHost<T>) => SdTableGroupDefContext<T>;
@@ -42,8 +42,9 @@ export declare const subtreeMatches: <T>(data: T, predicate: (data: T) => boolea
42
42
  * Lọc mảng children: chỉ giữ child có subtree khớp `predicate`.
43
43
  *
44
44
  * Trả về MẢNG MỚI nhưng GIỮ NGUYÊN object reference của từng child (không clone)
45
- * — nhờ vậy `meta.id` (hash từ data) ổn định, selection / trạng thái bung không
46
- * bị mất khi từ khoá search đổi. Đây là bước "prune" của tính năng search-con.
45
+ * — nhờ vậy `meta.id` (bám theo identity của object data, hoặc theo `option.rowKey`)
46
+ * ổn định, selection / trạng thái bung không bị mất khi từ khoá search đổi. Đây là
47
+ * bước "prune" của tính năng search-con.
47
48
  */
48
49
  export declare const filterMatchingChildren: <T>(children: T[], predicate: (data: T) => boolean, option?: SdTableOptionTree) => T[];
49
50
  export declare const getVisibleChildrenData: <T>(data: T, option: SdTableOptionTree<T>, predicate?: (data: T) => boolean) => T[];
@@ -9,7 +9,9 @@ import { SdTableGroupDefDirective, SdTableGroupDefContext } from './directives/s
9
9
  import { SdTableFilterDefDirective } from './directives/sd-table-filter-def.directive';
10
10
  import { SdMaterialFooterDefDirective } from './directives/sd-table-footer-def.directive';
11
11
  import { SdTableTitleDefDirective } from './directives/sd-table-title-def.directive';
12
+ import { SdTableCommandHeaderDefDirective } from './directives/sd-table-command-header-def.directive';
12
13
  import { SdTableColumn } from './models/table-column.model';
14
+ import { SdTableCommand } from './models/table-command.model';
13
15
  import { SdTableOption } from './models/table-option.model';
14
16
  import { SdTableFilterRequest, TableFilterRegister, TableFilterValue } from './services/table-filter/table-filter.model';
15
17
  import { CdkDrag, CdkDragDrop, CdkDropList } from '@angular/cdk/drag-drop';
@@ -22,8 +24,9 @@ import { SdPopupExport } from './components/popup-export/popup-export.component'
22
24
  import { ISdTableConfiguration } from './configurations';
23
25
  import { SdTableItem } from './models/table-item.model';
24
26
  import { ConfiguredTableResult } from './models/table-option-config.model';
27
+ import { SdGroupHeaderHost } from './services/table-selection/table-selection.util';
25
28
  import * as i0 from "@angular/core";
26
- export declare class MatPaginatorIntlCro extends MatPaginatorIntl {
29
+ export declare class SdTablePaginatorIntl extends MatPaginatorIntl {
27
30
  #private;
28
31
  firstPageLabel: string;
29
32
  lastPageLabel: string;
@@ -31,8 +34,8 @@ export declare class MatPaginatorIntlCro extends MatPaginatorIntl {
31
34
  nextPageLabel: string;
32
35
  previousPageLabel: string;
33
36
  getRangeLabel: (page: number, pageSize: number, length: number) => string;
34
- static ɵfac: i0.ɵɵFactoryDeclaration<MatPaginatorIntlCro, never>;
35
- static ɵprov: i0.ɵɵInjectableDeclaration<MatPaginatorIntlCro>;
37
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdTablePaginatorIntl, never>;
38
+ static ɵprov: i0.ɵɵInjectableDeclaration<SdTablePaginatorIntl>;
36
39
  }
37
40
  export declare class SdTable<T = unknown> implements AfterViewInit, OnDestroy {
38
41
  #private;
@@ -51,6 +54,8 @@ export declare class SdTable<T = unknown> implements AfterViewInit, OnDestroy {
51
54
  sdSubInformation: import("@angular/core").Signal<SdTableExpandDefDirective<any> | undefined>;
52
55
  sdGroupDef: import("@angular/core").Signal<SdTableGroupDefDirective<any> | undefined>;
53
56
  sdCellDefs: import("@angular/core").Signal<readonly SdTableCellDefDirective<any>[]>;
57
+ /** Nội dung tuỳ chọn cho ô header của cột command (mặc định ô này để trống). */
58
+ sdCommandHeaderDef: import("@angular/core").Signal<SdTableCommandHeaderDefDirective | undefined>;
54
59
  sdFooterDefs: import("@angular/core").Signal<readonly SdMaterialFooterDefDirective<any>[]>;
55
60
  sdFilterDefs: import("@angular/core").Signal<readonly SdTableFilterDefDirective[]>;
56
61
  sdTitleDefs: import("@angular/core").Signal<readonly SdTableTitleDefDirective<any>[]>;
@@ -65,6 +70,25 @@ export declare class SdTable<T = unknown> implements AfterViewInit, OnDestroy {
65
70
  total: import("@angular/core").WritableSignal<number | undefined>;
66
71
  loading: import("@angular/core").WritableSignal<boolean>;
67
72
  isSelectAll: import("@angular/core").WritableSignal<boolean>;
73
+ /**
74
+ * Checkbox "chọn tất cả" ở header có hiển thị không.
75
+ *
76
+ * why: trước đây là `_items | selectionVisibleSelectAll: … | async` — pipe `async`
77
+ * với `await setTimeout(500)` bên trong. Sleep đó CHE một vấn đề thứ tự
78
+ * change-detection: pipe đọc `meta.selector.actions`, mảng chỉ được `SdSelectionVisiblePipe`
79
+ * ghi khi cell BODY render, mà CDK dựng header TRƯỚC body → pass đầu luôn đọc ra rỗng.
80
+ * Hệ quả: checkbox hiện trễ 500ms, và vì `transform` là `async` nên MỖI lần re-eval lại
81
+ * trả một Promise mới + đặt thêm một timer không ai dọn. Computed tự tính từ
82
+ * `items()` + `selector` nên không phụ thuộc pipe nào chạy trước → bỏ hẳn timer.
83
+ */
84
+ visibleSelectAll: import("@angular/core").Signal<boolean>;
85
+ /**
86
+ * Danh sách command của row, memoize theo option.
87
+ * why: template cũ bind `_tableOption.command?.commands || _tableOption.commands || []`
88
+ * — nhánh `[]` cấp phát mảng MỚI mỗi CD pass và đẩy vào `input()` của `desktop-command`,
89
+ * làm child OnPush bị đánh dấu dirty mỗi pass cho từng dòng.
90
+ */
91
+ rowCommands: import("@angular/core").Signal<SdTableCommand<T>[]>;
68
92
  isFiltered: import("@angular/core").WritableSignal<boolean>;
69
93
  requireFiltered: import("@angular/core").WritableSignal<boolean>;
70
94
  filterRegister: TableFilterRegister;
@@ -98,6 +122,14 @@ export declare class SdTable<T = unknown> implements AfterViewInit, OnDestroy {
98
122
  /** Toggle select-all cho 1 group: set isSelected cho mọi selectable child, sync state. */
99
123
  onSelectGroup: (header: SdTableItem<T>, checked: boolean) => void;
100
124
  groupExpandState: Map<string, boolean>;
125
+ /**
126
+ * Cầu nối tới SdGroupPipe (arg 4) — object DUY NHẤT, tạo một lần.
127
+ * why: pipe sinh group header nhưng component mới là nơi biết selection đổi. Pipe đổ
128
+ * header vào `headers` để `#syncGroupSelectionState` cập nhật `meta.group.isSelected` /
129
+ * `indeterminate`, thay cho việc template gọi `isGroupAllSelected()`/`isGroupIndeterminate()`
130
+ * (duyệt toàn bộ children) ở MỖI CD pass.
131
+ */
132
+ readonly groupHost: SdGroupHeaderHost<T>;
101
133
  /** Toggle expand/collapse cho 1 group (chỉ ý nghĩa khi option.group.collapsible). */
102
134
  toggleGroupExpand: (header: SdTableItem<T>) => void;
103
135
  /**
@@ -112,7 +144,21 @@ export declare class SdTable<T = unknown> implements AfterViewInit, OnDestroy {
112
144
  * Span TOÀN BỘ width data row vì group row chỉ có 1 cell.
113
145
  */
114
146
  sdGroupColspan: import("@angular/core").Signal<number>;
115
- /** Build context object truyền vào SdTableGroupDefDirective template. */
147
+ /**
148
+ * Context truyền vào template `sdTableGroupDef`.
149
+ *
150
+ * why: bản cũ dựng object MỚI (kèm `items.map(i => i.data)` mới và 2 lần duyệt children
151
+ * qua `isGroupAllSelected`/`isGroupIndeterminate`) ở MỖI CD pass, cho MỖI group row —
152
+ * `ngTemplateOutlet` thấy context đổi reference nên phải dựng lại embedded view. Giờ
153
+ * context được `SdGroupPipe` precompute và cache trên `meta.group`; ở đây chỉ đọc ra
154
+ * (fallback `??=` cho header không do pipe sinh) nên reference ổn định qua các pass.
155
+ *
156
+ * why: 3 field selection/expand thì phải làm TƯƠI mỗi lần đọc — `SdGroupPipe` dựng context
157
+ * lúc header được sinh ra, thời điểm đó `selector.selectable` của children vẫn còn là mặc
158
+ * định `false` (chỉ `SdSelectionVisiblePipe` ở cell BODY mới đặt đúng, mà CDK dựng header
159
+ * trước body). Cache lại giá trị tính ở thời điểm đó là khoá cứng `isSelected = false`.
160
+ * Mutate TẠI CHỖ để `ngTemplateOutlet` vẫn thấy cùng một reference và không dựng lại view.
161
+ */
116
162
  groupContext: (header: SdTableItem<T>) => SdTableGroupDefContext<T>;
117
163
  rowStyle: (row: SdTableItem<T>, index?: number) => Record<string, string> | null;
118
164
  clearFilter: () => void;
@@ -128,5 +174,5 @@ export declare class SdTable<T = unknown> implements AfterViewInit, OnDestroy {
128
174
  reorderSortPredicate: (index: number, drag: CdkDrag<SdTableItem<T>>, drop: CdkDropList<SdTableItem<T>[]>) => boolean;
129
175
  onReorderDrop(event: CdkDragDrop<SdTableItem<T>[]>): void;
130
176
  static ɵfac: i0.ɵɵFactoryDeclaration<SdTable<any>, never>;
131
- static ɵcmp: i0.ɵɵComponentDeclaration<SdTable<any>, "sd-table", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "option": { "alias": "option"; "required": true; "isSignal": true; }; }, {}, ["sdSubInformation", "sdGroupDef", "sdCellDefs", "sdFooterDefs", "sdFilterDefs", "sdTitleDefs"], ["[sdTableTop]"], true, never>;
177
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdTable<any>, "sd-table", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "option": { "alias": "option"; "required": true; "isSignal": true; }; }, {}, ["sdSubInformation", "sdGroupDef", "sdCellDefs", "sdCommandHeaderDef", "sdFooterDefs", "sdFilterDefs", "sdTitleDefs"], ["[sdTableTop]"], true, never>;
132
178
  }
@@ -1,7 +1,7 @@
1
1
  import { TemplateRef } from '@angular/core';
2
2
  import { SdTreeItemContext } from './tree.model';
3
3
  import * as i0 from "@angular/core";
4
- export declare class SdTreeItemDefDirective<T = any> {
4
+ export declare class SdTreeItemDefDirective<T = unknown> {
5
5
  static ngTemplateContextGuard<T>(_dir: SdTreeItemDefDirective<T>, ctx: unknown): ctx is SdTreeItemContext<T>;
6
6
  readonly templateRef: TemplateRef<SdTreeItemContext<T>>;
7
7
  static ɵfac: i0.ɵɵFactoryDeclaration<SdTreeItemDefDirective<any>, never>;
@@ -11,7 +11,7 @@ export interface SdTreeNodeAutoIds {
11
11
  label?: string;
12
12
  command?: string;
13
13
  }
14
- export interface SdTreeViewCommand<T = any> {
14
+ export interface SdTreeViewCommand<T = unknown> {
15
15
  key: string;
16
16
  command: SdTreeCommand<T>;
17
17
  title: string;
@@ -22,7 +22,7 @@ export interface SdTreeViewCommand<T = any> {
22
22
  autoId?: string;
23
23
  defaultColor: boolean;
24
24
  }
25
- export interface SdTreeViewNode<T = any> extends SdTreeNode<T> {
25
+ export interface SdTreeViewNode<T = unknown> extends SdTreeNode<T> {
26
26
  icon?: string;
27
27
  selected: boolean;
28
28
  selectionDisabled: boolean;
@@ -35,11 +35,11 @@ export interface SdTreeViewNode<T = any> extends SdTreeNode<T> {
35
35
  context: SdTreeItemContext<T>;
36
36
  tabIndex: 0 | -1;
37
37
  }
38
- export interface SdTreeSelectionActionView<T = any> {
38
+ export interface SdTreeSelectionActionView<T = unknown> {
39
39
  action: SdTreeSelectionAction<T>;
40
40
  autoId: string | null;
41
41
  }
42
- export declare class SdTree<T = any> {
42
+ export declare class SdTree<T = unknown> {
43
43
  #private;
44
44
  readonly autoIdInput: import("@angular/core").InputSignal<string | null | undefined>;
45
45
  readonly option: import("@angular/core").InputSignal<SdTreeComponentOption<T> | undefined>;
@@ -71,6 +71,12 @@ export declare class SdTree<T = any> {
71
71
  readonly activeNodeId: import("@angular/core").WritableSignal<string | null>;
72
72
  readonly normalizedFilterText: import("@angular/core").Signal<string>;
73
73
  readonly selectionVisible: import("@angular/core").Signal<boolean>;
74
+ /**
75
+ * why: `selector.single` giới hạn đúng một node, nên ô chọn phải là radio — checkbox là ký hiệu
76
+ * của "chọn nhiều" và người dùng chỉ phát hiện ra giới hạn sau khi tick node thứ hai và thấy node
77
+ * đầu tự bỏ chọn. `<sd-tree-select>` không multiple sẽ tự rơi vào nhánh này.
78
+ */
79
+ readonly selectionSingle: import("@angular/core").Signal<boolean>;
74
80
  readonly selectedIdSet: import("@angular/core").Signal<Set<string>>;
75
81
  readonly rootNodes: import("@angular/core").Signal<SdTreeNode<T>[]>;
76
82
  readonly visibleNodes: import("@angular/core").Signal<SdTreeNode<T>[]>;
@@ -80,6 +86,12 @@ export declare class SdTree<T = any> {
80
86
  readonly visibleSelectionActions: import("@angular/core").Signal<SdTreeSelectionAction<T>[]>;
81
87
  readonly selectionActionViews: import("@angular/core").Signal<SdTreeSelectionActionView<T>[]>;
82
88
  readonly clearSelectionAutoId: import("@angular/core").Signal<string | null>;
89
+ /**
90
+ * why: chọn node mà selector KHÔNG khai action nào thì thanh quick-action chỉ còn bộ đếm + nút ✕.
91
+ * Nó nổi đè lên cây để nói lại đúng thứ checkbox đã nói. Đó cũng là lý do `<sd-tree-select>` —
92
+ * vốn chỉ chọn rồi bấm "Áp dụng" ở footer modal, không có action nào — không còn thấy thanh này.
93
+ */
94
+ readonly selectionQuickActionOpened: import("@angular/core").Signal<boolean>;
83
95
  /**
84
96
  * Template-facing row model. Expensive/variable values are resolved once per
85
97
  * signal recomputation so the HTML does not call helper methods for every CD pass.