@sd-angular/core 19.0.9 → 19.0.10

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 (104) hide show
  1. package/README.md +1 -1
  2. package/assets/scss/core/utilities/_grid.scss +149 -143
  3. package/components/form-generic/src/components/form-builder/components/attribute-table/attribute-table.component.d.ts +2 -4
  4. package/components/form-generic/src/components/form-builder/components/attribute-template/attribute-template.component.d.ts +2 -4
  5. package/components/form-generic/src/components/form-builder/components/configure-validation/configure-validation.component.d.ts +5 -6
  6. package/components/form-generic/src/components/form-render/form-render.component.d.ts +4 -6
  7. package/components/form-generic/src/services/form-generic.service.d.ts +1 -3
  8. package/components/modal/src/modal.component.d.ts +1 -1
  9. package/components/tab-router/src/models/tab-router.model.d.ts +2 -1
  10. package/components/tab-router/src/services/tab-router.service.d.ts +0 -1
  11. package/components/table/src/components/command/desktop-command.component.d.ts +7 -7
  12. package/components/table/src/components/command/pipes/command.pipe.d.ts +1 -12
  13. package/components/table/src/components/command/pipes/filter.pipe.d.ts +1 -8
  14. package/components/table/src/components/filter/column-filter/column-filter.component.d.ts +1 -0
  15. package/components/table/src/models/table-column.model.d.ts +3 -2
  16. package/components/table/src/pipes/selection-disabled.pipe.d.ts +1 -1
  17. package/components/table/src/services/config.service.d.ts +4 -5
  18. package/fesm2022/sd-angular-core-components-anchor.mjs +14 -14
  19. package/fesm2022/sd-angular-core-components-anchor.mjs.map +1 -1
  20. package/fesm2022/sd-angular-core-components-autoid-inspector.mjs.map +1 -1
  21. package/fesm2022/sd-angular-core-components-avatar.mjs.map +1 -1
  22. package/fesm2022/sd-angular-core-components-badge.mjs.map +1 -1
  23. package/fesm2022/sd-angular-core-components-button.mjs.map +1 -1
  24. package/fesm2022/sd-angular-core-components-ckeditor-styles.mjs.map +1 -1
  25. package/fesm2022/sd-angular-core-components-code-editor.mjs.map +1 -1
  26. package/fesm2022/sd-angular-core-components-document-builder.mjs +0 -1
  27. package/fesm2022/sd-angular-core-components-document-builder.mjs.map +1 -1
  28. package/fesm2022/sd-angular-core-components-form-generic.mjs +37 -66
  29. package/fesm2022/sd-angular-core-components-form-generic.mjs.map +1 -1
  30. package/fesm2022/sd-angular-core-components-import-excel.mjs.map +1 -1
  31. package/fesm2022/sd-angular-core-components-inform.mjs.map +1 -1
  32. package/fesm2022/sd-angular-core-components-mini-editor.mjs.map +1 -1
  33. package/fesm2022/sd-angular-core-components-modal-resizable.mjs.map +1 -1
  34. package/fesm2022/sd-angular-core-components-modal.mjs.map +1 -1
  35. package/fesm2022/sd-angular-core-components-operator.mjs.map +1 -1
  36. package/fesm2022/sd-angular-core-components-org-chart.mjs.map +1 -1
  37. package/fesm2022/sd-angular-core-components-query-builder.mjs.map +1 -1
  38. package/fesm2022/sd-angular-core-components-quick-action.mjs.map +1 -1
  39. package/fesm2022/sd-angular-core-components-section.mjs.map +1 -1
  40. package/fesm2022/sd-angular-core-components-side-drawer.mjs.map +1 -1
  41. package/fesm2022/sd-angular-core-components-splitter.mjs.map +1 -1
  42. package/fesm2022/sd-angular-core-components-stepper.mjs.map +1 -1
  43. package/fesm2022/sd-angular-core-components-tab-router.mjs +31 -26
  44. package/fesm2022/sd-angular-core-components-tab-router.mjs.map +1 -1
  45. package/fesm2022/sd-angular-core-components-tab.mjs.map +1 -1
  46. package/fesm2022/sd-angular-core-components-table.mjs +47 -58
  47. package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
  48. package/fesm2022/sd-angular-core-components-tree.mjs.map +1 -1
  49. package/fesm2022/sd-angular-core-components-upload-file.mjs.map +1 -1
  50. package/fesm2022/sd-angular-core-directives.mjs +0 -1
  51. package/fesm2022/sd-angular-core-directives.mjs.map +1 -1
  52. package/fesm2022/sd-angular-core-forms-autocomplete.mjs.map +1 -1
  53. package/fesm2022/sd-angular-core-forms-chip-calendar.mjs.map +1 -1
  54. package/fesm2022/sd-angular-core-forms-chip.mjs.map +1 -1
  55. package/fesm2022/sd-angular-core-forms-date-range.mjs.map +1 -1
  56. package/fesm2022/sd-angular-core-forms-date.mjs.map +1 -1
  57. package/fesm2022/sd-angular-core-forms-datetime.mjs.map +1 -1
  58. package/fesm2022/sd-angular-core-forms-input-color.mjs.map +1 -1
  59. package/fesm2022/sd-angular-core-forms-input-number.mjs.map +1 -1
  60. package/fesm2022/sd-angular-core-forms-input.mjs.map +1 -1
  61. package/fesm2022/sd-angular-core-forms-radio.mjs.map +1 -1
  62. package/fesm2022/sd-angular-core-forms-select.mjs +45 -12
  63. package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
  64. package/fesm2022/sd-angular-core-forms-textarea.mjs.map +1 -1
  65. package/fesm2022/sd-angular-core-interceptors.mjs +0 -2
  66. package/fesm2022/sd-angular-core-interceptors.mjs.map +1 -1
  67. package/fesm2022/sd-angular-core-modules-auth.mjs +14 -38
  68. package/fesm2022/sd-angular-core-modules-auth.mjs.map +1 -1
  69. package/fesm2022/sd-angular-core-modules-layout.mjs +5 -12
  70. package/fesm2022/sd-angular-core-modules-layout.mjs.map +1 -1
  71. package/fesm2022/sd-angular-core-modules-permission.mjs +5 -12
  72. package/fesm2022/sd-angular-core-modules-permission.mjs.map +1 -1
  73. package/fesm2022/sd-angular-core-pipes.mjs +4 -12
  74. package/fesm2022/sd-angular-core-pipes.mjs.map +1 -1
  75. package/fesm2022/sd-angular-core-services-confirm.mjs +16 -21
  76. package/fesm2022/sd-angular-core-services-confirm.mjs.map +1 -1
  77. package/fesm2022/sd-angular-core-services-docx.mjs +1 -8
  78. package/fesm2022/sd-angular-core-services-docx.mjs.map +1 -1
  79. package/fesm2022/sd-angular-core-services-license.mjs +5 -12
  80. package/fesm2022/sd-angular-core-services-license.mjs.map +1 -1
  81. package/fesm2022/sd-angular-core-services-notify.mjs +70 -87
  82. package/fesm2022/sd-angular-core-services-notify.mjs.map +1 -1
  83. package/fesm2022/sd-angular-core-services-storage.mjs +4 -12
  84. package/fesm2022/sd-angular-core-services-storage.mjs.map +1 -1
  85. package/fesm2022/sd-angular-core-utilities-extensions.mjs +43 -1
  86. package/fesm2022/sd-angular-core-utilities-extensions.mjs.map +1 -1
  87. package/forms/select/src/select-footer-action.directive.d.ts +5 -1
  88. package/forms/select/src/select.component.d.ts +4 -0
  89. package/modules/auth/guards/auth.guard.d.ts +2 -4
  90. package/modules/auth/guards/portal.guard.d.ts +2 -4
  91. package/modules/auth/services/auth.service.d.ts +3 -4
  92. package/modules/layout/modules/home/guards/home-redirect.guard.d.ts +3 -5
  93. package/modules/permission/src/guards/permission.guard.d.ts +2 -5
  94. package/package.json +66 -66
  95. package/pipes/src/format-number.pipe.d.ts +1 -3
  96. package/sd-angular-core-19.0.10.tgz +0 -0
  97. package/services/confirm/src/lib/components/dialog-confirm/dialog-confirm.component.d.ts +3 -3
  98. package/services/license/src/license.service.d.ts +2 -3
  99. package/services/notify/src/components/toast/toast.component.d.ts +9 -13
  100. package/services/notify/src/notify.service.d.ts +4 -5
  101. package/services/storage/src/storage.service.d.ts +3 -4
  102. package/utilities/extensions/index.d.ts +1 -0
  103. package/utilities/extensions/src/object.extension.d.ts +8 -0
  104. package/sd-angular-core-19.0.9.tgz +0 -0
package/README.md CHANGED
@@ -667,7 +667,7 @@ import { Color } from '@sd-angular/core/utilities';
667
667
  @Component({
668
668
  selector: 'sd-my-component',
669
669
  templateUrl: './my-component.component.html',
670
- styleUrls: ['./my-component.component.scss'],
670
+ styleUrl: './my-component.component.scss',
671
671
  changeDetection: ChangeDetectionStrategy.OnPush,
672
672
  standalone: true,
673
673
  imports: [],
@@ -1,143 +1,149 @@
1
- // --------------------------------------------------------------------------
2
- // Grid — row/col 12-column flexbox + native CSS Grid container
3
- // Thuần CSS Flexbox / CSS Grid, không phụ thuộc framework ngoài.
4
- // Breakpoint convention (sm/md/lg/xl) trùng Bootstrap để host app dễ migrate.
5
- // --------------------------------------------------------------------------
6
-
7
- // --------------------------------------------------------------------------
8
- // 1. Flexbox row/col (.row, .col-{1-12})
9
- // --------------------------------------------------------------------------
10
- $grid-columns: 12;
11
- $grid-gutter: 16px;
12
-
13
- .row {
14
- display: flex;
15
- flex-wrap: wrap;
16
- margin-left: calc(-1 * $grid-gutter / 2);
17
- margin-right: calc(-1 * $grid-gutter / 2);
18
-
19
- > * {
20
- box-sizing: border-box;
21
- padding-left: calc($grid-gutter / 2);
22
- padding-right: calc($grid-gutter / 2);
23
- }
24
- }
25
-
26
- // Gutter variants
27
- .row-md {
28
- @extend .row;
29
- margin-left: -8px;
30
- margin-right: -8px;
31
- > * { padding-left: 8px; padding-right: 8px; }
32
- }
33
-
34
- .row-sm {
35
- @extend .row;
36
- margin-left: -4px;
37
- margin-right: -4px;
38
- > * { padding-left: 4px; padding-right: 4px; }
39
- }
40
-
41
- .row-xs {
42
- @extend .row;
43
- margin-left: -2px;
44
- margin-right: -2px;
45
- > * { padding-left: 2px; padding-right: 2px; }
46
- }
47
-
48
- // .col-1 … .col-12
49
- @for $i from 1 through $grid-columns {
50
- .col-#{$i} {
51
- box-sizing: border-box;
52
- width: percentage(calc($i / $grid-columns));
53
- flex: 0 0 percentage(calc($i / $grid-columns));
54
- max-width: percentage(calc($i / $grid-columns));
55
- padding-left: calc($grid-gutter / 2);
56
- padding-right: calc($grid-gutter / 2);
57
- }
58
- }
59
-
60
- .col {
61
- flex: 1 1 0%;
62
- padding-left: calc($grid-gutter / 2);
63
- padding-right: calc($grid-gutter / 2);
64
- }
65
-
66
- // --------------------------------------------------------------------------
67
- // 1b. Responsive columns
68
- // col-sm-{1-12} : ≥ 576px
69
- // col-md-{1-12} : ≥ 768px
70
- // col-lg-{1-12} : ≥ 992px
71
- // col-xl-{1-12} : 1200px
72
- //
73
- // Mobile-first: mặc định width: 100%, áp dụng kích thước khi đủ rộng.
74
- // --------------------------------------------------------------------------
75
- $grid-breakpoints: (
76
- 'sm': 576px,
77
- 'md': 768px,
78
- 'lg': 992px,
79
- 'xl': 1200px,
80
- );
81
-
82
- // col-{bp} — chiếm hết chiều rộng tại breakpoint đó
83
- @each $bp, $min-width in $grid-breakpoints {
84
- @media (min-width: $min-width) {
85
- .col-#{$bp} {
86
- flex: 1 1 0%;
87
- padding-left: calc($grid-gutter / 2);
88
- padding-right: calc($grid-gutter / 2);
89
- }
90
- }
91
- }
92
-
93
- // col-{bp}-{1-12} — chiếm n/12 chiều rộng tại breakpoint đó
94
- @each $bp, $min-width in $grid-breakpoints {
95
- @media (min-width: $min-width) {
96
- @for $i from 1 through $grid-columns {
97
- .col-#{$bp}-#{$i} {
98
- box-sizing: border-box;
99
- width: percentage(calc($i / $grid-columns));
100
- flex: 0 0 percentage(calc($i / $grid-columns));
101
- max-width: percentage(calc($i / $grid-columns));
102
- padding-left: calc($grid-gutter / 2);
103
- padding-right: calc($grid-gutter / 2);
104
- }
105
- }
106
- }
107
- }
108
-
109
- // --------------------------------------------------------------------------
110
- // 2. CSS Grid container (.grid-container)
111
- // grid-container + grid-cols-{1-12} + col-span-{1-12}
112
- // --------------------------------------------------------------------------
113
- .grid-container {
114
- display: grid;
115
- column-gap: 8px;
116
- row-gap: 0;
117
-
118
- @for $i from 1 through 12 {
119
- &.grid-cols-#{$i} {
120
- grid-template-columns: repeat($i, minmax(0, 1fr));
121
- }
122
- }
123
-
124
- @for $i from 1 through 12 {
125
- .col-span-#{$i} {
126
- grid-column: span #{$i} / span #{$i};
127
- }
128
- }
129
-
130
- .col-span-full {
131
- grid-column: 1 / -1;
132
- }
133
-
134
- @for $i from 1 through 12 {
135
- .row-span-#{$i} {
136
- grid-row: span #{$i} / span #{$i};
137
- }
138
- }
139
-
140
- .row-span-full {
141
- grid-row: 1 / -1;
142
- }
143
- }
1
+ @use "sass:math";
2
+
3
+ // --------------------------------------------------------------------------
4
+ // Grid - row/col 12-column flexbox + native CSS Grid container
5
+ // Pure CSS Flexbox / CSS Grid, with no external framework dependency.
6
+ // Breakpoint convention (sm/md/lg/xl) matches Bootstrap to ease host migration.
7
+ // --------------------------------------------------------------------------
8
+
9
+ // --------------------------------------------------------------------------
10
+ // 1. Flexbox row/col (.row, .col-{1-12})
11
+ // --------------------------------------------------------------------------
12
+ $grid-columns: 12;
13
+ $grid-gutter: 16px;
14
+
15
+ .row {
16
+ display: flex;
17
+ flex-wrap: wrap;
18
+ margin-left: calc(-1 * $grid-gutter / 2);
19
+ margin-right: calc(-1 * $grid-gutter / 2);
20
+
21
+ > * {
22
+ box-sizing: border-box;
23
+ padding-left: calc($grid-gutter / 2);
24
+ padding-right: calc($grid-gutter / 2);
25
+ }
26
+ }
27
+
28
+ // Gutter variants
29
+ .row-md {
30
+ @extend .row;
31
+ margin-left: -8px;
32
+ margin-right: -8px;
33
+ > * { padding-left: 8px; padding-right: 8px; }
34
+ }
35
+
36
+ .row-sm {
37
+ @extend .row;
38
+ margin-left: -4px;
39
+ margin-right: -4px;
40
+ > * { padding-left: 4px; padding-right: 4px; }
41
+ }
42
+
43
+ .row-xs {
44
+ @extend .row;
45
+ margin-left: -2px;
46
+ margin-right: -2px;
47
+ > * { padding-left: 2px; padding-right: 2px; }
48
+ }
49
+
50
+ // .col-1 ... .col-12
51
+ @for $i from 1 through $grid-columns {
52
+ $col-size: math.percentage(math.div($i, $grid-columns));
53
+
54
+ .col-#{$i} {
55
+ box-sizing: border-box;
56
+ width: $col-size;
57
+ flex: 0 0 $col-size;
58
+ max-width: $col-size;
59
+ padding-left: calc($grid-gutter / 2);
60
+ padding-right: calc($grid-gutter / 2);
61
+ }
62
+ }
63
+
64
+ .col {
65
+ flex: 1 1 0%;
66
+ padding-left: calc($grid-gutter / 2);
67
+ padding-right: calc($grid-gutter / 2);
68
+ }
69
+
70
+ // --------------------------------------------------------------------------
71
+ // 1b. Responsive columns
72
+ // col-sm-{1-12}: >= 576px
73
+ // col-md-{1-12}: >= 768px
74
+ // col-lg-{1-12}: >= 992px
75
+ // col-xl-{1-12}: >= 1200px
76
+ //
77
+ // Mobile-first: default width is 100%; column size applies from breakpoint up.
78
+ // --------------------------------------------------------------------------
79
+ $grid-breakpoints: (
80
+ 'sm': 576px,
81
+ 'md': 768px,
82
+ 'lg': 992px,
83
+ 'xl': 1200px,
84
+ );
85
+
86
+ // col-{bp} - full-width flexible column at the breakpoint
87
+ @each $bp, $min-width in $grid-breakpoints {
88
+ @media (min-width: $min-width) {
89
+ .col-#{$bp} {
90
+ flex: 1 1 0%;
91
+ padding-left: calc($grid-gutter / 2);
92
+ padding-right: calc($grid-gutter / 2);
93
+ }
94
+ }
95
+ }
96
+
97
+ // col-{bp}-{1-12} - n/12 column width at the breakpoint
98
+ @each $bp, $min-width in $grid-breakpoints {
99
+ @media (min-width: $min-width) {
100
+ @for $i from 1 through $grid-columns {
101
+ $col-size: math.percentage(math.div($i, $grid-columns));
102
+
103
+ .col-#{$bp}-#{$i} {
104
+ box-sizing: border-box;
105
+ width: $col-size;
106
+ flex: 0 0 $col-size;
107
+ max-width: $col-size;
108
+ padding-left: calc($grid-gutter / 2);
109
+ padding-right: calc($grid-gutter / 2);
110
+ }
111
+ }
112
+ }
113
+ }
114
+
115
+ // --------------------------------------------------------------------------
116
+ // 2. CSS Grid container (.grid-container)
117
+ // grid-container + grid-cols-{1-12} + col-span-{1-12}
118
+ // --------------------------------------------------------------------------
119
+ .grid-container {
120
+ display: grid;
121
+ column-gap: 8px;
122
+ row-gap: 0;
123
+
124
+ @for $i from 1 through 12 {
125
+ &.grid-cols-#{$i} {
126
+ grid-template-columns: repeat($i, minmax(0, 1fr));
127
+ }
128
+ }
129
+
130
+ @for $i from 1 through 12 {
131
+ .col-span-#{$i} {
132
+ grid-column: span #{$i} / span #{$i};
133
+ }
134
+ }
135
+
136
+ .col-span-full {
137
+ grid-column: 1 / -1;
138
+ }
139
+
140
+ @for $i from 1 through 12 {
141
+ .row-span-#{$i} {
142
+ grid-row: span #{$i} / span #{$i};
143
+ }
144
+ }
145
+
146
+ .row-span-full {
147
+ grid-row: 1 / -1;
148
+ }
149
+ }
@@ -1,11 +1,9 @@
1
1
  import { EventEmitter } from '@angular/core';
2
2
  import { FormGroup } from '@angular/forms';
3
3
  import { SdModal } from '@sd-angular/core/components/modal';
4
- import { ISdFormGenericConfiguration } from '../../../../configurations';
5
4
  import { SdFormGenericComponent, SdFormGenericDefinitionTable, SdFormGenericGroup, SdFormGenericTableColumn, SdFormGenericVariable } from '../../../../models';
6
5
  import * as i0 from "@angular/core";
7
6
  export declare class AttributeTable {
8
- private formGenericConfiguration;
9
7
  modal?: SdModal;
10
8
  form: FormGroup<{}>;
11
9
  components: (SdFormGenericComponent | SdFormGenericGroup)[];
@@ -13,6 +11,7 @@ export declare class AttributeTable {
13
11
  columnsKey?: string;
14
12
  set _columnsKey(columnsKey: string | undefined | null);
15
13
  columnsKeyChange: EventEmitter<string>;
14
+ private readonly formGenericConfiguration;
16
15
  tables: SdFormGenericDefinitionTable[];
17
16
  types: {
18
17
  value: string;
@@ -22,7 +21,6 @@ export declare class AttributeTable {
22
21
  set _columns(columns: SdFormGenericTableColumn[] | undefined | null);
23
22
  columnsChange: EventEmitter<SdFormGenericTableColumn[]>;
24
23
  column?: SdFormGenericTableColumn;
25
- constructor(formGenericConfiguration: ISdFormGenericConfiguration | null);
26
24
  onChangeColumnsKey: (value: any) => void;
27
25
  addColumn: () => void;
28
26
  readonly columnTypeIcons: Record<string, string>;
@@ -31,6 +29,6 @@ export declare class AttributeTable {
31
29
  editColumn: (idx: number) => void;
32
30
  removeColumn: (idx: number) => void;
33
31
  onConfirm: () => void;
34
- static ɵfac: i0.ɵɵFactoryDeclaration<AttributeTable, [{ optional: true; }]>;
32
+ static ɵfac: i0.ɵɵFactoryDeclaration<AttributeTable, never>;
35
33
  static ɵcmp: i0.ɵɵComponentDeclaration<AttributeTable, "attribute-table", never, { "components": { "alias": "components"; "required": true; }; "variables": { "alias": "variables"; "required": true; }; "_columnsKey": { "alias": "columnsKey"; "required": true; }; "_columns": { "alias": "columns"; "required": true; }; }, { "columnsKeyChange": "columnsKeyChange"; "columnsChange": "columnsChange"; }, never, never, true, never>;
36
34
  }
@@ -1,15 +1,13 @@
1
1
  import { EventEmitter } from '@angular/core';
2
- import { ISdFormGenericConfiguration } from '../../../../configurations';
3
2
  import { SdFormGenericComponent, SdFormGenericTemplate } from '../../../../models';
4
3
  import * as i0 from "@angular/core";
5
4
  export declare class AttributeTemplate {
6
- private formGenericConfiguration;
7
5
  templates: SdFormGenericTemplate[];
8
6
  component: SdFormGenericComponent;
9
7
  set _component(component: SdFormGenericComponent);
10
8
  sdChange: EventEmitter<SdFormGenericComponent>;
11
- constructor(formGenericConfiguration: ISdFormGenericConfiguration | null);
9
+ private readonly formGenericConfiguration;
12
10
  onChange: (value: string | number | null) => void;
13
- static ɵfac: i0.ɵɵFactoryDeclaration<AttributeTemplate, [{ optional: true; }]>;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<AttributeTemplate, never>;
14
12
  static ɵcmp: i0.ɵɵComponentDeclaration<AttributeTemplate, "attribute-template", never, { "_component": { "alias": "component"; "required": true; }; }, { "sdChange": "sdChange"; }, never, never, true, never>;
15
13
  }
@@ -1,14 +1,11 @@
1
- import { ChangeDetectorRef, EventEmitter } from '@angular/core';
1
+ import { EventEmitter } from '@angular/core';
2
2
  import { FormGroup } from '@angular/forms';
3
3
  import { SdModal } from '@sd-angular/core/components/modal';
4
- import { ISdFormGenericConfiguration } from '../../../../configurations';
5
4
  import { Attribute } from '../../../../models';
6
5
  import { SdFormGenericValidation, SdFormGenericValidationFunction } from '../../../../models/form-generic-validation.model';
7
6
  import { SdFormGeneric } from '../../../../models/form-generic.model';
8
7
  import * as i0 from "@angular/core";
9
8
  export declare class ConfigureValidationComponent {
10
- private ref;
11
- private formGenericConfiguration;
12
9
  modal?: SdModal;
13
10
  form: FormGroup<{}>;
14
11
  attributes: Attribute[];
@@ -19,13 +16,15 @@ export declare class ConfigureValidationComponent {
19
16
  display: string;
20
17
  }[];
21
18
  accept: EventEmitter<SdFormGenericValidation[]>;
22
- constructor(ref: ChangeDetectorRef, formGenericConfiguration: ISdFormGenericConfiguration | null);
19
+ private readonly ref;
20
+ private readonly formGenericConfiguration;
21
+ constructor();
23
22
  ngAfterViewInit(): void;
24
23
  ngOnDestroy(): void;
25
24
  open: (formGeneric: SdFormGeneric) => void;
26
25
  addValidation: (type: SdFormGenericValidation["type"]) => void;
27
26
  removaValidation: (index: number) => void;
28
27
  updateValidations: () => void;
29
- static ɵfac: i0.ɵɵFactoryDeclaration<ConfigureValidationComponent, [null, { optional: true; }]>;
28
+ static ɵfac: i0.ɵɵFactoryDeclaration<ConfigureValidationComponent, never>;
30
29
  static ɵcmp: i0.ɵɵComponentDeclaration<ConfigureValidationComponent, "configure-validation", never, {}, { "accept": "accept"; }, never, never, true, never>;
31
30
  }
@@ -1,15 +1,12 @@
1
- import { AfterViewInit, ChangeDetectorRef, OnDestroy, QueryList } from '@angular/core';
1
+ import { AfterViewInit, OnDestroy, QueryList } from '@angular/core';
2
2
  import { FormGroup } from '@angular/forms';
3
3
  import { Subject } from 'rxjs';
4
- import { ISdFormGenericConfiguration } from '../../configurations';
5
4
  import { SdFormRenderConfiguration } from '../../models';
6
5
  import { SdFormGenericValidation } from '../../models/form-generic-validation.model';
7
6
  import { LibItemComponent } from './components';
8
7
  import * as i0 from "@angular/core";
9
8
  export declare class SdFormRender implements OnDestroy, AfterViewInit {
10
9
  #private;
11
- private ref;
12
- private formGenericConfiguration;
13
10
  formRenderItems: QueryList<LibItemComponent>;
14
11
  form: FormGroup;
15
12
  configuration: SdFormRenderConfiguration;
@@ -28,11 +25,12 @@ export declare class SdFormRender implements OnDestroy, AfterViewInit {
28
25
  key: string;
29
26
  value: any;
30
27
  }>;
31
- constructor(ref: ChangeDetectorRef, formGenericConfiguration: ISdFormGenericConfiguration | null);
28
+ private readonly ref;
29
+ private readonly formGenericConfiguration;
32
30
  ngAfterViewInit(): void;
33
31
  ngOnDestroy(): void;
34
32
  upload: () => Promise<void>;
35
33
  getValidationMessages: (alert: SdFormGenericValidation["alert"]) => Promise<string[] | undefined>;
36
- static ɵfac: i0.ɵɵFactoryDeclaration<SdFormRender, [null, { optional: true; }]>;
34
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdFormRender, never>;
37
35
  static ɵcmp: i0.ɵɵComponentDeclaration<SdFormRender, "sd-form-render", never, { "form": { "alias": "form"; "required": false; }; "_configuration": { "alias": "configuration"; "required": true; }; "_default": { "alias": "defaultEntity"; "required": false; }; "_entity": { "alias": "entity"; "required": false; }; "_properties": { "alias": "properties"; "required": false; }; "_viewed": { "alias": "viewed"; "required": false; }; }, {}, never, never, true, never>;
38
36
  }
@@ -1,11 +1,9 @@
1
1
  import { SdSearch } from '@sd-angular/core/forms';
2
- import { ISdFormGenericConfiguration } from '../configurations';
3
2
  import { SdFormGenericArgs, SdFormGenericDefinitionHtml, SdFormGenericDefinitionSelection, SdFormGenericSelectionItem } from '../models';
4
3
  import * as i0 from "@angular/core";
5
4
  export declare class FormGenericService {
6
5
  #private;
7
6
  private readonly configuration;
8
- constructor(configuration: ISdFormGenericConfiguration);
9
7
  get selections(): (() => Promise<SdFormGenericDefinitionSelection[]>) | SdFormGenericDefinitionSelection<any, any>[] | (() => SdFormGenericDefinitionSelection<any, any>[]);
10
8
  get tables(): import("@sd-angular/core/components/form-generic").SdFormGenericDefinitionTable<any>[];
11
9
  getSelection: (valuesKey: string | undefined | null) => Promise<SdFormGenericDefinitionSelection | undefined>;
@@ -21,6 +19,6 @@ export declare class FormGenericService {
21
19
  definitions: () => Promise<SdFormGenericDefinitionHtml[]>;
22
20
  getContent: (template: string, query?: Record<string, any>) => Promise<string>;
23
21
  };
24
- static ɵfac: i0.ɵɵFactoryDeclaration<FormGenericService, [{ optional: true; }]>;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<FormGenericService, never>;
25
23
  static ɵprov: i0.ɵɵInjectableDeclaration<FormGenericService>;
26
24
  }
@@ -15,7 +15,7 @@ export declare class SdModal {
15
15
  width: import("@angular/core").InputSignalWithTransform<string, string | null | undefined>;
16
16
  height: import("@angular/core").InputSignalWithTransform<string, string | null | undefined>;
17
17
  view: import("@angular/core").InputSignalWithTransform<"dialog" | "bottom-sheet" | undefined, "dialog" | "bottom-sheet" | null | undefined>;
18
- modalClass: import("@angular/core").InputSignalWithTransform<string | string[] | Record<string, boolean>, string | string[] | Record<string, boolean> | null | undefined>;
18
+ modalClass: import("@angular/core").InputSignalWithTransform<string | Record<string, boolean> | string[], string | Record<string, boolean> | string[] | null | undefined>;
19
19
  lazyLoadContent: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
20
20
  hideClose: import("@angular/core").InputSignalWithTransform<boolean, boolean | "">;
21
21
  disableBackdropClose: import("@angular/core").InputSignalWithTransform<boolean, boolean | "">;
@@ -1,4 +1,4 @@
1
- import { Type } from '@angular/core';
1
+ import { InjectionToken, Type } from '@angular/core';
2
2
  import { Color } from '@sdcorejs/utils/models';
3
3
  import { Subject } from 'rxjs';
4
4
  export interface SdTabInfo {
@@ -19,3 +19,4 @@ export interface SdTab {
19
19
  tabInfoChanges: Subject<SdTabInfo>;
20
20
  beforeClose?: () => boolean | Promise<boolean>;
21
21
  }
22
+ export declare const SD_TAB: InjectionToken<SdTab>;
@@ -13,7 +13,6 @@ export declare class SdTabRouterService {
13
13
  currentTabChanges: BehaviorSubject<SdTab | undefined>;
14
14
  newTabs: BehaviorSubject<SdTab | undefined>;
15
15
  updateTabs: BehaviorSubject<SdTab | undefined>;
16
- constructor();
17
16
  addBuilder: (builder: SdTabComponentBuilder) => void;
18
17
  get currentTab(): SdTab | undefined;
19
18
  get currentKey(): string | null;
@@ -2,13 +2,13 @@ import { SdTableCommand } from '../../models/table-command.model';
2
2
  import { SdTableItem } from '../../models/table-item.model';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class DesktopCommand {
5
- autoIdInput: import("@angular/core").InputSignal<string | null | undefined>;
6
- item: import("@angular/core").InputSignal<SdTableItem<any>>;
7
- itemIndex: import("@angular/core").InputSignal<number>;
8
- commands: import("@angular/core").InputSignal<SdTableCommand[] | null | undefined>;
9
- itemKey: import("@angular/core").Signal<string>;
10
- autoId: import("@angular/core").Signal<string>;
11
- _commands: import("@angular/core").Signal<SdTableCommand[]>;
5
+ readonly autoIdInput: import("@angular/core").InputSignal<string | null | undefined>;
6
+ readonly item: import("@angular/core").InputSignal<SdTableItem<any>>;
7
+ readonly itemIndex: import("@angular/core").InputSignal<number>;
8
+ readonly commands: import("@angular/core").InputSignal<SdTableCommand[] | null | undefined>;
9
+ readonly itemKey: import("@angular/core").Signal<string>;
10
+ readonly autoId: import("@angular/core").Signal<string>;
11
+ readonly _commands: import("@angular/core").Signal<SdTableCommand[]>;
12
12
  static ɵfac: i0.ɵɵFactoryDeclaration<DesktopCommand, never>;
13
13
  static ɵcmp: i0.ɵɵComponentDeclaration<DesktopCommand, "desktop-command", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "item": { "alias": "item"; "required": true; "isSignal": true; }; "itemIndex": { "alias": "itemIndex"; "required": true; "isSignal": true; }; "commands": { "alias": "commands"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
14
14
  }
@@ -3,18 +3,7 @@ import { SdTableCommand } from '../../../models/table-command.model';
3
3
  import { SdTableItem } from '../../../models/table-item.model';
4
4
  import * as i0 from "@angular/core";
5
5
  /**
6
- * Pipe gộp resolve metadata của 1 command theo row hiện tại return 1 object
7
- * chứa `disabled`, `title`, `icon`, và `htmlTemplate` (khi command là child có
8
- * htmlTemplate). Một lần gọi cho cả 4 truy vấn, template dùng `@let` để alias.
9
- *
10
- * Trước đây tách thành 3 pipe `commandDisable` / `commandTitle` / `commandIcon`.
11
- *
12
- * @example
13
- * @let meta = item | command:cmd;
14
- * <button [disabled]="meta.disabled" [matTooltip]="meta.title">
15
- * <mat-icon>{{ meta.icon }}</mat-icon>
16
- * <div [innerHTML]="meta.htmlTemplate"></div>
17
- * </button>
6
+ * Resolves command metadata for the current row once, then lets the template reuse it with `@let`.
18
7
  */
19
8
  export declare class CommandPipe implements PipeTransform {
20
9
  #private;
@@ -3,14 +3,7 @@ import { SdTableCommand, SdTableCommandChildren, SdTableCommandNormal } from '..
3
3
  import { SdTableItem } from '../../../models/table-item.model';
4
4
  import * as i0 from "@angular/core";
5
5
  /**
6
- * Lọc danh sách commands theo `hidden` (sync / async) + pre-resolve `icon`, `title`, `key`
7
- * cho từng row. Output dùng trực tiếp trong template không cần thêm pipe phụ.
8
- *
9
- * Đã rename từ `commandFilter` → `filter` sau khi gom toàn bộ pipe command vào
10
- * `components/command/pipes/`.
11
- *
12
- * @example
13
- * @let filteredCommands = item | filter:commands | async;
6
+ * Filters visible commands and pre-resolves icon, title, and stable key for the current row.
14
7
  */
15
8
  export declare class CommandFilterPipe implements PipeTransform {
16
9
  #private;
@@ -4,6 +4,7 @@ import { Operator } from '@sdcorejs/utils/models';
4
4
  import { SdTableColumn } from '../../../models/table-column.model';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class ColumnFilterComponent {
7
+ #private;
7
8
  autoIdInput: import("@angular/core").InputSignal<string | null | undefined>;
8
9
  column: import("@angular/core").InputSignal<SdTableColumn>;
9
10
  columnFilter: import("@angular/core").InputSignal<Record<string, any>>;
@@ -45,6 +45,7 @@ interface SdTableColumnBase<T = any> {
45
45
  filter?: {
46
46
  disabled?: boolean;
47
47
  default?: any;
48
+ onChange?: (value: any, column?: SdTableColumn<T>, columnFilter?: Record<string, any>) => void;
48
49
  operator?: {
49
50
  default?: Operator;
50
51
  enable?: boolean;
@@ -66,7 +67,7 @@ interface SdTableColumnNumber<T = any> extends SdTableColumnBase<T> {
66
67
  field: NestedKeyOf<T>;
67
68
  type: 'number';
68
69
  useBadge?: UseBadgeFunc<T>;
69
- filter?: SdTableColumnBase['filter'] & {
70
+ filter?: SdTableColumnBase<T>['filter'] & {
70
71
  type?: 'split-number';
71
72
  };
72
73
  }
@@ -83,7 +84,7 @@ interface SdTableColumnDate<T = any> extends SdTableColumnBase<T> {
83
84
  field: NestedKeyOf<T>;
84
85
  type: 'date' | 'datetime' | 'time';
85
86
  useBadge?: UseBadgeFunc<T>;
86
- filter?: SdTableColumnBase['filter'] & {
87
+ filter?: SdTableColumnBase<T>['filter'] & {
87
88
  type?: 'daterange' | 'date' | 'split-date';
88
89
  };
89
90
  }
@@ -3,7 +3,7 @@ import { SdTableOptionSelector } from '../models/table-option-selector.model';
3
3
  import { SdTableItem } from '../models/table-item.model';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class SdSelectionDisabledPipe implements PipeTransform {
6
- transform: (selectedItems: SdTableItem[], rowData: SdTableItem, selection: SdTableOptionSelector) => boolean;
6
+ transform: <T>(selectedItems: SdTableItem<T>[], rowData: SdTableItem<T>, selection: SdTableOptionSelector<T>) => boolean;
7
7
  static ɵfac: i0.ɵɵFactoryDeclaration<SdSelectionDisabledPipe, never>;
8
8
  static ɵpipe: i0.ɵɵPipeDeclaration<SdSelectionDisabledPipe, "selectionDisabled", true>;
9
9
  }
@@ -1,21 +1,20 @@
1
- import { SdStorage, SdStorageService } from '@sd-angular/core/services';
1
+ import { SdStorage } from '@sd-angular/core/services';
2
2
  import { ConfiguredTable, ConfiguredTableResult } from '../models/table-option-config.model';
3
3
  import { SdTableOption } from '../models/table-option.model';
4
4
  import { ISdTableConfiguration } from '../configurations';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class ConfigService {
7
7
  #private;
8
- private storageService;
9
- tableConfiguration: ISdTableConfiguration;
10
8
  widthChange$: import("rxjs").Observable<{
11
9
  field: string;
12
10
  width: string;
13
11
  }>;
14
- constructor(storageService: SdStorageService, tableConfiguration: ISdTableConfiguration);
12
+ private readonly storageService;
13
+ readonly tableConfiguration: ISdTableConfiguration | null;
15
14
  loadConfiguredTable: (option: SdTableOption) => ConfiguredTable;
16
15
  loadConfigurationResult: (option: SdTableOption, configuration: ConfiguredTable) => ConfiguredTableResult;
17
16
  init: (tableOption: SdTableOption) => SdStorage<ConfiguredTable>;
18
17
  persistColumnWidth: (field: string, width: string) => void;
19
- static ɵfac: i0.ɵɵFactoryDeclaration<ConfigService, [null, { optional: true; }]>;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<ConfigService, never>;
20
19
  static ɵprov: i0.ɵɵInjectableDeclaration<ConfigService>;
21
20
  }