@sdcorejs/angular 19.1.6 → 19.2.1

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 (374) 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/api-contract-builder/index.d.ts +8 -0
  7. package/components/api-contract-builder/src/api-contract-builder.component.d.ts +123 -0
  8. package/components/api-contract-builder/src/api-contract.configuration.d.ts +41 -0
  9. package/components/api-contract-builder/src/api-contract.expression.d.ts +43 -0
  10. package/components/api-contract-builder/src/api-contract.model.d.ts +167 -0
  11. package/components/api-contract-builder/src/api-contract.samples.d.ts +25 -0
  12. package/components/api-contract-builder/src/api-contract.schema.d.ts +126 -0
  13. package/components/api-contract-builder/src/api-contract.serializer.d.ts +17 -0
  14. package/components/api-contract-builder/src/api-contract.validation.d.ts +12 -0
  15. package/components/api-contract-builder/src/components/api-contract-diagnostic-list.component.d.ts +18 -0
  16. package/components/api-contract-builder/src/components/api-contract-node-drawer.component.d.ts +130 -0
  17. package/components/api-contract-builder/src/components/api-contract-node-editor.component.d.ts +35 -0
  18. package/components/api-contract-builder/src/components/api-contract-node-summary.component.d.ts +41 -0
  19. package/components/api-contract-builder/src/components/api-contract-record-editor.component.d.ts +36 -0
  20. package/components/api-contract-builder/src/components/api-contract-source-editor.component.d.ts +86 -0
  21. package/components/api-contract-builder/src/components/api-contract-suggestion.model.d.ts +17 -0
  22. package/components/badge/src/badge.component.d.ts +2 -0
  23. package/components/ckeditor-styles/src/ckeditor-styles.component.d.ts +1 -1
  24. package/components/form-generic/src/components/form-builder/components/expression-builder/expression-builder.component.d.ts +2 -1
  25. package/components/form-generic/src/components/form-builder/form-builder.component.d.ts +3 -1
  26. package/components/form-generic/src/components/form-render/components/item/components/checkbox/checkbox.component.d.ts +34 -0
  27. package/components/form-generic/src/components/form-render/components/item/components/index.d.ts +1 -0
  28. package/components/form-generic/src/components/form-render/components/item/components/table/table.component.d.ts +6 -1
  29. package/components/form-generic/src/components/sd-feel-expression/sd-feel-expression.component.d.ts +1 -1
  30. package/components/form-generic/src/configurations/form.configuration.d.ts +1 -1
  31. package/components/form-generic/src/models/form-generic-component.model.d.ts +8 -8
  32. package/components/form-generic/src/models/form-generic-definition-selection.model.d.ts +5 -5
  33. package/components/form-generic/src/models/form-generic-expression.model.d.ts +12 -12
  34. package/components/form-generic/src/models/index.d.ts +1 -0
  35. package/components/form-generic/src/services/form-generic.service.d.ts +2 -2
  36. package/components/import-excel/src/import-excel.component.d.ts +1 -0
  37. package/components/index.d.ts +7 -1
  38. package/components/mini-editor/src/mini-editor.model.d.ts +1 -1
  39. package/components/modal/src/modal.component.d.ts +3 -2
  40. package/components/modal-resizable/src/modal-resizable.component.d.ts +92 -0
  41. package/components/modal-resizable/src/modal-resizable.registry.d.ts +22 -0
  42. package/components/org-chart/src/org-chart.component.d.ts +6 -0
  43. package/components/preview/src/preview-image/preview-image.component.d.ts +1 -0
  44. package/components/query-bar/src/components/actions-bar/actions-bar.component.d.ts +6 -2
  45. package/components/query-bar/src/components/build-chip/build-chip.component.d.ts +4 -1
  46. package/components/query-bar/src/components/chip-popover/chip-popover.component.d.ts +8 -0
  47. package/components/query-bar/src/components/field-picker/field-picker.component.d.ts +2 -0
  48. package/components/query-bar/src/components/inline-chip/inline-chip.component.d.ts +2 -0
  49. package/components/query-bar/src/components/inline-value-chip/inline-value-chip.component.d.ts +3 -3
  50. package/components/query-bar/src/components/saved-filters-menu/saved-filters-menu.component.d.ts +9 -4
  51. package/components/query-bar/src/query-bar.component.d.ts +32 -5
  52. package/components/query-bar/src/query-bar.model.d.ts +15 -12
  53. package/components/query-builder/src/query-builder.component.d.ts +76 -39
  54. package/components/query-builder/src/query-builder.model.d.ts +59 -52
  55. package/components/query-builder/src/query-builder.serializer.d.ts +15 -6
  56. package/components/section/src/section.component.d.ts +5 -0
  57. package/components/side-drawer/src/body-scroll-lock.service.d.ts +10 -0
  58. package/components/splitter/src/splitter-handle/splitter-handle.component.d.ts +1 -0
  59. package/components/tab-router/index.d.ts +2 -1
  60. package/components/tab-router/src/actions/tab-router.action.d.ts +2 -2
  61. package/components/tab-router/src/components/tab-router-item/tab-router-item.component.d.ts +2 -2
  62. package/components/tab-router/src/components/tab-router-nav/tab-router-nav.component.d.ts +3 -3
  63. package/components/tab-router/src/components/tab-router-outlet/tab-router-outlet.component.d.ts +3 -3
  64. package/components/tab-router/src/decorators/tab.decorator.d.ts +13 -1
  65. package/components/tab-router/src/events/tab-router.event.d.ts +3 -3
  66. package/components/tab-router/src/models/tab-router.model.d.ts +2 -2
  67. package/components/tab-router/src/pipes/tab-info.pipe.d.ts +2 -2
  68. package/components/tab-router/src/services/tab-router.service.d.ts +9 -9
  69. package/components/table/index.d.ts +1 -0
  70. package/components/table/src/components/config/config.component.d.ts +6 -1
  71. package/components/table/src/components/desktop-cell/view/view.component.d.ts +1 -0
  72. package/components/table/src/components/filter/external-filter/external-filter.component.d.ts +1 -1
  73. package/components/table/src/components/filter/mobile-filter/mobile-filter.component.d.ts +1 -1
  74. package/components/table/src/components/selector-action/action-filter.pipe.d.ts +8 -1
  75. package/components/table/src/components/selector-action/selector-action.component.d.ts +2 -0
  76. package/components/table/src/directives/index.d.ts +1 -0
  77. package/components/table/src/directives/sd-table-command-header-def.directive.d.ts +24 -0
  78. package/components/table/src/models/table-column.model.d.ts +30 -13
  79. package/components/table/src/models/table-item.model.d.ts +30 -1
  80. package/components/table/src/models/table-option-selector.model.d.ts +5 -4
  81. package/components/table/src/models/table-option.model.d.ts +12 -0
  82. package/components/table/src/pipes/sd-group.pipe.d.ts +6 -2
  83. package/components/table/src/services/table-filter/table-filter.model.d.ts +15 -15
  84. package/components/table/src/services/table-filter/table-filter.service.d.ts +2 -2
  85. package/components/table/src/services/table-format/table-format.service.d.ts +1 -1
  86. package/components/table/src/services/table-selection/selection-action.util.d.ts +24 -0
  87. package/components/table/src/services/table-selection/table-selection.util.d.ts +31 -0
  88. package/components/table/src/services/tree/tree.util.d.ts +3 -2
  89. package/components/table/src/table.component.d.ts +51 -5
  90. package/components/tree/src/tree-item-def.directive.d.ts +1 -1
  91. package/components/tree/src/tree.component.d.ts +16 -4
  92. package/components/tree/src/tree.model.d.ts +31 -25
  93. package/components/upload-file/src/configurations/upload-file.configuration.d.ts +2 -2
  94. package/components/upload-file/src/upload-file.component.d.ts +4 -1
  95. package/configurations/src/sd-core.configuration.d.ts +1 -2
  96. package/fesm2022/sdcorejs-angular-components-anchor.mjs +36 -12
  97. package/fesm2022/sdcorejs-angular-components-anchor.mjs.map +1 -1
  98. package/fesm2022/sdcorejs-angular-components-api-contract-builder.mjs +3411 -0
  99. package/fesm2022/sdcorejs-angular-components-api-contract-builder.mjs.map +1 -0
  100. package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs +2 -2
  101. package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs.map +1 -1
  102. package/fesm2022/sdcorejs-angular-components-badge.mjs +27 -2
  103. package/fesm2022/sdcorejs-angular-components-badge.mjs.map +1 -1
  104. package/fesm2022/sdcorejs-angular-components-button.mjs +2 -2
  105. package/fesm2022/sdcorejs-angular-components-button.mjs.map +1 -1
  106. package/fesm2022/sdcorejs-angular-components-ckeditor-styles.mjs +1 -1
  107. package/fesm2022/sdcorejs-angular-components-ckeditor-styles.mjs.map +1 -1
  108. package/fesm2022/sdcorejs-angular-components-code-editor.mjs +3 -3
  109. package/fesm2022/sdcorejs-angular-components-code-editor.mjs.map +1 -1
  110. package/fesm2022/sdcorejs-angular-components-data-state.mjs +3 -3
  111. package/fesm2022/sdcorejs-angular-components-data-state.mjs.map +1 -1
  112. package/fesm2022/sdcorejs-angular-components-editor.mjs +2 -2
  113. package/fesm2022/sdcorejs-angular-components-editor.mjs.map +1 -1
  114. package/fesm2022/sdcorejs-angular-components-form-generic.mjs +324 -192
  115. package/fesm2022/sdcorejs-angular-components-form-generic.mjs.map +1 -1
  116. package/fesm2022/sdcorejs-angular-components-history.mjs +4 -4
  117. package/fesm2022/sdcorejs-angular-components-history.mjs.map +1 -1
  118. package/fesm2022/sdcorejs-angular-components-import-excel.mjs +13 -5
  119. package/fesm2022/sdcorejs-angular-components-import-excel.mjs.map +1 -1
  120. package/fesm2022/sdcorejs-angular-components-inform.mjs +3 -3
  121. package/fesm2022/sdcorejs-angular-components-inform.mjs.map +1 -1
  122. package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs +164 -8
  123. package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs.map +1 -1
  124. package/fesm2022/sdcorejs-angular-components-modal.mjs +30 -18
  125. package/fesm2022/sdcorejs-angular-components-modal.mjs.map +1 -1
  126. package/fesm2022/sdcorejs-angular-components-operator.mjs +2 -2
  127. package/fesm2022/sdcorejs-angular-components-operator.mjs.map +1 -1
  128. package/fesm2022/sdcorejs-angular-components-org-chart.mjs +60 -13
  129. package/fesm2022/sdcorejs-angular-components-org-chart.mjs.map +1 -1
  130. package/fesm2022/sdcorejs-angular-components-preview.mjs +27 -17
  131. package/fesm2022/sdcorejs-angular-components-preview.mjs.map +1 -1
  132. package/fesm2022/sdcorejs-angular-components-query-bar.mjs +192 -30
  133. package/fesm2022/sdcorejs-angular-components-query-bar.mjs.map +1 -1
  134. package/fesm2022/sdcorejs-angular-components-query-builder.mjs +187 -127
  135. package/fesm2022/sdcorejs-angular-components-query-builder.mjs.map +1 -1
  136. package/fesm2022/sdcorejs-angular-components-section.mjs +33 -2
  137. package/fesm2022/sdcorejs-angular-components-section.mjs.map +1 -1
  138. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs +83 -24
  139. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs.map +1 -1
  140. package/fesm2022/sdcorejs-angular-components-splitter.mjs +57 -21
  141. package/fesm2022/sdcorejs-angular-components-splitter.mjs.map +1 -1
  142. package/fesm2022/sdcorejs-angular-components-stepper.mjs +2 -2
  143. package/fesm2022/sdcorejs-angular-components-stepper.mjs.map +1 -1
  144. package/fesm2022/sdcorejs-angular-components-tab-router.mjs +68 -20
  145. package/fesm2022/sdcorejs-angular-components-tab-router.mjs.map +1 -1
  146. package/fesm2022/sdcorejs-angular-components-tab.mjs +3 -2
  147. package/fesm2022/sdcorejs-angular-components-tab.mjs.map +1 -1
  148. package/fesm2022/sdcorejs-angular-components-table.mjs +555 -267
  149. package/fesm2022/sdcorejs-angular-components-table.mjs.map +1 -1
  150. package/fesm2022/sdcorejs-angular-components-tree.mjs +80 -17
  151. package/fesm2022/sdcorejs-angular-components-tree.mjs.map +1 -1
  152. package/fesm2022/sdcorejs-angular-components-upload-file.mjs +48 -13
  153. package/fesm2022/sdcorejs-angular-components-upload-file.mjs.map +1 -1
  154. package/fesm2022/sdcorejs-angular-components.mjs +7 -1
  155. package/fesm2022/sdcorejs-angular-components.mjs.map +1 -1
  156. package/fesm2022/sdcorejs-angular-configurations.mjs.map +1 -1
  157. package/fesm2022/sdcorejs-angular-directives.mjs +45 -8
  158. package/fesm2022/sdcorejs-angular-directives.mjs.map +1 -1
  159. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs +40 -29
  160. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs.map +1 -1
  161. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs +5 -5
  162. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs.map +1 -1
  163. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs +67 -50
  164. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs.map +1 -1
  165. package/fesm2022/sdcorejs-angular-forms-chip.mjs +57 -43
  166. package/fesm2022/sdcorejs-angular-forms-chip.mjs.map +1 -1
  167. package/fesm2022/sdcorejs-angular-forms-date-range.mjs +231 -60
  168. package/fesm2022/sdcorejs-angular-forms-date-range.mjs.map +1 -1
  169. package/fesm2022/sdcorejs-angular-forms-date.mjs +95 -23
  170. package/fesm2022/sdcorejs-angular-forms-date.mjs.map +1 -1
  171. package/fesm2022/sdcorejs-angular-forms-datetime.mjs +130 -26
  172. package/fesm2022/sdcorejs-angular-forms-datetime.mjs.map +1 -1
  173. package/fesm2022/sdcorejs-angular-forms-entity-picker.mjs +39 -15
  174. package/fesm2022/sdcorejs-angular-forms-entity-picker.mjs.map +1 -1
  175. package/fesm2022/sdcorejs-angular-forms-input-color.mjs +16 -5
  176. package/fesm2022/sdcorejs-angular-forms-input-color.mjs.map +1 -1
  177. package/fesm2022/sdcorejs-angular-forms-input-number.mjs +24 -9
  178. package/fesm2022/sdcorejs-angular-forms-input-number.mjs.map +1 -1
  179. package/fesm2022/sdcorejs-angular-forms-input.mjs +58 -10
  180. package/fesm2022/sdcorejs-angular-forms-input.mjs.map +1 -1
  181. package/fesm2022/sdcorejs-angular-forms-models.mjs +227 -6
  182. package/fesm2022/sdcorejs-angular-forms-models.mjs.map +1 -1
  183. package/fesm2022/sdcorejs-angular-forms-radio.mjs +4 -4
  184. package/fesm2022/sdcorejs-angular-forms-radio.mjs.map +1 -1
  185. package/fesm2022/sdcorejs-angular-forms-select.mjs +135 -37
  186. package/fesm2022/sdcorejs-angular-forms-select.mjs.map +1 -1
  187. package/fesm2022/sdcorejs-angular-forms-switch.mjs +18 -3
  188. package/fesm2022/sdcorejs-angular-forms-switch.mjs.map +1 -1
  189. package/fesm2022/sdcorejs-angular-forms-textarea.mjs +51 -62
  190. package/fesm2022/sdcorejs-angular-forms-textarea.mjs.map +1 -1
  191. package/fesm2022/sdcorejs-angular-forms-time-range.mjs +57 -12
  192. package/fesm2022/sdcorejs-angular-forms-time-range.mjs.map +1 -1
  193. package/fesm2022/sdcorejs-angular-forms-time.mjs +16 -5
  194. package/fesm2022/sdcorejs-angular-forms-time.mjs.map +1 -1
  195. package/fesm2022/sdcorejs-angular-forms-tree-select.mjs +100 -9
  196. package/fesm2022/sdcorejs-angular-forms-tree-select.mjs.map +1 -1
  197. package/fesm2022/sdcorejs-angular-forms.mjs +91 -46
  198. package/fesm2022/sdcorejs-angular-forms.mjs.map +1 -1
  199. package/fesm2022/sdcorejs-angular-handlers.mjs +18 -3
  200. package/fesm2022/sdcorejs-angular-handlers.mjs.map +1 -1
  201. package/fesm2022/sdcorejs-angular-i18n.mjs +895 -68
  202. package/fesm2022/sdcorejs-angular-i18n.mjs.map +1 -1
  203. package/fesm2022/sdcorejs-angular-interceptors.mjs +87 -29
  204. package/fesm2022/sdcorejs-angular-interceptors.mjs.map +1 -1
  205. package/fesm2022/sdcorejs-angular-modules-auth.mjs +25 -15
  206. package/fesm2022/sdcorejs-angular-modules-auth.mjs.map +1 -1
  207. package/fesm2022/sdcorejs-angular-modules-icon.mjs +2 -2
  208. package/fesm2022/sdcorejs-angular-modules-icon.mjs.map +1 -1
  209. package/fesm2022/sdcorejs-angular-modules-keycloak.mjs +32 -3
  210. package/fesm2022/sdcorejs-angular-modules-keycloak.mjs.map +1 -1
  211. package/fesm2022/sdcorejs-angular-modules-layout.mjs +342 -111
  212. package/fesm2022/sdcorejs-angular-modules-layout.mjs.map +1 -1
  213. package/fesm2022/sdcorejs-angular-modules-permission.mjs +177 -40
  214. package/fesm2022/sdcorejs-angular-modules-permission.mjs.map +1 -1
  215. package/fesm2022/sdcorejs-angular-pipes.mjs +62 -28
  216. package/fesm2022/sdcorejs-angular-pipes.mjs.map +1 -1
  217. package/fesm2022/sdcorejs-angular-services-api.mjs +123 -13
  218. package/fesm2022/sdcorejs-angular-services-api.mjs.map +1 -1
  219. package/fesm2022/sdcorejs-angular-services-cache.mjs +53 -3
  220. package/fesm2022/sdcorejs-angular-services-cache.mjs.map +1 -1
  221. package/fesm2022/sdcorejs-angular-services-confirm.mjs +25 -73
  222. package/fesm2022/sdcorejs-angular-services-confirm.mjs.map +1 -1
  223. package/fesm2022/sdcorejs-angular-services-excel.mjs +12 -10
  224. package/fesm2022/sdcorejs-angular-services-excel.mjs.map +1 -1
  225. package/fesm2022/sdcorejs-angular-services-loading.mjs +75 -84
  226. package/fesm2022/sdcorejs-angular-services-loading.mjs.map +1 -1
  227. package/fesm2022/sdcorejs-angular-services-notify.mjs +46 -5
  228. package/fesm2022/sdcorejs-angular-services-notify.mjs.map +1 -1
  229. package/fesm2022/sdcorejs-angular-services-storage.mjs +4 -0
  230. package/fesm2022/sdcorejs-angular-services-storage.mjs.map +1 -1
  231. package/fesm2022/sdcorejs-angular-services.mjs +0 -1
  232. package/fesm2022/sdcorejs-angular-services.mjs.map +1 -1
  233. package/fesm2022/sdcorejs-angular-utilities-extensions.mjs +225 -80
  234. package/fesm2022/sdcorejs-angular-utilities-extensions.mjs.map +1 -1
  235. package/fesm2022/sdcorejs-angular-utilities-models.mjs +1 -63
  236. package/fesm2022/sdcorejs-angular-utilities-models.mjs.map +1 -1
  237. package/fesm2022/sdcorejs-angular.mjs +17 -10
  238. package/fesm2022/sdcorejs-angular.mjs.map +1 -1
  239. package/forms/autocomplete/src/autocomplete.component.d.ts +5 -2
  240. package/forms/chip-calendar/src/chip-calendar.component.d.ts +10 -0
  241. package/forms/date/src/date.component.d.ts +13 -2
  242. package/forms/date-range/src/date-range.component.d.ts +13 -2
  243. package/forms/datetime/src/datetime.component.d.ts +13 -2
  244. package/forms/entity-picker/src/entity-picker.component.d.ts +9 -3
  245. package/forms/input/src/input.component.d.ts +3 -0
  246. package/forms/input-color/src/input-color.component.d.ts +4 -0
  247. package/forms/input-number/src/input-number.component.d.ts +3 -0
  248. package/forms/models/index.d.ts +3 -0
  249. package/forms/models/src/sd-form-control-connector.d.ts +12 -0
  250. package/forms/models/src/sd-model-facing-control.d.ts +43 -0
  251. package/forms/models/src/sd-search.model.d.ts +1 -1
  252. package/forms/models/src/sd-selection-data.model.d.ts +1 -1
  253. package/forms/models/src/sd-temporal-transform.d.ts +31 -0
  254. package/forms/models/src/sd-timer-scope.d.ts +29 -0
  255. package/forms/select/src/select.component.d.ts +27 -4
  256. package/forms/src/forms.module.d.ts +22 -13
  257. package/forms/switch/src/switch.component.d.ts +5 -0
  258. package/forms/textarea/src/textarea.component.d.ts +5 -3
  259. package/forms/time-range/src/time-range.component.d.ts +22 -1
  260. package/forms/tree-select/src/tree-select.component.d.ts +36 -5
  261. package/i18n/src/en.d.ts +170 -10
  262. package/i18n/src/i18n.messages.d.ts +1 -1
  263. package/i18n/src/i18n.pipe.d.ts +3 -3
  264. package/i18n/src/i18n.service.d.ts +2 -1
  265. package/i18n/src/i18n.types.d.ts +0 -3
  266. package/interceptors/no-internet/no-internet.interceptor.d.ts +11 -1
  267. package/modules/auth/services/auth.model.d.ts +1 -1
  268. package/modules/keycloak/keycloak.service.d.ts +1 -0
  269. package/modules/layout/components/shared/menu-tree/menu-tree.component.d.ts +2 -0
  270. package/modules/layout/components/sidebar-mobile-v1/components/sidebar/sidebar.component.d.ts +3 -3
  271. package/modules/layout/components/sidebar-mobile-v1/main.component.d.ts +3 -3
  272. package/modules/layout/components/sidebar-mobile-v2/main.component.d.ts +3 -3
  273. package/modules/layout/components/sidebar-mobile-v3/main.component.d.ts +3 -3
  274. package/modules/layout/components/sidebar-v1/components/sidebar/sidebar.component.d.ts +16 -3
  275. package/modules/layout/components/sidebar-v1/main.component.d.ts +3 -3
  276. package/modules/layout/components/sidebar-v2/main.component.d.ts +3 -3
  277. package/modules/layout/components/sidebar-v3/main.component.d.ts +3 -3
  278. package/modules/layout/modules/forbidden/pages/root/root.component.d.ts +5 -0
  279. package/modules/layout/modules/not-found/pages/root/root.component.d.ts +5 -0
  280. package/modules/layout/services/layout.service.d.ts +21 -0
  281. package/modules/layout/services/storage/storage.service.d.ts +52 -7
  282. package/modules/permission/src/configurations/permission.configuration.d.ts +11 -0
  283. package/modules/permission/src/directives/permission.directive.d.ts +2 -1
  284. package/modules/permission/src/services/permission.service.d.ts +52 -1
  285. package/package.json +40 -29
  286. package/pipes/src/safe-html.pipe.d.ts +26 -4
  287. package/pipes/src/time-different.pipe.d.ts +1 -0
  288. package/public-api.d.ts +11 -10
  289. package/services/api/src/api-host.d.ts +15 -0
  290. package/services/api/src/api.model.d.ts +14 -0
  291. package/services/api/src/api.module.d.ts +6 -0
  292. package/services/cache/src/cache.model.d.ts +10 -0
  293. package/services/index.d.ts +0 -1
  294. package/services/notify/index.d.ts +1 -1
  295. package/utilities/extensions/index.d.ts +1 -5
  296. package/utilities/extensions/src/url-safety.d.ts +72 -0
  297. package/utilities/extensions/src/utility.extension.d.ts +9 -5
  298. package/utilities/models/index.d.ts +0 -10
  299. package/components/base/index.d.ts +0 -1
  300. package/components/base/src/base-secure.component.d.ts +0 -8
  301. package/components/document-builder/index.d.ts +0 -4
  302. package/components/document-builder/src/components/header-footer-builder/header-footer-builder.component.d.ts +0 -15
  303. package/components/document-builder/src/components/header-footer-builder/plugins/page-number.plugin.d.ts +0 -4
  304. package/components/document-builder/src/components/index.d.ts +0 -1
  305. package/components/document-builder/src/document-builder.component.d.ts +0 -53
  306. package/components/document-builder/src/document-builder.config.d.ts +0 -21
  307. package/components/document-builder/src/document-builder.model.d.ts +0 -41
  308. package/components/document-builder/src/document-builder.utils.d.ts +0 -10
  309. package/components/document-builder/src/plugins/block-space/block-space.plugin.d.ts +0 -9
  310. package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.d.ts +0 -44
  311. package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.model.d.ts +0 -57
  312. package/components/document-builder/src/plugins/heading/heading.plugin.d.ts +0 -5
  313. package/components/document-builder/src/plugins/highlight-range/highlight-range.plugin.d.ts +0 -4
  314. package/components/document-builder/src/plugins/image-custom/image-custom.plugin.d.ts +0 -31
  315. package/components/document-builder/src/plugins/image-upload/image-upload.plugin.d.ts +0 -5
  316. package/components/document-builder/src/plugins/index.d.ts +0 -11
  317. package/components/document-builder/src/plugins/page-orientation/page-orientation.plugin.d.ts +0 -24
  318. package/components/document-builder/src/plugins/paste-handler/filters/bookmark.d.ts +0 -14
  319. package/components/document-builder/src/plugins/paste-handler/filters/br.d.ts +0 -15
  320. package/components/document-builder/src/plugins/paste-handler/filters/image.d.ts +0 -25
  321. package/components/document-builder/src/plugins/paste-handler/filters/list.d.ts +0 -29
  322. package/components/document-builder/src/plugins/paste-handler/filters/parse.d.ts +0 -35
  323. package/components/document-builder/src/plugins/paste-handler/filters/removeboldwrapper.d.ts +0 -15
  324. package/components/document-builder/src/plugins/paste-handler/filters/removegooglesheetstag.d.ts +0 -15
  325. package/components/document-builder/src/plugins/paste-handler/filters/removeinvalidtablewidth.d.ts +0 -15
  326. package/components/document-builder/src/plugins/paste-handler/filters/removemsattributes.d.ts +0 -15
  327. package/components/document-builder/src/plugins/paste-handler/filters/removestyleblock.d.ts +0 -15
  328. package/components/document-builder/src/plugins/paste-handler/filters/removexmlns.d.ts +0 -15
  329. package/components/document-builder/src/plugins/paste-handler/filters/replacemsfootnotes.d.ts +0 -54
  330. package/components/document-builder/src/plugins/paste-handler/filters/space.d.ts +0 -27
  331. package/components/document-builder/src/plugins/paste-handler/filters/table.d.ts +0 -16
  332. package/components/document-builder/src/plugins/paste-handler/filters/utils.d.ts +0 -25
  333. package/components/document-builder/src/plugins/paste-handler/index.d.ts +0 -35
  334. package/components/document-builder/src/plugins/paste-handler/normalizers/googledocsnormalizer.d.ts +0 -31
  335. package/components/document-builder/src/plugins/paste-handler/normalizers/googlesheetsnormalizer.d.ts +0 -31
  336. package/components/document-builder/src/plugins/paste-handler/normalizers/mswordnormalizer.d.ts +0 -29
  337. package/components/document-builder/src/plugins/paste-handler/types.d.ts +0 -30
  338. package/components/document-builder/src/plugins/table-custom/index.d.ts +0 -34
  339. package/components/document-builder/src/plugins/variable/variable.plugin.d.ts +0 -51
  340. package/components/table/src/pipes/selection-visible-select-all.pipe.d.ts +0 -9
  341. package/fesm2022/sdcorejs-angular-components-base.mjs +0 -23
  342. package/fesm2022/sdcorejs-angular-components-base.mjs.map +0 -1
  343. package/fesm2022/sdcorejs-angular-components-document-builder.mjs +0 -5038
  344. package/fesm2022/sdcorejs-angular-components-document-builder.mjs.map +0 -1
  345. package/fesm2022/sdcorejs-angular-models.mjs +0 -6
  346. package/fesm2022/sdcorejs-angular-models.mjs.map +0 -1
  347. package/fesm2022/sdcorejs-angular-services-docx.mjs +0 -291
  348. package/fesm2022/sdcorejs-angular-services-docx.mjs.map +0 -1
  349. package/fesm2022/sdcorejs-angular-services-license.mjs +0 -97
  350. package/fesm2022/sdcorejs-angular-services-license.mjs.map +0 -1
  351. package/models/index.d.ts +0 -1
  352. package/models/src/language.model.d.ts +0 -2
  353. package/services/docx/index.d.ts +0 -1
  354. package/services/docx/src/lib/docx.model.d.ts +0 -9
  355. package/services/docx/src/lib/docx.service.d.ts +0 -14
  356. package/services/docx/src/lib/pandoc-core.d.ts +0 -11
  357. package/services/docx/src/public-api.d.ts +0 -2
  358. package/services/license/index.d.ts +0 -1
  359. package/services/license/src/license.service.d.ts +0 -9
  360. package/utilities/extensions/src/array.extension.d.ts +0 -1
  361. package/utilities/extensions/src/color.extension.d.ts +0 -5
  362. package/utilities/extensions/src/date.extension.d.ts +0 -1
  363. package/utilities/extensions/src/number.extension.d.ts +0 -1
  364. package/utilities/extensions/src/string.extension.d.ts +0 -50
  365. package/utilities/models/src/color.model.d.ts +0 -4
  366. package/utilities/models/src/empty.model.d.ts +0 -4
  367. package/utilities/models/src/filter.model.d.ts +0 -12
  368. package/utilities/models/src/maybe-async.model.d.ts +0 -10
  369. package/utilities/models/src/nested-key-of.model.d.ts +0 -4
  370. package/utilities/models/src/operator.model.d.ts +0 -13
  371. package/utilities/models/src/order.model.d.ts +0 -4
  372. package/utilities/models/src/paging.model.d.ts +0 -8
  373. package/utilities/models/src/pattern.model.d.ts +0 -21
  374. package/utilities/models/src/size.model.d.ts +0 -4
@@ -3,24 +3,24 @@ import { BehaviorSubject } from 'rxjs';
3
3
  import { SdTabAction } from '../actions/tab-router.action';
4
4
  import { SdTabComponentBuilder } from '../decorators/tab.decorator';
5
5
  import { SdTabEvent } from '../events/tab-router.event';
6
- import { SdTab } from '../models/tab-router.model';
6
+ import { SdTabRouterTab } from '../models/tab-router.model';
7
7
  import * as i0 from "@angular/core";
8
8
  export declare class SdTabRouterService {
9
9
  #private;
10
10
  events: BehaviorSubject<SdTabEvent>;
11
11
  actions: BehaviorSubject<SdTabAction | undefined>;
12
12
  builders: BehaviorSubject<SdTabComponentBuilder[]>;
13
- currentTabChanges: BehaviorSubject<SdTab | undefined>;
14
- newTabs: BehaviorSubject<SdTab | undefined>;
15
- updateTabs: BehaviorSubject<SdTab | undefined>;
13
+ currentTabChanges: BehaviorSubject<SdTabRouterTab | undefined>;
14
+ newTabs: BehaviorSubject<SdTabRouterTab | undefined>;
15
+ updateTabs: BehaviorSubject<SdTabRouterTab | undefined>;
16
16
  addBuilder: (builder: SdTabComponentBuilder) => void;
17
- get currentTab(): SdTab | undefined;
17
+ get currentTab(): SdTabRouterTab | undefined;
18
18
  get currentKey(): string | null;
19
- setCurrentTab: (tab: SdTab) => void;
20
- pushEvent: (tab: SdTab, Event: Type<SdTabEvent>) => void;
19
+ setCurrentTab: (tab: SdTabRouterTab) => void;
20
+ pushEvent: (tab: SdTabRouterTab, Event: Type<SdTabEvent>) => void;
21
21
  setOptions: () => void;
22
- close: (tab?: SdTab) => void;
23
- updateTab: (tab: SdTab) => void;
22
+ close: (tab?: SdTabRouterTab) => void;
23
+ updateTab: (tab: SdTabRouterTab) => void;
24
24
  static ɵfac: i0.ɵɵFactoryDeclaration<SdTabRouterService, never>;
25
25
  static ɵprov: i0.ɵɵInjectableDeclaration<SdTabRouterService>;
26
26
  }
@@ -1,4 +1,5 @@
1
1
  export * from './src/directives/sd-table-cell-def.directive';
2
+ export * from './src/directives/sd-table-command-header-def.directive';
2
3
  export * from './src/directives/sd-table-expand-def.directive';
3
4
  export * from './src/directives/sd-table-filter-def.directive';
4
5
  export * from './src/directives/sd-table-footer-def.directive';
@@ -1,7 +1,7 @@
1
1
  import { MatTable } from '@angular/material/table';
2
2
  import { SdModal } from '@sdcorejs/angular/components/modal';
3
3
  import { SdTableColumn } from '../../models/table-column.model';
4
- import { ConfiguredTable, ConfiguredTableResult } from '../../models/table-option-config.model';
4
+ import { ConfiguredColumn, ConfiguredTable, ConfiguredTableResult } from '../../models/table-option-config.model';
5
5
  import { SdTableOption } from '../../models/table-option.model';
6
6
  import * as i0 from "@angular/core";
7
7
  export declare class ConfigComponent {
@@ -19,6 +19,11 @@ export declare class ConfigComponent {
19
19
  close: () => void;
20
20
  onSave: () => void;
21
21
  onReset: () => Promise<void>;
22
+ /**
23
+ * Cột đang tắt hiển thị thì tiêu đề / độ rộng / cố định / giới hạn ký tự đều vô nghĩa —
24
+ * khoá chúng lại để row nói rõ trạng thái, chỉ chừa ô "Hiển thị" để bật lại.
25
+ */
26
+ isRowDisabled: (item: ConfiguredColumn) => boolean;
22
27
  dropTable(event: any): void;
23
28
  handleMouseDown(): void;
24
29
  handleMouseUp(): void;
@@ -19,6 +19,7 @@ export declare class ViewComponent {
19
19
  truncateWidth: import("@angular/core").Signal<string | undefined>;
20
20
  constructor();
21
21
  toggle: () => void;
22
+ onViewKeydown: (event: KeyboardEvent) => void;
22
23
  static ɵfac: i0.ɵɵFactoryDeclaration<ViewComponent, never>;
23
24
  static ɵcmp: i0.ɵɵComponentDeclaration<ViewComponent, "view", never, { "autoId": { "alias": "autoId"; "required": true; "isSignal": true; }; "column": { "alias": "column"; "required": true; "isSignal": true; }; "item": { "alias": "item"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
24
25
  }
@@ -4,7 +4,7 @@ import * as i0 from "@angular/core";
4
4
  export declare class ExternalFilterComponent {
5
5
  #private;
6
6
  autoIdInput: import("@angular/core").InputSignal<string | null | undefined>;
7
- filter: import("@angular/core").InputSignal<SdTableOptionFilter<any> | undefined>;
7
+ filter: import("@angular/core").InputSignal<SdTableOptionFilter<unknown> | undefined>;
8
8
  externalFilters: import("@angular/core").InputSignal<SdTableExternalFilter[] | null | undefined>;
9
9
  filterRegister: import("@angular/core").InputSignal<TableFilterRegister | undefined>;
10
10
  externalFilter: import("@angular/core").WritableSignal<Record<string, any>>;
@@ -19,7 +19,7 @@ import * as i0 from "@angular/core";
19
19
  */
20
20
  export declare class MobileFilterComponent {
21
21
  autoIdInput: import("@angular/core").InputSignal<string | null | undefined>;
22
- filter: import("@angular/core").InputSignal<SdTableOptionFilter<any> | undefined>;
22
+ filter: import("@angular/core").InputSignal<SdTableOptionFilter<unknown> | undefined>;
23
23
  externalFilters: import("@angular/core").InputSignal<SdTableExternalFilter[] | null | undefined>;
24
24
  columns: import("@angular/core").InputSignal<SdTableColumn[] | null | undefined>;
25
25
  filterDefs: import("@angular/core").InputSignal<readonly SdTableFilterDefDirective[] | null | undefined>;
@@ -4,8 +4,15 @@ import { SdTableItem } from '../../models/table-item.model';
4
4
  import { SdButton } from '@sdcorejs/angular/components/button';
5
5
  import { SdUnwrapSignal } from '@sdcorejs/angular/utilities/models';
6
6
  import * as i0 from "@angular/core";
7
+ /**
8
+ * Resolves the bulk actions a selection is allowed to run.
9
+ *
10
+ * why: tách khỏi pipe để component đọc được cùng KẾT QUẢ trong `computed()` — quick-action chỉ
11
+ * được mở khi danh sách này KHÔNG rỗng, mà điều đó phải quyết định trong TS chứ không thể suy ra
12
+ * từ một pipe chỉ chạy trong template.
13
+ */
14
+ export declare function sdResolveTableActions(selectedItems: SdTableItem[] | undefined, actions: SdTableAction[] | undefined): Action[];
7
15
  export declare class ActionFilterPipe implements PipeTransform {
8
- #private;
9
16
  transform: (selectedItems: SdTableItem[] | undefined, actions: SdTableAction[] | undefined) => Action[];
10
17
  static ɵfac: i0.ɵɵFactoryDeclaration<ActionFilterPipe, never>;
11
18
  static ɵpipe: i0.ɵɵPipeDeclaration<ActionFilterPipe, "actionFilter", true>;
@@ -10,6 +10,8 @@ export declare class SelectorActionComponent {
10
10
  clear: import("@angular/core").OutputEmitterRef<void>;
11
11
  autoId: import("@angular/core").Signal<string>;
12
12
  message: import("@angular/core").Signal<string>;
13
+ /** Bulk actions the current selection is allowed to run. */
14
+ actions: import("@angular/core").Signal<Action[]>;
13
15
  opened: import("@angular/core").Signal<boolean>;
14
16
  onClear: () => void;
15
17
  onClickAction: (action: Action) => void;
@@ -2,5 +2,6 @@ export * from './sd-table-column-filter-def.directive';
2
2
  export * from './sticky-shadow.directive';
3
3
  export * from './sd-table-title-def.directive';
4
4
  export * from './sd-table-cell-def.directive';
5
+ export * from './sd-table-command-header-def.directive';
5
6
  export * from './sd-table-group-def.directive';
6
7
  export * from './sd-column-resize.directive';
@@ -0,0 +1,24 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Nội dung cho ô HEADER của cột command.
5
+ *
6
+ * Ô đó vốn để trống — chỉ giữ chỗ cho các nút thao tác bên dưới — nên đây là chỗ tự nhiên để đặt
7
+ * một hành động cấp bảng (thường là "thêm dòng") mà không tốn thêm một dải riêng dưới bảng.
8
+ *
9
+ * Không có input: cột command chỉ có một, khác `sdTableCellDef` / `sdTableTitleDef` vốn phải chỉ
10
+ * đích danh field.
11
+ *
12
+ * ```html
13
+ * <sd-table [option]="option">
14
+ * <ng-template sdTableCommandHeaderDef>
15
+ * <sd-button prefixIcon="add" type="text" (click)="addRow()"></sd-button>
16
+ * </ng-template>
17
+ * </sd-table>
18
+ * ```
19
+ */
20
+ export declare class SdTableCommandHeaderDefDirective {
21
+ templateRef: TemplateRef<unknown>;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdTableCommandHeaderDefDirective, never>;
23
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SdTableCommandHeaderDefDirective, "[sdTableCommandHeaderDef]", never, {}, {}, never, never, true, never>;
24
+ }
@@ -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[];