@sd-angular/core 19.0.0-beta.103 → 19.0.0-beta.105

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 (256) hide show
  1. package/assets/scss/README.md +433 -353
  2. package/assets/scss/core/form.scss +43 -1
  3. package/assets/scss/core/utilities/_base.scss +6 -6
  4. package/assets/scss/core/utilities/_grid.scss +4 -3
  5. package/assets/scss/core/utilities/_index.scss +1 -1
  6. package/assets/scss/core/utilities/_sizing.scss +2 -2
  7. package/assets/scss/sd-core.scss +0 -2
  8. package/components/badge/src/badge.component.d.ts +20 -3
  9. package/components/button/src/button.component.d.ts +2 -1
  10. package/components/ckeditor-styles/index.d.ts +1 -0
  11. package/components/ckeditor-styles/src/ckeditor-styles.component.d.ts +25 -0
  12. package/components/form-generic/src/models/form-generic-component.model.d.ts +5 -6
  13. package/components/form-generic/src/models/form-generic-expression.model.d.ts +1 -1
  14. package/components/history/models/history.model.d.ts +2 -2
  15. package/components/inform/index.d.ts +2 -0
  16. package/components/inform/src/inform-action.directive.d.ts +9 -0
  17. package/components/inform/src/inform.component.d.ts +59 -0
  18. package/components/modal/src/modal.component.d.ts +3 -2
  19. package/components/query-bar/src/{actions-bar.component.d.ts → components/actions-bar/actions-bar.component.d.ts} +8 -11
  20. package/components/query-bar/src/{build-chip.component.d.ts → components/build-chip/build-chip.component.d.ts} +2 -2
  21. package/components/query-bar/src/{chip-popover.component.d.ts → components/chip-popover/chip-popover.component.d.ts} +2 -2
  22. package/components/query-bar/src/{field-picker.component.d.ts → components/field-picker/field-picker.component.d.ts} +1 -1
  23. package/components/query-bar/src/{inline-chip.component.d.ts → components/inline-chip/inline-chip.component.d.ts} +2 -2
  24. package/components/query-bar/src/{inline-value-chip.component.d.ts → components/inline-value-chip/inline-value-chip.component.d.ts} +2 -2
  25. package/components/query-bar/src/{popover-chip.component.d.ts → components/popover-chip/popover-chip.component.d.ts} +2 -2
  26. package/components/query-bar/src/{saved-filters-menu.component.d.ts → components/saved-filters-menu/saved-filters-menu.component.d.ts} +1 -1
  27. package/components/query-bar/src/query-bar.component.d.ts +3 -3
  28. package/components/query-bar/src/query-bar.model.d.ts +1 -1
  29. package/components/section/src/section.component.d.ts +2 -1
  30. package/components/stepper/index.d.ts +2 -0
  31. package/components/stepper/src/step.component.d.ts +17 -0
  32. package/components/stepper/src/stepper.component.d.ts +33 -0
  33. package/components/tab/index.d.ts +2 -0
  34. package/components/tab/src/tab-group.component.d.ts +37 -0
  35. package/components/tab/src/tab.component.d.ts +13 -0
  36. package/components/tab-router/src/decorators/tab.decorator.d.ts +2 -2
  37. package/components/tab-router/src/models/tab-router.model.d.ts +2 -2
  38. package/components/table/index.d.ts +1 -0
  39. package/components/table/src/configurations/table.configuration.d.ts +3 -3
  40. package/components/table/src/directives/index.d.ts +1 -0
  41. package/components/table/src/directives/sd-table-group-def.directive.d.ts +44 -0
  42. package/components/table/src/models/index.d.ts +1 -0
  43. package/components/table/src/models/table-column.model.d.ts +13 -13
  44. package/components/table/src/models/table-command.model.d.ts +3 -2
  45. package/components/table/src/models/table-item.model.d.ts +19 -4
  46. package/components/table/src/models/table-option-export.model.d.ts +3 -3
  47. package/components/table/src/models/table-option-group.model.d.ts +19 -2
  48. package/components/table/src/models/table-option-selector.model.d.ts +17 -1
  49. package/components/table/src/models/table-option.model.d.ts +11 -2
  50. package/components/table/src/pipes/sd-group.pipe.d.ts +15 -1
  51. package/components/table/src/services/table-filter/table-filter.model.d.ts +9 -9
  52. package/components/table/src/services/table-filter/table-filter.service.d.ts +2 -2
  53. package/components/table/src/table.component.d.ts +29 -4
  54. package/fesm2022/sd-angular-core-components-anchor.mjs +2 -2
  55. package/fesm2022/sd-angular-core-components-anchor.mjs.map +1 -1
  56. package/fesm2022/sd-angular-core-components-badge.mjs +18 -3
  57. package/fesm2022/sd-angular-core-components-badge.mjs.map +1 -1
  58. package/fesm2022/sd-angular-core-components-button.mjs +2 -2
  59. package/fesm2022/sd-angular-core-components-button.mjs.map +1 -1
  60. package/fesm2022/sd-angular-core-components-ckeditor-styles.mjs +38 -0
  61. package/fesm2022/sd-angular-core-components-ckeditor-styles.mjs.map +1 -0
  62. package/fesm2022/sd-angular-core-components-document-builder.mjs +10 -8
  63. package/fesm2022/sd-angular-core-components-document-builder.mjs.map +1 -1
  64. package/fesm2022/sd-angular-core-components-editor.mjs +3 -2
  65. package/fesm2022/sd-angular-core-components-editor.mjs.map +1 -1
  66. package/fesm2022/sd-angular-core-components-form-generic.mjs +49 -48
  67. package/fesm2022/sd-angular-core-components-form-generic.mjs.map +1 -1
  68. package/fesm2022/sd-angular-core-components-history.mjs +3 -2
  69. package/fesm2022/sd-angular-core-components-history.mjs.map +1 -1
  70. package/fesm2022/sd-angular-core-components-inform.mjs +190 -0
  71. package/fesm2022/sd-angular-core-components-inform.mjs.map +1 -0
  72. package/fesm2022/sd-angular-core-components-mini-editor.mjs +4 -3
  73. package/fesm2022/sd-angular-core-components-mini-editor.mjs.map +1 -1
  74. package/fesm2022/sd-angular-core-components-modal.mjs +2 -2
  75. package/fesm2022/sd-angular-core-components-modal.mjs.map +1 -1
  76. package/fesm2022/sd-angular-core-components-operator.mjs +1 -1
  77. package/fesm2022/sd-angular-core-components-operator.mjs.map +1 -1
  78. package/fesm2022/sd-angular-core-components-query-bar.mjs +15 -22
  79. package/fesm2022/sd-angular-core-components-query-bar.mjs.map +1 -1
  80. package/fesm2022/sd-angular-core-components-section.mjs.map +1 -1
  81. package/fesm2022/sd-angular-core-components-splitter.mjs +5 -2
  82. package/fesm2022/sd-angular-core-components-splitter.mjs.map +1 -1
  83. package/fesm2022/sd-angular-core-components-stepper.mjs +140 -0
  84. package/fesm2022/sd-angular-core-components-stepper.mjs.map +1 -0
  85. package/fesm2022/sd-angular-core-components-tab-router.mjs +3 -3
  86. package/fesm2022/sd-angular-core-components-tab-router.mjs.map +1 -1
  87. package/fesm2022/sd-angular-core-components-tab.mjs +145 -0
  88. package/fesm2022/sd-angular-core-components-tab.mjs.map +1 -0
  89. package/fesm2022/sd-angular-core-components-table.mjs +284 -95
  90. package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
  91. package/fesm2022/sd-angular-core-components-upload-file.mjs +5 -6
  92. package/fesm2022/sd-angular-core-components-upload-file.mjs.map +1 -1
  93. package/fesm2022/sd-angular-core-directives.mjs +4 -4
  94. package/fesm2022/sd-angular-core-directives.mjs.map +1 -1
  95. package/fesm2022/sd-angular-core-forms-autocomplete.mjs +5 -4
  96. package/fesm2022/sd-angular-core-forms-autocomplete.mjs.map +1 -1
  97. package/fesm2022/sd-angular-core-forms-checkbox.mjs.map +1 -1
  98. package/fesm2022/sd-angular-core-forms-chip-calendar.mjs.map +1 -1
  99. package/fesm2022/sd-angular-core-forms-chip.mjs.map +1 -1
  100. package/fesm2022/sd-angular-core-forms-date-range.mjs +3 -2
  101. package/fesm2022/sd-angular-core-forms-date-range.mjs.map +1 -1
  102. package/fesm2022/sd-angular-core-forms-date.mjs +5 -4
  103. package/fesm2022/sd-angular-core-forms-date.mjs.map +1 -1
  104. package/fesm2022/sd-angular-core-forms-datetime.mjs +5 -4
  105. package/fesm2022/sd-angular-core-forms-datetime.mjs.map +1 -1
  106. package/fesm2022/sd-angular-core-forms-input-color.mjs +117 -0
  107. package/fesm2022/sd-angular-core-forms-input-color.mjs.map +1 -0
  108. package/fesm2022/sd-angular-core-forms-input-number.mjs +24 -2
  109. package/fesm2022/sd-angular-core-forms-input-number.mjs.map +1 -1
  110. package/fesm2022/sd-angular-core-forms-input.mjs +26 -2
  111. package/fesm2022/sd-angular-core-forms-input.mjs.map +1 -1
  112. package/fesm2022/sd-angular-core-forms-radio.mjs.map +1 -1
  113. package/fesm2022/sd-angular-core-forms-select.mjs +10 -10
  114. package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
  115. package/fesm2022/sd-angular-core-forms-switch.mjs.map +1 -1
  116. package/fesm2022/sd-angular-core-forms-textarea.mjs.map +1 -1
  117. package/fesm2022/sd-angular-core-i18n.mjs +10 -0
  118. package/fesm2022/sd-angular-core-i18n.mjs.map +1 -1
  119. package/fesm2022/sd-angular-core-modules-auth.mjs +4 -4
  120. package/fesm2022/sd-angular-core-modules-auth.mjs.map +1 -1
  121. package/fesm2022/sd-angular-core-modules-authom.mjs +1 -1
  122. package/fesm2022/sd-angular-core-modules-authom.mjs.map +1 -1
  123. package/fesm2022/sd-angular-core-modules-layout.mjs +14 -14
  124. package/fesm2022/sd-angular-core-modules-layout.mjs.map +1 -1
  125. package/fesm2022/sd-angular-core-modules-permission.mjs +3 -3
  126. package/fesm2022/sd-angular-core-modules-permission.mjs.map +1 -1
  127. package/fesm2022/sd-angular-core-pipes.mjs +2 -2
  128. package/fesm2022/sd-angular-core-pipes.mjs.map +1 -1
  129. package/fesm2022/sd-angular-core-services-api.mjs +3 -3
  130. package/fesm2022/sd-angular-core-services-api.mjs.map +1 -1
  131. package/fesm2022/sd-angular-core-services-cache.mjs +3 -2
  132. package/fesm2022/sd-angular-core-services-cache.mjs.map +1 -1
  133. package/fesm2022/sd-angular-core-services-confirm.mjs.map +1 -1
  134. package/fesm2022/sd-angular-core-services-excel.mjs +6 -5
  135. package/fesm2022/sd-angular-core-services-excel.mjs.map +1 -1
  136. package/fesm2022/sd-angular-core-services-notify.mjs +3 -3
  137. package/fesm2022/sd-angular-core-services-notify.mjs.map +1 -1
  138. package/fesm2022/sd-angular-core-services-storage.mjs +2 -2
  139. package/fesm2022/sd-angular-core-services-storage.mjs.map +1 -1
  140. package/fesm2022/sd-angular-core-utilities-models.mjs.map +1 -1
  141. package/forms/autocomplete/src/autocomplete.component.d.ts +2 -1
  142. package/forms/checkbox/src/checkbox.component.d.ts +1 -1
  143. package/forms/chip/src/chip.component.d.ts +1 -1
  144. package/forms/chip-calendar/src/chip-calendar.component.d.ts +1 -1
  145. package/forms/date/src/date.component.d.ts +2 -1
  146. package/forms/date-range/src/date-range.component.d.ts +2 -1
  147. package/forms/datetime/src/datetime.component.d.ts +2 -1
  148. package/forms/input/src/input.component.d.ts +6 -2
  149. package/forms/input-color/index.d.ts +1 -0
  150. package/forms/input-color/src/input-color.component.d.ts +32 -0
  151. package/forms/input-number/src/input-number.component.d.ts +6 -2
  152. package/forms/radio/src/radio.component.d.ts +1 -1
  153. package/forms/select/src/select.component.d.ts +5 -5
  154. package/forms/switch/src/switch.component.d.ts +1 -1
  155. package/forms/textarea/src/textarea.component.d.ts +2 -1
  156. package/i18n/src/en.d.ts +2 -0
  157. package/modules/auth/configurations/auth.configuration.d.ts +4 -4
  158. package/modules/layout/configurations/layout.configuration.d.ts +3 -3
  159. package/modules/permission/src/configurations/permission.configuration.d.ts +3 -3
  160. package/package.json +123 -103
  161. package/sd-angular-core-19.0.0-beta.105.tgz +0 -0
  162. package/services/confirm/src/lib/components/dialog-confirm/dialog-confirm.component.d.ts +3 -3
  163. package/services/confirm/src/lib/confirm.service.d.ts +9 -9
  164. package/utilities/models/src/icon.model.d.ts +1 -1
  165. package/assets/scss/bootstrap-4.6.2/_alert.scss +0 -52
  166. package/assets/scss/bootstrap-4.6.2/_badge.scss +0 -54
  167. package/assets/scss/bootstrap-4.6.2/_breadcrumb.scss +0 -42
  168. package/assets/scss/bootstrap-4.6.2/_button-group.scss +0 -163
  169. package/assets/scss/bootstrap-4.6.2/_buttons.scss +0 -142
  170. package/assets/scss/bootstrap-4.6.2/_card.scss +0 -286
  171. package/assets/scss/bootstrap-4.6.2/_carousel.scss +0 -200
  172. package/assets/scss/bootstrap-4.6.2/_close.scss +0 -40
  173. package/assets/scss/bootstrap-4.6.2/_code.scss +0 -48
  174. package/assets/scss/bootstrap-4.6.2/_custom-forms.scss +0 -526
  175. package/assets/scss/bootstrap-4.6.2/_dropdown.scss +0 -192
  176. package/assets/scss/bootstrap-4.6.2/_forms.scss +0 -347
  177. package/assets/scss/bootstrap-4.6.2/_functions.scss +0 -190
  178. package/assets/scss/bootstrap-4.6.2/_grid.scss +0 -73
  179. package/assets/scss/bootstrap-4.6.2/_images.scss +0 -42
  180. package/assets/scss/bootstrap-4.6.2/_input-group.scss +0 -211
  181. package/assets/scss/bootstrap-4.6.2/_jumbotron.scss +0 -17
  182. package/assets/scss/bootstrap-4.6.2/_list-group.scss +0 -154
  183. package/assets/scss/bootstrap-4.6.2/_media.scss +0 -8
  184. package/assets/scss/bootstrap-4.6.2/_mixins.scss +0 -47
  185. package/assets/scss/bootstrap-4.6.2/_modal.scss +0 -240
  186. package/assets/scss/bootstrap-4.6.2/_nav.scss +0 -125
  187. package/assets/scss/bootstrap-4.6.2/_navbar.scss +0 -332
  188. package/assets/scss/bootstrap-4.6.2/_pagination.scss +0 -74
  189. package/assets/scss/bootstrap-4.6.2/_popover.scss +0 -170
  190. package/assets/scss/bootstrap-4.6.2/_print.scss +0 -132
  191. package/assets/scss/bootstrap-4.6.2/_progress.scss +0 -47
  192. package/assets/scss/bootstrap-4.6.2/_reboot.scss +0 -484
  193. package/assets/scss/bootstrap-4.6.2/_root.scss +0 -19
  194. package/assets/scss/bootstrap-4.6.2/_spinners.scss +0 -65
  195. package/assets/scss/bootstrap-4.6.2/_tables.scss +0 -185
  196. package/assets/scss/bootstrap-4.6.2/_toasts.scss +0 -46
  197. package/assets/scss/bootstrap-4.6.2/_tooltip.scss +0 -115
  198. package/assets/scss/bootstrap-4.6.2/_transitions.scss +0 -26
  199. package/assets/scss/bootstrap-4.6.2/_type.scss +0 -125
  200. package/assets/scss/bootstrap-4.6.2/_utilities.scss +0 -18
  201. package/assets/scss/bootstrap-4.6.2/_variables.scss +0 -1150
  202. package/assets/scss/bootstrap-4.6.2/bootstrap-grid.scss +0 -30
  203. package/assets/scss/bootstrap-4.6.2/bootstrap-reboot.scss +0 -12
  204. package/assets/scss/bootstrap-4.6.2/bootstrap.scss +0 -44
  205. package/assets/scss/bootstrap-4.6.2/mixins/_alert.scss +0 -13
  206. package/assets/scss/bootstrap-4.6.2/mixins/_background-variant.scss +0 -23
  207. package/assets/scss/bootstrap-4.6.2/mixins/_badge.scss +0 -17
  208. package/assets/scss/bootstrap-4.6.2/mixins/_border-radius.scss +0 -76
  209. package/assets/scss/bootstrap-4.6.2/mixins/_box-shadow.scss +0 -20
  210. package/assets/scss/bootstrap-4.6.2/mixins/_breakpoints.scss +0 -123
  211. package/assets/scss/bootstrap-4.6.2/mixins/_buttons.scss +0 -110
  212. package/assets/scss/bootstrap-4.6.2/mixins/_caret.scss +0 -62
  213. package/assets/scss/bootstrap-4.6.2/mixins/_clearfix.scss +0 -7
  214. package/assets/scss/bootstrap-4.6.2/mixins/_deprecate.scss +0 -10
  215. package/assets/scss/bootstrap-4.6.2/mixins/_float.scss +0 -14
  216. package/assets/scss/bootstrap-4.6.2/mixins/_forms.scss +0 -195
  217. package/assets/scss/bootstrap-4.6.2/mixins/_gradients.scss +0 -45
  218. package/assets/scss/bootstrap-4.6.2/mixins/_grid-framework.scss +0 -80
  219. package/assets/scss/bootstrap-4.6.2/mixins/_grid.scss +0 -69
  220. package/assets/scss/bootstrap-4.6.2/mixins/_hover.scss +0 -37
  221. package/assets/scss/bootstrap-4.6.2/mixins/_image.scss +0 -36
  222. package/assets/scss/bootstrap-4.6.2/mixins/_list-group.scss +0 -21
  223. package/assets/scss/bootstrap-4.6.2/mixins/_lists.scss +0 -7
  224. package/assets/scss/bootstrap-4.6.2/mixins/_nav-divider.scss +0 -11
  225. package/assets/scss/bootstrap-4.6.2/mixins/_pagination.scss +0 -22
  226. package/assets/scss/bootstrap-4.6.2/mixins/_reset-text.scss +0 -17
  227. package/assets/scss/bootstrap-4.6.2/mixins/_resize.scss +0 -6
  228. package/assets/scss/bootstrap-4.6.2/mixins/_screen-reader.scss +0 -34
  229. package/assets/scss/bootstrap-4.6.2/mixins/_size.scss +0 -7
  230. package/assets/scss/bootstrap-4.6.2/mixins/_table-row.scss +0 -39
  231. package/assets/scss/bootstrap-4.6.2/mixins/_text-emphasis.scss +0 -17
  232. package/assets/scss/bootstrap-4.6.2/mixins/_text-hide.scss +0 -11
  233. package/assets/scss/bootstrap-4.6.2/mixins/_text-truncate.scss +0 -8
  234. package/assets/scss/bootstrap-4.6.2/mixins/_transition.scss +0 -26
  235. package/assets/scss/bootstrap-4.6.2/mixins/_visibility.scss +0 -8
  236. package/assets/scss/bootstrap-4.6.2/utilities/_align.scss +0 -8
  237. package/assets/scss/bootstrap-4.6.2/utilities/_background.scss +0 -19
  238. package/assets/scss/bootstrap-4.6.2/utilities/_borders.scss +0 -75
  239. package/assets/scss/bootstrap-4.6.2/utilities/_clearfix.scss +0 -3
  240. package/assets/scss/bootstrap-4.6.2/utilities/_display.scss +0 -26
  241. package/assets/scss/bootstrap-4.6.2/utilities/_embed.scss +0 -39
  242. package/assets/scss/bootstrap-4.6.2/utilities/_flex.scss +0 -51
  243. package/assets/scss/bootstrap-4.6.2/utilities/_float.scss +0 -11
  244. package/assets/scss/bootstrap-4.6.2/utilities/_interactions.scss +0 -5
  245. package/assets/scss/bootstrap-4.6.2/utilities/_overflow.scss +0 -5
  246. package/assets/scss/bootstrap-4.6.2/utilities/_position.scss +0 -32
  247. package/assets/scss/bootstrap-4.6.2/utilities/_screenreaders.scss +0 -11
  248. package/assets/scss/bootstrap-4.6.2/utilities/_shadows.scss +0 -6
  249. package/assets/scss/bootstrap-4.6.2/utilities/_sizing.scss +0 -20
  250. package/assets/scss/bootstrap-4.6.2/utilities/_spacing.scss +0 -73
  251. package/assets/scss/bootstrap-4.6.2/utilities/_stretched-link.scss +0 -19
  252. package/assets/scss/bootstrap-4.6.2/utilities/_text.scss +0 -72
  253. package/assets/scss/bootstrap-4.6.2/utilities/_visibility.scss +0 -13
  254. package/assets/scss/bootstrap-4.6.2/vendor/_rfs.scss +0 -228
  255. package/assets/scss/core/bootstrap.scss +0 -13
  256. package/sd-angular-core-19.0.0-beta.103.tgz +0 -0
@@ -0,0 +1,37 @@
1
+ import { MatTabGroup } from '@angular/material/tabs';
2
+ import { SdBaseSecureComponent } from '@sd-angular/core/components/base';
3
+ import { Color } from '@sdcorejs/utils/models';
4
+ import { SdTab } from './tab.component';
5
+ import * as i0 from "@angular/core";
6
+ export interface SdTabClosedEvent {
7
+ index: number;
8
+ tab: SdTab;
9
+ }
10
+ export declare class SdTabGroup extends SdBaseSecureComponent {
11
+ tabs: import("@angular/core").Signal<readonly SdTab[]>;
12
+ selectedIndex: import("@angular/core").ModelSignal<number>;
13
+ variant: import("@angular/core").InputSignal<"line" | "pills" | "segmented">;
14
+ color: import("@angular/core").InputSignal<Color>;
15
+ headerPosition: import("@angular/core").InputSignal<"above" | "below">;
16
+ alignTabs: import("@angular/core").InputSignal<"start" | "center" | "end">;
17
+ stretchTabs: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
18
+ animationDuration: import("@angular/core").InputSignal<string>;
19
+ disableRipple: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
20
+ dynamicHeight: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
21
+ autoId: import("@angular/core").InputSignal<string | undefined>;
22
+ tabClosed: import("@angular/core").OutputEmitterRef<SdTabClosedEvent>;
23
+ protected matTabGroup: import("@angular/core").Signal<MatTabGroup | undefined>;
24
+ get autoIdAttr(): string | null;
25
+ get isPills(): boolean;
26
+ get isSegmented(): boolean;
27
+ get cssIndicator(): string;
28
+ get cssActive(): string;
29
+ get cssBadgeBg(): string;
30
+ get cssBadgeColor(): string;
31
+ constructor();
32
+ selectTab(index: number): void;
33
+ realignInkBar(): void;
34
+ protected onClose(tab: SdTab, index: number, event: MouseEvent): void;
35
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdTabGroup, never>;
36
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdTabGroup, "sd-tab-group", never, { "selectedIndex": { "alias": "selectedIndex"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "headerPosition": { "alias": "headerPosition"; "required": false; "isSignal": true; }; "alignTabs": { "alias": "alignTabs"; "required": false; "isSignal": true; }; "stretchTabs": { "alias": "stretchTabs"; "required": false; "isSignal": true; }; "animationDuration": { "alias": "animationDuration"; "required": false; "isSignal": true; }; "disableRipple": { "alias": "disableRipple"; "required": false; "isSignal": true; }; "dynamicHeight": { "alias": "dynamicHeight"; "required": false; "isSignal": true; }; "autoId": { "alias": "autoId"; "required": false; "isSignal": true; }; }, { "selectedIndex": "selectedIndexChange"; "tabClosed": "tabClosed"; }, ["tabs"], never, true, never>;
37
+ }
@@ -0,0 +1,13 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class SdTab {
4
+ label: import("@angular/core").InputSignal<string>;
5
+ icon: import("@angular/core").InputSignal<string | null | undefined>;
6
+ badge: import("@angular/core").InputSignal<string | number | null | undefined>;
7
+ disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
8
+ closable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
9
+ close: import("@angular/core").OutputEmitterRef<void>;
10
+ bodyTpl: import("@angular/core").Signal<TemplateRef<unknown>>;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdTab, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdTab, "sd-tab", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; }, { "close": "close"; }, never, ["*"], true, never>;
13
+ }
@@ -1,5 +1,5 @@
1
1
  import { Type } from '@angular/core';
2
- import { SdColor } from '@sd-angular/core/utilities/models';
2
+ import { Color } from '@sdcorejs/utils/models';
3
3
  export interface SdTabComponentArgs {
4
4
  url?: string;
5
5
  params?: any;
@@ -11,6 +11,6 @@ export declare interface SdTabComponentBuilder {
11
11
  name: string | ((args: SdTabComponentArgs) => string);
12
12
  icon?: string | ((args: SdTabComponentArgs) => string);
13
13
  tooltip?: string | ((args: SdTabComponentArgs) => string);
14
- color?: SdColor | ((args: SdTabComponentArgs) => SdColor);
14
+ color?: Color | ((args: SdTabComponentArgs) => Color);
15
15
  }
16
16
  export declare function SdTabComponent<T>(builder: SdTabComponentBuilder): (constructor: T) => void;
@@ -1,11 +1,11 @@
1
1
  import { Type } from '@angular/core';
2
- import { SdColor } from '@sd-angular/core/utilities/models';
2
+ import { Color } from '@sdcorejs/utils/models';
3
3
  import { Subject } from 'rxjs';
4
4
  export interface SdTabInfo {
5
5
  name: string;
6
6
  icon?: string;
7
7
  tooltip?: string;
8
- color?: SdColor;
8
+ color?: Color;
9
9
  }
10
10
  export interface SdTab {
11
11
  component: Type<any>;
@@ -2,6 +2,7 @@ export * from './src/directives/sd-table-cell-def.directive';
2
2
  export * from './src/directives/sd-table-expand-def.directive';
3
3
  export * from './src/directives/sd-table-filter-def.directive';
4
4
  export * from './src/directives/sd-table-footer-def.directive';
5
+ export * from './src/directives/sd-table-group-def.directive';
5
6
  export * from './src/directives/sd-table-title-def.directive';
6
7
  export * from './src/table.component';
7
8
  export * from './src/services/table-filter/table-filter.model';
@@ -1,7 +1,7 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import { SdTableOptionPaginate } from '../models/table-option-paginate.model';
3
3
  import { SdTableOptionFilter } from '../services/table-filter/table-filter.model';
4
- import { SdOperator } from '@sd-angular/core/utilities';
4
+ import { Operator } from '@sdcorejs/utils/models';
5
5
  import { SdTableColumn } from '../models';
6
6
  export interface ISdTableConfiguration {
7
7
  paginate?: {
@@ -21,8 +21,8 @@ export interface ISdTableConfiguration {
21
21
  /** Ẩn toolbar (xóa bộ lọc, thiết lập) của external filter, khi có ít external filter user không cần chức năng này, mặc định là false */
22
22
  hideExternalFilterToolbar?: SdTableOptionFilter['hideExternalFilterToolbar'];
23
23
  operator?: {
24
- list?: Partial<Record<SdTableColumn['type'], SdOperator[]>>;
25
- default?: Partial<Record<SdTableColumn['type'], SdOperator>>;
24
+ list?: Partial<Record<SdTableColumn['type'], Operator[]>>;
25
+ default?: Partial<Record<SdTableColumn['type'], Operator>>;
26
26
  };
27
27
  };
28
28
  images?: {
@@ -2,4 +2,5 @@ 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-group-def.directive';
5
6
  export * from './sd-column-resize.directive';
@@ -0,0 +1,44 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ import { SdTableItem } from '../models/table-item.model';
3
+ import * as i0 from "@angular/core";
4
+ export interface SdTableGroupDefContext<T = any> {
5
+ /** Children items thuộc group hiện tại (kèm wrapper SdTableItem). */
6
+ items: SdTableItem<T>[];
7
+ /** Children raw data (đã unwrap khỏi SdTableItem) — tiện dùng trong template. */
8
+ data: T[];
9
+ /** Hash key của group (Utilities.hash(values)). */
10
+ key: string;
11
+ /** Resolved giá trị các field group — vd `{ customerId: 1, customerName: 'A' }`. */
12
+ values: Record<string, any>;
13
+ /** true nếu group đang expand, false nếu collapse (chỉ ý nghĩa khi option.group.collapsible). */
14
+ isExpanded: boolean;
15
+ /** true nếu mọi children selectable đều selected. */
16
+ isSelected: boolean;
17
+ /** true nếu một phần children selected (partial). */
18
+ indeterminate: boolean;
19
+ /** Toggle expand/collapse (chỉ chạy nếu collapsible). */
20
+ toggleExpand: () => void;
21
+ /** Toggle select-all cho cả group (chỉ chạy nếu selector visible). */
22
+ toggleSelect: () => void;
23
+ }
24
+ /**
25
+ * Directive cung cấp custom template render group header row trong sd-table.
26
+ * Thay thế cho htmlTemplate callback cũ — cho phép Angular template binding,
27
+ * pipes, components con (sd-badge, sd-button, …) bên trong.
28
+ *
29
+ * Ví dụ:
30
+ * ```html
31
+ * <sd-table [option]="opt">
32
+ * <ng-template sdTableGroupDef let-values="values" let-items="items" let-indeterminate="indeterminate">
33
+ * <b>Khách hàng: {{ values.customerName }}</b>
34
+ * <span>{{ items.length }} đơn hàng</span>
35
+ * </ng-template>
36
+ * </sd-table>
37
+ * ```
38
+ */
39
+ export declare class SdTableGroupDefDirective<T = any> {
40
+ static ngTemplateContextGuard<T>(_dir: SdTableGroupDefDirective<T>, _ctx: unknown): _ctx is SdTableGroupDefContext<T>;
41
+ templateRef: TemplateRef<SdTableGroupDefContext<T>>;
42
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdTableGroupDefDirective<any>, never>;
43
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SdTableGroupDefDirective<any>, "[sdTableGroupDef]", never, {}, {}, never, never, true, never>;
44
+ }
@@ -2,3 +2,4 @@ export * from './table-option.model';
2
2
  export * from './table-column.model';
3
3
  export * from './table-command.model';
4
4
  export * from './table-option-tree.model';
5
+ export type { SdTableItem, SdTableMeta, SdTableDisplay } from './table-item.model';
@@ -1,7 +1,7 @@
1
1
  import { Signal, TemplateRef } from '@angular/core';
2
2
  import { SdBadge } from '@sd-angular/core/components/badge';
3
3
  import { SdSearch } from '@sd-angular/core/forms';
4
- import { SdNestedKeyOf, SdOperator } from '@sd-angular/core/utilities';
4
+ import { NestedKeyOf, Operator } from '@sdcorejs/utils/models';
5
5
  import { SdUnwrapSignal } from '@sd-angular/core/utilities/models';
6
6
  export type SdTableColumn<T = any> = SdTableColumnText<T> | SdTableColumnNumber<T> | SdTableColumnBool<T> | SdTableColumnDate<T> | SdTableColumnValues<T> | SdTableColumnLazyValues<T> | SdTableColumnChildren<T>;
7
7
  export type SdTableColumnTransformFunc<T = any> = (value: any, rowData: T, args?: {
@@ -46,9 +46,9 @@ interface SdTableColumnBase<T = any> {
46
46
  disabled?: boolean;
47
47
  default?: any;
48
48
  operator?: {
49
- default?: SdOperator;
49
+ default?: Operator;
50
50
  enable?: boolean;
51
- list?: SdOperator[];
51
+ list?: Operator[];
52
52
  };
53
53
  filterDef?: TemplateRef<any>;
54
54
  };
@@ -58,12 +58,12 @@ interface SdTableColumnBase<T = any> {
58
58
  };
59
59
  }
60
60
  interface SdTableColumnText<T = any> extends SdTableColumnBase<T> {
61
- field: SdNestedKeyOf<T>;
61
+ field: NestedKeyOf<T>;
62
62
  type: 'string';
63
63
  useBadge?: UseBadgeFunc<T>;
64
64
  }
65
65
  interface SdTableColumnNumber<T = any> extends SdTableColumnBase<T> {
66
- field: SdNestedKeyOf<T>;
66
+ field: NestedKeyOf<T>;
67
67
  type: 'number';
68
68
  useBadge?: UseBadgeFunc<T>;
69
69
  filter?: SdTableColumnBase['filter'] & {
@@ -71,7 +71,7 @@ interface SdTableColumnNumber<T = any> extends SdTableColumnBase<T> {
71
71
  };
72
72
  }
73
73
  interface SdTableColumnBool<T = any> extends SdTableColumnBase<T> {
74
- field: SdNestedKeyOf<T>;
74
+ field: NestedKeyOf<T>;
75
75
  type: 'boolean';
76
76
  useBadge?: UseBadgeFunc<T>;
77
77
  option?: {
@@ -80,7 +80,7 @@ interface SdTableColumnBool<T = any> extends SdTableColumnBase<T> {
80
80
  };
81
81
  }
82
82
  interface SdTableColumnDate<T = any> extends SdTableColumnBase<T> {
83
- field: SdNestedKeyOf<T>;
83
+ field: NestedKeyOf<T>;
84
84
  type: 'date' | 'datetime' | 'time';
85
85
  useBadge?: UseBadgeFunc<T>;
86
86
  filter?: SdTableColumnBase['filter'] & {
@@ -88,24 +88,24 @@ interface SdTableColumnDate<T = any> extends SdTableColumnBase<T> {
88
88
  };
89
89
  }
90
90
  export interface SdTableColumnValues<T = any, K = Record<string, any>> extends SdTableColumnBase<T> {
91
- field: SdNestedKeyOf<T>;
91
+ field: NestedKeyOf<T>;
92
92
  type: 'values';
93
93
  useBadge?: UseBadgeValuesFunc<T, K>;
94
94
  option: {
95
95
  items: K[] | Signal<K[]> | (() => Promise<K[]>);
96
- valueField: SdNestedKeyOf<K>;
97
- displayField: SdNestedKeyOf<K>;
96
+ valueField: NestedKeyOf<K>;
97
+ displayField: NestedKeyOf<K>;
98
98
  selection?: 'MULTIPLE';
99
99
  };
100
100
  }
101
101
  export interface SdTableColumnLazyValues<T = any, K = Record<string, any>> extends SdTableColumnBase<T> {
102
- field: SdNestedKeyOf<T>;
102
+ field: NestedKeyOf<T>;
103
103
  type: 'lazy-values';
104
104
  useBadge?: UseBadgeFunc<T>;
105
105
  option: {
106
106
  items: SdSearch<K>;
107
- valueField: SdNestedKeyOf<K>;
108
- displayField: SdNestedKeyOf<K>;
107
+ valueField: NestedKeyOf<K>;
108
+ displayField: NestedKeyOf<K>;
109
109
  views?: (values: string[]) => Promise<K[]>;
110
110
  selection?: 'MULTIPLE';
111
111
  };
@@ -1,11 +1,12 @@
1
- import { MaterialIconFontSet, SdColor } from '@sd-angular/core/utilities/models';
1
+ import { MaterialIconFontSet } from '@sd-angular/core/utilities/models';
2
+ import { Color } from '@sdcorejs/utils/models';
2
3
  export interface SdTableCommandOption<T = any> {
3
4
  align?: 'left' | 'right';
4
5
  commands?: SdTableCommand<T>[];
5
6
  }
6
7
  export type SdTableCommand<T = any> = SdTableCommandNormal<T> | SdTableCommandChildren<T>;
7
8
  export interface SdTableCommandNormal<T = any> {
8
- color?: SdColor;
9
+ color?: Color;
9
10
  icon?: string | ((rowData: T) => string);
10
11
  fontSet?: MaterialIconFontSet;
11
12
  title?: string | ((rowData: T) => string);
@@ -18,6 +18,12 @@ export interface SdTableMetaTree<T = any> {
18
18
  parentId?: string;
19
19
  /** Cached formatted child SdTableItem[] — populated on first expand/format */
20
20
  childItems?: SdTableItem<T>[];
21
+ /**
22
+ * Hierarchical index path từ root tới row hiện tại — sibling-index (1-based) per level.
23
+ * Vd root thứ nhất = [1], child thứ 2 của root đó = [1, 2], grandchild thứ 1 = [1, 2, 1].
24
+ * Template STT join('.') → "1", "1.2", "1.2.1". Populate trong `flattenTree`.
25
+ */
26
+ indexPath?: number[];
21
27
  }
22
28
  export interface SdTableDisplay {
23
29
  tooltip?: string;
@@ -32,15 +38,24 @@ export interface SdTableDisplay {
32
38
  isHtml: boolean;
33
39
  click?: () => void;
34
40
  }
41
+ export interface SdTableMetaGroup<T = any> {
42
+ /** Children items thuộc group này (chỉ set trên group header row). */
43
+ items?: SdTableItem<T>[];
44
+ /** true = row này là synthetic group header (sinh bởi SdGroupPipe). */
45
+ isGroupHeader?: boolean;
46
+ /** Hash key của group (= Utilities.hash(values)). */
47
+ key?: string;
48
+ /** Resolved group-field values (vd `{ customerId: 1, customerName: 'A' }`). */
49
+ values?: Record<string, any>;
50
+ /** Trạng thái expand. Chỉ ý nghĩa khi `option.group.collapsible = true`. */
51
+ isExpanded?: boolean;
52
+ }
35
53
  export interface SdTableMeta<T> {
36
54
  id: string;
37
55
  display: Record<string, SdTableDisplay>;
38
56
  selector?: SdTableMetaSelector;
39
57
  expand?: SdTableMetaExpand;
40
- group?: {
41
- htmlTemplate?: string;
42
- items?: SdTableItem<T>[];
43
- };
58
+ group?: SdTableMetaGroup<T>;
44
59
  tree?: SdTableMetaTree<T>;
45
60
  }
46
61
  export interface SdTableItem<T = any> {
@@ -1,4 +1,4 @@
1
- import { SdNestedKeyOf } from '@sd-angular/core/utilities';
1
+ import { NestedKeyOf } from '@sdcorejs/utils/models';
2
2
  import { SdTableFilterRequest } from '../services/table-filter/table-filter.model';
3
3
  export type SdTableOptionExport<T = any> = SdTableOptionExportDefault<T> | SdTableOptionExportCustom;
4
4
  export interface SdTableOptionExportDefault<T = any> {
@@ -23,7 +23,7 @@ export interface SdTableOptionExportCustom {
23
23
  onExport: (filterRequest: SdTableFilterRequest) => Promise<void>;
24
24
  }
25
25
  export interface SdTableOptionExportColumn<T = any> {
26
- field: SdNestedKeyOf<T>;
26
+ field: NestedKeyOf<T>;
27
27
  title: string;
28
28
  description?: string;
29
29
  width?: string;
@@ -36,7 +36,7 @@ export interface SdTableOptionExportSheet<T = any> {
36
36
  name: string;
37
37
  items: T[] | (() => T[] | Promise<T[]>);
38
38
  headers: {
39
- value: SdNestedKeyOf<T>;
39
+ value: NestedKeyOf<T>;
40
40
  display: string;
41
41
  }[];
42
42
  }
@@ -1,4 +1,21 @@
1
+ import { NestedKeyOf } from '@sdcorejs/utils/models';
1
2
  export interface SdTableOptionGroup<T = any> {
2
- fields: string[];
3
- htmlTemplate: (rowDatas: T[]) => string;
3
+ /**
4
+ * Danh sách field dùng để nhóm. Item có cùng giá trị tất cả `fields` sẽ vào cùng group.
5
+ * Ví dụ `['customerId']` group orders theo khách hàng.
6
+ * Type-safe qua `NestedKeyOf<T>` — hỗ trợ dot-notation cho nested object (vd `'customer.id'`).
7
+ */
8
+ fields: NestedKeyOf<T>[];
9
+ /**
10
+ * Mặc định group có collapse được không. true = render với UI có thể expand/collapse;
11
+ * false = luôn show toàn bộ children (mặc định).
12
+ */
13
+ collapsible?: boolean;
14
+ /** Nếu collapsible, mặc định trạng thái ban đầu: true = collapsed, false = expanded (default). */
15
+ defaultCollapsed?: boolean;
16
+ /**
17
+ * Predicate tùy chọn cho selection. Khi check `selectable` của group header.
18
+ * Mặc định: chỉ nhóm có >=1 child `selectable` mới hiển thị checkbox.
19
+ */
20
+ selectable?: (children: T[]) => boolean;
4
21
  }
@@ -21,6 +21,22 @@ export interface SdTableOptionSelector<T = any> {
21
21
  * Dùng khi cần programmatically set selected items từ bên ngoài.
22
22
  */
23
23
  defaultSelected?: (rowData: T) => boolean;
24
+ /**
25
+ * Giữ lại selection khi user chuyển trang / filter / sort / reload.
26
+ * Selection chỉ bị clear khi user bấm nút X (onClearSelection) hoặc bỏ chọn từng item.
27
+ *
28
+ * - Default (false): selection bị mất khi data items được re-fetch (server-side) hoặc
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).
31
+ * Sau mỗi #render, restore `isSelected` cho item nào id đã có trong map.
32
+ * `selectedTableItems()` trả về TOÀN BỘ item đã chọn xuyên trang (kể cả off-page),
33
+ * nên action bar + callback `click(items)` nhận đầy đủ data đang được chọn.
34
+ *
35
+ * Lưu ý: matching dựa trên `Utilities.hash(data)` — hai item có cùng data shape sẽ
36
+ * trùng id (mong muốn). Nếu data có timestamp/random field thay đổi giữa các lần fetch,
37
+ * id sẽ khác và selection không restore được.
38
+ */
39
+ preserveSelection?: boolean;
24
40
  }
25
41
  export type SdTableAction<T = any> = SdTableActionNormal<T> | SdTableActionChildren<T>;
26
42
  export interface SdTableActionNormal<T = any> {
@@ -34,7 +50,7 @@ export interface SdTableActionNormal<T = any> {
34
50
  * Font set của Material icon.
35
51
  * Kiểu thực tế lấy từ `SdButton['fontSet']` và chỉ hỗ trợ các giá trị thuộc `MaterialIconFontSet`,
36
52
  * ví dụ: `material-icons`, `material-icons-outlined`, `material-icons-round`,
37
- * `material-icons-sharp`, `material-symbols-outlined`.
53
+ * `material-icons-sharp`.
38
54
  * Nếu không truyền, `SdButton` sẽ dùng font set mặc định của nó.
39
55
  */
40
56
  fontSet?: SdUnwrapSignal<SdButton['fontSet']>;
@@ -1,4 +1,4 @@
1
- import { SdPagingReq } from '@sd-angular/core/utilities';
1
+ import { PagingReq } from '@sdcorejs/utils/models';
2
2
  import { SdTableFilterRequest, SdTableOptionFilter } from '../services/table-filter/table-filter.model';
3
3
  import { SdTableColumn } from './table-column.model';
4
4
  import { SdTableCommand, SdTableCommandOption } from './table-command.model';
@@ -86,6 +86,15 @@ interface SdTableBaseOption<T = any> {
86
86
  /** Width của cột (mặc định '50px'). */
87
87
  width?: string;
88
88
  };
89
+ /**
90
+ * Bật cột filler ở cuối row để hấp thụ leftover width khi tổng width các cột data < container.
91
+ * Khi enabled = true, các cột utility (selection / STT / command) không bị browser stretch trên màn rộng.
92
+ * Mặc định off — table tự stretch cột data theo `width: 100%` như cũ.
93
+ */
94
+ filler?: {
95
+ /** Bật/tắt cột filler. */
96
+ enabled?: boolean;
97
+ };
89
98
  /**
90
99
  * Cấu hình kéo-thả đổi thứ tự dòng.
91
100
  * Chỉ bật khi table cho phép reorder dữ liệu phía client.
@@ -155,7 +164,7 @@ interface SdTableServerOption<T = any> extends SdTableBaseOption<T> {
155
164
  * `pagingReq` là dữ liệu paging đã được chuẩn hóa để dễ map sang API backend.
156
165
  * Hàm cần trả về `{ items, total }` để table render và tính phân trang.
157
166
  */
158
- items: (filterRequest: SdTableFilterRequest<T>, pagingReq: SdPagingReq<T>) => Promise<{
167
+ items: (filterRequest: SdTableFilterRequest<T>, pagingReq: PagingReq<T>) => Promise<{
159
168
  items: T[];
160
169
  total: number;
161
170
  }>;
@@ -3,7 +3,21 @@ import { SdTableOption } from '../models/table-option.model';
3
3
  import { SdTableItem } from '../models/table-item.model';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class SdGroupPipe implements PipeTransform {
6
- transform(items: SdTableItem[], gridOption: SdTableOption): SdTableItem[];
6
+ /**
7
+ * Nhóm items theo `option.group.fields`. Mỗi group sinh ra 1 synthetic SdTableItem
8
+ * (group header) đặt trước children. Header có `meta.group.isGroupHeader = true` + `key`
9
+ * + `values` + `items` + `isExpanded` để template + table consume.
10
+ *
11
+ * Khi `option.group.collapsible = true` + group đang collapse → children bị lọc khỏi output.
12
+ *
13
+ * `expandState` (optional, owned by component) — Map<key, expanded> giữ trạng thái
14
+ * expand/collapse qua các lần transform. Pipe đọc state từ Map; nếu key chưa tồn tại,
15
+ * dùng `!option.group.defaultCollapsed`. Pipe ghi state về Map cho lần read sau.
16
+ *
17
+ * @example
18
+ * `_items | sdGroup: _tableOption : groupExpandState`
19
+ */
20
+ transform(items: SdTableItem[], gridOption: SdTableOption, expandState?: Map<string, boolean>): SdTableItem[];
7
21
  static ɵfac: i0.ɵɵFactoryDeclaration<SdGroupPipe, never>;
8
22
  static ɵpipe: i0.ɵɵPipeDeclaration<SdGroupPipe, "sdGroup", true>;
9
23
  }
@@ -1,6 +1,6 @@
1
1
  import { TemplateRef } from '@angular/core';
2
2
  import { SdSearch } from '@sd-angular/core/forms';
3
- import { SdNestedKeyOf, SdOperator, SdOrder, SdPagingReq } from '@sd-angular/core/utilities';
3
+ import { NestedKeyOf, Operator, Order, PagingReq } from '@sdcorejs/utils/models';
4
4
  import { Observable } from 'rxjs';
5
5
  import { SdTableColumn } from '../../models/table-column.model';
6
6
  export interface SdTableQuickFilter {
@@ -12,20 +12,20 @@ export interface TableFilterConfiguration {
12
12
  inlineExternal: Record<string, boolean>;
13
13
  }
14
14
  export interface TableFilterValue {
15
- columnOperator?: Record<string, SdOperator>;
15
+ columnOperator?: Record<string, Operator>;
16
16
  columnFilter?: Record<string, any>;
17
17
  externalFilter?: Record<string, any>;
18
18
  notReload?: boolean;
19
19
  filtered?: boolean;
20
20
  }
21
21
  export interface SdTableFilterRequest<T = any> {
22
- columnOperator: Record<SdNestedKeyOf<T>, SdOperator>;
23
- rawColumnFilter: Record<SdNestedKeyOf<T>, any>;
22
+ columnOperator: Record<NestedKeyOf<T>, Operator>;
23
+ rawColumnFilter: Record<NestedKeyOf<T>, any>;
24
24
  rawExternalFilter: Record<string, any>;
25
25
  pageNumber: number;
26
26
  pageSize: number;
27
27
  orderBy?: string;
28
- orderDirection?: SdOrder['direction'];
28
+ orderDirection?: Order['direction'];
29
29
  isExported?: boolean;
30
30
  visibledColumns?: SdTableColumn[];
31
31
  }
@@ -39,7 +39,7 @@ export interface SdTableOptionFilter<T = any> {
39
39
  /** Ẩn tất cả inline filter (chỉ còn external), nếu chọn auto thì sẽ ẩn khi total row <= 10, phù hợp cho các màn detail có ít dữ liệu */
40
40
  hideInlineFilter?: boolean | 'auto';
41
41
  /** Hàm xử lý khi đổi Operator của filter column */
42
- operatorChange?: (column?: SdTableColumn, operator?: SdOperator) => void;
42
+ operatorChange?: (column?: SdTableColumn, operator?: Operator) => void;
43
43
  /** Danh sách external filter */
44
44
  externalFilters?: SdTableExternalFilter[];
45
45
  /** Số lượng cột external filter trên mỗi hàng (mặc định: 6) */
@@ -57,8 +57,8 @@ export declare const SdConvertToPagingReq: (filterRequest: SdTableFilterRequest,
57
57
  columns?: SdTableColumn[];
58
58
  externalFilters?: SdTableExternalFilter[];
59
59
  fieldMapping?: Record<string, string>;
60
- orders?: SdOrder[];
61
- }) => SdPagingReq;
60
+ orders?: Order[];
61
+ }) => PagingReq;
62
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
63
  interface BaseFilter<TData = any> {
64
64
  field: string;
@@ -66,7 +66,7 @@ interface BaseFilter<TData = any> {
66
66
  defaultShowing?: boolean;
67
67
  required?: boolean;
68
68
  hidden?: boolean;
69
- defaultOperator?: SdOperator;
69
+ defaultOperator?: Operator;
70
70
  data?: TData;
71
71
  onChange?: (value: any) => void;
72
72
  }
@@ -1,5 +1,5 @@
1
1
  import { SdStorageService } from '@sd-angular/core/services';
2
- import { SdOperator } from '@sd-angular/core/utilities/models';
2
+ import { Operator } from '@sdcorejs/utils/models';
3
3
  import { SdTableFilterDefDirective } from '../../directives/sd-table-filter-def.directive';
4
4
  import { SdTableColumn } from '../../models/table-column.model';
5
5
  import { SdTableExternalFilter, SdTableOptionFilter, TableFilterRegister } from './table-filter.model';
@@ -13,7 +13,7 @@ export declare class SdTableFilterService {
13
13
  columns: SdTableColumn[] | undefined;
14
14
  externalFilters: SdTableExternalFilter[] | undefined;
15
15
  filterDefs: SdTableFilterDefDirective[] | undefined;
16
- columnOperator?: Record<string, SdOperator>;
16
+ columnOperator?: Record<string, Operator>;
17
17
  }) => TableFilterRegister;
18
18
  static ɵfac: i0.ɵɵFactoryDeclaration<SdTableFilterService, never>;
19
19
  static ɵprov: i0.ɵɵInjectableDeclaration<SdTableFilterService>;
@@ -5,6 +5,7 @@ import { MatTable } from '@angular/material/table';
5
5
  import { SdExcelColumn } from '@sd-angular/core/services';
6
6
  import { SdTableCellDefDirective } from './directives/sd-table-cell-def.directive';
7
7
  import { SdTableExpandDefDirective } from './directives/sd-table-expand-def.directive';
8
+ import { SdTableGroupDefDirective, SdTableGroupDefContext } from './directives/sd-table-group-def.directive';
8
9
  import { SdTableFilterDefDirective } from './directives/sd-table-filter-def.directive';
9
10
  import { SdMaterialFooterDefDirective } from './directives/sd-table-footer-def.directive';
10
11
  import { SdTableTitleDefDirective } from './directives/sd-table-title-def.directive';
@@ -15,7 +16,7 @@ import { CdkDrag, CdkDragDrop, CdkDropList } from '@angular/cdk/drag-drop';
15
16
  import { SdBaseSecureComponent } from '@sd-angular/core/components/base';
16
17
  import { SdQuickAction } from '@sd-angular/core/components/quick-action';
17
18
  import { SdScrollDirective } from '@sd-angular/core/directives';
18
- import { SdOperator } from '@sd-angular/core/utilities';
19
+ import { Operator } from '@sdcorejs/utils/models';
19
20
  import { ExternalFilterComponent, MobileFilterComponent } from './components';
20
21
  import { ConfigComponent } from './components/config/config.component';
21
22
  import { SdPopupExport } from './components/popup-export/popup-export.component';
@@ -49,6 +50,7 @@ export declare class SdTable<T = unknown> extends SdBaseSecureComponent implemen
49
50
  paginator: import("@angular/core").Signal<MatPaginator | undefined>;
50
51
  sort: import("@angular/core").Signal<MatSort | undefined>;
51
52
  sdSubInformation: import("@angular/core").Signal<SdTableExpandDefDirective<any> | undefined>;
53
+ sdGroupDef: import("@angular/core").Signal<SdTableGroupDefDirective<any> | undefined>;
52
54
  sdCellDefs: import("@angular/core").Signal<readonly SdTableCellDefDirective<any>[]>;
53
55
  sdFooterDefs: import("@angular/core").Signal<readonly SdMaterialFooterDefDirective<any>[]>;
54
56
  sdFilterDefs: import("@angular/core").Signal<readonly SdTableFilterDefDirective[]>;
@@ -68,7 +70,7 @@ export declare class SdTable<T = unknown> extends SdBaseSecureComponent implemen
68
70
  requireFiltered: import("@angular/core").WritableSignal<boolean>;
69
71
  filterRegister: TableFilterRegister;
70
72
  key: string;
71
- columnOperator: Record<string, SdOperator>;
73
+ columnOperator: Record<string, Operator>;
72
74
  columnFilter?: Record<string, any>;
73
75
  cacheValues: Record<string, any[]>;
74
76
  treeRevision: import("@angular/core").WritableSignal<number>;
@@ -91,6 +93,29 @@ export declare class SdTable<T = unknown> extends SdBaseSecureComponent implemen
91
93
  onSelect: (rowData: SdTableItem<T>) => void;
92
94
  onSelectAll: () => void;
93
95
  onClearSelection: (items?: SdTableItem<T>[]) => void;
96
+ /** true nếu MỌI selectable child trong group đều selected. Group rỗng (không child) → false. */
97
+ isGroupAllSelected: (header: SdTableItem<T>) => boolean;
98
+ /** true nếu CÓ MỘT VÀI selectable child selected nhưng KHÔNG phải tất cả. */
99
+ isGroupIndeterminate: (header: SdTableItem<T>) => boolean;
100
+ /** Toggle select-all cho 1 group: set isSelected cho mọi selectable child, sync state. */
101
+ onSelectGroup: (header: SdTableItem<T>, checked: boolean) => void;
102
+ groupExpandState: Map<string, boolean>;
103
+ /** Toggle expand/collapse cho 1 group (chỉ ý nghĩa khi option.group.collapsible). */
104
+ toggleGroupExpand: (header: SdTableItem<T>) => void;
105
+ /**
106
+ * Predicate cho matRowDef.when — phân biệt group header row vs data row.
107
+ * Group header row dùng matRowDef riêng với column list ['sdGroupHeader'] (1 cell duy nhất).
108
+ * Data row dùng displayedColumns nguyên vẹn.
109
+ */
110
+ isGroupHeaderRow: (_idx: number, row: SdTableItem<T>) => boolean;
111
+ isDataRow: (_idx: number, row: SdTableItem<T>) => boolean;
112
+ /**
113
+ * Colspan cho cell sdGroupHeader trên group row = displayedColumns.length.
114
+ * Span TOÀN BỘ width data row vì group row chỉ có 1 cell.
115
+ */
116
+ sdGroupColspan: import("@angular/core").Signal<number>;
117
+ /** Build context object truyền vào SdTableGroupDefDirective template. */
118
+ groupContext: (header: SdTableItem<T>) => SdTableGroupDefContext<T>;
94
119
  rowStyle: (row: SdTableItem<T>, index?: number) => Record<string, string> | null;
95
120
  clearFilter: () => void;
96
121
  setFilter: (args: {
@@ -101,12 +126,12 @@ export declare class SdTable<T = unknown> extends SdBaseSecureComponent implemen
101
126
  get selectedItems(): T[];
102
127
  detectChanges: () => void;
103
128
  onColumnResize: (field: string, width: string) => void;
104
- onOperatorChange: (column: SdTableColumn, operator: SdOperator | undefined) => void;
129
+ onOperatorChange: (column: SdTableColumn, operator: Operator | undefined) => void;
105
130
  trackBy: (index: number, item: SdTableItem) => string;
106
131
  pageOffset: import("@angular/core").Signal<number>;
107
132
  isReorderDisabled(item: SdTableItem<T>): boolean;
108
133
  reorderSortPredicate: (index: number, drag: CdkDrag<SdTableItem<T>>, drop: CdkDropList<SdTableItem<T>[]>) => boolean;
109
134
  onReorderDrop(event: CdkDragDrop<SdTableItem<T>[]>): void;
110
135
  static ɵfac: i0.ɵɵFactoryDeclaration<SdTable<any>, never>;
111
- static ɵcmp: i0.ɵɵComponentDeclaration<SdTable<any>, "sd-table", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "option": { "alias": "option"; "required": true; "isSignal": true; }; }, {}, ["sdSubInformation", "sdCellDefs", "sdFooterDefs", "sdFilterDefs", "sdTitleDefs"], ["[sdTableTop]"], true, never>;
136
+ 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>;
112
137
  }